aiuto fineturn EA

 

qualcuno può aiutarmi a mettere a punto un EA per favore

può fare meglio - tutto quello che vedo è comprare e vendere nei posti sbagliati

File:
jbtest3.mq4  5 kb
 
delcor wrote >>

qualcuno può aiutarmi a mettere a punto un EA per favore

può fare meglio - tutto quello che vedo è comprare e vendere nei posti sbagliati

Vuoi spiegare la tua strategia? Dobbiamo controllare se è codificata secondo la strategia dichiarata prima di poterla mettere a punto.

Se i codici sono corretti e stiamo ottenendo trade scadenti dall'EA, allora la strategia è in difetto? La strategia funziona bene dal trading manuale?

 
ronaldosim:

Vuoi spiegare la tua strategia? Dobbiamo controllare se è codificata secondo la strategia dichiarata prima di poterla mettere a punto.

Se i codici sono corretti e stiamo ottenendo trade scadenti dall'EA, allora la strategia è in difetto? La strategia funziona bene dal trading manuale?

grazie per essere tornato

La strategia è - deve solo comprare o vendere quando le ema si incrociano. c'è un'impostazione che funziona bene e se compra e vende solo sugli incroci prenderà profitto

L'ho legata così com'è ma non compra sull'incrocio delle 2 ema

deve chiudere l'ordine aperto e comprare quando l'ema corta incrocia l'ema lunga e viceversa. in questa fase voglio che faccia solo questo.

Poi possiamo fare la 2a fase. nessuna gestione del denaro in questa fase. sono nuovo della programmazione ma voglio imparare di più

potete aiutarmi

così com'è fa il lavoro su eur/usd 15 e1h tf - ma non abbastanza

 
delcor wrote >>

grazie per essere tornato

la strategia è - deve comprare o vendere solo quando le ema si incrociano. c'è un'impostazione che funziona bene e se compra e vende solo sugli incroci prenderà profitto

L'ho legata così com'è ma non compra sull'incrocio delle 2 ema

deve chiudere l'ordine aperto e comprare quando l'ema corta incrocia l'ema lunga e viceversa. in questa fase voglio che faccia solo questo.

Poi possiamo fare la 2a fase. nessuna gestione del denaro in questa fase. sono nuovo della programmazione ma voglio imparare di più

potete aiutarmi

così com'è fa il lavoro sull'eur/usd 15 e1h tf - ma non abbastanza

Ho il sospetto che sia così; per le croci EMA il tuo codice non è corretto

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);

hai bisogno di due iMA ciascuno per il longema e lo shortma

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

e per controllare l'incrocio

se (SEMA1>LEMA1 && SEMA2<LEMA2) invia ordine di acquisto

e per vendere

se (SEMA1<LEMA1 && SEMA2>LEMA2) invia un ordine di vendita

 
ronaldosim:

Ho il sospetto di sì; per gli incroci EMA il tuo codice non è corretto

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);

hai bisogno di due iMA ciascuno per il longema e lo shortma

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

e per controllare l'incrocio

se (SEMA1>LEMA1 && SEMA2<LEMA2) invia ordine di acquisto

e per vendere

se (SEMA1<LEMA1 && SEMA2>LEMA2) invia un ordine di vendita

ok quindi il

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

deve essere inserito nelle condizioni "controlla gli ordini aperti - sotto "ottieni media mobile"

e il "

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order" dove ?

anche il LEMA1 e il LEMA2 devono essere definiti in alto


ancora nuovo in questo

il mio skype è delcor59 se volete contattarmi via skype

grazie per il vostro aiuto

 
delcor wrote >>

ok quindi il

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

deve essere inserito nelle condizioni "controlla gli ordini aperti - sotto "ottieni media mobile"

e il "

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order" dove ?

anche il LEMA1 e il LEMA2 devono essere definiti in alto

ancora nuovo in questo

il mio skype è delcor59 se volete contattarmi via skype

grazie per il vostro aiuto

qualcosa di simile a questo modificando i vostri codici ....

void CheckForOpen()
{
doppio Ema;
int res;
//---- andare a fare trading solo per i primi tik della nuova barra
if(Volume[0]>1) return;
//---- ottenere la media mobile
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

//---- condizioni di vendita
// if(Open[1]>Ema && Close[1]<Ema)
se (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- condizioni di acquisto
// if(Open[1]<Ema && Close[1]>Ema)
se (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
return;
}
//----
}

void CheckForClose()
{
doppio Ema;
//---- fare trading solo per i primi tik della nuova barra
if(Volume[0]>1) return;
//---- ottenere la media mobile
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
// se(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
// se(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}

 
ronaldosim:

qualcosa del genere modificando i propri codici ....

void CheckForOpen()
{
doppio Ema;
int res;
//---- andare a fare trading solo per i primi tik della nuova barra
if(Volume[0]>1) return;
//---- ottenere la media mobile
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

//---- condizioni di vendita
// if(Open[1]>Ema && Close[1]<Ema)
se (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- condizioni di acquisto
// if(Open[1]<Ema && Close[1]>Ema)
se (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
return;
}
//----
}

void CheckForClose()
{
doppio Ema;
//---- fare trading solo per i primi tik della nuova barra
if(Volume[0]>1) return;
//---- ottenere la media mobile
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
// se(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
// if(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}

grazie ancora

Quando faccio il back test dell'Ea, mostra solo acquisti e nessuna vendita.

 
delcor wrote >>

grazie ancora

C'è qualcosa che non va. Quando faccio il back test dell'Ea mostra solo acquisti e nessuna vendita

ho notato che a seconda di quale ordine viene sparato per primo, cioè comprare o vendere, una volta che l'incrocio inizia si spara un ordine e quando l'incrocio opposto si chiude l'ordine; in yr start() quando si controlla l'esistenza di un ordine di mercato, si impedisce a quello del tipo di ordine di non sparare mai, cioè quando si inizia con comprare sarà sempre comprare; quando si inizia con un ordine vendere, sarà sempre un ordine vendere; togliere quella condizione di controllo

 
ronaldosim:

si è notato che a seconda di quale ordine viene sparato per primo, cioè comprare o vendere, una volta che inizia l'incrocio si spara un ordine e quando l'incrocio opposto si chiude l'ordine; in yr start() quando si controlla l'esistenza di un ordine di mercato, si impedisce che quello del tipo di ordine non venga mai sparato, cioè quando si inizia con comprare sarà sempre comprare; quando si inizia con un ordine vendere, sarà sempre un ordine vendere; togliere quella condizione di controllo

ti riferisci alla condizione di controllo nella parte inferiore dell'EA

//+------------------------------------------------------------------+
//| Funzione di avvio |
//+------------------------------------------------------------------+
void start()
{
//---- controllare lo storico e il trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti per simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----

}


perché c'è anche

void CheckForOpen()

void CheckForClose()

 
delcor:

ti riferisci alla condizione di controllo in fondo all'EA

//+------------------------------------------------------------------+
//|Funzione di avvio |
//+------------------------------------------------------------------+
void start()
{
//---- controlla la cronologia e il trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcola gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----

}


perché c'è anche

void CheckForOpen()

void CheckForClose()




Dimmi se c'è un sistema di test sulla programmazione EA per mostrarti passo per passo cosa succede quando questo EA viene eseguito

 
delcor wrote >>

ti riferisci alla condizione di controllo in fondo all'EA

//+------------------------------------------------------------------+
//| Iniziare la funzione |
//+------------------------------------------------------------------+
void start()
{
//---- controlla la cronologia e il trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcola gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----

}

perché c'è anche

void CheckForOpen()

void CheckForClose()

if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcola gli ordini aperti in base al simbolo corrente
CheckForOpen();
CheckForClose();
//----

Motivazione: