通过MT4平台来由ctp接口操作期货,首先需要处理好商品和行情
1.期货商品品种
由于期货商品代号会随着时间变化,且商品品种较多,手动维护商品的话太繁琐。比较简单的处理方式
是做一个服务端的插件,在插件的启动事件
int APIENTRY MtSrvStartup(CServerInterface *server)
去检查并新增商品代号
这里主要用到了MT4接口的这两个个方法,取商品信息和新增商品
int __stdcall SymbolsGet(LPCSTR symbol,ConSymbol *security);
int __stdcall SymbolsAdd(ConSymbol *sec);
期货的品种种类是相对固定的,变化的只是月份,所以可以考虑常量定义相关种类,也可以考虑直接从四大期货的网站去爬。
我是直接用常量定义种类,然后根据当前月份计算目前的期货品种。
SymbolDefine Defines[SYMBOL_DEF_COUNT] = {
//中国金融期货交易所 CFFEX
{ "沪深300", "IF", 1, 1, {
0}, 0},//当月、下月及随后两个季月(如当前为3月,则为4","5","6","9}},
{ "上证50", "IH", 1, 1, {
0}, 0},//当月、下月及随后两个季月
{ "中证500", "IC", 1, 1, {
0}, 0},//当月、下月及随后两个季月
{ "5年期国债", "TF", 3, 2, {
0}, 0},//最近的三个季月(3月、6月、9月、12月中的最近三个月循环)(当前为3月 则为6","9","12}},
{ "10年期国债", "T", 3, 2, {
0}, 0},//最近的三个季月(3月、6月、9月、12月中的最近三个月循环)
//上海期货交易所 SHFE
{ "铜", "cu", 0, 0, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 }, 1},
{ "铝", "al", 0, 0, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 }, 1},
{ "锌", "zn", 0, 0, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 }, 1},
{ "铅", "pb", 0, 0, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 }, 1},
{ "镍", "ni", 0, 0, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12 }, 1},
{ "锡", "sn", 0, 0, { 1, 2, 3, 4, 5, 6,