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

 
Artyom Trishkin:

Gracias.

 
Buenas tardes! Por favor, ayúdenme con una pregunta sobre un simple bucle.
La esencia del bucle es que la variable I se incrementa en uno.
El valor se imprime.
El propio bucle:

for (int i=0; i<100000;i++)
{
Print("I =",i);
if(i>3000)
{
Print("I =",i);
romper;
}

La cuestión es que si el número en la condición if(i>3000) es aproximadamente mayor que 100 (en mi caso tres mil),
entonces la impresión produce valores diferentes. Constantemente.
Lo que quiero decir es que si el bucle tiene este aspecto
for (int i=0; i<100000;i++)
{
Print("I =",i);
si(i>100)
{
Print("I =",i);
romper;
}

La impresión en el comprobador muestra el valor I = 0, luego 1, luego 2, luego 3, luego 4,... y así hasta 100.
Pero si la condición es, por ejemplo, if(i>3000), Print mostrará el valor desde... Ni siquiera sé cómo expresarlo correctamente...
¡a partir de un solo número, por ejemplo, 2895 y luego añade uno!

Este es un ejemplo de cómo puede quedar:

si i > 100

100


si i >3000

3000



¿Cuál es el problema? Llevo todo el día luchando y no consigo resolverlo(((( ¡Ayuda, por favor!







 
eflaer:
¿Cuál es el problema? Llevo todo el día luchando y no consigo resolverlo(((( ¡Por favor, ayuda!

abrir el archivo de registro, hay un informe completo

 
Taras Slobodyanik:

abrir el archivo de registro, hay un informe completo

Gracias, he abierto el archivo de registro, efectivamente toda la cuenta atrás comienza con cero................ ¿por qué no está todo escrito en el registro?

Cómo hago para que todo aparezca en el registro, necesito toda la sincronización, estoy buscando un error en el algoritmo.

 
No es conveniente abrir un archivo de registro txt de más de 7GB cada vez.......
 
eflaer:

Gracias, he abierto el archivo de registro, efectivamente toda la cuenta atrás comienza con cero................ ¿por qué no está todo en el libro de registro?

Cómo hago para que todo aparezca en el registro, necesito toda la línea de tiempo, estoy buscando un error en el algoritmo.

Dado que el registro y el trabajo con objetos gráficos requiere muchos recursos (tiempo), MT está optimizado para ello, y puede "tragarse" parte del registro, pero ejecutar rápidamente el cuerpo del script en sí

añade Sleep(120) después de Print().


eflaer:
No es conveniente abrir cada vez el archivo de registro, txt que pesa 7+GB.......

Borra el archivo de registro periódicamente, se registra por fecha, si sólo escribes experimentos en él hoy, ¿para qué necesitas un archivo tan grande?

 
¡Muchas gracias! Realmente útil. Seguiré buscando el error...
 
Vitali Vakulin:
Hola.Me gustaría hacer un drawdown del 10% para que si tengo un drawdown por ejemplo, mi Expert Advisor no abra nuevas órdenes, sólo se ponga al día con las abiertas a TP y ya está, sólo se abrirán las de media. Esto me ayudará a no caer en un gran drawdown, si mis operaciones se realizan en varios pares. Entiendo la función, me gustaría poder implementarla.

Chicos, por favor, ayuda.

 

Buenas noches.

Primeros intentos de escribir un EA. ¿Pueden decirme por qué mi Asesor Experto sólo abre la compra? ¿Dónde está el error?

extern double volume     = 0.05;   // Volume
extern int    stopLoss   = 1;      // StopLoss
extern int    takeProfit = 3;      // TakeProfit
extern int    slippage  = 10;          // Slippage
extern int    Period_bars  = 100;    // Period
extern int    magic      = 321;    // Magic
extern int    ATR_Period = 50;      // ATR Period

datetime newCandle;
double ABS_High=0;
double ABS_Low=1000000;

int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
//---
 

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {

        double TD_Close=Close[1];

        double ATR=iATR(Symbol(),Period(),ATR_Period,0);

        double bsl=NormalizeDouble(Ask-(stopLoss*ATR),_Digits);

        double btp=NormalizeDouble(Ask+(takeProfit*ATR),_Digits); 

        double ssl=NormalizeDouble(Bid+(stopLoss*ATR),_Digits);

        double stp=NormalizeDouble(Bid-(takeProfit*ATR),_Digits); 

        for (int i=2; i<=Period_bars; i++)
        {
                if (Period_bars<=Bars-1)
                {
                        if (ABS_High<High[i]) ABS_High=High[i];
                        if (ABS_Low>Low[i]) ABS_Low=Low[i];
                }

                break;
        }

        if (TD_Close>ABS_High)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,bsl,btp,"Система пробоя открыла ордер BUY ",magic,0);

                else newCandle = Time[0];
        }
        else
        if (TD_Close<ABS_Low)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,ssl,stp,"Система пробоя открыла ордер SELL ",magic,0);
                else newCandle = Time[0];
        }
}

 
Andrey.Sabitov:

Buenas noches.

Primeros intentos de escribir un EA. ¿Pueden decirme por qué mi Asesor Experto sólo abre la compra? ¿Dónde está el error?



Introduzca (en) el código con más cuidado :-)

No veo dónde se modifica ABS_High, parece ser constante 0 y la condición TD_Close>ABS_High es siempre correcta