Función para un EA que filtre solo Un trade al día

 

Muy buenas;


Estoy intentando hacer un EA y solo quiero que haga una entrada al dia . 


Mirando en este foro encontré alguna cosa pero no me funcionaba ( La copio debajo).


Simplemente quiero una función que revise las ordenes ya cerradas y compruebe la hora de entrada de ese activo con un mismo numero magico, de tal manera que me devuelva un true o false y asi ponerlo en las condiciones del robot para que no realice mas entradas que la primera que realice al dia.


No estoy hablando de que no haga varios trades al dia la vez  que para eso ya tengo otra funcion, si no que una vez haga una operacion al dia, esta funcion que os pego le diga que ya ha abierto una en ese activo y con ese magic number,,, No entiendo porque ni funciona.


Bueno, espero que alguien me puede ayudar.


Muchas gracias de ante mano.


Os copio la función en cuestión

bool No_Trades_Today ()
 
 {
  
     datetime today = iTime(NULL,PERIOD_D1,0);
     int Magic_Number;
     for (int i = OrdersHistoryTotal()-1;i>0;i--)
     {
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
     if (OrderSymbol() != _Symbol) continue;
     if ( OrderMagicNumber() != Magic_Number) continue;
     if (OrderOpenTime() >= today) return(false);
     }
     
     
     
     return(true);
  
 }

 
Alexpagp:

Muy buenas;


Estoy intentando hacer un EA y solo quiero que haga una entrada al dia . 


Mirando en este foro encontré alguna cosa pero no me funcionaba ( La copio debajo).


Simplemente quiero una función que revise las ordenes ya cerradas y compruebe la hora de entrada de ese activo con un mismo numero magico, de tal manera que me devuelva un true o false y asi ponerlo en las condiciones del robot para que no realice mas entradas que la primera que realice al dia.


No estoy hablando de que no haga varios trades al dia la vez  que para eso ya tengo otra funcion, si no que una vez haga una operacion al dia, esta funcion que os pego le diga que ya ha abierto una en ese activo y con ese magic number,,, No entiendo porque ni funciona.


Bueno, espero que alguien me puede ayudar.


Muchas gracias de ante mano.


Os copio la función en cuestión

bool No_Trades_Today ()
 
 {
  
     datetime today = iTime(NULL,PERIOD_D1,0);
     int Magic_Number;
     for (int i = OrdersHistoryTotal()-1;i>0;i--)
     {
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
     if (OrderSymbol() != _Symbol) continue;
     if ( OrderMagicNumber() != Magic_Number) continue;
     if (OrderOpenTime() >= today) return(false);
     }
     
     
     
     return(true);
  
 }

de entrada no das valor a esto


   int Magic_Number;


creo que tienes que definir un valor

   int Magic_Number =10;


donde 10 sea el numero mágico que uses o pn la variable del imput correspondiente

 
Marta Gonzalez:

de entrada no das valor a esto


   int Magic_Number;


creo que tienes que definir un valor

   int Magic_Number =10;


donde 10 sea el numero mágico que uses o pn la variable del imput correspondiente

Hola,


Gracias por la respuesta, Es una función que si le da valor luego al entrar en el EA.


Un saludo.

 
Alexpagp:

Hola,


Gracias por la respuesta, Es una función que si le da valor luego al entrar en el EA.


Un saludo.

pero la reinicias localmente dándole por tanto valor 0


eso hace que esta linea



if ( OrderMagicNumber() != Magic_Number) continue;


te de false cuando tu quieres que de true y por tanto no pasa a la siguiente linea

 
Marta Gonzalez:

pero la reinicias localmente dándole por tanto valor 0


eso hace que esta linea



if ( OrderMagicNumber() != Magic_Number) continue;


te de false cuando tu quieres que de true y por tanto no pasa a la siguiente linea

Entiendo. He hecho esta modificacion:

bool No_Trades_Today (int Magic_Number)
 
 {
  
     datetime today = iTime(NULL,PERIOD_D1,0);
     
     for (int i = OrdersHistoryTotal()-1;i>0;i--)
     {
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
     if (OrderSymbol() != _Symbol) continue;
     if ( OrderMagicNumber() != Magic_Number) continue;
     if (OrderOpenTime() >= today) return(false);
     }
     
     
     
     return(true);
  
 }



Creo que ahora si . Como lo ves ?

Muchas gracias Marta.

Razón de la queja: