系统交易

掌握网格和马丁策略的反弹次数与仓位设置
MetaTrader4
掌握网格和马丁策略的反弹次数与仓位设置

在网格和马丁策略中,仓位设置和交易数量是至关重要的。 我们总是会关注某个品种在震荡区间的历史表现,尤其是价格在震荡区间反弹了多少次! 这就被我称为反弹次数,它可以通过对市场历史数据的统计分析得出。 为了更清晰一点,咱们看看下面的图1。 图1:反弹次数的定义、目标及应用 这个图展示了价格走势如何生成反弹次数工具的统计数据。为了让工具更流畅,我把它做成了一个专家顾问(EA),使用了Sleep函数,这样可以防止因输入的蜡烛数量过高而导致图表崩溃。 另一个图(图2)展示了工具的简要图形结构及其对象的含义。 图2:反弹次数统计。 工具使用方法: 根据图2,如果我们将反弹通道半高度设置为600点: 这个品种共有6个不同的反弹次数,从1到6。 反弹次数为2意味着,价格从反弹通道的中间开始(高度2 * 600 = 1200点),上下波动,并且在触及止盈点TP=1200点之前,分别碰到一次红线和一次蓝线。 同样,反弹次数为5则意味着价格从通道中点开始,并触及2次红线和3次蓝线,或者3次红线和2次蓝线,然后触及TP=1200点。其他反弹次数也是如此。 - 我们没有反弹次数为7的情况,这意味着在选定的历史数据中,价格在红线和蓝线之间没有出现过7次反弹(1200点的距离)。需要注意的是,如果你选择更多的历史数据(最大回溯蜡烛数),找到7次反弹的机会会增加。但正如我们看到的,即使6次反弹的机会在9020个价格触及TP的项目中也只有22次。 工具的输入选项包括: - 最大回溯蜡烛数:与其他扫描工具相同,请谨慎设置此单元格的数量。不要剧烈增加,以免造成内存崩溃。 - 时间周期:用于寻找通道限度反弹和止盈线接触的蜡烛时间周期。对于较窄的通道,建议使用较低的时间周期。如果不确定,最好使用M1时间周期。 - 反弹通道半高度:这是绿色线与红线和蓝线之间的距离,以点为单位。 - 图表背景颜色 - 柱状图颜色1/柱状图颜色2:用于让统计柱看起来更好看 - 计数单元格颜色 - 反弹次数单元格颜色 - 加载条颜色:在计算过程中,这个加载条将帮助用户了解工具是否在工作及计算速度。 - 添加按钮以启动并输入历史蜡烛数。

2024.01.12
MetaTrader 5连接断开声音提醒工具使用指南
MetaTrader5
MetaTrader 5连接断开声音提醒工具使用指南

大家好!今天给大家分享一个非常实用的工具——在MetaTrader 5上实现连接和断开时的声音提醒。这款小工具可以帮助我们更好地监控交易平台的状态,避免错过重要的交易机会。 工具简介 这个工具的使用方法非常简单,只需将声音文件添加到指定的文件夹中,然后编译这个EA工具即可。 如何添加声音文件 将你准备好的声音文件(.wav格式)放入到 MQL5\Files\Sounds 文件夹中。 编译EA工具 复制下面的代码并进行编译,注意:代码中有注释说明,使用 #resource 可能会导致上传失败。 //+------------------------------------------------------------------+ //|                               Connect_Disconnect_Sound_Alert.mq5 | //|                                Copyright 2024, Rajesh Kumar Nait | //|                  https://www.mql5.com/en/users/rajeshnait/seller | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Rajesh Kumar Nait" #property link      "https://www.mql5.com/en/users/rajeshnait/seller" #property version   "1.00" #include <Trade/TerminalInfo.mqh> bool     first             = true; bool     Now_IsConnected   = false; bool     Pre_IsConnected   = true; datetime Connect_Start = 0, Connect_Stop = 0; CTerminalInfo terminalInfo; //--- Sound files #resource "\\Files\\Sounds\\CONNECTED.wav" #resource "\\Files\\Sounds\\DISCONNECTED.wav" //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int OnInit()   { //---       ResetLastError();       while ( !IsStopped() ) {          Pre_IsConnected = Now_IsConnected;          Now_IsConnected = terminalInfo.IsConnected();          if ( first ) {             Pre_IsConnected = !Now_IsConnected;          }          if ( Now_IsConnected != Pre_IsConnected ) {             if ( Now_IsConnected ) {                Connect_Start = TimeLocal();                if ( !first ) {                   if(!PlaySound("::Files\\Sounds\\DISCONNECTED.wav"))                      Print("Error: ",GetLastError());                }                if ( IsStopped() ) {                   break;                }                if(!PlaySound("::Files\\Sounds\\CONNECTED.wav"))                   Print("Error: ",GetLastError());             } else {                Connect_Stop = TimeLocal();                if ( !first ) {                   if(!PlaySound("::Files\\Sounds\\CONNECTED.wav"))                      Print("Error: ",GetLastError());                }                if ( IsStopped() ) {                   break;                }                if(!PlaySound("::Files\\Sounds\\DISCONNECTED.wav"))                   Print("Error: ",GetLastError());             }          }          first = false;          Sleep(1000);       } //---    return(INIT_SUCCEEDED);   } //+------------------------------------------------------------------+ 视频教程 如果你需要更直观的教程,可以观看下面的视频:

2024.01.08
深入探讨MQL5编程:MetaTrader 5的高级工具与集成
MetaTrader5
深入探讨MQL5编程:MetaTrader 5的高级工具与集成

第七部分:MQL5高级工具 《MQL5编程为交易者服务》的第七部分介绍了MQL5 API的高级功能,这些功能在开发MetaTrader 5程序时将非常有用。这些功能包括自定义金融符号、内置经济日历事件以及网络、数据库和密码学等通用技术。 这一部分主要讨论了库(Libraries)——一种特殊的程序类型,提供了连接其他MQL程序的现成API。同时,也探讨了开发软件包的可能性,以及将逻辑上互相关联的程序组合成项目的方法。 最后,我们将介绍与其他软件环境的集成,包括Python的使用。 我们将首先研究资源(Resources),这些是可以嵌入程序代码的任何类型的文件。资源可以包含: 多媒体元素 来自外部程序的“硬”设置 以编译格式存在的其他MQL5程序 MQL5开发环境允许在源文件中包含应用数据数组、图像、声音和字体,使程序成为一个自给自足、便于最终用户使用的产品。 我们将特别关注以BMP格式存储的光栅图像的图形资源:你将学习如何动态创建、编辑和在图表上显示它们。 在书的最后部分,我们将研究MQL5中的OpenCL集成。OpenCL是一个开放标准,适用于多处理器系统中的并行编程,包括图形处理器(GPU)和中央处理单元(CPU)。它使得计算密集型任务的加速成为可能,前提是算法可以进行并行化。这些任务可能包括神经网络的训练、傅里叶变换和方程组的求解。 在MQL程序中使用OpenCL,需要制造商提供的特殊驱动程序,并支持OpenCL版本1.1及以上。虽然不一定需要图形卡,但中央处理器同样可以用于并行计算。

2023.12.16
MetaTrader 5交易自动化:MQL5编程实用指南第六部分
MetaTrader5
MetaTrader 5交易自动化:MQL5编程实用指南第六部分

第六部分:交易自动化 在“交易自动化第六部分”中,我们将深入学习MQL5语言的一个关键组成部分。首先,我们会介绍一些基本的概念,比如金融工具的规格和交易账户的设置。这些都是创建正常运作的交易机器人(即EA)的必要前提。接着,我们将探讨内置函数和数据结构,以及机器人特定的事件,还有EA在策略测试器中操作的关键方面。MetaTrader 5的策略测试器是开发交易机器人时不可或缺的工具,因为它能够帮助你评估金融业绩和优化交易策略。 这个测试器提供了多种模式下调试的必备工具,包括使用K线或逐笔交易的可视化测试,支持模拟或真实的逐笔数据。它还能直观地重现报价流,并进行简单的无可视化窗口测试。我们之前已经看到如何在可视化模式下测试指标,但对于指标,允许的设置选项是有限的。而在开发EA时,我们将能够使用测试器的完整功能。 此外,我们还将探索市场数据的另一种表示方式:市场深度及其软件接口。 MetaTrader 5提供了分析和交易金融工具(符号)的能力,这些符号构成了终端所有子系统的基础。用户可以从经纪商提供的列表中选择符号,并在市场观察中监控它们。通过MQL5 API,你可以查看和分析所有符号的特性,也可以将它们添加或移除市场观察列表。 除了经纪商提供的标准符号之外,MetaTrader 5还支持创建自定义符号,从任意数据源加载它们的属性和报价历史,或使用公式和MQL5程序进行计算。

2023.12.16
MQL5编程指南:为交易者打造完美的交易系统(第5部分)
MetaTrader5
MQL5编程指南:为交易者打造完美的交易系统(第5部分)

第5部分:在MQL5中创建应用程序 在《MQL5编程指南:为交易者打造完美的交易系统》第5部分中,我们将深入探讨与算法交易相关的API,包括金融数据分析、处理、图表可视化、自动化及用户交互等内容。 我们将从创建MQL程序的一般原则开始,考虑终端中的事件类型、特性和模型。接着,我们将学习如何访问时间序列、操作图表和图形对象,以及逐个程序类型的创建和应用原则。 MetaTrader 5终端支持五种类型的程序:技术指标、用于自动或半自动交易的智能交易系统(EA)、执行一次性任务的脚本、后台操作的服务以及各个功能模块的库。 我们将深入学习如何与指标和图表进行交互,并掌握这些技术在智能交易系统中的应用。智能交易系统的开发将在本书的下一部分中详细探讨,我们将研究订单的自动执行、交易策略的规范化,以及如何使用历史数据进行测试和优化。 我们还将学习如何使用标准内置指标,以及如何从零开始创建自定义应用程序或基于其他指标进行开发。所有编译后的程序都将在MetaTrader 5的导航器中显示,除了EX5库,这些库被其他程序使用,但在导航器中没有单独的表示。 通过本节的学习,我们将更全面地理解MQL5语言的能力及其在算法交易中的应用。这将使我们能够有效地处理金融数据,创建交易指标和智能交易系统。

2023.12.16
MQL5 编程:掌握 MetaTrader 5 的常用 API
MetaTrader5
MQL5 编程:掌握 MetaTrader 5 的常用 API

第四部分:常用的 MQL5 API 在本书的前几部分中,我们深入探讨了 MQL5 编程语言的基础知识,学习了它的语法、使用规则和关键概念。但是,如果你想编写实际的程序来进行数据处理和自动交易,就必须利用众多内置函数与 MetaTrader 5 终端进行交互。 在 "第四部分:常用 MQL5 API" 中,我们将重点掌握内置函数(MQL5 API),逐步深入到专门的子系统。任何 MQL5 程序都可以利用丰富的技术和功能。因此,我们将从最简单和最实用的函数开始,这些函数可以在大多数程序中使用。 我们将学习的主要主题包括数组操作、字符串处理、文件交互、数据转换以及用户交互函数。同时,我们还将探讨数学函数和程序环境管理。 与其他一些编程语言不同,使用 MQL5 API 的内置函数无需额外的预处理指令。所有 MQL5 API 函数的名称都可以在全局上下文(命名空间)中访问,始终可以无条件调用。 我们还将讨论在不同程序上下文中使用相似名称的可能性,例如类方法名或自定义命名空间。在这种情况下,你需要使用上下文解析运算符来调用全局函数,这在我们讨论嵌套类型、命名空间和上下文运算符 '::' 的部分中有所提及。 编程通常需要对各种数据类型进行操作。在之前的部分中,我们已经看到内置数据类型的显式和隐式转换机制。然而,由于各种原因,它们可能并不总是适用。为了提供更精细的数据类型转换,MQL5 API 包含了一组转换函数。特别注意的是,字符串与其他类型(如数字、日期和时间、颜色、结构和枚举)之间的转换函数。

2023.12.15
MQL5编程入门:交易者必备的开发环境指南
MetaTrader5
MQL5编程入门:交易者必备的开发环境指南

第一部分:MQL5简介与开发环境 本书的第一部分标题为“MQL5简介与开发环境”,主要讲述了MQL5语言和开发环境的基础知识。 与MQL4(MetaTrader 4语言)相比,MQL5语言的一大新特性是支持面向对象编程(OOP),这使得它与C++相似。虽然一些OOP功能已经从MQL5转移到了MQL4,但许多不熟悉编程的用户可能会觉得OOP比较复杂。 本书的目的是让这种编程方式变得易于理解和接触。书中内容作为MQL5参考资料的补充,涵盖了MQL5编程的各个方面,并详细解释了所有流程。开发者可以选择面向对象和过程式编程风格,也可以将两者结合起来使用。 如果你已经有编程经验,可以跳过基础知识。对于C++程序员来说,掌握MQL5会容易一些,但要注意语言之间的差异,以免出错。 使用MQL5,你可以创建不同类型的程序,比如用于数据图形显示的指标、用于交易自动化的交易顾问(EA)、一次性操作的脚本,以及用于后台任务的服务。 MetaTrader 5的一个显著特点是可以通过客户端终端管理整个交易系统,MQL5程序在其中运行并向交易服务器发送交易指令。MQL5应用程序并不会安装在服务器上。 第一部分将讲解如何编辑、编译和运行程序,同时涵盖各种数据类型、变量、表达式、数组、调试和输出等内容。

2023.12.15
使用ONNX模型识别手写数字的专家顾问
MetaTrader5
使用ONNX模型识别手写数字的专家顾问

一款能识别手写数字的专家顾问 大家好!今天我想跟大家分享一款基于MNIST数据库的专家顾问,它可以识别手写数字。这个数据库包含了60,000张用于训练的图像和10,000张用于测试的图像,这些图像是从美国人口普查局获得的20x20像素的黑白样本经过“重混合”而成,并且还添加了来自美国高中生的测试样本。这些样本经过标准化,调整为28x28像素的大小,并进行了抗锯齿处理,这样就引入了灰度级别。 我们下载的手写数字识别模型为mnist.onnx,来自Model Zoo(opset 8)。有兴趣的朋友们可以下载并尝试其他模型,但请注意避免使用opset 1的模型,因为新版本的ONNX运行时不再支持它。值得一提的是,输出向量并没有使用通常在分类模型中使用的Softmax激活函数,但这并不是问题,我们可以很容易地自己实现。 int PredictNumber(void)   {    static matrixf image(28,28);    static vectorf result(10);    PrepareMatrix(image);    if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))      {       Print("OnnxRun error ",GetLastError());       return(-1);      }    result.Activation(result,AF_SOFTMAX);    int predict=int(result.ArgMax());    if(result[predict]<0.8)       Print(result);       Print("value ",predict," predicted with probability ",result[predict]);    return(predict);   }  使用鼠标在特定的网格中绘制数字,按住左键。要识别绘制的数字,请点击CLASSIFY按钮。 如果识别的数字的概率低于0.8,则打印出每个类别的概率向量。例如,尝试对一个空的未填充输入框进行分类。 [0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] value 5 predicted with probability 0.11471312493085861出乎意料的是,数字九(9)的识别准确率明显较低,而左倾的数字识别得更准确。

2023.11.23
基于当前利润的止盈策略 - MetaTrader 4 专家顾问
MetaTrader4
基于当前利润的止盈策略 - MetaTrader 4 专家顾问

引言 很多交易专家顾问(EA)在设置止盈时,通常是根据买入价与当前价格之间的点差来关闭订单。然而,EA Perceptron所使用的代码主要是基于当前的利润。这种方式使得我们能够更灵活地管理多个开仓的止盈,实时监控基于魔法数字的总利润,特别是在同时使用多个交易机器人或不同的EA时,管理起来更加方便。加我为好友,关注我的动态,获取最新消息! 使用这种代码还可以有效解决使用基于点差的止盈时可能出现的一些问题。例如,基于点差的止盈可能会因经纪商的滑点而变化,从而限制我们的利润。而通过使用基于当前利润的代码,我们可以避开这个问题,获得更好的交易控制。 如果你想了解更多关于如何设置基于当前利润的止盈,可以参考EA SwingBot的代码。 … 计算总订单数 首先,我们来看一下计算具有相同魔法数字的开放订单总数的代码。 魔法数字是由交易者或EA(专家顾问)为订单指定的唯一标识符。 代码将变量total_orders初始化为零。然后通过一个for循环遍历所有开放订单,并使用OrderSelect()函数选择每个订单。如果成功选择了一个订单,就将total_orders变量加一。 //-----------------    int total_orders = 0;    for(int i = 0; i < OrdersTotal(); i++)      {       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))         {          if(OrderMagicNumber() == MagicNumber)          {          total_orders++;         }         }      } … 计算当前利润 代码初始化了两个变量:ProfittoMinimo和Profit。变量ProfittoMinimo用于在该水平激活止盈,其值以账户货币表示。变量Profit则用于累积所有具有相同魔法数字的开放仓位的当前利润。变量StopLoss用于止损。 代码使用一个for循环遍历所有开放仓位,利用OrdersTotal()函数。对于每个开放仓位,使用OrderSelect()函数选择相应的订单。如果成功选择了订单且其魔法数字相同,就将该订单的利润加到Profit变量中。       double ProfittoMinimo = 3; // 目标利润       double Profit = 0; // 当前利润              for(int i=0; i<OrdersTotal(); i++)         {          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))            {             if(OrderMagicNumber() == MagicNumber) // 如果有多个EA,可以去掉魔法数字筛选,保持对所有订单的功能               {                Profit += OrderProfit();               }         } 最低利润可以设置为外部变量,并在EA选项中进行配置: … 达到利润时关闭仓位 代码使用一个for循环遍历所有开放订单,利用OrdersTotal()函数。循环从最后一张订单开始,向前遍历到第一张订单。对于每个订单,使用OrderSelect()函数选择相应的交易。 如果所选交易与当前图表的交易品种相同,且类型为OP_BUY,并且其魔法数字与代码中指定的一致,则会检查该交易的Profit是否大于或等于ProfittoMinimo。如果是的话,就通过OrderClose()函数以买入价平仓,并打印出关闭买单的消息。 同样,如果所选交易与当前图表的交易品种相同,且类型为OP_SELL,并且其魔法数字与代码中指定的一致,则会检查该交易的Profit是否大于或等于ProfittoMinimo。如果是的话,就通过OrderClose()函数以卖出价平仓,并打印出关闭卖单的消息。       for(int e = OrdersTotal() - 1; e >= 0; e--)         {          if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))            {             if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // 只有当魔法数字与当前订单匹配时,订单才会被修改。               {                if(Profit >= ProfittoMinimo)                  {                   OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // 买入价                   Print("买单已关闭", Profit, " - 最低止损: ",MarketInfo(Symbol(), MODE_STOPLEVEL));                  }               }             if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)               {                if(Profit >= ProfittoMinimo)                  {                   OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // 卖出价                   Print("卖单已关闭", Profit, " - 最低止损: ",MarketInfo(Symbol(), MODE_STOPLEVEL));                  }               }            }         } … 总结 这段代码对于所有基于止盈的平仓策略都非常有用,但它也可以与基于当前利润增加的追踪止损结合使用。该系统在使用多个专家顾问的情况下也非常实用。如果你去掉魔法数字的if条件,就可以设置一般的止盈水平,以同时控制所有活跃EA的开放仓位。

2023.10.27
突破马丁盖尔策略:为MetaTrader 4量身定制的交易助手
MetaTrader4
突破马丁盖尔策略:为MetaTrader 4量身定制的交易助手

大家好!今天我想和大家分享一个非常实用的交易工具——突破马丁盖尔策略(Breakout Martin Gale)专家顾问(EA),专为外汇交易设计。这款EA结合了突破交易策略与马丁盖尔资金管理系统的特点,旨在优化我们的交易表现。 输入参数: TakeProfPoints: 这个参数允许你为每笔交易设置以点数计算的止盈水平。 BalancePercentageAvailable: 指定将用于交易的账户余额百分比。 TP_Percentage_of_Balance: 确定每笔交易的止盈所用的账户余额百分比。 SL_Percentage_of_Balance: 设置每笔交易的止损所用的账户余额百分比。 Start_The_Recovery: 这个参数在恢复过程中起着至关重要的作用,控制何时以及如何激活恢复措施。 TP_Points_Multiplier: 一个止盈点的倍数,允许灵活的获利策略。 MagicNumber: 一个独特的标识符,确保这款EA能够独立管理自己的交易。 策略亮点: 突破交易: 这款EA专注于识别市场中的突破机会,也就是价格突破关键水平的时刻。 动态手数调整: 根据你的账户余额和风险偏好,动态调整手数,遵循马丁盖尔资金管理原则。 亏损恢复: EA包含强大的恢复机制,能够在必要时通过动态调整交易参数来弥补损失。 在这款EA中,主要使用的函数是CalcLotWithTP(),它有三个输入参数:止盈、起始价格和结束价格。这个函数计算进入交易时所需的交易量,以便在以起始价格进入并以结束价格退出时实现盈利目标。 代码中的一切都有详细注释,便于大家理解。 我还制作了一段关于这款EA的YouTube视频,欢迎大家观看!

2023.09.26
MT5爆破马丁盖尔交易系统:优化外汇交易的利器
MetaTrader5
MT5爆破马丁盖尔交易系统:优化外汇交易的利器

大家好,今天我们来聊聊一种非常实用的交易工具——"爆破马丁盖尔"策略。这款交易系统专为外汇市场设计,结合了突破交易和马丁盖尔资金管理的优势,旨在提升交易表现。 输入参数: 止盈点数 (TakeProfPoints): 这个参数让你为每笔交易设定止盈的点数。 可用余额百分比 (BalancePercentageAvailable): 指定你账户余额中用于交易的百分比。 止盈百分比 (TP_Percentage_of_Balance): 设定用于每笔交易的止盈金额占账户余额的百分比。 止损百分比 (SL_Percentage_of_Balance): 设定用于每笔交易的止损金额占账户余额的百分比。 启动恢复 (Start_The_Recovery): 这个参数在恢复过程中非常关键,控制何时以及如何启动恢复措施。 止盈点数倍数 (TP_Points_Multiplier): 用于止盈点数的倍数,允许灵活的获利策略。 魔术编号 (MagicNumber): 每个EA都有一个独特的标识符,确保它能够独立管理自己的交易。 策略亮点: 突破交易: 此EA专注于识别市场中的突破机会,当价格突破关键水平时进行交易。 动态手数调整: 手数根据你的账户余额和风险偏好动态调整,遵循马丁盖尔资金管理原则。 亏损恢复: EA内置强大的恢复机制,能够在必要时通过调整交易参数来弥补亏损。 在这个EA中,最主要的函数是 CalcLotWithTP(),它有三个输入参数:止盈点、起始价格和结束价格。这个函数计算所需的交易手数,以便在以起始价格进场、以结束价格出场时实现利润目标。 代码中的每一部分都有注释,便于理解。   

2023.09.26
首页 上一页 3 4 5 6 7 8 9 10 11 12 13 下一页 末页