Hi Matthias

Some time ago I was working on the same problem. The solution I have come 
across is as following:

1) use #include command in the main code
2) inside the #include function do like this (of course all is just an example 
which will need adjustment to your needs):
   a) function(parameter1, parameter2,...,timeframe,...,parameterN)
         {
         switch (timeframe)
                {
                case 60: TimeFrameSet(inHourly); break;
                case 15: TimeFrameSet(in15Minute); break;
                case 5: TimeFrameSet(in5Minute); break;
                default: break;
                }
         //here comes the calculations of channels, threshold,
           averages, oscillator, etc, everything you need to obtain
           signals' conditions
         
        TimeFrameRestore();//AGAIN - it is just an example, by the way - sorry 
for illegable layout
        switch (timeframe)
                {
                case 60: channel1=TimeFrameExpand(chan1,inHourly,expandLast);
                                  
channel2=TimeFrameExpand(chan2,inHourly,expandLast);
                                  
oscillator1=TimeFrameExpand(osc1,inHourly,expandLast);
                                  break;
                case 15: //the logic of code the same as above...
                                  break;
                case 5: //as above                                              
          break;
                default: channel1=chan;
                                  channel2=chan2;
                                  oscillator1=osc2;
                                  break;
                }

          //here comes the buy/sell/cover/short/stop conditions and
            position sizing, etc
         }

Although using #include results in slower code exection, it is a kind of idea 
to handle different timeframes system backtest, so I hope that even if it does 
not help directly, it will at least inspire you to find your own solution.

Regards 
Tomasz


--- In [email protected], "Matthias" <meridian...@...> wrote:
>
> Hi,
> 
> thanks to the contribution of Ed Pottasch, supported by Bruce, I was able to 
> dig a little deeper into Amibroker coding. Everybody who is interested in 
> applying multiple systems on the same underlying simultaneously should look 
> here, great piece of work: 
> http://finance.groups.yahoo.com/group/AmiBroker-at/message/5349
> 
> Thanks Ed, thanks Bruce.
> 
> Unfortunately, I stumbled across a couple of questions when backtesting 
> multiple systems across different timeframes, hope someone can help, sorry 
> for the post being a bit lenghty.
> 
> Both systems are traded on the same underlying, in order to make things 
> easier for AB (Which is a bit strange) I used the same set of data, just 
> renamed it. both systems operate on the same timeframe, say 15mins.
> 
> 
> Question 1: 
> 
> I use the same variable "percentrisked" for both systems. Wanted to optimize 
> for percent risked (only!, this is NOT shown in the example below), so to say 
> capital allocated to each system for the smoothest equity curve, AB keeps 
> crashing... Can I use the same variable name in each sub-section or are there 
> limits? should I dedicated "percentrisked1" to system1 and "percentrisked2" 
> to system2 only? I am not a programmer, but for my understanding, both 
> variables are local, so AB should not be crashing...?
> 
> Is using "Setoption" in this context appropriate or would it result in wrong 
> values?
> 
> if(Name()=="DAX_CFD_day1")
> {
> percentrisked=2.0;
> factor=Optimize("ATR-Factor",8.5,3,12,0.5);
> number=(percentrisked)/(ATR(14)*factor)*20;
> SetPositionSize(number, spsPercentOfEquity);
> SetOption("commissionmode",3);
> SetOption("Commissionamount",1.2);
> SetOption("AllowSameBarExit",True);
> SetOption("ActivateStopsImmediately",True);
> 
> .....systemlogic here
> }
> 
>  if(Name()=="DAX_CFD_day")
> {
>  
> percentrisked=Optimize("Bolli",0.6,0.5,1,0.1); 
> sl=2;//Optimize("sl",2,2,2.5,0.5);//good:6 
> number=(percentrisked/(Ref(ATR(14),-1)*sl))*20; 
> SetPositionSize(number, spsPercentOfEquity); 
> SetOption("commissionmode",3);
> SetOption("Commissionamount",1.2);
> SetOption("AllowSameBarExit",True);
> SetOption("ActivateStopsImmediately",True);
> SetOption("FuturesMode",True);
> SetTradeDelays(1,1,1,1);
> Equity(1);  
> 
> ... systemlogic here
> }
> 
> 
> Question 2:
> 
> Both systems above use 15min timeframe. Another system is using 1hr timeframe 
> and is trading FX. I was not able to re-write the logic so that I could  
> backtest the 3 systems with AA settings 15min timeframe. Any ideas? I do have 
> about 8 systems, lowest timeframe is 5min, highest timeframe 4hrs. That would 
> require a lot of "re-writing"... Am I alone with my "I have too many-systems" 
> Problem or am I missing somehting?
> 
> original logic in 1hr timeframe:
> 
> percentrisked=0.007; 
> sl=4.5;
> tp=2.5;
> 
> number=((percentrisked)/(Ref(ATR(14),-0)*sl)); 
> SetPositionSize(number,spsPercentOfEquity);
> 
> SetOption("maxopenpositions",1); 
> 
> 
> CCIperiod=Optimize("CCI",36,34,40,1); 
> CCIthreshold=optimize("CCIthres",89,88,96,1);
> 
> MAperiod=Optimize("maperiod",7,6,8,1);
> 
> MA1=  MA(C,MAperiod);
> MA2=  MA(Ref(C,-2),MAperiod);
> 
> CCIshort=CCI(CCIperiod)>=ccithreshold;
> CCIbuy=       CCI(CCIperiod)<=-CCIthreshold;
> 
> Buyok=Ref(CCIbuy,-1) AND Cross(MA1,MA2);
> Sellok=CCIshort;
> Shortok=Ref(CCIshort,-1) AND Cross(MA2,MA1);
> Coverok=CCIbuy;
> 
> timestart=020000;
> window=170000 
> Check=timestart+window; 
> timeok=TimeNum()>=timestart AND TimeNum()<=Check; 
> 
> Buy= Buyok AND timeok;
> Sell= Sellok;
> Short= Shortok AND timeok;
> Cover= Coverok;
> 
> ApplyStop(stopTypeLoss,stopModePoint,sl*ATR(14)); //9
> ApplyStop(stopTypeProfit,stopModePoint,tp*ATR(14)); //1.2
> 
> Equity(1);
> 
> 
> 
> 
> System2:
> 
> percentrisked=0.007; 
> sl=4.5;
> tp=2.5;
> 
> SetOption("maxopenpositions",1); 
> 
> CCIperiod=Optimize("CCI",36,34,40,2); 
> CCIthreshold=Optimize("CCIthres",97,88,96,2);
> 
> MAperiod=                     Optimize("maperiod",7,7,9,1);
> 
> TimeFrameSet(inHourly);
> MA1=                          MA(C,MAperiod);
> MA2=                          MA(Ref(C,-0),MAperiod);
> CCIhr=                                CCI(CCIperiod);
> ATR1=                         ATR(14);
> TimeFrameRestore();
> 
> number=((percentrisked)/(TimeFrameExpand(Ref(atr1,-0),inHourly)*sl)); 
> SetPositionSize(number,spsPercentOfEquity);
> 
> CCIshort=TimeFrameExpand(CCIhr,inHourly)>ccithreshold;
> CCIbuy=       TimeFrameExpand(CCIhr,inHourly)<-CCIthreshold;
> 
> 
> Crossup=Cross(TimeFrameExpand(MA1,inHourly),TimeFrameExpand(Ref(MA2,-2),inHourly));
> Crossdown=Cross(TimeFrameExpand(Ref(MA2,-2),inHourly),TimeFrameExpand(MA1,inHourly));
> 
> Buyok=Ref(CCIbuy,-5) AND Crossup;
> Sellok=CCIshort;
> Shortok=Ref(CCIshort,-5) AND Crossdown;
> Coverok=CCIbuy;
> timestart=20000; 
> window=170000;
> Check=timestart+window; 
> timeok=TimeNum()>=timestart AND TimeNum()<=Check; 
> 
> 
> Buy=Buyok AND timeok;
> Sell= Sellok OR CCIexit;
> Short= Shortok AND timeok;
> Cover= Coverok OR CCIexit;
> 
> ApplyStop(stopTypeLoss,stopModePoint,sl*TimeFrameExpand(Ref(ATR1,-1),inHourly));
>  
> ApplyStop(stopTypeProfit,stopModePoint,tp*TimeFrameExpand(Ref(ATR1,-1),inHourly));
>  
> 
> Equity(1);
> 
> Thanks a lot for your suggestions,
> 
> Matthias
>


Reply via email to