Aiuto per la codifica - pagina 483

 

Oh, sei davvero una star. Amo commerciare, ma sarebbe impossibile senza il tuo aiuto. Grazie ancora

 
xtractalpha:
Ciao,

Qualcuno potrebbe aiutarmi con la mia funzione LotsizeCalc().

Vorrei moltiplicare il mio lotsize con 'MartingaleAmount' se il mio ultimo trade era perdente. Se il mio ultimo trade è stato vincente, vorrei usare il lotsize "normale". Sfortunatamente, quando faccio il backtest dell'EA ottengo l'errore 4051 dal diario.

Ha qualcosa a che fare con il lotsize, perché l'EA funziona quando provo ad eseguire l'EA senza la funzione "LotsizeCalc()".

Qualcuno sa perché la mia funzione lotsize non funziona?

Grazie in anticipo,

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

Puoi usare questa funzione per scoprire se l'ultimo ordine chiuso è stato chiuso con profitto o perdita:

[PHP]double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

se (magicNumber!=0)

se (OrderMagicNumber() != magicNumber) continua;

se (OrderSymbol() != Symbol()) continua;

se (OrderCloseTime() <= lastTime) continua;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Basta controllare se il risultato della funzione lastOrderProfit(), e se è < 0, allora applica la tua regola martingala

 

Ciao Mladen! Ancora io...

Come sarebbe possibile utilizzare le linee di questo indicatore in un EA utilizzando iCustom, dato che non sembra esserci alcun buffer impostato per queste linee?

Grazie

File:
 
Jason2005:
Ciao Mladen! Ancora io...

Come sarebbe possibile utilizzare le linee di questo indicatore in un EA utilizzando iCustom, dato che non sembra esserci alcun buffer impostato per queste linee?

Grazie

Questi sono oggetti

Puoi accedere agli oggetti per nome (devi conoscere il nome esatto dell'oggetto, ma l'indicatore deve essere attivo sul grafico e quegli oggetti devono essere disegnati sul grafico).

 
mladen:
Quelli sono oggetti Puoi accedere agli oggetti per nome (devi sapere il nome esatto dell'oggetto, ma l'indicatore deve essere attivo sul grafico e quegli oggetti devono essere disegnati sul grafico).

Ottimo. Quindi come potrei chiamare l'indicatore dall'EA? Con qualcosa di diverso da iCustom o ho sbagliato tutto... Grazie mladen

 
Jason2005:
Ottimo. Quindi come potrei chiamare l'indicatore dall'EA? Con qualcosa di diverso da iCustom o ho sbagliato tutto... Grazie mladen

Quell'indicatore disegna semplicemente i livelli a 0,20,50,80 pips di ogni segmento di 100 pips. Il modo più semplice è controllare se quei livelli sono attraversati dal tuo EA.

Se provi a usare i nomi degli oggetti (e i loro prezzi, non sarai in grado di conoscere i nomi esatti delle linee poiché dipendono dal massimo massimo e dal minimo - sono soggetti a cambiamenti. Usa la modalità descritta sopra

 
mladen:
Quell'indicatore disegna semplicemente livelli a 0,20,50,80 pips di ogni segmento di 100 pips. Il modo più semplice è controllare se quei livelli sono attraversati dal tuo EA. Se provi a usare i nomi degli oggetti (e i loro prezzi, non sarai in grado di conoscere i nomi esatti delle linee poiché dipendono dal massimo più alto e dal minimo più basso - sono soggetti a cambiamenti. Usa la modalità descritta sopra

Avresti un esempio su come farlo... Mi dispiace di aver chiesto così tanto, è solo che sto iniziando a codificare e non ho capito come controllare se quei livelli sono attraversati nella condizione di comprare o vendere.

 
Jason2005:
Avresti un esempio su come farlo... Mi dispiace di chiedere così tanto, è solo che sto iniziando a codificare e non ho capito come controllare se quei livelli sono attraversati nella condizione di comprare o vendere.

Jason2005

Hai un codice di come si fa nell'indicatore che hai allegato

 
mladen:
Jason2005 Hai un codice di come è fatto nell'indicatore che hai allegato

Sarebbe questo allora?

MathMod(i, 5) == 0.0
 
mladen:
Thierry

Puoi usare questa funzione per scoprire se l'ultimo ordine chiuso è stato chiuso con profitto o perdita:

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Basta controllare se il risultato della funzione lastOrderProfit(), e se è < 0, allora applica la tua regola martingala


Ciao Mladen,

Grazie per la tua risposta.

La funzione lastorderprofit non è necessaria perché la mia funzione lastTradeTicket() fa lo stesso lavoro.

Potresti dare un'occhiata al mio EA?

Non ti sto chiedendo di modificare il codice, ma ti sarei molto grato se potessi dirmi cosa ho codificato male.

Grazie in anticipo,

Thierry

53_martingale.mq4

File: