//------------------------------------------------------------------------
Params
Numeric Length(20); //计算高低点周期
Numeric MaxLots(10); //最大连续浮亏开仓次数
Numeric lots1(1); //初始开仓手数
Numeric lotsn(1); //加仓手数
String strTmp("30m"); //订阅的K线周期
Vars
Series<Numeric> HH;
Series<Numeric> LL;
Series<Numeric> HH1;
Series<Numeric> LL1;
Series<Numeric> longEntryPrice1;
Series<Numeric> shortEntryPrice1;
Series<Numeric> jincha;
Series<Numeric> sicha;
Series<Numeric> shortProfit;
Series<Numeric> longProfit;
Series<Numeric> lots_sum;
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
//=========跨周期数据计算==============
{
SubscribeBar(data0.Symbol,strTmp,data0.BeginDateTime);
}
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
If(CurrentDate > 20260131)
{
Return;
}
Range[1:1]
{
HH = Highest(High,Length);
LL = Lowest(Low,Length);
HH1 = nthcon(HH>HH[1],1);
LL1 = nthcon(LL<LL[1],1);
If(HH1 < LL1)
{
PlotAuto("趋势线",LL,LL,Red,Enum_Line,Enum_Solid);
}
Else
{
PlotAuto("趋势线",HH,HH,Green,Enum_Line,Enum_Solid);
}
If(CrossOver(LL1,HH1))
{
jincha=1;
sicha=0;
}
If(CrossUnder(LL1,HH1))
{
jincha=0;
sicha=1;
}
}
Range[0:0]
{
//开仓交易
If(CurrentBar == 1)
{
lots_sum = lots1;
} Else
{
lots_sum = lots_sum;
}
If(MarketPosition == 0 )
{
If(data1.jincha[1]==0 and data1.jincha==1)
{
Buy(lots_sum,Close);
longEntryPrice1 = LastEntryPrice;
}Else If(data1.sicha[1]==0 and data1.sicha==1)
{
SellShort(lots_sum,Close);
shortEntryPrice1 = LastEntryPrice;
}
}
//平仓交易
If(MarketPosition > 0 And data1.sicha[1]==0 and data1.sicha==1 And BarsSinceEntry >= 1)
{ //平多单
Sell(0,Close);
longProfit = ExitPrice - longEntryPrice1;
If((longProfit <= 0) And lots_sum < MaxLots)
{
lots_sum = lots_sum + lotsn;
}Else If (longProfit >0)
{
lots_sum = lots1;
}
}
Else If(MarketPosition < 0 And data1.jincha[1]==0 And data1.jincha==1 And BarsSinceEntry >= 1)
{ //平空单
BuyToCover(0,Close);
shortProfit = shortEntryPrice1 - ExitPrice;
If((shortProfit <= 0) And lots_sum < MaxLots)
{
lots_sum = lots_sum + lotsn;
}Else If (shortProfit >0)
{
lots_sum = lots1;
}
}
}
}
跨周期策略加载时短周期K线的第一根BAR显示信号闪烁(无开仓信号),模拟盘跟踪时偶尔有实际反手时间晚于K线图信号时间点,请问这是什么原因导致的?
这个看代码挺难分析出结论的,一般需要往代码里加写日志的语句,然后分析出问题时的日志来找原因。
https://www.bilibili.com/video/BV16N411s7iA/?spm_id_from=333.999.0.0