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

 

Hallo! Ich brauche eure Hilfe, liebe Forumsmitglieder. Ich schreibe gerade einen Indikator. Ich brauche eine Öffnungszeit der zu bearbeitenden Bar. Es scheint, dass diese Zeit in time[] gespeichert werden sollte, aber das ist unsinnig.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---check for rates total


   if(rates_total<2)
      return(0);
//--- starting work
   int start=prev_calculated-1;
//--- correct position
   if(start<1) start=1;
//--- main cycle

CalculateVolume(start,rates_total,time);


//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateVolume(const int nPosition,
                     const int nRatesCount,
                     const long &tim[],
                     )
  {
  
MqlDateTime dat1;


for(int j=nPosition;j<nRatesCount && !IsStopped();j++)
{
    TimeToStruct(tim[j],dat1);

    Print("год ",dat1.year," ",dat1.day," ",dat1.hour," ",dat1.min)


 }
} 

2017.11.20 17:48:01.590 (RTS-12.17,M1) Jahr 2016 29 15 26

2017.11.20 17:48:01.734 (RTS-12.17,M1) Jahr 2016 29 15 27

2017.11.20 17:48:01.878 (RTS-12.17,M1) Jahr 2016 29 15 29

2017.11.20 17:48:02.022 (RTS-12.17,M1) Jahr 2016 29 15 33

2017.11.20 17:48:02.165 (RTS-12.17,M1) Jahr 2016 29 15 45

2017.11.20 17:48:02.310 (RTS-12.17,M1) Jahr 2016 29 21 12

2017.11.20 17:48:02.454 (RTS-12.17,M1) Jahr 2016 1 20 54

2017.11.20 17:48:02.599 (RTS-12.17,M1) Jahr 2016 2 12 52

2017.11.20 17:48:02.743 (RTS-12.17,M1) Jahr 2016 2 22 28

2017.11.20 17:48:02.887 (RTS-12.17,M1) Jahr 2016 2 23 20

2017.11.20 17:48:03.031 (RTS-12.17,M1) Jahr 2016 3 11 47

2017.11.20 17:48:03.175 (RTS-12.17,M1) Jahr 2016 3 22 34

2017.11.20 17:48:03.320 (RTS-12.17,M1) Jahr 2016 3 22 35

2017.11.20 17:48:03.463 (RTS-12.17,M1) Jahr 2016 4 21 56

2017.11.20 17:48:03.609 (RTS-12.17,M1) Jahr 2016 4 23 32

Es scheint, als gäbe es nur wenige Bars pro Tag. Kannst du mir einen Tipp geben, mein Gehirn ist schon ganz durcheinander.

 
fxsaber:

Ja, aber schief.

pivomoe:
Auf den ersten Blick funktioniert CopyTick im Testgerät. Gibt es irgendwelche bekannten Fehler im CopyTicks-Betrieb im Tester? CopyTicksRange funktioniert im echten Leben ohne Bugs?

Im nächsten Build werden die Entwickler die korrekte Anzeige der TRADE-Flags im Tester vornehmen.

fxsaber:

Es gibt einen Fehler bei den Tickzeiten im Tester. Wir müssen jedes Mal einen bestimmten Wert subtrahieren. SD ist sich des Problems bewusst.

Können Sie dies näher erläutern?
 
Ich untersuche die Struktur der Handelsanfrage (MqlTradeRequest) in verschiedenen Varianten. Ich habe den vorgefertigten Expert Advisor my_first_ea.mq5 von https://www.mql5.com/ru/articles/100 genommen und versucht, die Bedingung zu ändern, um eine Position bei der SAR-Kreuzung im Quellcode zu öffnen - es hat funktioniert. Dann fügte ich den Trailing-Code (Änderung/Änderung der Position durch SAR) von MQL5 über die MqlTradeRequest-Struktur hinzu, aber es kam der Fehler [Ungültige Stops]. Ich glaube, dass mit dem Antrag etwas nicht stimmt. Kurz gesagt, ich bin beim Studium der Positionsänderung stecken geblieben. Ich verstehe nicht wirklich, was ich falsch mache.
Dateien:
SAR_SAR.mq5  27 kb
 
Alexey Kozitsyn:

Können Sie das näher erläutern?

void OnTick()
{
  MqlTick Ticks[];
  
  if (CopyTicksRange(_Symbol, Ticks) != -1)
  {
    ArrayPrint(Ticks);              
    
    ExpertRemove();
  }
}
 
Vielen Dank für Ihre Hilfe, so viele sind bereit zu helfen!!!!!!!!!!!! Ich bin es leid, die Kommentare zu meinem Code zu lesen..............
 
DCodec:
Vielen Dank für Ihre Hilfe, so viele sind bereit zu helfen!!!!!!!!!!!! Ich bin es leid, die Kommentare zu meinem Code zu lesen..............
Kein Code, keine Kommentare.
 

Bitte teilen Sie mir mit, wie ich die Preisstufe (in der Spezifikation "Teakholzgröße") herausfinden kann?

 
Aleksey Vyazmikin:

Bitte teilen Sie mir mit, wie ich die Preisstufe (in der Spezifikation "Teakholzgröße") herausfinden kann?

ht

 
Vladislav Andruschenko:
ht


Ich danke Ihnen! Ich habe gesucht und konnte es nicht finden...

Dann die nächste Frage, sagen wir, der Schritt ist 25, dann, wie zu arrangieren Rundung auf eine Zahl teilbar durch 25, vielleicht gibt es eine Funktion?

 
Aleksey Vyazmikin:

Ich danke Ihnen! Ich habe gesucht und konnte es nicht finden...

Dann die nächste Frage, sagen wir, der Schritt ist 25, dann, wie zu arrangieren Rundung auf eine Zahl teilbar durch 25, vielleicht gibt es eine Funktion?


Ich habe eine Funktion erstellt, die zu funktionieren scheint

//+------------------------------------------------------------------+
//|Функция округления числа до кратного целого                       |
//+------------------------------------------------------------------+
double Okr(double cifra)
  {
     double TickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
     double Okruglenie=NormalizeDouble(cifra/TickSize,_Digits)*TickSize;
     Print ("До кратного округления=",DoubleToString(cifra,_Digits), " После кратного округления=",DoubleToString(Okruglenie,_Digits));
     return(Okruglenie);
  }