Params
//此处添加参数
Integer length1(5);//EMA周期
Integer length2(20);//EMA周期
Integer length3(60);//EMA周期
//MACD
Integer FastLength(12);
Integer SlowLength(26);
Integer MACDLength(9);
Vars
//此处添加变量
Series<Numeric> ema1;
Series<Numeric> ema2;
Series<Numeric> ema3;
Series<Numeric> MACDDiff;
Series<Numeric> AvgMACD;
Series<Numeric> MACDValue;
Plot plt;
Defs
//此处添加公式函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
plt.figure(0);
plt.setOption("DIF","x-format","time");
plt.setOption("DEA","x-format","time");
plt.setOption("零线","x-format","time");
plt.setOption("MACD","x-format","time");
//与数据源有关
Range[0:DataCount-1]
{
//=========数据源相关设置==============
//AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
//AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
//AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
//AddDataFlag(Enum_Data_OnlyDay()); //设置仅日盘
//AddDataFlag(Enum_Data_OnlyNight()); //设置仅夜盘
//AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志
//=========交易相关设置==============
//MarginRate rate;
//rate.ratioType = Enum_Rate_ByFillAmount; //设置保证金费率方式为成交金额百分比
//rate.longMarginRatio = 0.1; //设置保证金率为10%
//rate.shortMarginRatio = 0.2; //设置保证金率为20%
//SetMarginRate(rate);
//CommissionRate tCommissionRate;
//tCommissionRate.ratioType = Enum_Rate_ByFillAmount;
//tCommissionRate.openRatio = 5; //设置开仓手续费为成交金额的5%%
//tCommissionRate.closeRatio = 2; //设置平仓手续费为成交金额的2%%
//tCommissionRate.closeTodayRatio = 0; //设置平今手续费为0
//SetCommissionRate(tCommissionRate); //设置手续费率
//SetSlippage(Enum_Rate_PointPerHand,2); //设置滑点为2跳/手
//SetOrderPriceOffset(2); //设置委托价为叫买/卖价偏移2跳
//SetOrderMap2MainSymbol(); //设置委托映射到主力
//SetOrderMap2AppointedSymbol(symbols, multiples); //设置委托映射到指定合约,symbols是映射合约数组,multiples是映射倍数数组
}
//与数据源无关
//SetBeginBarMaxCount(10); //设置最大起始bar数为10
//SetBackBarMaxCount(10); //设置最大回溯bar数为10
//=========交易相关设置==============
//SetInitCapital(1000000); //设置初始资金为100万
//AddTradeFlag(Enum_Trade_Ignore_Buy()); //设置忽略多开
//AddTradeFlag(Enum_Trade_Ignore_Sell()); //设置忽略多平
//AddTradeFlag(Enum_Trade_Ignore_SellShort()); //设置忽略空开
//AddTradeFlag(Enum_Trade_Ignore_Buy2Cover()); //设置忽略空平
}
//在所有的数据源准备完成后调用,应用在数据源的设置等操作
OnReady()
{
}
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
String s;
Numeric vLowest;
Numeric vHighest;
Numeric x;
x = 3;
vLowest = Lowest(L,x);//有此语句,ema,MACD图形从第x个开始???
vHighest = Highest(H,x);
Commentary("CurrentBar:"+Text(CurrentBar));
//EMA
ema1 = XAverage(C,length1);
PlotNumeric("ema1",ema1);
ema2 = XAverage(C,length2);
PlotNumeric("ema2",ema2);
ema3 = XAverage(C,length3);
PlotNumeric("ema3",ema3);
//MACD
MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDDiff,MACDLength);
MACDValue = (MACDDiff - AvgMACD)*2;
plt.line("DEA",date+time,AvgMACD);//慢线
plt.line("DIF",date+time,MACDDiff);//快线
If (MACDValue >= 0) {
plt.setOption("MACD","color",Red);
plt.barv("MACD",date+time,MACDValue);
} Else {
plt.setOption("MACD","color",Green);
plt.barv("MACD",date+time,MACDValue);
}
plt.line("零线",date+time,0);
print(Text(FastLength)+","+Text(SlowLength)+","+Text(MACDLength));
}
//下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组
OnBarClose(ArrayRef<Integer> indexs)
{
}
//持仓更新事件函数,参数pos表示更新的持仓结构体
OnPosition(PositionRef pos)
{
}
//策略账户仓更新事件函数,参数pos表示更新的账户仓结构体
OnStrategyPosition(PositionRef pos)
{
}
//委托更新事件函数,参数ord表示更新的委托结构体
OnOrder(OrderRef ord)
{
}
//成交更新事件函数,参数ordFill表示更新的成交结构体
OnFill(FillRef ordFill)
{
}
//定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
OnTimer(Integer id,Integer intervalMillsecs)
{
}
//通用事件触发函数,参数evtName为事件名称,参数evtValue为事件内容
OnEvent(StringRef evtName,MapRef<String,String> evtValue)
{
}
//当前策略退出时触发
OnExit()
{
}
x=3时,输出从第3个Bar开始
x=20时,输出从第20个Bar开始
系统自动读取公式最大的回溯范围n,然后图表最开始的n根bar是不出信号不画图的,因为所有计算结果都因为样本不足而可能出错