venerdì 22 aprile 2011

Personalizzare i commenti della funzione OrderSend()

Se osservate il terminale di metatrader potrete notare un campo denominato commento:

storico operazioni metatrader

Se state inserendo un ordine manualmente è possibile valorizzare il campo tramite l'apposita maschera:

invio ordini metatrader

Se gli ordini vengono invece aperti da un expert advisor sarà sufficiente valorizzare il parametro comment della funzione OrderSend():

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)

Potreste però avere l'esigenza di far girare lo stesso expert advisor con settaggi differenti e di voler distinguere gli ordini aperti dalle 2 versioni.

La soluzione è molto semplice: basta dichiarare una variabile esterna di tipo string ed utilizzarla direttamente come parametro comment ogni volta che si utilizza la funzione OrderSend.

extern string comment = "Super Expert Advisor 1";
....
....
start(){
....
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid + (Stoploss Point), Bid - (TakeProfit * Point), comment, MagicID, 0, Red);
....
}

Con questo piccolo stratagemma sarà sufficiente diversificare la variabile comment quando attaccate l'ea su di un nuovo grafico per avere dei commenti personalizzati.

Di seguito potete scaricare la versione 5 del key level stop & reverse EA con l'aggiunta di questa piccola modifica.

Sorgente: Key_Level_Stop_Reverse_EA_v5_comment.mq4
Eseguibile: Key_Level_Stop_Reverse_EA_v5_comment.ex4
 

3 commenti:

Ale L ha detto...

Ciao Carlo, compilando un EA mi viene dato il seguente messaggio di errore:

')' wrong parameters count

questo mi succede probabilmente perchè nella funzione OrderSend ho inserito al posto del parametro corrispondente allo Stop loss una funzione:

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,StopLoss(),takeprofit,"EA1",e_MagicID,0,Red);

Non è possibile utilizzare una funzione per calcolare lo stoploss e inserirlo poi come parametro stoploss nella funzione Ordersend?

carlo10 ha detto...

Si è possibile, ovviamente la funzione che richiami deve restituire una variabile dello stesso tipo del parametro in ingresso richiesto.

Mi aspetto quindi che la dichiarazione della tua funzione sia la seguente:

double StopLoss(){
...
...
return(1.4000);
}

Un'altra cosa a cui devi fare attenzione è takeprofit, se è una funzione deve avere le tonde alla fine "takeprofit()", se è una variabile allora è ok così come l'hai scritta.

Ale L ha detto...

Ah ok, ora ho capito! Si nell'esempio che ti ho postato prima il takeprofit non è una funzione ma una variabile.

Grazie Carlo. Ho un altro quesito da porti, ma devo cambiare discussione perchè di altra tematica :-)

Posta un commento