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

 

Ich habe einen Code mit Klassen mit Info-Panel!!!
ABER ich habe ein Problem!
Ich habe ein Label darauf und ich kann es durch Remote-Einstellungen reagieren.... Wenn man also die Einstellungen 2-3 Mal ändert, bewegt sich das Panel selbst in verschiedene Richtungen!!! und wenn man den Zeitrahmen 2-3 Mal ändert!!! wie kann ich das loswerden???


ein wenig mehr Informationen:
Ich habe in der Datei Dialog.mqh in der Funktion CAppDialog::Destroy(const int reason) folgende Zeilen auskommentiert
if(m_deinit_reason!=WRONG_VALUE)
Rückkehr;
dann wird das Panel normalerweise zerstört und beim Wechsel des Zeitrahmens neu gestartet.

Dateien:
TradePanel.mq4  15 kb
 

Hallo. Ich schreibe einen MT4-Indikator, der nur mit grafischen Objekten arbeitet und auch die Position von grafischen Objekten verfolgt, die von demselben Indikator in einer anderen Periode erstellt wurden. Wenn ich die vertikale Linie der Hauptperiode manuell verschiebe, werden die Trendlinien ab der neuen Position der vertikalen Linie der Hauptperiode neu gezeichnet, und auch die vertikale Linie der Nebenperiode wird neu gezeichnet. All dies wird im OnChartEvent-Ereignis behandelt. Das Problem ist, dass beim Verschieben der vertikalen Linie einer Hoch-Periode manchmal Objekte einer Tief-Periode nicht sofort neu gezeichnet werden, sondern erst, wenn ich auf die vertikale Linie eines Indikators doppelklicke, der auf einer Hoch-Periode arbeitet, werden sie neu gezeichnet. Und auf einem anderen, leistungsfähigeren PC passiert das weniger oft. Ich wende die Funktion ChartRedraw() im Code an, nachdem ich die Objekte neu gezeichnet habe.

Könnte es an den fehlenden PC-Ressourcen liegen?

Ich möchte versuchen, die Indikatoren auf verschiedenen Charts laufen zu lassen und EventChartCustom zu verwenden, um ein benutzerdefiniertes Ereignis von dem Indikator, der auf einer höheren Periode arbeitet, zu dem zweiten Indikator zu erzeugen. Vielleicht beschleunigt dies die Ausführung des Programms?

 

Wie kann ich alle Elemente einer Struktur schnell auf Null setzen (löschen)?


Die Struktur ist global. Zu bestimmten Zeitpunkten muss er gelöscht werden, um später mit neuen Daten gefüllt zu werden.

Ich verstehe, dass man Element für Element alles mit Null gleichsetzen kann. Gibt es einen anderen Weg?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Wir brauchen etwas wie dies

a = 0; // alle Elemente in der Struktur sind Null

 
Sergey Likho:

Wie kann ich alle Elemente einer Struktur schnell auf Null setzen (löschen)?


Die Struktur ist global. Zu bestimmten Zeitpunkten muss er gelöscht werden, um später mit neuen Daten gefüllt zu werden.

Ich verstehe, dass man Element für Element alles mit Null gleichsetzen kann. Gibt es einen anderen Weg?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Wir brauchen etwas wie dies

a = 0; // alle Elemente der Stahlstruktur sind Null

ZeroMemory(a);
 
hat jemand einen Trailing-Handel, der nach N Pips auslöst und dann nach dem Preis geht?
Ich habe eine, aber sie löst nach N Pips aus und stoppt beim Break-Even....
Reparieren Sie es bitte, ich bin nicht bei Sinnen!!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}
 
ponochka:
hat jemand ein Schleppnetz, das nach N Pips auslöst und dann nach dem Preis geht?
Ich habe eine, aber es funktioniert nach N Pips und stoppt bei Breakeven....
Reparieren Sie es bitte, ich habe den Verstand verloren!!!

hier funktioniert mein Schleppnetz, es funktioniert:

//____________________________________________________________________________________
bool trailingpos(int magic_,int trail_p){
   string sym=Symbol(); bool res = true; double sl,slnew,tpips = trail_p*Point; int i,k=OrdersTotal();
   for(i=0;i<k;i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==sym && OrderMagicNumber()==magic_){
            switch(OrderType()){
               case OP_BUY:
                           slnew = NormalizeDouble(Ask - tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice() <slnew)
                              if((sl < slnew) || (sl == 0.0)){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
               case OP_SELL:
                           slnew = NormalizeDouble(Bid + tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice()> slnew)
                              if((sl > slnew) || sl ==0.0){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
              }
           }
        }
     }
return(res);}
//____________________________________________________________________________________

Aufruf der Funktion 2 Parameter magische Zahl und Schleppnetz np

 
Sergey Likho:

Wie kann ich alle Elemente einer Struktur schnell auf Null setzen (löschen)?


Die Struktur ist global. Zu bestimmten Zeitpunkten muss er gelöscht werden, um mit neuen Daten gefüllt zu werden.

Ich verstehe, dass man Element für Element alles mit Null gleichsetzen kann. Gibt es einen anderen Weg?

// Обнуляет любую простую структуру
template <typename T>
void SetNull( T &Value )
{
  static T NullValue = {0};
  
  Value = NullValue;
}
 

Hallo! Gibt es einen Code für den Gesamteinkommen für alle Bestellungen an einem Tag?

Ich habe eine:

double getProfitFromTime(datetime time)
  {
   double profit = 0;
   
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
        {
         if(OrderCloseTime() < time)
            break;
         
         profit += OrderProfit() + OrderCommission() + OrderSwap();
        }
   
   return(profit);
  }

Es wird folgendermaßen bezeichnet:

getProfitFromTime(iTime(NULL, PERIOD_D1, 0);

Kann ich es in irgendeiner Weise ändern, so dass ich den Gewinn für ein Währungspaar an einem Tag und den Gesamtgewinn für alle Währungspaare sehen kann?

 
ponochka:

und insgesamt für alle Währungspaare?

Entfernen SieOrderSymbol() == Symbol() aus der Bedingung:

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
dann zählt dieser Teil des Codes alle Aufträge in der Terminal-Historie nur dann nach der magischen Zahl, wenn die magische Zahl für verschiedene Währungen gleich ist; wenn SieOrderMagicNumber() == magic entfernen, werden alle Aufträge ohne Berücksichtigung der magischen Zahl gezählt
 

Hallo zusammen. Ein Ratschlag für Neueinsteiger. Ich möchte ein wenig über das Ausbreitungsverhalten recherchieren. Ich habe einen Code, der die Gesamtspanne berechnet. Alles ist geschrieben, alles funktioniert gut.

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time[0];
  
  return;
}

Ich möchte die Momente entfernen, in denen der Spread keine Bewegungen ausführt, d.h. Geld- und Briefkurs sich nicht ändern.
Ich tue dies:

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  if ((prevsbid == Bid)) && (prevsask == Ask))return;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask;
  prevsbid = Bid;
  PrevTime = Time[0];
  return;
}

Aber es ändert sich nichts. Wo bin ich zu langsam?

Grund der Beschwerde: