期货半自动预警源码(期货预警系统)

这个跟踪止盈,我在之前就写出来过,但没具体解读它,学过编程的朋友,可能看一眼就明白什么意思的。这次写呢,就是想告诉各位,这个模板可以随意复制调用的,只要把参数改成个人操作习惯就可以。

还是老样子,直接附上代码,解读一遍,再随便找个指标写个交易程序出来,后期要用的朋友,可依据自己的交易理念,改一下相应条件就行,很方便的。其实下边止盈的声明变量,可改成声明参数的,这样写,后期要做测试优化的时候,很不方便,所以把跟踪止盈改成声明参数更好点。

模板的规则如下:当盈利达到50跳之后启动第一级跟踪止盈,止盈的回撤值为30跳,当盈利达到80跳之后启动第二级的跟踪止盈,止盈的回撤值为20跳。当然你也可以将这些固定的设置修改为盈利百分比,或者是某个价格的百分比。

好了,了解了规则,来看真正的代码了,如下:

Vars

Numeric MinPoint; // 声明变量MinPoint,一个最小变动单位,也就是一跳。//

Numeric MyEntryPrice; // 声明变量MyEntryPrice,英文好的,看英文意思都知道的,开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格。//

Numeric TrailingStart1(50); // 声明变量TrailingStart1,初始值为50,这是止盈启动设置1。//

Numeric TrailingStart2(80); // 声明变量TrailingStart2,初始值为80,这是止盈启动设置2。//

Numeric TrailingStop1(30); // 声明变量TrailingStop1,初始值为30,这是真正跟踪止盈设置1。//

Numeric TrailingStop2(20); // 声明变量TrailingStop2,初始值为20,这是真正跟踪止盈设置2。//

Numeric StopLossSet(50); //声明变量StopLossSet,初始值为50,这是止损设置。//

Numeric MyExitPrice; // 声明变量MyExitPrice,平仓价格。//

NumericSeries HighestAfterEntry; //声明序列变量HighestAfterEntry,开仓后出现的最高价。//

NumericSeries LowestAfterEntry; //声明序列变量LowestAfterEntry,开仓后出现的最低价。//

Begin

...

If(BarsSinceentry == 0)//获得当前持仓的第一个建仓位置到当前位置的Bar计数,这里就是开仓的那根k线了。//

{

HighestAfterEntry = Close;//开仓后的最高价为收盘价。//

LowestAfterEntry = Close;//开仓后的最低价为收盘价。//

If(MarketPosition <> 0)//假如有持仓的情况下。//

{

HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 开仓的Bar(通常说的k线了),将开仓价和当时的收盘价的较大值保留到HighestAfterEntry。//

LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry。//

}

}

else//这个对应着不是开仓k线之后的情况。//

{

HighestAfterEntry = Max(HighestAfterEntry,High); // 这个是逐个判断的,即开仓那条K线,跟下一根k线最高价对比,记录当前的最高点;再接着继续对比,直到符合止盈启动设置条件,这样好用于下一个Bar的跟踪止盈判断。//

LowestAfterEntry = Min(LowestAfterEntry,Low); // 简略说就是,记录下当前k线的最低点,用于下一个K线的跟踪止盈判断。//

}

Commentary("HighestAfterEntry="+Text(HighestAfterEntry));//在超级图表当前Bar添加一行注释信息,解读意思就是在K线图上显示最高价HighestAfterEntry等于多少的。//

Commentary("LowestAfterEntry="+Text(LowestAfterEntry));//解读同上,显示最低价。//

MinPoint = MinMove*PriceScale;//固定的最小跳动价公式。//

MyEntryPrice = AvgEntryPrice;//把开仓均价赋值给MyEntryPrice。//

If(MarketPosition==1) // 有多仓的情况下。//

{

If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) // 假如最高价大于等于开仓均价加上固定的止盈启动设置2乘以最小跳动价,这里先写了第二级跟踪止盈的条件表达式。//

{

If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)//再接着假如低价小于等于最高价减去真正止盈设置2系数乘以最小跳动价。//

{

MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;//平仓价呢等于最高价减去真正止盈设置2系数乘以最小跳动价。//

If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替,这句我习惯性的经常去掉,很不严谨的。//

Sell(0,MyExitPrice);//以上面计算得的平仓价,平仓了。//

}

}

else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止盈的条件表达式。解读跟上面没有什么区别,这里就是把设置2变成设置1而已。//

{

If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)//解读同上。//

{

MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;//平仓价,主要计算就是那个止盈系数设置1了,解读同上。//

If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替。//

Sell(0,MyExitPrice);//依据算得的平仓价,平掉了。//

}

}

else if(Low <= MyEntryPrice - StopLossSet*MinPoint) //这里写上初始的固定止损处理,即为低价小于等于开仓均价减去固定止损系数乘以最小跳动价。//

{

MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;//平仓价就等于开仓价减去止损系数乘以一跳。//

If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替。//

Sell(0,MyExitPrice);//依据算得的平仓价,全平了。//

}

}else if(MarketPosition==-1) // 有空仓的情况。代码都差不多,但就是意思反过来了。//

{

If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) // 第二级跟踪止盈的条件表达式,即最低价小于等于开仓价减去止盈启动设置2乘以最小跳动价。//

{

If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)//假如高价大于等于最低价加上真正止盈设置2乘以最小跳动价。//

{

MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;//平仓价等于最低价加上真正止盈设置2乘以最小跳动价了。//

If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替。//

BuyToCover(0,MyExitPrice);//平仓。//

}

}

else if(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止盈的条件表达式,基本就是把止盈设置2都改成设置了,解读同上了。//

{

If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)//解读同上。//

{

MyExitPrice = LowestAfterEntry[1] + TrailingStop1*MinPoint;//计算平仓价了,直白解读。//

If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替。//

BuyToCover(0,MyExitPrice);//平仓。//

}

}

else If(High >= MyEntryPrice + StopLossSet*MinPoint)//这里写上初始的止损处理,高价大于开仓均价加上固定止损系数乘以最小跳动价。//

{

MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;//平仓价等于开仓均价加上止损系数乘以一跳。//

If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替。//

BuyToCover(0,MyExitPrice);//平仓。//

}

}

...

End

以上就是模板代码的具体解读,其实还可以写第三级或第四级的跟踪止盈,就是把代码复制一下,对应改成设置3或4就可以。下面就是看一个实例了,还是简单的吧,直接用KD指标加一条200移动均线了。代码及结果如下:

Params

Numeric Length(14);

Numeric SlowLength(3);

Numeric SmoothLength(3);

Numeric DslowLength(200);

Vars

NumericSeries HighestValue;

NumericSeries LowestValue;

NumericSeries KValue;

Numeric SumHLValue;

Numeric SumCLValue;

NumericSeries DValue;

NumericSeries AvgValue3;

Numeric MinPoint;

Numeric MyEntryPrice;

Numeric TrailingStart1(50);

Numeric TrailingStart2(100);

Numeric TrailingStop1(30);

Numeric TrailingStop2(20);

Numeric StopLossSet(50);

Numeric MyExitPrice;

NumericSeries HighestAfterEntry;

NumericSeries LowestAfterEntry;

Begin

AvgValue3 = AverageFC(Close,DslowLength);

PlotNumeric("MA3",AvgValue3);

HighestValue = HighestFC(High, Length);

LowestValue = LowestFC(Low, Length);

SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);

SumCLValue = SummationFC(Close - LowestValue,SlowLength);

If(SumHLValue <> 0)

{

KValue = SumCLValue/SumHLValue*100;

}Else

{

KValue = 0;

}

DValue = AverageFC(KValue,SmoothLength);

If(!CallAuctionFilter()) Return;

If (MarketPosition <> 1 And KValue[1] > DValue[1] And Close[1] > AvgValue3)

{

Buy(1,Open);

}

If(MarketPosition == 1 And Close[1] < AvgValue3)

{

Sell(1,Open);

}

If(MarketPosition <> -1 And KValue[1] < DValue[1] And Close[1] < AvgValue3)

{

SellShort(1,Open);

}

If(MarketPosition == -1 And Close[1] > AvgValue3)

{

BuyToCover(1,Open);

}

If(BarsSinceentry == 0)

{

HighestAfterEntry = Close;

LowestAfterEntry = Close;

If(MarketPosition <> 0)

{

HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);

LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);

}

}else

{

HighestAfterEntry = Max(HighestAfterEntry,High);

LowestAfterEntry = Min(LowestAfterEntry,Low);

}

Commentary("HighestAfterEntry="+Text(HighestAfterEntry));

Commentary("LowestAfterEntry="+Text(LowestAfterEntry));

MinPoint = MinMove*PriceScale;

MyEntryPrice = AvgEntryPrice;

If(MarketPosition==1)

{

If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint)

{

If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)

{

MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;

If(Open < MyExitPrice) MyExitPrice = Open;

Sell(0,MyExitPrice);

}

}else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)

{

If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)

{

MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;

If(Open < MyExitPrice) MyExitPrice = Open;

Sell(0,MyExitPrice);

}

}else if(Low <= MyEntryPrice - StopLossSet*MinPoint)

{

MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;

If(Open < MyExitPrice) MyExitPrice = Open;

Sell(0,MyExitPrice);

}

}else if(MarketPosition==-1)

{

If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint)

{

If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)

{

MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;

If(Open > MyExitPrice) MyExitPrice = Open;

BuyToCover(0,MyExitPrice);

}

}else if(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)

{

If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)

{

MyExitPrice = LowestAfterEntry[1] + TrailingStop1*MinPoint;

If(Open > MyExitPrice) MyExitPrice = Open;

BuyToCover(0,MyExitPrice);

}

}else If(High >= MyEntryPrice + StopLossSet*MinPoint)

{

MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;

If(Open > MyExitPrice) MyExitPrice = Open;

BuyToCover(0,MyExitPrice);

}

}

End

期货软件TB系统源代码解读系列14-跟踪止盈模板

看着还不错吧,但是这只是编写应用跟踪止盈模板的例子,测试的结果,具体实盘如何,我也不清楚的。从这例子,我们可以看到,只要把你的买卖规则添加进去,再着直接把跟踪止盈完全复制进去就行的,很简单吧。当然,这个模板也是有缺陷的,当然这是跟你的买卖规则相关的,具体什么样的缺陷,我这还得举例才行,等下次哪天把我有空再说了。这个模板已经相对不错了,瑕不掩瑜的,所以对这模板感兴趣的朋友,自己实盘测试一段时间就能很快把我它的。

Bitget交易所

Bitget交易所V

这个跟踪止盈我在之前就写出来过但没具体解读它学过编程的朋友可能看一眼就明白什么意思的这次写呢就是想告诉各位这个模板可以随意复制调用的只要把参数改成个人操作习惯就可以还是老样子直接附上代码解读一遍再随便找个指标写个交易程序出来后期要用的朋友可依据自己的交易理念改一下相应条件就行很方便的其实下边止盈的声...

文章数
0 评论数
浏览数

最近发表

热门文章

标签列表

目录[+]