Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1069

 
CloseAllBuy() è chiamata in un solo posto: nella funzione OnTick() dalla condizione if(Bid>buycloseprice) CloseAllBuy(); questa condizione non è arrivata alla nuova accensione e non è arrivata nemmeno durante il periodo di spegnimento, ma la funzione CloseAllBuy() è stata comunque attivata quando l'EA è stato riacceso.
 
rapid_minus:
CloseAllBuy() è chiamata in un solo posto: nella funzione OnTick() dalla condizione if(Bid>buycloseprice) CloseAllBuy(); questa condizione non si è verificata alla nuova abilitazione e nemmeno durante il periodo di disabilitazione, ma la funzione CloseAllBuy() è stata attivata comunque quando l'EA è stato abilitato di nuovo.
Ci sarà un codice? Cos'è buycloseprice, da dove viene, con cosa è stato inizializzato, dove è stato cambiato, non si può vedere da qui...
 
Ecco un pezzo di codice:
 
Non riesco a vedere se l'SRC è inserito per qualche motivo. In caso contrario, fatemelo sapere e lo ripeterò nel testo.
 
Domanda: per favore consigliate come applicare una variabile globale specificamente in questo caso. Non riesco a capirlo. Grazie.
 
rapid_minus:
Ecco un pezzo di codice:

non è visibile.

rapid_minus:
Domanda:potreste per favore consigliarmi come esattamente in questo caso applicare una variabile globale. Non riesco a capirlo. Grazie.

Leggete la documentazioneVariabili globali del terminale, controllate l'aiuto del meta-editor, è più veloce da aggiornare lì.

In alternativa, è possibile salvare le impostazioni e i valori delle variabili importanti in un file e leggerli da lì quando si carica.

Ma la maggior parte delle volte si può fare a meno di tutto questo, basta usare la testa e fare la giusta logica nel codice.

 
Ripetere con il testo:RefreshRates();
total=OrdersTotal();
if(total>0)
{
for(int i=0; i<=OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magico)
{ RefreshRates();
if(Bid>buycloseprice) CloseAllBuy();
}

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

if((total==0) || (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!=Symbol())
{
Comment("Nessuna posizione aperta");

if(condition && timeBar!=iTime(Symbol(),Period(),1))
{
Print("Il criterio-1 per BAY è apparso");
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,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Period(),1);
doppio spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits);
Comment("Magic 510015 BAY");
Print("CLOSE PRICE = ",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();
}
}
}
 
Allora dove sto facendo un errore nel mio codice?
 
rapid_minus:
Ripetizione nel testo:

Non è ancora chiaro da dove viene buycloseprice, cosa gli succede prima della condizioneif(Bid>buycloseprice) CloseAllBuy();. Perché vedo solo questo nel codice, dopo - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);, ma dove è dichiarato questobuycloseprice e quale valore è inizializzato?


Se questo è il presunto prezzo di chiusura di un ordine di acquisto, allora la logica si rompe qui perché il valore viene passato alla variabile dopo che è stato attivato e non ci hai mostrato cosa c'era dentro prima.

Ora un po' di aritmetica, c'è un tale ciclo nel codice:

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

Diciamo che ci sono 5 ordini che vanno da 0 a 4. Il ciclo conta da 0 a 5. Questo ciclo funziona correttamente?

Inoltre, nella linea if(condition && timeBar!=iTime(Symbol(),Period(),1)), da dove vengono la condizione e timeBar?

 
Penso di aver capito - l'errore è che imposto il buycloseprice globale e gli do immediatamente un valore di 0,0. E anche se dopo prende un valore specifico quando si apre una posizione, questo valore si perde quando il terminale viene spento e prende il valore originale quando si accende, cioè 0,0, e rispettivamente la condizione if(Bid>buycloseprice) è rispettata e il comando di chiusura. Ma come trasferire questa variabile al terminale globale, non capisco.
Motivazione: