"ダミー "からの質問 - ページ 200

 

そこで、バーが開くタイミングを計る機能(バーが未来にある場合も含む)があります

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

Shiftの問題は、バーの数ではなく、日数でシフトするようになったことです(D1でもD1でも問題ありません、D1を理解することがメインです)。ということで、シフトによる日数Total(平日数)と現在の曜日を確認すればいいことは頭に入ったのですが、どの計算式を使えばいいのか-判断がつきません。

注:Unit=3で試行錯誤中(今のところ不成功)

助けてください。

 
victorva: を実行すると、取引要求でエラー10016("間違ったストップ")が発生します。何が間違っているのか?

1.コードを 正しく挿入 する(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.まず、リクエストに必須のフィールドrequest.priceが含まれていないことから見てみましょう(このようなフィールドがないことは、Market Executionモードでのみ許容されます)。つまり、request.price=0である限りは、そのようなことはないことが判明しました。
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
victorva:

取引クエリでエラー10016("間違ったストップ")が表示されました。何を勘違いしているのか?


request.sl=Bid-300*_Point; // 注文のストップロス・レベル
request.tp=Bid+1000*_Point; //テイクプロフィット 注文のレベル

正規化されていないという点で(SRCボタンでコードを挿入してください)。

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

自動リンク挿入の機能を確認する

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

 
Yedelkin:

1.コードを 正しく挿入 する(Ctrl+Alt+M)。

2.まず、リクエストが必須フィールドであるrequest.priceを指定していないことから見てみましょう(このようなフィールドがないことは、Market Executionモードでのみ許可されます)。つまり、request.price=0である限りは、そのようなことはないことが判明した。

ありがとうございます。値段を入れたら、うまくいった。

 

一つも理解できないので、助けてください。

|9|8|7|6|5|4|3|2|1|0| <-- 時系列 レート

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

例えば、3番のローソク足の時刻を指定しました。この場合、3番と4番のローソク足のレートを取り返す。しかし、ローソク足3番のオープン時間を持って、ローソク足3番と2番のレートを取得する方法。 マイナスの数字は消化されません。

ソートのインデックスを見つけるというアイデアもありましたが、そのためには現在のものからすべての要素をコピーする必要がありますが、なんと、M1と10年前のバーがあるとしたら、配列が大きくなりすぎてしまいますね。

ありがとうございました。

 

ごきげんよう。

MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712) の "Services" タブで、トラフィックをどの単位で測定しているか教えていただけませんか。キロバイト|メガバイト、キロバイト|メガバイトのどちらで計測していますか?

ありがとうございます。

 

みんな、メインチャートに他の通貨のチャートを表示できるインジケーターやオブジェクトがベースにあるかどうか教えてくれませんか?

p.s. 私はmt4用に自分で書きましたが、もしかしたらここに既製のものがあるかもしれませんね...。

 
storm:

みんな、メインチャートに他の通貨のチャートを表示できるインジケーターやオブジェクトがベースにあるかどうか教えてくれませんか?

p.s. 私はmt4用に自分で書きましたが、もしかしたらここに既製のものがあるかもしれませんね...。

見つけた!もう書いてある!z**** 、少なくとも自分で書く必要はない。https://www.mql5.com/ru/code/1055。
MultiCurrency
MultiCurrency
  • 投票: 9
  • 2012.09.14
  • Nikolay Kositsin
  • www.mql5.com
Индикатор MultiCurrency позволяет анализировать одновременно до восьми графиков валют.
 
storm:
見つけた!もう書いてある!z**** 、自分で書かなくてもいい。https://www.mql5.com/ru/code/1055。
この中の反転は作者が意図したものですが、実装されていなかったので、私が手を加えましたが、作者の功績です