从零开始学MT4编程pdfpdf
从零开始学MT4编程pdfpdf
MQL4 低级培训教程 作家:老易 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()
三菱可编程FX 系列指令MITSUBISHI 可编程FX 系列指令一圭臬流程—性能00.pdf
公民培育版负担培育课程准则尝试教科书:单位双测试卷语文(七年级下册) .pdf
《子途、曾皙、冉有、公西华侍坐》 课件46张PPT2021-2022学年人教版高中语文选修中邦古代诗歌散文玩赏第六单位.ppt
Unit5 单项拣选题说话点考点-2021-2022学年八年级英语上册.docx
人教部编版八年级品德与法治上册《7-2 任事社会》教学课件PPT初二优良公然课.pptx