Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 77

 
Sepulca:

Trolling you)))) Tienes una personalidad carismática))))
Gracias por el cumplido, me encantaría saber de dónde viene todo esto.
 
bistreevseh:
Creo que esta es la parte del código que puede causar el problema, muchas gracias de antemano.


Sólo me viene a la cabeza

si Work=FALSE, el EA no funcionará.

El EA no funcionará si hay al menos una orden pendiente, no hay comprobación en MAGIC.

¿Recibes alguna respuesta?

 
MisterD:

No funciona, porque las variables, que se quieren fijar a nivel global, es decir, antes de la función Start... Por ejemplo, estos y otros.... "FiksiruemUp = True; // fix " y "iksiruemUp = False; // reset"
Si no cambias entre marcos temporales, debería funcionar...


Lo hice con las variables, las puse a nivel global.

si se tiene en cuenta el siguiente punto:

cuando el precio está por encima de la línea superior, asigna Verdadero a FiksiruemUp, después de que el precio se vuelve por debajo de la línea superior y todavía por encima de la línea media, ¿qué se asignará a FiksiruemUp: Verdadero o Falso?

Me parece que en esta situación asigna automáticamente False, porque se le ha asignado False en las variables globales, mientras que True se asigna sólo cuando el precio está por encima de la línea superior.

 
Lasvariables globales son de tipo double y sólo double. Debes tener esto en cuenta cuando pongas un bool en las variables globales.
 
Sepulca:


De entrada

si Work=FALSE el EA no funcionará.

El EA no funcionará si hay al menos una orden pendiente, no hay comprobación de MAGIC.

¿Te da alguna señal?


El asesor funciona, es decir, abre órdenes, da alertas de apertura y dispara tp o sl, tampoco pone colgantes
 
Sepulca:
Las variables globales son de tipo double y sólo double. Debes tener esto en cuenta cuando pongas un bool en las variables globales.

y sin embargo, ¿cómo debería ser?
 
Sepulca:
Las variables globales son de tipo double y sólo double. Debes tener esto en cuenta cuando pongas un bool en las variables globales.

no estamos hablando de GlobalVariables aquí, estamos hablando de variables a nivel global.... releer este punto, hay una diferencia....
 
belck:


Lo hice con las variables, las puse a nivel global.

si se tiene en cuenta el siguiente punto:

cuando el precio está por encima de la línea superior, asigna Verdadero a FiksiruemUp, después de que el precio se vuelve por debajo de la línea superior y todavía por encima de la línea media, ¿qué se asignará a FiksiruemUp: Verdadero o Falso?

Me parece que en esta situación asigna automáticamente False, porque se ha asignado False en las variables globales, mientras que True sólo se asigna cuando el precio está por encima de la línea superior.


Inicialmente, si no se especifica nada a nivel global, el valor será False.... Después de que la variable se establezca en True, tendrá este valor hasta la siguiente condición if (Ask < LineS) FiksiruemUp = False; // reset.... Si la condición se cumple, a la variable se le asignará el nuevo valor Falso y se mantendrá así hasta el momento - "cuando el precio está por encima de la línea superior, asigna Verdadero a FiksiruemUp" y así sucesivamente... Espero haberlo explicado claramente... :)
 
MisterD:

Inicialmente, si no se especifica nada a nivel global, el valor será False.... Después de que la variable se ponga a True, tendrá este valor hasta la siguiente condición if (Ask < LineS) FiksiruemUp = False; // reset.... Si la condición se cumple, a la variable se le asignará el nuevo valor Falso y se mantendrá así hasta el momento - "cuando el precio está por encima de la línea superior, asigna Verdadero a FiksiruemUp" y así sucesivamente... Espero haberlo explicado claramente... :)

Ahora lo entiendo. Muchas gracias.
 

Amigos, ayúdenme. Necesito cerrar todas las órdenes de un par de divisas seleccionado. Esto es lo que escribí (parte del código de EA):

int Zakrit_vse()

{

Total=Total de pedidos();

int Vsego;

for(int i=1; i<=OrdersTotal(); i++) // Recorrer los pedidos, cerrarlos todos

{

if (OrderSelect(i-1,SELECT_BY_POS)==true)

{

si (OrderSymbol()!=Symb)continuar;

Ticket=OrderTicket();

Lote=OrderLots();

Precio=Precio de apertura del pedido();

Vsego++;

Consejo=Tipo de pedido();

Alerta(Tip);

if(Tip>1)

{

OrderDelete(Ticket);

Prov_oshibok();

continuar;

}

if(Tip==0)

{

OrderClose( Ticket,Lot, Bid,100);

Prov_oshibok();

continuar;

}

if(Tip==1)

{

OrderClose( Ticket,Lot, Ask,100);

Prov_oshibok();

continuar;

} //

}

}

Alerta(Total," ",Vsego);

int ret=MessageBox("Operación completada con éxito",

",MB_OK|MB_ICONQUESTION|MB_TOPMOST);

if(ret==IDOK) // si la respuesta es "sí"

{

Print("Todas las órdenes por importe de ",Vsego," cerradas con éxito;)

}

}

Pero, por alguna razón, sólo se cierra uno de cada dos pedidos. Si hay 6 pedidos, se cierran 3, si hay 8-4, etc.

¿Qué puede ser? ¿Cuál es el error?

Razón de la queja: