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

 
CloseAllBuy() se llama en un solo lugar: en la función OnTick() por la condición if(Bid>buycloseprice) CloseAllBuy(); esta condición no se produjo en el nuevo encendido y tampoco se produjo durante el periodo de apagado, pero la función CloseAllBuy() se activó de todos modos cuando el EA se volvió a encender.
 
rapid_minus:
CloseAllBuy() se llama en un solo lugar: en la función OnTick() por la condición if(Bid>buycloseprice) CloseAllBuy(); esta condición no se produjo en la nueva habilitación y tampoco se produjo durante el periodo de deshabilitación, pero la función CloseAllBuy() se activó de todas formas cuando el EA se habilitó de nuevo.
¿Habrá un código? Qué es buycloseprice, de dónde salió, con qué se inicializó, dónde se cambió, no se ve desde aquí...
 
Aquí hay un trozo de código:
 
No puedo ver si el SRC se inserta por alguna razón. Si no es así, hágamelo saber y lo repetiré en texto.
 
Pregunta: por favor aconsejar cómo aplicar una variable global específicamente en este caso.No puedo entenderlo. Gracias.
 
rapid_minus:
Aquí hay un trozo de código:

no es visible.

rapid_minus:
Pregunta:¿podríais indicar cómo aplicar exactamente en este caso una variable global? No puedo entenderlo. Gracias.

Lea la documentaciónVariables globales del terminal, consulte la ayuda del meta-editor, es más rápido actualizar allí.

Como alternativa, puede guardar los ajustes y valores de las variables importantes en un archivo y leerlos desde allí cuando se cargue.

Pero la mayoría de las veces se puede prescindir de todo esto, sólo hay que usar la cabeza y hacer la lógica correcta en el código.

 
Repitiendo con el texto:RefreshRates();
total=OrdersTotal();
if(total>0)
{
for(int i=0; i<=TotalPedidos(); i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates();
if(Bid>buycloseprice) CloseAllBuy();
}

if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}

¡if((total==0) || (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!¡=Symbol())
{
Comment("No hay posiciones abiertas");

if(condition && timeBar!=iTime(Symbol(),Period(),1))
{
Print("Ha aparecido el Criterio-1 para BAY");
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Period(),1);
double spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits);
Comment("Magic 510015 BAY");
Print("PRECIO DE CIERRE = ",buycloseprice);
}
}

}

//+------------------------------------------------------------------+*/
void CloseAllBuy()
{
bool fc;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderType()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
buycloseprice=0.0;
tc=OrderCloseTime();
}
}
}
 
Entonces, ¿dónde estoy cometiendo un error en mi código?
 
rapid_minus:
Repitiendo en el texto:

Todavía no está claro de dónde viene buycloseprice, qué pasa con él antes de la condiciónif(Bid>buycloseprice) CloseAllBuy();. Porque sólo veo esto, después -buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits); pero ¿dónde se declara estebuycloseprice y cómo se inicializa?


Si este es el supuesto precio de cierre de una orden de compra, la lógica se rompe aquí porque el valor se pasa a la variable después de que se haya disparado y no nos has mostrado lo que había en ella antes.

Ahora un poco de aritmética, hay un bucle de este tipo en el código:

for(int i=0; i<=TotalPedidos(); i++)

Digamos que hay 5 órdenes que van de 0 a 4. El bucle cuenta de 0 a 5. ¿Funciona correctamente este bucle?

Además, en la línea if(condition && timeBar!=iTime(Symbol(),Period(),1)), ¿de dónde salen la condición y el timeBar?

 
Creo que lo he entendido - el error es que pongo el buycloseprice global e inmediatamente le doy un valor de 0,0. Y aunque después toma un valor específico al abrir una posición, este valor se pierde al apagar el terminal y toma el valor original al encenderlo, es decir, 0,0, y respectivamente se respeta la condición if(Bid>buycloseprice) y la orden de cerrar. Pero cómo transferir esta variable al terminal global, no lo entiendo.