Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 249
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Che tipo di errore è questo, lo prendo dalla parte del DC, un cattivo allenamento?
Che tipo di errore è questo, lo deduco dalla parte del DC del cattivo debriefing?
128
ERR_TRADE_TIMEOUT
Timeout scaduto
Pezzo del gestore:
128
ERR_TRADE_TIMEOUT
Timeout scaduto per l'esecuzione del trade
Pezzo del gestore:
Ho questi gestori di errori nel mio codice, ma non sono mai esistiti. Oggi ho deciso di controllare il mio programma nella demo di una popolare società di brokeraggio e mi sono trovato di fronte a questi bug per la prima volta.
Ho capito bene che questo è un problema di hardware della società di intermediazione e non dalla mia parte?
L'idea è di calcolare se il prezzo ha rotto il prezzo medio durante un certo numero di candele precedenti.
la funzione non viene eseguita affatto, il risultato dovrebbe essere: se non si è rotto returnToMA ==1, se si è rotto returnToMA ==0
forse c'è un'altra soluzione a questo problema?
returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)
int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)
{
for(i=0;i<=bars;i++)
{
se(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}
se (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}
altrimenti return(1);
}
L'idea è di calcolare se il prezzo ha rotto il prezzo medio durante un certo numero di candele precedenti.
la funzione non viene eseguita affatto, il risultato dovrebbe essere: se non si è rotto returnToMA ==1, se si è rotto returnToMA ==0
Forse ci sono altre soluzioni a questo problema?
La vostra funzione avrà sempre zero perché il massimo o il minimo è sempre maggiore/meno che o uguale al MA.
La candela deve essere descritta da almeno due parametri nel vostro caso:
1) Definire dove la candela ha aperto - sopra o sotto la MA
2. In base a 1, controllare se il MA è stato toccato.
Avrete sempre zero nella funzione - poiché il massimo o il minimo è sempre maggiore/meno di o uguale al MA.
La candela deve essere descritta da almeno due parametri nel vostro caso:
1. determinare dove la candela ha aperto - sopra o sotto la MA
2. In base a 1, controllare se il MA è stato toccato.
Grazie. Ho aggiunto la condizione ma restituisce sempre 1. Posso cambiare le parentesi da qualche parte? Oppure break non funziona e la funzione termina assegnando 1 al valore di ritorno
int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)
{
for(i=0;i<=bars;i++)
{
if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
{return(0);break;}
se ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
{return(0);break;}
else return(1);
}
Grazie. Ho aggiunto la condizione, ma restituisce sempre 1. Posso cambiare le parentesi da qualche parte? Oppure break non funziona e la funzione termina assegnando 1 al valore di ritorno
int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)
{
for(i=0;i<=bars;i++)
{
if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
{return(0);break;}
se ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
{return(0);break;}
else return(1);
}
Prova così
Restituirà 1 se la condizione è soddisfatta - c'era un'intersezione - non è quello che vogliamo?
Prova questo
Restituirà 1 se la condizione è soddisfatta - c'era un'intersezione - non è quello che vogliamo?
Grazie, funziona alla perfezione con la tua versione del codice
Buon pomeriggio!
Ragazzi, potete dirmi se è possibile visualizzare programmaticamente l'indicatore sul grafico? O solo manualmente?
Se sì, quale comando viene dato?