//------------------------------------------------------------------------
// 简称: 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公式修改和重写的权利
//------------------------------------------------------------------------
不知道怎么调用。试过用数据库调用。因为用了一个日期作为区别的。oninit里面用不了。可能使用方法不对吧。
2. 我照着你的改。总是不停重启。就是信号出现的时候。把P设为1,然后重启。结果是不停重启
3. 布林线什么我写到上面的代码中了。这里的a1.close 怎么才能改成布林线上轨价格呢
有两个地方打了注记。怎么改一下达到需求呢
系统公式有boll
如果你的难点是如何在oninit里调用
1.boll事先写基础(不在同一个单元),然后本单元去读
2.全局变量控制路径,先计算完boll再restart。