Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1069
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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.
Aquí hay un trozo de código:
no es visible.
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.
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();
}
}
}
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?