伟大而可怕的MT4永远(或如何制定过渡策略) - 页 24 1...171819202122232425262728293031 新评论 Igor Makanu 2021.05.10 11:19 #231 Artyom Trishkin: 用俄语?用西班牙语?用英语?哪一个? 自然是终端支持的所有语言 格式并不重要--它可以是一个类的形式的SB,其中构造函数获得语言作为一个参数。 或者它可以是一组自定义函数,语言结尾为GetTxtErrDescription_RU()。 甚至是像GetLastError()这样的普通函数 如果你愿意 好吧,算了吧,我什么都有,我的级别不允许照顾普遍的福祉,让受过专门训练的人处理可用性和用户友好性的问题。 Alexey Viktorov 2021.05.10 11:44 #232 我猜到了为什么你的位置是双倍的。) ) )因为你在CodeBase中放置了两个库))))。 Fast235 2021.05.10 13:42 #233 你为什么不喜欢GetTickCount();它不会拖慢整个代码,不像Sleep,如果ping很高,你至少可以增加500ms。 在我的多符号中,在OrderSend 之后,每一对单独的计数器被激活,其余的逻辑继续工作。 void OnStart() { MqlTradeRequest BuyRequest = {0}; MqlTradeResult result = {0}; BuyRequest.action = TRADE_ACTION_DEAL; BuyRequest.type = ORDER_TYPE_BUY; BuyRequest.symbol = _Symbol; BuyRequest.volume = 0.1; BuyRequest.type_filling = GetFilling(); //--- while(1 && !IsStopped()) { static uint LastOnCalculate = GetTickCount(); if(GetTickCount() - LastOnCalculate > 5) //--- { BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); OrderSend(BuyRequest, result); LastOnCalculate = GetTickCount(); continue; } if(PositionGetTicket(0) > 0 && PositionsTotal() >= 10) { Sleep(100); Print(PositionsTotal()); return; } } } //+------------------------------------------------------------------+ ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK) { const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE); const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE); return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ? (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ? ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) : (ENUM_ORDER_TYPE_FILLING)Type); } //+------------------------------------------------------------------+ traveller00 2021.05.10 13:58 #234 Fast235:你为什么不喜欢GetTickCount();它不像Sleep那样拖慢整个代码,如果ping很高,你至少可以增加500ms。 这是一个主动循环,它吃掉了处理器。如果终端中有50个这样的专家顾问怎么办?在一个对子上有8个,所有8个将在一个尖峰上发送订单。 Fast235 2021.05.10 13:59 #235 traveller00:这是一个活跃的循环,它吃掉了CPU。如果终端中有50个这样的专家顾问怎么办?一对有8个,其中在发夹上的8个都会发出指令。它被激活了半秒钟,只有在订单发送 后,才没有任何指令,然后它首先检查是否存在未结头寸。 我优化了我的代码,它变得更快,并开始一次打开2个位置)起初,睡眠是有帮助的,但它使事情变慢了,我有7个字符 fxsaber 2021.05.11 07:05 #236 fxsaber:我自己还没有试过MT4风格。 理论上它应该可以。我还没有机会去看它。 它是有效的。比较两个版本(有位置等待和没有位置等待)很有意思。 在OrderSend 之后有位置等待。 #include <MT4Orders.mqh> #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnStart() { while (OrdersTotal() < 30) OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); Print(OrdersTotal()); } 不需要等待位置,结果是即时的。 #include <fxsaber\TradesID\ByPass.mqh> #include <MT4Orders.mqh> #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnStart() { BYPASS ByPass; MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend while (OrdersTotal() < 30) if (ByPass.Is()) ByPass += OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); Print(OrdersTotal()); } 我确信第二种变体的速度更快。结果是在执行的时间上是平等的。 当等待位置ByPass.Is()时,代码返回了一次false,而不等待则返回了740次。总而言之,这根拐杖似乎很有效。 fxsaber 2021.05.11 07:42 #237 似乎是提出的唯一可行的解决方案。 关于交易、自动交易系统和交易策略测试的论坛 伟大而可怕的MT4永远(或如何建立你的迁移策略) Igor Makanu, 2021.05.10 10:28 它似乎是有效的。 #include <Trade\Trade.mqh> void OnStart() { CTrade Trade; while(PositionsTotal() < 30) { if(OrdersTotal() > 0) continue; if(!Trade.Buy(0.01)) continue; if(OrdersTotal() == 0 && PositionsTotal() >= 30) return; } } 但是非常慢,而且解决方案也很一般。 它的速度是可以的。缺乏同步性37次。 Igor Makanu 2021.05.11 09:47 #238 fxsaber:其速度是正常的。缺乏同步性37次。 我在fx上检查了一下:这个脚本开10个单子快了5次,最后一次快了,当我在demo上开10个单子10秒钟时,关单也不快。 这里是11143290号订单的日志上的一个划痕。 LL 0 11:19:31.444 交易 '20615687': 订单 #11143290 在市场上买入 0.1 / 0.1 EURUSD 在 1580.643 ms 内完成。 PO 0 11:19:33.621 交易 '20615687': 交易#1865643在1.21460买入0.1 EURUSD完成(基于订单#11143290)。 CL 0 11:19:33.622 交易 '20615687': 市场买入 0.1 EURUSD JF 0 11:19:33.679 交易 '20615687': 接受市场买入 0.1 EURUSD QO 0 11:19:33.679 交易 '20615687': 市场买入 0.1 EURUSD,已放置执行。 KM 0 11:22:41.224 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460 DR 0 11:22:41.280 交易 '20615687': 接受市场卖出 0.1 EURUSD,收盘 #11143290 买入 0.1 EURUSD 1.21460 KQ 0 11:22:41.282 交易 '20615687': 市场卖出0.1 EURUSD,收盘#11143290 买入0.1 EURUSD 1.21460放置执行。 ON 0 11:22:43.824 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460 DO 2 11:22:43.880 交易 '20615687': 市场卖出 0.1 EURUSD,关闭 #11143290 买入 0.1 EURUSD 1.21460 [关闭此位置的订单已经存在] JN 0 11:22:46.280 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460 OL 2 11:22:46.336 交易 '20615687': 市场卖出 0.1 EURUSD,关闭 #11143290 买入 0.1 EURUSD 1.21460 [关闭此位置的订单已经存在] fxsaber 2021.05.11 10:13 #239 Igor Makanu:我刚刚检查了fx...n。 我必须看一下那个服务器。不妨看看这里建议的拐杖,对谁来说,这似乎很重要。 过了一段时间再来谈这个话题,就会很不情愿了。如果有任何错误,最好马上指出来。 Igor Makanu 2021.05.11 10:35 #240 fxsaber:我们必须看一下这个服务器。不妨看看这里建议的拐杖,对谁来说,这似乎很重要。如果过了一段时间再来讨论这个话题,那就太可惜了。如果有的话,最好立即指出错误。 在PM中放弃了服务器 1...171819202122232425262728293031 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
用俄语?用西班牙语?用英语?哪一个?
自然是终端支持的所有语言
格式并不重要--它可以是一个类的形式的SB,其中构造函数获得语言作为一个参数。
或者它可以是一组自定义函数,语言结尾为GetTxtErrDescription_RU()。
甚至是像GetLastError()这样的普通函数
如果你愿意
好吧,算了吧,我什么都有,我的级别不允许照顾普遍的福祉,让受过专门训练的人处理可用性和用户友好性的问题。
我猜到了为什么你的位置是双倍的。) ) )因为你在CodeBase中放置了两个库))))。
你为什么不喜欢GetTickCount();它不会拖慢整个代码,不像Sleep,如果ping很高,你至少可以增加500ms。
在我的多符号中,在OrderSend 之后,每一对单独的计数器被激活,其余的逻辑继续工作。
你为什么不喜欢GetTickCount();它不像Sleep那样拖慢整个代码,如果ping很高,你至少可以增加500ms。
这是一个主动循环,它吃掉了处理器。如果终端中有50个这样的专家顾问怎么办?在一个对子上有8个,所有8个将在一个尖峰上发送订单。
这是一个活跃的循环,它吃掉了CPU。如果终端中有50个这样的专家顾问怎么办?一对有8个,其中在发夹上的8个都会发出指令。
它被激活了半秒钟,只有在订单发送 后,才没有任何指令,然后它首先检查是否存在未结头寸。
我优化了我的代码,它变得更快,并开始一次打开2个位置)起初,睡眠是有帮助的,但它使事情变慢了,我有7个字符我自己还没有试过MT4风格。 理论上它应该可以。我还没有机会去看它。
它是有效的。比较两个版本(有位置等待和没有位置等待)很有意思。
在OrderSend 之后有位置等待。
不需要等待位置,结果是即时的。
我确信第二种变体的速度更快。结果是在执行的时间上是平等的。
当等待位置ByPass.Is()时,代码返回了一次false,而不等待则返回了740次。总而言之,这根拐杖似乎很有效。
关于交易、自动交易系统和交易策略测试的论坛
伟大而可怕的MT4永远(或如何建立你的迁移策略)
Igor Makanu, 2021.05.10 10:28
它似乎是有效的。
但是非常慢,而且解决方案也很一般。
它的速度是可以的。缺乏同步性37次。
其速度是正常的。缺乏同步性37次。
我在fx上检查了一下:这个脚本开10个单子快了5次,最后一次快了,当我在demo上开10个单子10秒钟时,关单也不快。
这里是11143290号订单的日志上的一个划痕。
LL 0 11:19:31.444 交易 '20615687': 订单 #11143290 在市场上买入 0.1 / 0.1 EURUSD 在 1580.643 ms 内完成。
PO 0 11:19:33.621 交易 '20615687': 交易#1865643在1.21460买入0.1 EURUSD完成(基于订单#11143290)。
CL 0 11:19:33.622 交易 '20615687': 市场买入 0.1 EURUSD
JF 0 11:19:33.679 交易 '20615687': 接受市场买入 0.1 EURUSD
QO 0 11:19:33.679 交易 '20615687': 市场买入 0.1 EURUSD,已放置执行。
KM 0 11:22:41.224 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460
DR 0 11:22:41.280 交易 '20615687': 接受市场卖出 0.1 EURUSD,收盘 #11143290 买入 0.1 EURUSD 1.21460
KQ 0 11:22:41.282 交易 '20615687': 市场卖出0.1 EURUSD,收盘#11143290 买入0.1 EURUSD 1.21460放置执行。
ON 0 11:22:43.824 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460
DO 2 11:22:43.880 交易 '20615687': 市场卖出 0.1 EURUSD,关闭 #11143290 买入 0.1 EURUSD 1.21460 [关闭此位置的订单已经存在]
JN 0 11:22:46.280 交易 '20615687': 市场卖出 0.1 EURUSD, 收盘 #11143290 买入 0.1 EURUSD 1.21460
OL 2 11:22:46.336 交易 '20615687': 市场卖出 0.1 EURUSD,关闭 #11143290 买入 0.1 EURUSD 1.21460 [关闭此位置的订单已经存在]
我刚刚检查了fx...n。
我必须看一下那个服务器。不妨看看这里建议的拐杖,对谁来说,这似乎很重要。
过了一段时间再来谈这个话题,就会很不情愿了。如果有任何错误,最好马上指出来。
我们必须看一下这个服务器。不妨看看这里建议的拐杖,对谁来说,这似乎很重要。
如果过了一段时间再来讨论这个话题,那就太可惜了。如果有的话,最好立即指出错误。
在PM中放弃了服务器