Sorry for my English I'm using google translate, I had an expert write to gpt chat who executes the following orders: opens a buy order if the closing in the 5 minute time frame is positive and vice versa sell order if the closing in the 5 minute time frame 5 minutes and negative, every hour it closes all open orders and then starts a new cycle of orders. Unfortunately when I go to format it it gives me errors, can you please correct it, Thanks
// Dichiarazione delle variabili globali
int MagicNumber = 12345; // Numero magico per distinguere gli ordini dell'EA
int Slippage = 5; // Slippage consentito per l'esecuzione degli ordini
int OrderExpiration = 3600; // Durata di validità dell'ordine in secondi (1 ora)
// Funzione di inizializzazione dell'Expert Advisor
int OnInit()
{
return(INIT_SUCCEEDED);
}
// Funzione di gestione dei tick
void OnTick()
{
// Ottenere la chiusura del prezzo nel timeframe a 5 minuti
double closePrice = iClose(NULL, PERIOD_M5, 0);
// Controllare se la chiusura è positiva o negativa
if (closePrice > 0)
{
// Aprire un ordine Buy
OpenBuyOrder();
}
else if (closePrice < 0)
{
// Aprire un ordine Sell
OpenSellOrder();
}
}
// Funzione per aprire un ordine Buy
void OpenBuyOrder()
{
// Controllare se non ci sono già ordini Buy aperti
if (CountOpenOrders(OP_BUY) == 0)
{
// Calcolare il volume dell'ordine (puoi personalizzare questa logica)
double volume = 0.1;
// Aprire l'ordine Buy
int ticket = OrderSend(Symbol(), OP_BUY, volume, Ask, Slippage, 0, 0, "", MagicNumber, 0, Blue);
if (ticket < 0)
{
// Errore nell'apertura dell'ordine
Print("Errore nell'apertura dell'ordine Buy: ", ErrorDescription(GetLastError()));
}
}
}
// Funzione per aprire un ordine Sell
void OpenSellOrder()
{
// Controllare se non ci sono già ordini Sell aperti
if (CountOpenOrders(OP_SELL) == 0)
{
// Calcolare il volume dell'ordine (puoi personalizzare questa logica)
double volume = 0.1;
// Aprire l'ordine Sell
int ticket = OrderSend(Symbol(), OP_SELL, volume, Bid, Slippage, 0, 0, "", MagicNumber, 0, Red);
if (ticket < 0)
{
// Errore nell'apertura dell'ordine
Print("Errore nell'apertura dell'ordine Sell: ", ErrorDescription(GetLastError()));
}
}
}
// Funzione per contare il numero di ordini aperti di un certo tipo
int CountOpenOrders(int type)
{
int count = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() == type && OrderMagicNumber() == MagicNumber)
{
count++;
}
}
return count;
}
// Funzione per chiudere tutti gli ordini aperti
void CloseAllOrders()
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
}
}
}
// Funzione per gestire l'evento di timer
void OnTimer()
{
// Chiusura di tutti gli ordini aperti
CloseAllOrders();
}
// Funzione di deinitialization dell'Expert Advisor
void OnDeinit(const int reason)
{
// Chiusura di tutti gli ordini aperti alla chiusura dell'EA
CloseAllOrders();
}
// Dichiarazione delle variabili globali
int MagicNumber = 12345; // Numero magico per distinguere gli ordini dell'EA
int Slippage = 5; // Slippage consentito per l'esecuzione degli ordini
int OrderExpiration = 3600; // Durata di validità dell'ordine in secondi (1 ora)
// Funzione di inizializzazione dell'Expert Advisor
int OnInit()
{
return(INIT_SUCCEEDED);
}
// Funzione di gestione dei tick
void OnTick()
{
// Ottenere la chiusura del prezzo nel timeframe a 5 minuti
double closePrice = iClose(NULL, PERIOD_M5, 0);
// Controllare se la chiusura è positiva o negativa
if (closePrice > 0)
{
// Aprire un ordine Buy
OpenBuyOrder();
}
else if (closePrice < 0)
{
// Aprire un ordine Sell
OpenSellOrder();
}
}
// Funzione per aprire un ordine Buy
void OpenBuyOrder()
{
// Controllare se non ci sono già ordini Buy aperti
if (CountOpenOrders(OP_BUY) == 0)
{
// Calcolare il volume dell'ordine (puoi personalizzare questa logica)
double volume = 0.1;
// Aprire l'ordine Buy
int ticket = OrderSend(Symbol(), OP_BUY, volume, Ask, Slippage, 0, 0, "", MagicNumber, 0, Blue);
if (ticket < 0)
{
// Errore nell'apertura dell'ordine
Print("Errore nell'apertura dell'ordine Buy: ", ErrorDescription(GetLastError()));
}
}
}
// Funzione per aprire un ordine Sell
void OpenSellOrder()
{
// Controllare se non ci sono già ordini Sell aperti
if (CountOpenOrders(OP_SELL) == 0)
{
// Calcolare il volume dell'ordine (puoi personalizzare questa logica)
double volume = 0.1;
// Aprire l'ordine Sell
int ticket = OrderSend(Symbol(), OP_SELL, volume, Bid, Slippage, 0, 0, "", MagicNumber, 0, Red);
if (ticket < 0)
{
// Errore nell'apertura dell'ordine
Print("Errore nell'apertura dell'ordine Sell: ", ErrorDescription(GetLastError()));
}
}
}
// Funzione per contare il numero di ordini aperti di un certo tipo
int CountOpenOrders(int type)
{
int count = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() == type && OrderMagicNumber() == MagicNumber)
{
count++;
}
}
return count;
}
// Funzione per chiudere tutti gli ordini aperti
void CloseAllOrders()
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
}
}
}
// Funzione per gestire l'evento di timer
void OnTimer()
{
// Chiusura di tutti gli ordini aperti
CloseAllOrders();
}
// Funzione di deinitialization dell'Expert Advisor
void OnDeinit(const int reason)
{
// Chiusura di tutti gli ordini aperti alla chiusura dell'EA
CloseAllOrders();
}