Bisogno di aiuto con la codifica

 

Ciao

sto cercando di codificare un EA molto semplice, ma non sono un programmatore e non ho mai fatto un EA prima.

Ho preso il MACD Sample da MT4 e ho modificato alcune parti e cancellato tutto il resto che pensavo non mi servisse.

Sono sicuro che il mio codice è davvero orribile

Vorrei che l'EA funzionasse così:

Il mio indicatore personalizzato ELine ha due linee che si muovono a passi. A volte una è più alta dell'altra, a volte sono uguali.

Quando una linea incrocia l'altra vorrei che l'EA entrasse in una posizione lunga o corta, a seconda di quale linea incrocia in alto.

C'è sempre una posizione aperta, tranne che all'avvio dell'EA.

Quando provo a compilarlo dice "if" - punto e virgola previsto (20,7)

Poi nel passo successivo dovrebbe sempre chiudere una posizione già esistente quando ne apre una nuova, ma non sono riuscito a codificare questo finora.

Qualcuno potrebbe per favore correggere gli errori nel mio codice e magari dirmi come posso chiudere le posizioni ogni volta che l'EA ne inserisce una nuova?

Grazie mille!

File:
el1.mq4  2 kb
 

Ciao

Ora ho risolto questo problema. Ho potuto compilare l'EA e ho provato a fare il backtest. Ma purtroppo non compra e non vende nulla!

A parte questo sembra funzionare, questo è il diario:

14:16:18 EL1 input: Lotti=0.1; Timeframe=240;

14:16:18 ELine GBPUSD,H4: rimosso

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: caricato con successo

E questo è il codice EA:

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

extern double Lots = 0.1;

extern int Timeframe = 240;

stringa strDirCurrent="nessuno";

string strDirPrevious="nessuno";

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

// controlla la direzione corrente

if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="lungo";

if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))

strDirCurrent="short";

// confronta con la direzione precedente e apri una posizione se c'è stato un cambiamento

if(strDirCurrent=="long" && strDirPrevious=="short")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green);

if(strDirCurrent=="short" && strDirPrevious=="long")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Rosso);

strDirPrevious=strDirCurrent;

}

// la fine.

Qualsiasi aiuto è molto gradito!

Grazie

Eric

 

Ciao,

quando cambio NUL L in NULL, non ottengo nessun errore dalla copilazione

 

Se guardi nel corso di sviluppo su questo forum, troverai "My_First_EA", un codind con le MA incrociate

Non ho potuto ottenere alcun risultato testando il tuo EA e sono anche molto nuovo su EA-Proramming. Scusa

 

Grazie balue. Lo spazio in NULL è solo dovuto al copia e incolla, nel mio codice è scritto correttamente. E si compila (la seconda versione).

Conosco il corso MQL (anche se non l'ho ancora finito tutto).

Ho scritto un EA simile per ADX da testare e lì funziona. Solo quando cerco di usare il mio indicatore personalizzato non fa trading.

 

Allega il tuo indicatore - così possiamo fare il backtesting

Ciao

Grande codice - mi piacerebbe fare il backtesting - per favore dacci il tuo icustom Eline.

Ho modificato ampiamente il tuo codice.

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

//+------------------------------------------------------------------+

//| T1.mq4

//|

//|

//+------------------------------------------------------------------+

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

 

Fisso, spero

Problemi risolti. Prova questo

Dobbiamo ancora lavorare sulla gestione del denaro, ecc.

File:
el1.mq4  4 kb
 

Grazie, ora ottengo questo:

2006.01.17 18:59:10 2006.01.12 08:20 EL1: numero doppio non valido come parametro 7 per la funzione OrderSend

2006.01.17 18:59:10 2006.01.12 08:10 EL1: comment for OrderSend function must be a string

2006.01.17 18:59:09 EL1: caricato con successo

e l'errore si ripete circa un milione di volte ;-)

ma penso che questo sia facile da risolvere.

 

Prova questo

Non sto testando il codice - se date l'indicatore - lo testerò - in realtà lo testerò molto presto con un altro indicatore. Spero ancora che questo aiuti.

File:
el1_1.mq4  5 kb
 

Sto ancora cercando di aggiustare - aspettate, ora posterò

Sto ancora sistemando

 

Risolto - si spera

Ti mancava solo un valore di take profit (tp) in realtà.

Non vuoi un tp e uno stoploss?

Buona fortuna

File:
el1_2.mq4  5 kb
Motivazione: