FXCG中文官网为全球投资者在金融市场的提供交易服务!

从零开始学MT4编程pdf

MT4教程 2022-01-09 02:07179未知admin

  从零开始学MT4编程pdfMQL4 低级培训教程 作家:老易 2011 年5 月25 日 目次 第一章 起先应用MT4 1 1.1 绪言1 1.2 MT4 下载与安设1 1.3 熟练软件处境5 1.4 应用MT4 智能来往体例6 1.4.1 智能来往体例设立6 1.4.2 第一个顺序:Hello Word !7 1.4.3 计划10 年的史籍数据10 第二章 MQL4 讲话12 2.1 计划常识12 2.1.1 EA 框架12 2.1.2 目标框架13 2.1.3 坐标系14 2.2 内置变量与函数15 2.2.1 整数相除的形式15 2.2.2 墟市函数15 2.2.3 账户函数17 2.2.4 墟市变量17 2.2.5 岁月函数18 2.2.6 烛炬序列函数18 2.2.7 来往函数19 2.2.8 数学、三角函数19 2.2.9 数组函数19 2.2.10 弹出讯息框函数19 2.3 自界说目标20 第三章 编程进阶21 3.1 构想计谋21 3.1.1 来往流程的阐明21 3.1.2 本领目标的挑选23 3.1.3 危害限制的计谋23 3.2 逻辑分解24 3.2.1 EA 逻辑框架25 3.2.2 操盘限制模块流程图25 3.3 史籍数据回测26 3.3.1 起先一个EA 测试27 3.3.2 测试呈报中各项目标阐明29 3.3.3 呈报中颜色的寄义31 3.4 常用自界说函数31 3.4.1 最大开仓量企图32 3.4.2 新单开仓33 3.4.3 持仓单平仓34 3.4.4 追踪止损35 3.4.5 按时来往36 2 3.4.6 正在屏幕上显示文字37 3.4.7 两点之间画线.7 自界说目标外率:图形化回想史籍来往47 第四章 MQL4 本领目标52 4.1 Accelerator Oscillator 惊动加快目标54 4.2 Accumulation/Distribution 离散目标55 4.3 Alligator 鳄鱼目标56 4.4 Average Directional Movement Index 均匀宗旨转移目标57 4.5 Average True Range 均匀线 Awesome Oscillator 振荡目标59 4.7 Bears Power 熊力惊动目标60 4.8 Bollinger Bands 保力加通道本领目标61 4.9 Bulls Power 牛力惊动目标62 4.10 Commodity Channel Index 商品通道目标62 4.11 DeMarker 63 4.12 Envelops 包络目标64 4.13 Force Index 强力目标66 4.14 Fractals 分形目标66 4.15 Gator Oscillator 加众摆动目标67 4.16 Ichimoku Kinko Hyo 一目均衡外目标68 4.17 MACD 转移均匀汇总/辞别目标70 4.18 Market Facilitation Index 墟市激动指数目标71 4.19 Momentum 动量索引目标71 4.20 Money Flow Index 资金流量指数目标72 4.21 Moving Average 转移均匀线 Moving Average of Osillator 转移均匀惊动目标75 4.23 On Balance Volume 能量潮目标75 4.24 Parabolic SAR 扔物线 Relative Strength Index 相对强弱目标77 4.26 Relative Vigor Index 相对生机指数目标78 4.27 Standard Deviation 圭臬离差目标79 4.28 Stochastic Oscillator 随机惊动目标80 4.29 Volumes 成交量目标82 4.30 Williams’Percent Range 威廉目标82 3 第一章 起先应用MT4 1.1 绪言 当幻化莫测的外汇墟市、24 小时不间断的来往、种类繁众的钱银对同时闪现正在你确当前 时,你必然有理伙不清无所适从的感想。自从实行了互联网外汇来往,咱们倍感外汇来往的 艰难与繁琐,于是 EA (英文Expert Advisors 缩写,称专家照管,或智能来往体例)就应运 而生了。 大大批外汇来往商供应MT4 平台,大大批外汇来往者起先合怀乃至留恋 MT4 平台上的 EA,网上显露了良众的免费EA 乃至收费的EA 。不幸的是,正在这里我要下个结论,那即是大 大批 EA 都是垃圾毫不是“圣杯”,不管是免费的照样收费的,真正的圣杯只可正在你我方手 中出生。 纵观积年邦际上 EA 大赛,还没有显露一位延续获胜的选手。恐怕咱们能够片刻以为连 续安祥赢利的来往体例是存正在的,可是延续安祥赢利的EA 是否存正在则有待巡视外明。电脑 和人脑比拟目前还存正在难以超过的窒碍,咱们期盼并等候着浩瀚的专家学者能修设出真正的 人工智能来往体例。 然而,正在所谓真正的人工智能来往体例问世之前,举动浅显的炒汇者不行闲着,咱们需 要主动的做些什么来获得我方的圣杯。 有一点能够一定,咱们务必正在无误的墟市观和深切了解墟市的根源上去构修适合我方的 形式,拟定墟市顺应本事较强的计谋,担保体例可能动态地以最切近墟市的式样运转,再通 过摒挡来往流程的逻辑法规,遵从MQL4 讲话范例编出适合电脑自愿来往的顺序,就能够阶 段性的实实际现安祥剩余。 EA 的最大用处就正在于把无误的来往逻辑打算定量化、顺序化,从而创修一套墟市顺应 本事较强的计谋。切记 EA 只是你来往动作的一个人,切忌 EA 驾驭你的来往动作。你务必 全程参加到所有来往流程中,即使你过分留恋EA,那么EA 就只可是个传说。 本书将从搭修来往平台、领会自愿来往编程、研习编程等方面分章节形容,并贯穿若干 个 EA 实例顺序,遵从构想计谋、逻辑分解、编制代码、史籍数据测试、模仿操盘的按序, 深度周至地解释EA 的出生流程,同时供应了MQL4 常用指令集、外汇常用本领目标注明等 实质。 笔者既不属于讯息派也不属于本领派,更不是二合一派。外汇来往是“零和博弈”,我 更倾向从数学统计论的角度来研究外汇,理性的参加博弈。 领会EA,编制EA,应用EA,从现正在起先。 1.2 MT4 下载与安设 正在来往商指定的网站上下载安设顺序,并运转: 2 3 4 1.3 熟练软件处境 5 1.4 应用MT4 智能来往体例 1.4.1 智能来往体例设立 MT4 安设运转后,智能来往是被禁止的,必要设立“允诺”智能来往。 6 1.4.2 第一个顺序:Hello Word ! 创修一个空缺的顺序 7 8 写一个顺序 回到MT4 终端,翻开智能来往体例能够看到刚刚的顺序仍然计划好了: 9 鼠标双击这个名字,新编写好的顺序就调入到图外窗口,右上角有顺序名和一个乐颜, 乐颜显露体例允诺奉行自愿来往: 咱们正在终端窗口的智能来往标签里能看到顺序运转的结果: 1.4.3 计划10 年的史籍数据 一个编制好的 EA 必要史籍数据回检验证。目前从 MT4 平台上能够下载从 1999 年 10 月以还的全部种类的数据(网罗外汇、黄金、期货、股票指数等等)。 下载10 年的数据遵从以下形式即可。 10 第一步,设立终端图外显示参数。翻开终端“东西”-

  “选项”,点击“图外”标签。 第二步,下载史籍数据。翻开终端“东西”-

  “史籍数据核心”。 这一步下载了选定钱银对的从 1999 年 10 月1 日以还的全部1 分钟数据。其他岁月周 期的数据都邑遵照这个M1 数据自愿天生,可是,你还必要双击每个岁月周期,让全部的周 期都显示成彩色的。这阐明全部岁月周期的数据都将被终端移用。 因为收集或者任职器的来历,你大概必要再三点击钱银对和下载按钮,直到1999 年数 据显示为止。 其他种类以此类推。 11 第二章 MQL4 讲话 2.1 计划常识 正在研习MQL4 讲话前,最先要作废我方的顾虑,不要被网崇高传的“写MQL4 顺序务必 具备C 讲话根源”给吓到,大大批人学不会编程即是我方把我方劝退的。 当然,研习企图机讲话哀求你务必有很好的逻辑头脑本事。咱们能够通过下面的实质来 领会企图机的逻辑。 全部的企图机讲话都包罗两个语句,一个是要求(if )语句一个是轮回(for )语句。 If 语句顾名思义,满意要求就奉行,不然就跳过。 for 语句顾名思义,即是正在必然要求下再三奉行规章的指令,直到要求不满意。 2.1.1 EA 框架 圭臬的EA 由5 个个人构成,差异是变量预订义、EA 初始化顺序、EA 罢了顺序、EA 执 行顺序和自界说变量,如下图: 12 正在int init()的前面是EA 变量界说区,当EA 调入到图标时,必要做预设立的参数都正在这 里界说。 正在int start()后面都是自界说函数区间。 2.1.2 目标框架 与EA 框架相似。区别如下: 1、 变量预订义个人的首行务必界说该目标显示的场所,主图和副图。 2、EA 初始化顺序个人用来界说显示元素的属性。 3、EA 奉行顺序个人用来企图目标值。 如下图: 13 2.1.3 坐标系 自愿来往的奉行是必要确凿定位的,以是就务必创修起了然坐标系的观点。 图上的横坐标既能够是墟市岁月也能够是烛炬序号,正在编程的岁月通俗应用烛炬序号。 坐标系实质上是三维的,即岁月、价钱、开仓量,第三维开仓量通俗正在危害限制计谋中 探究,譬喻显露亏蚀加大开仓量,或者亏蚀20%平仓等等,以是咱们编写顺序核心就正在岁月 和价钱这二维空间中。 14 创修起无误的坐标系观点是编程的根源,由于你即将对本领目标举行分解,企图开仓平 仓信号,乃至正在图外上画线 内置变量与函数 MQL4 供应了大方的内置变量与函数,用来取值企图。目前网上有很众的手册,但都是 翻译机械从原版英文手册自愿翻译的,可读性极差。作家通过堆集大方的体验加上我方的理 解,精选了个人常用的、适用的实质从新阐明如下。 2.2.1 整数相除的形式 正在MQL4 的语法中有“+ - * /”四则运算,当你直接用“1/3”的岁月,会返回0 。正在程 序中能够这么来实行的: double i=(1*0.01)/(3*0.01); 这时变量i 才会返回你所要的值:0。 2.2.2 墟市函数 咱们时时能遭遇分别平台报价钱式分别、滑点数分别、最小开仓量分别、墟市岁月分别 等等状况。这些数据都能通过墟市函数直接获取,如此才力给EA 带来了较大的实用性。 墟市函数移用外率:界说最低价变量myLow,并获取最低价。 MarketInfo(symbol(),MODE_LOW) 获取今朝钱银对的最低价 全部参数列外如下: 常数 形容 MODE_LOW 当日最低价 MODE_HIGH 价钱最高日 MODE_TIME 末了价钱更正岁月 (任职器显示岁月) MODE_BID 墟市最新买入叫价,即使你要卖出则遵从这个价钱奉行 15 MODE_ASK 墟市最新卖出叫价,即使你买入则遵从这个价钱成交 MODE_POINT 价钱最小更正单元,比方USDJPY 为0.01,有的平台为 0.001 MODE_DIGITS 钱银来往价钱小数点位数,譬喻2 位、4 位、5 位 MODE_SPREAD 买入叫价与卖出叫价的差价,也叫“点差”。为来往商收 取的手续费。比方现正在必要买入 1 手,那么成交价即是 “卖出叫价”,反之则是“买入叫价”,成交后会与墟市 价钱酿成一个差价 MODE_STOPLEVEL 平仓点差。设立止损止赢点时只允诺正在这张订单价钱± 平仓点差边界除外。比方USDJPY 成交价为91.75,平仓 点差为5,那么止损止盈点设立务必正在91.70~91.80 范 围除外 MODE_LOTSIZE 根基钱银的圭臬手巨细,比方:USDJPY 为100000 美元, GBPUSD 为100000 英镑,EURUSD 为100000 欧元 MODE_TICKVALUE 1 手每点本币的代价,比方USDJPY 当价钱为91.90 时1 手每点代价$10.8841,当价钱造成91.88 时1 手每点价 值为$10.8838。UERUSD 恒定为10 欧元,GBPUSD 恒定 为10 英镑。这个值是来往商用来企图平仓时企图实质货 币的按照 MODE_TICKSIZE 报价最小单元,与上面最小更正单元大概有分别,我不 能确定 MODE_SWAPLONG 众头仓位掉期。该当与结算息金合系,合于掉期的巨擘 解 释 参 睹 d.html MODE_SWAPSHORT 空头仓位掉期。 MODE_STARTING 墟市起先日期 (预留常量),普通为0 MODE_EXPIRATION 墟市岁月周期 (预留常量) ,普通为0 MODE_TRADEALLOWED 来往允诺钱银对数目,全部钱银对都为1 MODE_MINLOT 最小允诺圭臬手数,普通为0.01 MODE_LOTSTEP 转化圭臬手最小单元,普通为0.01 MODE_MAXLOT 最大允诺圭臬手数,普通为10000 手 MODE_SWAPTYPE 掉期企图形式. 0 - 点; 1 -根基钱银对; 2 - 兴会; 3 - 货 币担保金,普通为0 MODE_PROFITCALCMODE 赚钱企图形式,0 –Forex (外汇); 1 –CFD (黄金); 2 – Futrues (期货) MODE_MARGINCALCMODE 担保金企图形式,0 - Forex; 1 - CFD; 2 - Futrues; 3 - CFD for indices (黄金指数) MODE_MARGININIT 对待1 圭臬手的初始担保金需求,普通为0 MODE_MARGINMAINTENANCE 对待1 圭臬手开仓的担保金,普通为0 MODE_MARGINHEDGED 对待1 圭臬手的护盘担保金,普通为5000 MODE_MARGINREQUIRED 对待采办一个圭臬手开仓的自正在担保金 MODE_FREEZELEVEL 冻结定单秤谌点。即使奉行的价钱正在冻结秤谌点边界内, 定单将会被刊出或封闭,这是来往商设立的参数,普通 16 为0 2.2.3 账户函数 AccountBalance( ) 获取账户余额 AccountCredit( ) 获取账户信用点数 AccountCompany( ) 获取来往平台公司名称 AccountCurrency( ) 获取账户通用钱银名称 AccountEquity( ) 获取账户净值 AccountFreeMargin( ) 获取账户免费担保金 AccountFreeMarginCheck( string 获取今朝账户确当前价钱上正在指定开仓的仓位返回自正在 symbol, int cmd, double volume) 担保金,即最大可用担保金,价钱更正,该值跟着更正。 分别钱银对、分别价位,自正在担保金分别。 AccountFreeMarginMode( ) 正在今朝开仓场所的账户上企图免费担保金的形式。企图 式样大概采纳以下价钱值: 0 - 浮动profit/loss 不应用 1 - 两个浮动赚钱和耗损正在开仓场所上应用企图自正在保 证金; 2 - 唯有赚钱值被应用企图,不探究今朝开仓的亏蚀; 3 - 唯有亏蚀值被应用企图, 不探究今朝开仓的亏蚀。 AccountLeverage( ) 获取账户杠杆比率 AccountMargin( ) 获取账户被占用的担保金总和 AccountName( ) 获取账户名称 AccountNumber( ) 获取账户账号 AccountProfit( ) 获取账户利润 AccountServer( ) 获取账户所正在任职器名称 AccountStopoutLevel( ) 获取账户逗留秤谌 AccountStopoutMode( ) 对待逗留秤谌返回的的运算式样。运算式样值如下: 0 - 企图担保金和净值之间的百分比; 1 - 斗劲自正在担保金秤谌和绝对值。 2.2.4 墟市变量 Close[i] 获取第i 个烛炬的收盘价,即使i=0,即是获取今朝价 High[i] 获取第i 个烛炬的最高价 Low[i] 获取第i 个烛炬的最低价 Open[i] 获取第i 个烛炬的开盘价 Time[0] 获取第i 个烛炬的岁月,这个值是用秒来企图的 Volume[0] 获取第i 个烛炬的成交量 17 2.2.5 岁月函数 MQL4 内置岁月函数数值的最小读取单元是以每个新价钱(tick )为根源。即使没有新 价钱显露,则岁月数值不行获取。 Time[0]和TimeCurrent() 的数据类型为datetime,返回从1970 年1 月1 日0 点起先至今 累计的“秒”数,Time[0]返回今朝烛炬岁月,TimeCurrent()返回今朝新价钱(tick )岁月。 int Day( ) 返回今朝任职器的日,如14,显露14 日 int DayOfWeek( ) 返回今朝任职器的礼拜,如4 ,显露礼拜4 int DayOfYear( ) 返回今朝任职器的年,如2010,显露2010 年 int Hour( ) 返回今朝任职器的时,如10,显露10 点 int Minute( ) 返回今朝任职器的分,如15,显露15 分 int Month( ) 返回今朝任职器的月,如10,显露10 月 int Seconds( ) 返回今朝任职器的秒,如34,显露34 秒 datetime TimeCurrent( ) 返回今朝任职器最新价钱的秒,该数值显露从1970 年1 月1 日至今累计秒。 int TimeDay( datetime date) 返回日期类型参数中的日 int TimeDayOfWeek( datetime 返回日期类型参数中当周的天数,如4 ,显露当周的第4 date) 天 int TimeDayOfYear( datetime date) 返回日期类型参数中当年的天数,如 287,显露当年的 第287 天 int TimeHour( datetime time) 返回日期类型参数中当天的小时数,如 5,显露当天的 第5 个小时 datetime TimeLocal( ) 返回当地企图机今朝岁月,以秒为单元 int TimeMinute( datetime time) 返回日期类型参数中的分钟数,如17,显露第17 分钟 int TimeMonth( datetime time) 返回日期类型参数中当年的月数,如10,显露当年的第 10 个月 int TimeSeconds( datetime time) 返回日期类型参数中的秒数,如26,显露第26 秒 int TimeYear( datetime time) 返回日期类型参数中的年份,如2009,显露2009 年 int Year( ) 返回今朝任职器的年份,如2010,显露2010 年 2.2.6 烛炬序列函数 咱们时时必要企图n~n+i 个烛炬的最高最低价,以是这组函数用处特别广。 iBars(NULL,0) 获取今朝图外中烛炬总数 iBarShift(NULL,0,D2010.09.01) 获取今朝图外自2010-9-1 以还的烛炬总数 iHighest(NULL,0,MODE_HIGH,20,4) 获取从第4 个烛炬起先的20 个烛炬边界内最高价的烛炬 序号 iLowest(NULL,0,MODE_LOW,20,4) 获取从第4 个烛炬起先的20 个烛炬边界内最低价的烛炬 序号 18 2.2.7 来往函数 合于来往函数详睹 MT4 的助助,全体用法正在本书后续的外率中会频仍显露。正在这里需 要夸大的是: 1、正在自界说目标中不行移用 OrderSend(), OrderClose, OrderCloseBy, OrderDelete 和 OrderModify 来往函数。 2 、OrderClose, OrderCloseBy, OrderDelete 和 OrderModify 函数正在移用前务必用 OrderSelect()夂箢挑选订单。 2.2.8 数学、三角函数 合于数学函数详睹MT4 的助助。 值得夸大的是绝对值函数是用频率最高,咱们时时必要鉴定今朝价是否到达了预期的止 盈止损,就假若用这个函数。下面是个例句: If (MathABS(Close[0]-OrderOpenPrice())

  StopLoss*Point;//即使价位到达止损 应用这个语句的事理就正在于咱们不必去管今朝订单是买入类型照样卖出类型。 2.2.9 数组函数 合于数组函数详睹MT4 的助助。正在此夸大以下几个防卫事项: 1、数组的最大维数最大为4 维。 比方界说一个数组为myArray[10,10,10,10],阐明该数组有4 维,每维有10 个元素。 2、维数元素序号从0 起先企图。 比方 myArray[0],就显露变量myArray 第0 个场所的数据。假使该数组界说为 10 个数 字,那么第10 个数字就该当显露为myArray[9]。 3、MQL4 不是专业的企图机开采讲话,正在数组应用方面有不苛谨之处。譬喻正在编写指 标的岁月,你预先界说了一个一维数组A[] ,这个方括号里为空显露能够应用放肆众个元素, 实质正在移用这个数组的岁月,务必先界说元素数目,不然无法取值。 2.2.10 弹出讯息框函数 【源代码】 int start() { // string TradeInformtion=Buy; PlaySound(alert.wav); int MsgBoxInfo=MessageBox(墟市发出来往指令:+TradeInformtion+\ n+是否来往?, 来往提示窗口,MB_YESNOMB_ICONWARNING); Print(返回音讯:+MsgBoxInfo); // 19 return(0); } 【源代码阐明】 MessageBox 必要移用mql 的函数,以是正在顺序头必要增添一个语句,不然通可是编译, 该语句后面不要跟“; ”。 #include

  2.3 自界说目标 本领目标是一种用来辅助鉴定行情的顺序,遵从特定的算法进程对墟市数据企图后的值 正在屏幕上用线条、箭甲第标注出来。 MQL4 规章正在统一个图标中最众只可画8 品种型的线条或者符号,为了容易领会,咱们 正在此称为8 个图层。如下图: 20 自界说目标又分为两品种型,一个是正在主图中显示,如转移均匀线,一个是正在副图中显 示,如MACD。 正在本书的外率中有一个目标的源代码,通过领会源代码比任何阐述都有用。 第三章 编程进阶 3.1 构想计谋 3.1.1 来往流程的阐明 21 下面是一个完美的来往流程图: 翻开来往图外 增添本领目标 巡视行情 是否满意入市 否 要求? 是 开仓 同时设立止损、止盈 巡视行情 批改止损/止盈价 否 位 是 是否满意平仓 否 是否必要批改 要求 止损/止盈价位? 是 平仓 毫无疑义,全部的人都邑遵从上面这个流程举行外汇来往,同时获得一个结果:剩余或 者亏蚀。正在来往流程中咱们会遵照本领目标供应的信号决断买入或者卖出,再遵照本领目标 供应的信号决断批改止损止盈点,末了决断平仓出市。 信赖全部的人都有一个联合的经验:当账面显露浮动剩余的岁月,会以为剩余将一连扩 大而没有遵从盘算赢利平仓。当行情反向运转,剩余缩减的岁月就会抚慰我方,行情会掉头 的再等等,又没有实时赢利平仓。行情往往会跟你的夸姣抱负相悖而驰,当账面显露亏蚀抵 达止损点的岁月,依旧梦思行情转头,乃至抚慰我方说不要紧,这一点点我亏得起,结果自 然不问可知。 每位参加外汇来往的人都有一套我方熟练的目标编制来辅助计划,除此除外尚有一套适 合我方的资金盘子盘算。每一次做单都必要探究账户担保金和下单量,开仓后显露的浮动亏 损与剩余状况又成为了下一步行为的紧张参考,奈何从新设立止损止盈价位,用众大的补仓 量等等,全部这些研究和行为的目标仅仅是确保账户资金的平安,实行稳步剩余,避免显露 爆仓。我们的老祖宗说过:留得青山正在不愁没柴烧。 信赖全部的人都理解要遵从盘算奉行操作,但往往计划的岁月忘掉了盘算,这即是人性 22 的弱点,谁都治服不了,网罗我也遁脱不了,我时时如此评判我方和中邦的汇友:亏得起, 赢不起。以是,咱们不成贵出这个结论:应用EA,可能回避人性的弱点,让操盘特别圭臬, 特别端庄遵从盘算奉行。 原来往流程图的分解咱们出现,一朝确定了本领目标、开仓量、补仓量、止损价位、止 盈价位等等盘算后,即是遵从来往逻辑奉行了,全流程一律能够不必要人工参加,声明 EA 能够助助咱们自愿盯盘,遵照拟定好的计谋奉行开仓、平仓、挂单、批改止损止盈价位等等 各样行为,是一律可行的。 咱们正在构想计谋时起码要归纳探究以下三个方面:  价:入市的价位、止损止盈的价位  量:遵照账户余额决断开仓、补仓的量  信号:遵照本领目标决断入市(出市)及其宗旨 现正在以“红狼教材-EURUSD-M30”为例,起先构想计谋。 3.1.2 本领目标的挑选 但凡炒外汇的人都邑应用少许本领目标并将其整合,举动鉴定入市出市的参考按照。 MQL4 讲话供应了 29 个默认本领目标,囊括了简直全部常睹应用的目标。网上也有人供应 1000 个本领目标的,本领目标的用意是供应鉴定按照,咱们简直没有需要过众领会和研习 默认值目标以外的,也不必深切研讨本领目标是奈何编制的,只消懂得本领目标是否发出了 操作信号即可。 合于本领目标,能够参考我编写的《轻松研读MT4 本领目标》一文。 3.1.3 危害限制的计谋 对行情走势的鉴定之后,咱们必要着重探究危害限制。是重仓入市照样轻仓入市都是有 考究的,你不行输了一单就嚣张加倍反向做单,那样只会加快你账户爆仓。 开仓下单量 开仓下单量企图公式如下: 账户余额×危害系数 开仓下单量 1圭臬手来往量 阐明: 杠杆 1:100; 1 圭臬手来往量为125000 美元; 危害系数可遵照我方的经受本事设立,通俗咱们设定危害系数为5,系数大危害越高。 假设账户余额为10000 美元,列外企图如下: 危害系数 下单量(手) 1 0.08 2 0.16 3 0.24 23 4 0.32 5 0.40 6 0.48 7 0.56 8 0.64 9 0.72 补仓下单量 正在来往流程中,即使行情宗旨无误,账户可用担保金会跟着加众,为了不奢华一轮好 的行情,咱们必要做补仓解决,以赚取更大的利润。或者行情显露了反向,为了削减亏蚀, 加大剩余概率,也能够探究反向补仓。 补仓量的巨细是遵照账户净额来确定的,即使账户净额大于账户余额,阐明账面剩余, 补仓量能够稍微加码,反之则必要削减。 企图补仓下单量也设立一个系数,企图公式如下:  亏蚀订单数目   补仓下单量 开仓下单量 1-  补仓系数  比方,补仓系数为3,亏蚀订单数目为1,那么这时补仓下单量即是开仓下单量的2/3 。 正在后面的逻辑分解章节中,会禁止该公式显露负数,也会解决补仓系数为0(分母为零) 的状况,不然正在顺序运转时会显露纰谬。 价钱颠簸限制 遵照本领目标咱们出现了入市信号,遵照帐户余额咱们选定了下单量,就能够开仓了, 此时止损止盈价钱的设立是务必的,希奇当你启动了EA 后脱离汇市,就显得特别紧张。 探究到汇市改变众端,危害难以限制,红狼教材- 以M30 为最小岁月周期来探究操作策 略的,目标即是为了驱除小周期(M1、M5、M15)墟市显露的骚扰信号。当然这只是体验 数据,即使你的账户是Mini 型的,杠杆又大于100,那么就要因地制宜探究参数的设立。 纵观外汇数据图外不难出现盘整行情众于单边行情,那么咱们就必要应用趋向类目标 确定单边行情的到来,同时应用惊动类目标过滤掉窄幅惊动行情。 限制价钱颠簸没有绝对的区间,这是个睹仁睹智的数据。 3.2 逻辑分解 叙及逻辑奉行,这但是企图机顺序的强项,一个拟定好的逻辑顺序交给企图机要比人工 的奉行力强得众。 跟着外汇EA 化水准越来越高,很众人起先研商人工智能的企图模子,试图让企图机具 备研习本事,来对于变化无穷的汇市。迩来好像网格、云企图等等人工智能专业术语充足了 所有EA 宇宙。 咱们不是专家,咱们的目标是充溢应用企图机的逻辑奉行本事来辅助咱们的计划,这就 24 纯粹了。 上一章针对外汇来往流程及危害限制的阐述能够获得这么一个结论:外汇来往动作中有 99%是逻辑动作,剩下的 1%是突发性变乱成分,而对于突发性变乱的管理计划即是设立合 理的可能经受的止损空间,这依旧能够归类到逻辑动作。 本章着重针对来往动作和来往计谋举行逻辑化的顺序化的分解,旨正在为下一章编制代码 拟定一个确凿仔细的流程。 学会流程分解是编程的需要要求。 3.2.1 EA 逻辑框架 MQL4 讲话为EA 拟定了一个固定的框架,睹下图: 第一个人 参数界说模块 第二个人 初始化界说模块 第三个人 预订义函数模块 第四个人 操盘限制模块 墟市显露新的 价钱更正 参数界说模块安顿今朝 EA 的属性,网罗 EA 运转前必要人工界说的少许墟市务必的参 数(如止损、止盈点等),还能够网罗少许外部函数库的移用和图外根基属性(如线型、颜 色等)的界说。 初始化界说模块正在EA 运转时会先奉行一次,普通用于举行和图外相合的少许属性的设 置,也能够对后续顺序中必要移用的变量给出初始值。 预订义函数模块正在计谋参数被批改后会奉行一次,紧接着再奉行初始化界说模块,计谋 初度导入图外时不奉行该模块代码。 操盘限制模块是EA 主模块,当墟市显露每一次价钱更正时都邑奉行一次。 3.2.2 操盘限制模块流程图 25 正在图外上显示墟市音讯 鉴定运转处境 否 退出等候下一个价钱 确定能否下单 是 本领目标取值 遵照本领目标及持仓单 否 数目状况鉴定是否开仓 是 未平仓订单 遵照持仓订单盈亏状况鉴定 否 是否批改止损止赢 是 批改止损止赢 实行动态追踪止损止盈 留神的人会出现,上面这个流程图中果然没有平仓的行为?这是个风趣的话题,别的 找岁月冉冉研究回味吧。 3.3 史籍数据回测 史籍数据回测是自愿化来往验证EA 顺序逻辑的一个很紧张的合节。 MT4 供应了一个功用宏大的体例测试模块,应用史籍数据测试EA 计谋的结果并提交一 份仔细的测试呈报,你能够遵照呈报安排EA 的计谋和参数,再三举行,以期到达最佳的模 式。 史籍数据包罗了开盘价、收盘价、最高价、最低价、成交量、岁月等 6 项目标,分为 M1、M5、M15、M30、H1 、H4、D1、W1 、MN 等9 个周期。 26 3.3.1 起先一个EA 测试 1、挑选一个EA 加载到图外 2、点击东西栏的“智能来往”逗留智能来往 3、按F6,翻开测试窗口 测试窗口各项阐明如下: 告终全部设立后,按“起先”,体例即起先测试: 27 测试完毕后,咱们能够防卫查看测试呈报标签: 28 3.3.2 测试呈报中各项目标阐明 测试柱数 史籍数据烛炬的总数 Bars in test 史籍数据最小模子是M1,包罗了4 个即市价格(开盘价、收盘 即市价数目 价、最高价、最低价),这4 个价钱用来模仿墟市正在1 分钟内发 Ticks modelled 出了4 个新价钱(tick )。以是,M5 岁月周期每个烛炬就包罗了 20 个即市价位。该目标显露正在拟定岁月周期内即市价位总数。 ModellingQuality = ((0.25*(StartGen-StartBar) + 0.5 *(StartGenM1-StartGen) + 0.9 *(HistoryTotal-StartGenM1)) / (HistoryTotal-StartBar))*100%; 个中: HistoryTotal 局限岁月段里史籍数据烛炬总数 StartBar 起先测试烛炬的数,即使测试数据从图外的第一个蜡 复盘模子的质料 烛起先,则总数减去101 Modelling quality StartGen 设定测试岁月段内起先的烛炬序数 StartGenM1 设定测试岁月段内起先的1 分钟烛炬序数 对待迩来岁月边界数据库模子的起先和迩来岁月边界数据 模子的起先存正在重量系数0. 25 的区别;  对待迩来岁月边界数据库模子的起先和迩来岁月边界数据 模子的起先正在原有分钟内存正在重量系数0. 5 的区别;  正在原有岁月上模子的起先和史籍数据的末尾之间重量系数 0.9 的区别。 总净剩余 净赚钱值和净亏蚀值之间的差 Total net profit TotalNetProfit = GrossProfit - GrossLoss 总赢利 全部赚钱来往总数的净赚钱值 Gross profit 29 总亏蚀 全部亏蚀来往总数的净亏蚀值 Gross loss 剩余比 正在设定测试岁月内净赚钱值与净亏蚀值的比 Profit factor ProfitFactor = GrossProfit / GrossLoss 预期剩余应用以下公式举行企图: Expected Payoff = (ProfitTrades / TotalTrades) * (GrossProfit / ProfitTrades) - (LossTrades / TotalTrades) * (GrossLoss / LossTrades) 预期剩余 个中: Expected payoff  TotalTrades 来往总数;  ProfitTrades 赚钱来往总数;  LossTrades 亏蚀来往总数;  GrossProfit 净赚钱来往总数;  GrossLoss 净亏蚀来往总数 绝对亏蚀 AbsoluteDrawDown = InitialDeposit –MinimalBalance AbsoluteDrawDown 最大借钱值和今朝最小借钱值的最大差异: MaximalDrawDown = Max of (Maximal Peak - next Minimal Peak) 最大亏蚀 最大借钱百分比的比率等于最大借钱和它的各自代价的商: MaximalDrawDown MaxDrawDown % = MaxDrawDown / its MaxPeak * 100% 正在呈报中显示的其他结果能够运用纯粹的数学形式企图 来往简单共 正在测试里的来往总数 Total trades 卖单赢利百分比 卖空仓位总数额和个中赚钱百分比 Short positions (won %) (卖空仓位/卖空仓位总数*100% ) 买单赢利百分比 看涨仓位总数额和个中赚钱百分比 Long positions (won %) (看涨仓位/看涨仓位总数*100% ) 剩余来往(占总百分比) 赚钱来往总数和来往总数的百分比 Profit trades (% of total) (赚钱来往/来往总数*100% ) 亏蚀来往(占总百分比) 亏蚀来往总数和来往总数的百分比 Loss trades (% of total) (亏蚀来往/来往总数*100% ) 最大赢利来往 赚钱来往中取得的最大赢利 Largest profit trade 最大亏蚀来往 亏蚀来往中取得的最大亏蚀 Largest loss trade 均匀赢利来往 赚钱来往中赚钱的均匀数 Average profit trade (净赚钱值 / 赚钱来往) 均匀亏蚀来往 亏蚀来往中亏蚀的均匀数 Average loss trade (净亏蚀值 / 亏蚀来往) 最大延续赢利金额 Maximum consecutive 赚钱总数和来往的赚钱系列中最大延续剩余 wins (profit in money) 最大延续亏蚀金额 亏蚀总数和来往的亏蚀系列中最大延续耗损 30 Maximum consecutive losses (loss in money) 最众延续赢利次数 Maximal consecutive 正在来往总数中最大延续来往的赚钱 profit (count of wins) 最众延续亏蚀次数 Maximal consecutive loss 正在来往总数中最大延续来往的赚钱 (count of losses) ) 均匀延续赢利数 赚钱系列中延续剩余的均匀数 Average consecutive wins 均匀延续亏蚀数 亏蚀系列中延续耗损的均匀数 Average consecutive losses 3.3.3 呈报中颜色的寄义 3.4 常用自界说函数 MQL4 供应了大方的根基函数和语句,然而咱们正在编程中出现良众的对行情的鉴定与操 作都是反复的,譬喻鉴定目标速慢线是否交叉,这就必要用到自界说函数来简化主顺序。 自界说函数通俗放正在顺序的后面,函数方式与阐明如下: 31 正在顺序中移用该自界说函数的例子如下: If (myIndicators(“金叉”,Close[0]))=”Sell” 将自界说函数参数写进去,就会获得按预订算法返回一个结果。 3.4.1 最大开仓量企图 担保金的合理应用是危害限制的紧张技能,以是企图最大开仓量就显得特别紧张。正在许 众危害限制阐述中都邑有这么一段好像的文字形容:“开仓量为余额的 5% ”。原本这种说法 极其的不确凿,乃至会导致因开仓量限制不端庄而带来无谓的亏蚀。 分别钱银对的1 圭臬手自正在担保金是分别的,并且即使你有持仓订单,因为价钱改变导 致账户净值也正在改变,那么开仓量(手)也会爆发改变。 以下代码企图了正在今朝钱银对、今朝价钱的条件下,应用总共自正在担保金(本币元)的 最大开仓量(手): double myLots=(AccountEquity()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)); 个中 myBuyLots 为买入订单的最大开仓量(手),mySellLots 为卖出订单的最大开仓量 (手)。企图形式是: 账户净值 开仓量 1圭臬手自正在担保金 因此,无误的5%开仓量该当为:myLots ×5% 。 咱们来看看通流程序企图显示的结果: 从上图能够看出,最大开仓量企图到了小数点后面8 位,而实质操盘时的开仓量最小为 0.01 手,即使你直策应用这个数据,顺序会报错,以是还必要通过内置函数将开仓量截止(不 用四舍五入)到小数点后面2 位: myLots =NormalizeDouble(myLots,2) OrderSend(Symbol(),OP_SELL, myLots ,Bid,0,0,0);//开一张卖出订单 32 3.4.2 新单开仓 读者也许很离奇,体例中一条夂箢就能搞定,奈何还必要做这个函数呢?作家总结顺序 编写体验得出应用这个这个自界说函数能大大进步编程速率和质料。 正在有些ECN 平台上,应用EA 新开仓是不允诺设立止损止盈价的,正在这里指挥读者,使 用本函数尽量不要带止盈止损价钱。 【函数代码】 /* 函数:新单开仓 参数阐明: 开仓类型:Buy 买入订单、Sell 卖出订单、 myLots 开仓量、myLossStop 止损点数、myTakeProfit 止盈点数 */ void iOpenOrders(string myType,double myLots,int myLossStop,int myTakeProfit) { int mySPREAD=MarketInfo(Symbol(),MODE_SPREAD);//获取墟市滑点 double BuyLossStop=Ask- myLossStop*Point; double BuyTakeProfit=Ask+myTakeProfit*Point; double SellLossStop=Bid+myLossStop*Point; double SellTakeProfit=Bid-myTakeProfit*Point; if (myLossStop

  =0)//即使止损参数为0 { buylossstop=0; selllossstop=0; } if (mytakeprofit

  =0;CO_cnt--) { if(OrderSelect(CO_cnt,SELECT_BY_POS)==false) continue; else OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0); } } if (myType==Buy)//平掉全部众头订单 { for(CO_cnt=OrdersTotal();CO_cnt

  =0;CO_cnt--) { if(OrderSelect(CO_cnt,SELECT_BY_POS)==false) continue; else if (OrderType()==0) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0); } } if (myType==Sell)//平掉全部空头订单 { for(CO_cnt=OrdersTotal();CO_cnt

  =0;CO_cnt--) { if(OrderSelect(CO_cnt,SELECT_BY_POS)==false) continue; else if (OrderType()==1) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0); } } if (myType==Profit)//平掉全部剩余订单 { 34 for(CO_cnt=OrdersTotal();CO_cnt

  =0;CO_cnt--) { if(OrderSelect(CO_cnt,SELECT_BY_POS)==false) continue; else if (OrderProfit()

  0) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0); } } if (myType==Loss) { for(CO_cnt=OrdersTotal();CO_cnt

  =0;CO_cnt--) { if(OrderSelect(CO_cnt,SELECT_BY_POS)==false) continue; else if (OrderProfit()

  GB T 32610-2016_通常防护型口罩本领范例_高清版_可检索.pdf

FXCG中文官网 Copyright @ 2011-2018FXCG中文官网 All Rights Reserved. 版权所有 备案号:FXCG中文官网

联系QQ: 邮箱地址: