系统交易

MetaTrader 5 中的计数器实现:如何设置 X 次计数与等待
MetaTrader5
MetaTrader 5 中的计数器实现:如何设置 X 次计数与等待

01. 计数 "X" 次后执行。 步骤 01 - 创建一个变量来设定 计数限制,你可以将其作为 输入参数,便于代码优化。 步骤 02 - 创建另一个变量来存储已计数的次数。 步骤 03 - 一旦 计数器 达到你设定的 计数限制,这意味着是时候执行你指定的代码块了。 步骤 04 - 执行完代码后,务必 重置计数器,否则它会无限计数。 你也可以为计数器块设置过滤条件,例如,>> "如果这个条件成立,则计数一次。" input int count = 50; // 将计数限制设为输入 int Counter; // 计数器变量 // 专家初始化 -------------------- int OnInit() { return(INIT_SUCCEEDED); } // 专家反初始化 ------------------- void OnDeinit(const int reason) { } // 专家每个 tick 执行 -------------------------- void OnTick() { Counter++; // 每个 tick 计数加 1。 Comment("当前计数 -:", Counter); if(Counter == count) // 计数 "X" 次后执行 | 这个代码块每次计数达到时只执行一次。 {      // 你的代码在这里...... Alert(count," 次已计数"); Counter = 0; // 在代码块结束时重置计数器。这是必须的。 } } // OnTick 结束  <<---------------------- 02. 计数 "X" 次后等待 "X" 次再执行。 这种方法可以用来实现等待和执行、执行和等待的逻辑。 步骤 01 - 创建变量来设定 计数限制 和 等待限制,你可以将它们作为 输入参数,便于代码优化。 步骤 02 - 创建另一个变量来存储计数和等待的次数。 步骤 03 - 一旦 计数器 和你的 计数限制 相等,意味着是时候执行你的代码块。 步骤 04 - 一旦 等待器 和你的 等待限制 相等,意味着是时候稍等一下。 步骤 05 - 一旦达到等待限制,务必 重置计数器 和 等待器,否则将会停止工作。 你也可以为计数器块和等待器块设置 过滤条件,例如,>> "如果这个条件成立,则等待一下" input int count = 50; // 将计数限制设为输入 input int wait = 50; // 将等待限制设为输入 int Counter; // 计数器变量,默认值为 "0" int Waiter; // 等待器变量,默认值为 "0" // 专家初始化 -------------------- int OnInit()   {    return(INIT_SUCCEEDED);   } // 专家反初始化 ------------------- void OnDeinit(const int reason)   {   } // 专家每个 tick 执行 -------------------------- void OnTick()   {    Comment("已计数的 ticks -: ", Counter, " ", "已等待的 ticks -: ", Waiter);    if(Counter < count) // 执行 "X" 次      {       Counter++; // 更新计数器       // 你的代码在这里。      }    else       if(Waiter < wait) // 等待 "X" 次         {          Waiter++; // 更新等待器          // 你的代码在这里。         }    if(Waiter == wait) // 达到等待限制      {       Counter = 0; // 重置计数器       Waiter = 0; // 重置等待器      }   } // OnTick 结束  <<---------------------- //+------------------------------------------------------------------+ 特别提示 -: 你可以通过修改上面的代码,移除等待代码块,来实现 "执行 X 次后停止" 的功能。这样就会计数特定次数后停止工作,直到计数器被重置。如果你将这些变量创建为全局变量,可以在代码的任何地方进行重置。

2024.04.14
使用历史K线检测新K线的高效代码块 - MetaTrader 5专家
MetaTrader5
使用历史K线检测新K线的高效代码块 - MetaTrader 5专家

在之前的代码中,我使用了时间来检测新K线。这次我们换个方式,利用K线数量来检测新K线。这个方法比使用时间的方法更轻便且更快速。声明一个整数类型的变量来存储K线数量。在初始化时,为"BarsTotal_OnInt"赋值K线数量。使用iBars();函数在实时图表中为"BarsTotal_OnTick"变量赋值K线数量。这个变量会在每次波动时更新。使用注释和警报来检查代码的准确性。int BarsTotal_OnInt; int BarsTotal_OnTick; //+------------------------------------------------------------------+ //| 专家初始化函数                                   | //+------------------------------------------------------------------+ int OnInit()   {      BarsTotal_OnInt = iBars(NULL,PERIOD_CURRENT); // 初始化时赋值总K线数量    return(INIT_SUCCEEDED);   }    void OnTick() // 每次波动函数   {      BarsTotal_OnTick = iBars(NULL,PERIOD_CURRENT); // 存储最新的K线数量       if(BarsTotal_OnTick > BarsTotal_OnInt) // 新K线到达    {     BarsTotal_OnInt = BarsTotal_OnTick; // 更新历史记录。     Alert("新K线到达!");     Comment("历史K线数量 -: ", BarsTotal_OnInt, "\n", "实时K线数量 -: ", BarsTotal_OnTick); // 你的代码可以在这里添加。-------------------------- // 你可以更新一个"标志"/变量用于后续使用。    }   }

2024.04.11
如何在MetaTrader 4中使用虚拟止损和止盈设置
MetaTrader4
如何在MetaTrader 4中使用虚拟止损和止盈设置

虚拟止损止盈脚本概述今天给大家介绍一个非常实用的交易工具——Virtual_SL_TP_Pending_with_SL_Trailing.mq4。这个脚本专为帮助交易者管理交易而设计,能够设置虚拟止损和止盈水平,并包含一个可选的跟随止损功能。脚本功能详细解析以下是这个脚本的主要功能和特点:版权和链接:提供了版权信息以及开发者网站的链接。版本:标明脚本的版本号。描述:包含脚本的详细信息,包括开发者的邮箱,以及使用软件的风险提示。输入参数:用户可以自定义EA行为的外部变量,包括:StopLossPoints:初始止损点数。TakeProfitPoints:初始止盈点数。SpreadThreshold:虚拟止损/止盈的点差阈值。TrailingStopPoints:虚拟挂单的跟随止损点数。EnableTrailing:启用或禁用跟随止损的选项。全局变量:在脚本中使用的变量,用于存储初始点差、虚拟止损、虚拟止盈和挂单价格。初始化函数(OnInit):当EA附加到图表时,初始化EA,并根据输入参数计算初始的虚拟止损、止盈和挂单价格。价格波动函数(OnTick):每当价格波动时调用,检查点差是否超过阈值,并相应调整虚拟止损、止盈和挂单价格。同时监测价格是否触及虚拟止损或止盈并平仓。如果启用跟随止损且价格到达挂单价格,则会以跟随止损的方式放置虚拟挂单。平仓函数(ClosePosition):当价格触及虚拟止损或止盈时平仓。挂单放置函数(PlacePendingOrder):如果启用跟随止损,则以跟随止损的方式放置虚拟挂单。这个EA为交易者提供了一种灵活的交易管理方式,可以利用虚拟水平和跟随止损功能,帮助大家在MetaTrader 4中自动化交易管理流程。

2024.04.10
基于预设条件的简单趋势跟随交易策略 - MetaTrader 4 专用脚本
MetaTrader4
基于预设条件的简单趋势跟随交易策略 - MetaTrader 4 专用脚本

今天,我想和大家分享一个适用于MetaTrader 4(MT4)的简单趋势跟随交易策略脚本。这段脚本可以帮助我们在预设条件下进行买入和卖出,下面就来详细了解一下这个脚本的结构和功能。 初始化:脚本在成功初始化时会打印一条消息,让我们知道它已准备就绪。 反初始化:在脚本被反初始化时,它也会打印一条消息,方便我们跟踪状态。 OnTick 函数:每当市场价格发生变化时,这个函数就会被执行。 a. 重置持仓跟踪变量:脚本会重置跟踪当前买入和卖出持仓的变量。 b. 检查已开订单:脚本会遍历所有已开的订单,以确认是否存在买入或卖出持仓。 c. 开设买入持仓:如果没有已开的买入持仓,并且“OpenBuyPosition”标志被设为真,脚本会尝试根据当前市场报价开设一个买入持仓,并设置止损和止盈。 d. 开设卖出持仓:如果没有已开的卖出持仓,并且“OpenSellPosition”标志被设为真,脚本会尝试根据当前市场询价开设一个卖出持仓,并设置止损和止盈。 e. 检查已平仓订单:脚本会检查是否有已平仓的订单。如果某个买入或卖出订单盈利平仓,它会重置对应的持仓标志。 输入参数:脚本提供了输入参数,包括手数、止损、止盈,以及控制是否开设买入或卖出持仓的标志。 免责声明:脚本中包含一条警告,提醒用户使用时需自行承担风险,创作者对可能导致的损失不承担任何责任。 总体而言,这个脚本旨在自动化执行基于趋势跟随策略的买卖订单,用户可以根据自己的需求自定义参数,例如手数和交易方向。不过,建议大家在实际交易前一定要谨慎使用,并进行充分的测试。

2024.04.10
利用移动止损策略优化你的交易表现
MetaTrader5
利用移动止损策略优化你的交易表现

这个代码块在你使用止损的情况下也能正常工作。 需求说明 你需要包含 "Trade.mqh",以便访问 CTrade 类,这样你就可以对持仓和订单进行操作。 #include <Trade\Trade.mqh> // <<------------------------------------------ 包含这个 "Trade.mqh" 以访问 CTrade 类 你需要设置一个 输入参数,以调整你想要的移动距离。虽然这不是必需的,但为了方便,设置一个是好的。 input double Trailing_Step = 3.0; 你需要定义一个 CTrade 类的实例,名称可以随意。最好在 OnInit 事件处理程序之后定义它。 接下来,你需要创建一个 if 语句 来检查当前是否有持仓在运行。这个语句每次 tick 时调用 Check_TrailingStop(); 函数。这一点很重要,因为 EA 应该能够 顺畅而快速 地调整止损。请记得把这个语句放在 OnTick 事件处理程序的顶部,以确保正常工作。 //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int OnInit() { //--- 创建定时器 EventSetTimer(60); //--- return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ 声明 "CTrade" 类,你可以用任何你想要的名字替换 "trade" void OnTick() { if(PositionsTotal() > 0) { // 如果有持仓时,每次 tick 调用移动止损函数 Check_TrailingStop(); } } 你需要声明一个自定义函数 Check_TrailingStop();(在这个例子中)。你可以用任何你想要的名字。 自定义函数会循环遍历 所有打开的持仓,并根据你设置的距离来调整它们。 void Check_TrailingStop() { int totalPositions = PositionsTotal(); for(int count = 0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // 使用持仓的 'index' 获取持仓票号 if(PositionSelectByTicket(TicketNo)) { // 使用票号选择持仓 if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { // 检查持仓类型 double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); // <<-------------------获取当前止损 double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Trailing_Step * Point()), _Digits); if(stopLoss < openPrice) { // 如果没有止损 if(bidPrice > openPrice && trailingLevel > openPrice) { // 每个持仓仅运行一次,设置初始止损 trade.PositionModify(ticket, trailingLevel, takeProfit); // 使用 "CTrade.trade" 修改移动止损 } } if(bidPrice > openPrice && trailingLevel > stopLoss) { // 检查移动止损水平是否高于之前的水平 trade.PositionModify(ticket, trailingLevel, takeProfit); // 使用 "CTrade.trade" 修改移动止损 } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); double askPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(askPrice + (Trailing_Step * Point()), _Digits); if(stopLoss < openPrice) { // 如果没有止损 if(askPrice < openPrice && trailingLevel < openPrice) { // 每个持仓仅运行一次,设置初始止损 trade.PositionModify(ticket, trailingLevel, takeProfit); // 使用 "CTrade.trade" 修改移动止损 } } if(askPrice < openPrice && trailingLevel < stopLoss) { // 检查移动止损水平是否高于之前的水平 trade.PositionModify(ticket, trailingLevel, takeProfit); // 使用 "CTrade.trade" 修改移动止损 } } } } }

2024.04.05
MetaTrader 5 新K线检测简单代码分享
MetaTrader5
MetaTrader 5 新K线检测简单代码分享

大家好!今天我想和大家分享一段简单的代码,用于在MetaTrader 5中检测新K线的生成。这个功能对每位交易者来说都非常重要,能够帮助我们及时掌握市场动态。 这段代码的基本原理非常简单。首先,代码会存储上一个K线的时间(Time of the previous bar)。然后,我们在这个时间上加上60秒(即1分钟,当然你也可以根据需要调整时间),这样就得到了当前K线的收盘时间。 当当前时间等于当前K线的收盘时间时,就意味着新K线已经生成。 在这段代码中,使用了一个布尔类型的变量NewBarReceived来避免多次调用代码块,也就是说这段代码每次K线生成时只会执行一次。你可以在代码中看到使用了Comment();和PlaySound("ok.wav");来检查代码的准确性,如果不需要可以删除。 当当前时间超过当前K线的收盘时间时,标记会重置为false,以便检查下一根K线的到来。(具体可以查看代码中的注释)。 //+------------------------------------------------------------------+ //|                                                            新K线检测.mq5 | //|                                                            作者:H A T Lakmal | //|                                                             https://t.me/Lakmal846 | //+------------------------------------------------------------------+ bool NewBarReceived = false; // 用于控制的标志。 //+------------------------------------------------------------------+ //| 专家初始化函数                                   | //+------------------------------------------------------------------+ int OnInit()   { //--- 创建定时器    EventSetTimer(60); //---    return(INIT_SUCCEEDED);   } //+------------------------------------------------------------------+ //| 专家去初始化函数                                 | //+------------------------------------------------------------------+ void OnDeinit(const int reason)   { //--- 销毁定时器    EventKillTimer();   } //+------------------------------------------------------------------+ //| 专家每个Tick的处理函数                                             | //+------------------------------------------------------------------+ void OnTick()   {    datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);    datetime TimeCurrentClose = TimePreviousBar + 60; // 当前K线的收盘时间。    datetime Time_Current = TimeCurrent();    if(Time_Current == TimeCurrentClose && NewBarReceived == false)      {       PlaySound("ok.wav");   // 用于确认是否正常工作。       NewBarReceived = true; // 更新标志以避免多次调用。       // 在这里添加你的代码 ----- (执行某些操作)      }    else       if(Time_Current > TimeCurrentClose)         {          NewBarReceived = false; // 重置标志以准备下一根K线。          // 在这里添加你的代码 ----- (执行某些操作)         }    Comment(" " +  " " +  "当前K线时间 -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +            " " + "当前收盘时间 -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +            " " + "当前时间 -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " +" " + "新K线到达 -: " + NewBarReceived); // 用于检查计算结果   } //+------------------------------------------------------------------+ //| 定时器函数                                                    | //+------------------------------------------------------------------+ void OnTimer()   { //---   } //+------------------------------------------------------------------+ //| 交易函数                                                   | //+------------------------------------------------------------------+ void OnTrade()   { //---   } //+------------------------------------------------------------------+ //| 图表事件函数                                              | //+------------------------------------------------------------------+ void OnChartEvent(const int id,                   const long &lparam,                   const double &dparam,                   const string &sparam)   { //---   } //+------------------------------------------------------------------+ 希望这段代码能对大家有所帮助!如果你有任何问题或者想法,欢迎在评论区留言,我们一起交流学习!

2024.04.05
MetaTrader 4:如何使用账户货币关闭盈利和亏损的交易
MetaTrader4
MetaTrader 4:如何使用账户货币关闭盈利和亏损的交易

在交易的世界里,我们常常需要及时关闭盈利或亏损的交易。今天,我想和大家分享一个关于MetaTrader 4的EA(专家顾问)的新功能,它能帮助我们在账户货币中自动管理这些交易。 //+------------------------------------------------------------------------------------------------------------------------------+ //|Close_on_PROFIT_or_LOSS_inAccont_Currency_V2 优化更新: //| //|1. 增加错误处理:该代码包含错误处理,能够处理无法关闭或删除订单的情况。 //|2. 代码优化:优化了代码,避免重复,提高了可读性。 //|3. 效率提升:移除了不必要的循环或计算。 //|4. EA去初始化时清除所有图表对象。 //+------------------------------------------------------------------------------------------------------------------------------+ 当设置为0时,EA将不会执行任何操作。 要设置Positive_Closure_in_Account_Currency,必须高于当前的权益金额,否则交易将立即执行。 例如:如果权益为55000美元,而Positive_Closure_in_Account_Currency设置为55500美元,目标是盈利500美元。 如果 Positive_Closure_in_Account_Currency > 0 且 < 55000美元,将立即执行交易。 同样,Negative_Closure_in_Account_Currency必须低于当前的权益金额,否则交易会立即执行。 例如:如果权益为55000美元,Negative_Closure_in_Account_Currency设置为54500美元,目标是亏损不超过500美元。 如果 Negative_Closure_in_Account_Currency > 55000美元,将立即执行交易。 建议降低点差数值以避免点差波动,但市场总是有其自身的规律,可能会导致更高的盈利或亏损。 如果设置的点差低于交易对的平均点差,那么这些交易将不会被执行。 警告:使用此软件需自担风险,外汇市场波动极大! #property copyright     "Copyright 2024, MetaQuotes Ltd." #property link          "https://www.mql5.com" #property version       "1.01" #property description   "persinaru@gmail.com" #property description   "IP 2024 - 免费开源" #property description   "此EA在账户货币中关闭所有交易的盈利与亏损。" #property description   "警告:使用此软件需自担风险。" #property description   "该脚本的创建者不对任何损失或损害负责。" #property strict #property show_inputs extern string  Closures = "EA在达到盈利或亏损时关闭所有交易和挂单。盈利与亏损以账户货币计算。"; extern int Positive_Closure_in_Account_Currency     = 0; extern int Negative_Closure_in_Account_Currency     = 0; extern int Spread = 10;

2024.03.25
用MQL5实现算法交易的神经网络实例
MetaTrader5
用MQL5实现算法交易的神经网络实例

了解《用MQL5实现算法交易的神经网络》《用MQL5实现算法交易的神经网络》是一本专为希望在交易中运用机器学习和神经网络的算法交易者而设计的实用指南。无论你是刚入门的新手,还是已经有一定基础的交易者,这本书都能带你深入了解如何使用高级人工智能技术来构建交易策略。书中共分为七个章节,涵盖了你需要了解的所有内容,帮助你入门神经网络,并将其集成到你的MQL5交易机器人中。通过简单易懂的解释,你将学习到机器学习的基础知识,探索不同类型的神经网络,包括卷积神经网络和递归神经网络,以及更复杂的架构解决方案和注意力机制。为了帮助你在MQL5环境中将这些解决方案整合到你的交易机器人中,书中提供了大量的实用实例。此外,书中还探讨了多种改善模型收敛的方法,如批量归一化(Batch Normalization)和Dropout等技术。作者还提供了关于如何训练神经网络以及如何将其嵌入到你的交易策略中的实用指导。你将学习如何创建交易专家顾问(Expert Advisors),以便在新数据上测试训练模型的表现,从而评估其在实际金融市场中的潜力。《用MQL5实现算法交易的神经网络》不仅仅是一本书,它是一本可以帮助你将先进的决策技术集成到交易算法中的实用指南,潜在地改善你的财务结果。今天就开始学习机器学习的高级能力,将你的交易提升到一个新的水平吧!

2024.02.29
掌握网格和马丁策略的反弹次数与仓位设置
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
首页 上一页 2 3 4 5 6 7 8 9 10 11 12 下一页 末页