老师您好。最近在研究系统函数基于商品价差的通道突破系统,里面的开仓条件是:
If(Data0.Marketposition == 0 And CC[1] >= UpperLine[1] And Data0.Vol > 0 And Data1.Vol > 0)
理论上每一笔交易两个图层应该都是同时开仓或平仓的,Data1没有成交量的话应该不会开仓(如图一)
但是在做回测以及模拟盘的时候发现还是经常会瘸腿(只有Data0开仓或平仓)(如图二),想请教一下老师这是什么原因呢,要怎么调整才能规避这个问题?
建议你检查一下可用资金够不够
老师您好,我是用模拟盘,每次开仓一手,应该不是资金的问题,图表回测和模拟盘跑的时候都会有这个问题,这是个系统自带的案例,我做了好多次测试一直解决不了,尤其是在10秒的线上出现劈叉的概率还挺高的。公式是// 简称: SpreadChannelBreakout_L// 名称: 基于商品价差的通道突破系统多
老师您好,完整的代码如下,如果周期设置的越短(比如10秒线,越容易出错)
Params
Numeric Lots0(1); // 商品A的头寸
Numeric Lots1(1); // 商品B的头寸
Numeric Length(20); // 通道的周期数
Numeric StopLen(10); // 止损通道的周期数
Vars
Series<Numeric> OO; // 价差开盘价
Series<Numeric> HH; // 价差最高价
Series<Numeric> LL; // 价差最低价
Series<Numeric> CC; // 价差收盘价
Numeric Factor0; // A商品计算价差的系数
Numeric Factor1; // B商品计算价差的系数
Series<Numeric> UpperLine; // 通道上轨
Series<Numeric> LowerLine; // 通道下轨
Series<Numeric> StopLine; // 止损位
Events
OnInit()
{
Numeric count = Max(Length,StopLen);
SetBeginBarMaxCount(count - 1);
}
OnBar(ArrayRef<Integer> indexs)
{
// 价差计算系数
Factor0 = Lots0*Data0.ContractUnit*Data0.BigPointValue;
Factor1 = Lots1*Data1.ContractUnit*Data1.BigPointValue;
// 计算价差并输出价差K线
CC = Data0.Close*Factor0 - Data1.Close*Factor1;
OO = Data0.Open*Factor0 - Data1.Open*Factor1;
HH = Max(OO,CC);
LL = Min(OO,CC);
PlotNumeric(\"Open\",OO);
PlotNumeric(\"High\",HH);
PlotNumeric(\"Low\",LL);
PlotNumeric(\"Close\",CC);
// 计算价差的周期通道上下轨
UpperLine = Highest(HH[1],Length);
LowerLine = Lowest(LL[1],Length);
PlotNumeric(\"UpperLine\", UpperLine);
PlotNumeric(\"LowerLine\", LowerLine);
// 开仓
If(Data0.Marketposition == 0 And CC[1] >= UpperLine[1] And Data0.Vol > 0 And Data1.Vol > 0)
{
Data0.Buy(Lots0, data0.Open);
Data1.SellShort(Lots1, Data1.Open);
}
// 反向平仓
If(Data0.Marketposition == 1 And CC[1] <= LowerLine[1] And Data0.Vol > 0 And Data1.Vol > 0)
{
Data0.Sell(0, Data0.Open);
Data1.BuyToCover(0, Data1.Open);
}
// 止损
Stopline = Lowest(LL[1], StopLen);
If(Data0.MarketPosition == 1 And Data0.BarsSinceEntry > 0 And Data0.Vol > 0 And Data1.Vol > 0)
{
If(CC[1] <= StopLine[1])
{
Data0.Sell(0,Data0.Open);
Data1.BuyToCover(0,Data1.Open);
}
}
}
//------------------------------------------------------------------------
// 编译版本 GS2014.10.25
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
下单语句呢,有没有超价下单