Buongiorno,
sono un neofita del linguaggio MQL4 e del trading.
Non ho esperienza come programmatore, salvo esperienze minime.
Sto studiando da diversi mesi su libri e webinar.
Sono nuovo di questo forum quindi spero di scrivere questo post nel modo corretto.
Ho scritto un expert che riporto sotto.
MT4 non mi da errori in fase di compilazione, però se faccio "girare" l'EA (in backtest) , questo non apre posizioni.
Potete darmi qualche suggerimento ?
Per il momento l'EA è impostato solo per ordini Long, in un secondo momento sistemerò anche la parte per gli ordini Short.
Allego copia del file per semplicità.
Grazie.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(OrdersTotal() == 0){
Apri_BUY ();
Chiudi_BUY ();
Comment ("prezzo chiusura ultima candela " , Prezzo_chiusura_BUY_recente, "\n SMA 10 Periodi: ", SMA10_corrente);
}
}
//++++++++++++++++
int Ticket=0;
double media_veloce_vecchia = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,2); //EMA 10 periodi su 2 candele fa;
double media_veloce_nuova = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,1); //EMA 10 periodi su 1 candele fa;
double media_lenta_vecchia = iMA(Symbol(),PERIOD_CURRENT ,50, 0,MODE_SMA, PRICE_CLOSE,2); //EMA 50 periodi su 2 candele fa;
double media_lenta_nuova = iMA(Symbol(),PERIOD_CURRENT ,50, 0,MODE_SMA, PRICE_CLOSE,1); //EMA 50 periodi su 1 candele fa;
int val_index_recente=iClose (Symbol(),PERIOD_CURRENT,-1);
int val_index_passato=iClose (Symbol(),PERIOD_CURRENT,-2);
double Prezzo_chiusura_BUY_recente = Close [val_index_recente];
double Prezzo_chiusura_BUY_passato = Close [val_index_recente];
double SMA10_corrente = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,0);
//+++++++++++++++
void Apri_BUY () {
if ((media_veloce_vecchia < media_lenta_vecchia)&& (media_veloce_nuova > media_lenta_nuova))
{
OrderSelect(Ticket,SELECT_BY_TICKET, MODE_TRADES);
if((OrderCloseTime() == 0) && (OrderType() == OP_SELL))
{
OrderClose(OrderTicket (),OrderLots(),Ask,1,clrMagenta);
Ticket= OrderSend(Symbol(),OP_BUY, 1, Ask, 0, NULL, NULL, NULL, 123456,0, clrGreen);
}
else if (OrderCloseTime() != 0) {
Ticket= OrderSend(Symbol(),OP_BUY, 1, Ask, 0, NULL, NULL, NULL, 123456,0, clrGreen);}
}
}
void Chiudi_BUY () {
if ((Prezzo_chiusura_BUY_recente < SMA10_corrente) &&
(Prezzo_chiusura_BUY_passato >= SMA10_corrente)); { //se il prezzo incrocia la media veloce corrente
OrderSelect(Ticket,SELECT_BY_TICKET, MODE_TRADES);
if((OrderCloseTime() == 0) && (OrderType() == OP_BUY))
{
OrderClose(OrderTicket (),OrderLots(),Bid,1,clrBeige);
}
}
}
//+------------------------------------------------------------------+
sono un neofita del linguaggio MQL4 e del trading.
Non ho esperienza come programmatore, salvo esperienze minime.
Sto studiando da diversi mesi su libri e webinar.
Sono nuovo di questo forum quindi spero di scrivere questo post nel modo corretto.
Ho scritto un expert che riporto sotto.
MT4 non mi da errori in fase di compilazione, però se faccio "girare" l'EA (in backtest) , questo non apre posizioni.
Potete darmi qualche suggerimento ?
Per il momento l'EA è impostato solo per ordini Long, in un secondo momento sistemerò anche la parte per gli ordini Short.
Allego copia del file per semplicità.
Grazie.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(OrdersTotal() == 0){
Apri_BUY ();
Chiudi_BUY ();
Comment ("prezzo chiusura ultima candela " , Prezzo_chiusura_BUY_recente, "\n SMA 10 Periodi: ", SMA10_corrente);
}
}
//++++++++++++++++
int Ticket=0;
double media_veloce_vecchia = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,2); //EMA 10 periodi su 2 candele fa;
double media_veloce_nuova = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,1); //EMA 10 periodi su 1 candele fa;
double media_lenta_vecchia = iMA(Symbol(),PERIOD_CURRENT ,50, 0,MODE_SMA, PRICE_CLOSE,2); //EMA 50 periodi su 2 candele fa;
double media_lenta_nuova = iMA(Symbol(),PERIOD_CURRENT ,50, 0,MODE_SMA, PRICE_CLOSE,1); //EMA 50 periodi su 1 candele fa;
int val_index_recente=iClose (Symbol(),PERIOD_CURRENT,-1);
int val_index_passato=iClose (Symbol(),PERIOD_CURRENT,-2);
double Prezzo_chiusura_BUY_recente = Close [val_index_recente];
double Prezzo_chiusura_BUY_passato = Close [val_index_recente];
double SMA10_corrente = iMA(Symbol(),PERIOD_CURRENT ,10, 0,MODE_SMA, PRICE_CLOSE,0);
//+++++++++++++++
void Apri_BUY () {
if ((media_veloce_vecchia < media_lenta_vecchia)&& (media_veloce_nuova > media_lenta_nuova))
{
OrderSelect(Ticket,SELECT_BY_TICKET, MODE_TRADES);
if((OrderCloseTime() == 0) && (OrderType() == OP_SELL))
{
OrderClose(OrderTicket (),OrderLots(),Ask,1,clrMagenta);
Ticket= OrderSend(Symbol(),OP_BUY, 1, Ask, 0, NULL, NULL, NULL, 123456,0, clrGreen);
}
else if (OrderCloseTime() != 0) {
Ticket= OrderSend(Symbol(),OP_BUY, 1, Ask, 0, NULL, NULL, NULL, 123456,0, clrGreen);}
}
}
void Chiudi_BUY () {
if ((Prezzo_chiusura_BUY_recente < SMA10_corrente) &&
(Prezzo_chiusura_BUY_passato >= SMA10_corrente)); { //se il prezzo incrocia la media veloce corrente
OrderSelect(Ticket,SELECT_BY_TICKET, MODE_TRADES);
if((OrderCloseTime() == 0) && (OrderType() == OP_BUY))
{
OrderClose(OrderTicket (),OrderLots(),Bid,1,clrBeige);
}
}
}
//+------------------------------------------------------------------+
Comment