Ho bisogno di aiuto con l'errore #130 stoploss non valido

 
Caro forum,

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
 
Qual era lo spread nel momento esatto in cui si è verificato questo errore?
 

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.

 
35806:

potete fare un caso di errore nel vostro codice e usare RefreshRates()

Come può essere d'aiuto?
 
RaptorUK:
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.
 
35806:

Potrebbe essere un problema temporaneo. Ha detto che è sensibile alle maiuscole e alle minuscole, quindi aggiornare i tassi potrebbe risolvere il problema.
Non abbiamo visto alcun codice. . se non sta usando nessuna variabile predefinita, nessuna quantità di RefreshRates aiuterà.
 

vero.

 
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?

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
 
shinobi:
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());
     */
 
35806:

Potrebbe essere un problema temporaneo. ha detto che è sensibile alle maiuscole e alle minuscole, quindi aggiornare i tassi potrebbe risolvere il problema.
AFAIK RefreshRates() non ha nulla a che fare con l'errore 130