Errori, bug, domande - pagina 2100

 
Slava:

Avete percepito la differenza tra un comando sincrono e uno asincrono.

Potrebbe fornire una lista di funzioni asincrone.

Se ho capito bene, le funzioni Object e Chart (quali altre?) sono tutte asincrone. Allora non è molto chiaro perché ChartGet gira più velocemente di ChartXY?

 
Slava:

Avete percepito la differenza tra un comando sincrono e un comando asincrono.

Già...
Ma le osservazioni mostrano che queste funzioni sono abbastanza sincrone nella loro asincronia. :)
Ok, formulerò la mia domanda in modo diverso per gli sviluppatori: c'è la possibilità (o il desiderio) di cambiare queste funzioni asincrone in sincrone?
 
fxsaber:

Potrebbe fornire una lista di funzioni asincrone.

Se ho capito bene, le funzioni Object e Chart (quali altre?) sono tutte asincrone. Allora non è del tutto chiaro perché ChartGet gira più velocemente di ChartXY?

Sono anche terribilmente lenti, è solo che il punto del mio algoritmo "veloce" è quello di calcolare un'opportunità per non chiamare le funzioni del grafico e farne a meno. E non appena si "afferra" il grafico nel mio esempio e si inizia a muoverlo a sinistra e a destra, tutta la velocità viene persa perché le funzioni del grafico iniziano ad essere applicate a causa del verificarsi dell'evento
CHARTEVENT_CHART_CHANGE
 

Ciao, ho iniziato a studiare MQL5 dahttps://www.mql5.com/ru/articles/100. Ho lanciato il codice e ho ricevuto l'errore 4756. L'errore non è migliorato dopo aver guardato la documentazione. Ok, ho pensato di iniziare con funzioni semplici (Alert/Print...). Una delle funzioni più importanti è OrderSend. Ho iniziato a cercare nel forum/documentazione su come usare OrderSend. Ho trovato questo articolohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions e ho trovato il codice per aprire una posizione Buy. Ho ottenuto l'errore 4756 e il retcode 10030. Ho capito che 10030 - è la proprietà OrderSend, ma non ho capito come dovrebbe essere usata questa proprietà (ho guardato il codice di qualcun altro) e a cosa serve principalmente. Poi ho apertohttps://www.mql5.com/ru/docs/trading/ordersend, ho copiato il codice, l'ho eseguito e ha funzionato bene.
Ma non ho ancora capito perché appare l'errore 4756 e come liberarmene, così come il 10030.

Guardato il codice tra

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);
   }

e questo.

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; 
  } 

Mi sembrano quasi identici, non vedo dove appaiono questi errori (4756 e 10030). Per favore, punta il dito e spiega.

 
damirqa:

Ciao, ho iniziato a studiare MQL5 dahttps://www.mql5.com/ru/articles/100. Ho lanciato il codice e ho ricevuto l'errore 4756. Così ho pensato di cominciare dal più semplice (Allarme/Stampa...). Una delle funzioni più importanti è OrderSend. Ho iniziato a cercare nel forum/documentazione su come usare OrderSend. Ho trovato questo articolohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions e ho trovato il codice per aprire una posizione Buy. Ho ottenuto l'errore 4756 e il retcode 10030. Ho capito che 10030 - è la proprietà OrderSend, ma non ho capito come dovrebbe essere usata questa proprietà (ho guardato il codice di qualcun altro) e a cosa serve principalmente. Poi ho apertohttps://www.mql5.com/ru/docs/trading/ordersend, ho copiato il codice, l'ho lanciato, tutto bene, ha funzionato.
Ma non ho ancora capito perché appare l'errore 4756 e come liberarmene, così come il 10030.

Guardato il codice tra

e questo.

Mi sembrano quasi identici, non vedo dove appaiono questi errori (4756 e 10030). Si prega di puntare il dito e spiegare


Usate la classe di trading CTrade - in questo modo avrete la garanzia di fare meno errori possibili.

Esempio di invio di un ordine di compravendita per aprire Buy:

//+------------------------------------------------------------------+
//|                                                     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
  }
//+------------------------------------------------------------------+
File:
Open_Buy.mq5  2 kb
 
Vladimir Karputov:

Usa la classe di trading di CTrade per assicurarti di fare meno errori possibili.

Esempio di invio di un ordine di compravendita per aprire un Buy:


CTrade - è una classe universale? Cioè, può sostituire qualsiasi altro codice?

 
damirqa:

CTrade - è una classe universale? Quindi, è possibile sostituire qualsiasi altro codice con questo?


CTrade è fornito con il terminale nellaLibreria Standard->Trade Classes->CTrade.

 
damirqa:

Mi sembrano quasi identici, non vedo dove appaiono questi errori (4756 e 10030). Si prega di puntare il dito e spiegare

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

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

Un esempio da kodobase


Ci sono diversi modi per portare il codice in ME

  1. Caricatelo direttamente da ME. Questo è probabilmente comodo per alcune persone. Ma per me, per niente.
  2. Scarica il file sul disco, copialo nella cartella MQL5 e aprilo in ME. Il più delle volte uso questo modo scomodo.
  3. Premere il pulsante "vista" e copiare (copiare - CTRL+A e CTRL+C) e copiare il codice in ME (CTRL+V). Il modo più veloce e conveniente.
È ragionevole fare il pulsante "copia" come mostrato nello screenshot?

 

Nel tester MT5, l'oggetto "Campo di input" OBJ_EDIT non permette di modificare un valore in esso. È stato progettato così o è un bug?

Nei terminali e nel tester MT4 è modificabile, ma nel tester MT5 non lo è, il valore inserito programmaticamente quando si crea l'oggetto scompare.

Motivazione: