Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1147

 
Vladimir Karputov:

Ahí lo tienes:


Otra cosa importante es cómo se actualizan los precios (y si se actualizan). El diferencial: ¿cómo se consigue?

    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:

Así que, para futuras referencias:

1.SymbolInfoDouble

Si esta función se utiliza para obtener información sobre el último tick, es mejor utilizarSymbolInfoTick(). Es muy posible que no haya habido ninguna cotización para este símbolo desde el momento en que el terminal se conectó a la cuenta de operaciones. En este caso, el valor solicitado será indefinido.

2. Es mejor tomar el spread como una diferencia entre el Ask y el Bid.

3. Nivel de congelación: busque el valor máximode entre tres (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL y spread calculado) y multiplique por tres y estará contento.

El punto 3 se dedujo en la práctica al trabajar con KodoBase (y el validador tanto en KodoBase como en Market es el mismo).
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Vladimir Karputov:

Así que, para futuras referencias:

1.SymbolInfoDouble

Si esta función se utiliza para obtener información sobre el último tick, es mejor utilizarSymbolInfoTick(). Es muy posible que no haya habido ninguna cotización para este símbolo desde el momento en que el terminal se conectó a la cuenta de operaciones. En este caso, el valor solicitado será indefinido.

2. Es mejor tomar el spread como una diferencia entre el Ask y el Bid.

3. Nivel de congelación: busque el valor máximode entre tres (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL y spread calculado) y multiplique por tres y estará contento.

El punto 3 se dedujo en la práctica al trabajar con KodoBase (y el validador tanto en KodoBase como en Market es el mismo).

¡Muchas gracias! Ahora haré algunos cambios y lo probaré.

 
Mikhail Sergeev:

¡Muchas gracias! Haré los cambios ahora y lo probaré.

Sí, el resultado será interesante.

 
Vladimir Karputov:

Sí, el resultado será interesante.

¡Problema resuelto! Resultó ser muy sencillo, para eliminar una orden es necesario rellenarrequest.symbol

No he encontrado ninguna información estructurada sobre los datos que deben pasarse necesariamente a la solicitud en función del tipo de operación comercial. Y he utilizado el ejemplohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

No está ahí.


He comprobado muchas variantes con la congelación. En mi caso la talla única fue suficiente.

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

¡Problema resuelto! Resultó ser muy sencillo, para eliminar una orden es necesario rellenarrequest.symbol.

No he encontrado ninguna información estructurada sobre los datos que deben pasarse a la solicitud en función del tipo de operación comercial. Y he utilizado el ejemplo https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

No está ahí.


He comprobado muchas variantes con la congelación. En mi caso, la talla única fue suficiente.

¿Por qué necesitas esas complicaciones? Utilice la clase de comercio CTrade.

 
Vladimir Karputov:

¿Por qué tomarse tantas molestias? Utiliza la clase de negociación CTrade.

Desgraciadamente, esto ha existido desde MT4. Era más fácil adaptarlo.


No sé en el caso de CTrade, pero parece que en todos los lugares donde hay que especificar un símbolo, éste está presente en los parámetros que se pasan al método. Y no está presente en el método OrderDelete(const ulong ticket), por lo que no funcionará. Deberíamos rellenar el request.symbol en algún lugar de antemano.

 
Mikhail Sergeev:

Desgraciadamente, esto ha existido desde MT4. Era más fácil adaptarse.


Acerca de CTrade - No lo entendí, pero parece que en todas partes donde se necesita especificar un símbolo, es en los parámetros pasados al método. Y no está presente en el método OrderDelete(const ulong ticket), por lo que no funcionará. Tenemos que rellenar el request.symbol en alguna parte.

¿Qué es lo que no funciona? Se trata de una clase de comercio: establece, modifica y borra las ORDENES REMOTIVAS, y abre, modifica y cierra los PODERES.

Absolutamente todo funciona. Y todo se escribe en una línea por cualquier comando comercial.


CTrade

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

¿Qué no funcionará entonces? Es una clase de comercio: establece, modifica y borra las ORDENES REMOTIVAS, abre, modifica y cierra los PODERES.

Absolutamente todo funciona. Y todo se escribe en una línea por cualquier 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));
  }

Así que no entiendo en qué momento se llena m_request.symbol

De todos modos, problema resuelto. Muchas gracias de nuevo por su ayuda.

 
Mikhail Sergeev:

Así que no entiendo en qué momento se rellena m_request.symbol

De todos modos, problema resuelto. Muchas gracias de nuevo por su ayuda.

Pasa un depurador porCTrade y verás dónde ha ido el símbolo :)