Thanks as always - Although the solutions offered are a bit over my my limited programming abilities. I'll tinker around with that and see if I can use it for a fix. Otherwise, I may have to come up with a workaround or change the actual symbols being used.
Thanks again though - You're a walking Amibroker encyclopedia! --- In [email protected], "Mike" <sfclimb...@...> wrote: > > Ha ha, > > I was waiting for that one. > > Unfortunately, it's not that easy. I seem to recall that AmiBroker will > consider the multiple entries as a single positions, as far as Sell is > concerned, and will thus exit your entire position upon any Sell signal. > > However, if my suspicion proves to be correct, two possible solutions come to > mind: > > 1. Use sigScaleOut to partially exit. > http://www.amibroker.com/guide/h_pyramid.html > > 2. Write custom backtester code to control the exits. > http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-interface-2/ > > Mike > > --- In [email protected], "graphman27" <steve@> wrote: > > > > As I said previously, the buys are all working correctly, but all the sells > > are triggered simultaneously on the same day, which can't be right. I must > > be missing something, but I'm close.... > > > > Strategy1_Buy = Buy = Cross(StochFinal,Trigger) AND (EMA( Close,EMAShort ) > > > EMA( Close,EMALong )); > > > > Strategy1_Sell = Sell = Cross(Trigger,StochFinal) AND (EMA( Close,EMAShort > > ) < EMA( Close,EMALong )); > > ........ > > > > Strategy2_Buy = Buy = Cross(MA( Close,MAShortBuy ),MA( > > Close,MALongBuy )); > > > > Strategy2_Sell = Sell = Cross(MA( Close,MALongSell ),MA( Close,MAshortSell > > )); > > ....... > > > > Strategy3_Buy = Buy = Cross(fast,slow); > > Strategy3_Sell = Sell = Cross(slow,fast) OR slow == fast; > > ........ > > > > { > > Buy = Strategy1_Buy OR Strategy2_Buy OR Strategy3_Buy; > > Sell = Strategy1_Sell OR Strategy2_Sell OR Strategy3_Sell; > > } > > > > How can I be sure the trades are matched up properly, i.e. strategy1_Buys > > with strategy1_sells? > > > > Steve. > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > Hi, > > > You're problem is that you are doing exactly what I said not to do. You > > > must alter your code to produce an intermediate result for each case, > > > then OR the results togeather. > > > if ( n == "S&PEmrgMkts" ) { ... Strategy1_Buy = ...} > > > if ( n == "S&PEmrgMkts" ) { ... Strategy2_Buy = ...} > > > if ( n == "S&PEmrgMkts" ) { ... Strategy3_Buy = ...} > > > if ( n == "S&PEmrgMkts" ) { ... Buy = Strategy1_Buy OR Strategy2_Buy > > > OR Strategy3_Buy;} > > > Alternatively, you could use the "|=" operator to OR the Buy with itself > > > and remove the final "if" case. But, if you are not familiar with the > > > operator, it might just confuse you. > > > > > > Buy = 0; > > > if ( n == "S&PEmrgMkts" ) { ... Buy |= Cross(StochFinal,Trigger) AND > > > (EMA( Close,EMAShort ) > EMA( Close,EMALong ));} > > > if ( n == "S&PEmrgMkts" ) { ... Buy |= Cross(MA( Close,MAShortBuy > > > ),MA( Close,MALongBuy ));} > > > if ( n == "S&PEmrgMkts" ) { ... Buy |= Cross(fast,slow);} > > > Mike > > > --- In [email protected], "graphman27" <steve@> wrote: > > > > > > > > Here's is most of the code in question... > > > > > > > > SetBacktestMode( backtestRegularRawMulti ); > > > > > > > > SetOption("MaxOpenPositions", 3 ); // This sets maximum number of open > > > positions > > > > > > > > //PosQty = 3; // You can define here how many open positions you want > > > > //SetOption("MaxOpenPositions", PosQty ); > > > > //PositionSize = -100/PosQty; // invest 100% of portfolio equity > > > divided by max. position count > > > > > > > > //definition of variables for the symbols not included below > > > > Buy = Sell = 0; > > > > //symbol-specific rules > > > > n = Name(); > > > > if( n == "S&PEmrgMkts" ) > > > > { > > > > //strategy 1 for Emrg Mkts here > > > > EMAShort = Optimize("EMAShort", 2,2,8,2); > > > > EMALong = Optimize("EMALong", 10,10,60,5); > > > > Period = Optimize ("Period", 45,10,50,5); > > > > Trigger = 50; > > > > > > > > StochTop = (Close-(LLV(Close,Period))); > > > > StochBottom = (HHV(Close,Period)-LLV(Close,Period)); > > > > StochFinal = (StochTop / StochBottom)*100; > > > > > > > > Buy = Cross(StochFinal,Trigger) AND (EMA( Close,EMAShort ) > EMA( > > > Close,EMALong )); > > > > > > > > Sell = Cross(Trigger,StochFinal) AND (EMA( Close,EMAShort ) < EMA( > > > Close,EMALong )); > > > > .................. > > > > > > > > PositionSize = -33; > > > > } > > > > > > > > if( n == "S&PEmrgMkts" ) > > > > { > > > > //strategy 2 for Emrg Mkts here > > > > MAShortBuy=Optimize("MAShortBuy",8,7,12,1); > > > > MALongBuy=Optimize("MALongBuy",60,20,100,10); > > > > MAShortSell=Optimize("MAShortSell",8,2,8,1); > > > > MALongSell=Optimize("MALongSell",40,10,80,10); > > > > > > > > > > > > Buy = Cross(MA( Close,MAShortBuy ),MA( Close,MALongBuy )); > > > > > > > > Sell = Cross(MA( Close,MALongSell ),MA( Close,MAshortSell )); > > > > > > > > > > > > Short = 0; > > > > > > > > Cover = 0; > > > > > > > > Plot( MA ( Close,8 ),"MAShortBuy", colorGreen, styleThick ); > > > > Plot( MA ( Close,60 ),"MALongBuy", colorRed, styleThick ); > > > > Plot( MA ( Close,8 ),"MAShortSell", colorBlue, styleThick ); > > > > Plot( MA ( Close,40 ),"MALongSell", colorLightBlue, styleThick ); > > > > ............................ > > > > > > > > PositionSize = -33; > > > > } > > > > > > > > if( n == "S&PEmrgMkts" ) > > > > { > > > > //strategy 3 for Emrg Mkts here > > > > smooth = Optimize("smooth",40,10,65,5); > > > > Lag = Optimize("lag",10,2,10,1); > > > > fast = DEMA(C,smooth); > > > > slow = Ref(EMA(C,smooth),-Lag); > > > > Buy = Cross(fast,slow); > > > > Sell = Cross(slow,fast) OR slow == fast; > > > > ...................... > > > > PositionSize = -33; > > > > > > > > Maybe you can tell what I'm doing wrong. I can't get more than one > > > buy at a time. Separately, each section of code works fine in > > > individual backtests. > > > > > > > > Thanks in advance! > > > > > > > > Steve. > > > > > > > > > > > > --- In [email protected], "Mike" sfclimbers@ wrote: > > > > > > > > > > Without a code sample, it's hard to understand what you are saying. > > > But, bottom line is that you must have a single Buy statement which > > > includes all the logic of all the formulas. > > > > > > > > > > e.g. > > > > > Strategy1_Buy = ... > > > > > Strategy2_Buy = ... > > > > > > > > > > Buy = Strategy1_Buy OR Strategy2_Buy; // Correct > > > > > > > > > > You cannot have multiple Buy statements, if that is what you are > > > doing. > > > > > > > > > > e.g. > > > > > Buy = ... > > > > > Buy = ... // Wrong > > > > > > > > > > When using multiple Buy assignments, you are clobbering whatever Buy > > > used to hold and the last assignment will be the *only* logic that is > > > applied. > > > > > > > > > > Mike > > > > > > > > > > --- In [email protected], "graphman27" <steve@> wrote: > > > > > > > > > > > > I downloaded 5.30 and still can't get it to work. What I do see > > > is mutiple positions for one symbol IF there is only one signal formula > > > for a symbol. I have three separate formulas for one symbol, which > > > doesn't seem to work with BacktestRegularRawMulti. I scanned through > > > the detailed log and saw multiple positions for the single formula and > > > never more than one for the multiple formulas. Also, it was always > > > using the second formula. I have position shrinking turned on too. > > > > > > > > > > > > Here is what I'm saying about formulas: > > > > > > > > > > > > Symbol #1 has three separate formulas for buy and sells. > > > > > > Symbol #2 has one formula. > > > > > > Symbol #3 has one formula. > > > > > > Symbol #4 has one formula. > > > > > > > > > > > > Thanks. > > > > > > > > > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > > > > > > > > > Hi, > > > > > > > It's working fine for me (version 5.30 trial). Note that you may > > > need to > > > > > > > allow position size shrinking for all trades to fire. Use the > > > detailed > > > > > > > log option from AA Settings Report tab to see what's going on. > > > > > > > SetBacktestMode(backtestRegularRawMulti); > > > > > > > > > > > > > > PositionSize = -33; > > > > > > > Dates = DateTime(); > > > > > > > Buy = Dates == StrToDateTime("2010-Jan-05") || Dates == > > > > > > > StrToDateTime("2010-Jan-11") || Dates == > > > StrToDateTime("2010-Jan-07"); > > > > > > > Sell = DateTime() == StrToDateTime("2010-Jan-15"); > > > > > > > Mike > > > > > > > --- In [email protected], "graphman27" <steve@> wrote: > > > > > > > > > > > > > > > > I developed different signals for the same symbol and want all > > > signals > > > > > > > to work individually within the portfolio backtester. It ain't > > > workin'! > > > > > > > I tried adding "SetBacktestMode (backtestRegularRawMulti);" to > > > the > > > > > > > beginning of my code, to no avail. I have the position size set > > > up for > > > > > > > -33 and three separate signals. It only seems to be pulling one > > > signal, > > > > > > > because the number of trades and the CAR should be 3Xs higher > > > than it > > > > > > > is. > > > > > > > > > > > > > > > > Help! > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > Steve. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
