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

 

Diese Störung scheint aufzutreten, wenn andere Aufträge auf dem Markt sind, die jedoch eine andere Größe haben.

Angenommen, wir haben 4 Verkäufe von 1 Lot und 4 Käufe von 1 Lot. Und 1 kauft 0,5 Lose.

Wie lässt sich dies vermeiden? Ich denke, diese Funktion braucht eine Schleife.

 
EgorKim:

Diese Störung scheint aufzutreten, wenn andere Aufträge auf dem Markt sind, die jedoch eine andere Größe haben.

Angenommen, wir haben 4 Verkäufe von 1 Lot und 4 Käufe von 1 Lot. Und 1 kauft 0,5 Lose.

Wie lässt sich dies vermeiden? Vielleicht sollte in dieser Funktion eine Schleife enthalten sein.

Ich weiß nicht, wo die "drubashka" ist. Seine Spezialität ist es, sich durch die Standardbibliothek zu arbeiten. Ich weiß nicht, was es auswählt.

      if(m_position.SelectByIndex(i))

Und es wäre zu faul, das zu regeln.

Ich hätte die Lösung ein wenig anders angegangen. Ich würde zwei Arrays mit separaten Tickets für Kauf- und Verkaufspositionen erstellen und die Positionen in der zweiten Schleife paarweise schließen.

Oder wir können ein zweidimensionales Array erstellen. Allerdings muss man bei der Verteilung der Indizes sehr sorgfältig vorgehen. Damit es keine Lücken gibt...

 
Alexey Viktorov:

Irgendwo ist der Schlagzeuger verschwunden. Es ist seine Sache, sich durch die Standardbibliothek zu arbeiten. Ich weiß nicht, wofür er sich entscheidet.

Ja, und ich bin zu faul, es herauszufinden.

Ich hätte die Lösung ein wenig anders angegangen. Ich würde zwei getrennte Arrays mit Kauf- und Verkaufspositionstickets erstellen und sie in der zweiten Schleife paarweise schließen.

Oder wir können ein zweidimensionales Array verwenden. Aber ich muss bei der Verteilung der Indizes sehr genau aufpassen. Damit es keine Lücken gibt...

Ich habe selbst darüber nachgedacht. Können Sie den Code mit zwei Arrays teilen? Ich kann es nicht selbst tun.

Als vorübergehende Lösung habe ich eine begrenzte Schleife erstellt. Ich weiß nicht, ob dieser Code korrekt ist oder nicht, aber es könnte etwas sein. Es stimmt, es schließt seltsamerweise mit der Aufteilung der Lose.

Offenbar sollten sogar die Volumina der Zähler verglichen werden, um eine Aufspaltung zu vermeiden. Ich gebe auf.

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

Ich selbst habe darüber nachgedacht. Können Sie den Code mit zwei Arrays teilen?

Nein, und zwar aus mehreren Gründen.

1. Ich selbst verwende keine Gegenverschlüsse.

2. Es gibt keinen vorgefertigten Code, und es besteht auch nicht der Wunsch, ihn speziell zu schreiben.

3. Gestern hatte ich eine solche Idee. Gestern hatte ich eine solche Idee. Heute habe ich eine andere, und morgen, Gott bewahre, werde ich eine andere haben. Deshalb schreibe ich nur das, was mir gerade in den Sinn kommt.

Und der Hauptgrund ist, dass ich denke, dass es zwei große Unterschiede sind, wenn man jemandem hilft und die Arbeit eines anderen macht.

Ich kann nur helfen. Aber ich kann Ihnen nicht helfen, ich benutze fast keine Standardbibliothek und um Ihren Code zu verstehen, muss ich SB verstehen.

 

Hallo zusammen

Können Sie mir ein Beispiel für einen Indikator oder eine Funktion nennen, mit der Sie einen Indikator erstellen können, der das Ergebnis nur in einem bestimmten Bereich auf dem Diagramm anzeigt?

Zum Beispiel von 1:00 bis 2:35 Endzeit, Und diese Wahl sollte mit der Maus direkt auf dem Diagramm gemacht werden.


Ich muss insbesondere die Anzahl der Bar- oder Verkaufskerzen im ausgewählten Bereich zählen.

 
Milhail Novgorodcev:

Hallo zusammen

Können Sie mir ein Beispiel für einen Indikator oder eine Funktion nennen, mit der Sie einen Indikator erstellen können, der das Ergebnis nur in einem bestimmten Bereich auf dem Diagramm anzeigt?

Zum Beispiel von 1:00 bis 2:35 Endzeit, Und diese Wahl sollte mit der Maus direkt auf dem Diagramm gemacht werden.


Ich muss insbesondere die Anzahl der Kauf- oder Verkaufskerzen im ausgewählten Bereich zählen.

Das erste, was mir in den Sinn kam:

  • ein Skript, zwei Eingabeparameter - Zeit von- und Zeit bis-
  • ein Rechteck wird manuell gezeichnet und das Skript sollte mit dem Namen des Rechtecks in den Eingabeparametern gestartet werden
  • einen Expert Advisor oder einen Indikator, der die Erstellung eines Rechtecks mit einem bestimmten Namen verfolgt ...

 
Milhail Novgorodcev:

Hallo zusammen

Können Sie mir ein Beispiel für einen Indikator oder eine Funktion nennen, mit der Sie einen Indikator erstellen können, der das Ergebnis nur in einem bestimmten Bereich auf dem Diagramm anzeigt?

Zum Beispiel von 1:00 bis 2:35 Endzeit, Und diese Wahl sollte mit der Maus direkt auf dem Diagramm gemacht werden.


Ich muss insbesondere die Anzahl der Kauf- oder Verkaufskerzen im ausgewählten Bereich zählen.

Was ist das Problem?

In OnChartEvent () wird abwechselnd zwei Variablen die Zeit des Mausklicks an zwei Punkten zugewiesen (nicht die aktuelle Zeit, sondern die Zeit des Balkens, auf den Sie geklickt haben) und, sofern beide Variablen nicht Null sind, dieser Bereich berechnet. Nach der Ausgabe dieser Variablen werden sie auf Null zurückgesetzt und warten auf den nächsten Mausklick.

Das einzige Problem, das ich sehe, ist, wie man den ersten Klick rückgängig machen kann, wenn man ihn aus Versehen gemacht hat. Aber ich denke, es ist möglich, sich etwas einfallen zu lassen, nachdem man die Dokumentation gelesen hat. Zum Beispiel, wenn Sie eine Taste drücken oder mit dem Mausrad scrollen...

 

Bitte um Hilfe!

Ich bin es leid, das Skript zu reparieren, um Screenshots im Verlauf zu machen. Das Skript soll jeden Tag bis 8 Uhr morgens blättern und einen Screenshot machen.

Das Skript funktioniert nicht so, wie es sollte.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

Bitte um Hilfe!

Ich bin es leid, das Skript zu reparieren, um Screenshots im Verlauf zu machen. Das Skript soll jeden Tag bis 8 Uhr morgens blättern und einen Screenshot machen.

Das Skript funktioniert nicht so, wie es sollte.

Bislang funktioniert die Bildlauffunktion nur unregelmäßig (oder besser gesagt: unvorhersehbar). Der Verwalter kümmert sich um die Angelegenheit.

 
Vladimir Karputov:

Bislang funktioniert die Bildlauffunktion nicht richtig (oder eher unvorhersehbar). Der Verwalter kümmert sich um die Angelegenheit.

Ich danke Ihnen!