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

 
MakarFX #:

Sí, has hecho un lío)

Ahora, en cada carpeta, una por una, cambie el nombre de la carpeta Expertos por _Expertos y el de la carpeta Indicadores por _Indicadores.

Renombrado en una carpeta - iniciar el terminal, si no ayudó - volver a cambiar el nombre y pasar a la siguiente carpeta.

P.D. La primera vez que el terminal arranque será un poco más largo de lo habitual.

¡Makar!

El suceso ha ocurrido hoy. Por lo tanto, no he tocado las carpetas con fechas antiguas.

Y hacer cambios en las carpetas frescas no cambió nada.

Así que arrastré los perfiles, indicadores y Asesores Expertos a otra terminal. Por fin he acabado con el desorden.

Ahora todo funciona. Sin embargo, lo tengo en un terminal diferente. Pero lo importante es el resultado: puedes trabajar.

Borraré ese terminal más tarde.

Creo que tu sugerencia de encontrar los indicadores y perfiles a través del editor es perfecta.

Sobre todo para los "tontos" de la programación, como yo.

Muchas gracias por su ayuda y su capacidad de respuesta.

Buena suerte.

¡Saludos!

 

Hola a todos. Apenas empiezo a entender todo sobre esto para decir de una vez que estoy más verde que el verde. Necesito un script o código que vigile en los próximos 10 puntos de subida y bajada y que no se abra la Compra y la Venta.

1.....Por ejemplo una garrapata vino - el código mira si en los próximos 10 puntos hacia abajo y (o) hacia arriba la orden no es, a continuación, establecer una orden de venta. si sí, entonces nada. También con una orden de compra

Este es unesquema de ejemploen elGenerador de EAs de Forex



Archivos adjuntos:
hktrabmcw4.jpg  222 kb
 
valentin104 un script o código que vigile en los próximos 10 puntos de subida y bajada y que no se abra la Compra y la Venta.

1.....Por ejemplo una garrapata vino - el código mira si en los próximos 10 puntos hacia abajo y (o) hacia arriba la orden no es, a continuación, establecer una orden de venta. si sí, entonces nada. También con una orden de compra

Este es unesquema de ejemploen elGenerador de EAs de Forex



Este plan es una idiotez.

 
Artyom Trishkin #:

Es un esquema idiota.

No, se ve así sin if y else). Pero no es eso lo que quería decir.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

El script da tick_s =1.0 tick_vflue =80.32786885245902 y en el búho tick_value =80.37529660186777 tick_size =1e-05

El marcador se rompe.




 
Artyom Trishkin #:

Es un esquema idiota.

No has entendido nada.

valentin104 #:

Hola a todos. Estoy empezando a entenderlo todo, así que sólo diré lo siguiente Soy más verde que el verde.

 
Galim_V #:

No, se ve así sin if y else). Pero no es eso lo que quería decir.

El script da tick_s =1.0 tick_vflue =80.32786885245902 y en el búho tick_value =80.37529660186777 tick_size =1e-05

El tick_value está roto.




tick_size =1e-05

Normalizar DoubleToString( tick_size , 2)

 
MakarFX #:

tick_size =1e-05

Normalizar DoubleToString( tick_size , 2)

Ceros solo. Ni siquiera una centésima.

//+------------------------------------------------------------------+
//|                                                     MAX+risk.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
enum Mani
  {
   free_margin,
   balans
  };
input Mani risk_mani;
input double Lot=0.0;
input int max_risk =0; //В% от свободных средсв или...
input int stoploss=300;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double Lots=0;
   int    Max_Risk=0;

   printf("ACCOUNT_MARGIN_FREE =  %G",AccountInfoDouble(ACCOUNT_MARGIN_FREE)); //Размер свободных средств на счете  в валюте
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE)); //Баланс счета в валюте депозита
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));    // Уровень залоговых средств в %

   double freemani=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   double balance=AccountInfoDouble(ACCOUNT_BALANCE);
   double tick_s =  SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)/_Point;  //Минимальное изменение цены
   double tick_value= SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);//Размер минимального изменения цены инструмента в валюте депозита
   if(risk_mani==balans)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= balance*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_BALANCE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/balance*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   if(risk_mani==free_margin)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= freemani*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_MARGIN_FREE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/freemani*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   Print("Lots =",Lots," Max_Risk =",Max_Risk," tick_s =",tick_s," tick_vflue =",tick_value);
  }
//+------------------------------------------------------------------+

Aquí funciona. En el tablero, variables en lugar de funciones. Pero ya desde el principio la función genera tonterías en OnTick().

 
Galim_V #:

Todos los ceros. No pude encontrar ni una centésima.

Aquí funciona. En owl, variables en lugar de funciones. Pero la función ya genera tonterías en OnTick().

Lo encontré. Lo siento. El valor de tick_size =1e-05 es 0.00001 y es correcto.

 
valentin104 #:

Te diré de entrada que soy más verde que el verde. No sé cuánto duraré.


Con este enfoque para aprender a programar, es mejor contratar a un programador y no tener que preocuparse por ello.

 

Tenemos un indicador ZigZag estándar, pero su estilo de dibujo de líneas es DRAW_SECTION, es decir,la mayor parte de los valores en el buffer del indicador es igual a EMPTY_VALUE y sólo a veces aparecen valores diferentes (puntos de ruptura) que sirven de base para el dibujo de líneas. Creo que todo el mundo ha visto este indicador y/o su código al menos una vez en su vida.

La tarea consiste en obtener el valor que corresponde al último punto de ruptura, es decir, el último valor del búfer del indicador, que no es igual a EMPTY_VALUE.

Atención: ¿Es correcto hacer un bucle a través de los valores de la memoria intermedia de los indicadores, partiendo de un desplazamiento cero hacia abajo, llamando a la función iCustom en cada iteración, hasta que el valor obtenido sea diferente de EMPTY_VALUE?

¿O hay alguna forma más fácil de obtener este valor?

Razón de la queja: