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

Re: [amibroker] Re: ApplyStop Question



PureBytes Links

Trading Reference Links

ami_trader,
 
this is an example of how I use loopings instead of Applystop (example is for long trades only). This is for your specific problem.  Note you have to change the  stopProfitLevel and stopLossLevel.
 
Change:
 
// set profit level at 2%
stopProfitLevel = BuyPrice + BuyPrice * (2 / 100);
 
// set stop level at 5%
stopLossLevel = BuyPrice - BuyPrice * (5 / 100);
 
to
 
// profit at 6 points
stopProfitLevel = BuyPrice + 6;
 
// stop loss 10 points
stopLossLevel = BuyPrice - 10;
 
also adjust:
 
BuyPrice = Ref(H,-1) - 0.001;
 
to
 
BuyPrice = Ref(H,-1) - 10;
 
 
rgds, Ed
 
 
 
 
procedure sell_proc(Buy,BuyPrice,Open,High,Low,Close,stopProfitLevel,stopLossLevel) {

global Sell
;
global SellPrice
;
global
BuyAdjusted;
global
stopProfitLevelAdjusted;
global
stopLossLevelAdjusted;

// initialise arrays

SellPrice = 0
;
Sell = 0
;
stopProfitLevelAdjusted =
0
;
stopLossLevelAdjusted =
0
;
BuyAdjusted =
0
;


for (i = 1; i < BarCount
; i++) {

   
if (Buy[ i ] == 1
) {   
   
      BuyAdjusted[ i ] =
1
;
      stopProfitLevelAdjusted[ i ] = stopProfitLevel[ i ];
      stopLossLevelAdjusted[ i ] = stopLossLevel[ i ];
      
      
// find a sell position + sellprice

      
for (j = i; j < BarCount; j++) {
         
         stopProfitLevelAdjusted[ j ] = stopProfitLevel[ i ];
         stopLossLevelAdjusted[ j ] = stopLossLevel[ i ];
         
         
// test if stop loss is hit

         
if((Low[ j ] <= stopLossLevelAdjusted[ j ]) AND (Open
[ j ] >= stopLossLevelAdjusted[ j ])) {
            
            
Sell[ j ] = 1
;
            
SellPrice
[ j ] = stopLossLevelAdjusted[ j ];
               
            i = j;
               
            j =
BarCount
;
               
         
// stop loss exceeded at the open

         }
else if (Open
[ j ] < stopLossLevelAdjusted[ j ]) {
            
            
Sell[ j ] = 1
;
            
SellPrice[ j ] = Open
[ j ];
               
            i = j;
               
            j =
BarCount
;                              
            
         
// test if profit stop is hit

         }
else if (High[ j ] >= stopProfitLevelAdjusted[ j ] AND Open
[ j ] <= stopProfitLevelAdjusted[ j ]) {
            
            
Sell[ j ] = 1
;
            
SellPrice
[ j ] = stopProfitLevelAdjusted[ j ];
               
            i = j;
               
            j =
BarCount
;
               
         
// stop profit exceeded at open

         }
else if (Open
[ j ] > stopProfitLevelAdjusted[ j ]) {
            
            
Sell[ j ] = 1
;
            
SellPrice[ j ] = Open
[ j ];
            
            i = j;
               
            j =
BarCount
;             
                                    
               
         }
else if (j == BarCount - 1
) {
         
            i =
BarCount
;
         
         }               
            
      }
      
   }
               
}


}
// end procedure





SetChartOptions(0, chartShowDates
);
SetBarsRequired(10000,10000
);

Cond1 =
Ref(H,-1) > Ref(H,-2) && Ref(H,-2) > Ref(H,-3
);
Cond2 =
O < Ref(H,-1
);

BuyPrice = Ref(H,-1) - 0.001
;
Buy=Cond1 && Cond2 && L <= BuyPrice && H >= BuyPrice
;

// set profit level at 2%

stopProfitLevel =
BuyPrice + BuyPrice * (2 / 100
);

// set stop level at 5%

stopLossLevel =
BuyPrice - BuyPrice * (5 / 100
);

sell_proc(
Buy,BuyPrice,Open,High,Low,Close
,stopProfitLevel,stopLossLevel);
Buy
= BuyAdjusted;

// remove zeros

stopProfitLevelAdjusted =
IIf(stopProfitLevelAdjusted == 0, Null
, stopProfitLevelAdjusted);
stopLossLevelAdjusted =
IIf(stopLossLevelAdjusted == 0, Null
, stopLossLevelAdjusted);

Plot(C,"C",1,64
);
Plot(stopProfitLevelAdjusted,"",colorBrightGreen,1
);
Plot(stopLossLevelAdjusted,"",colorRed,1
);
PlotShapes(IIf(Buy,shapeUpArrow,0),colorWhite, layer = 0, yposition = BuyPrice, offset = 0
);
PlotShapes(IIf(Sell,shapeDownArrow,0),colorYellow, layer = 0, yposition = SellPrice, offset = 0
);

Title=Name()+ ", O: "+WriteVal(O)+ ", H: "+WriteVal(H)+ ", L: "+WriteVal(L)+ ", C: "+WriteVal(C
);

Filter = 1
;
AddColumn(Buy,"Buy"
);
AddColumn(Sell,"Sell");


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