Fragen von einem "Dummy" - Seite 200

 

Es gibt also eine Funktion für die Zeitmessung der Öffnung einer Bar (auch wenn die Bar in der Zukunft liegt)

//+---------------------------------------------------------------------------+
//| Получение точного времени открытия                                        |
//|Input:                                                                     |
//|1) Время, которое необходимо округлить до ближайшего времени открытия бара |
//|2) Переменная для вывода результата                                        |
//|3) Период ТФ                                                               |
//|4) Отклонение влево-вправо                                                 |
//|Возврат: количество элементов(1), 0 если не скопировано, (-1) если ошибка  |
//+---------------------------------------------------------------------------+
int GetSingleBarOpenTime(datetime Time,datetime &Output,ENUM_TIMEFRAMES nPeriod,int Shift=0) export
  {
   datetime OpenTime[1];
   int Count=0;
// если бар существует то используем стандартную процедуру поиска времени открытия
   if(Time<=TimeCurrent() && Shift==0)
     {
      Count=CopyTime(Symbol(),nPeriod,Time,1,OpenTime);
      if(Count==0)
        {
         Print("GetCorrectOpenTime CopyTime elements=0");
         return(0);
        }
      else if(Count<0)
        {
         Print("GetCorrectOpenTime error "+(string)GetLastError());
         return(Count);
        }
      else
        {
         Output=OpenTime[0];
         return(Count);
        }
     }
//если бар находится в будущем то используем следующую процедуру
   else
     {
      MqlDateTime sTime;
      // NumOfUnits - количество стандартных единиц
      int NumOfUnits=0; 
      int ToRnd;
      TimeToStruct(Time,sTime);
      //Единица измерения(1-минута, 2 - час, 3 - день, 4 - неделя(но используются дни), 5 - месяц)
      short Unit=0;
      //в зависимости от ТФ инициализируются параметры
      switch(nPeriod)
        {
         case PERIOD_M1:   {Unit=1;NumOfUnits=1;break;}
         case PERIOD_M2:   {Unit=1;NumOfUnits=2;break;}
         case PERIOD_M3:   {Unit=1;NumOfUnits=3;break;}
         case PERIOD_M4:   {Unit=1;NumOfUnits=4;break;}
         case PERIOD_M5:   {Unit=1;NumOfUnits=5;break;}
         case PERIOD_M6:   {Unit=1;NumOfUnits=6;break;}
         case PERIOD_M10:  {Unit=1;NumOfUnits=10;break;}
         case PERIOD_M12:  {Unit=1;NumOfUnits=12;break;}
         case PERIOD_M15:  {Unit=1;NumOfUnits=15;break;}
         case PERIOD_M20:  {Unit=1;NumOfUnits=20;break;}
         case PERIOD_M30:  {Unit=1;NumOfUnits=30;break;}
         case PERIOD_H1:   {Unit=2;NumOfUnits=1;break;}
         case PERIOD_H2:   {Unit=2;NumOfUnits=2;break;}
         case PERIOD_H3:   {Unit=2;NumOfUnits=3;break;}
         case PERIOD_H4:   {Unit=2;NumOfUnits=4;break;}
         case PERIOD_H6:   {Unit=2;NumOfUnits=6;break;}
         case PERIOD_H8:   {Unit=2;NumOfUnits=8;break;}
         case PERIOD_H12:  {Unit=2;NumOfUnits=12;break;}
         case PERIOD_D1:   {Unit=3;NumOfUnits=1;break;}
         case PERIOD_W1:   {Unit=4;NumOfUnits=7;break;}
         case PERIOD_MN1:  {Unit=5;NumOfUnits=1;break;}
         default:         {Print("Period is unknown"); break;}
        }
      // Если ТФ - минуты, то
      if(Unit==1)
        {
         sTime.sec=0;
         //Остаток от деления
         ToRnd=(int)fmod(sTime.min,NumOfUnits);
         Time=StructToTime(sTime);
         // Округление до ближайшего времени открытия(пример: если сейчас 14:25, и тф 2min, то ближайщее время открытия бара - 14:24)
         Time-=(ToRnd*60);
         Time+=(NumOfUnits*Shift*60);

        }
      else if(Unit==2)
        {
         sTime.sec=0;
         sTime.min=0;
         ToRnd=(int)fmod(sTime.hour,NumOfUnits);
         Time=StructToTime(sTime);
         Time-=(ToRnd*60*60);
         Time+=(NumOfUnits*Shift*60*60);
        }
      else if(Unit==3)
        {
         sTime.hour=0;
         sTime.min=0;
         sTime.sec=0;
         ToRnd=(int)fmod(sTime.day,NumOfUnits);
         Time=StructToTime(sTime);
         int hds;
         hds=sTime.day_of_week;
         if (hds==0) hds=7;
         hds=floor((hds+Shift)/7)*2;
         int ti=Shift+hds;
         while (hds>7)
         {
            hds=(floor(hds/7))*2;
            ti+=hds;
         }
         Print(ti);
         Time-=(ToRnd*60*60*24);
         Time+=(NumOfUnits*Shift*60*60*24);
        }
      else if(Unit==4)
        {
         sTime.hour=0;
         sTime.min=0;
         sTime.sec=0;
         ToRnd=(int)fmod(sTime.day,NumOfUnits);
         Time=StructToTime(sTime);
         Time-=(ToRnd*60*60*24);
         Time+=(NumOfUnits*Shift*60*60*24);
        }
      else if(Unit==5)
        {
         sTime.sec=0;
         sTime.min=0;
         sTime.hour=0;
         sTime.day=1;
         sTime.mon=sTime.mon-(int)fmod(sTime.mon,NumOfUnits)+(NumOfUnits*Shift);
         while(sTime.mon<1)
           {
            sTime.year--;
            sTime.mon=12+sTime.mon;
           }
         while(sTime.mon>12)
           {
            sTime.year++;
            sTime.mon=sTime.mon-12;
           }
         if(sTime.sec<0)
            Print("GetSingleBarOpenTime seconds error");
         if(sTime.min<0)
            Print("GetSingleBarOpenTime minutes error");
         if(sTime.hour<0)
            Print("GetSingleBarOpenTime hours error");
         if(sTime.day<1)
            Print("GetSingleBarOpenTime days error");
         if(sTime.mon<0)
            Print("GetSingleBarOpenTime months error");
         if(sTime.year<1970)
            Print("Year < 1970");
         Time=StructToTime(sTime);
        }
      Output=Time;
      return(1);
     }
  }

Das Problem mit Shift ist, dass es jetzt nicht mehr nach der Anzahl der Balken, sondern nach der Anzahl der Tage verschoben wird (es ist egal, ob auf D1 oder D1; die Hauptsache ist, D1 zu verstehen). Also ich denke, ich habe es in meinem Kopf, dass ich die Anzahl der daysTotal von Schicht (Anzahl der Wochentage) und den aktuellen Tag der Woche überprüfen können, aber welche Formel zu verwenden - ich kann nicht bestimmen.

Anmerkung: in Unit=3 versucht, es zu tun (bisher erfolglos)

Bitte um Hilfe.

 
victorva: die Handelsanfrage gibt den Fehler 10016 ("falsche Stops"). Worin sind sie falsch?

1. Fügen Sie den Code korrekt ein (Strg+Alt+M).

void OnTick()
  {
   MqlTick last_tick={0};                       // предопределенная структура для получения текущих данных рынка
   SymbolInfoTick("EURUSD",last_tick);          // инструмент: указывать обязательно
   double Bid = last_tick.bid;                         // Текущая цена Bid
   MqlTradeRequest request={0};                 
   MqlTradeResult result={0};                 
   request.action=TRADE_ACTION_DEAL;           
   request.magic=555;                          
   request.symbol="EURUSD";
   request.volume=1.0;                  
   request.deviation=0;                 
   request.type=ORDER_TYPE_BUY;                        
   request.sl=Bid-300*_Point;                         // Уровень Stop Loss ордера
   request.tp=Bid+1000*_Point;                    // Уровень Take Profit ордера
   OrderSend(request,result);
   Comment("retcode = ",result.retcode);
  }
2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das obligatorische Feld request.price enthält (das Fehlen eines solchen Feldes ist nur für den Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
victorva:

die Handelsabfrage ergibt den Fehler 10016 ("falsche Stops"). Was machen sie falsch?


request.sl=Bid-300*_Point; // Stop Loss Level der Order
request.tp=Bid+1000*_Point; // Höhe der Take Profit Order

Sie sind nämlich nicht normalisiert. (verwenden Sie die Schaltfläche SRC, um den Code einzufügen).

  request.sl=NormalizeDouble(Bid-300*_Point,_Digits);   // Уровень Stop Loss ордера
  request.tp=NormalizeDouble(Bid+1000*_Point,_Digits);  // Уровень Take Profit ордера
 

Überprüfung der Funktionalität des automatischen Einfügens von Links

1. Вставляйте код правильно (Ctrl+Alt+M).

 
Yedelkin:

1. Fügen Sie den Code korrekt ein (Strg+Alt+M).

2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das Pflichtfeld request.price enthält (das Fehlen eines solchen Feldes ist nur im Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.

Ich danke Ihnen. Setzen Sie den Preis ein, es funktioniert.

 

Bitte helfen Sie mir, ich kann nichts verstehen.

|9|8|7|6|5|4|3|2|1|0| <-- Zeitreihe Raten

CopyRates(Symbol(),Zeitraum(),Zeit,2,Ergebnis);

Ich habe zum Beispiel den Zeitpunkt der Kerze Nr. 3 angegeben. In diesem Fall erhalte ich die Kurse der Leuchter Nr. 3 und Nr. 4 zurück. Aber wie bekommt man die Kurse der Leuchter Nr. 3 und Nr. 2, wenn man eine offene Zeit des Leuchters Nr. 3 hat. Die negative Zahl wird nicht verdaut.

Ich hatte die Idee, einen Index von Sorten zu finden, aber um das zu tun, muss ich alle Elemente aus dem aktuellen kopieren, aber, Donnerwetter, wenn ich M1 und eine Bar 10 Jahre alt habe, dann ist das Array zu groß.

Vielen Dank im Voraus

 

Guten Tag!

Könnten Sie bitte erklären, in welchen Einheiten der Datenverkehr auf der Registerkarte "Dienste" von MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712) gemessen wird? Wird es in KiloBytes|MegaBytes oder KiloBytes|MegaBytes gemessen?

Ich danke Ihnen.

 

Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?

p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...

 
storm:

Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?

p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...

Ich habe es gefunden, sie haben es bereits geschrieben, z**** , ich brauche es zumindest nicht selbst zu schreiben. https://www.mql5.com/ru/code/1055
MultiCurrency
MultiCurrency
  • Stimmen: 9
  • 2012.09.14
  • Nikolay Kositsin
  • www.mql5.com
Индикатор MultiCurrency позволяет анализировать одновременно до восьми графиков валют.
 
storm:
Gefunden, es ist bereits geschrieben, z**** , Sie müssen es nicht selbst schreiben. https://www.mql5.com/ru/code/1055
Die Umkehrung darin war vom Autor beabsichtigt, wurde aber nicht umgesetzt, ich musste sie überarbeiten, aber Lob an den Autor!