Il mio EA funziona bene quando è in esecuzione da solo, ma se cerco di eseguire lo stesso EA su un altro Symbol allo stesso tempo sullo stesso profilo, il secondo non funziona molto bene o per niente o ci sono molti errori. Questo succede anche se uso Symbol() e numeri magici diversi per i due grafici separati. Succede anche se eseguo versioni diverse dello stesso codice (cioè i nomi dei file EA e i numeri magici sono diversi ma il codice è identico). Ho forse una sorta di conflitto con le variabili globali o c'è qualche altra ragione per cui il secondo si blocca? Grazie.
- SOLO CANDELA / BAR - Come catalogare o segregare la candela? - PER FAVORE CORREGGIMI!
- [Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te.
- [Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4.
Sneck55:
Il mio EA funziona bene quando è in esecuzione da solo, ma se cerco di eseguire lo stesso EA su un altro Symbol allo stesso tempo sullo stesso profilo, il secondo non funziona molto bene o per niente o ci sono molti errori. Questo succede anche se uso Symbol() e numeri magici diversi per i due grafici separati. Succede anche se eseguo versioni diverse dello stesso codice (cioè i nomi dei file EA e i numeri magici sono diversi ma il codice è identico). Ho forse una sorta di conflitto con le variabili globali o c'è qualche altra ragione per cui il secondo si blocca? Grazie.
Il mio EA funziona bene quando è in esecuzione da solo, ma se cerco di eseguire lo stesso EA su un altro Symbol allo stesso tempo sullo stesso profilo, il secondo non funziona molto bene o per niente o ci sono molti errori. Questo succede anche se uso Symbol() e numeri magici diversi per i due grafici separati. Succede anche se eseguo versioni diverse dello stesso codice (cioè i nomi dei file EA e i numeri magici sono diversi ma il codice è identico). Ho forse una sorta di conflitto con le variabili globali o c'è qualche altra ragione per cui il secondo si blocca? Grazie.
Dato che non dovrebbe essere un problema eseguire lo stesso EA su diversi grafici (io lo faccio senza problemi) dovresti fornire il codice... ?
Sì. Se il secondo si blocca, molto probabilmente sta cercando di usare la stessa risorsa come il primo.
È meglio che ci mostri il codice e ti indicheremo qual è il colpevole, se non richiede tempo.
utilizzare il pulsante SRC!
gooly: usa il pulsante SRC!
Quale parte di SRC non era chiara? Perché non l'hai fatto? Modifica il tuo post!
Riproduci videoPer favore modifica il tuo post.
Per grandi quantità di codice, allegalo.if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
Se manca la corrente, il sistema operativo si blocca, il terminale o il grafico viene accidentalmente chiuso, la prossima volta il BuyTicket sarà perso. Avrai un ordine aperto ma non proverai mai a chiuderlo. Non hai bisogno di ricordare il numero del ticket quando usi un ciclo OrderSelect.- Si DEVE fare il conto alla rovescia quando si chiude/cancella. Tornare indietro di uno non funzionerà se un altro EA chiude un ordine. Loop e chiusura o cancellazione di ordini - MQL4 forum
- Semplificate le vostre booleane
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
Non scrivereste mai if( (2+2) == 4) == true) vero? if(2+2 == 4) è sufficiente. Quindi non scrivere if(bool == true), usa solo if(bool) o if(!bool).
Il pulsante SRC è stato usato per fare il post
Sneck55:
Il pulsante SRC è stato usato per fare il post
Il pulsante SRC è stato usato per fare il post
sì, ma la prima riga "Scusa per il ritardo...." non è codice e ha rovinato tutto
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
Sneck55: Il pulsante SRC è stato usato per fare il post
Perché non hai modificato il tuo post originale?
qjol: sì, ma la prima riga "Scusa per il ritardo...." non è codice e ha rovinato tutto
Il codice è estremamente semplice, eppure più finestre su cui lo eseguo e peggio si comporta. L'ho eseguito su 4 diversi simboli, ma inizia a fallire anche su 1 simbolo dopo pochi minuti. Inoltre inizia bene, ma più a lungo lo eseguo (dopo un paio d'ore o giù di lì) più lento, più lento e meno accurato diventa. A volte può richiedere fino a un minuto per rimuovere ogni EA da ogni finestra con il piccolo cerchio vicino al cursore che gira in tondo per secoli. Ho un buon PC veloce che ho appena deframmentato e scansionato per i virus - ho provato anche sul mio portatile con esattamente gli stessi risultati. Ho provato a scaricare tutta la cronologia di M1 ma non fa alcuna differenza. Potrebbe essere una sorta di problema di perdita di memoria? MT4 sta cercando di utilizzare le stesse risorse più e più volte? Chiaramente non potrò fidarmi a fare trading sul mio conto live finché il problema non sarà risolto!
Questo è interessante...
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