Params
//此处添加参数
Numeric length(50); //定义数值行参数Length,默认值为10; 该值决定序列Series可以回溯以前多少个BAR的值
Numeric millsecs(1000);
Numeric Buy_O(0);
Numeric Buy_C(0);
Numeric Sellshort_O(0);
Numeric Sellshort_C(0);
Vars
//此处添加变量
Integer i(0);
Integer j(0);
//Map是一种字典类型的数据。Map<keys,values>的结构提供了不重复的key与数值的一一对应的存储。
//Price的keys是String字符串,存放时间点,values是Array<Numeric>一维数组,存放历史N天某一时间点的收盘价序列(或者开盘价)
//keys=0900_O是09:00bar的开盘价,keys=0900是09:00bar的收盘价,也是就是9:05的价格。
//keys=2100_O是21:00bar的开盘价,keys=2100是21:00bar的收盘价,也是就是21:05的价格。
//Spread是某一时间点与开盘价价差的每日历史价差序列,Numeric是序列长度
//求标准差的类型,1 – 求总体方差,2 – 求样本方差
//Global Series<String> Time("0900","0930");//
Global Numeric S(0);
//Global Map<String, Array<Numeric>> Price;
Global Map<integer, Array<Numeric>> Price_Close;
Global Map<integer, Array<Numeric>> Price_Open;
Global Map<integer, Array<Numeric>> Spread;
Global Map<integer, integer> Var;
Global Array<Numeric> Time5M([900,905,910,915,920,925,930,935,940,945,950,955,1000,1400,1405,1410,1415,1420,1425,1430,1435,1440,1455]);
Global Array<Numeric> Time5MOpen([900]);
//Global Array<Numeric> inte(0);
Global Integer timerId;
Global Numeric BS_Open(0);
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
timerId=createTimer(millsecs);
//与数据源有关
Range[0:DataCount-1]
//初始化字典Price,Spread,Var,将KEY设置为时间,VALUE全部设置为O。
for i=0 to GetArraySize(Time5M)-1
{
print("Time5M[i]:" +Text(Time5M[i]));
for j=0 to length-1
{
Price_Close[Time5M[i]][j]=0;
Spread[Time5M[i]][j]=0;
}
Var[Time5M[i]]=0;
print("Price_Close:" +TextArray(Price_Close[Time5M[i]]));
print("Spread:" +TextArray(Spread[Time5M[i]]));
//print("Var:" +TextArray(Var[Time5M[i]]));
print("Var:" +Text(Var[Time5M[i]]));
}
for i=0 to GetArraySize(Time5MOpen)-1
{
print("Time5MOpen:" +Text(Time5MOpen[i]));
for j=0 to length-1
{
Price_Open[Time5MOpen[i]][j]=0;
}
//print("Price:" +TextArray(Price[Time5M[i]]));
//print("Spread:" +TextArray(Spread[Time5M[i]]));
//print("Var:" +TextArray(Var[Time5M[i]]));
}
{
//=========数据源相关设置==============
//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()
{
}
//基础数据更新事件函数
OnDic(StringRef dicName,StringRef dicSymbol,DicDataRef dicValue)
{
}
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
}
//onbar 是每个bar都执行一次
OnBar(ArrayRef<Integer> indexs)
{
/*
if (10000*Time()>=900 && 10000*Time()<=1000)
{
Print("year:" + Text(year()));
Print("month:" + Text(Month()));
Print("day:" + Text(Day()));
Print("当前Bar时间(Time函数):" + Text(Time()));
//Print("Time:" + Text(Hour()));
//Print("Minute:" + Text(Minute())); //S=10000*Time();
//Print("当前Bar时间(Time函数):" + Text(S));
}
*/
for i=0 to GetArraySize(Time5MOpen)-1
{
if (Time5MOpen[i]==10000*Time())
{
ArrayErase(Price_Open[Time5MOpen[i]],0,1);//删除一维数组Price_Open[Time5MOpen[i]]的第一个元素
ArrayPushBack(Price_Open[Time5MOpen[i]],Open);//一维数组Price_Open[Time5MOpen[i]]的最后一个元素赋值为Open
//print("Price_Open:" +TextArray(Price_Open[Time5MOpen[i]]));
}
}
for i=0 to GetArraySize(Time5M)-1
{
//print("Time5M[i]:" +Text(Time5M[i]));
//Price[Time5M[i]]=0;
//print("Price:" +TextArray(Price[Time5M[i]]));
//10000*Time(),time的显示格式是0.0930,所以要乘以1000.
if (Time5M[i]==10000*Time())
{
//ArrayErase(ArrayRef arr, Integer pos, Integer count)将数组中从位置pos开始的count个元素删除
//ArrayPushBack-一维数组末尾添加元素
ArrayErase(Price_Close[Time5M[i]],0,1);//删除一维数组Price_Close[Time5M[i]]的第一个元素
ArrayPushBack(Price_Close[Time5M[i]],Close);//一维数组Price_Close[Time5M[i]]的最后一个元素赋值为Close
//print("Price:" +TextArray(Price[Time5M[i]]));
//Na1Dev:一维数组的减法,Spread[Time5M[i]]=Price_Close[Time5M[i]]-Price_Open[Time5MOpen[0]]
//比如09:00bar的收盘价(即09:30的价格)-09:00bar的开盘价,存到Spread中
Numeric val = Na1Dev(Price_Close[Time5M[i]],Price_Open[Time5MOpen[0]],Spread[Time5M[i]]);
//就一维数组Spread[Time5M[i]]的标准差
Numeric a_val = StandardDevArray(Spread[Time5M[i]],1);
Var[Time5M[i]] = a_val;
//print("Price_Close[Time5M[i]]:" + TextArray(Price_Close[Time5M[i]]));
//print("Price_Open[Time5MOpen[0]]:" + TextArray(Price_Open[Time5MOpen[0]]));
//print("Spread[Time5M[i]]:" + TextArray(Spread[Time5M[i]]));
Print("当前Bar时间(Time函数):" + Text(Time()));
print("Time5M[i]:" + Text(Time5M[i]));
print("Var[Time5M[i]]:" + Text(Var[Time5M[i]]));
Print("10000*Time(): " + Text(10000*Time()));
Print("Var: " + Text(Var[10000*Time()]));
print("Var[Time5M[i]]:" + Text(Var[Time5M[i]]));
}
}
}
苹果期货主力合约5分钟K线,为什么1410,1415,1420,1425,1430,1435,1440这几个点Var[10000*Time()]值等于N/A,其他时间,Var[Time5M[i]]和Var[10000*Time()]相等。