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

 
ANDREY:

Grazie per le preziose informazioni.

Per favore consigliatemi, come memorizzare in una variabile l'espressione che risulta essere vera? Per essere più precisi - qual è il minimo calcolato nella funzione rispetto a una candela di quale timeframe? Come salvare l'identificatore di questo lasso di tempo in una variabile?
Grazie

Basta dichiarare variabili bool

bool variant_H4 = Bid-iLow( NULL ,PERIOD_H4,1) >= 0.0030,
     variant_H1 = Bid-iLow(NULL ,PERIOD_H1,1) >= 0.0030,
     variant_M30 = Bid-iLow(NULL ,PERIOD_M30,1) >= 0.0030;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov:

Basta dichiarare variabili bool

Grazie per le informazioni utili.

Potreste dirmi come salvare un valore di 5 cifre in una variabile gialla se il test è fatto su un grafico al minuto

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}

Grazie.

 
Buon pomeriggio! Potete dirmi come legare il testo a una linea in mql4, in modo che quando quest'ultima viene spostata, anche la scritta viene spostata, come negli screenshot. So che ci sono due modi per legare un oggetto: in pixel all'angolo dello schermo e in coordinate tempo/prezzo. Nel primo caso, ottengo un testo statico, e nel secondo, non è proprio quello che voglio. Con la coordinata del prezzo (legame verticale) è chiaro - prendo il prezzo della linea e ci aggiungo una coppia _Point, così il testo sarebbe un po' più alto della linea. Ma che dire del tempo? Non voglio legarmi all'ultima barra perché un diverso spostamento del grafico tirerà il testo a destra - a sinistra. Qui vorrei fare un collegamento orizzontale rigido al bordo destro dello schermo, ma non capisco come.
 
Oleksandr Nozemtsev:
Buon pomeriggio! Potete dirmi come legare il testo a una linea in mql4, in modo che quando quest'ultima viene spostata, anche la scritta viene spostata, come negli screenshot. So che ci sono due modi per legare un oggetto : in pixel all'angolo dello schermo e in coordinate tempo/prezzo. Nel primo caso, ottengo un testo statico, e nel secondo, non è proprio quello che voglio. Con la coordinata del prezzo (legame verticale) è chiaro - prendo il prezzo della linea e ci aggiungo una coppia _Point, così il testo sarebbe un po' più alto della linea. Ma che dire del tempo? Non voglio legarmi all'ultima barra perché un diverso spostamento del grafico tirerà il testo a destra - a sinistra. Qui vorrei fare un collegamento orizzontale rigido al bordo destro dello schermo, ma non capisco come.
Disegna lei stesso le linee o l'indicatore?
 
MakarFX:
Disegna lei stesso le linee o l'indicatore?

La linea viene creata dall'indicatore quando viene caricato. Il testo è necessario per mostrare le informazioni su questo livello direttamente sopra la linea, piuttosto che mostrarle in Alert (Alert funziona).

 
Oleksandr Nozemtsev:

La linea viene creata dall'indicatore quando viene caricato. Il testo è necessario per mostrare le informazioni su questo livello direttamente sopra la linea, piuttosto che mostrarle in Alert (Alert funziona).

Pubblica il codice di creazione della linea
 
MakarFX:
Pubblica il codice di creazione della linea

int OnInit()

{

//Crea la linea "name_line" se non esiste ancora

if(ObjectFind(0, name_line) == -1)

{

//Se il prezzo non è specificato, impostalo al prezzo corrente di Ask

se(!prezzo_linea)

price_line = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

//reset valore di errore

ResetLastError();

//creare una linea

if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

Stampa("Linea Linea. Errore ", GetLastError());

//

ObjectSet(name_line, OBJPROP_COLOR, color_line); //Colore della linea

ObjectSet(name_line, OBJPROP_STYLE, style_line); //Line style

ObjectSet(name_line, OBJPROP_WIDTH, width_line); //spessore della linea

ObjectSet(name_line, OBJPROP_BACK, back_line); //Front/back

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//L'oggetto può essere cliccato con il mouse.

ObjectSet(name_line, OBJPROP_SELECTED, selection_line); //L'oggetto è selezionato. O non è selezionato alla creazione

}

return(INIT_SUCCEED);

}

 
Oleksandr Nozemtsev:

Cattura

//+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                            https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link      "https://www.mql5.com/ru/users/makarfx"
#property version   "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ObjectsDeleteAll(0,"My_");
   //--- indicator buffers mapping
   if(ObjectFind(0,"My_BuyLine")!=0)
     {
      HLineCreate(0,"My_BuyLine",0,Ask+50*Point,clrTeal,2,1,false,true,false);
     }
   if(ObjectFind(0,"My_SellLine")!=0)
     {
      HLineCreate(0,"My_SellLine",0,Bid-50*Point,clrCrimson,2,1,false,true,false);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"My_");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   DoTime = TimeCurrent()+(Period()*60*7);
   if(ObjectFind(0,"My_BuyLine")==0)
     {
      buy = NormalizeDouble(ObjectGet("My_BuyLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_BuyText",0,DoTime,buy+5*Point,"BuyText","Arial",10,clrTeal,0,0,false,false,false);     
     }
   if(ObjectFind(0,"My_SellLine")==0)
     {
      sell = NormalizeDouble(ObjectGet("My_SellLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_SellText",0,DoTime,sell-5*Point,"SellText","Arial",10,clrCrimson,0,0,false,false,false);     
     }
   if(buy!=ObjectGet("My_BuyLine",OBJPROP_PRICE1)||sell!=ObjectGet("My_SellLine",OBJPROP_PRICE1))
     {
      ObjectMove(0,"My_BuyText",0,DoTime,buy+5*Point);
      ObjectMove(0,"My_SellText",0,DoTime,sell-5*Point);
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
      { 
      Print(__FUNCTION__, ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR, clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE, style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK, back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN, hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER, z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text(const long              chart_ID=0,               // ID графика 
                 const string            name="Text",              // имя объекта 
                 const int               sub_window=0,             // номер подокна 
                 datetime                time=0,                   // время точки привязки 
                 double                  price=0,                  // цена точки привязки 
                 const string            text="Text",              // сам текст 
                 const string            font="Arial",             // шрифт 
                 const int               font_size=10,             // размер шрифта 
                 const color             clr=clrRed,               // цвет 
                 const double            angle=0.0,                // наклон текста 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                 const bool              back=false,               // на заднем плане 
                 const bool              selection=false,          // выделить для перемещений 
                 const bool              hidden=true,              // скрыт в списке объектов 
                 const long              z_order=0)                // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим объект "Текст" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
      { 
      Print(__FUNCTION__,": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+------------------------------------------------------------------+
 
MakarFX:

Cattura

Wow, è molto! Pensavo fossero solo un paio di righe di codice. Grazie!

 
Alexey Viktorov:

Basta dichiarare variabili bool

Potresti anche dirmi come salvare un valore blu a 5 cifre in una variabile gialla se il test si svolge su un grafico a 1 minuto

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}
Grazie
Motivazione: