【直播分享TBQ3-稳定截面策略2025版】

//------------------------------------------------------------------------ // 简称: super_ifmhc // 名称: // 类别: 公式应用 // 类型: 用户应用 // 输出: Void // 来源: wangkaiming //------------------------------------------------------------------------ ////////本公式图层0使用指数 Params //此处添加参数 Vars //此处添加变量 Series<Numeric> quote_chg; Series<array<Numeric>> array_chg; array<Integer> id1; Events OnInit() { //记得第一个商品是 期货商品指数 //手动的话全部自己订阅 //代码订阅则全部代码订阅 //SubscribeBar("tbf000.TBFT","15m",20250101); //SubscribeBar("rb888.SHFE","15m",20250101); } OnBar(ArrayRef<Integer> indexs) { Numeric i; //range[0:datacount-1] //计算每个图层的涨跌幅,并把所有涨跌幅放进data0的序列数组里 // Range[i=0:datacount-1] //i可以在range内被使用,指定为当前操作图层 * { quote_chg = (c - c[1])/c[1]*100;//涨跌幅 * Commentary("data["+text(i)+"].quote_chg = "+text(quote_chg)); data[0].array_chg[0][i] = quote_chg;// [0]表示的是回溯,[i]数组的下标 ** } //开始排序 array<Integer> id1; for i = 1 to GetArraySize(array_chg[1])-1 //根据涨跌幅数组的大小生成下标数组 { Commentary("array_chg[1]["+text(i)+"]="+text(array_chg[1][i])); id1[i]=i;//排序数组的一个初始化,0,1,2,3,4,5 } array<Numeric> q1 = array_chg[1];// array_chg[1] 上一个周期的涨跌幅数组 Na1Sort2(q1,id1,1,GetArraySize(q1)-1,false);//**** //对一维数组排序, 返回下标, 不改变原数组 //执行完之后,id1就变了,当前下标新排序号,下标数组值为数组原序号(找到下单的品种) //id1的值表示图层号 id顺序其实就是已经排序的顺序 for i=1 to GetArraySize(q1)-1 { Commentary("id1["+text(i)+"]:"+ text(id1[i]));//输出id[i] //常见错误:以为 id1[i] 就是图层的data[i] 对应的.. 值 //id1[1]:4 => 错误的翻译认为 图层1排第四 X //正确的结论是 图层4排第一 // data[id[2]] , id[第几] if( i == 10) { Commentary("排第10的品种是:"+(data[id1[i]].SymbolName )); } } /////////////////////////////////////// //换仓 ** for i=1 to GetArraySize(id1)-1 { if(i==1)// if(i < 10) { if(data[id1[i]].MarketPosition <=0)// 如果上一根有仓,代表选入过 { data[id1[i]].buy(1,open); } } else if(i == GetArraySize(id1)-1) // i>90 { if(data[id1[i]].MarketPosition >=0) { data[id1[i]].sellshort(1,open); } } else//平仓 { data[id1[i]].sell(0,open); data[id1[i]].BuyToCover(0,open); } } } 本周四代码,供学习使用,无订阅版本。具体可以回放视频。有订阅版本 ↓//------------------------------------------------------------------------ // 简称: super_ifmhc // 名称: // 类别: 公式应用 // 类型: 用户应用 // 输出: Void // 来源: wangkaiming //------------------------------------------------------------------------ ////////本公式图层0使用指数 Params //此处添加参数 Vars //此处添加变量 Series<Numeric> quote_chg; Series<array<Numeric>> array_chg; array<Integer> id1; Events OnInit() { //记得第一个商品是 期货商品指数 //手动的话全部自己订阅 //代码订阅则全部代码订阅 SubscribeBarCounts("tbf000.TBFT","15m",1000);//订阅商品指数,商品指数用来填充 array<string> get_sym; GetDicValue("TB_INDUSTRY","F1020200001",SystemDateTime,get_sym); //print(TextArray(get_sym)); Numeric i; for i = 0 to GetArraySize(get_sym)-1 { SubscribeBarCounts(get_sym[i],"15m",200); } } OnBar(ArrayRef<Integer> indexs) { Numeric i; //range[0:datacount-1] //计算每个图层的涨跌幅,并把所有涨跌幅放进data0的序列数组里 // Range[i=0:datacount-1] //i可以在range内被使用,指定为当前操作图层 * { quote_chg = (c - c[1])/c[1]*100;//涨跌幅 * Commentary("data["+text(i)+"].quote_chg = "+text(quote_chg)); data[0].array_chg[0][i] = quote_chg;// [0]表示的是回溯,[i]数组的下标 ** } //开始排序 array<Integer> id1; for i = 1 to GetArraySize(array_chg[1])-1 //根据涨跌幅数组的大小生成下标数组 { Commentary("array_chg[1]["+text(i)+"]="+text(array_chg[1][i])); id1[i]=i;//排序数组的一个初始化,0,1,2,3,4,5 } array<Numeric> q1 = array_chg[1];// array_chg[1] 上一个周期的涨跌幅数组 Na1Sort2(q1,id1,1,GetArraySize(q1)-1,false);//**** //对一维数组排序, 返回下标, 不改变原数组 //执行完之后,id1就变了,当前下标新排序号,下标数组值为数组原序号(找到下单的品种) //id1的值表示图层号 id顺序其实就是已经排序的顺序 for i=1 to GetArraySize(q1)-1 { Commentary("id1["+text(i)+"]:"+ text(id1[i]));//输出id[i] //常见错误:以为 id1[i] 就是图层的data[i] 对应的.. 值 //id1[1]:4 => 错误的翻译认为 图层1排第四 X //正确的结论是 图层4排第一 // data[id[2]] , id[第几] if( i == 10) { Commentary("排第10的品种是:"+(data[id1[i]].SymbolName )); } } /////////////////////////////////////// //换仓 ** for i=1 to GetArraySize(id1)-1 { if(i==1)// if(i < 10) { if(data[id1[i]].MarketPosition <=0)// 如果上一根有仓,代表选入过 { data[id1[i]].buy(1,open); } } else if(i == GetArraySize(id1)-1) // i>90 { if(data[id1[i]].MarketPosition >=0) { data[id1[i]].sellshort(1,open); } } else//平仓 { data[id1[i]].sell(0,open); data[id1[i]].BuyToCover(0,open); } } } 旧链接 https://bbs.tbquant.net/thread/forum12353