sabato 10 marzo 2012

Metatrader error 131

L'errore 131 è uno degli errori più frequenti che si incontrano quando si testano gli expert advisor di metatrader.

Nella documentazione ufficiale di metatrader troviamo questa definizione:

Error 131 - ERR_INVALID_TRADE_VOLUME: Invalid trade volume, error in the volume granularity. All attempts to trade must be stopped, and the program logic must be changed.

Questo significa che l'ea sta cercando di piazzare a mercato un ordine con un volume non valido, nella chiamata alla orderSend stiamo quindi passando un valore non corretto al terzo parametro:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Generalmente è un errore che viene restituito quando tentiamo di usare frazioni di lotto non consentite negli account standard ma può capitare di avere lo stesso problema anche sui mini-conti.

Ma come superare questo problema e passare alla funzione dei valori corretti in modo che gli ordini inseriti vengano effettivamente aperti?

Per prima cosa è necessario stampare a video un pò di informazioni utili che variano da broker a broker, si può inserire il seguente pezzo di codice all'interno dell'init() in modo che venga richiamato una sola volta:

Print(MarketInfo(Symbol(), MODE_LOTSIZE));
Print(MarketInfo(Symbol(), MODE_MINLOT));
Print(MarketInfo(Symbol(), MODE_LOTSTEP));
Print(MarketInfo(Symbol(), MODE_MAXLOT));

La prima riga MODE_LOTSIZE ci dice a quante unità corrisponde un lotto standard, generalmente quindi sarà uguale a 100.000.

La seconda riga MODE_MINLOT ci indica invece quanto è il volume minimo di lotti con cui possiamo aprire i nostri ordini ed è la causa principale dell'errore 131.

La terza riga MODE_LOTSTEP ci indica invece lo scarto minimo che il volume può avere, delle frazioni di lotti più "precise" rispetto a quella indicata faranno andare in errore i nostri ordini.

La quarta riga MODE_MAXLOT ci indica il volume massimo di lotti che possiamo utilizzare, purtroppo generalmente (a parte i test su conti demo) non è la causa in cui ci si imbatte.

Le righe sopra ci stamperanno a video qualcosa di simile:

2008.07.10 15:13:37 MACD Sample EURUSD, H1: 100000
2008.07.10 15:13:37 MACD Sample EURUSD, H1: 0.01
2008.07.10 15:13:37 MACD Sample EURUSD, H1: 0.01
2008.07.10 15:13:37 MACD Sample EURUSD, H1: 10000

Questo significa che 1 lotto è uguale a 100.000 unità, il volume minimo è di 0,01 lotti (quindi un microlotto, se tradiamo su euro-dollaro si tratta quindi di 10$ per posizione), lo step minimo è di 0,01 lotti (questo significa ad esempio si possono aprire posizioni da 0,02 o da 0,11 lotti ma non da 0,011 lotti) e che il massimo volume che si può utilizzare è di 10,000 lotti.

Per expert advisor che utilizzano logiche complesse può essere utile sfruttare queste funzioni per determinare la dimensione dei lotti in modo dinamico.

Questo articolo è stato liberamente tradotto da Handling OrderSend Error 131 in MetaTrader 4.
 

0 commenti:

Posta un commento