Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 452

 

Salve. Potete dirmi come organizzare un ritardo di esecuzione? In modo che dopo una nuova candela, passino 10 secondi prima che l'aggiornamento sia fatto.

#define   WM_COMMAND                    0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA(string lpstring);
int PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar=0;                   // Для начала обнулимся
  if (Time_0 != Time[0])          // Если уже другое время начала бара
      {
      New_Bar= 1;                 // А вот и новый бар
      Time_0 = Time[0];           // Запомним время начала нового бара
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      } 
 return(0);
 }
 
Ciao, per favore scrivi del codice a condizione che se cancelli 1 oggetto dal grafico, allora il resto (una scelta) sarà cancellato

Ho altri oggetti attaccati a 1 oggetto, e quando si elimina questo oggetto, il resto si blocca sul grafico
 
Dmitry Ivkin:
Ciao, ti sto chiedendo di scrivere del codice sulla condizione che se rimuovi un oggetto dal grafico, allora il resto (a tua scelta) sarà rimosso

Ho altri oggetti attaccati a un oggetto, e quando rimuovo questo oggetto, il resto si blocca sul grafico
Quando creo gli oggetti, uso i prefissi, cioè i nomi che iniziano. Per esempio: ObjectCreate("777_a" ... ObjectCreate("777_z" e poi cancellare il gruppo ObjectsDelete(0, "777_")
 
werter:

Salve. Potete dirmi come organizzare un ritardo di esecuzione? Voglio aspettare 10 secondi dopo la nuova candela prima di eseguire l'aggiornamento.

Il modo più semplice è aggiungere Sleep(10000); dopo Time_0 = Time[0]; e penso che la direttiva #import inferiore dovrebbe essere sollevata di 2 righe

 
STARIJ:

Il modo più semplice è inserire Sleep(10000); dopo Time_0 = Time[0]; e penso che la direttiva #import inferiore dovrebbe essere alzata di 2 righe

Sì, sarebbe un Expert Advisor... Non si può nell'indicatore di sonno, ahimè.
 
STARIJ:
Alla creazione degli oggetti uso un prefisso, cioè l'inizio di un nome. Per esempio: ObjectCreate("777_a" ... ObjectCreate("777_z" e poi cancello il gruppo ObjectsDelete(0, "777_")

Grazie per aver risposto, no non hai capito, ho altri oggetti attaccati all'oggetto, e se elimini l'indicatore allora tutto è normale, ma se fai clic destro e cancelli allora elimini esattamente 1 oggetto e hai bisogno di tutti gli allegati, spero che tu capisca)

 
Dmitry Ivkin:

Grazie per aver risposto, no, non hai capito, ho altri oggetti attaccati all'oggetto e se cancelli l'indicatore allora tutto va bene, ma se fai clic destro e cancelli allora 1 oggetto sarà cancellato e ho bisogno di tutti quelli attaccati, spero che tu capisca)

Periodicamente(ogni tick?) controlla la presenza dell'oggetto principale e rimuove gli oggetti figlio dal prefisso se è assente
 
werter Sì, beh, se fosse un esperto... Non si può nell'indicatore di sonno, ahimè.
datetime Time_0=0;

void ...
{
   if (Time_0 < TimeCurrent())
   {
      Alert(TimeCurrent());
      Time_0 = Time[0]+PeriodSeconds()+10; 
   }
 

È passato molto tempo da quando ho scritto in MQL4, ora ho bisogno di riscrivere il mio EA da MQL5. Il codice che dovrebbe aprire 1 trade sul simbolo in cui si trova l'EA è corretto?

Nello Strategy Tester si aprono 2 trade per qualche motivo

...
if(!Orderex(_Symbol))
{
   OrderSend(NULL,OP_SELL,lot,Bid,30,Bid+stop*Point,Bid-take*Point,NULL,magicf,0,clrRed);
}
...
bool Orderex(string symbol)
{
   for(int i=OrdersTotal(); i>0; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==symbol && OrderMagicNumber()==magicf) return true;
      
      
      
      }


   return false;
}
 

Mi sono imbattuto in un'altra sfumatura a cui non avevo pensato prima

1) Abbiamo molti Expert Advisors installati sulle coppie

2) Quando si apre un ordine da qualsiasi Expert Advisor con le proprie impostazioni (alcuni EA aprono 0,1 o 0,5, per esempio), questo record apparirà nella linea "Expert Advisors".

3) La linea "Esperti" viene letta e gli altri robot si cancellano se ci sono posizioni aperte per più di x lotti.


La domanda è come leggerlo ed elaborarlo? Non è incluso nei file di log.