Erros, bugs, perguntas - página 2100

 
Slava:

Sentiu a diferença entre um comando síncrono e um assíncrono.

Poderia fornecer uma lista de funções assíncronas.

Se bem entendi, as funções Objecto e Gráfico (que outros?) são todas assíncronas. Então não é bem claro porque é que o ChartGet corre mais depressa do que o ChartXY?

 
Slava:

Sentiu a diferença entre um comando síncrono e um assíncrono.

Sim...
Mas as observações mostram que estas funções são bastante sincronizadas na sua assíncronia. :)
Ok, formularei a minha pergunta de forma diferente para os desenvolvedores: Existe uma oportunidade (ou desejo) de mudar estas funções assíncronas para funções síncronas?
 
fxsaber:

Poderia fornecer uma lista de funções assíncronas.

Se bem entendi, as funções Objecto e Gráfico (que outros?) são todas assíncronas. Então não é bem claro porque é que o ChartGet corre mais depressa do que o ChartXY?

São também terrivelmente lentos, só que o objectivo do meu algoritmo "rápido" é calcular uma oportunidade de não chamar funções de gráficos e passar sem elas. E assim que você "agarra" o gráfico no meu exemplo e começa a movê-lo para a esquerda - direita, toda a velocidade é perdida porque as funções do gráfico começam a ser aplicadas devido à ocorrência do evento
CHARTEVENT_CHART_CHANGE
 

Olá, comecei a estudar a MQL5 a partir dehttps://www.mql5.com/ru/articles/100. Lancei o código e recebi o erro 4756. O erro não melhorou depois de procurar na documentação. Ok, pensei em começar com funções simples (Alerta/Impressão...). Uma das funções mais importantes é a de OrderSend. Comecei a pesquisar através do fórum/documentação sobre como utilizar o OrderSend. Encontrei este artigohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions e encontrei o código para abrir uma posição de compra. Recebi o erro 4756 e o retcode 10030. Compreendi que 10030 - é a propriedade OrderSend, mas não compreendi como esta propriedade deve ser usada (olhei para o código de outra pessoa) e para que é usada principalmente. Depois abrihttps://www.mql5.com/ru/docs/trading/ordersend, copiei o código, executei-o, funcionou bem.
Mas ainda não compreendo por que razão aparece o erro 4756 e como se livrar dele, bem como o 10030.

Veja-se o código entre

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 este aqui.

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

Parecem-me quase idênticos, não vejo onde aparecem estes erros (4756 e 10030). Por favor, aponte o dedo e explique.

 
damirqa:

Olá! comecei a estudar a MQL5 a partir dehttps://www.mql5.com/ru/articles/100. Lancei o código e recebi o erro 4756. Por isso pensei em começar pela mais simples (Alerta/Impressão...). Uma das funções mais importantes é a de OrderSend. Comecei a pesquisar através do fórum/documentação sobre como utilizar o OrderSend. Encontrei este artigohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions e encontrei o código para abrir uma posição de compra. Recebi o erro 4756 e o retcode 10030. Compreendi que 10030 - é a propriedade OrderSend, mas não compreendi como esta propriedade deve ser usada (olhei para o código de outra pessoa) e para que é usada principalmente. Depois abrihttps://www.mql5.com/ru/docs/trading/ordersend, copiei o código, executei-o, funcionou bem.
Mas ainda não compreendo por que razão aparece o erro 4756 e como se livrar dele, bem como o 10030.

Veja-se o código entre

e este aqui.

Parecem-me quase idênticos, não vejo onde aparecem estes erros (4756 e 10030). Por favor, aponte o dedo e explique


Utilize a classe de comércio CTrade - dessa forma é garantido que comete o menor número de erros possível.

Exemplo de envio de uma ordem comercial para abrir a 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
  }
//+------------------------------------------------------------------+
Arquivos anexados:
Open_Buy.mq5  2 kb
 
Vladimir Karputov:

Utilize a classe de comércio CTrade para garantir que comete o menor número de erros possível.

Exemplo de envio de uma ordem comercial para abrir uma Compra:


CTrade - é uma classe universal? Ou seja, pode substituir qualquer outro código?

 
damirqa:

CTrade - é uma classe universal? Então, é possível substituir qualquer outro código por ele?


ACTrade é fornecida com o terminal naBiblioteca Standard->Classes de Comércio->CTrade.

 
damirqa:

Parecem-me quase idênticos, não vejo onde aparecem estes erros (4756 e 10030). Por favor, aponte o dedo e explique

https://www.mql5.com/ru/search#!keyword=Não apoiado%20preenchimento%20mode

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

Um exemplo da kodobase


Há várias maneiras de entrar em ME

  1. Carregue-o directamente de ME. Isto é provavelmente útil para algumas pessoas. Mas para mim, de modo algum.
  2. Descarregue o ficheiro para o disco, copie-o para a pasta MQL5 e abra-o em ME. Na maioria das vezes utilizo esta forma inconveniente.
  3. Pressionar o botão "view" e copiar (copiar - CTRL+A e CTRL+C) e colar código em ME (CTRL+V). A forma mais rápida e mais conveniente.
É razoável fazer o botão "copiar" como mostrado na imagem do ecrã?

 

No testador MT5, o objecto "Campo de entrada" OBJ_EDIT não permite editar um valor no mesmo. Está concebido dessa forma ou é um insecto?

Nos terminais e no testador MT4 é editável, mas no testador MT5 não é, o valor introduzido programmaticamente quando se cria o objecto desaparece.

Razão: