Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1069
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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.
Ecco un pezzo di codice:
non è visibile.
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.
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();
}
}
}
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?