初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 865

 
Aleksey Vyazmikin:

この問題を解決するためにご協力をお願いします。

例えば、現在のタイムフレームM1があるとすると、任意の上位TFの与えられたバーの最後のバーNの時間を知る必要があります。時間は60分ではなく、45分または他の時間かもしれませんし、さらに週末があります。

どうすればいいのでしょうか?

バー番号、シンボル 名、必要な時間枠を指定します。

//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }

チェック(念のため) - 関数が時間 D'1970.01.01 00:00:00' - を返した場合、エラーが発生します。

 

売り注文が 出せないという問題が発生しました

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

ブローカーが注文を受け付け、その後拒否したという理解でいいのでしょうか?

では、どのような根拠で、なぜダメなのか。ログにはもうエラーはありません。このエラーの前には、50件以上の注文があり、エラーはありませんでした。このエラーの後、我々はいかなるエラーも登録していない。

この問題を解消することは可能でしょうか?

 
Vladimir Karputov:

バー番号、シンボル 名、必要な時間枠を指定します。

チェック(念のため) - 関数が時間 D'1970.01.01 00:00:00' - を返した場合、エラーが発生します。

この機能を使っているのですが、ご指摘の機能より悪いのでしょうか?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime(string symbol,int tf,int index)
  {
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol,timeframe,index,1,Arr)>0)
      return(Arr[0]);
   else return(-1);
  }

問題は、現在のタイムフレームが1分である場合、私は選択したタイムフレームの現在のタイムフレームの最後のバーの番号を知りたいのですが、多くの時間が経過している(週末や夜のセッションが23から50で閉じて、次の唯一の10に開いたのでギャップ)、私は09時59分を返し、23時49分の00ではない、私はそう時間を要求することです。

datetime         StopDt=iTime(Symbol(),TF_iDeltaP,_Shift-1)-60;

そこで、「どのようなTFの組み合わせでも、最後の小節のこの時間を得るにはどうしたらよいか?

 
Aleksey Vyazmikin:

...

問題は、現在のタイムフレームが1分の場合、選択したタイムフレームで現在のタイムフレームの最後のバーの番号を 知りたいのですが、...

強調されたフレーズに、私の脳は爆発した。

 
Vladimir Karputov:

強調されたフレーズに、私の脳は爆発した。

そこにタイプミスがあります。私は、現在のタイムフレームの最後のバーの日付が必要で、それは上のタイムフレームの選択されたバーを参照しています。

これでいいですか?
 
Aleksey Vyazmikin:

そこにタイプミスがあります。私は、現在のタイムフレームの最後のバーの日付が必要で、それは上のタイムフレームの選択されたバーを参照しています。

これでいいですか?

いいえ、明確ではありません。私の脳みそは泡だらけで爆発しっぱなしです :) 。1本のバーは、その時間枠にのみ属します。

 
Aleksey Vyazmikin:

タイプミスです。現在のタイムフレームの最後のバーの日付が必要で、これは上のタイムフレームの選択されたバーを参照しています。

これは明確ですか?

あなたの要望を正しく理解したのであれば

1.上の時間枠の目的のバーの終値を決定します。

2.高値のTFのバーと一緒に閉じる安値のTFのバーの時間を計算します。

3.このタイムフレームでは、若いTFのバーを要求する(要求は厳密ではありません) - タイムライン上で最も左に近いバーを取得します - あなたが必要とするものです。

4.必要に応じて、このバーが上位TFのバーの内側にあることを確認します(何らかの理由で下位TFのバーが上位TFのバーの内側に存在しない場合は除外してください)。

 
Vladimir Karputov:

いいえ、そんなことはありません。脳が泡を吹いて爆発し続ける :)。1本のバーは、その時間枠にのみ属します。

OK、思考のビジュアライゼーションに移行する :)

白で示したのがリクエストしている場所、黄色で示したのが取得すべきバータイムです。

よりクリアになりましたか?そうでない場合は、質問してください。

 
Aleksey Vyazmikin:

OK、思考のビジュアライゼーションに移行する :)

白はリクエストしている場所、黄色は取得すべきバータイムを示しています。

これならわかりやすいですか?そうでない場合は、質問して明確にしてください。

1.写真が小さいので、次回は2m×2mでお願いします :)

2.もう一度言いますが、私はあなたの言っていることが理解できません。あなたはある時間枠のチャートを私に見せました。この時間枠でバーナンバーNを要求するのは何か問題があるのでしょうか?

 
Vladimir Karputov:

1.写真が小さいので、次回は2m×2枚を一度に貼ってください :)

2.また思考が理解できない - ある時間枠のチャートを見せてくれましたね。このタイムフレームでバーナンバーNを要求するのは何か問題があるのでしょうか?

1.もっとできますよ、問題ありません;)

2.左上に 表示されているタイムフレームはM5です。特に、上位TFの1小節ではなく、それ以上の小節のシフトの場合、正確に知る方法が分からないので、小節番号Nを要求することができません。

次のアルゴリズムで1小節のシフトに挑戦してみます。

1.現在の上段TFの始まりから何本目のバーが経過したかを調べる

2.得られた数値を1小節分シフトさせ、iTime関数で時間を求める

理由: