Errore numero 6 - pagina 11

 
in 50 minuti di lavoro su grafici a 10 minuti solo 2 requote. niente più errori. aggiungiamo il dizionario del meta-editor e postiamo le modifiche
 
L'errore 138 requote può verificarsi facilmente. potenzialmente con 10 EAs funzionanti il tempo di attesa per il rilascio del semaforo può essere di 30 secondi o più. durante questo tempo il prezzo può facilmente cambiare. in questo caso utilizzare la funzione RefreshRates e prendere un nuovo valore di bid o ask. o chiedere a MarketInfo un nuovo prezzo. 129 è lo stesso errore, prezzo sbagliato - il prezzo è andato troppo lontano e ci sono stati diversi cambiamenti di prezzo durante l'attesa. 1 - questo non è affatto un errore. appare quando stai cercando di modificare un ordine con gli stessi valori che hai già impostato. è strano che si verifichi quando confermi manualmente un trade quando lo rifiuti


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?
 
Aggiunto RefreshRates all'esperto (codice sotto). Gli errori numero 1 si stanno accumulando.
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);
}


 
Per riassumere, credo. Sembra che qualsiasi esperto, tranne quelli che lavorano da soli, abbia bisogno di semafori di protezione. Proverò la nuova funzione introdotta dagli sviluppatori lunedì (e Rosh ha detto che lo sviluppatore non vuole cambiare la versione! Dovrei contattarlo più spesso, è solo a un centinaio di post di distanza). In realtà, grazie mille agli sviluppatori. Grazie anche a Rosh e Compositore. Comunque, aspetteremo fino a lunedì :)
 
No, non fino a lunedì di sicuro =)))
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 ;)
 
Per riassumere, credo. Sembra che qualsiasi esperto, tranne quelli che lavorano da soli, abbia bisogno di semafori di protezione. Proverò la nuova funzione introdotta dagli sviluppatori lunedì (e Rosh ha detto che lo sviluppatore non vuole cambiare la versione! Dovrei contattarlo più spesso, è solo a un centinaio di post di distanza). In realtà, grazie mille agli sviluppatori. Grazie anche a Rosh e Compositore. Comunque, ci vediamo lunedì :)<br / translate="no">


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 :)
 
<br / translate="no"> no, non fino a lunedì =)))


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...
 
<br / translate="no"> Quark, ho scritto dello sviluppatore, non degli sviluppatori. :)


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
 
Nonostante il lavoro fatto, l'errore numero 6 continua a verificarsi. Succede quando MT usa l'ottimizzatore e apre una posizione allo stesso tempo. L'ho già preso due volte. Eseguendo nuovamente l'Expert Advisor - se le condizioni per l'apertura di una posizione sono ancora valide - si ottiene l'apertura di una posizione, senza problemi.
 
Sembra che quando l'ottimizzatore è in funzione, l'errore 6 è molto più probabile. Il riavvio del computer, le misure di MT ecc. non cambiano la situazione.

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.
Motivazione: