大家看了我之前写的代码,符合买卖规则后,都是固定的手数开平仓,从来没做什么加仓或减仓的操作的。原因有两个吧,一是这是个人习惯,我相信概率理论,固定手数操作,盈亏比需要达到多少,成功率需要达到多少;我对这些有很好的认识,所以在资金分配上可以比较合理安排,这能让我尽可能的规避爆仓风险。第二个原因更简单,就是没有加减仓经验,从来都是对了持仓,错了固定止损。
今天写加仓减仓源代码,只是让大家了解这程序化是如何来实现这功能的。但在实盘中结果如何,我也不好给什么建议,因为没这经验的。也不废话了,直接代码模板附上,咱再一一解读:
Vars
Numeric MinPoint; // 声明数值型变量MinPiont,看正文公式可知是一个最小变动单位,也就是一跳。//
NumericSeries firstPrice; // 声明数值型序列变量firstPrice,依正文公式看就是第一次开仓价格。//
NumericSeries LastPrice; // 声明数值型序列变量LastPrice,依正文看就是最后一次开仓价格。//
Numeric AddSet(30); // 声明数值型变量AddSet,依正文看就是加仓设置固定系数30.//
Numeric SubSet(30); // 声明数值型变量SubSet,依正文看就是减仓设置固定系数30.//
Bool FirstEntryCon; // 声明布尔型变量FirstEntryCon,依正文看就是首次开仓条件了。//
Begin
FirstEntryCon = ...//首次开仓的条件,就是这一行写好入场规则了,这是模板,省略了。//
MinPoint = MinMove*PriceScale;//最小变动价位,都是照这个固定公式写的,看英文字母都知道意思了。//
If(MarketPosition==0)//假如开始没有持仓的时候。//
{
If(FirstEntryCon)//假如首次开仓的条件都符合了。//
{
firstPrice = Open;//第一次开仓的价格,就是以开盘价来开了。//
LastPrice = firstPrice;//刚开始的最后一次开仓价先赋值为开仓价。//
Buy(2,firstPrice);//以第一次开仓价买2手,方便加减操作的,当然实盘多少都是随个人的习惯。//
}
}else If(MarketPosition==1) // 有了多仓之后的情况,该如何加减仓的具体操作了。//
{
While(CurrentEntries < 4 && High >= LastPrice + AddSet*MinPoint) // 这个CurrentEntries意思是获得当前持仓的建仓次数,直白来解读,当持仓的建仓次数小于4次,并且最高价大于或等于最后一次开仓加上固定系数30乘以最小跳动价格。//
{
LastPrice = LastPrice + AddSet*MinPoint;//这循环累加句子,只要符合上面的,累次加仓直到不符合条件,才跳出来。//
if(Open > LastPrice) //假如开盘价大于最后一次开仓价。//
LastPrice = Open;//就把开盘价赋予给最后一次开仓价。//
Buy(1,LastPrice);//用最后一次开仓价来加仓一手了。//
}
While(CurrentEntries > 0 && Low <= firstPrice - SubSet*MinPoint) // 减仓操作,当持仓的建仓次数大于0,并且最低价小于首次开仓价 减去 固定系数30乘以最小跳动价格的。//
{
firstPrice = firstPrice - SubSet*MinPoint;//这是循环累减的句子,符合条件的依次减,直到没有持仓。//
if(Open < firstPrice)//假如开盘价小于首次开仓价的。//
firstPrice = Open;//把开盘价赋值给首次开仓价。//
Sell(1,firstPrice);//以首次开仓价,平掉一手。//
}
}
...
End
这就是加减仓的操作代码,当然里边的那些手数,一般是依据个人的资金量跟习惯来的,这里只是个模板。我们可以用这个模板,依据突破200移动均线进行加仓买卖,代码如下:
Params
Numeric DslowLength(200);
Vars
NumericSeries AvgValue3;
Numeric MinPoint;
NumericSeries firstPrice;
NumericSeries LastPrice;
Numeric AddSet(30);
Numeric SubSet(30);
Bool FirstEntryCon;
Begin
AvgValue3 = AverageFC(Close,DslowLength);
PlotNumeric("MA3",AvgValue3);
MinPoint = MinMove*PriceScale;
FirstEntryCon = Close[1] >= AvgValue3 ;
If(MarketPosition==0)
{
If( FirstEntryCon )
{
firstPrice = Open;
LastPrice = firstPrice;
Buy(2,firstPrice);
}
}
Else If(MarketPosition==1)
{
While(CurrentEntries < 4 && High >= LastPrice + AddSet*MinPoint)
{
LastPrice = LastPrice + AddSet*MinPoint;
if(Open > LastPrice[1])
LastPrice = Open;
Buy(1,LastPrice);
}
While(CurrentEntries > 0 && Low <= firstPrice - SubSet*MinPoint)
{
firstPrice = firstPrice - SubSet*MinPoint;
if(Open < firstPrice)
firstPrice = Open;
Sell(1,firstPrice);
}
}
End
代码写出来了,但很不幸运的,这个代码TB系统竟然调用不了,问客服说是有的算法运算量太大了,程序运算很慢的,没法执行,所以这个加仓的效果如何,我也不清楚。我个人也不习惯加仓操作,对这也不会多加研究怎么加仓的,解读这个代码只是告诉大家有这么个加减仓的源代码,习惯加仓操作的朋友,可以自己多加研究。当然,加减仓的源代码编写有多种形式,这个只是TB系统里自带的模板,在此解读它方便大家交流学习而已。