网站首页 > 保险知识 >

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

2023-05-10 11:10:40 保险知识 阅读 0

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

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

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

模板的规则如下:当盈利达到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-跟踪止盈模板

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

相关内容

期货半自动预警源码(期货预警系统)文档下载.: PDF DOC TXT

猜你喜欢