PureBytes Links
Trading Reference Links
|
I am trying to learn loops by using the example below from the help
files. The sell price when the profit stop is hit should be defined
by the line:
SellPrice[ i ] = Max( Open[ i ], ( 1 + firstProfitTarget * 0.01 ) *
priceatbuy );
Instead of this, the close for the day is the sell price. Why? I am
using Yahoo data with OHLC.
Thanks in advance
Larry
/*Example 4: partial exit (scaling out) on profit target stops
Scale In/Out - showing the number of scale-in and scale-out
operations within given trade
Example of code that exits 50% on first profit target, 50% on next
profit target AND everything at trailing stop:*/
SetOption("NoDefaultColumns",0);
SetOption("InitialEquity",1000);
SetOption("AllowSameBarExit",1);
SetOption("ActivateStopsImmediately",1);
SetOption("AllowPositionShrinking",1);
SetOption("FuturesMode",0);
SetOption("InterestRate",0);
SetOption("MaxOpenPositions",1000);
SetOption("MinShares",.001);
SetOption("PriceBoundChecking",1) ;
SetOption("CommissionMode",1); //% per trade
SetOption("CommissionAmount",0);
SetOption("MarginRequirement",100); //No margin
SetOption("ReverseSignalForcesExit",1);
SetOption("UsePrevBarEquityForPosSizing",1);
SetTradeDelays(0,0,0,0);
Buy = Cross( MA( C, 10 ), MA( C, 50 ) );
Sell = 0;
// the system will exit
// 50% of position if FIRST PROFIT TARGET stop is hit
// 50% of position is SECOND PROFIT TARGET stop is hit
// 100% of position if TRAILING STOP is hit */
FirstProfitTarget = 1; // profit
SecondProfitTarget = 2;// in percent
TrailingStop = 3;// also in percent
priceatbuy=0;
highsincebuy = 0;
exit = 0;
for( i = 0; i < BarCount; i++ )
{
if( priceatbuy == 0 AND Buy[ i ] )
{
priceatbuy = BuyPrice[ i ];
}
if( priceatbuy > 0 )
{
highsincebuy = Max( High[ i ], highsincebuy );
if( exit == 0 AND
High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) *
priceatbuy )
{
// first profit target hit - scale-out
exit = 1;
SellPrice[ i ] = Max( Open[ i ], ( 1 +
firstProfitTarget * 0.01 ) * priceatbuy );
Buy[ i ] = sigScaleOut;
}
if( exit == 1 AND
High[ i ] >= ( 1 + SecondProfitTarget * 0.01 ) *
priceatbuy )
{
// second profit target hit - exit
exit = 2;
SellPrice[ i ] = Max( Open[ i ], ( 1 + SecondProfitTarget *
0.01 ) * priceatbuy );
}
if( Low[ i ] <= ( 1 - TrailingStop * 0.01 ) * highsincebuy )
{
// trailing stop hit - exit
exit = 3;
SellPrice[ i ] = Min( Open[ i ], ( 1 - TrailingStop *
0.01 ) * highsincebuy );
}
if( exit >= 2 )
{
Buy[ i ] = 0;
Sell[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset price
highsincebuy = 0;
}
}
}
SetPositionSize( 100, spsPercentOfEquity );
SetPositionSize( 50, spsPercentOfPosition * ( Buy ==
sigScaleOut ) ); // scale out 50% of position
|