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

 
Алексей КоКоКо:

Potete dirmi come capire la documentazione in generale? Mi preoccupa molto il fatto che negli esempi anche di un semplice oggetto grafico come il testo, ti buttano in faccia un esempio con un mucchio di codice e da nessuna parte scrivono quali parametri sono obbligatori e quali no. Così per scrivere semplicemente del testo o impostare una tendenza o anche capire i buffer per un indicatore non si capisce quali parametri minimi devono essere inseriti e si deve copiare e incollare il codice

Ciao, i parametri richiesti per il testo sono l'indice della finestra, il riferimento alle coordinate e il testo stesso, gli altri sono opzionali.

Dovete tenere a mente che ci sono due tipi di oggetti, OBJ_LABEL e OBJ_TEXT. Il primo oggetto è legato ai pixel della finestra e il secondo al tempo e al prezzo sul grafico.

Diciamo che abbiamo bisogno di un'etichetta di testo collegata ai pixel, allora fate così:

   ObjectCreate(0,name,OBJ_LABEL,0,0,0); // создаём объект в текущем (нулевом окне)
   ObjectSetString(0,name,OBJPROP_TEXT,text); // указываем какой текст должен в нём отображаться
   ObjectSetString(0,name,OBJPROP_FONT,fontname); // назначаем шрифт например Verdana или Tahoma
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize); // назначаем размер шрифта
   ObjectSetInteger(0,name,OBJPROP_COLOR, text_color); // назначаем цвет шрифта
   ObjectSetInteger(0,name,OBJPROP_CORNER,text_corner); // указываем от какого угла окна отсчитывать пиксели
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,text_anchor); // указываем как должен быть выровнен текст по центру или какому-то краю
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XOFFSET); // указываем координату по горизонтали
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YOFFSET); // указываем координату по вертикали
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // указываем можно ли выделять и двигать метку мышкой или нельзя

questo è un codice quasi minimo che disegna l'etichetta di testo

lo stesso per l'oggetto OBJ_TEXT, ma è necessario specificare anche le proprietà prezzo e tempo:

   ObjectSetDouble(0,name,OBJPROP_PRICE,0,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);



text_corner dovrebbe essere uno dei valori costanti:

ID

Descrizione

ANGOLO_SINISTRA_SUPERIORE

Centro delle coordinate nell'angolo superiore sinistro del grafico

ANGOLO_SINISTRA_INFERIORE

Centro delle coordinate in basso a sinistra del grafico

ANGOLO_DESTRA_INFERIORE

Centro delle coordinate nell'angolo in basso a destra del grafico

ANGOLO_DESTRA_SUPERIORE

Centro delle coordinate nell'angolo superiore destro del grafico


maggiori dettagli qui: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner#enum_base_corner




text_corner dovrebbe essere uno dei valori costanti:

Identificatore

Descrizione

ANCORA A SINISTRA IN ALTO

Punto di ancoraggio in alto a sinistra

ANCHOR_LEFT

Punto di ancoraggio a sinistra nel centro

ANCORA A SINISTRA IN BASSO

Punto di ancoraggio in basso a sinistra

ANCHOR_LOWER

Punto di ancoraggio sotto il centro

ANCORA_DESTRA_INFERIORE

Punto di ancoraggio in basso a destra

ANCORA DESTRA

Punto di ancoraggio a destra nel centro

ANCORA_DESTRA_SUPERIORE

Punto di ancoraggio in alto a destra

ANCHOR_UPPER

Punto di ancoraggio al centro superiore

CENTRO ANCORA

Punto di ancoraggio esattamente al centro dell'oggetto


maggiori dettagli qui:https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner



puoi anche collegare la libreria standard #include <ChartObjects\ChartObject.mqh> e usare le sue classi, ma questo ti complica solo la vita secondo me

 
transcendreamer:

Saluti, i parametri obbligatori per il testo sono l'indice della finestra, il legame delle coordinate e il testo stesso, gli altri sono opzionali.

Tenete presente che ci sono due tipi di oggetti: OBJ_LABEL e OBJ_TEXT. Il primo è legato ai pixel della finestra e il secondo al tempo e al prezzo sul grafico.

Diciamo che abbiamo bisogno di un'etichetta di testo collegata ai pixel, allora fate così:

questo è un codice quasi minimo che disegna l'etichetta di testo

lo stesso per l'oggetto OBJ_TEXT, ma è necessario impostare solo le proprietà prezzo e tempo:


Dio vi benedica) Non è solo il testo ma molte cose, anche i buffer degli indicatori. Cosa c'è nel carrello rimosso?)

 
Алексей КоКоКо:

Dio ti benedica) Non è solo il testo, sono molte cose, anche i buffer degli indicatori. Perché sei stato cancellato dal carrello).

Ho cancellato dal carrello come al solito perché ero paranoico e i Chexisti non mi hanno scoperto 😀 Non ho idea di cosa farne.

 
Artyom Trishkin:

E l'opzione giusta è, beh, molto semplice...

E che cos'è? Perché non lo scrivi?

 
Ciao a tutti, ho inserito in un EA "starhour e stophour" per aprire ordini ad una certa ora, ma non ho considerato che l'ordine che è stato aperto per esempio alle 22:00 non sarà chiuso in stophour (23:00)
Da prima non c'era nessun indicatore di segnale per chiudere la posizione e dopo le 23:00 è persino vietato prendere qualsiasi decisione.

Si prega di consigliare come fare in modo che l'EA sia in grado di chiudere le posizioni aperte dopo lo stophour (23:00).
O semplicemente chiudere tutte le posizioni alle 23:00, per non tenerle tutta la notte.


Grazie in anticipo
 
Eugen8519:
Ciao a tutti, ho inserito in un EA "starhour e stophour" per aprire gli ordini ad una certa ora, ma non ho considerato che un ordine che è stato aperto per esempio alle 22:00 non sarà chiuso in stophour(23:00)
Da prima non c'era nessun indicatore di segnale per chiudere la posizione e dopo le 23:00 è persino vietato prendere qualsiasi decisione.

Si prega di consigliare come fare in modo che l'EA sia in grado di chiudere le posizioni aperte dopo lo stophour (23:00).
O semplicemente chiudere tutte le posizioni alle 23:00, per non tenerle tutta la notte.


Grazie in anticipo

mettere "starhour e stophour" solo sugli ordini aperti

 
MakarFX:

mettere "starhour e stophour" solo sugli ordini di apertura

Questo è il problema - apre e chiude solo gli ordini starthour->stophour
E gli ordini aperti non vengono chiusi dopo lo stophour

Non puoi fare trading dopo lo stophour



I parametri globali sono impostati

bool           UseTimeLimit = true;
int            startHour    = 15;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;



E in OnTick

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
 
Eugen8519:
Questo è il problema, apre e chiude solo gli ordini starthour->stophour
E gli ordini aperti non si chiudono dopo lo stophour
Mostra la funzione di chiusura degli ordini
 
Eugen8519:
Questo è il problema, apre e chiude solo gli ordini starthour->stophour
E gli ordini aperti non si chiudono dopo lo stophour

qualcosa del genere

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
....
if(YesStop==false)
  {
   условие для открытия ордеров
  }
 
MakarFX:

più o meno così

Ecco come si chiude l'ordine



(EMA0[m_bar_current]<WMA0[m_bar_current] && EMA0[m_bar_current+1]>WMA0[m_bar_current+1]) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
//if(color_buffer[m_bar_current+1]<color_buffer[m_bar_current]) //Sell
   if(EMA0[m_bar_current]>WMA0[m_bar_current] && EMA0[m_bar_current+1]<WMA0[m_bar_current+1]) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }


void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }
Motivazione: