puoi fare un caso di errore nel tuo codice e usare RefreshRates()
Non so come farlo su due piedi, ma forse puoi fare qualcosa del genere.
if(Trade==fase)
{
int ErrorCode= GetLastError();
se (ErrorCode=130)
{
RefreshRates();
}
}
di nuovo questo codice potrebbe non essere giusto, quindi dovreste cercare su Google come farlo.
Inoltre, se non hai già fatto la funzione NormalizeDouble per arrotondare i numeri.
potete fare un caso di errore nel vostro codice e usare RefreshRates()
Come può essere d'aiuto?
Potrebbe essere un problema temporaneo. Ha detto che è sensibile alle maiuscole e alle minuscole, quindi aggiornare i tassi potrebbe risolvere il problema.
Potrebbe essere un problema temporaneo. Ha detto che è sensibile alle maiuscole e alle minuscole, quindi aggiornare i tassi potrebbe risolvere il problema.
vero.
Raptor, non conosco lo spread per il trade di cui sopra. Ho aggiunto un output di log nel codice, la prossima volta che l'errore si verifica, sarò in grado di dirvi lo spread.
Ma puoi dirmi perché lo spread è importante? In che modo devo prendere in considerazione lo spread quando determino lo stoploss?
Io invio un ordine con per esempio:
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
quindi l'unica variabile predefinita che uso quando invio ordini è: Ask
SLIPPAGE e TAKEPROFIT sono entrambi 0.
EXPERT_ID è un numero magico unico
position_size è un numero intero, per esempio 3
initial_stop è il mio stoploss, che è (nel caso dell'esempio sopra) Bid - risk.
Il rischio è un valore maggiore di (MODE_STOPLEVEL * Point), nel caso del trade del primo post. Il rischio era: 1,35
grazie per i vostri pensieri.
Raptor, non conosco lo spread per il trade di cui sopra. Ho aggiunto un output di log nel codice, la prossima volta che l'errore si verifica, sarò in grado di dirvi lo spread.
Ma puoi dirmi perché lo spread è importante? In che modo devo prendere in considerazione lo spread quando determino lo stoploss?
Ben fatto per aver aggiunto la stampa al registro per il futuro:-)
Devo sempre pensare a lungo e duramente su dove Spread deve essere considerato e non . . sembra che io abbia un blocco mentale dove è interessato . . . ma penso di avere questo corretto.
Per un acquisto non dovrebbe avere importanza, comprate all'Ask, lo SL avverrà al Bid, quindi lo Spread è già calcolato nel vostro OpenPrice. Per un Sell è un'altra cosa... vendi al Bid e il tuo SL sarà preso dal prezzo Ask... dov'è il prezzo Ask? Beh, dipende dallo spread del momento... Penso che questo sia corretto, per favore pensaci e vedi se ha senso... Sono più che felice di essere corretto se mi sbaglio... :-)
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);Gli EA devono regolare per broker a 4/5 cifre, TP, SL e slippage. Sui broker ECN è necessario aprire e poi impostare gli stop.
//++++ These are adjusted for 5 digit brokers. int pips2points; // slippage 3 pips 3=points 30=points double pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init(){ if (Digits % 2 == 1){ // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262 pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; } // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //---- These are adjusted for 5 digit brokers. /* On ECN brokers you must open first and THEN set stops int ticket = OrderSend(...) if (ticket < 0) Alert("OrderSend failed: ", GetLastError()); else if (!OrderSelect(ticket, SELECT_BY_POS)) Alert("OrderSelect failed: ", GetLastError()); else if (!OrderModify(OrderTicket()...) Alert("OrderModify failed: ", GetLastError()); */
Potrebbe essere un problema temporaneo. ha detto che è sensibile alle maiuscole e alle minuscole, quindi aggiornare i tassi potrebbe risolvere il problema.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ho visto che molti nel forum stanno lottando con questo errore.
Come ho capito dagli altri thread, l'errore può essere causato da
a: impostazione di un valore di stoploss troppo vicino al prezzo corrente
b: un numero sbagliato di cifre dopo lo 0
Per quanto riguarda a:
Come ho capito. MarketInfo(Symbol(), MODE_STOPLEVEL)) dovrebbe darmi la distanza minima che lo stoploss deve avere.
Quindi ecco un esempio di un trade fallito:
Marekt Info:
Data: 2011/9/15 16:31
Simbolo: #ESU1
Livello di stop: 75.00000000
Punto: 0.01000000
Dimensione Tick: 0.25000000
Tick Valore: 12.50000000
Cifre: 2.00000000
Quindi la distanza minima dovrebbe essere livello di stop * punto, giusto? quindi 0.75
Quindi ecco il mio ordine fallito:
2011.09.15 16:32:07 '393930': ordine vendere 18,00 #ESU1 apertura a 1201,00 sl: 1202,35 tp: 0,00 fallito [S/L o T/P non valido]
L'errore è: 130 / stop non valido
Lo stoploss è a 1.35 dall'apertura. Quindi dovrebbe andare bene. Anche le cifre (b) corrispondono.
Allora perché ricevo questo errore?
Inoltre, questo errore è difficile da riprodurre. A volte appare. A volte non appare.
A volte appare per diverse volte dopo l'altra.
Qualche idea?
Grazie in anticipo!
shinobi