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

 
Alexey Viktorov #:

Valery, achten Sie auf die Zeile

in meinem Code... Ich verwende schon seit einer Weile Hex-Funktionen, aber eine ähnliche Funktion

gab eine schale 0.

Also, denken Sie, wo die Kakerlaken sind... Und da mt4 sich weigert, es zu unterstützen, können Sie davon ausgehen, dass es nie behoben werden...

Alles andere muss geprüft werden. Ich habe mich schon so lange nicht mehr darum gekümmert, dass ich mich gar nicht mehr daran erinnern will.

Hmmm... Die Zeit wird emuliert) Ich werde mich damit befassen müssen)

int sd;
/*******************Expert initialization function*******************/
int OnInit()
 {
  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  datetime lt = iTime(_Symbol, PERIOD_M15, 0);
  static datetime ct = 0;
  if(ct != lt)
  {
   ct = lt;
   Print(DoubleToString(iMA("EURJPY", PERIOD_M15, 21, 0, MODE_SMA, PRICE_CLOSE, 0), sd),
    " Time[0] ",TimeToStr( Time[0])," iTime(EURJPY,0,0) ",TimeToStr(iTime("EURJPY",0,0)));
  }

Ergebnis

2021.09.21 15:30:48.696 2021.08.13 20:15:00  testMulti EURUSD,M15: 129.482 Time[0] 2021.08.13 20:15 iTime(EURJPY,0,0) 2021.08.13 20:15
2021.09.21 15:30:48.632 2021.08.13 20:00:00  testMulti EURUSD,M15: 129.495 Time[0] 2021.08.13 20:00 iTime(EURJPY,0,0) 2021.08.13 20:00
2021.09.21 15:30:48.568 2021.08.13 19:45:00  testMulti EURUSD,M15: 129.512 Time[0] 2021.08.13 19:45 iTime(EURJPY,0,0) 2021.08.13 19:45
2021.09.21 15:30:48.504 2021.08.13 19:30:00  testMulti EURUSD,M15: 129.527 Time[0] 2021.08.13 19:30 iTime(EURJPY,0,0) 2021.08.13 19:30
2021.09.21 15:30:48.440 2021.08.13 19:15:00  testMulti EURUSD,M15: 129.539 Time[0] 2021.08.13 19:15 iTime(EURJPY,0,0) 2021.08.13 19:15

ZZY arbeitet daran, Balkendaten von anderen Zeichen zu erhalten)))) Aber die Geschichte muss speziell geladen werden, geht außerhalb des Arrays nur so auf ein ungeladenes Instrument oder fordert Daten von einem entfernten Balken an.

ZS ZS

Funktioniert wirklich!!! Ich musste die Kursarchive aller !!! notwendigen Währungspaare hochladen und es funktioniert auf einer Minute vom 21. Juni, auf den älteren und späteren Starts)

 
giros #:

Können Sie vorschlagen, wo ich MQL5 (auf Russisch) lernen kann?

Hier. Ich habe nichts anderes gelesen.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Hallo. Ich versuche, den Eröffnungskurs des vorletzten Auftrags zu finden, aber es funktioniert gut, wenn es keine Verkaufsaufträge gibt. Können Sie mir sagen, was der Fehler ist? Ich glaube, sie werden auch mitgezählt. MQL4

 
makssub #:


Hallo. Ich versuche, den Eröffnungskurs des vorletzten Auftrags zu finden, aber es funktioniert gut, wenn es keine Verkaufsaufträge gibt. Können Sie mir sagen, was der Fehler ist? Ich glaube, sie werden auch mitgezählt. MQL4

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
Valeriy Yastremskiy #:


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Ich danke Ihnen. Erneut geprüft, zählt immer noch Verkaufen(

 
makssub #:


Ich danke Ihnen. Erneut geprüft, zählt immer noch Verkaufen(

Wahrscheinlich, weil Sie von der Gesamtzahl der Bestellungen abziehen.

OrdersTotal()- 2 

und schauen nur in

OP_BUY
 
makssub #:


Ich danke Ihnen. Erneut geprüft, zählt immer noch Verkaufen(

Vor dem zweiten "wenn" und innerhalb des zweiten "wenn" werden die Nummer, der Fahrschein und die Auftragsart ausgedruckt.

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print("Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print("Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

Es gibt zwei Konstrukteure. Wenn ich den ersten Konstruktor vom zweiten Konstruktor aus aufrufe und Werte für die Variablen oben setze, werden diese Variablen auf NULL gesetzt, wenn ich zum zweiten Konstruktor zurückkehre.
Aber wenn ich den Code vom ersten Konstruktor in den zweiten Konstruktor kopiere und ihn nicht aufrufe, funktioniert alles. Was ist das Problem?

CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL;
   nextWave = NULL;
   name = namePref+"_"+TimeToString(startTime, TIME_DATE|TIME_MINUTES);
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this.prevWave = prevWave;
   prevWave.nextWave = &this;
  }
 
Roman Sharanov NULL, wenn ich zum zweiten Konstruktor zurückkehre.
Aber wenn ich den Code vom ersten Konstruktor in den zweiten kopiere und ihn nicht aufrufe, funktioniert alles. Was ist das Problem?


Das Problem liegt in MQL.

In solchen Situationen lege ich die Initialisierung in eine separate Methode, die ich aus verschiedenen Konstruktoren ziehe.

---

Außerdem gibt es ein Problem mit dem Aufruf des übergeordneten Konstruktors.

 
Valeriy Yastremskiy #:

Drucken Sie vor dem zweiten if und innerhalb des zweiten if die Nummer, den Fahrschein und den Auftragstyp.

Ich danke Ihnen. Ich werde es mir heute noch einmal ansehen.

Grund der Beschwerde: