错误、漏洞、问题 - 页 2100

 
Slava:

你已经感觉到了同步命令和异步命令之间的区别。

你能否提供一个异步函数的清单。

如果我理解正确的话,Object和Chart函数(还有哪些?那么就不太清楚为什么ChartGet比ChartXY运行得快?

 
Slava:

你已经感觉到了同步命令和异步命令之间的区别。

是啊...
但观察表明,这些功能的异步性是相当同步的。:)
好吧,我将以不同的方式为开发者提出我的问题:是否有机会(或愿望)将这些异步函数变为同步函数?
 
fxsaber:

你能否提供一个异步函数的清单。

如果我理解正确的话,Object和Chart函数(还有哪些?那么就不太清楚为什么ChartGet比ChartXY运行得快?

它们也慢得可怕,只是我的 "快速 "算法的重点是计算出一个不调用图表函数的机会,而不需要它们。在我的例子中,一旦你 "抓住 "图表并开始向左-向右移动,所有的速度都会丧失,因为图表功能开始由于事件的发生而被应用。
CHARTEVENT_CHART_CHANGE
 

你好,我从https://www.mql5.com/ru/articles/100 开始学习MQL5。我启动了代码,收到了4756号错误。 翻阅文档后,该错误没有改善。好吧,我想我将从简单的功能开始(警报/打印...)。其中一个最重要的功能是OrderSend。我开始在论坛/文档中搜索如何使用OrderSend。我发现这篇文章https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions,并 找到了开设买入头寸的代码。我得到了错误4756和检索码10030。我理解10030--它是OrderSend属性,但我没有理解这个属性应该如何使用(我看了别人的代码),它主要用于什么。然后我打开https://www.mql5.com/ru/docs/trading/ordersend, 复制了代码,启动了它,一切都很好,它工作了。
但我仍然不明白为什么会出现错误4756,以及如何摆脱它,还有10030。

看了一下之间的代码

void OnTick(){
      //--- объявление и инициализация запроса и результата
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      //--- параметры запроса
      request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
      request.symbol   =Symbol();                              // символ
      request.volume   =0.1;                                   // объем в 0.1 лот
      request.type     =ORDER_TYPE_BUY;                        // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=5;                                     // допустимое отклонение от цены
      request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера
      //--- отправка запроса
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
         Alert(GetLastError());
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
   }

和这个。

uint SendRandomPendingOrder(long const magic_number) 
  { 
//--- готовим запрос 
   MqlTradeRequest request={0}; 
   request.action=TRADE_ACTION_PENDING;         // установка отложенного ордера 
   request.magic=magic_number;                  // ORDER_MAGIC 
   request.symbol=_Symbol;                      // инструмент 
   request.volume=0.1;                          // объем в 0.1 лот 
   request.sl=0;                                // Stop Loss не указан 
   request.tp=0;                                // Take Profit не указан    
//--- сформируем тип ордера 
   request.type=GetRandomType();                // тип ордера 
//---сформируем цену для отложенного ордера 
   request.price=GetRandomPrice(request.type);  // цена для открытия 
//--- отправим торговый приказ 
   MqlTradeResult result={0}; 
   OrderSend(request,result); 
//--- выведем в лог ответ сервера   
   Print(__FUNCTION__,":",result.comment); 
   if(result.retcode==10016) Print(result.bid,result.ask,result.price); 
//--- вернем код ответа торгового сервера 
   return result.retcode; 
  } 

在我看来它们几乎是一样的,我没有看到这些错误出现在哪里(4756和10030)。请指正并解释。

 
damirqa:

你好!我从https://www.mql5.com/ru/articles/100 开始学习MQL5。我已经启动了代码,收到了错误4756。所以我想我会从最简单的开始(警报/打印...)。其中一个最重要的功能是OrderSend。我开始在论坛/文档中搜索如何使用OrderSend。我发现这篇文章https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions,并 找到了开设买入头寸的代码。我得到了错误4756和检索码10030。我理解10030--它是OrderSend属性,但我没有理解这个属性应该如何使用(我看了别人的代码),它主要用于什么。然后我打开https://www.mql5.com/ru/docs/trading/ordersend, 复制了代码,运行它,工作正常。
但我仍然不明白为什么会出现错误4756,以及如何摆脱它,还有10030。

看了一下之间的代码

和这个。

在我看来它们几乎是一样的,我没有看到这些错误出现在哪里(4756和10030)。请指正并解释


使用 CTrade 交易类 - 这样可以保证你尽可能少犯错误。

发送交易指令打开买入的例子。

//+------------------------------------------------------------------+
//|                                                     Open Buy.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   m_trade.Buy(1.0); // open Buy position, volume 1.0 lot
  }
//+------------------------------------------------------------------+
附加的文件:
Open_Buy.mq5  2 kb
 
Vladimir Karputov:

使用CTrade交易类,确保你尽可能少犯错误。

发送交易指令开启买入的例子。


CTrade--它是一个通用类吗?也就是说,它可以取代任何其他代码?

 
damirqa:

CTrade--它是一个通用类吗?那么,是否有可能用它来替换其他的代码?


CTrade 是在标准库->贸易类->CTrade 中随终端提供的。

 
damirqa:

在我看来它们几乎是一样的,我没有看到这些错误出现在哪里(4756和10030)。请指正并解释

https://www.mql5.com/ru/search#!keyword=Unsupported%20filling%20mode

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 

来自kodobase的一个例子


有几种方法可以将代码输入ME

  1. 直接从ME加载。这对一些人来说可能很方便。但对我来说,完全没有。
  2. 将文件下载到磁盘,复制到MQL5文件夹,并在ME中打开它。大多数时候,我使用这种不方便的方式。
  3. 按 "查看 "按钮并复制(复制--CTRL+A和CTRL+C)并将代码粘贴到ME(CTRL+V)。最快和最方便的方式。
将 "复制 "按钮做成截图中的样子,是否合理?

 

在MT5测试器中,"输入字段 "对象OBJ_EDIT不允许编辑其中的一个值它是这样设计的还是一个错误?

在终端和MT4测试器中,它是可编辑的,但在MT5测试器中,它不是,在创建对象 时以编程方式输入的值消失了。