• 加入 >>

Mql5自定义品种 中国金融产品: A股票、期货、债券、数字货币的应用(6) ----指标及EA 应用

要添加评论,请登录注册
Mars Yuan
108
Mars Yuan  

8、基于A股的MQL5 指标应用

为了展现基于C++在MetsTrader5的IDE系统处理中国金融证券的无法比拟的优势,简单列举一些常规Python难以处理的指标应用过程。Python语言和Quantopian框架模式中国大部分应用用户的概念都是所谓“量化”,一类量化应用是将证券基本面信息参数做不同组合形成指标进行交易,另一类是将公域指标 例如Boll、Rsi+Obv..等形成不同指标组合策略应用交易,类似MetsTrader生成EA模式。因篇幅所限本文简要展现MetsTrader5的IDE平台如何便捷快速应用专业复杂数学模型指标组合做金融证券交易的趋势判断、交易定价预测、波段周期识别、做个展现,算法均来自MQL5.community的文献,用户可以自行研读。

趋势判断 使用“方差回归”算法:https://www.mql5.com/en/code/352; 在时间序列分析中趋势判断,特别是趋势折点判断是最为重点的领域,任何基于MA即均线算法对于趋势转折的分析都是滞后效应,如果不通过MA均线类算法进行趋势特别是转折分析目前比较有效的是利用非线性回归与方差,关于均线与回归算法特性比较可参考MetsTrader社区爱好者的实践对比:https://www.mql5.com/en/forum/216586

交易定价预测 使用“傅里叶”预测算法:https://www.mql5.com/en/forum/1304,价格预测是目前AI机器学习算法应用的重要方向,但是往往AI预测结果要么是价格概率区间要么就钝化堪比均线。作为价格预测快速傅里叶变换比较具备实际应用价值。

波段周期识别 使用“EMD-HHT 黄锷”经验模态分解算法:https://www.mql5.com/zh/articles/439,为什么波段识别是任何证券金融交易分析的基础?以均线策略举例均线趋势策略在非趋势明确阶段会出现大幅亏损回撤,对于具备初步算法交易实践掌握算法趋势判定不难,难在于交易全时段,特别是非趋势阶段 有人称之为“震荡”阶段是提高交易策略确保趋势交易盈利的基础。希尔伯特——黄锷算法应用在大气物理学近几年被引入金融工程领域作为交易波段周期识别非常高效。


如果形成高效全时域的量化算法、机器高频EA交易策略其中 30%是指标分析、30%是交易效率、30%对冲保护。而指标分析的三个过程波段周期识别 趋势判断 定价预测是 交易效率和交易保护对冲策略的基础。没有量化算法、机器高频EA交易的证券市场是原始的交易市场其资产定价及交易规模都极大的瓶颈。特别是中国资本市场的流动性危机的解决必须通过量化算法、机器高频EA交易来提升解决。

图例如下:

600886.SH指标应用



9、基于A股的Mql5 EA系统的实例及中国A股程序化交易展望

      量化分析脚本、指标最终要形成EA,程序化交易 高频交易是EA追求的目标。基于Mql5建立A股EA机器交易系统是本文的目标。但是由于MetaTrader策略回测是基于Ticks分笔数据,而tushare目前还不能提供这类高频数据,日线Bar数据的ticks数据Bid、Ask常有异常值导致EA回测错误。因此要用1min分钟Bar线做策略回测。其中m1\m5\m15\H1均可以顺畅回测。

      本文只是对中国A股的EA系统演示,并不是精研EA程序交易算法的内容,因此选取社区的典型 双均线+MACD的经典普里亚(Puria)方法 参见:https://www.mql5.com/zh/code/23250

      在使用Mql5回测策略之前要对自定义A股数据的交易特性进行定义,需要在新建自定义品类或者EA过程中使用CustomSymbolSetInteger()函数将交易品种属性定义。交易品种属性详见https://www.mql5.com/zh/docs/constants/environment_state/marketinfoconstants;建议实际调试过程不使得EA代码繁杂本文将定义交易品种属性植入读取日线和分钟线代码中;其交易品种定义函数如下:

void SetSpecifications(string name)
   {  
//---整数属性-------------------------------------
   CustomSymbolSetInteger(name,SYMBOL_CUSTOM,true);                       // 布尔值表示此品种是自定义的
   CustomSymbolSetInteger(name,SYMBOL_BACKGROUND_COLOR,clrGreen);         // 在市场观察中此品种所用的背景颜色
   CustomSymbolSetInteger(name,SYMBOL_SELECT,true);                       // 布尔值表示在市场观察中选择了此品种
   CustomSymbolSetInteger(name,SYMBOL_VISIBLE,true);                      // 布尔值表示此品种已在市场观察中显示
   CustomSymbolSetInteger(name,SYMBOL_CHART_MODE,SYMBOL_CHART_MODE_LAST); //柱形图以最后价为基础//SYMBOL_CHART_MODE_BID//SYMBOL_CHART_MODE_LAST
   
   
   CustomSymbolSetInteger(name,SYMBOL_TRADE_MODE,SYMBOL_TRADE_MODE_FULL);//交易方式:没有限制 
   CustomSymbolSetInteger(name,SYMBOL_TRADE_CALC_MODE,SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX);//交易所股票模式(MOEX) – 为在MOEX交易证券计算预付款和盈利
   
   
   
// 其它整数属性
   CustomSymbolSetInteger(name,SYMBOL_DIGITS,2);                          // 小数位
   CustomSymbolSetInteger(name,SYMBOL_SPREAD,2);                          // 点差的点数
   CustomSymbolSetInteger(name,SYMBOL_SPREAD_FLOAT,false);                // 布尔值表示浮动点差
//---双精度属性 ---------------------------------------------------   
//   CustomSymbolSetDouble(Name,SYMBOL_BID,0);                            // 竞买价,出售品种的最佳价格 
   //CustomSymbolSetDouble(name,SYMBOL_BIDHIGH,0);                          // 每日最高的竞买价
   //CustomSymbolSetDouble(name,SYMBOL_BIDLOW,0);                           // 每日最低的竞买价
   
   CustomSymbolSetDouble(name,SYMBOL_POINT,0.01);                         // 点数
   CustomSymbolSetDouble(name,SYMBOL_TRADE_TICK_SIZE,0.01);                   // 最小价格变化
   
   CustomSymbolSetDouble(name,SYMBOL_VOLUME_MIN,1);                       // 一笔成交最小交易量
   CustomSymbolSetDouble(name,SYMBOL_VOLUME_MAX,1000);                       // 一笔成交最大交易量
   CustomSymbolSetDouble(name,SYMBOL_VOLUME_STEP,0.01);                      // 最小交易量变化增量
   
   
   CustomSymbolSetDouble(name,SYMBOL_TRADE_CONTRACT_SIZE,1);              //合约大小
     
// 其它双精度属性
//---字符串属性-----------------------------------------------+
//   CustomSymbolSetString(Name,SYMBOL_BASIS,"");                           // 自定义品种的基准资产名称
//   CustomSymbolSetString(Name,SYMBOL_CURRENCY_BASE,"");                   // 品种的基准货币
//   CustomSymbolSetString(Name,SYMBOL_CURRENCY_PROFIT,"");                 // 盈利货币
// 其它字符串属性

}

调用过程在创建自定义品种之后 截取部分代码:

                      MqlRates Rates[];
                      
                      Tushare_CharArrayToStruct(result,Rates);     //---将HTTP POST返回char数组拆分到MQL自定义品种结构中--
                      
                      Adj_Process(Token,stockName,Adj,Rates);      //------除权、复权过程-----
                      
                      CustomSymbolCreate(stockName, "\\Astock");   //----自定义Astock品类目录----
                      
                      SetSpecifications(stockName);                //----定义自定义品类交易属性  

                      
                      int reg=CustomRatesReplace(stockName,tBegin,tEnd,Rates,WHOLE_ARRAY );//----将MqlRates数组数据建立并导入自定义品类目录下的产品中
                      //int reg_t=CustomTicksDelete(stockName,Ts,Te);//----清空所有Ticks数据
                         
                      MessageBox(stockName+" "+"Downloaded"+" "+Freq+" "+"OK!" );

