跟踪止盈止损策略设计要求:
1、跟踪止盈止损有很多种方式,本次程序的规则是:当盈利达到30跳后启动第一级跟踪止损,止损回撤值为20跳;
2、当盈利达到60跳后启动第二级跟踪止损,止损回撤值为10跳。
3、原始止损条件为回撤50跳。
INPUT : TrailingStart1 (30,1,500,1); //跟踪止损启动设置1,设置第一级跟踪止损启动值,盈利30跳后开始;
INPUT : TrailingStart2 (60,1,500,1); //跟踪止损启动设置2,设置第二级跟踪止损启动值,盈利60跳后开始;
INPUT : TrailingStop1 (20,1,500,1); //跟踪止损设置1,设置第一级跟踪止损目标值,回撤20跳后止损;
INPUT : TrailingStop2 (10,1,500,1); //跟踪止损设置2,设置第二级跟踪止损目标值,回撤10跳后止损;
INPUT : StopLossSet(50,1,500,1); //止损设置,没有盈利情况下设置开仓原始跟踪止损值50跳;
//声明变量
VARIABLE : BarsSinceEntry =0 ; //从第一根条件满足为零开始
VARIABLE : HighestAfterEntry =CLOSE ; //开仓后出现的最高价;
VARIABLE : LowestAfterEntry =CLOSE ; //开仓后出现的最低价;
MinPoint = MinMove * PriceScale; //最小变动单位赋值=最小移动乘上价格;
MYENTRYPRICE = AVGENTERPRICE;
//以多仓为例:
IF BARPOS=1 THEN BEGIN
POSITION := 0 ;
END; //IF
BarsSinceEntry(Position ! = 0 );
//2 记录开仓以来最高最低价格
If BarsSinceEntry = =0 THEN BEGIN
HighestAfterEntry = close;//赋初始值
LowestAfterEntry = close;//赋初始值
If Position < > 0 THEN BEGIN//
HighestAfterEntry = MAX(HighestAfterEntry,MYENTRYPRICE); //开仓Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry;
LowestAfterEntry = MIN(LowestAfterEntry,MYENTRYPRICE); //开仓Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry;
END
END
ELSE //非开仓Bar时进行以下运算
LowestAfterEntry = MIN(LowestAfterEntry,LOW); //记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断;
HighestAfterEntry = MAX(HighestAfterEntry,HIGH); //记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断;
Commentary ("HighestAfterEntry =" +Text (HighestAfterEntry));
Commentary ("LowestAfterEntry =" +Text (LowestAfterEntry));
MinPoint = MinMove * PriceScale;//最小变动单位赋值=最小移动乘上价格;
MYENTRYPRICE = AVGENTERPRICE;
//多单跟踪止盈止损
IF ( Position = 1 and BarsSinceEntry >=1 AND H>L ) THEN BEGIN //有多仓的情况;
//第二级跟踪止损的条件表达式;
IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart2 * MINDIFF THEN BEGIN //开仓后开始监控止损条件;
IF LOW <= HighestAfterEntry [1] - TrailingStop2 * MINDIFF THEN BEGIN
MyExitPrice = HighestAfterEntry [1] - TrailingStop2 * MINDIFF; //如果该Bar开盘价跳空,则用开盘价代替;
MyExitPrice = IF(OPEN < MyExitPrice,OPEN,MyExitPrice);
SELL( _DEBUG ,0,LIMITR,MyExitPrice);
POSITION := 0 ;
TURTLEUNITS := 0 ;
END
END
ELSE IF HighestAfterEntry [1] >= MyEntryPrice + TrailingStart1 * MINDIFF THEN BEGIN //第一级跟踪止损的条件表达式;
IF LOW <= HighestAfterEntry [1] - TrailingStop1 * MINDIFF THEN BEGIN
MyExitPrice = HighestAfterEntry [1] - TrailingStop1 * MINDIFF;
MyExitPrice = IF(OPEN<MyExitPrice,OPEN,MyExitPrice );
SELL( _DEBUG ,0,LIMITR,MyExitPrice);
POSITION := 0 ;
TURTLEUNITS := 0 ;
End
End
END
以上代码输入后编译不通过,请问如何改写正确?
MYENTRYPRICE = ***GENTERPRICE;
系统显示问题,源码是开仓均价:MYENTRYPRICE = AVGENTERPRICE;
当前持有品种的平均持仓成本——最近空仓以来计
用法:AVGENTERPRICE
程序中MinPoint因为编译不通过,已经用MINDIFF替换,
加了”:“后已经编译通过,但是为什么没有止盈信号
HighestAfterEntry [1]
表示第二个最高值,即前一个最高值
当前最高值为HighestAfterEntry [0]
公式设计的初衷是:
记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。
以多仓为例,需要记录开仓以来最高价格,适用序列变量 HighestAfterEntry 保存此值,在开仓Bar上,比较开仓价和最新价格,记录较大的值;其他 Bar上,比较该Bar的HIGN和HighestAfterEntry的值,记录较大值。空仓反之,记录开仓以来的最低价格。
公式设计的初衷是:
记录建仓以来最高最低价格。跟踪止损条件采用这个最高最低价格和止损点之间进行比较判断。
以多仓为例,需要记录开仓以来最高价格,使用序列变量 HighestAfterEntry 保存此值,在开仓Bar上,比较开仓价和最新价格,记录较大的值;其他 Bar上,比较该Bar的HIGN和HighestAfterEntry的值,记录较大值。空仓反之,记录开仓以来的最低价格。