iBarShiftのアナログ - ページ 10

 
Aleksey Vyazmikin:

月曜日に上映されるってこと?それが必要なんだ...。:)

ええ、まあ、実際、標準的な機能としては不思議な動作ではありますね。結局のところ、その「基準」に値を合わせているのです。

MQL4の標準関数iBarShiftは 左のバーの数(つまりこの場合は土曜日)を返し、iBarShift3は要求された時刻が穴に当たると右のバーの数(つまり月曜日)を返すので、より論理的である。

 
Nikolai Semko:

ええ、まあ、実際、標準的な関数としては奇妙な動作です。結局のところ、私たちはまさにその「ベンチマーク」に値を当てはめることを扱っているのです。

MQL4の標準関数iBarShiftは、要求された時刻が穴に当たると左の小節番号(つまりこの場合は土曜日)を返し、iBarShift3は穴から右の小節番号(つまり月曜日)を返すので、より理にかなっていると言えます。

そして、今ホール(リアルタイム)にいて、バーでの情報受信を期待すると、どのようなインデックスが提供されるのだろうか。MQL4では "1"、3番目のアルゴリズムでは "0 "になると思うのですが、違うのでしょうか?

MQL4の機能には「先を見るな」というメッセージが込められていると思いますが、それはある程度正しいことで、すべてはタスクに依存するのです。

 

Nikolai Semko :

...

ただひとつだけ、このオプションは非常に複雑で時間がかかるという不満があります。

私が投稿した時(4年前)の主な目的は、私が見つけた他のすべてのバージョンが(mql4バージョンと比較して)間違っていたため、(再び)正確さでした。

もっと早くてもいいとは思う のですが。

そうでないことを証明してみてください。あなたの関数と私の関数が異なる値を示す場合の、パラメータの単一の組み合わせを見つける。

ほとんどの場合、この関数は間違った結果を返します。

しかし、最後のパラメータexactはなぜ必要なのか理解できないので、実装していません。私自身は必要ないと思っています。

mql4のバージョンであることが条件です。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

iBarShiftのアナログ

アラン・ヴェルレーエン さん 2018.04.05 00:18

実際にはその逆で、私のバージョンだけが正しいことを示しています。(そして、このコードから 元のiBarShift1が正しいです)。

私のバージョンは mql4のiBarShiftと 同じように、スタンドアロン関数として考え出さ れたものです。


追記:英語版を掲載する必要があるのでしょうか、それともロシア語訳が正しいのでしょうか?

 
vladevgeniy:
私の機能を試してみてはいかがでしょうか?そこには、小節の開始と終了を時間的に調整するソリューションがある。すべて正しく計算されているようです。しかも、最速のバージョン3よりも時間的に速い。それとも枝の方が重要なのか?)それともそこにもエラーがあるのでしょうか?)ずっと使っているのですが・・・。

どこにあるんだ、お前の機能、試してみるか?

 
Aleksey Vyazmikin:

また、今ホール(リアルタイム)にいて、バーの情報を期待している場合、どのようなインデックスが提供されるのでしょうか。MQL4では "1"、3番目のアルゴリズムでは "0 "になると思うのですが、違うのでしょうか?

MQL4の機能には「先を見てはいけない」というメッセージがありますが、それはある程度正しいことで、すべては問題次第だと思います。

いいえ、最初はゼロです。リアルタイムでも同じように機能します。

 
Aleksey Vyazmikin:

そして、それを試すための機能、それはどこにあるのでしょうか?

7ページの最後にあります)

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

その方が便利かもしれませんね。

 
vladevgeniy:
私の機能を試してみてはいかがでしょうか?小節の始まりと終わりを時間軸で補正するソリューションがあるんです。すべて正しく計算されているようです。しかも、最速の3rdバージョンよりも時間的に速い。それとも枝の方が重要なのか?)それともそこにもエラーがあるのでしょうか?)ずっと使っているのですが・・・。

それは面白い ))))

以下はその機能です。

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

数学の演算子(% -割り算の余りなど)を知らないので

ここで、関数を少し簡略化してみましょう。

うまくいった。

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

そして、これが私の機能です。

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

非常によく似ています。そうなんですか?

ただ、あなたのはすべてが間違っていて、その分遅いんです。

MQL4では、このスクリプトで試すことができます。

ファイル:
 
Nikolai Semko:

いいえ、最初はゼロです。リアルタイムでも同じように機能します。

OK - ただ、あるアルゴリズムが今日の未来のデータで"-1 "を表示したんだ...。

 
Nikolai Semko:

それは面白い ))))


うん、まあ、矛盾は出ますね(笑)。掘り出すのはOKです。

 
vladevgeniy:

まあ、たしかに矛盾は出ますが......)掘り出すのはOKです。

私自身、堂々巡りをしているようなものです。今になって初めて、最短の解決策がわかった。