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
Grazie, ma...
L'ultimo EA che ho postato ha un ritardo di 3 secondi e uno slippage di 50 (!) pips. Prezzo
12 grafici di 3 secondi ciascuno - il prezzo non avrà il tempo di correre così lontano. O sto fraintendendo qualcosa?
Speriamo che tu possa rintracciarlo. "Cadere" significa circa una volta ogni 2-3 minuti. Se non lo fai - probabilmente il server è troppo vicino, o il computer è troppo veloce. Ho una parte della mia CPU occupata da un pacchetto di rete neurale, quindi MT ottiene il 50%... Ora... Qui, disabilita la rete neurale (c'è un pulsante di pausa, a differenza di alcuni altri programmi). L'errore numero uno non è sparito, ma è diventato un po' meno frequente. MT sta "mangiando" il 55-99% della CPU. Accendendolo... MT ottiene 1,5 volte meno tempo di CPU. Anche gli errori sono diventati più frequenti.
double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nBars; int nDelaySeconds = 3; int nSlip = 50; double dLotSize = 0.1; int nMagic = 0; int nDigits; string strTradeSemaphore = "TradeSemaphore"; ////////////////// int init() { nBars = Bars; if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) GlobalVariableSet(strTradeSemaphore, 0.0); dStopLoss = 110 * Point; nHoursToHold = 1; nDigits = MarketInfo( Symbol(), MODE_DIGITS ); if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); /* // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; */ bool bIsBarEnd = false; if(nBars != Bars) { if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds)) { bIsBarEnd = true; nBars = Bars; } } if(!bIsBarEnd) return(0); // ------ if(!IsTesting()) { while(!IsStopped()) { if(GlobalVariableGet(strTradeSemaphore) == 0.0) GlobalVariableSet(strTradeSemaphore, nMagic); if(GlobalVariableGet(strTradeSemaphore) == nMagic) break; Sleep(1000); } } RefreshRates(); for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); if(!IsTesting()) GlobalVariableSet(strTradeSemaphore, 0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, nSlip, dStop, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", buy: " + dAsk + ", Stop: " + dStop + ", error: " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); }Il Sud sta chiamando, e la nuova funzione sarà prontamente testata in una settimana =)))))
...e grazie anche a te, almeno qualcuno ha cercato di risolvere i bug ;)
Quark, ho scritto dello sviluppatore, non degli sviluppatori. :) Capito? In alcune religioni è Dio, in altre è un indirizzo diverso.
Inoltre, ho scritto che i miei 9 EAs hanno funzionato bene su un conto. Ma tu sei bravo a trovare le condizioni quando MT4 sta spalando qualcosa di sbagliato :)
Ci vediamo lunedì :)
Il Sud sta chiamando e la nuova funzione f sarà prontamente testata in una settimana =)))))
Un grande saluto al Sud.
...e grazie anche a te, almeno qualcuno ha cercato di risolvere i bug ;)
Con un solo errore. E quanti di loro...
Stavo solo scherzando :) Anche se il principio è lo stesso ovunque. Se lo chiedi correttamente, ottieni una risposta. Se bestemmi, vieni bannato :)
E ho anche scritto che i miei 9 EA funzionano bene sullo stesso conto. Ma tu sei bravo a trovare le condizioni quando MT4 sta spalando qualcosa di sbagliato :)
72 finestre con 12 dei miei consiglieri - anche. Poi ho aggiunto il 13, ed eccoci qua... In generale, ovviamente, se prendo l'ultimo EA postato in questo ramo e lo uso a orologi invece di minuti, e aumento la pausa da 3 secondi a 30 (come hai suggerito tu, tra l'altro) non ci saranno errori. Così il risultato è raggiunto, un risultato positivo...
È un peccato per i ragazzi del forum inglese, ma non tradurrò i nostri messaggi per loro. Non in buona salute :(
Buona fortuna,
Quark
Il problema si verifica su diversi EA. La logica in tutti loro è stata modificata con semafori (come suggerito da Slava) e ritardo (Rosh) - in modo che in 10 secondi dati solo 1 EA stava lavorando. Tutti gli errori che ho menzionato sopra sono scomparsi (finora), tranne il numero 6.