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

 

こんにちは。どこがエラーなのか、教えてください。

void OnStart()
  {
datetime current_time=TimeCurrent();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time-60)-MathMod((current_time-60),60);
datetime t1=our_time;
datetime t2=our_time+60;
PrintFormat("current_time=%s",TimeToString(current_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
PrintFormat("our_time=%s",TimeToString(our_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
string stock="MSFT";
MqlTick tick_array[];// массив для приема тиков
int received=CopyTicksRange(stock, tick_array, COPY_TICKS_TRADE, t1*1000, t2*1000);
Print(stock," Всего тиков ",received);
Print(tick_array[0].time,": Last = ",tick_array[0].last,"  Volume = ",tick_array[0].volume );
ulong total=tick_array[0].volume; ulong buy=tick_array[0].volume; ulong sell=0; bool flag='b';
int ticks=ArraySize(tick_array); double pprice=tick_array[0].last; int i=1;
while(i<ticks)
      { 
        total=total+tick_array[i].volume;//{считаем общий объем}
        if (pprice<tick_array[i].last)  flag='b';//{если пред.тик меньше зн.'b'}
        if (pprice<=tick_array[i].last)
            if (flag='b')
                buy=buy+tick_array[i].volume;//{считаем,что сделка по BID} 
        if (pprice>tick_array[i].last)  flag='s';//{если пред.тик больше зн.'s'} 
        if (pprice>=tick_array[i].last)
            if (flag='s')
               sell=sell+tick_array[i].volume;//{считаем,что сделка по ASK}
        pprice=tick_array[i].last;//{ставим счетчик на последн. тик}
        i=i+1; 
      }               
Print (total," ",buy," ",sell);       
  }
 
werter:

こんにちは。どこがエラーなのか、教えていただけませんか?

コードのどこかで

 
Vladimir Pastushak:

をコードのどこかに入れてください。

愉快だ。

これはBuySellVolumeです。総量はBuyとSellの合計に等しくなく、わずかに多い程度である。

 

MLQ5の指標の「inf」は、どのような意味を持つのでしょうか?

初めて遭遇したのですが、ドキュメントを検索しても何も出てきません。

 
Alexandr Sokolov:

MLQ5の指標の「inf」は、どのような意味を持つのでしょうか?

初めて遭遇したのですが、ドキュメント検索では何も見つからず

検索がうまくいかない:INF 検索では、いくつかの結果が得られる。

例えば、MathLogを ご覧 ください。

戻り値

成功した場合の値の自然対数。val が負の場合、NaN(未定義値)を返す。valueが0の場合はINF(無限大)を返します


この結果は、コードの値計算のアルゴリズムに誤りがあることを意味する(例えば、変数の初期化を忘れている - 我々はちょうど我々が幸運になることを願っている、我々は考えていない除算操作で......)。

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov:

検索がうまくいかない:INF 検索では、いくつかの結果が得られる。

例えば、MathLogを ご覧 ください。

戻り値

成功した場合の値の自然対数。val が負の場合、NaN(未定義値)を返す。valueが0の場合はINF(無限大)を返します


この結果は、コードに値計算のアルゴリズムに誤りがあることを意味する(例えば、変数の初期化を忘れている - 最悪の事態を想定している、除算演算では考えていない...)。

検索 >> ドキュメントで見つけたのはこれだけです(ただし、すべての説明を読んだわけではなく、いつもタイトルで見つけています - 習慣です)。


変数の初期化について(誤解していたのか、初めて聞いたのか)、例えば。

double a = 0, b;

...十分ではないでしょうか?私は通常、変数を宣言し

 
Alexandr Sokolov:

以下は、私が検索 >> ドキュメントで見たものすべてです(ただし、それぞれの説明は読んでいません、私はいつもタイトルで探します - 習慣)。

***

悪い癖 だ。


アレクサンドル・ソコロフ


...いい加減にしろ私は通常、変数を宣言し

そして、ここで「ブラックスワン」が発生します。変数bは 初期化されていないので、どんなゴミでも入ってしまいます。

 
Alexandr Sokolov:

MLQ5の指標の「inf」は、どのような意味を持つのでしょうか?

初めて遭遇したのですが、ドキュメント検索では何も見つからず

何が問題なのかわかったよ!

バッファを初期化した場合 EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

...をコピーし、さらに計算を行い、バッファのEMPTY_VALUEを掛け合わせた場合、infが得られます。


ここでは、アレルギーを起こしただけで、EMPTY_VALUEを掛けただけで、infになります。


 
Vladimir Karputov:

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

 
Alexandr Sokolov:

なるほど、そういうことだったのか!」と納得。

EMPTY_VALUEバッファを初期化した場合

...そして、さらに計算を続けると、不十分な数の時系列をコピーまたは計算し、任意の値にバッファからEMPTY_VALUEを掛けた場合、infが得られます。


ここでは、アレルギーを起こしただけで、EMPTY_VALUEを掛けたときだけ、infになります。


その理由がわかったようですね。したがって、EMPTY_VALUEでバッファを 初期化する場合、演算処理中にまず「このインデックスのバッファにEMPTY_VALUEが偶然に存在するか」をチェックする必要があります。