本文将A股交易品种属性定义过程植入日线和分钟线代码中,如需要对指数进行仿真回测请自行嵌入相应函数。

调试EA的A股普里亚(Puria)交易策略结果如下:

MetaEditor 调试图1

MetaEditor调试和Pyhton的Tradingview的系统不同,可以更方便看到EA的每一笔交易及细节在指标和图表的真实反应。点击交易列表明显同步定位到回测图中的时点位置,这对于EA程序交易调试和优化是必要的。


MetaQuotes 回测图2


在MetaQuotes策略回测中可以看到交易回测的详实报告,并且可以跟随EA回测的过程跟踪账户净值曲线的变化。本文在回测案例中随机选取的000001.SZ平安银行的M15数据进行普里亚(Puria)交易策略回测,可以看到12月11日到12月18日普里亚(Puria)交易策略自动的判断波段的卖点买点,并且分多次优化平仓的时点。

MetaQuotes策略回测中还可以提供优化性能对比与专业报告,这对于高频交易与毫秒接口算法调试是不可或缺的功能。

总结:

目前中国金融工程及量化交易刚刚起步,大批量化爱好者通过Python语言结合Quantopian、Tradingview类系统进行初步的算法与指标研究学习,但是如果进一步将算法指标形成EA,需要在MQL5的专业程序机器交易系统下进行。MQL5社区对中国金融产品 A股 债券 期货 数字货币的讨论与需求非常迫切。就当前中国资本市场发展情况看2020年各大券商将推出程序算法交易接口。现在的技术准备将是为未来广阔的机器量化算法交易时代的基础。

本文通过Tushare开源金融数据将中国金融产品数据导入MQL5,并对几个数据核心处理过程做了初步的实现,并基于这些数据的指标应用和EA应用做了案例展示。本文只做了Tushare数据源的股票部分,期货 债券 数字货币应用雷同,大家可以阅读Tushare社区文档参考本文代码研习。文中所有指标和策略方法均来自Mql5社区的文献并没有使用私研算法,便于学习和交易。

作者将后续再另作关于指标算法和EA算法的专题研究发布。


附件:Astock_Stock.mq5是A股日线程序,Astock_index.mq5是A股指数程序,Astock_Stock_Min.mq5是A股分钟数据程序。

附加的文件:
Mars Yuan
108
Mars Yuan  

1:Mql5自定义品种 A股(1)  ----个股列表数据处理过程

https://www.mql5.com/zh/forum/329854

2:Mql5自定义品种 A股(2)  ----个股日线“除权”数据处理过程

https://www.mql5.com/zh/forum/329945

3:Mql5自定义品种 A股(3)  ----个股日线“复权”数据处理过程

https://www.mql5.com/zh/forum/330159

4:Mql5自定义品种 A股(4)  ----A股指数数据处理过程

5:Mql5自定义品种 A股(5)  ----个股分钟线处理过程
6:Mql5自定义品种 A股(6)  ----指标及EA 应用
Mql5自定义品种 中国金融产品: A股票、期货、债券、数字货币的应用(1)
Mql5自定义品种 中国金融产品: A股票、期货、债券、数字货币的应用(1)
  • 2020.01.06
  • www.mql5.com
引言 Mql5自定义品种中国 A股票 期货 债券品种;使用Http 协议 通过Post模式,将Tushare金融开源数据,导入中国 A股票(除权、复权)期货 债券分钟、日线、周、月历史数据的应用。 交易是门古老而又现代的学科,是人类社会运转基础...
要添加评论,请登录注册