Variables Global Scope

 

Hola, primero gracias a todos de antemano.

Tengo un problema con una EA en la que yo declaro una serie de variables tipo int en el Global Scope a las que inicialmente no asigno ningun valor ya que pretendo que sean los tickets de futuras operaciones que abrira el EA.

La función que abre las operaciones no tiene ningún problema para abrir la operativa usando estas variables pero curiosamente no les cambia el valor ya que una condicion necesaria para la apertura de operaciones es la no ocupacion de esas variables, es decir en pricipio no debiera de ejecutar mas que una operación,no se que puedo estar haciendo mal.Muchas gracias.

 
Perdonad de nuevo,quiza no me estoy explicando bien,no se si las variables declaradas en el Global Scope pueden ser alteradas en tiempo real por otras funciones dentro del propio EA.La experiencia que tengo con mi EA me dice que no,que a pesar de ser usadas por la funcion OrderSend() de manera exitosa(si que me abre la operación),su valor no cambia del inicial(0),es por eso que pregunto si hay algo en el codigo que pueda modificar esta propiedad de "inalterabilidad" de las variables declaradas inicialmente.
 
Achiwenya:
Perdonad de nuevo,quiza no me estoy explicando bien,no se si las variables declaradas en el Global Scope pueden ser alteradas en tiempo real por otras funciones dentro del propio EA.La experiencia que tengo con mi EA me dice que no,que a pesar de ser usadas por la funcion OrderSend() de manera exitosa(si que me abre la operación),su valor no cambia del inicial(0),es por eso que pregunto si hay algo en el codigo que pueda modificar esta propiedad de "inalterabilidad" de las variables declaradas inicialmente.

Veamos...

Las inputs en el mal dicho "Global Scope" (en todo caso Global Variables), una vez las cambias en vivo (con el EA en marcha) deben responder y ser aplicadas en las próximas "OrderSend", si o si. De lo contrario es que directamente el EA no esta bien programado.

Es decir, no es que tengas que buscar un código o función que modifique la "inalterabilidad" de las variables globales, es que de serie cualquier modificación, si has escrito el EA correctamente, debe ser aplicada a partir del momento de la misma, descontando las operaciones que ya estén abiertas, las cuales quedan fuera de rango a no ser que expresamente vía código hagas que cualquier cambio de las inputs sea aplicable también a las ya abiertas.

En cristiano...que si quieres cambiar una valor y que tenga en cuenta las operaciones abiertas...es viable? por supuesto...y como se hace? OrderModify, etc.

Pero volviendo al tema, tu problema es que no se aplican los cambios en futuras operaciones, lo cual indica que el EA directamente es que no esta bien programado.

Saludos y suerte!

 
Miguel Angel Vico Alba:

Veamos...

Las inputs en el mal dicho "Global Scope" (en todo caso Global Variables), una vez las cambias en vivo (con el EA en marcha) deben responder y ser aplicadas en las próximas "OrderSend", si o si. De lo contrario es que directamente el EA no esta bien programado.

Es decir, no es que tengas que buscar un código o función que modifique la "inalterabilidad" de las variables globales, es que de serie cualquier modificación, si has escrito el EA correctamente, debe ser aplicada a partir del momento de la misma, descontando las operaciones que ya estén abiertas, las cuales quedan fuera de rango a no ser que expresamente vía código hagas que cualquier cambio de las inputs sea aplicable también a las ya abiertas.

En cristiano...que si quieres cambiar una valor y que tenga en cuenta las operaciones abiertas...es viable? por supuesto...y como se hace? OrderModify, etc.

Pero volviendo al tema, tu problema es que no se aplican los cambios en futuras operaciones, lo cual indica que el EA directamente es que no esta bien programado.

Saludos y suerte!

No estoy hablando de Gobal Variables ni inputs,solamente son variables que se cargan sin valor previas a la funcion OnInit. Esas variables sin valor son usadas por una función OrderSend()(ya dentro del cuerpo OnTimer()) para asi almacenar el ticket de la operación,acceder al mismo y sobre todo para que el EA tenga "conocimiento" de que esa operación se encuentra cuando menos lanzada y no entre en bucle abriendo operaciones ya que la idea es tener solo dos operaciones colocadas.


1 -int ML1;

   int Position;

2 OnInit()


3 OnTimer()

{void AperturaLargo(ML1)

{if(ML1>0)

   {Log(bdabhdbadlaiudhuaisau);

   return;}

ML1=OrderSend(djad,auiod,asdha,);

Sleep(XXX);

if(ML1>0)

{Log(Order Success);

 Position=1;}

return;}




Bueno esto es una idea generica del asunto,la idea es que el EA abra una operación en largo y nada más que una, la variable Position es utilizada en otros if() no escritos aqui para saber en que punto se encuentra el EA,basicamente para saber si tiene órdenes lanzadas o no,si estas estan ejecutadas y en la caso si es en largo o en corto.Log() en una función que uso para crear registros.


Gracias de antemano.

 
Achiwenya:

Hola, primero gracias a todos de antemano.

........... ya que una condicion necesaria para la apertura de operaciones es la no ocupacion de esas variables, es decir en pricipio no debiera de ejecutar mas que una operación,no se que puedo estar haciendo mal.Muchas gracias.

si deben estar no ocupadas como cuando arrancas el EA vuelve a ponerlas despues de enviar la orden tal como están cuando arranca el EA, si dices "no ocupación" supongo la var=0 al arrancar entonces despues el order send vuelves a ponerla  en 0, puedes usar var bool  true o false por ejemplo, arranca en false, hay condición la pone en true, envia orden, la pones en false. o usas int 1 2 3 no se, espero haberte entendido...

Razón de la queja: