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

 

Guten Tag!!! Ein frohes neues Jahr für alle!!!

Hier ein Screenshot, der die Anzeige des Durchschnittspreises der Aufträge im Raster zeigt

Hier ist der Code für die Erstellung einer horizontalen Linie des Durchschnittspreises und der Aufschrift

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
   ObjectCreate("signal4",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal4",OBJPROP_XDISTANCE,100);
   ObjectSet("signal4",OBJPROP_YDISTANCE,260);
   ObjectSetText("signal4","- Средняя цена сетки ордеров на покупку",14,"Times New Roman", clrLime);
   if(ot==1)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed);
   ObjectCreate("signal3",OBJ_LABEL,0, 0, 0, 0, 0);
   ObjectSet("signal3",OBJPROP_XDISTANCE, 100);
   ObjectSet("signal3",OBJPROP_YDISTANCE, 280);
   ObjectSetText("signal3", "- Средняя цена сетки ордеров на продажу", 14, "Times New Roman", clrRed);
   return(avg_price);
  }

Hier ist der Code, der die horizontale Linie entfernt

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену
   if(CountTrade() == 0)
     {
      if(ObjectFind(0,"AveragePriceLine" + IntegerToString(0))==0&&CountTrade(0)<1)//для бай
        {
         ObjectDelete(0,"AveragePriceLine"+ IntegerToString(0));
        }
      if(ObjectFind(0,"AveragePriceLine" + IntegerToString(1))==0&&CountTrade(1)<1)//для селл
        {
         ObjectDelete(0,"AveragePriceLine" + IntegerToString(1));
        }
     }

Bitte helfen Sie mit, den Code so umzugestalten, dass die Aufschrift über der Zeile erscheint und entfernt wird, wenn die Zeile entfernt wird

Vielen Dank für Ihre Hilfe.

 
EVGENII SHELIPOV #:

Bitte helfen Sie mir, den Code so umzuschreiben, dass

Wenn Siehelfen können, was genau können Sie dann nicht tun?

 
Andrey Sokolov #:

Wenn Siehelfen können, was genau können Sie dann nicht tun?

Seien wir nicht unhöflich. Wenn ich wüsste, wie man das macht, wäre ich nicht hierher gekommen.

Die Frage ist ganz einfach: Sie müssen die Koordinaten der Inschrift in Bezug auf die horizontale Linie kennen, da ich nicht weiß, wie ich sie berechnen soll.


 
EVGENII SHELIPOV #:

Seien wir nicht unhöflich. Wenn ich wüsste, wie man das macht, wäre ich nicht hierher gekommen.

Die Frage ist sehr einfach müssen die Koordinaten der Inschrift in Bezug auf die horizontale Linie zu wissen, wie ich nicht weiß, wie es zu berechnen.


Was meinen Sie mit "Wir wollen nicht unhöflich sein"? Habe ich "helfen" und nicht "mir helfen" geschrieben.

 
EVGENII SHELIPOV #:

Guten Tag!!! Frohes neues Jahr an alle!!!

Wassercode zum Entfernen der horizontalen Linie

Vielen Dank für die Hilfe.

Das ist mehr als genug.

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену
   if(CountTrade() == 0)
     {
      ObjectsDeleteAll(0,"AveragePriceLine");
     }
EVGENII SHELIPOV #:

Die Frage ist ganz einfach: Sie müssen die Koordinaten der Inschrift in Bezug auf die horizontale Linie kennen, da ich nicht weiß, wie ich sie berechnen soll.

Hier können Sie helfen

ChartTimePriceToXY

ChartXYToTimePrice

 
Tretyakov Rostyslav #:

Das ist mehr als genug.

Hier können Sie Hilfe bekommen.

ChartTimePriceToXY

ChartXYToTimePrice

Danke für den Tipp, Rostislav, aber ich mache etwas falsch.

Ich muss nur die 0Y-Achse ändern, aber die Beschriftung will sich nicht mit der horizontalen Linie vermählen.

Ich füge den Code und den Screenshot bei, bitte teilen Sie mir mit, wo der Fehler liegt?

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
   int x = 0, y = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
   ObjectCreate("signal4",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal4",OBJPROP_XDISTANCE,500);
   ChartTimePriceToXY(0, 0, 0,avg_price, x, y);
   ObjectSet("signal4",OBJPROP_YDISTANCE, y + 10);
   ObjectSetText("signal4","- Средняя цена сетки ордеров на покупку",14,"Times New Roman", clrLime);
   if(ot==1)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed);
   ObjectCreate("signal3",OBJ_LABEL,0, 0, 0, 0, 0);
   ObjectSet("signal3",OBJPROP_XDISTANCE, 500);
   ChartTimePriceToXY(0, 0, 0, avg_price, x, y);
   ObjectSet("signal3",OBJPROP_YDISTANCE, y + 10);
   ObjectSetText("signal3","- Средняя цена сетки ордеров на продажу", 14, "Times New Roman", clrRed);
   return(avg_price);
  }


 
EVGENII SHELIPOV #:

Rostislav, danke für den Tipp, aber ich mache etwas falsch.

Ich muss nur die 0Y-Achse ändern, aber die Beschriftung will sich nicht mit der horizontalen Linie vermählen.

Ich hänge den Code und einen Screenshot an. Können Sie mir sagen, wo der Fehler liegt?

Vergessen Sie die Klammern nicht.

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
   int x = 0, y = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
     {
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
      ObjectCreate("signal4",OBJ_LABEL,0,0,0,0,0);
      ObjectSet("signal4",OBJPROP_XDISTANCE,500);
      ChartTimePriceToXY(0, 0, 0,avg_price, x, y);
      ObjectSet("signal4",OBJPROP_YDISTANCE, y + 10);
      ObjectSetText("signal4","- Средняя цена сетки ордеров на покупку",14,"Times New Roman", clrLime);
     }
   if(ot==1)
     {
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed);
      ObjectCreate("signal3",OBJ_LABEL,0, 0, 0, 0, 0);
      ObjectSet("signal3",OBJPROP_XDISTANCE, 500);
      ChartTimePriceToXY(0, 0, 0, avg_price, x, y);
      ObjectSet("signal3",OBJPROP_YDISTANCE, y + 10);
      ObjectSetText("signal3","- Средняя цена сетки ордеров на продажу", 14, "Times New Roman", clrRed);
     }
   return(avg_price);
  }
 
Tretyakov Rostyslav #:

Vergessen Sie die Klammern nicht.

Nein, da fehlt noch etwas.

 
EVGENII SHELIPOV #:

Nein, es fehlt etwas anderes

Das Logbuch muss Fehler enthalten
 

Kopieren in ein Array

MqlRates CopySymb[];  
if(CopyRates(mSymbol,PERIOD_CURRENT,0,6,CopySymb)<0) return;
Print( ArrayMaximum(???) );

Wie ermittle ich die maximale Höhe in einem Array?

Grund der Beschwerde: