全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
怎么样才能:在均线金叉的时候订按布林线下轨作基准价订阅对应的期权
2023-07-06 20:24

//------------------------------------------------------------------------

// 简称: ttlesson_0518_2023

// 名称:

// 类别: 公式应用

// 类型: 用户应用

// 输出: Void

//------------------------------------------------------------------------

Params

//此处添加参数

Numeric min_opt_interval(50);

Numeric max_strike(4100);

Numeric min_strike(3200);

Numeric FastLength(5);// 短期指数平均线参数

Numeric SlowLength(20);// 长期指数平均线参数

Vars

//此处添加变量

global Numeric g1(0);

global bar a1;

Series<Numeric> AvgValue1;

Series<Numeric> AvgValue2;

Numeric oUpLine; //上轨

Numeric oDownLine; //下轨

Numeric oMidLine; //中间线

Numeric TMP2; //中间线

Defs

//此处添加公式函数

Events

//此处实现事件函数

//初始化事件函数,策略运行期间,首先运行且只有一次

OnInit()

{

if(g1 == 1)

{

Numeric i;

////call 平 虚

for i = 2 to 3// 可参数化

{

string str1;

Array<string> str2;

//rb2310.SHFE

StringSplit(Symbol,\".\",str2);

numeric a = round(a1.close/min_opt_interval,0)*min_opt_interval;

str1 = str2[0] + IIFString(ExchangeCode()==\"SHFE\" OR ExchangeCode()==\"CZCE\",\"C\",\"-C-\") + text(a+i*min_opt_interval) +\".\" + str2[1];

integer sym1 = SubscribeBar(str1,Frequency,BeginDateTime);

print(\"str1=\"+str1);

if(a+i*min_opt_interval <= max_strike)

{

integer sym1 = SubscribeBar(str1,Frequency,BeginDateTime);

if(sym1 != InvalidNumeric)

{

print(\"sym1=\"+text(sym1));

}

else

{

print(\"出错\");//

break;

}

}

Else

{

break;

}

}

//////////////put 平 虚

for i = 2 to 3

{

string str1;

Array<string> str2;

//rb2310.SHFE

StringSplit(Symbol,\".\",str2);

numeric a = round(a1.close/min_opt_interval,0)*min_opt_interval;//这里的a1.close 怎么才能改成布林线上轨价格呢  

str1 = str2[0] + IIFString(ExchangeCode()==\"SHFE\" OR ExchangeCode()==\"CZCE\",\"P\",\"-P-\") + text(a-i*min_opt_interval) +\".\" + str2[1];

integer sym1 = SubscribeBar(str1,Frequency,BeginDateTime);

if(a-i*min_opt_interval >= min_strike)

{

integer sym1 = SubscribeBar(str1,Frequency,BeginDateTime);

if(sym1 != InvalidNumeric)

{

print(\"sym1=\"+text(sym1));

}

else

{

print(\"出错\");//

break;

}

}

Else

{

break;

}

}

}

}


OnReady()//数据准备,获取最近K线close

{

//BarStatus==0

if(g1 == 0)

{

GetBar(a1,(BarCount-1)*-1);//需求在均线金叉的时候,公式中的CLOSE价替换成布林上轨价。

g1 = 1;

ReStart(false);

}

}


//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

range[1:datacount-1]

{

           oMidline = AverageFC( C[1],20);

           TMP2 = StandardDev( C[1],20,2);

           oUPline = oMidline + 2* TMP2;

           oDownline = oMidline -2* TMP2;

AvgValue1 = AverageFC(Close,FastLength);

AvgValue2 = AverageFC(Close,SlowLength);

PlotNumeric(\"MA1\",AvgValue1);

PlotNumeric(\"MA2\",AvgValue2);

If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])

{

Buy(0,Open);

}

If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])

{

SellShort(0,Open);

}

}

}



//------------------------------------------------------------------------

// 编译版本 2023/05/18 153456

// 版权所有 wangkaiming

// 更改声明 TradeBlazer Software保留对TradeBlazer平台

// 每一版本的TradeBlazer公式修改和重写的权利

//------------------------------------------------------------------------

wangkaiming

系统公式有boll

如果你的难点是如何在oninit里调用

1.boll事先写基础(不在同一个单元),然后本单元去读

2.全局变量控制路径,先计算完boll再restart。

2023-07-07 09:17
zhong_4619xd

不知道怎么调用。试过用数据库调用。因为用了一个日期作为区别的。oninit里面用不了。可能使用方法不对吧。

2. 我照着你的改。总是不停重启。就是信号出现的时候。把P设为1,然后重启。结果是不停重启

3. 布林线什么我写到上面的代码中了。这里的a1.close 怎么才能改成布林线上轨价格呢  

有两个地方打了注记。怎么改一下达到需求呢

2023-07-07 19:18
您未登录,请先 登录注册 后发表评论
顶部