Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1269

 
Kira27:

Ich habe alles ausprobiert, was Sie vorgeschlagen haben, habe gedreht und gewendet, aber in MT5 werden die Linien immer noch in einer Farbe gezeichnet, während sie in MT4 normal und ohne Verzögerung gezeichnet werden.

Ich glaube, ich habe nicht alles ausprobiert.

Alexey Viktorov:

Es ist sehr wahrscheinlich, dass ein Objekt nach der Umbenennung immer noch nicht verfügbar ist, um auf es zu verweisen. Sie können versuchen, ChartRedraw nach der Umbenennung einzufügen. Wenn das nicht hilft, müssen wir die Sequenz auf eine andere Weise aufbauen.

ps; Eine andere Möglichkeit: erst mit dem Namen sparam übermalen und dann umbenennen.

Aus irgendeinem Grund wird das Ereignis CHARTEVENT_OBJECT_CREATE sofort gezählt, nachdem die Ratte das Diagramm berührt hat, und nicht erst, wenn die Erstellung des Objekts abgeschlossen ist. Und die Preise für die verschiedenen Enden der Sicherung sind gleich hoch. Sie müssen also nach der Erstellung des Objekts neu malen.

Und noch eine Bemerkung: Malen Sie Ebenen oder die Hauptlinie des Dochts?

Hier sind drei Varianten:

Erstens.

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

Zweitens.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

Drittens.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

wie man einen Algorithmus in einem Indikator organisiert, um Punkte zu nehmen und sie in einen anderen Puffer zu übertragen.

- So zeichnen Sie die Trendlinien. (wie auf dem Bild)

-----------------------------------------

Ich habe alles mit Bauchgefühl probiert, sie sind gezeichnet, aber an seltsamen Stellen.

-----------------------------------------------------------------------------------------------------

Ich habe den Indikator beigefügt, er funktioniert, aber ich kann diese Zeilen nicht einstellen.

Vielleicht kann mich jemand auf die Artikel über die Bindungspunkte der Trendlinie verweisen.

-- Ich kann sie nicht zeichnen, es ist nicht klar, an welchen Stellen.

EURUSDH4

---------------------------------------------------------

so etwas in der Art, vielleicht?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

Bin ich auf dem richtigen Weg?

Dateien:
2.mq5  82 kb
 
SanAlex:

Vielleicht kann mich jemand auf Artikel über Trendlinienpunkte hinweisen.

-- Ich kann sie jetzt nur noch zeichnen, es ist nicht klar, an welchen Stellen.

---------------------------------------------------------

so etwas in der Art, vielleicht?

-------------------

Bin ich auf dem richtigen Weg?

Die Trendlinien werden an 2 Punkten gezeichnet, es sind entweder die Preisdaten oder die Daten eines anderen Indikators, das Beispiel der Zeichnung durch Fraktale, die Sie übrigens schon kennen)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

Trendlinien werden an 2 Punkten gezeichnet, dies sind entweder Preisdaten oder Daten eines anderen Indikators, ein Beispiel für das Zeichnen von Fraktalen, das Ihnen übrigens vertraut ist)

https://www.mql5.com/ru/code/29210

Ich wollte es mit einem Indikator machen, aber es hat nicht funktioniert.

- Ich musste es mit zwei Indikatoren machen.

Genau das habe ich getan.

GBPUSDM30 GOTOV

---------------------------

Ich habe vergessen, danke zu sagen! - Ich danke Ihnen!!!

 
SanAlex:

Ich wollte es in einem Indikator machen, aber es hat nicht geklappt, aber ich habe es in diesem gemacht, den Sie vorgeschlagen haben.

- also musste ich es mit zwei Indikatoren machen.

So hat es funktioniert.

---------------------------

Ich habe vergessen, danke zu sagen! - Ich danke Ihnen!!!

Kombinieren Sie sie gut, Sie können viele verschiedene Objekte in einem Indikator erstellen)

 
Alexey Viktorov:

Offenbar habe ich nicht alles ausprobiert.

Aus irgendeinem Grund wird das Ereignis CHARTEVENT_OBJECT_CREATE sofort gezählt, nachdem die Ratte das Diagramm berührt hat, und nicht, nachdem das Objekt erstellt wurde. Und die Preise für die verschiedenen Enden der Sicherung sind gleich hoch. Daher müssen wir es nach der Erstellung des Objekts neu malen.


Wie haben Sie das festgestellt? Logisch?

Und noch eine Bemerkung: Malen Sie Ebenen oder die Hauptlinie der Fib?


Ich habe versucht, die Trendlinien in verschiedenen Varianten neu zu malen))))

Hier sind drei Varianten:

Erstens.

Zweitens.

Der Dritte.


Vielen Dank dafür!!! Vielleicht lerne ich anhand Ihrer Beispiele, logisch zu denken))))

Beschäftigen Sie sich mit der Programmierung oder mit dem Handel? Ich meine, wie lange handeln Sie schon? Ich tue es seit 12 Jahren)))

 
Kira27:

Vielen Dank für die Optionen!!! Ich werde Ihre Beispiele verwenden und lernen, logisch zu denken))))

Ich meine, wie lange sind Sie schon im Handel tätig? Ich mache das jetzt seit 12 Jahren).

Ich bin nicht immer so "freundlich". Ich bin nicht immer so "freundlich", nur bei Angriffen... Es gibt also nicht viel zu lernen aus meinen Beispielen. Ich bin fast genauso lange im Handel tätig.

 
Alexey Viktorov:

Ich bin nicht immer so "freundlich". Nur bei Angriffen... Es gibt also nicht viel zu lernen aus meinen Beispielen. Beim Handel bin ich ungefähr gleich.

Ich weiß nicht, ich lerne die Methoden und Techniken der Programmierung besser durch Beispiele. Ich wünschte, MQL5 hätte ein solches Tutorial wie MQL4, in dem der Roboter Schritt für Schritt anhand der enthaltenen Dateien erklärt wird.

 
Alexey Viktorov:

Ich bin schon fast genauso lange im Handel tätig.

Also wissen Sie bereits das Wesen der Marktschwankungen? Es scheint mir, dass ich bereits gelernt haben)))) Ich brauche nur zu fragen, denn ich kann mit ihm für eine gewisse Zeit zu arbeiten, und dann habe ich Snap und erstellen Sie ein mess)))))) Aber jetzt verstehe ich jeden Vermögenswert)))) Ich mag vor allem die S & P, es ist technisch und dynamisch))

 
VVT:

Kombinieren Sie sie, so können Sie viele verschiedene Objekte in einem Indikator erstellen.)

Ich wollte es so machen. Ich versuche es jetzt schon seit einer Woche, aber es geht einfach nicht.

- Beim zweiten Indikator scheint es besser zu sein - man kann nicht über die Punkte und die Linien selbst hinaussehen, es gibt nur die Punkte und Niveaus, die zur Bestimmung der Markteintritte verwendet werden.

----------------

diese beiden Indikatoren sind eins (dies ist mein Entwurf - ich habe die Namen der 4 Indikatoren darin nicht geändert)

Grund der Beschwerde: