Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 52

 
ilnur17021992:
Kann das Preisschild(OBJ_ARROW_LEFT_PRICE) anstelle des Preises einen eigenen Text haben, wenn ja, wie?
ObjectCreate(Name,OBJ_TEXT,Window,aTime,aPrice);
 
Guten Tag, kann mir jemand erklären, warum die Kurse in den H4- und M15-Charts nicht übereinstimmen? Im Screenshot auf M15 hat der Kurs die rote Linie (links von der vertikalen Linie) überschritten. Und eine Minute später gibt es einen Screenshot von H4, wo der Preis noch sehr weit davon entfernt ist (rechts von der Linie).
Und hier in diesem Programm hat nur ein anderes dtz einen Schatten der Kerze (die Kerze ist ganz außen rechts)
 
Equal:
Guten Tag, kann mir jemand erklären, warum die Kurse in den H4- und M15-Charts nicht übereinstimmen? Im Screenshot auf M15 hat der Kurs die rote Linie (links von der vertikalen Linie) überschritten. Und eine Minute später gibt es einen Screenshot von H4, wo der Preis noch sehr weit davon entfernt ist (rechts von der Linie).
Und hier ist der Screenshot dieses Programms, aber ein anderes dtz hat einen Schatten der Kerze (die Kerze ist ganz außen auf der rechten Seite)
Ist es neu für Sie, dass die Angebote der verschiedenen Maklerunternehmen unterschiedlich sind? Sie sind sogar für Demo und Real in ein und demselben Maklerunternehmen unterschiedlich! Was für eine Überraschung (:
 

Versucht, etwas Ähnliches zu schreiben:IceFX DrawProfit

Code:

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

Alles funktioniert, aber ich bin mit einem Grid-Advisor, die im Moment deckt ein Bündel von Aufträgen und als Ergebnis der Gewinn überschneidet sich gegenseitig, ich möchte den Gewinn dieser geschlossenen Bündel summiert werden und nur der Betrag angezeigt (wie inIceFX DrawProfit Indikator implementiert), anstatt separat für jede Bestellung, wie ich jetzt habe. Hilf mir, es richtig zu machen :)


Dateien:
 
Vitalie Postolache:
Ist es neu für Sie, dass die Angebote der verschiedenen Maklerunternehmen unterschiedlich sind? Ja, sie sind sogar für den Demo- und den realen Handel bei ein und demselben Maklerunternehmen unterschiedlich! Was für eine Überraschung (:
Die Überraschung ist anders. Es handelt sich um ein und dasselbe reale Konto, und der Preis ändert sich (nicht derselbe) nur durch den Wechsel zu einem anderen Zeitrahmen.
Bei einer anderen Maklerfirma ist auch auf einem echten Konto beim Ändern des Diagramms alles in Ordnung! Die Tatsache, dass verschiedene Preise unterschiedlich sind, ist klar, es ist nicht klar, dass man sozusagen zwei Preise auf einmal hat, einer auf die Minuten, einer auf die Stunden ist unterschiedlich (sehr unterschiedlich). Ich verstehe, dass es nicht so sein sollte, aber ich frage mich, wo das Problem liegen könnte. Übrigens die Kerze "korrigiert" in etwa eine Stunde nach der Eröffnung des nächsten.
 
ilnur17021992:

Versucht, etwas Ähnliches zu schreiben:IceFX DrawProfit

Code:

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

Alles funktioniert, aber ich bin mit einem Grid-Advisor, die im Moment deckt ein Bündel von Aufträgen und als Ergebnis der Gewinn überschneidet sich gegenseitig, ich möchte den Gewinn dieser geschlossenen Bündel summiert werden und nur der Betrag angezeigt (wie inIceFX DrawProfit Indikator implementiert), anstatt separat für jede Bestellung, wie ich jetzt habe. Hilf mir, es richtig zu machen :)


Der Gewinn wird in einem separaten Zyklus berechnet.
 
Alekseu Fedotov:
Der Gewinn zählt in einem separaten Zyklus
Welcher ist es? Woher weiß ich, dass bestimmte Aufträge eine Gruppe sind und ihre Gewinne addiert werden müssen?
 
ilnur17021992:
Welche ist es? Wie stelle ich fest, dass bestimmte Aufträge eine Gruppe bilden und ihr Gewinn summiert werden soll?
Und wie werden sie geschlossen, als Gruppe durch eine Funktion oder auf eine andere Weise?
 
Vitaly Muzichenko:
Wie werden sie geschlossen, werden sie als Gruppe durch eine Funktion oder auf andere Weise geschlossen?
Die Orders werden vom Robot Netmaker eröffnet, für die gesamte Gruppe wird ein gemeinsamer TP berechnet und festgelegt, mit dem sie dann geschlossen werden.


Ich füge ein Bildschirmfoto bei:
 
ilnur17021992:
Die Orders werden vom Netmaker-Roboter eröffnet, für die gesamte Gruppe wird ein gemeinsamer TP berechnet und gesetzt, zu dem sie dann geschlossen werden.

Screenshot im Anhang:

Das geht so:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TotalPos=-1;
void OnTick()
{
 // остальной код

//--
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();

      ...
     }
  }}} TotalPos=OrdersTotal(); // запомним количество

//--
}

//+------------------------------------------------------------------+
//| Create Object istory                                             |
//+------------------------------------------------------------------+
void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",/*White*/clrBlack);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}