VIDEO: MultiCharts vs. NinjaTrader strategy backtesting and optimization - MultiCharts | futures io social day trading
futures io futures trading


VIDEO: MultiCharts vs. NinjaTrader strategy backtesting and optimization
Updated: Views / Replies:31,144 / 53
Created: by Big Mike Attachments:0

Welcome to futures io.

(If you already have an account, login at the top of the page)

futures io is the largest futures trading community on the planet, with over 90,000 members. At futures io, our goal has always been and always will be to create a friendly, positive, forward-thinking community where members can openly share and discuss everything the world of trading has to offer. The community is one of the friendliest you will find on any subject, with members going out of their way to help others. Some of the primary differences between futures io and other trading sites revolve around the standards of our community. Those standards include a code of conduct for our members, as well as extremely high standards that govern which partners we do business with, and which products or services we recommend to our members.

At futures io, our focus is on quality education. No hype, gimmicks, or secret sauce. The truth is: trading is hard. To succeed, you need to surround yourself with the right support system, educational content, and trading mentors – all of which you can find on futures io, utilizing our social trading environment.

With futures io, you can find honest trading reviews on brokers, trading rooms, indicator packages, trading strategies, and much more. Our trading review process is highly moderated to ensure that only genuine users are allowed, so you don’t need to worry about fake reviews.

We are fundamentally different than most other trading sites:
  • We are here to help. Just let us know what you need.
  • We work extremely hard to keep things positive in our community.
  • We do not tolerate rude behavior, trolling, or vendors advertising in posts.
  • We firmly believe in and encourage sharing. The holy grail is within you, we can help you find it.
  • We expect our members to participate and become a part of the community. Help yourself by helping others.

You'll need to register in order to view the content of the threads and start contributing to our community.  It's free and simple.

-- Big Mike, Site Administrator

Reply
 
Thread Tools Search this Thread
 

VIDEO: MultiCharts vs. NinjaTrader strategy backtesting and optimization

  #1 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received

VIDEO: MultiCharts vs. NinjaTrader strategy backtesting and optimization

In this video I conducted a head-to-head comparison of MultiCharts and NinjaTrader evaluating which performed better for backtesting and optimization.

The data was provided by IQFeed, for ES S&P 500, 5-minute bars over a period of 2 years (3/22/2008 to 3/22/2010). RTH market hours were used. Where possible, every setting was exactly duplicated in both NinjaTrader and MultiCharts.

The latest version of both platforms was used:
- MultiCharts 6.0 beta 2
- NinjaTrader 7 beta 11

Before we begin, you need to know a few things. First, if I made any mistakes here it was not intentional and if you should feel free to correct me. Second, this video and the below post summarizes how I feel. Keyword being "I". Each trader has their own method and everyone has their own ideas of what is important and what isn't. I've focused on what I know, and what is important to me. It may have little relevance to you, or you may find that things I have left out that mean nothing to me in fact mean much to you.

Here is the video comparison, remember to watch in HD mode and full screen for best viewing:



Here is the MultiCharts EasyLanguage code for the sample backtest (25 lines of code):
 
Code
                            
inputs:
    
ma1len    ),
    
ma2len    34 ),
    
ma3len    55 ),
    
ma4len    ),
    
ccilen    14 );
    
vars:
    
ma1v    ),
    
ma2v    ),
    
ma3v    ),
    
ma4v    ),
    
cciv    );
    
ma1v    Average(Closema1len);
ma2v    XAverage(Closema2len);
ma3v    WAverage(Closema3len);
ma4v    Average(ma1v+ma2v+ma3vma4len);
cciv    CCI(ccilen);

condition1 ma4v ma4v[1] and cciv 0;
condition2 ma4v ma4v[1] and cciv 0;

if 
condition1 then Buy 1 Contract Next Bar At Market;
if 
condition2 then Sellshort 1 Contract Next Bar At Market
Here is the NinjaTrader NinjaScript code for the sample backtest (105 lines of code):
 
Code
                            
#region Using declarations
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Data;
using NinjaTrader.Indicator;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Strategy;
#endregion

// This namespace holds all strategies and is required. Do not change it.
namespace NinjaTrader.Strategy
{
    
/// <summary>
    /// Enter the description of your strategy here
    /// </summary>
    
[Description("futures.io (formerly BMT)test")]
    public class 
futures.io (formerly BMT)test Strategy
    
{
        private 
int    ma1len    9;
        private 
int ma2len    34;
        private 
int ma3len    55;
        private 
int ma4len     9;
        private 
int ccilen    14;
        
        private 
DataSeries ma4vds;

        private 
double ma1v,ma2v,ma3v,ma4v,ma4v1,cciv;
            
        
/// <summary>
        /// This method is used to configure the strategy and is called once before any strategy method is called.
        /// </summary>
        
protected override void Initialize()
        {
            
CalculateOnBarClose true;
            
            
ma4vds    = new DataSeries(this);
        }

        
/// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        
protected override void OnBarUpdate()
        {
            if (
CurrentBar 2) return;
            
            
            
ma1v    SMA(CloseMA1len)[0];
            
ma2v    EMA(CloseMA2len)[0];
            
ma3v    WMA(CloseMA3len)[0];
            
            
ma4vds.Set(ma1v ma2v ma3v);
            
            
ma4v1    ma4v;
            
ma4v    SMA(ma4vdsMA4len)[0];
            
            
cciv    CCI(CCIlen)[0];
            
            
            if (
ma4v ma4v1 && cciv 0EnterLong();
            if (
ma4v ma4v1 && cciv 0EnterShort();
        }

        
#region Properties
        
[Description("")]
        [
GridCategory("Parameters")]
        public 
int MA1len
        
{
            
get { return ma1len; }
            
set ma1len Math.Max(1value); }
        }
        [
Description("")]
        [
GridCategory("Parameters")]
        public 
int MA2len
        
{
            
get { return ma2len; }
            
set ma2len Math.Max(1value); }
        }
        [
Description("")]
        [
GridCategory("Parameters")]
        public 
int MA3len
        
{
            
get { return ma3len; }
            
set ma3len Math.Max(1value); }
        }
        [
Description("")]
        [
GridCategory("Parameters")]
        public 
int MA4len
        
{
            
get { return ma4len; }
            
set ma4len Math.Max(1value); }
        }
        [
Description("")]
        [
GridCategory("Parameters")]
        public 
int CCIlen
        
{
            
get { return ccilen; }
            
set ccilen Math.Max(1value); }
        }
        
#endregion
    
}

With the NinjaTrader test I ran it a second time in the video, as I noticed the first time I left "Exit on close" set to true. By default, MultiCharts does not exit on close. So I re-ran NT's backtest with exit on close to false to try to duplicate everything as closely as possible. The results below are based on "pass 2" in the NinjaTrader test.

My rig is a Core i7 920 overclocked to 4ghz with 12GB of ram, hardware RAID 3Ware 9690SA with (4) 750GB drives in a RAID 0+1, running Windows 7 x64. No antivirus and minimal background processes were running during the test.

Raw execution speed:
MultiCharts 6.0 beta 2: 6m 50s
NinjaTrader 7 beta 11: 6m 55s

Platform features:
MultiCharts has IOG (intrabar order generation) which allows it to submit orders intrabar. This is equivalent to NinjaTrader's "calculate on bar close = false", but without all the nasty side effects and repercussions that one must suffer through when using COBC=false in NT. An example would be on a 5-minute bar, MultiCharts can look intrabar and see that your condition (in this case, our moving averages and CCI) were met intrabar (say on minute 3 out of 5) and submit an order without waiting for the bar to close.

NinjaTrader is not capable of submitting intrabar orders in backtesting. Live strategies can submit intrabar orders using calculate bar close = false. Trying to simulate IOG within a backtestable strategy in NinjaTrader requires writing custom code to use MTF and try to work-around the problem, and it adds a great deal of complexity, plus MTF doesn't even work in current beta's of NinjaTrader.

MultiCharts also has Bar Magnifier. This allows MultiCharts to more accurately determine the OHLC (open/high/low/close) for each bar. If you are using a 5 minute bar but have enabled Bar Magnifier, you can select an improved resolution such as 1 minute, or even 1 tick, so you can accurately know the OHLC order. Why is this important? Without it knowing the OHLC, if your strategy enters on the Close of the prior bar and has a profit target that falls within the High of the current bar but also has a stop that falls within the low of the current bar, how is the platform to know if the trade was a winner or loser? Was the high made before the low, or vice versa? One condition would cause a winner, and one condition would cause a loser. MultiCharts has the solution with Bar Magnifier. With bar magnifier turned off, MultiChart's is set to assume the worst-case scenario, which is far better than assuming the best case and then being in for a rude awakening when running the strategy live.

NinjaTrader assumes the best case scenario. If the high of the bar is higher than your profit target, then your profit target will be met. The only way to try to work around this is to again develop a custom complex strategy that uses MTF and submits orders to a smaller time frame but manages entry signals from the larger original time frame.

MultiCharts has far superior reporting capabilities. The backtest performance report is far more detailed and has loads more information. You can also export it to Excel with far more detail than what NinjaTrader offers in its export.

NinjaTrader does have one nice feature MultiCharts is lacking, the ability to narrow the report down by hour (say 8am-9am) so you can see what time periods during the day your strategy performs at its best and at its worse. Nicely done. I'll be making a feature request to MultiCharts to add this.

The language behind the strategy:
All the fancy features in the world won't help if your platform simply cannot be made to do what you want. MultiCharts uses EasyLanguage, which is obviously widely used by TradeStation. On the other side of the ring is NinjaTrader which uses C#.

I've always been a programmer and have learned many languages, all self taught. But I don't think I am the norm when it comes to successful traders. And in fact, I think for the most part a computer geek that knows how to program probably makes a poor trader, because their time is spent wrapped up in code and not in psychology -- where the real money is at

Alright, so EasyLanguage is just that - easy. I've picked up all the basics in about two days. It's intuitive. In fact, it's so intuitive I've often be struck and just how easy it is. Not easy as in simple, but easy as in -- in just works!

On the other hand, C# is incredibly powerful. If you want your Ninja strategy to use neural networks, land on the moon, cook you breakfast and not even break a sweat, then C# is the way to go.

But what if you could have both? In essence, MultiCharts lets you do both because you can use external DLL's which means your EasyLanguage indicators can call and reference C# DLL's!

I know that there is a die hard debate of EasyLanguage vs. C#. But having used both now, I don't think there is a clear winner. The right choice will be decided by what the individual traders needs are and what they are trying to accomplish. My final advice on this topic is this: more complex is rarely better.

Usefulness of backtest, which is what it's all about, right?:
With MultiChart's IOG (intrabar order generation) and Bar Magnifier, I find myself only interested in the MultiChart's backtest results.

Since NinjaTrader has neither feature, you are left with either accepting known-faulty results, or trying to write an extremely complex MTF strategy to work around these limitations and get you to the end result you want. Writing MTF strategies is very complex, and doesn't even work in the latest beta's of NinjaTrader.

Final comments:
In my opinion, MultiChart's is the clear victor. But, I am not happy that MultiChart's soundly trounced NinjaTrader. I own NinjaTrader and have been a diehard fan. But in the last two years the NT7 snafu has just left me flabbergasted and sickened. There are only so many times you can hear "we're unable to duplicate that" and be treated like you are the only person experiencing problems before you just give up. The same is true of "we'll add that to our list of considerations". After two years of waiting, NT7 still doesn't address half of the things I felt were important, and instead adds dozens of things that were meaningless to me, and even removes some functionality that used to be there!

Competition is good, and I think that NT7 has been a very humbling experience for the NinjaTrader executive team. If they can recover, then they hopefully won't make the same mistakes again. The competition is catching up quickly, and MultiCharts 6.0 is just the beginning. MultiCharts plans to release v7.0 of their product around the end of June 2010, and TradeStation 9 is also coming soon. No one is standing still, and in the end, traders win.

You can find more discussion on MultiCharts here:
https://futures.io/platforms-indicators/2698-multicharts-multicharts-multicharts.html

You can find more discussion on NinjaTrader here:
https://futures.io/platforms-indicators/980-truth-ninjatrader.html

I encourage and welcome you to post your own reviews. I have focused on what is important to me so I am biased in that regard, and you will focus on what is important to you. Hopefully with enough information people can make some education decisions without having to go through all the leg work.

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
 
  #2 (permalink)
Quick Summary
Quick Summary Post

Quick Summary is created and edited by users like you... Add FAQ's, Links and other Relevant Information by clicking the edit button in the lower right hand corner of this message.

 
  #3 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received


Correction to video regarding MultiCharts Bar Magnifier. Around 25m 10s on the video I say Bar Magnifier works only on time based charts. That's not true, it works on any "Regular" chart type, which MultiCharts defines as Tick, Volume, Range, plus all the time based charts.

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
 
  #4 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received

Why are the backtest results different in NinjaTrader vs MultiCharts?

I took a look at the SMA, EMA, WMA and CCI code built-in to both platforms to see if there was a difference causing them to trigger different signals.

MultiCharts Average (SMA):
 
Code
                            
inputs
    
PriceValuenumericseries ), 
    
Lennumericsimple ) ;                                                

Average SummationPriceValueLen ) / Len 
MultiCharts XAverage (EMA):
 
Code
                            
inputs
    
PriceValuenumericseries ), 
    
Lennumericsimple ) ;                                             

variables
    
var0/ ( Len ) ) ;

if 
CurrentBar 1 then
    XAverage 
PriceValue
else
    
XAverage XAverage[1] + var0 * ( PriceValue XAverage[1] ) ; 
MultiCharts WAverage (WMA):
 
Code
                            
inputs
    
PriceValuenumericseries ), 
    
Lennumericsimple ) ;                                                

variables
    
var0), 
    
var1) ;

var0 ;
for 
Value1 0 to Len 
    begin
    var0 
var0 + ( Len Value1 ) * PriceValue[Value1] ;
    
end ;
var1 = ( Len ) * Len .5 ;
WAverage var0 var1 
NinjaTrader SMA:
 
Code
                            
// 
// Copyright (C) 2006, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//

#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion

// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    
/// <summary>
    /// The SMA (Simple Moving Average) is an indicator that shows the average value of a security's price over a period of time.
    /// </summary>
    
[Description("The SMA (Simple Moving Average) is an indicator that shows the average value of a security's price over a period of time.")]
    public class 
SMA Indicator
    
{
        
#region Variables
        
private int        period    14;
        
#endregion

        /// <summary>
        /// This method is used to configure the indicator and is called once before any bar data is loaded.
        /// </summary>
        
protected override void Initialize()
        {
            
Add(new Plot(Color.Orange"SMA"));

            
Overlay true;
        }

        
/// <summary>
        /// Called on each bar update event (incoming tick).
        /// </summary>
        
protected override void OnBarUpdate()
        {
            if (
CurrentBar == 0)
                
Value.Set(Input[0]);
            else
            {
                
double last Value[1] * Math.Min(CurrentBarPeriod);

                if (
CurrentBar >= Period)
                    
Value.Set((last Input[0] - Input[Period]) / Math.Min(CurrentBarPeriod));
                else
                    
Value.Set((last Input[0]) / (Math.Min(CurrentBarPeriod) + 1));
            }
        }

        
#region Properties
        /// <summary>
        /// </summary>
        
[Description("Numbers of bars used for calculations")]
        [
GridCategory("Parameters")]
        public 
int Period
        
{
            
get { return period; }
            
set period Math.Max(1value); }
        }
        
#endregion
    
}

NinjaTrader EMA:
 
Code
                            
// 
// Copyright (C) 2006, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//

#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion

// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    
/// <summary>
    /// Exponential Moving Average. The Exponential Moving Average is an indicator that shows the average value of a security's price over a period of time. When calculating a moving average. The EMA applies more weight to recent prices than the SMA.
    /// </summary>
    
[Description("The Exponential Moving Average is an indicator that shows the average value of a security's price over a period of time. When calculating a moving average. The EMA applies more weight to recent prices than the SMA.")]
    public class 
EMA Indicator
    
{
        
#region Variables
        
private int            period        14;
        
#endregion

        /// <summary>
        /// This method is used to configure the indicator and is called once before any bar data is loaded.
        /// </summary>
        
protected override void Initialize()
        {
            
Add(new Plot(Color.Orange"EMA"));

            
Overlay                true;
        }
        
        
/// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        
protected override void OnBarUpdate()
        {
            
Value.Set(CurrentBar == Input[0] : Input[0] * (2.0 / (Period)) + (- (2.0 / (Period))) * Value[1]);
        }

        
#region Properties
        /// <summary>
        /// </summary>
        
[Description("Numbers of bars used for calculations")]
        [
GridCategory("Parameters")]
        public 
int Period
        
{
            
get { return period; }
            
set period Math.Max(1value); }
        }
        
#endregion
    
}

NinjaTrader WMA:
 
Code
                            
// 
// Copyright (C) 2006, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//

#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion

// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    
/// <summary>
    /// The WMA (Weighted Moving Average) is a Moving Average indicator that shows the average value of a security's price over a period of time with special emphasis on the more recent portions of the time period under analysis as opposed to the earlier.
    /// </summary>
    
[Description("The WMA (Weighted Moving Average) is a Moving Average indicator that shows the average value of a security's price over a period of time with special emphasis on the more recent portions of the time period under analysis as opposed to the earlier.")]
    public class 
WMA NinjaTrader.Indicator.Indicator
    
{
        
#region Variables
        
private int        period    14;
        
#endregion

        /// <summary>
        /// This method is used to configure the indicator and is called once before any bar data is loaded.
        /// </summary>
        
protected override void Initialize()
        {
            
Add(new Plot(Color.OrangeName));

            
Overlay                true;
        }

        
/// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        
protected override void OnBarUpdate()
        {
            if (
CurrentBar == 0)
                
Value.Set(Input[0]);
            else
            {
                
int        back    Math.Min(Period 1CurrentBar);
                
double    val        0;
                
int        weight    0;
                for (
int idx backidx >=0idx--)
                {
                    
val        += (idx 1) * Input[back idx];
                    
weight    += (idx 1);
                }
                
Value.Set(val weight);
            }
        }

        
#region Properties
        /// <summary>
        /// </summary>
        
[Description("Numbers of bars used for calculations")]
        [
GridCategory("Parameters")]
        public 
int Period
        
{
            
get { return period; }
            
set period Math.Max(1value); }
        }
        
#endregion
    
}

SMA and WMA look the same, the EMA method looks very slightly different.

Here is the CCI:

MultiCharts CCI:
 
Code
                            
inputs
    
Lennumericsimple ) ;                                                 

variables:     
    
var0), 
    
var1), 
    
var2) ;

var0 AverageCLen ) ;                                                  
var1 ;
for 
var2 0 to Len 
    begin
    var1 
var1 AbsValue( ( )[var2] - var0 ) ;
    
end ;
var1 var1 Len ;

if 
var1 0 then
    CCI 
0
else
    
CCI = ( var0 ) / ( .015 var1 ) ; 
NinjaTrader CCI:
 
Code
                            
// 
// Copyright (C) 2006, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//

#region Using declarations
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
using NinjaTrader.Data;
using NinjaTrader.Gui.Chart;
#endregion

// This namespace holds all indicators and is required. Do not change it.
namespace NinjaTrader.Indicator
{
    
/// <summary>
    /// The Commodity Channel Index (CCI) measures the variation of a security's price from its statistical mean. High values show that prices are unusually high compared to average prices whereas low values indicate that prices are unusually low.
    /// </summary>
    
[Description("The Commodity Channel Index (CCI) measures the variation of a security's price from its statistical mean. High values show that prices are unusually high compared to average prices whereas low values indicate that prices are unusually low.")]
    public class 
CCI Indicator
    
{
        
#region Variables
        
private int            period        14;
        
#endregion

        /// <summary>
        /// This method is used to configure the indicator and is called once before any bar data is loaded.
        /// </summary>
        
protected override void Initialize()
        {
            
Add(new Plot(Color.Orange"CCI"));
            
Add(new Line(Color.DarkGray200"Level 2"));
            
Add(new Line(Color.DarkGray100"Level 1"));
            
Add(new Line(Color.DarkGray0"Zero line"));
            
Add(new Line(Color.DarkGray, -100"Level -1"));
            
Add(new Line(Color.DarkGray, -200"Level -2"));
        }

        
/// <summary>
        /// Calculates the indicator value(s) at the current index.
        /// </summary>
        
protected override void OnBarUpdate()
        {
            if (
CurrentBar == 0)
                
Value.Set(0);
            else
            {
                
double mean 0;
                for (
int idx Math.Min(CurrentBarPeriod 1); idx >= 0idx--)
                    
mean += Math.Abs(Typical[idx] - SMA(TypicalPeriod)[0]);
                
Value.Set((Typical[0] - SMA(TypicalPeriod)[0]) / (mean == : (0.015 * (mean Math.Min(PeriodCurrentBar 1)))));
            }
        }

        
#region Properties
        /// <summary>
        /// </summary>
        
[Description("Numbers of bars used for calculations")]
        [
GridCategory("Parameters")]
        public 
int Period
        
{
            
get { return period; }
            
set period Math.Max(1value); }
        }
        
#endregion
    
}

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
 
  #5 (permalink)
Elite Member
Atlanta, Georgia
 
Futures Experience: Intermediate
Platform: NT
Broker/Data: DDT
Favorite Futures: ZN, ZB
 
cbritton's Avatar
 
Posts: 224 since Mar 2010
Thanks: 152 given, 237 received

Mike,

Well done. You are slowly convincing me that I should consider MC, provided I can get my favorite indicators converted.

I know backtesting is only one aspect of the platforms, so how do you feel about comparing them on a live sim account?

Regards,
-C

“Strategy without tactics is the slowest route to victory. Tactics without strategy is the noise before defeat.” - Sun Tzu
Reply With Quote
The following user says Thank You to cbritton for this post:
 
  #6 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received

Sorry the audio quality of the video is poor. I was real tired (can't you tell?? lol) and it seems I was whispering. I know you can hear it volume wise, but... anyway, I'll do better next time.

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
 
  #7 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received


cbritton View Post
Mike,

Well done. You are slowly convincing me that I should consider MC, provided I can get my favorite indicators converted.

I know backtesting is only one aspect of the platforms, so how do you feel about comparing them on a live sim account?

Regards,
-C

C, I'll do another comparison in the future. But there is no "sim" in MultiCharts, there is no dom, there is no discretionary trading. If you want to sim or discretionary trade, you still need a second platform, which is why I still use NinjaTrader (just for the DOM, nothing else).

MC 7 will have a DOM. It remains to be seen how "feature complete" their discretionary trading/sim engine/dom will be compared to NinjaTrader, but based on how well the team has done in other aspects, I have very high hopes.

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
The following 2 users say Thank You to Big Mike for this post:
 
  #8 (permalink)
Elite Member
Atlanta, Georgia
 
Futures Experience: Intermediate
Platform: NT
Broker/Data: DDT
Favorite Futures: ZN, ZB
 
cbritton's Avatar
 
Posts: 224 since Mar 2010
Thanks: 152 given, 237 received


Big Mike View Post
C, I'll do another comparison in the future. But there is no "sim" in MultiCharts, there is no dom, there is no discretionary trading. If you want to sim or discretionary trade, you still need a second platform, which is why I still use NinjaTrader (just for the DOM, nothing else).

MC 7 will have a DOM. It remains to be seen how "feature complete" their discretionary trading/sim engine/dom will be compared to NinjaTrader, but based on how well the team has done in other aspects, I have very high hopes.

Mike

I reread my question and I think I misstated, so let me revise it.

What I mean is, if you take a strategy in NT7 and an equivalent on in MC, say the ones you just wrote, and used them to autotrade on a live sim account, but use them both on the same day with the same instrument and chart type, what would the results be? In theory, you should get the same fills, right? I would like to know if something works with minimum fuss or if there were some drawbacks or caveats to making it run properly. I would love to help test this, but I don't have NT7.

Regards,
-C

“Strategy without tactics is the slowest route to victory. Tactics without strategy is the noise before defeat.” - Sun Tzu
Reply With Quote
 
  #9 (permalink)
Elite Member
Pacifica, CA
 
Futures Experience: Advanced
Platform: AmiBroker, TradeStation, NinjaTrader
Broker/Data: Options House
Favorite Futures: Futures, Stocks
 
jdfagan's Avatar
 
Posts: 34 since Jun 2009
Thanks: 68 given, 42 received

Thanks for the comparisons Mike. I actually went from TradeStation 8.x to NinjaTrader 6.5 back in early 2009. I do love working with C# compared to EasyLanguage but I do see some of NinjaTrader's drawbacks - particularly in backtesting engine - which is where I spend most of my time analyzing as I use fully 100% automation. Its definitely hard to trust a system when the backtesting engine isn't as accurate as you'd like - for instance, choosing best case trade over a worst case in an ambiguous situation as you described.


Quoting 
MultiCharts has IOG (intrabar order generation) which allows it to submit orders intrabar. This is equivalent to NinjaTrader's "calculate on bar close = false", but without all the nasty side effects and repercussions that one must suffer through when using COBC=false in NT. An example would be on a 5-minute bar, MultiCharts can look intrabar and see that your condition (in this case, our moving averages and CCI) were met intrabar (say on minute 3 out of 5) and submit an order without waiting for the bar to close.

I found this an important point that seemed to really make you move away from NinjaTrader and towards MultiCharts. Could you elaborate on what exactly are the "nasty side effects and repercussions that one must suffer through when using COBC=false in NT"? I do have this set to false in my strategies but I'm wondering what the ill consequences of doing this are?


Quoting 
Trying to simulate IOG within a backtestable strategy in NinjaTrader requires writing custom code to use MTF and try to work-around the problem, and it adds a great deal of complexity, plus MTF doesn't even work in current beta's of NinjaTrader.

Suppose one wrote a re-usable abstract strategy class that allowed user to define the lower more fine grained time frame used (purely for execution purposes) in relation to your higher timeframe that ran for generating the signals. If such a reusable class was written that helped alleviate the pain for writing strategies that were more accurate (backtesting wise) in NinjaTrader, would this be enough to have you use NinjaTrader again?

Thanks for the insightful post.

Cheers,

JD

Reply With Quote
 
  #10 (permalink)
Site Administrator
Manta, Ecuador
 
Futures Experience: Advanced
Platform: My own custom solution
Favorite Futures: E-mini ES S&P 500
 
Big Mike's Avatar
 
Posts: 46,240 since Jun 2009
Thanks: 29,352 given, 83,234 received



cbritton View Post
I reread my question and I think I misstated, so let me revise it.

What I mean is, if you take a strategy in NT7 and an equivalent on in MC, say the ones you just wrote, and used them to autotrade on a live sim account, but use them both on the same day with the same instrument and chart type, what would the results be? In theory, you should get the same fills, right? I would like to know if something works with minimum fuss or if there were some drawbacks or caveats to making it run properly. I would love to help test this, but I don't have NT7.

Regards,
-C

Results should be the same, yes. I don't believe many users fault NinjaTrader for its real-time strategy handling, it is its historical/backtesting that has all the problems.

Mike

Due to time constraints, please do not PM me if your question can be resolved or answered on the forum.

Need help?
1) Stop changing things. No new indicators, charts, or methods. Be consistent with what is in front of you first.
2) Start a journal and post to it daily with the trades you made to show your strengths and weaknesses.
3) Set goals for yourself to reach daily. Make them about how you trade, not how much money you make.
4) Accept responsibility for your actions. Stop looking elsewhere to explain away poor performance.
5) Where to start as a trader? Watch this webinar and read this thread for hundreds of questions and answers.
6)
Help using the forum? Watch this video to learn general tips on using the site.

If you want
to support our community, become an Elite Member.

Reply With Quote
The following user says Thank You to Big Mike for this post:

Reply



futures io > > > > VIDEO: MultiCharts vs. NinjaTrader strategy backtesting and optimization

Thread Tools Search this Thread
Search this Thread:

Advanced Search



Upcoming Webinars and Events (4:30PM ET unless noted)

Jigsaw Trading: TBA

Elite only

FuturesTrader71: TBA

Elite only

NinjaTrader: TBA

Jan 18

RandBots: TBA

Jan 23

GFF Brokers & CME Group: Futures & Bitcoin

Elite only

Adam Grimes: TBA

Elite only

Ran Aroussi: TBA

Elite only
     

Similar Threads
Thread Thread Starter Forum Replies Last Post
VIDEO TUTORIAL: How to create an advanced MultiCharts EasyLanguage Strategy Big Mike MultiCharts 39 November 9th, 2017 04:35 AM
VIDEO TUTORIAL: How to create an advanced NinjaTrader Strategy Big Mike NinjaTrader 63 November 6th, 2016 03:25 PM
Backtesting identical strategy tradestation and multicharts different results crbucks MultiCharts 7 April 26th, 2012 08:30 AM
Do we need to use the bar magnifier when backtesting/optimization in MultiCharts? benharrell MultiCharts 8 May 4th, 2011 01:17 AM
VIDEO TUTORIAL: How to create an advanced NinjaTrader Strategy Big Mike NinjaTrader Programming 0 January 26th, 2010 06:22 AM


All times are GMT -4. The time now is 10:28 PM.

Copyright © 2017 by futures io, s.a., Av Ricardo J. Alfaro, Century Tower, Panama, +507 833-9432, info@futures.io
All information is for educational use only and is not investment advice.
There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
no new posts
Page generated 2017-12-14 in 0.20 seconds with 19 queries on phoenix via your IP 54.90.207.75