//------------------------------------------------------------------------
// 简称: 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);
}
}
}
旧链接