Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 996

 
Alexey Viktorov:


Lo que intenta imprimir no es correcto. La forma correcta es esta.

Este es el desglose:

42 es un identificador numérico: ACCOUNT_MARGIN_FREE

es decir, podemos obtener el margen libre a partir de la constante

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

O por su identificador numérico:

AccountInfoDouble(42)

Gracias.

 
killer67:

Este es el desglose:

42 es un identificador numérico: ACCOUNT_MARGIN_FREE

es decir, podemos obtener el margen libre a partir de la constante

O por su identificador numérico:

Gracias.

La primera versión de la escritura es más informativa.

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Probablemente sea una pregunta tonta, pero ¿se pueden utilizar estas funciones en MQL4? Es que las herramientas MQL4 son más limitadas.

Cómo obtener los datos en MQL4:

SIMBOLO_SESION_DEALS

Número de operaciones en la sesión actual

SIMBOLO_SESIÓN_COMPRA_ÓRDENES

Número total de órdenes de compra en este momento

largo

SÍMBOLO_SESIÓN_ÓRDENES_DE_VENTA

Número total de órdenes de venta en este momento

largo

VOLUMEN_SÍMBOLO

Volumen - Volumen de la última operación

largo

SYMBOL_VOLUMEHIGH

Volumen máximo del día

largo

SYMBOL_VOLUMELOW

Volumen mínimo del día

SYMBOLO_BID

Oferta - mejor oferta

doble

SYMBOL_BIDHIGH

Oferta máxima del día

doble

SYMBOL_BIDLOW

Oferta mínima del día

doble

SYMBOL_ASK

Pedir - mejor oferta

doble

SYMBOL_ASKHIGH

Máximo Pedir para el día

doble

SYMBOL_ASKLOW

Pedido mínimo para el día

VOLUMEN_SESIÓN_SÍMBOLO

Volumen total de operaciones en la sesión actual

doble

SYMBOL_SESSION_TURNOVER

Volumen de negocios total en la sesión actual

doble

SIMBOLO_SESIÓN_INTERÉS

Volumen total de posiciones abiertas

doble

SYMBOL_SESSION_BUY_ORDERS_VOLUME

Volumen total de órdenes de compra en este momento

doble

VOLUMEN_SESIÓN_DE_ÓRDENES_DE_VENTA_DE_SÍMBOLO

Volumen total de órdenes de venta en este momento

doble

SYMBOL_SESSION_OPEN

Precio de apertura de la sesión

doble

SYMBOL_SESSION_CLOSE

Precio cerrado

doble


Es un tesoro de datos útiles de una sola vez. La única cuestión es cómo hacerlo en MQL4. Dado que MQL5 tiene una funcionalidad más amplia, alguien puede preguntar, por qué no estoy estudiando MQL5. Es muy sencillo. No todos los corredores lo admiten. Por el momento, el MQL4 sigue siendo el más popular y demandado.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Probablemente sea una pregunta tonta, pero ¿se pueden utilizar estas funciones en MQL4? Es que las herramientas MQL4 son más limitadas.

Cómo obtener datos en MQL4:


Es un tesoro de datos útiles en un solo clic. Pero cómo hacerlo en MQL4. Este artículo también contendrá algunos consejos sobre cómo preparar MQL5 para estudiar en MQL5. Es muy sencillo. No todos los corredores lo admiten. Por el momento, el MQL4 sigue siendo el más popular y demandado.

En la documentación de mql4 están marcados todos los que no funcionan.

SYMBOLO_BID

Oferta - mejor oferta

doble

SYMBOL_BIDHIGH

No se admite

doble

SYMBOL_BIDLOW

No se admite

doble

SYMBOL_ASK

Pregunta - mejor oferta de compra

doble

SYMBOL_ASKHIGH

No se admite

doble

SYMBOL_ASKLOW

No se admite

doble

SÍMBOLO_ÚLTIMO

No se admite

doble

SÍMBOLO_LASTHIGH

No se admite

doble

SYMBOL_LASTLOW

No se admite

doble

PUNTO_SIMBOLO

Valor del punto único

doble

Esta no es la tabla completa. Hay más de uno en la documentación, sólo tienes que pulsar F1 y leerlo.

 
Alexey Viktorov:

En la documentación de mql4 están marcados todos los que no funcionan.

Gracias.
 
Ayuda para entender, no se puede establecer la pérdida de la parada correctamente.
Líneas de registro:
2019.11.16 12:38:40.660 2019.01.02:35:00 Para calcular los stops, toma el valor del broker = 30
2019.11.16 13:20:18.791 2019.01.02:03:00 Abrir una orden: Precio = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 falló la compra instantánea de 0.01 EURUSD a 1.14595 sl: 1.14565 tp: 1.14625 [stops no válidos]
2019.11.16 13:20:18.792 2019.01.02:03:00 CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [stops inválidos]


Ahora un poco de claridad para este caso:
En el código antes de abrir una orden calculo:
precio = mejor precio de mercado para comprar, dependiendo de la orden, en este caso una compra.
SL = calcular un stop derecho (el broker permite un stop de al menos 30 unidades desde el precio) es decir
precio (1,14595) - 0,0003 = SL (1,14565)
TP = calcular un stop derecho (el broker permite un stop de al menos 30 unidades desde el precio) es decir
precio (1,14595) + 0,0003 = TP (1,14625)
Bueno todo parece correcto, mantengo 30 puntos, pero me da un error de configuración.

Si establecemos SL = 0, entonces todo está bien, el orden y el TP están establecidos.
Me sale un error en el cálculo de la SL, ¿dónde está el error?
 
killer67:
Ayúdame a entenderlo, no consigo poner el stop loss correctamente.
Líneas de registro:
2019.11.16 12:38:40.660 2019.01.02 02:35:00 Para calcular los topes, tomar el valor del corredor = 30
2019.11.16 13:20:18.791 2019.01.02 02:03:00 Abrir una orden: Precio = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 falló la compra instantánea de 0,01 EURUSD a 1,14595 sl: 1,14565 tp: 1,14625 [Paradas no válidas].
2019.11.16 13:20:18.792 2019.01.02 02:03:00 CTrade::OrderSend: instant buy 0.01 EURUSD at 1.14595 sl: 1.14565 tp: 1.14625 [invalid stops].


Y ahora algo de claridad para este caso:
En el código calculo antes de abrir un pedido:
precio = mejor precio de mercado para comprar, según la orden, en este caso una compra.
SL = calcular un stop derecho (el broker permite stops a una distancia mínima de 30 unidades del precio), es decir
precio (1,14595) - 0,0003 = SL (1,14565)
TP = Calcular el stop correcto (el broker permite stops a una distancia mínima de 30 unidades del precio), es decir
precio (1,14595) + 0,0003 = TP (1,14625)
Bueno, todo parece estar bien, mantengo 30 pips, pero me sale un error de configuración.

Fijamos SL = 0, entonces todo está bien, el orden y el TP están fijados.
Resulta ser un error en el cálculo de la SL, ¿dónde está el error?

¿qué tipo de precio?

 
Iurii Tokman:

¿qué tipo de precio?

Al comprar Precio = SYMBOL_ASK

Precio de venta = SYMBOL_BID

 
killer67:

Al comprar Precio = SYMBOL_ASK

Cuando se vende Precio = SYMBOL_BID

¿Has probado a añadir una pasta para untar?

 
Iurii Tokman:

¿Has probado a añadir una pasta para untar?

Lo arreglé así:

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }
Razón de la queja: