[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Same Bar Buy & Sell



PureBytes Links

Trading Reference Links

Hello,

It is because you are using ExRem to filter out signals.

ExRem() funciton must NOT be used together with "AllowSameBarExit".
Remove it.

Generally speaking you don't need to use ExRem at all, because
the backtester handles signals even if there are redundant ones.

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "Graham Johnson" <grahamj@xxxxxxxxxxxxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Sunday, February 10, 2008 5:15 AM
Subject: [amibroker] Same Bar Buy & Sell


> Hi
> 
> All seemed to be going Ok with the code below until I found that a 
> Sell on the same bar as the Buy is not being actioned  and therefore 
> the position remains open for ever.  In the cases of same bar extry & 
> exit Sell is assigned the value of 1, but it doesn't get actioned..
> 
> Other exits seem to be fine.
> 
> Obviously, I have not got it right.  Any suggestions, please.
> 
> The following code has been simplified a little to remove clutter.
> 
> Thanks
> 
> Graham
> 
> 
> //==================  Inital Equity & Margin  ==================
> vCapital = 30000; 
> 
> 
> //==================  Initial Trade Parameters  ==================
> SetOption("AccountMargin", 10); 
> // Margin% 
> SetOption("ActivateStopsImmediately", True); // 
> IntraDay Stops 
> SetOption("AllowPositionShrinking", False); // 
> Take partial trades if equity available
> SetOption("AllowSameBarExit",True); 
> // Permit same bar exit for profit stops 
> 
> SetOption("CommissionMode", 0); 
> // 1=Percent trade size commission, 2= $ per trade 
> SetOption("FuturesMode",False); 
> 
> SetOption("InitialEquity", vCapital ); 
> 
> SetOption("InterestRate",0); 
> // Set interest rate earned for free cash, zero to 
> evaluate system 
> SetOption("MaxOpenPositions", 6); 
> // Max no positions 
> 
> SetOption("MinPosValue",1); 
> // Min position value to make trade worthwhile
> SetOption("MinShares", 1); 
> // Min No shares zero
> SetOption("PriceBoundChecking", True ); 
> // Price to stay in bar range 
> SetOption("UseCustomBacktestProc", True); 
> // Use Custom backtest for reporting
> SetOption("UsePrevBarEquityForPosSizing", True ); // Use last 
> known bar of position sizing 
> 
> 
> SetTradeDelays(0,0,0,0); 
> // Intraday Entry & Exit signals, no forward 
> references
> 
> vaValidEntry = Cross( Close, EMA( Close, 45 ) );
> 
> //==================  Limit Entry  ==================
> vaLimitEntry = Close + (0.8 * (High - Low));
> 
> //==================  Stop Exit  ==================
> vISATRPer = 30; //15;
> vISMult = 6;
> vaIStopVal = ATR(vISATRPer) * vISMult;
> 
> //==================  Target Exit  ==================
> vaTargetVal = Ref(H, -3);
> 
> //==================  Position Size  ==================
> vMaxPosn = 10000;
> vMaxRisk = 2000;
> vMaxTOPc = 3;
> vaPosnSize = vMaxRisk / Ref(vaIStopVal, -1) * Ref(vaLimitEntry, -1);
> vaPosnSize = Min(vaPosnSize, vMaxPosn);
> SetPositionSize(vaPosnSize, spsValue);
> 
> //==================  Trade  ==================
> Sell = 0;
> Buy = Ref(vaValidEntry,-1) AND Low <= Ref(vaLimitEntry, -1);
> BuyPrice = Min(Open, Ref(vaLimitEntry, -1));
> Sell = 0;
> 
> vaGapDown = GapDown();
> vaGapUp = GapUp();
> vaInitStop = Null;
> vaSellStop =  0;
> vaSellTarget = 0;
> VEntryBar = 0;
> vTempStop = 0;
> vTempTarget = 0;
> vTradeLength = 8;
> vTrigger = 0;
> 
> for(vCnt = 1; vCnt < BarCount; vCnt++)
> {
> if(vTempStop == 0
> AND Buy[vCnt] == 1) // Entry Bar & 0 positions 
> open
> {
> // Position Opened 
> vTempStop = BuyPrice[vCnt] - vaIStopVal[vCnt - 1];
> vTempTarget = High[vCnt - 3];
> vEntryBar = vCnt;
> }
> else
> {
> Buy[vCnt] = 0; // Remove excess Buy signals
> } // Not Entry Bar
> 
> if(vTempStop == 0)
> {
> vaTargetVal[vCnt - 1] = Null;
> }
> else
> {
> if (vCnt - vEntryBar == vTradeLength + 1)
> {
> vTempStop = Max(vTempStop, BuyPrice
> [vEntryBar]);
> } // test # Bars Open
> 
> if (vCnt > vEntryBar + 1) // eliminate Entry Bar
> {
> if (vaGapDown[vCnt - 1] == 1)
> {
> vTempStop = Max(vTempStop, Low[vCnt - 
> 1]);
> } // GapDown
> 
> if (vaGapUp[vCnt - 1] == 1)
> {
> vTempStop = Max(vTempStop, High[vCnt -
> 1]);
> } // GapUp
> } // Position Open & not Entry Bar
> 
> vaInitStop[vCnt - 1] = vTempStop; 
> if(Low[vCnt] <= vaInitStop[vCnt - 1])
> {
> Sell[vCnt] = 1;
> SellPrice[vCnt] = Min(Open[vCnt], vaInitStop
> [vCnt - 1]);
> vTempStop = 0;
> } 
> else
> {
> if(High[vCnt] >= vaTargetVal[vCnt - 1])
> {
> Sell[vCnt] = 1;
> SellPrice[vCnt] = Max(Open[vCnt], 
> vaTargetVal[vCnt - 1]);
> vTempStop = 0;
> _TRACE("Bar " + BarIndex() + " Buy " + Buy + " Sell " + Sell + " 
> Target " + vaTargetVal + " Stop " + vTempStop);
> }
> } // exits
> } // Position Open
> } // for
> 
> // Remove excess signals 
> 
> Buy = ExRem(Buy, Sell); 
> //  Remove additional signals, 
> Sell = ExRem(Sell, Buy);
> 
> 
> 
> Please note that this group is for discussion between users only.
> 
> To get support from AmiBroker please send an e-mail directly to 
> SUPPORT {at} amibroker.com
> 
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
> 
> For other support material please check also:
> http://www.amibroker.com/support.html
> 
> Yahoo! Groups Links
> 
> 
> 


Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/