赫兹股票量化交易:根据指定的分布法则为自定义品种的时间序列建模

简介
赫兹股票交易终端允许在操作中创建和使用自定义品种。 交易者有能力测试自己的货币对和其它金融产品。 本文提出了根据指定的分布法则创建和删除自定义品种,生成逐笔报价和柱线的方法。
它还提出了模拟趋势和各种图表形态的方法。 提到的现成脚本可用来操作最小设置的自定义品种,没有 MQL5 编程技能的交易者也能够充分发挥自定义品种的潜力。

编辑切换为居中
创建和删除自定义品种
这篇早期的 文章 提出了一种基于现有品种在赫兹股票交易的“品种”窗口中创建自定义品种的方法。 赫兹股票交易建议依据最小配置的简单设置自动执行此过程。 该脚本有四个输入参数:
自定义品种的名称,
货币对或金融产品的简称,
货币对或金融产品的全称,
如果品种是基于基准品种创建的,此为基准货币或金融产品的简称,
这是脚本的代码(脚本位于文章附带的 CreateSymbol.mq5 文件中): //+------------------------------------------------------------------+ //| CreateSymbol.mq5 | //| Aleksey Zinovik | //| | //+------------------------------------------------------------------+ #property copyright "Aleksey Zinovik" #property script_show_inputs #property version "1.00" //+------------------------------------------------------------------+ //| 脚本程序开始函数 | //+------------------------------------------------------------------+ input string SName="ExampleCurrency"; input string CurrencyName="UCR"; input string CurrencyFullName="UserCurrency"; input string BaseName="EURUSD"; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { ResetLastError(); // 创建品种 if(!CustomSymbolCreate(SName,"\\Forex")) { if(SymbolInfoInteger(SName,SYMBOL_CUSTOM)) Print("Symbol ",SName," already exists!"); else Print("Error creating symbol. Error code: ",GetLastError()); } else { if(BaseName=="")// create new { // 字符串类型属性 if((SetProperty(SName,SYMBOL_CURRENCY_BASE,CurrencyName,"")) && // 基准货币 (SetProperty(SName,SYMBOL_CURRENCY_PROFIT,"USD",""))&& // 盈利货币 (SetProperty(SName,SYMBOL_CURRENCY_MARGIN,"USD",""))&& // 保证金货币 (SetProperty(SName,SYMBOL_DESCRIPTION,CurrencyName,""))&& // 品种的字符串描述(全名) (SetProperty(SName,SYMBOL_BASIS,"","")) && // 自定义品种的底层资产的名称 (SetProperty(SName,SYMBOL_FORMULA,"","")) && // 自定义品种的定价公式 (SetProperty(SName,SYMBOL_ISIN,"","")) && // ISIN 系统中交易品种的名称 (SetProperty(SName,SYMBOL_PAGE,"","")) && // 包含品种信息的网页 // 整数类型属性 (SetProperty(SName,SYMBOL_CHART_MODE,SYMBOL_CHART_MODE_BID,"")) && // 按竞买价绘制图表 (SetProperty(SName,SYMBOL_SPREAD,3,"")) && // 点差 (SetProperty(SName,SYMBOL_SPREAD_FLOAT,true,"")) && // 浮动点差 (SetProperty(SName,SYMBOL_DIGITS,5,"")) && // 精度 (SetProperty(SName,SYMBOL_TICKS_BOOKDEPTH,10,"")) && // 预置订单深度 (SetProperty(SName,SYMBOL_BACKGROUND_COLOR,White,""))&& // 市场观察中品种所用的背景颜色 (SetProperty(SName,SYMBOL_TRADE_MODE,SYMBOL_TRADE_MODE_FULL,""))&& // 订单执行类型:完全访问权限 (SetProperty(SName,SYMBOL_TRADE_EXEMODE,SYMBOL_TRADE_EXECUTION_INSTANT,""))&& // 成交执行模式:即时执行 (SetProperty(SName,SYMBOL_ORDER_GTC_MODE,SYMBOL_ORDERS_GTC,""))&& // 止损和止盈订单限期:最佳直至取消 (SetProperty(SName,SYMBOL_FILLING_MODE,SYMBOL_FILLING_FOK,""))&& // 订单执行模式:填单或终止 (SetProperty(SName,SYMBOL_EXPIRATION_MODE,SYMBOL_EXPIRATION_GTC,""))&& // 订单限期模式:无限定时间,直至明确取消 (SetProperty(SName,SYMBOL_ORDER_MODE,127,"")) && // 订单类型:所有订单类型 (SetProperty(SName,SYMBOL_TRADE_CALC_MODE,SYMBOL_CALC_MODE_FOREX,""))&& // 计算合约价值的方法 (SetProperty(SName,SYMBOL_MARGIN_HEDGED_USE_LEG,false,""))&& // 使用较大的分支计算对冲保证金 (SetProperty(SName,SYMBOL_SWAP_MODE,SYMBOL_SWAP_MODE_POINTS,""))&& // 掉期利率计算模型:以点数为单位计算掉期利率 (SetProperty(SName,SYMBOL_SWAP_ROLLOVER3DAYS,WEDNESDAY,"")) && // 掉期日:周三 (SetProperty(SName,SYMBOL_OPTION_MODE,0,"")) && // 期权类型 (SetProperty(SName,SYMBOL_OPTION_RIGHT,0,"")) && // 期权加权 (SetProperty(SName,SYMBOL_TRADE_STOPS_LEVEL,0,"")) && // 设置止损订单与当前收盘价的最小间距 (SetProperty(SName,SYMBOL_TRADE_FREEZE_LEVEL,0,"")) && // 交易操作的冻结间距(以点数为单位) (SetProperty(SName,SYMBOL_START_TIME,0,"")) && // 该品种交易开始日期(通常用于期货) (SetProperty(SName,SYMBOL_EXPIRATION_TIME,0,"")) && // 该品种交易结束日期(通常用于期货) // 双精度类型属性 (SetProperty(SName,SYMBOL_OPTION_STRIKE,0,"")) && // 期权执行价格 (SetProperty(SName,SYMBOL_SESSION_PRICE_LIMIT_MAX,0,"")) && // 时段的最低允许价格数值 (SetProperty(SName,SYMBOL_SESSION_PRICE_LIMIT_MIN,0,"")) && // 时段的最高允许价格数值 (SetProperty(SName,SYMBOL_SESSION_PRICE_SETTLEMENT,0,"")) && // 当前时段的结算价格 (SetProperty(SName,SYMBOL_TRADE_ACCRUED_INTEREST,0,"")) && // 应计利息(债券) (SetProperty(SName,SYMBOL_TRADE_FACE_VALUE,0,"")) && // 面值(债券) (SetProperty(SName,SYMBOL_TRADE_LIQUIDITY_RATE,0,"")) && // 流动资金率(用于抵押品种) (SetProperty(SName,SYMBOL_TRADE_TICK_SIZE,0.00001,"")) && // 最低价格变化 (SetProperty(SName,SYMBOL_TRADE_TICK_VALUE,1,"")) && // 逐笔报价值 (SetProperty(SName,SYMBOL_TRADE_CONTRACT_SIZE,100000,"")) && // 交易合约规模 (SetProperty(SName,SYMBOL_POINT,0.00001,"")) && // 点数值 (SetProperty(SName,SYMBOL_VOLUME_MIN,0.01,"")) && // 成交执行的最小交易量 (SetProperty(SName,SYMBOL_VOLUME_MAX,500.00,"")) && // 成交执行的最大交易量 (SetProperty(SName,SYMBOL_VOLUME_STEP,0.01,"")) && // 成交执行的最小交易量变动间距 (SetProperty(SName,SYMBOL_VOLUME_LIMIT,0,"")) && // 此品种单向(买入或卖出)持仓和挂单的最大允许总交易量 (SetProperty(SName,SYMBOL_MARGIN_INITIAL,0,"")) && // 初始保证金 (SetProperty(SName,SYMBOL_MARGIN_MAINTENANCE,0,"")) && // 维持保证金 (SetProperty(SName,SYMBOL_MARGIN_HEDGED,100000,"")) && // 一个品种的一手反向持仓的合约或保证金大小 (SetProperty(SName,SYMBOL_SWAP_LONG,-0.7,"")) && // 多头的掉期利率 (SetProperty(SName,SYMBOL_SWAP_SHORT,-1,""))) // 空头的掉期利率 Print("Symbol ",SName," created successfully"); else Print("Error setting symbol properties. Error code: ",GetLastError()); } else// 依据基准品种创建 { if((SetProperty(SName,SYMBOL_CURRENCY_BASE,CurrencyName,"")) && (SetProperty(SName,SYMBOL_CURRENCY_PROFIT,"",BaseName)) && (SetProperty(SName,SYMBOL_CURRENCY_MARGIN,"",BaseName)) && (SetProperty(SName,SYMBOL_DESCRIPTION,CurrencyFullName,"")) && (SetProperty(SName,SYMBOL_BASIS,"",BaseName)) && (SetProperty(SName,SYMBOL_FORMULA,"",BaseName)) && (SetProperty(SName,SYMBOL_ISIN,"",BaseName)) && (SetProperty(SName,SYMBOL_PAGE,"",BaseName)) && (SetProperty(SName,SYMBOL_CHART_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_SPREAD,0,BaseName)) && (SetProperty(SName,SYMBOL_SPREAD_FLOAT,0,BaseName)) && (SetProperty(SName,SYMBOL_DIGITS,0,BaseName)) && (SetProperty(SName,SYMBOL_TICKS_BOOKDEPTH,0,BaseName)) && (SetProperty(SName,SYMBOL_BACKGROUND_COLOR,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_EXEMODE,0,BaseName)) && (SetProperty(SName,SYMBOL_ORDER_GTC_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_FILLING_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_EXPIRATION_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_ORDER_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_CALC_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_MARGIN_HEDGED_USE_LEG,0,BaseName)) && (SetProperty(SName,SYMBOL_SWAP_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_SWAP_ROLLOVER3DAYS,0,BaseName)) && (SetProperty(SName,SYMBOL_OPTION_MODE,0,BaseName)) && (SetProperty(SName,SYMBOL_OPTION_RIGHT,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_STOPS_LEVEL,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_FREEZE_LEVEL,0,BaseName)) && (SetProperty(SName,SYMBOL_START_TIME,0,BaseName)) && (SetProperty(SName,SYMBOL_EXPIRATION_TIME,0,BaseName)) && (SetProperty(SName,SYMBOL_OPTION_STRIKE,0,BaseName)) && (SetProperty(SName,SYMBOL_SESSION_PRICE_LIMIT_MAX,0,BaseName)) && (SetProperty(SName,SYMBOL_SESSION_PRICE_LIMIT_MIN,0,BaseName)) && (SetProperty(SName,SYMBOL_SESSION_PRICE_SETTLEMENT,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_ACCRUED_INTEREST,0,BaseName)) && (SetProperty(SName,SYMBOL_POINT,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_CONTRACT_SIZE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_FACE_VALUE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_LIQUIDITY_RATE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_TICK_SIZE,0,BaseName)) && (SetProperty(SName,SYMBOL_TRADE_TICK_VALUE,0,BaseName)) && (SetProperty(SName,SYMBOL_VOLUME_MIN,0,BaseName)) && (SetProperty(SName,SYMBOL_VOLUME_MAX,0,BaseName)) && (SetProperty(SName,SYMBOL_VOLUME_STEP,0,BaseName)) && (SetProperty(SName,SYMBOL_VOLUME_LIMIT,0,BaseName)) && (SetProperty(SName,SYMBOL_MARGIN_INITIAL,0,BaseName)) && (SetProperty(SName,SYMBOL_MARGIN_MAINTENANCE,0,BaseName)) && (SetProperty(SName,SYMBOL_MARGIN_HEDGED,0,BaseName)) && (SetProperty(SName,SYMBOL_SWAP_LONG,0,BaseName)) && (SetProperty(SName,SYMBOL_SWAP_SHORT,0,BaseName))) Print("Symbol ",SName," created successfully"); else Print("Error setting symbol properties. Error code: ",GetLastError()); } if(SymbolSelect(SName,true)) Print("Symbol ",SName," selected in Market Watch"); else Print("Error selecting symbol in Market Watch. Error code: ",GetLastError()); } } // 用于设置品种属性的函数 bool SetProperty(string SymName,ENUM_SYMBOL_INFO_STRING SProp,string PropValue,string BaseSymName) { ResetLastError(); if(BaseSymName=="") { if(CustomSymbolSetString(SymName,SProp,PropValue)) return true; else Print("Error setting symbol property: ",SProp,". Error code: ",GetLastError()); } else { string SValue=SymbolInfoString(BaseSymName,SProp); if(CustomSymbolSetString(SymName,SProp,SValue)) return true; else Print("Error setting symbol property: ",SProp,". Error code: ",GetLastError()); } return false; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool SetProperty(string SymName,ENUM_SYMBOL_INFO_INTEGER IProp,long PropValue,string BaseSymName) { ResetLastError(); if(BaseSymName=="") { if(CustomSymbolSetInteger(SymName,IProp,PropValue)) return true; else Print("Error setting symbol property: ",IProp,". Error code: ",GetLastError()); } else { long IValue=SymbolInfoInteger(BaseSymName,IProp); if(CustomSymbolSetInteger(SymName,IProp,IValue)) return true; else Print("Error setting symbol property: ",IProp,". Error code: ",GetLastError()); } return false; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool SetProperty(string SymName,ENUM_SYMBOL_INFO_DOUBLE DProp,double PropValue,string BaseSymName) { ResetLastError(); if(BaseSymName=="") { if(CustomSymbolSetDouble(SymName,DProp,PropValue)) return true; else Print("Error setting symbol property: ",DProp,". Error code: ",GetLastError()); } else { double DValue=SymbolInfoDouble(BaseSymName,DProp); if(CustomSymbolSetDouble(SymName,DProp,DValue)) return true; else Print("Error setting symbol property: ",DProp,". Error code: ",GetLastError()); } return false; } //+------------------------------------------------------------------+