关于MAP

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()]相等。

Map
map
map的排序
函数返回MAP
Global 对map有什么影响
关于map数据类型在用户函数参数中无法使用的问题
map数据类型赋值
Map初始值如何赋值
希望能升级Map的应用
map最多可以放多少个元素