Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1481

 
ANDREY:

Ich danke Ihnen für die wertvollen Informationen.

Wie kann man in einer Variablen speichern, welcher Ausdruck zufällig wahr ist? Um genauer zu sein - was ist das Minimum, das in der Funktion in Bezug auf eine Kerze von welchem Zeitrahmen berechnet wird? Wie speichert man die Kennung dieses Zeitraums in einer Variablen?
Dankeschön

Deklarieren Sie einfach boolsche Variablen

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:

Deklarieren Sie einfach boolsche Variablen

Ich danke Ihnen für diese nützlichen Informationen.

Könnten Sie mir bitte sagen, wie ich einen 5-stelligen Wert in einer gelben Variable speichern kann, wenn der Test auf einer Minutentabelle durchgeführt wird?

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 = (ЛОУ из выражения, которое оказалось истинным);
}
}

Ich danke Ihnen.

 
Guten Tag! Können Sie mir sagen, wie ich in mql4 Text an eine Zeile binden kann, so dass beim Verschieben der Zeile auch die Beschriftung verschoben wird, wie auf den Screenshots zu sehen. Ich weiß, dass es zwei Möglichkeiten gibt, ein Objekt zu binden: in Pixeln an die Ecke des Bildschirms und in Zeit-/Preiskoordinaten. Im ersten Fall erhalte ich einen statischen Text, und im zweiten Fall ist es nicht ganz das, was ich will. Mit der Preiskoordinate (vertikale Bindung) ist klar - ich nehme den Zeilenpreis und füge ein _Point-Paar hinzu, so dass der Text ein wenig höher als die Zeile wäre. Aber was ist mit der Zeit? Ich möchte nicht an den letzten Balken binden, weil eine andere Verschiebung des Diagramms den Text nach rechts oder links ziehen würde. Hier möchte ich eine starre horizontale Bindung an den rechten Rand des Bildschirms herstellen, aber ich weiß nicht, wie.
 
Oleksandr Nozemtsev:
Guten Tag! Können Sie mir sagen, wie ich in mql4 Text an eine Zeile binden kann, so dass beim Verschieben der Zeile auch die Beschriftung verschoben wird, wie auf den Screenshots zu sehen. Ich weiß, dass es zwei Möglichkeiten gibt, ein Objekt zu binden : in Pixeln an die Ecke des Bildschirms und in Zeit-/Preiskoordinaten. Im ersten Fall erhalte ich einen statischen Text, und im zweiten Fall ist es nicht ganz das, was ich will. Mit der Preiskoordinate (vertikale Bindung) ist klar - ich nehme den Zeilenpreis und füge ein _Point-Paar hinzu, so dass der Text ein wenig höher als die Zeile wäre. Aber was ist mit der Zeit? Ich möchte nicht an den letzten Balken binden, weil eine andere Verschiebung des Diagramms den Text nach rechts oder links ziehen würde. Hier möchte ich eine starre horizontale Bindung an den rechten Rand des Bildschirms herstellen, aber ich weiß nicht, wie.
Ziehen Sie die Linien selbst oder der Indikator?
 
MakarFX:
Ziehen Sie die Linien selbst oder der Indikator?

Die Linie wird vom Indikator erstellt, wenn er geladen wird. Es wird Text benötigt, um Informationen über diese Ebene direkt über der Zeile anzuzeigen, anstatt sie in Alert (Alert funktioniert) anzuzeigen.

 
Oleksandr Nozemtsev:

Die Linie wird vom Indikator erstellt, wenn er geladen wird. Es wird Text benötigt, um Informationen über diese Ebene direkt über der Zeile anzuzeigen, anstatt sie in Alert (Alert funktioniert) anzuzeigen.

Posten Sie den Code für die Zeilenerstellung
 
MakarFX:
Posten Sie den Code für die Zeilenerstellung

int OnInit()

{

//Erstellen der Zeile "name_line", falls sie noch nicht vorhanden ist

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

{

//Wenn der Preis nicht angegeben ist, wird er auf den aktuellen Briefkurs gesetzt

if(!preis_zeile)

price_line = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

//Fehlerwert zurücksetzen

ResetLastError();

//eine Zeile erstellen

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

Print("Zeile Zeile. Fehler ", GetLastError());

//

ObjectSet(name_line, OBJPROP_COLOR, color_line); //Linienfarbe

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

ObjectSet(name_line, OBJPROP_WIDTH, width_line); //Liniendicke

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

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//Das Objekt kann mit der Maus angeklickt werden.

ObjectSet(name_line, OBJPROP_SELECTED, selection_line); //Das Objekt ist ausgewählt. O wird bei der Erstellung nicht ausgewählt

}

return(INIT_SUCCEEDED);

}

 
Oleksandr Nozemtsev:

Fangen

//+------------------------------------------------------------------+
//|                                                    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:

Fangen

Wow, das ist eine ganze Menge! Ich dachte, es handele sich nur um ein paar Codezeilen. Danke!

 
Alexey Viktorov:

Deklarieren Sie einfach boolsche Variablen

Könnten Sie mir bitte auch sagen, wie ich einen 5-stelligen blauen Wert in einer gelben Variablen speichern kann, wenn der Test auf einem 1-Minuten-Chart stattfindet?

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 = (ЛОУ из выражения, которое оказалось истинным);
}
}
Dankeschön
Grund der Beschwerde: