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

 
freemovpalm #:

Hola a todos, podéis ayudarme a añadir la martingala al EA, necesito que después de activar el stoploss (obtener la pérdida) y en la nueva señal (el búho funciona por el indicador) entrar con el lote aumentado (multiplicado por el coeff). ¿He entendido bien, primero tengo que escribir el evento - evento de bucle de parada (no sé dónde y cómo), y hacer los cálculos con lotes allí (necesito variables adicionales)?

Por ejemplo, añada una variable - contador de operaciones perdedoras seguidas. En cada operación perdedora - se incrementa en 1, en cada operación rentable - se restablece a 0.

Y a partir de este contador establecer el lote (por ejemplo - multiplicando el lote mínimo por 2 en proporción a este contador).

Pero la martingala no hará rentable una estrategia perdedora.

 
JRandomTrader #:

Por ejemplo, añada una variable - contador de operaciones perdedoras seguidas. En cada operación perdedora - se incrementa en 1, en cada operación rentable - se pone a 0.

Y a partir de este contador fijar el lote (por ejemplo, multiplicar el lote mínimo por 2 en la medida de este contador).

Pero la martingala no hará rentable una estrategia perdedora.

Gracias, la estrategia tiene una media de 2 y un máximo de 4 pérdidas seguidas, por eso quería un martin. Por cierto ¿alguien tiene un ejemplo de tal contador o búho que funcione según el mismo principio que he descrito? Podría copiar las líneas necesarias desde allí.

 
string Button_TP = "Panel.String1.Button3";

Print(ObjectGetInteger(0, "Panel.String1.Button3", OBJPROP_STATE));
Print(ObjectGetInteger(0, Button_TP, OBJPROP_STATE));

¿Puedes decirme por qué la primera opción funciona y la segunda no? ¿No se puede establecer el nombre del botón en una variable?

 

¿Cómo puede el probador automatizar el paso de varios pares?
Por ejemplo, tengo que pasar por 20 pares. Ahora reinicio el probador para cada par.
No sé cómo hacer una variable.

¿Hay alguna solución?

 
Evgeny Dyuka #:

¿Cómo puede el probador automatizar el paso de varios pares?
Por ejemplo, tengo que pasar por 20 pares. Ahora reinicio el probador para cada par.
No sé cómo hacer una variable.

¿Tiene alguna solución?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

¿Cómo recibir los pares seleccionados para la revisión del mercado en el Probador de Estrategias?

Alexey Viktorov, 2022.04.14 17:11

No puede utilizar el terminal MarketWatch en el Probador de Estrategias. El comprobador genera su propioMarketWatch a partir de los símbolos cuyas propiedades se han solicitado al programa. Por lo tanto, para formar unMarketWatch, es necesario solicitar cualquier propiedad del símbolo requerido.

sinput  string  Symb  = "GBPUSD,GBPAUD,GBPCAD,GBPJPY,EURUSD,EURGBP,EURAUD,EURCAD,EURJPY,AUDUSD,AUDNZD,AUDCAD,AUDJPY,NZDUSD,NZDCAD,USDCAD,USDJPY"
string s_arr[];
int OnInit()
{
  int i = 0, symbPos = 0;
  if(StringSplit(Symb, ',', s_arr) <= 0)
   {
    Print(__FUNCTION__ + " Error converting !");
    return(INIT_FAILED);
   }
  while(symbPos >= 0  && !IsStopped())
   {
    if(!SymbolInfoInteger(s_arr[i], SYMBOL_SELECT) || !SymbolInfoInteger(s_arr[i], SYMBOL_VISIBLE))
      SymbolSelect(s_arr[i], true);
    double price = SymbolInfoDouble(s_arr[i], SYMBOL_ASK);
    i++;
   }
 return(INIT_SUCCEEDED);
}/*******************************************************************/

Espero no haber cometido errores al sacar el código de mi programa...


 
Evgeny Dyuka #:

¿Cómo puede el probador automatizar el paso de varios pares?
Por ejemplo, tengo que pasar por 20 pares. Ahora reinicio el probador para cada par.
No sé cómo hacer una variable.

¿Hay alguna solución?

Si definimos un par por un parámetro de EA que puede cambiar durante la optimización, entonces simplemente ejecutamos la optimización por este parámetro para iniciar una pasada por varios pares.
Este parámetro no puede ser de tipo 'string', pero puede ser de tipo 'int' o 'enum'.
Con este parámetro, al inicializar el EA, asignamos a otra variable de cadena el nombre del símbolo deseado que corresponde al valor del parámetro.
En el código del EA, tendrá que sustituir Symbol() o _Symbol por su propia variable con el nombre del par.

¿Entiendes el principio o necesitas un ejemplo de código?

 
Evgeny Dyuka #:

¿Cómo puede el probador automatizar el paso de varios pares?
Por ejemplo, tengo que pasar por 20 pares. Ahora reinicio el probador para cada par.
No sé cómo hacer una variable.

¿Hay alguna solución?

Sabermultitester es una solución, puedes configurar los pases allí por herramientas y ajustes.

Библиотеки: MultiTester
Библиотеки: MultiTester
  • 2019.07.19
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MultiTester
 
Yuriy Bykov #:

Si un par está definido por un parámetro de EA que puede cambiarse durante la optimización, entonces para ejecutar un pase multipar, simplemente ejecutamos la optimización por este parámetro.
Este parámetro no puede ser de tipo 'string', pero puede ser de tipo 'int' o 'enum'.
Con este parámetro, al inicializar el EA, asignamos a otra variable de cadena el nombre del símbolo deseado que corresponde al valor del parámetro.
En el código del EA, tendrá que sustituir Symbol() o _Symbol por su propia variable con el nombre del par.

¿Entiendes el principio o necesitas un ejemplo de código?

¡Genial! No se me ocurrió pasar por el optimizador.

 
Yuriy Bykov #:

Si un par está definido por un parámetro de EA que puede cambiarse durante la optimización, entonces para ejecutar un pase multipar, simplemente ejecutamos la optimización por este parámetro.
Este parámetro no puede ser de tipo 'string', pero puede ser de tipo 'int' o 'enum'.
Con este parámetro, al inicializar el EA, asignamos a otra variable de cadena el nombre del símbolo deseado que corresponde al valor del parámetro.
En el código de EA, dondequiera que se utilice Symbol() o _Symbol, tendremos que sustituirlo por nuestra propia variable con el nombre del par.

¿Está claro el principio, o necesitas un código de ejemplo?

¿Qué pasa con OnTick() ?
Puedo sustituir mi propio símbolo en todas partes, peroOnTick() siempre se tomará delsímbolo en el que se está ejecutando el probador.
De la ayuda: "
El evento OnTick() se genera . cuando se reciba un nuevo tick para un símbolo, al gráfico del cual está unido el Asesor Experto".

¿No puede haber conflicto aquí? Por ejemplo, el mercado de divisas está parado durante el fin de semana, pero las criptomonedas no.

 
Sí, eso es un problema. No he trabajado con criptomonedas, así que no he pensado en la diferencia de los períodos de negociación permitidos. Pero es posible poner alguna criptomoneda como símbolo de trabajo en el probador, y añadir (o dejar en su lugar) la comprobación de que el comercio está permitido en el Asesor Experto. Después, el principal problema es la incoherencia de las horas de llegada de los ticks en los distintos instrumentos. Aquí podemos intentar elegir el instrumento con más ticks para reducir el error de los resultados de las pruebas. En los Asesores Expertos multidivisa que trabajan adjuntos a un gráfico, la situación será la misma - OnTick() se activa sólo para el símbolo principal. Para rastrear correctamente el evento de una nueva barra que viene para diferentes símbolos en este caso utilizo mi biblioteca New Bar Event.
New Bar Event
New Bar Event
  • www.mql5.com
Позволяет определить наступление события нового бара в мультивалютном советнике. В вызове OnTick() можно многократно проверять, наступило ли на этом тике событие для нужного инструмента (symbol) и периода графика (timeframe).