PureBytes Links
Trading Reference Links
|
Hi Stephane,
Thank you very much for your suggestion to put into a function. I hadn't
thought of that.
At the moment, there appears to be no simple answer.
I will certainly consider putting it into a function if after I package
everything up for support to test and they find it cannot be done by the
applystop.
Thank you for your time.
Best regards
Alan
Stephane Carrasset wrote:
>If you want you can write it as a function
>MyApplyStop
>(BuyCond,Entryprice,Exitprice,stoploss,stoptrail,stopprofit)
>and # include it in your code.
>
>stephane
>
>
>
>
>
>
>
>>Thank you for your code.
>>
>>With something so apparently simple I was really hoping to it done
>>without looping code.
>>
>>Regards
>>Alan
>>
>>Stephane Carrasset wrote:
>>
>>
>>
>>>Hello,
>>>I was often dispointed with applystops, so i have written my own
>>>
>>>
>loop
>
>
>>>to manage differents exits.
>>>of course the code is a "little" long, but if you take some time
>>>
>>>
>to
>
>
>>>try it you must find it usefull, below is an example to get two
>>>differents profit, so you can change it to get two differents
>>>
>>>
>stoploss
>
>
>>>Stephane
>>>
>>>Title= "Rem afl";
>>>Setup=Cross( MFI(3),0);
>>>
>>>/*****************************/
>>>BuyCond= Ref(Setup,-1);
>>>Entryprice=O;
>>>Exitprice=Low;// or Close
>>>Stoploss=LLV(L,3)-0.75*ATR(10) ;
>>>Stoptrail=LLV(L,3)-1.75*ATR(10);
>>>Pf=7;
>>>Stopprofit=(1+(Pf/100))*Entryprice;
>>>
>>>
>>>//Initialize
>>>Buy=Sell=0;
>>>SellPr=Null;
>>>TrailPr=Null;
>>>TargetPr=Null;
>>>StopLossPr=Null;
>>>lastbuyprice=0;
>>>stoplossprice=0;
>>>profitprice=0;
>>>trailingprice=0;
>>>oldtrailingprice=0;
>>>trailingstop=0;
>>>Count=0;
>>>
>>>Empty=IsNull(stoploss) OR IsNull(stoptrail) OR IsNull(stopprofit);
>>>
>>>for( i = 0; i < BarCount; i++ )
>>>{
>>> if(buycond[i] AND NOT(Empty[i]))
>>> {
>>> Buy[i]=1;
>>> Sell[i]=0;
>>>
>>> }
>>>/*Remove Buy signals if trade was already initiated*/
>>> if(lastbuyprice>0 )
>>> {
>>> Buy[i]=0;
>>> Count++;
>>> }
>>>
>>>/*get the buyprice AND the stoplossprice AND the profitprice*/
>>> if (lastbuyprice == 0 )
>>> {
>>> if( Buy[ i ] == 1)
>>> {
>>> trailingstop = 0;
>>> trailingprice = 0;
>>> oldtrailingprice = 0;
>>> lastbuyprice= entryprice[i];
>>> stoplossprice=stoploss[i];
>>> profitprice=stopprofit[i];
>>> }
>>> }
>>>
>>>// CONDITIONS EXIT
>>>
>>> if(lastbuyprice>0)
>>> {
>>>//StopLoss price
>>> StopLossPr[i]=stoplossprice;
>>>//stopTrail price
>>> trailingprice = stoptrail[i] ;
>>> if (trailingprice < oldtrailingprice)
>>> trailingprice = oldtrailingprice;
>>> else
>>> oldtrailingprice = trailingprice;
>>> TrailPr[i]=trailingprice; // pour connaitre l'array
>>>du trailing price init;
>>>//Target Price array
>>> if(Count<5)
>>> TargetPr[i]=profitprice;
>>> else
>>> TargetPr[i]=profitprice + profitprice-trailingprice;
>>>
>>> if (Exitprice[i] <= Max
>>>(stoplossprice,trailingprice ))//stoploss
>>> {
>>> if(Exitprice[i]==Low
>>>[i])
>>> {
>>> if(Open[i]
>>><=Max(stoplossprice,trailingprice ))
>>> SellPr
>>>[i]=Open[i];
>>> else
>>> SellPr
>>>[i]=Max(stoplossprice,trailingprice );
>>> }
>>> else
>>> {
>>> if(exitprice
>>>[i]==Close[i])
>>> SellPr
>>>[i]=Close[i];
>>> }
>>>
>>> Sell[i]=1;
>>> lastbuyprice=0;
>>> stoplossprice=0;
>>> profitprice=0;
>>> trailingprice = 0;
>>> oldtrailingprice = 0 ;
>>> trailingstop=0;
>>> Count=0;
>>> }
>>> else
>>> {
>>> if( High[i] > TargetPr[i] )
>>>// trailingstop stoploss
>>> {
>>> if(Open[i]> TargetPr[i] )
>>> SellPr[i]=Open[i];
>>> else
>>> SellPr[i]= TargetPr[i] ;
>>>
>>>
>>> Sell[i] = 1;
>>> lastbuyprice = 0;
>>> stoplossprice = 0;
>>> profitprice = 0;
>>> trailingprice = 0;
>>> oldtrailingprice = 0;
>>> trailingstop=0;
>>> Count=0;
>>> }
>>> }
>>> }
>>>
>>> if(Sell[i]==0)
>>> SellPr[i]=Close[i];
>>> nCpt[i]=Count;
>>>}
>>>
>>>
>>>Plot(Close,"Close",IIf( Buy, colorGreen, IIf(Sell ,
>>>colorRed ,1 )),64);
>>>PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-20);
>>>PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-20);
>>>
>>>Plot(TrailPr,"",colorGreen,1);
>>>Plot(StopLossPr,"",colorRed,1);
>>>Plot(TargetPr,"",colorBlue,1);
>>>Plot(ValueWhen(Sell,SellPr),"SellPr",colorYellow,1);
>>>//Plot(ncpt,"",colorBlue,1);
>>>
>>>
>>>
>>>
>>>
>>>>Thank you for pointing out the flaw. I changed the code from day
>>>>
>>>>
>()
>
>
>>>>
>>>>
>>>>
>>>>
>>>to
>>>
>>>
>>>
>>>
>>>>datenum() which gives a unique day for the trade.
>>>>
>>>>
>>>>StopLvl = 0.0030;
>>>>
>>>>Buydate = ValueWhen(Buy,Datenum()); // Determine buy date
>>>>
>>>>StopLvlWid = 0.0010;
>>>>
>>>>StopLvl = IIf( Datenum()!=Buydate, StopLvl+StopLvlWid, StopLvl);
>>>>
>>>>ApplyStop(stopTypeLoss, stopModePoint, StopLvl, True, True);
>>>>
>>>>
>>>>With an addcolumn, I can see StopLvl changes from 0.0030 to 0.0040
>>>>when the date changes but the trade is still stopped out at
>>>>
>>>>
>0.0030
>
>
>>>>
>>>>
>>>>
>>>>
>>>on
>>>
>>>
>>>
>>>
>>>>the following day.
>>>>
>>>>Still puzzled.
>>>>
>>>>Regards
>>>>Alan
>>>>
>>>>
>>>>--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko"
>>>>
>>>>
><amibroker@xxxx>
>
>
>>>>wrote:
>>>>
>>>>
>>>>
>>>>
>>>>>Hello,
>>>>>
>>>>>Your formula logic is flawed.
>>>>>
>>>>>Day() represents DAY NUMBER (1-31) not date,
>>>>>so
>>>>>ValueWhen(Buy,Day())
>>>>>will be true EVERY MONTH when day is the same as day of the entry
>>>>>(previous month(s))
>>>>>
>>>>>
>>>>>Best regards,
>>>>>Tomasz Janeczko
>>>>>amibroker.com
>>>>>----- Original Message -----
>>>>>From: "firehorse888uk" <firehorse888uk@xxxx>
>>>>>To: <amibroker@xxxxxxxxxxxxxxx>
>>>>>Sent: Friday, May 27, 2005 7:50 PM
>>>>>Subject: [amibroker] 'Simple!' dynamic applystop help please
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>Hi,
>>>>>>
>>>>>>I'm backtesting forex.
>>>>>>
>>>>>>On the day of the trade, I want the stop loss to be 30pts.
>>>>>>On subsequent days, I want the stop loss to be 40pts.
>>>>>>Edited relevant section of code follows:
>>>>>>
>>>>>>StopLvl = 0.0030;
>>>>>>
>>>>>>Buydate = ValueWhen(Buy,Day()); // Determine buy day
>>>>>>
>>>>>>StopLvlWid = 0.0010;
>>>>>>
>>>>>>StopLvl = IIf( Day()!=Buydate, StopLvl+StopLvlWid, StopLvl);
>>>>>>
>>>>>>ApplyStop(stopTypeLoss, stopModePoint, StopLvl, True, True);
>>>>>>
>>>>>>
>>>>>>Can anyone see why the above code doesn't work.
>>>>>>I've tracked StopLvl and it changes correctly for the following
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>day.
>>>>
>>>>
>>>>
>>>>
>>>>>>I've set dynamic level to true so I don't understand why the
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>trade
>>>
>>>
>>>
>>>
>>>>>>stops out at 30pts rather than 40pts on subsequent days.
>>>>>>
>>>>>>Thanks
>>>>>>Alan
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>
>>>
------------------------ Yahoo! Groups Sponsor --------------------~-->
What would our lives be like without music, dance, and theater?
Donate or volunteer in the arts today at Network for Good!
http://us.click.yahoo.com/Tcy2bD/SOnJAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~->
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 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/
<*> 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/
|