该函数没有使用说明方法,请求一个范例,在当前000或者888合约状态下,如何映射主力合约
第一种是外部设置 在策略单元设置里进行映射
第二种是在oninit里 加入代码 SetOrderMap2MainSymbol()表示映射到主力合约
或者SetOrderMap2AppointedSymbol(relativesymbol)也可以达到同样效果
具体函数说明请移步函数列表
OnInit()
{
SubscribeBar("IF888.CFFEX","5m",20210520);
SetOrderMap2MainSymbol();
}
这种写法不正确,无法映射主力合约,应该如何改?
实测是可以设置映射过去的,建议你完整的发一个详细操作说明,包括图文,看看你是不是哪里操作错了。
顺便提一句,这个设置是分图层的,不加前缀就是默认设置第一个图层映射。如果你是多图层,可以用range处理
Params
Numeric AfStep( 0.02);
Numeric AfLimit( 0.2 ) ;
Numeric a(0.006);
Numeric initcapital(100); //单位:万
Numeric moneyrate(80); //资金使用比例:单位%
Numeric money(100); //固定市值开仓:单位万
Vars
Series<Numeric> lots(0); //下单手数
Events
OnInit()
{
SubscribeBar("rb888.SHFE","10m",20210101);
SubscribeBar("rb888.SHFE","10m",20210101);
data1.SetOrderMap2MainSymbol();
//SetOrderMap2AppointedSymbol(relativesymbol);
}
OnBarclose(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{
lots=IntPart(Portfolio_CurrentEquity*0.8/(data1.Close*contractunit*BigPointValue*0.1)); //计算开仓手数
If(MarketPosition == 0 And Portfolio_CurrentEquity == Portfolio_CurrentCapital )
{
If( data0.Close > data0.OpenD(0) )
{
data1.buy(lots,data1.Open);
}
If( data0.Close < data0.OpenD(0) )
{
data1.SellShort(lots,data1.Open);
}
}
If(MarketPosition == 1 )
{
If(data0.Close < data0.OpenD(0) )
{
data1.sell(0,data1.Open);
}
}
If(MarketPosition == -1 )
{
If(data0.Close > data0.OpenD(0) )
{
data1.BuyToCover(0,data1.Open);
}
}
}
}
增加了前缀data1,但仍无法映射到主力合约,第0图层是出信号的,第1图层是用来交易的
你是怎么看出来没映射成功的?就用你的代码打开测了单元设置,data0是没映射,data1是映射了的