Thanks for your help Ed. That works great. Any chance of changing that exit at stop profit(SellPriceAdjusted) to a trailing stop?
--- In [email protected], cas soni <soni...@...> wrote: > > Hello Edward,wow..great .   .i was looking for something like this [ i.e- > your code ]Thank you > > --- On Sun, 29/8/10, Edward Pottasch <empotta...@...> wrote: > > From: Edward Pottasch <empotta...@...> > Subject: Re: [amibroker] Re: Formula Help Needed > To: [email protected] > Date: Sunday, 29 August, 2010, 1:18 AM > > > > > > > > > > > > > > > > >  > > > > > > > > > > > > > Jeff, >  > I agree with cas soni that plotting the problem makes it > easier to solve. >  > You can use the valuewhen() function but the > problem is that before a sell is found new buy signals emerge. That is why I > would solve such a problem using an exit loop. See code below. If this can be > solved using array calculations only I woud not know how, >  > regards, Ed >  >  > procedure > buySell_proc(BuyXX,sellStopProfit,sellStopLoss,initPer) > { > global > BuyAdjusted; > global BuyPriceAdjusted; > global SellAdjusted; > global > SellPriceAdjusted; > global stopProfitArray; > global > stopLossArray; >  > BuyAdjusted = 0; > BuyPriceAdjusted = > 0; > SellAdjusted = 0; > SellPriceAdjusted = 0; > stopProfitArray = > Null; > stopLossArray = Null; > slip = 0; >  > for( i = initPer + 1; i < BarCount; i++ ) > > { >  if (BuyXX[ i ]) >  { >   BuyAdjusted[ i ] = > 1; >   BuyPriceAdjusted[ i ] = C[ i ] + > slip; >   stopProfitArray[ i ] = BuyPriceAdjusted[ i ] + > sellStopProfit[ i ]; >   stopLossArray[ i ] = BuyPriceAdjusted[ i ] - > sellStopLoss[ i ]; >   >   for (j = i + 1; j < > BarCount; j++) >   { >    stopLossArray[ j ] = > stopLossArray[ i ]; >    stopProfitArray[ j ] = stopProfitArray[ > i ]; >    // exit at stop loss >    if (C[ j ] > < stopLossArray[ j > ]) >    { >     SellAdjusted[ j ] = > 1; >     SellPriceAdjusted[ j ] = C[ j ] - > slip; >     i = > j; >     break; >    }  >    // > exit at stop profit >    else if (C[ j ] > stopProfitArray[ j > ]) >    { >     SellAdjusted[ j ] = > 1; >     SellPriceAdjusted[ j ] = C[ j ]- > slip; >     i = > j; >     break; >    } >    // > to avoid problems at the end of the array >    else if (j == > BarCount - 1) >    { >     i = > BarCount; >     break; >    } >   } >  } > > } > } >  > SetBarsRequired(sbrAll,sbrAll); >  > ATRx = Optimize("ATR Multiplier", 3, 1, 5, 1); // ATR > Multiplier > WATR = ((Ref(ATR(8),-2)*8) + (ATR(1)*1.125) + > (Ref(ATR(1)*1.125,-1)))/10; //Weighted ATR (last 20% has a 12.5% weighting > factor) > twentydayupper = Ref(HHV(H, 20), -1); >  > BuyXX = Cross(C, > twentydayupper); > buySell_proc(BuyXX,WATR*ATRx,WATR*2,8); > Buy = > BuyAdjusted; > BuyPrice = BuyPriceAdjusted; > Sell = > SellAdjusted; > SellPrice = SellPriceAdjusted; >  > // chart > GraphXSpace = 5; > SetChartOptions(0, > chartShowDates); > Plot( C, "\nCandle",colorWhite, styleCandle > ); > Plot(twentydayupper,"",colorBlue,1); > > Plot(stopLossArray,"\nsellStopLoss",colorRed,1); > Plot(stopProfitArray,"\nsellStopProfit",colorGreen,1); > PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-15); > PlotShapes(IIf(Buy,shapeHollowSmallCircle,shapeNone),colorWhite,0,BuyPrice,0); > PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-15); > PlotShapes(IIf(Sell,shapeHollowSmallCircle,shapeNone),colorWhite,0,SellPrice,0); >  > > > > > From: JEFF F > Sent: Saturday, August 28, 2010 7:14 PM > To: [email protected] > Subject: [amibroker] Re: Formula Help Needed > >  > > Thanks cas soni, > I appreciate your input, and adding the plot. The problem > I am having is the sellprice and sellstop seem to be floating numbers and > recalculated every day. I want them to be calculated once at entry, and > remain > that fixed value until a sell is triggered. Any help is much > appreciated. > > --- In [email protected], cas soni > <soni67c@> wrote: > > > > Hello Jeff , > > First let me say > i am not an afl expert , > > so please try this .... > > ATRx = > Optimize("ATR Multiplier", 3, 1, 5, 1); // ATR Multiplier > > WATR = > (Ref(ATR(8),-2)*8 + (ATR(1)*1.125) + (Ref(ATR(1)*1.125,-1)))/10; //Weighted > ATR > (last 20% has a 12.5% weighting factor) > > twentydayupper = Ref(HHV(H, > 20), -1); > > > > > > > > Plot(C,"",3,64); > > > Plot(twentydayupper,"",7,1); > > > > > > Buy = Cross(C, > twentydayupper); > > > > BuyPrice=ValueWhen(Buy,C,1); > > > > > Sellstop = BuyPrice - WATR*2; > > > > SellPrice = BuyPrice + > WATR*ATRx; > > Sell = Cross(Sellstop, C) OR Cross(C, SellPrice); > > > Plot(SellPrice,"sellprice",4,1); > > Plot(Sellstop,"sellstop",6,1); > > > > > PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-5); > > > PlotShapes(Sell*shapeDownArrow,colorRed,0,H,-5); > > > > > AddColumn(ATRx, "ATRx"); > > AddColumn(ATR(10), "ATR"); > > > AddColumn(WATR, "Weighted ATR"); > > AddColumn(Ref(ATR(8),-2), "ATR(8) Two > Days Ago"); > > AddColumn(ATR(1)*1.125, "Weighted ATR Today"); > > > AddColumn(Ref(ATR(1)*1.125,-1), "Weighted ATR Yesterday"); > > > AddColumn(twentydayupper, "20 Day Upper"); > > AddColumn(Sellstop, > "Sellstop"); > > AddColumn(SellPrice, "SellPrice"); > > > AddColumn(BuyPrice, "BuyPrice"); > > AddColumn(C, "Close"); > > > > > Filter=1; > > Hope this helps > > Thank you > > > > > --- On Sat, 28/8/10, JEFF F <jefff@> wrote: > > > > > > > From: JEFF F <jefff@> > > Subject: [amibroker] Formula Help > Needed > > To: [email protected] > > > Date: Saturday, 28 August, 2010, 8:53 PM > > > > > > à> > > > > > > > > If one of the AFL experts out there could > help me out, it would be greatly appreciated. I do not understand why, in > this > formula the sell price is not being executed according to my stops. Please > understand this is a work-in-progress and not meant to be a complete formula. > I > put in all the columns to try and trace the calculations. I'm sure it is a > simple answer, but I seem to be missing it. > > > > ATRx = > Optimize("ATR Multiplier", 3, 1, 5, 1); // ATR Multiplier > > WATR = > ((Ref(ATR(8),-2)*8) + (ATR(1)*1.125) + (Ref(ATR(1)*1.125,-1)))/10; //Weighted > ATR (last 20% has a 12.5% weighting factor) > > twentydayupper = Ref(HHV(H, > 20), -1); > > > > Sellstop = BuyPrice - WATR*2; > > SellPrice = > BuyPrice + WATR*ATRx; > > > > Buy = Cross(C, twentydayupper); > > > Sell = Cross(Sellstop, C) OR Cross(C, SellPrice); > > > > > AddColumn(ATRx, "ATRx"); > > AddColumn(ATR(10), "ATR"); > > > AddColumn(WATR, "Weighted ATR"); > > AddColumn(Ref(ATR(8),-2), "ATR(8) Two > Days Ago"); > > AddColumn(ATR(1)*1.125, "Weighted ATR Today"); > > > AddColumn(Ref(ATR(1)*1.125,-1), "Weighted ATR Yesterday"); > > > AddColumn(twentydayupper, "20 Day Upper"); > > AddColumn(Sellstop, > "Sellstop"); > > AddColumn(SellPrice, "SellPrice"); > > > AddColumn(BuyPrice, "BuyPrice"); > > AddColumn(C, "Close"); > > > > > Filter=1; > > > > Any help is appreciated > > >
