| 
 PureBytes Links 
Trading Reference Links 
 | 
Rocou,
 
The "PREV" has been covered many times in the 
past.
It is easy to find in the mailing list 
archive
<FONT face=Arial 
size=2>http://www.amibroker.com/listarchive.html
 
Take a look at: 
<FONT 
face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/message/45225
 
<FONT 
face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/message/4507
<FONT 
face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/message/11896
<FONT 
face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/message/31088
 
Some of formulas using PREV may be rewritten using 
AMA/AMA2
but ALL (I mean *ALL*) of them can be rewritten 
using looping 
(see <A 
href=""><FONT face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/message/45225<FONT 
face=Arial size=2> )
 
Specifically your "problem" code:
TrStopLevel:=If(C=PREV, PREV, 
If(((Ref(C,-1)<PREV)AND (C<PREV)), 
Min(PREV,C*(1+nPips)),If((Ref(C,-1)>PREV)AND (C>PREV), 
Max(PREV,C*(1-nPips)), 
If(C>PREV,C*(1-nPips),C*(1+nPips)))));
 
can be rewritten using loop too.
 
First step is to "UNFOLD" ugly written code to the 
form that is easier to read and understand:
 
TrStopLevel = 
If( C = PREV,  PREV,  
<FONT face="Courier New" 
size=2>         If( ( (Ref(C,-1) < 
PREV) AND (C < PREV) ), 
<FONT face="Courier New" 
size=2>         Min( PREV, C* (1+nPips) 
),
<FONT face="Courier New" 
size=2>         If( (Ref(C,-1) > 
PREV) AND ( C > PREV ),  
<FONT face="Courier New" 
size=2>              
Max( PREV, C * (1 - nPips ) ), 
<FONT face="Courier New" 
size=2>              
If( C > PREV, C * (1-nPips), C * (1+nPips) ) ) ) );
 
 
Now this can be rewritten using for 
loop:
 
SetBarsRequired<FONT 
color=#000000>( 10000, 
0 ); nPips = 
0.004; <FONT 
color=#008000>// define your own value here<FONT 
color=#000000>  PREV = TrStopLevel = <FONT 
color=#000000>C[ <FONT 
color=#ff00ff>0 ]; // init 
first element <FONT 
color=#000000>for( i = <FONT 
color=#ff00ff>1; i < <FONT 
color=#000000>BarCount; i++ ) { 
  CurC = C<FONT 
color=#000000>[ i ]; // current value of 
close   PrevC = <FONT 
color=#000000>C[ i - <FONT 
color=#ff00ff>1 ]; // 
previous bar value of close 
  CurTrStopLevel =   <FONT 
color=#0000ff>IIf( CurC == 
PREV,  PREV,   
         <FONT 
color=#0000ff>IIf( ( (PrevC < PREV) <FONT 
color=#000000>AND (CurC < PREV) ), 
         <FONT 
color=#0000ff>Min( PREV, CurC * ( <FONT 
color=#ff00ff>1 + nPips) ), 
         <FONT 
color=#0000ff>IIf( ( PrevC > PREV) <FONT 
color=#000000>AND ( CurC > PREV 
),   
              <FONT 
color=#0000ff>Max( PREV, CurC * (<FONT 
color=#ff00ff>1 - nPips ) ), 
              <FONT 
color=#0000ff>IIf( CurC > PREV, CurC * ( 
1 - nPips), CurC * ( 
1 + nPips) ) ) ) ); 
   TrStopLevel[ i ] = CurTrStopLevel; <FONT 
color=#008000>// store result    PREV = 
CurTrStopLevel; // save previous value for next 
iteration } <FONT 
color=#000000>Graph0 = TrStopLevel; 
// just for plotting
 
What I did ?
It is fairly simple:
I have just wrapped the MS code into the for loop, 
replaced arrays with scalars
( C replaced with CurC = C[ i ] , Ref( C, -1 ) 
replaced with PrevC = C[ i - 1 ].
PREV in my code is a temporary variable that holds 
previous value of calculation in the loop .
 
This way I can keep almost entire code as it 
was.
 
Advantage? It runs 100x faster than in Metastock. 
Try it - run backtest in MS and in AB and compare times.
Best 
regards,Tomasz Janeczkoamibroker.com
----- Original Message ----- 
From: "rocou" <<A 
href=""><FONT face=Arial 
size=2>rocou@xxxxxxxxx>
To: <<A 
href=""><FONT face=Arial 
size=2>amibroker@xxxxxxxxxxxxxxx<FONT face=Arial 
size=2>>
Sent: Monday, April 26, 2004 9:51 PM
Subject: [amibroker] Dear Traders, this seems to be 
an absolutely amazing ...
<FONT face=Arial 
size=2>Dear Traders, this seems to be an absolutely amazing 
formulafrom my broker CMS. Sorry if I am getting on your nerves again, 
but I really need your help how to EXACTLY translate the formulainto 
Amibroker´s AFL for backtesting.The trailing stop is based on a certain 
amount of pips ("nPip")that you define , NOT on any kind of ATR/volatility 
!!Buy/Sell and Short/Cover signals are generated, if close 
valuecrosses the TrailingStoppLevel Line. That is the whole story.You 
only have to define the amount of "nPip"´s.The image shows the 15min 
chart EURUSD and 15 as the valuefor the nPips parameter.The image is 
in folder "Photos" of this group: <A 
href=""><FONT 
face=Arial 
size=2>http://photos.groups.yahoo.com/group/amibroker/vwp?.dir=/&.src=""><FONT 
face=Arial 
size=2>=Trailing+Stop+System.jpg&.view=t&.done=http%3a//photos.groups.yahoo.com/group/amibroker/lst%3f%26.dir=/%26.src="">26.view=t[/img]I 
politely ask all of you to help me EXACTLY translating this formula into AFL 
for backtesting/optimizing "nPip" possibilities. I guess it would be a great 
chance for all of us to trade witha simple but very effective trading 
system.Kindest regardsRobert  Here again the formula 
from 
CMS:___________________________________________________________{Trailing 
Stop Loss}TrStopLevel:=If(C=PREV, PREV, If(((Ref(C,-1)<PREV)AND 
(C<PREV)), Min(PREV,C*(1+nPips)),If((Ref(C,-1)>PREV)AND (C>PREV), 
Max(PREV,C*(1-nPips)), 
If(C>PREV,C*(1-nPips),C*(1+nPips)))));{Signal Up and 
Down}Up:= Cross(Close,TrStopLevel);Down:= 
Cross(TrStopLevel,C);{OpenBuy and CloseBuy}OpenBuy:= Up and 
(eventCount('OpenBuy')= eventCount('CloseBuy'));CloseBuy:= Down and 
(eventCount('OpenBuy')>eventCount('CloseBuy'));{OpenSell and 
CloseSell}OpenSell:=  Down and (eventCount('OpenSell')= 
eventCount('CloseSell'));CloseSell:=  Up and 
(eventCount('OpenSell')>eventCount('CloseSell'));___________________________________________________________Send 
BUG REPORTS to <FONT face=Arial 
size=2>bugs@xxxxxxxxxxxxxSend SUGGESTIONS 
to <FONT face=Arial 
size=2>suggest@xxxxxxxxxxxxx<FONT face=Arial 
size=2>-----------------------------------------Post AmiQuote-related 
messages ONLY to: <FONT 
face=Arial size=2>amiquote@xxxxxxxxxxxxxxx 
(Web page: <A 
href=""><FONT face=Arial 
size=2>http://groups.yahoo.com/group/amiquote/messages/<FONT 
face=Arial size=2>)--------------------------------------------Check 
group FAQ at: <A 
href=""><FONT 
face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/files/groupfaq.html<FONT 
face=Arial size=2> Yahoo! Groups Links<*> To visit your group 
on the web, go to:     <A 
href=""><FONT face=Arial 
size=2>http://groups.yahoo.com/group/amibroker/<FONT 
face=Arial size=2><*> To unsubscribe from this group, send an email 
to:     <A 
href=""><FONT face=Arial 
size=2>amibroker-unsubscribe@xxxxxxxxxxxxxxx<FONT face=Arial 
size=2><*> Your use of Yahoo! Groups is subject 
to:     <A 
href=""><FONT face=Arial 
size=2>http://docs.yahoo.com/info/terms/<FONT face=Arial 
size=2> 
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.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 the Yahoo! Terms of Service.
 |