
MQL4(52):订单管理 - 处理多个订单
在某些交易策略中,您可能需要针对同一个入场信号(或持仓)下达多个订单,这些订单可以拥有各自不同的止损、止盈水平以及手数大小。实现这一需求有多种途径,最直接的一种方法是,发出的每一笔订单都单独编写一条 OrderSend() 指令。这种方式的...
在某些交易策略中,您可能需要针对同一个入场信号(或持仓)下达多个订单,这些订单可以拥有各自不同的止损、止盈水平以及手数大小。实现这一需求有多种途径,最直接的一种方法是,发出的每一笔订单都单独编写一条 OrderSend() 指令。这种方式的...
一个成功的交易策略,不仅仅在于何时入场,更在于何时不该入场。专业的交易员会主动规避那些高风险、低胜率的“垃圾时间”。今天我们就来为我们的EA安装上两套至关重要的“风险过滤器”,教会它这项宝贵的交易纪律。 我们将在下单前的最后一步,执行这套“...
在此前的课程中,我们一直使用“魔术号”作为EA的唯一标识,来区分EA自己下的订单和手动订单。但如果你的EA变得更复杂,需要在同一个图表上,同时运行多个不同的、独立的子策略,那该怎么办? 比如,你的EA中既有一个长线的趋势跟踪策略,又有一个短...
我们始终强调在尝试发出交易指令前,预先检验订单的各项参数。这样做是为了尽可能避免因参数设置错误或价格不当而引发的常见错误提示。然而,即便如此,实际交易中仍可能遭遇重新报价、交易环境繁忙或服务器通讯故障等问题。这些问题并非总能完全规避,但当它...
EA可以配置为在发生特定事件时(例如,成功下单、出现交易信号、达到止损/止盈等)通过电子邮件向您发送通知。这可以通过 MQL4内置的 SendMail() 函数来实现。 1. 配置 MetaTrader 的邮件发送功能: 在使用 SendM...
在之前的示例中,我们主要使用 Alert() 函数来向用户显示简单的提示或错误信息。但如果您希望创建更具交互性、外观更丰富的自定义对话框(例如,包含不同的按钮选项、图标等),或者需要获取用户的明确输入(如“是/否”选择),那么 Messag...
当你投入了大量心血,终于开发出一款能稳定盈利的EA时,你可能会考虑将它商业化,或者至少,希望能安全地分享给朋友测试。这时,我们就必须为EA加上一把“锁”,以确保它不会被随意复制和滥用。 今天,我们就来学习如何为我们的EA打造一套简单而有效的...
想象一下,你精心聘请了一位顶级的交易员(你的EA)来管理账户。你把他带到了交易大厅,却忘记给他办理进入交易室的“门禁卡”。他空有一身本领,却什么也做不了。 在MetaTrader平台中,“允许实时交易”、“允许导入DLL”这些选项,就是我们...
从本章开始,我们将学习一些在开发EA时可能会非常实用的一些附加功能和技巧。 转义字符 在MQL4的字符串常量(即用双引号括起来的文本)中,如果您希望包含某些特殊字符,如双引号本身、单引号或反斜杠符号,您需要在这些特殊字符前加上一个反斜杠 (...
如何让你的炒外汇的EA不那么“激动”,不是一有风吹草动(每个微小的价格变动)就去分析和做决定,而是更有“耐心”,只在每根新的K线蜡烛图(比如每小时一根、每4小时一根或每天一根)刚开始的时候才去思考和行动一次。 想象一下: 默认情况(每个ti...
日期时间变量实际上是基于从1970年1月1日开始计算的秒数。比如,2009年6月15日凌晨0点会被记录为1245024000。这种日期时间格式的好处是,它使过去和将来时间的比较及数学运算变得相当简便。 例如,若想判断一个日期是在另一个日期之...
在构建交易策略时,我们往往不仅需要知道指标当前的值,还需要了解它相较于过去是如何变化的。例如,判断移动平均线 (MA) 是正在上升还是下降,或者一个震荡指标(如随机指标)是否刚刚穿越了某个关键水平(如超买/超卖线)。这都需要比较当前或最近完...
在 MQL4编程中,我们使用条件运算符 if 和 else 来构建和评估交易系统的入场、出场及其他管理逻辑。您在本书的前面部分可能已经见过它们的应用,但为了照顾初学编程的读者,这里我们快速回顾一下它们的基本用法。 1. if 运算符 if ...
这个形态有点马后炮了,但是很有参考意义 深蟹模式的D点和普通螃蟹一样,prz锁定在1.618 而深蟹的B具有非常深的回撤:0.886 更多盘中分析,关注TV账号:Mr-Chen。(需科学上网)
随着时间的推移,下方支撑点会上移 D点和支撑点稍微会错开一些,两点这个区间可以作为入场位置 更多盘中分析,关注TV账号:Mr-Chen。(需科学上网)
在 MQL4编程中,调用技术指标函数(如 iMA(), iStochastic(), iCustom() 等)以及某些价格数据函数时,经常需要传入一些特定类型的参数,例如时间周期、应用价格类型、移动平均线的计算方式等。MQL 为这些常用的参...
网络上有成百上千可用于 MetaTrader 平台的自定义指标。如果您决定在您的EA中使用这类非平台内置的自定义指标,那么就需要进行一些额外的工作。 获取源代码的重要性:在使用自定义指标时,如果能拥有其 .mq4 源代码文件无疑是最佳情况。...
技术指标 绝大多数交易系统都会利用各种技术指标来辅助判断市场状况和产生交易信号,MetaTrader 平台内置了超过 20 种常见的技术指标,例如: 移动平均线 (MA) 平滑异同移动平均线 (MACD) 相对强弱指数 (RSI) 随机震荡...
在过去的几章中,我们致力于创建一系列用于执行订单处理机制的函数。这些函数是几乎所有EA都通用的基础模块,设计它们的初衷是希望它们能在各种交易场景中被复用,并尽可能保持灵活性。这样做的目的是让我们能够从繁琐的订单操作细节中解放出来,从而更专注...
现在我们来修改均线交叉EA的 OnTick() 函数,以便应用我们新创建的那些功能。首先,在建立新的买单前,我们会检查当前是否已经有买单持仓。我们不再是去平掉单个卖单,而是直接调用一个函数来平掉所有卖单。这种方法不需要用到订单号。 // 买...
盈亏平衡止损 除了追踪止损外,另一种常用的订单风险管理技术是盈亏平衡止损 。它的核心逻辑相对简单:当一笔订单的浮动盈利达到或超过预先设定的一个最小盈利点数后,就自动将该订单的止损位移动到其开仓价格。 这样做的目的是,一旦交易向有利方向发展并...
追踪止损的实现 追踪止损是一种动态调整止损位的风险管理技术。其核心思想是:当订单产生浮动盈利时,自动将止损位朝着盈利方向移动,以“锁定”已获得的利润,并在价格反向回调时保护这些利润。 工作原理: 设置距离: 首先设定一个追踪距离,通常以pi...
在开发 EA 时,经常需要知道当前由本EA管理的、符合特定条件的订单数量。例如,统计总共有多少订单、有多少买单、多少卖单、多少挂单等。这对于执行某些策略逻辑(如限制最大持仓数、判断是否已有同向订单)或进行信息展示都非常有用。我们可以创建一系...
在前面已经接触过 OrderSelect() 函数。本节我们将探讨如何结合使用 OrderSelect() 函数与 MQL 中的循环运算符(for 循环和 while 循环),来实现对订单池(即当前所有持仓订单和挂单的集合)的遍历操作,以便...
整合所有功能 现在,我们将展示最终使用本章创建的各种辅助函数重构后的 MA 交叉 EA 的完整代码结构。我们假设所有这些函数(如手数计算、验证、开仓、平仓、SL/TP 计算、调整、添加 SL/TP 等)都定义在 IncludeExample...
使用包含文件 (.mqh) 来组织函数 随着我们创建的辅助函数越来越多(如 PipPoint, GetSlippage, CalcLotSize, VerifyLotSize, OpenBuyOrder, AddStopProfit 等),...
封装添加/修改止损止盈函数 (AddStopProfit) 为了进一步细化函数职责,我们将为现有订单添加或修改止损 (SL) 和止盈 (TP) 的操作也封装成一个独立的函数。这个函数尤其适用于配合那些为了兼容 ECN 而在下单时不设置 SL...
封装验证与调整函数 为了方便地处理前面讨论的停止级别验证问题,我们可以创建两类辅助函数: 验证函数 (Verification Functions): 这类函数只检查给定的价格(如 SL/TP 或挂单价)是否满足最小停止距离要求,并返回一个...
封装SL/TP价格计算函数 为了将 SL/TP 的计算逻辑与验证逻辑分离,并提高代码复用性,我们可以创建专门的函数来根据开仓价和用户指定的点数 (pips) 计算出目标的 SL 或 TP 价格。 函数设计要点: 输入: 函数接收交易品种 (...
封装平仓函数 最后,我们将订单平仓的逻辑也封装成一个可重用的函数。这个函数将专注于关闭单个指定的市价订单。当您需要精确地关闭某一个特定的订单时(例如,基于订单号)这时下面这个函数就很有用,同时加入了必要的检查和错误处理。 关闭指定买单 (C...
封装市价买单函数 (OpenBuyOrder()) 现在我们来创建一个用于开立市价买单的可重用函数。在设计这个函数时,我们与之前直接在 OnTick() 函数中编写的代码有所不同,主要出于以下考虑: 这个下单函数只负责发送开仓指令。它不包含...
AB=CD即将形成,下方也是一个小的水平支撑位 在这里可能会有一个反弹 更多盘中分析,关注TV账号:Mr-Chen。(需科学上网)
在前面的章节中,我们逐步构建了包含下单、错误处理、价格验证、手数计算等功能的代码逻辑。现在,我们将学习如何将这些代码块封装成可重用的函数。这样做的好处是: 将复杂的细节(如手数计算、价格验证等)隐藏在函数内部,使得 OnTick() 等核心...
这是个月线级的上升通道,早期在通道上沿时发过一个观点,当时走成一个深蟹模式 经过漫长的一个N字形下跌,现在来到了通道下沿,美指可能会在下沿这条线进行筑底 与美指对应的EURUSD月线走势同样也来到了压力线附近,并且有明显阻力 更多盘中分析,...
现在我们将把本章学习到的所有高级功能——包括订单修改、交易上下文检查、预定义变量刷新以及动态手数计算与验证等等整合到之前那个简单的移动平均线交叉 EA 中。 修订后 EA 的结构与代码片段: 文件头部与全局设定: #property cop...
MetaTrader平台为所有运行在上面的EA提供了一个单一的交易执行线程。这意味着,在同一时刻,只有一个EA能够成功地执行交易相关的操作(如下单、平仓、修改订单等),无论您在终端中同时运行了多少个 EA 实例。这种机制是为了保证订单处理的...
在构建交易策略时,除了精心设计入场、出场、止损和止盈规则外,确定每次交易使用多大的手数是风险管理中至关重要的一环。最简单直接的方法是设置一个固定的手数(例如,通过 extern 变量让用户输入),并在所有交易中都使用这个固定值。然而,这种方...
在计算出目标止损价和止盈价之后,我们必须验证它们是否满足经纪商的最小距离要求(即 MODE_STOPLEVEL 对应的价格距离)。需要注意的是,对市价单和挂单的止损验证,其考虑因素略有不同。 止盈验证规则: 买单止盈价必须 >= As...
在MQL4中为市价单设置止损(Stop Loss) 和止盈 (Take Profit) ,传统方法是直接在调用 OrderSend() 函数时就将 SL/TP 价格作为参数传入。虽然这种方式对于大多数经纪商运行良好,但是一些账户不支持在提交...
写一个简单的EA示例 (MA金叉死叉 – 市价单入场版) 下面我们通过一个完整的EA示例,来整合运用前面讨论过的各种概念和函数。这是一个基于移动平均线交叉的简单交易系统: 入场信号: 当10日MA均线上穿20日均线时 (金叉),...
平仓操作 市价单:平仓操作是基于当前的市价来结束一个已开立的交易头寸。具体规则是:平掉买单使用当前的买价 (Bid),平掉卖单使用当前的卖价 (Ask)。 挂单:对于尚未被市场价格触发的挂单,结束它的操作不是“平仓”,而是删除 (Delet...
到目前为止,我们的EA已经学会了如何用一个固定的点数去下单。但这还远远不够。一个专业的EA,应该能适应不同的市场环境,能根据市场的结构来动态调整自己的行为。 要实现这一点,我们的EA首先需要拥有一双能观察市场的“眼睛”,以及能审视自身的“意...
我们已经学会了如何下单,但现在面临一个更精细的问题:如何精确地设置我们的止损(SL)和止盈(TP)? 最常见的方式,就是基于开仓价设置一个固定的“点数(Pips)”距离。比如,一个50 Pips的止损。听起来很简单,但在编程世界里,这背后藏...
在讲解下单函数之前,我们先了解下单流程。在EA程序中提交一个交易订单,通常需要经过以下准备步骤,确定好所有必要信息: 订单类型:确定是买单 (Buy) 还是卖单 (Sell),是市价单还是挂单,如果是挂单,是止损挂单 (Stop) 还是限价...
作为一名交易员,你每天都在和“价格”打交道。但在EA编程的世界里,我们必须以前所未有的精度,去理解价格的本质:买价(Bid)、卖价(Ask)以及它们之间的点差(Spread)。 你可能觉得这很简单,但90%的新手程序员遇到的第一个离奇BUG...
从这节课开始,我们正式进入实战EA的开发环节。 构建一个EA,就像是建造一栋房子,绝不是随意堆砌砖块。所有专业、稳定、高效的EA,都遵循着一个经过时间考验的、标准的建筑“蓝图”。这个蓝图,就是我们今天要掌握的EA标准结构。 一个标准的EA主...
在我们的EA程序这栋“房子”里,每一份需要储存的数据,都需要一个“家”(变量)。现在,我们需要做出一个最基础也最重要的建筑决策:是给这份数据一间私密的、用完就走的“客房”(局部变量),还是把它放在一个谁都能看到的“公共大厅”(全局变量)? ...
想象一下,你精心打造了一款均线交易EA,想分享给朋友使用。你用的是20周期均线,而他想试试50周期。难道你每次都要为他修改代码、重新编译、再发一个新文件吗? 当然不用。这正是**外部变量(External Variables)**要解决的问...
在我们写的MQL4代码被正式“烹饪”(编译)成可执行的EA之前,我们可以先给“厨师”(编译器)递上一份“备餐说明书”,这份说明书,就是预处理指令。 它们都以井号#开头,不是我们之前学的那些交易逻辑语句。它们是编译器在处理我们代码之前,最先执...
我们已经知道如何使用变量这个“小抽屉”来存东西了,但现在有一个新问题:这个抽屉应该放在哪里?是放在某个房间里,还是放在客厅中央? 放在不同的地方,决定了谁能用它、谁看不见它。这就是变量的作用域,也就是变量的“有效范围”或“活动区域”。 为了...