Questions d'un "mannequin - page 200

 

Il existe donc une fonction permettant de déterminer l'heure d'ouverture d'une barre (y compris si la barre est dans le futur)

//+---------------------------------------------------------------------------+
//| Получение точного времени открытия                                        |
//|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);
     }
  }

Le problème avec Shift est qu'il décale maintenant non pas en fonction du nombre de barres mais en fonction du nombre de jours (cela n'a pas d'importance sur D1 ou D1 ; l'essentiel est de comprendre D1). Je pense donc avoir compris que je peux vérifier le nombre de joursTotal par équipe (nombre de jours de la semaine) et le jour actuel de la semaine, mais quelle formule utiliser - je n'arrive pas à déterminer.

Note : dans l'unité 3, j'ai essayé de le faire (sans succès jusqu'à présent).

Aidez-nous, s'il vous plaît.

 
victorva: la demande de transaction donne l'erreur 10016 ("wrong stops"). En quoi ont-ils tort ?

1. Insérez le code correctement (Ctrl+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. Commençons par le fait que votre requête ne contient pas le champ obligatoire request.price (l'absence d'un tel champ n'est acceptable que pour le mode Market Execution). Il s'avère donc que tant que request.price==0.
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
victorva:

la requête de transaction donne l'erreur 10016 ("wrong stops"). Qu'est-ce qu'ils ont de mal ?


request.sl=Bid-300*_Point ; // Niveau de Stop Loss de l'ordre
request.tp=Bid+1000*_Point ; // Niveau de l'ordre de Prise de Profit

En ce sens qu'ils ne sont pas normalisés. (utilisez le bouton SRC pour insérer le code).

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

Vérification de la fonctionnalité de l'insertion automatique de liens

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

 
Yedelkin:

1. Insérez le code correctement (Ctrl+Alt+M).

2. Commençons par le fait que votre requête ne spécifie pas le champ obligatoire request.price (l'absence d'un tel champ n'est autorisée que pour le mode Market Execution). Il s'avère donc que tant que request.price==0.

Merci. J'ai mis le prix, ça a marché.

 

S'il vous plaît, aidez-moi, je ne comprends pas une chose.

|9|8|7|6|5|4|3|2|1|0| <-- série chronologique Taux

CopyRates(Symbol(),Period(),Time,2,Result) ;

Par exemple, j'ai spécifié l'heure du chandelier n°3. Dans ce cas, je récupère les taux des chandeliers #3 et #4. Mais comment obtenir les cours des chandeliers #3 et #2, ayant un temps ouvert du chandelier #3. Le nombre négatif n'est pas digéré.

J'ai eu l'idée de trouver un index en quelque sorte, mais pour le faire, je dois copier tous les éléments à partir de l'élément actuel, mais, bon sang, si j'ai M1 et une barre de 10 ans, alors le tableau est trop grand.

Merci d'avance

 

Bonne journée !

Pourriez-vous expliquer en quelles unités le trafic est mesuré dans l'onglet "Services" de MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712) ? Est-il mesuré en kiloBytes|mégaBytes ou en kiloBytes|mégaBytes ?

Merci.

 

Les gars, pouvez-vous me dire s'il existe un indicateur ou un objet dans la base qui permet d'afficher les graphiques d'autres devises sur le graphique principal ?

p.s. J'ai écrit le mien pour mt4, mais il y en a peut-être un tout fait ici...

 
storm:

Les gars, pouvez-vous me dire s'il existe un indicateur ou un objet dans la base qui permet d'afficher les graphiques d'autres devises sur le graphique principal ?

p.s. J'ai écrit le mien pour mt4, mais il y en a peut-être un tout fait ici...

Je l'ai trouvé, ils l'ont déjà écrit, z**** , je n'ai pas besoin de l'écrire moi-même au moins . https://www.mql5.com/ru/code/1055
MultiCurrency
MultiCurrency
  • votes : 9
  • 2012.09.14
  • Nikolay Kositsin
  • www.mql5.com
Индикатор MultiCurrency позволяет анализировать одновременно до восьми графиков валют.
 
storm:
Trouvé, c'est déjà écrit, z**** , vous n'avez pas besoin de l'écrire vous-même. https://www.mql5.com/ru/code/1055
L'inversion a été voulue par l'auteur, mais n'a pas été mise en œuvre, j'ai dû la modifier, mais le mérite en revient à l'auteur !
Raison: