Hi, 

What I am doing is:
1). count MA(close, 6) < MA(close, 9) at buy when open gap > %x.
2). show the count on optimize results.

I use static var to store MA flag outside CTB, and read it inside CTB. the code 
below doesn't work. 

I don't know if I create a single static var or a static array when I write: 
StaticVarSet ("MA_" + Name(), MAFlag);

It could be wrong in other place.

Any help would be greatly appreciated!

Charles




//========================================= optimize
Perc = Optimize("Perc", 8, 8, 8, 2);
MALen = Optimize("MALen", 6, 6, 6, 1);

//========================================= set option
//SetOption("RequireDeclarations", True ); 
//must use it for buyprice = ref(close, -1).
SetOption("PriceBoundChecking", False);

//================= buy rules
Buyrule1 = TimeNum() == 93000;
Buyrule2 = Close >= Ref(Close, -1) * (1 + Perc/100);

Buyrule = Buyrule1 AND Buyrule2;

//========================================= set static var to store MA
//check MA steps
MAFlag = IIf(MA(Close, MAlen) < MA(Close, MAlen + 3), 1, 0);
//store MA flag into static var.
StaticVarSet ("MA_" + Name(), MAFlag);

//================= sell rules
Sellrule1 = TimeNum() == 93000;
Sellrule = Sellrule1;

//================= trade
Buy = Buyrule;
BuyPrice = Ref(Close, -1);
Sell = Sellrule;
SellPrice = Close;

//======================================== custom back tester
SetCustomBacktestProc( "" );

if ( Status( "action" ) == actionPortfolio )
{
        bo = GetBacktesterObject();
                //run default back tester
        bo.Backtest(1);
                MAup = 0;

                //loop on all trades of ONE interation at one time.
        for ( trade = bo.GetFirstTrade( ); trade; trade = bo.GetNextTrade( ) )
        {
                        //add up MA flag from static var
                        MAup = MAup + StaticVarGet("MA_" + trade.symbol);
                        _TRACE(trade.Symbol + ": " + MAUp);
        }

                //add custom column to optimize result
                bo.AddCustomMetric("MAUP", MAup);
                bo.listTrades();
} 

--- In [email protected], "chuck_win" <ch...@...> wrote:
>
> Thanks so much Mike for your help. It works on backtester now. I will try to 
> make it work on optimize next.
> 
> Charles
> 
> 
> 
> --- In [email protected], "Mike" <sfclimbers@> wrote:
> >
> > Charles,
> > 
> > You got scared away from the earlier example that I referred you to ( 
> > http://finance.groups.yahoo.com/group/amibroker/message/146164 ). Yet, with 
> > a one line change, it would give you exactly what you want.
> > 
> > Just change:
> > 
> > foreignATR = ATR( 14 );
> > 
> > To
> > 
> > foreignATR = MA( Close, 6 );
> > 
> > Do this and, I believe, you would have exactly what you're asking for. You 
> > would likely then want to change the names and output strings to refer to 
> > MA instead of ATR. But, there would be no further change in logic other 
> > than that one line.
> > 
> > Mike
> > 
> > --- In [email protected], "chuck_win" <chaoy@> wrote:
> > >
> > > Hi Mike,
> > > 
> > > I need to run optimize, and have spent a lot of time to add a custom 
> > > column of MA on optimize result list and no luck so far. 
> > > 
> > > Is it possible to find the bar index or bar number of buying and use the 
> > > number to refer the MA like
> > > 
> > > myMA = ref(MA(close, 6), -17);
> > > 
> > > Thank you very much!
> > > 
> > > Charles
> > > 
> > >  
> > > 
> > > --- In [email protected], "Mike" <sfclimbers@> wrote:
> > > >
> > > > Hi,
> > > > 
> > > > There are a couple of problems:
> > > > 
> > > > 1. When trying to do an equivalence test, use the equivalence operator 
> > > > '==' not the assignment operator '='.
> > > > 
> > > > 2. buyrule is an array. You cannot use the if statement on an array.
> > > > 
> > > > If you just want to see what the value is, then run an exploration:
> > > > 
> > > > Filter = buyrule;
> > > > AddColumn(MA(Close, 6), "MA(6)");
> > > > 
> > > > http://www.amibroker.com/guide/h_exploration.html
> > > > 
> > > > Otherwise, add a custom metric to your backtest.
> > > > 
> > > > Mike
> > > > 
> > > > --- In [email protected], "chuck_win" <chaoy@> wrote:
> > > > >
> > > > > Hi,
> > > > > 
> > > > > I do backtesting, and want to check MA at the time of buying.
> > > > > 
> > > > > My code looks like 
> > > > > 
> > > > > buyrule = cross(MACD, signal);
> > > > > buy = buyrule;
> > > > > buyprice = close;
> > > > > sellrule = cross(signal, MACD);
> > > > > sell = sellrule;
> > > > > sellprice = close;
> > > > > if (buyrule = true) {
> > > > >  str = StrFormat("%0.2f", MA(Close,6));
> > > > >  _TRACE(NumToStr( DateTime(), formatDateTime ) + ", " + str);
> > > > > 
> > > > > }
> > > > > 
> > > > > I always get the MA at the ending time of last bar instead. 
> > > > > 
> > > > > Thanks for any help!
> > > > > 
> > > > > Charles
> > > > >
> > > >
> > >
> >
>


Reply via email to