Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
tkuan77
Devi trovare l'ultima barra chiusa e vedere se il giorno dell'ultima barra chiusa è lo stesso del giorno corrente.
Puoi usare qualcosa come questa funzione per ottenere il tempo dell'ultimo ordine chiuso:
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
Ciao mladen,
Ma dove inserisco questa parte di codice? Scusa se te lo chiedo perché sono ancora abbastanza nuovo nel campo della codifica e non riesco ancora a capire come funziona il ciclo For.
Saluti
Ryan
Ciao mladen,
Ma dove inserisco questa parte di codice? Scusa se te lo chiedo perché sono ancora abbastanza nuovo nella codifica e non riesco ancora a capire come funziona il ciclo For.
Saluti
RyanRyan
Qualcosa di simile a questo:
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()) // nessuna negoziazione
Ryan
Qualcosa del genere:
se (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()) // nessuna negoziazione
Ciao mladen, ho aggiunto il codice ma sembra che dia qualche forma di errore di variabile globale. Inoltre, ho notato che hai una variabile MagicNumber che non è definita, posso chiederti a cosa serve? L'ho aggiunta sotto int ma non sono sicuro di quale sia l'uso di questa variabile.
Consigliatemi. Grazie ancora per la vostra pazienza.
//---- parametri di input
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Commercio di innesco
//+------------------------------------------------------------------+
int biglietto, totale, MagicNumber;
doppio TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
total = OrdersTotal(); // controlla il numero totale di operazioni attualmente aperte
if(totale < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (Basso[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Apertura[1] - Chiusura[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (Alto[1] - Basso[1]);
SL_Value = (Basso[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (Alto[1] - Basso[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Ciao mladen, ho aggiunto il codice ma sembra che dia qualche forma di errore di variabile globale. Inoltre, ho notato che hai una variabile MagicNumber che non è definita, posso chiederti a cosa serve? L'ho aggiunta sotto int ma non sono sicuro di quale sia l'uso di questa variabile.
Consigliatemi. Grazie ancora per la vostra pazienza.
//---- parametri di input
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- Commercio di innesco
//+------------------------------------------------------------------+
int biglietto, totale, MagicNumber;
doppio TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
total = OrdersTotal(); // controlla il numero totale di operazioni attualmente aperte
if(totale < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (Basso[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Apertura[1] - Chiusura[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]);
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (Alto[1] - Basso[1]);
SL_Value = (Basso[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (Alto[1] - Basso[1]);
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Questa è una funzione
Spostatela fuori dal corpo della funzione start()
↵
Questa è una funzione
Spostarlo fuori dal corpo della funzione start()Ciao mladen, ho provato a spostare la funzione fuori dalla funzione Start, tuttavia, il mio EA sta ancora innescando più di 1 trade al giorno invece di limitarsi ad innescare solo 1 trade al giorno.
Apprezzo il chiarimento.
Saluti
//---- parametri di input
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- Scambio di trigger
//+------------------------------------------------------------------+
int biglietto, totale
doppio TP_Valore, SL_Valore;
total = OrdersTotal(); // controlla il numero totale di trade attualmente aperti
se(totale < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]); // valore del corpo lungo
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per i long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Apertura[1] - Chiusura[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]); // valore del corpo short
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (High[1] - Low[1]); // valore dell'intera candela incluso testa e coda
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]); // valore del corpo lungo
SL_Value = (High[1] + 0.0010); // sempre lo stesso per short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]); // valore del corpo short
SL_Value = (High[1] + 0.0010); // sempre lo stesso per lo short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (High[1] - Low[1]); // valore dell'intera candela incluso testa e coda
SL_Value = (High[1] + 0.0010); // sempre lo stesso per lo short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
↵
Ciao mladen, ho provato a spostare la funzione fuori dalla funzione Start, tuttavia, il mio EA sta ancora innescando più di 1 trade al giorno invece di limitarsi ad innescare solo 1 trade al giorno.
Apprezzo l'illuminazione.
Saluti
//---- parametri di input
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- Scambio di trigger
//+------------------------------------------------------------------+
int biglietto, totale
doppio TP_Valore, SL_Valore;
total = OrdersTotal(); // controlla il numero totale di trade attualmente aperti
se(totale < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]); // valore del corpo lungo
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per i long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Apertura[1] - Chiusura[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]); // valore del corpo short
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (High[1] - Low[1]); // valore dell'intera candela incluso testa e coda
SL_Value = (Low[1] - 0.0010); // sempre lo stesso per long
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0,00100) && ((High[1] - Low[1]) > 0,00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
se ((Close[1] - Open[1]) > 0,00100)
{
TP_Value = (Close[1] - Open[1]); // valore del corpo lungo
SL_Value = (High[1] + 0.0010); // sempre lo stesso per short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) > 0,00100)
{
TP_Value = (Apertura[1] - Chiusura[1]); // valore del corpo short
SL_Value = (High[1] + 0.0010); // sempre lo stesso per lo short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
se ((Open[1] - Close[1]) <= 0,00100)
{
TP_Value = (High[1] - Low[1]); // valore dell'intera candela incluso testa e coda
SL_Value = (High[1] + 0.0010); // sempre lo stesso per lo short
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
tkuan77
Sostituisci questo :
if(totale < 1)
con questo :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent());
E non dovrebbe più farlo
tkuan77
Sostituisci questo :
if(totale < 1)
con questo :
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent()));
E non dovrebbe più farloCiao mladen, dopo aver inserito il codice, invece di innescare 1 trade al giorno, ha innescato più trade in una volta fino allo scoppio del conto. Potrebbe essere dovuto a qualche meccanismo di attivazione che causa questo?
Saluti
Ciao mladen, ho questo codice particolare che chiuderà tutti i trade in sospeso che ho dopo che ho un trade in esecuzione. come faccio a impostare per cancellare solo il mio attuale commercio in sospeso esistente dopo che ho attivato un commercio invece di tutti i futuri trade in sospeso?
grazie.....
int new_del()
{
int i,a;
int totale = OrdiniTotali();
stringa comentario,par;
for (i=totale-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=totale-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("Eliminazione di SELL_STOP"," Ordertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("Cancellare BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}
Ciao mladen, ho questo particolare codice che chiuderà tutti i trade pendenti che ho dopo che ho un trade in esecuzione. come faccio a impostare per cancellare solo il mio attuale trade pendente esistente dopo che ho attivato un trade invece di tutti i futuri trade pendenti?
grazie.....
int new_del()
{
int i,a;
int totale = OrdiniTotali();
stringa comentario,par;
for (i=totale-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=totale-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6);
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("Eliminazione di SELL_STOP"," Ordertype:",OrderType());
return(1);
}
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("Cancellare BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}tkuan77
Cosa significa "current pending trade" e cosa significa "future pending trade"?
tkuan77
Cosa significa "current pending trade" e cosa significa "future pending trade"?
Ciao mladen,
Current pending trade significa: una volta che una condizione è stata soddisfatta, l'ea imposterà 2 trade in sospeso (1 lungo e 1 corto). Quindi se diciamo che il trade lungo è stato attivato, l'ea cancellerà automaticamente il trade corto in sospeso.
Future pending trade significa: dopo che l'ea ha cancellato le precedenti operazioni in sospeso e diciamo che la condizione è soddisfatta di nuovo, l'ea per diritto dovrebbe impostare altre 2 operazioni in sospeso (1 lunga e 1 corta). tuttavia, se l'ea ha attualmente un'operazione in corso, l'ea cancellerà automaticamente qualsiasi ordine in sospeso che l'ea sta cercando di impostare.
Quello che sto cercando di fare è lasciare che il sistema cancelli solo l'attuale trade in sospeso dopo che un trade è stato attivato. apprezzo l'aiuto
saluti