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

 
Alexey Belyakov:

Guten Tag!

Ich kämpfe mit einer Frage, bitte sagen Sie mir, wie ich sie lösen kann.

Die Idee ist die folgende: Ich ziehe eine Linie am vorherigen Maximum der Kerze. Ich möchte, dass die Linie in Abhängigkeit vom vorherigen Höchstwert verschoben wird.

Wer hindert mich daran, den Zeilenpreis auf der Zecke zu ändern, wenn ich ihn brauche?

//+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
  hLine.Create(0, "hLine", 0, 0);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
  double   o1 = iOpen(NULL, PERIOD_CURRENT, 1);
  double   h1 = iHigh(NULL, PERIOD_CURRENT, 1);
  double   l1 = iLow(NULL, PERIOD_CURRENT, 1);
  double   c1 = iClose(NULL, PERIOD_CURRENT, 1);
  double   c0 = iClose(NULL, PERIOD_CURRENT, 0);
  double   rt = 0;
  double   rs1 = 0;
  double   PRH;

  rt=MathAbs(c1 - o1) / Point(); //размер тела свечи
  rs1=MathAbs(h1 - c1) / Point();// размер верхней тени свечи

  if (rs1 >= rt) // условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же всечи, то...   
  {
    PRH = iHigh(NULL, PERIOD_CURRENT, 1); // то это будет максимум
    hLine.Price(0, PRH);
    Comment("ЦЕНА МАКС =======", PRH, "\n"); // комментарий пред. максимума
  }
}
//+------------------------------------------------------------------+
Dateien:
 
Können Sie mir bitte sagen, wie MT5 aus der Historie den Preis und die Zeit des ersten Handels beim Öffnen einer Position und den Preis und die Zeit des ersten Handels beim Schließen dieser Position kennt? Der Zweck ist es, ein Array von Einstiegspunkten aus der Geschichte zu erhalten, weil ich manchmal Aktien, wenn der Handel manuell, so dass ich zu verstehen, wenn es effektiv ist oder nicht wollen. Ich weiß nichts über Handelsoperationen, ich verwende eine Klasse, in der diese Funktionen nicht implementiert wurden :(
 
Aleksei Beliakov:
Es gibt 2 Optionen
1. Ein Objekt löschen, bevor es erstellt wird
2. Einen Preis festlegen, nachdem das Objekt erstellt wurde

Hallo Namensvetter!)


void OnTick()
  {
//---
   double   o1 = iOpen(Symbol(),Period(),1);
   double   h1 = iHigh(Symbol(),Period(),1);
   double   l1 = iLow(Symbol(),Period(),1);
   double   c1 = iClose(Symbol(),Period(),1);
   double   c0 = iClose(Symbol(),Period(),0);
   double   rt = 0;
   double   rs1 = 0;
   double   rs2 = 0;
   
rt=MathAbs(c1-o1)/_Point; //размер тела свечи
rs1=MathAbs(h1-c1)/_Point;// размер верхней тени свечи
rs2=MathAbs(l1-c1)/_Point; // размер нижней тени свечи

ObjectDelete(0,"HL");

if ((rs1>=rt)&&(c1>o1)) //[для ростовых свечей] условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRH=iHigh(Symbol(),_Period,1); // то это будет максимум
ObjectCreate(0,"HL",OBJ_HLINE,0,_Period,PRH); // и строим по этому максимуму, горизонтальную линию
}

ObjectDelete(0,"lL");

if ((rs2>=rt)&&(c1<o1)) // [для падающих свечей]условие для построения уровней (если нижняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRL=iLow(Symbol(),_Period,1); // то это будет минимум
ObjectCreate(0,"lL",OBJ_HLINE,0,_Period,PRL); // и строим по этому минимум, горизонтальную линию
}
}

Ich habe Option 1 in Betracht gezogen, etwas in der Nähe. Aber irgendwie geht es nicht mit rechten Dingen zu: Erst läuft alles nach Plan, dann gerät es ins Trudeln.

 
Mihail Matkovskij:

Und wer hindert Sie daran, bei Bedarf einfach den Linienpreis auf den Ticks zu ändern?


//+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
  hLine.Create(0, "hLine", 0, 0);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
  double   o1 = iOpen(NULL, PERIOD_CURRENT, 1);
  double   h1 = iHigh(NULL, PERIOD_CURRENT, 1);
  double   l1 = iLow(NULL, PERIOD_CURRENT, 1);
  double   c1 = iClose(NULL, PERIOD_CURRENT, 1);
  double   c0 = iClose(NULL, PERIOD_CURRENT, 0);
  double   rt = 0;
  double   rs1 = 0;
  double   rs2 = 0;
  double   PRH;
  double   PRL;

  rt=MathAbs(c1 - o1) / Point(); //размер тела свечи
  rs1=MathAbs(h1 - c1) / Point();// размер верхней тени свечи
  rs2=MathAbs(l1 - c1) / Point();// размер нижней тени свечи

  if ((rs1>= rt)&&(c1>o1)) //условия для растущих свечей
  {
    PRH = iHigh(NULL, PERIOD_CURRENT, 1); // то это будет максимум
    hLine.Price(0, PRH);
  }
  
   if ((rs2>= rt)&&(c1<o1)) //условия для падающих свечей 
  {
    PRL = iLow(NULL, PERIOD_CURRENT, 1);
    hLine.Price(0, PRL);  
  }
  
  
}
//+------------------------------------------------------------------+

Nun, irgendwie schon, ja. Wenn man die Bedingungen nur ein wenig erweitert, gibt es ein Problem. Es wird eine Linie gezogen, die wie folgt lautet: Wenn es kein neues Hoch/Tief gibt, wird sie gespeichert.

 
Alexey Belyakov:


Nun, irgendwie schon, ja. Wenn man die Bedingungen nur ein wenig erweitert, gibt es ein Problem. Es wird eine Linie gezogen, die wie folgt lautet: Wenn es kein neues Hoch/Tief gibt, wird sie gespeichert.

Ich weiß nicht, wer hindert Sie daran, eine weitere Zeile für Low... hinzuzufügen?

//+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine, lLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
  hLine.Create(0, "hLine", 0, 0);
  hLine.Color(clrDarkViolet);
  lLine.Create(0, "lLine", 0, 0);
  lLine.Color(clrDodgerBlue);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
  double   o1 = iOpen(NULL, PERIOD_CURRENT, 1);
  double   h1 = iHigh(NULL, PERIOD_CURRENT, 1);
  double   l1 = iLow(NULL, PERIOD_CURRENT, 1);
  double   c1 = iClose(NULL, PERIOD_CURRENT, 1);
  double   c0 = iClose(NULL, PERIOD_CURRENT, 0);
  double   rt = 0;
  double   rs1 = 0;
  double   rs2 = 0;
  double   PRH;
  double   PRL;

  rt=MathAbs(c1 - o1) / Point(); //размер тела свечи
  rs1=MathAbs(h1 - c1) / Point();// размер верхней тени свечи
  rs2=MathAbs(l1 - c1) / Point();// размер нижней тени свечи

  if ((rs1 >= rt) && (c1 > o1)) //условия для растущих свечей
  {
    PRH = iHigh(NULL, PERIOD_CURRENT, 1); // то это будет максимум
    hLine.Price(0, PRH);
  }
  
  if ((rs2 >= rt) && (c1 < o1)) //условия для падающих свечей 
  {
    PRL = iLow(NULL, PERIOD_CURRENT, 1);
    lLine.Price(0, PRL);  
  }
}
//+------------------------------------------------------------------+

Sie können eine ganze Reihe von Linien oder anderen Objekten hinzufügen und damit jedes Low und High markieren. Wo liegt das Problem...?

 
Aleksey Vyazmikin:
Bitte teilen Sie mir mit, wie ich den Preis und die Uhrzeit des ersten Geschäfts bei der Eröffnung einer Position und den Preis und die Uhrzeit des ersten Geschäfts bei der Schließung dieser Position aus der Historie ermitteln kann. Mein Ziel ist es, ein Array von Einstiegspunkten aus der Historie zu erhalten, weil ich manchmal Aktien beim manuellen Handel, so möchte ich wissen, ob es effektiv ist oder nicht. Ich weiß nichts über den Handel - ich verwende eine Klasse, in der diese Funktionen nicht implementiert wurden :(

HistorySelectByPosition wird Ihnen helfen

Dann gibt es mehrere Möglichkeiten:

  • Überprüfen Sie die EigenschaftDEAL_ENTRY_IN oder DEAL_ENTRY_OUT, um in den Markt ein- oder auszusteigen und den Preis und die Zeit dieses Handels zu übernehmen.
  • Nehmen Sie Bestellungen auf. Beim Index 0 handelt es sich um einen Markteintritt, bei OrdersTotal()-1 um einen Marktaustritt.
  • Am besten ist es, beides zu nehmen. Der Punkt ist, dass bei einer Positionseröffnung mit Slippage der Abschlusspreis ≠ der Orderpreis ist. Nehmen Sie also, was Sie brauchen.
Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
Gibt es eine Möglichkeit, ein Bündel von Puffern kompakt in mt5 zu deklarieren?
 
Mihail Matkovskij:

Ich weiß nicht, wer hindert Sie daran, eine weitere Zeile für Low... hinzuzufügen?

Sie können eine ganze Reihe von Linien oder anderen Objekten hinzufügen und damit jedes Low und High markieren. Wo liegt das Problem...?

Ja! Es funktioniert einwandfrei! Danke Mihail!


Und wenn Sie die untere Zeile durchstochen haben und sie nach dem Durchstechen löschen müssen, wie:

if (c0<PRL)  
  {
  lLine.Delete(0,"lLine"); 
  }

Oder?

 
Alexey Belyakov:

Ja! Es funktioniert, wie es sollte! Danke Mihail!


Und wenn die untere Zeile gestanzt ist und Sie sie löschen müssen, wenn sie gestanzt ist, wie:

Oder?

Das Programm verwendet nur zwei Zeilen zur Hervorhebung von Ebenen. Warum löschen und dann neu anlegen, wenn man sie einfach auf 0 setzen kann...?

lLine.Price(0, 0.0);

Die Linie wird auf dem Diagramm nicht sichtbar sein... Und dann können Sie es wieder zeigen:

lLine.Price(0, PRL);
 
Mihail Matkovskij:

Das Programm verwendet nur zwei Zeilen zur Hervorhebung der Stufen. Warum löschen und dann neu erstellen, wenn man sie einfach auf 0 setzen kann?

Die Linie wird auf dem Diagramm nicht sichtbar sein... Und dann können Sie es wieder zeigen:

Etwa so? Oder ist es notwendig, etwas anderes in OnInit zu deklarieren?

if (c0<PRL)  
{
lLine.Price(0,0.0);
}