MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1489

 
m-r LSV:

私の読みは 正しいのでしょうか?

if(rates_total - prev_calculated == 1)
 Print("Новый бар");
 
Taras Slobodyanik:

ありがとうございます、今持っています

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[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   Print("Новый бар");


return(rates_total);

	          
 

バーを開くときに、最後に閉じたローソクの方向を教えてください。

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[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   //Print("Новый бар");
   
   if(open[1] > close[1])
   {
      Print("Dn");
   }
   else if(open[1] < close[1])
   {
      Print("Up");
   }

return(rates_total);

このコードでは、どのキャンドルが閉じられたかにかかわらず、常に同じメッセージが表示されます。
ループでローソク足を再計算する必要があると理解しているのですが?
皆さん、アドバイスをお願いします。

 
Taras Slobodyanik:

なぜ未熟なプログラマーをそんなふうに馬鹿にするんだ?

見逃し記事を読み込んで、その差が1より大きい場合はどうするのか?どうでもいい、1小節飛ばそう...考えよう、もう1小節、もう1小節。そして、説明もなしに、なぜコードを与えなければならないのか?最終的に何が得られるか、見てみましょう。

 
Alexey Viktorov:

なぜ未熟なプログラマーをそんなふうに馬鹿にするんだ?

見逃し記事を読み込んで、その差が1より大きい場合はどうするのか?どうでもいい、1小節飛ばそう...考えよう、もう1小節、もう1小節。そして、説明もなしに、なぜコードを与えなければならないのか?最終的に何が得られるか、見てみましょう。

アレクセイ、正しい道を教えてくれ。お願いします。
 
Alexey Viktorov:

なぜ未熟なプログラマーをそんなふうに馬鹿にするんだ?

見逃し記事を読み込んで、その差が1より大きい場合はどうするのか?どうでもいい、1小節飛ばそう...考えよう、もう1小節、もう1小節。そして、説明もなしに、なぜコードを与えなければならないのか?最終的に何が得られるか、見てみましょう。

当たり前のことですが)

ロードされたら1以上になるし、新しいバーでも ないのになんで記録してるんだ、問題にはそんなのないだろう。

 
m-r LSV:

バーを開くときに、最後に閉じたローソクの方向を教えてください。

このコードでは、どのキャンドルが閉じられたかにかかわらず、常に同じメッセージが表示されます。
ループでローソク足を再計算する必要があると理解しているのですが?
皆さん、アドバイスをお願いします。

というのは、括弧がないからです。

if(rates_total - prev_calculated == 1)
   {
   //Print("Новый бар");
   if(open[1] > close[1])
        {
        Print("Dn");
        }
   else if(open[1] < close[1])
        {
        Print("Up");
        }
   }
 
m-r LSV:

私の読みは 正しいのでしょうか?

そうなんです。

m-r LSV:

キャンドルの開口は9~12秒遅れます。
これが最初のティックかどうか教えてください。

新しいローソクの最初のティックで計算し、何らかのアクションを起こすことは、私にとって非常に重要なことです。


最初のティックで新しいローソク 足が形成されます。

確認するには、ダニを求めることができます

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[])
 {
  MqlTick tick[];
  if(prev_calculated > 0 && rates_total > prev_calculated)
   {
    if(CopyTicks(_Symbol, tick, COPY_TICKS_ALL, 0, 2) <= 0)
      Print("ERR ", GetLastError());
    else
      ArrayPrint(tick);
   }

  return(rates_total);
 }

をクリックし、最後のティックが現在のローソク足に、前のティックが前のローソク足にそれぞれ属していることを確認します。

2021.06.02 17:50:59.311 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [0] 2021.06.02 17:50:58 1.22005 1.22007 0.0000        0 1622656258958       4       0.00000
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [1] 2021.06.02 17:51:00 1.22004 1.22010 0.0000        0 1622656260655       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [0] 2021.06.02 17:51:59 1.22021 1.22026 0.0000        0 1622656319887       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [1] 2021.06.02 17:52:00 1.22020 1.22025 0.0000        0 1622656320080       6       0.00000

例えば、私のデモでは、何の遅延もなく開くことができます。

しかし、流動性の低いペアでは、1秒の遅れがある

2021.06.02 17:55:59.742 00 (CADJPY,M1)                   [time]  [bid]  [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [0] 2021.06.02 17:55:59 90.881 90.885  0.000        0 1622656559379       2         0.000
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [1] 2021.06.02 17:56:01 90.882 90.887  0.000        0 1622656561076       6         0.000
 
Taras Slobodyanik:

さりげない)

ロードされたら1以上になるし、New Barじゃない んだから、なんで記録するんだよ、タスクにそんなものないだろ。

新しいバーと一緒に履歴のサブロードができないなんて、どこに書いてあるんだ?
 
Taras Slobodyanik:

括弧がないため

役に立たなかった :(

2021.06.02 17:54:09.465 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:55:09.439 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:56:09.686 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:57:09.471 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:58:09.586 Test (Volatility 10 Index,M1)      Up