Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1147

 
Vladimir Karputov:

Aí está:


Outra coisa importante é como se actualizam os preços (e será que os actualizam mesmo?). A propagação - como é que a obtém?

    double point, price, ask, bid;
    ulong digits;

    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, ask)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, bid)) return(true);
    if(!SymbolInfoInteger(symbol, SYMBOL_DIGITS, digits)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_POINT, point)) return(true);
SymbolInfoInteger(symbol, SYMBOL_SPREAD);
 
Mikhail Sergeev:

Por isso, para referência futura:

1.SymbolInfoDouble

Se esta função for usada para obter informações sobre o último tick, é melhor usarSymbolInfoTick(). É bem possível que não tenha havido qualquer cotação para este símbolo desde o momento em que o terminal se ligou à conta de negociação. Neste caso, o valor solicitado será indefinido.

2. É melhor tomar o spread como uma diferença entre o Ask e o Bid.

3. Nível de congelamento: procure o valor máximode três (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL e spread calculado) e multiplique por três e ficará satisfeito.

O ponto 3 foi deduzido na prática ao trabalhar com o KodoBase (e o validador tanto no KodoBase como no Market é o mesmo).
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Vladimir Karputov:

Por isso, para referência futura:

1.SymbolInfoDouble

Se esta função for usada para obter informações sobre o último tick, é melhor usarSymbolInfoTick(). É bem possível que não tenha havido qualquer cotação para este símbolo desde o momento em que o terminal se ligou à conta de negociação. Neste caso, o valor solicitado será indefinido.

2. É melhor tomar o spread como uma diferença entre o Ask e o Bid.

3. Nível de congelamento: procure o valor máximode três (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL e spread calculado) e multiplique por três e ficará satisfeito.

O ponto 3 foi deduzido na prática ao trabalhar com o KodoBase (e o validador tanto no KodoBase como no Market é o mesmo).

Muito obrigado! Vou agora fazer algumas alterações e experimentar.

 
Mikhail Sergeev:

Muito obrigado! Vou agora fazer as alterações e tentar.

Sim, o resultado será interessante.

 
Vladimir Karputov:

Sim, o resultado será interessante.

Problema resolvido! Acabou por ser muito simples, para eliminar uma encomenda é necessário preencher orequest.symbol

Não encontrei qualquer informação estruturada sobre quais os dados que devem ser necessariamente passados para solicitar, dependendo do tipo de operação comercial. E eu usei o exemplohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

Não está lá.


Verifiquei muitas variantes com congelação. No meu caso o tamanho único foi suficiente.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Торговля осуществляется посредством отправки с помощью функции OrderSend() приказов на открытие позиций, а также приказов на установку, модификацию и удаление отложенных ордеров. Каждый торговый приказ содержит указание на тип запрашиваемой торговой операции. Торговые операции описаны в перечислении ENUM_TRADE_REQUEST_ACTIONS...
 
Mikhail Sergeev:

Problema resolvido! Acabou por ser muito simples, para eliminar uma encomenda é necessário preencher orequest.symbol.

Não encontrei nenhuma informação estruturada sobre quais os dados que devem ser passados para solicitar, dependendo do tipo de operação comercial. E eu usei o exemplo https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

Não está lá.


Verifiquei muitas variantes com congelação. No meu caso, o tamanho único foi suficiente.

Porque é que precisa de tais complicações? Utilizar a classe comercial CTrade.

 
Vladimir Karputov:

Porquê dar-se a esse trabalho todo? Utilizar a classe comercial CTrade.

Infelizmente, isto já existe desde o MT4. Foi mais fácil de adaptar.


Não sei quanto ao CTrade, mas parece que em todos os lugares onde se tem de especificar um símbolo, ele está presente nos parâmetros passados ao método. E não está presente no método OrderDelete(const ulong ticket), por isso não vai funcionar. Devemos preencher o request.symbol em algum lugar de antemão.

 
Mikhail Sergeev:

Infelizmente, isto já existe desde o MT4. Era mais fácil de adaptar.


Sobre o CTrade - Não o compreendi, mas parece que em todo o lado onde é necessário especificar um símbolo, ele está nos parâmetros passados para o método. E não está presente no método OrderDelete(const ulong ticket), por isso não vai funcionar. Temos de preencher o request.symbol em algum lugar.

O que não vai funcionar? Esta é uma classe comercial: define, modifica e elimina PEDIDOS REMOTOS, e abre, modifica e fecha PONTOS.

Absolutamente tudo funciona. E tudo é escrito numa só linha por qualquer comando comercial.


CTrade

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

O que não funcionará então? É uma classe comercial: define, modifica e elimina PEDIDOS REMOTADOS, abre, modifica e fecha PONTOS.

Absolutamente tudo funciona. E tudo é escrito numa só linha por qualquer comando comercial.


CTrade

//+------------------------------------------------------------------+
//| Delete specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(const ulong ticket)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.magic     =m_magic;
   m_request.order     =ticket;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Por isso não entendo em que ponto o m_request.symbol é preenchido

Seja como for, problema resolvido. Muito obrigado mais uma vez pela vossa ajuda!

 
Mikhail Sergeev:

Por isso não entendo em que ponto o m_request.symbol é preenchido

Seja como for, problema resolvido. Muito obrigado mais uma vez pela vossa ajuda!

Leve um depurador atravésdo CTrade e verá para onde foi o símbolo :)