iBarShiftのアナログ - ページ 14 1...7891011121314151617 新しいコメント Nikolai Semko 2018.04.09 13:14 #131 fxsaber:ではなぜ、18:00:01はM1-bar 18:01に属し、18:00には属さないとBarsが考えるのか理解できない。そして、ここでの論理は、娘が1週間前に1歳になったばかりなのに、2歳の誕生日を迎えたことと同じである。あるいは、今日は2018.04.09ですが、01 Jan 00は2017年3ヶ月と8日前ですが. ちなみに、TimeCurrentはSYMBOL_TIMEに置き換える必要があります。 ありがとうございます。そんな識別子があるなんて、本当に知りませんでした。 Nikolai Semko 2018.04.09 14:08 #132 ところで、iBarsの アルゴリズムの正しさを、MQL4のBarsベンチマークと比較しながら、さまざまなバリエーションをランダムに試してみたところ、Barsにバグがあることがわかりました。 Print(Bars(_Symbol,PERIOD_MN1,D'2005.08.31 00:00:00',D'2005.08.31 23:00:00')); // 1 должен быть 0, т.к. временной диапазон находиться внутри одного бара. Print(Bars(_Symbol,PERIOD_MN1,D'2006.08.31 00:00:00',D'2006.08.31 23:00:00')); // 0 MQL5には、そのようなバグはありません。 もちろん、タイムフレーム=MN1、日付30と31、stop_time=23、そして2005年以前にしか表示されないので、重要ではありません :))) これをキャッチするMQL4用のスクリプトがこちらで、iBarsはネイティブのBarsよりも参考になることが分かりました。 ファイル: TestiBars.mq4 10 kb Nikolai Semko 2018.04.09 15:51 #133 fxsaber:ちなみに、TimeCurrentはSYMBOL_TIMEに置き換える必要があります。いいえ、その必要はありません。 TimeCurrent() はすべてのシンボルに対して普遍的なものであり、現在の時刻ではなく、すべてのシンボルに対する気配値の最終到着時刻を返すため、正しさを加えることはできないでしょう。 同時に SymbolInfoInteger(symbol_name,SYMBOL_TIME) は TimeCurrent() に比べて非常に遅く、この時間はiBars の呼び出しの たびに必要となります。 Nikolai Semko 2018.04.09 22:11 #134 ご興味のある方へ。 iBarsの編集版(内蔵のBarsに似ているが、不具合がなく高速であることのみ)。 いくつかのバグを修正しました。 もし、あなたのMQL5コードが突然10-20秒間ハングアップし、0を返すことができるBars関数を持って いることに気づいたなら、このバージョンに置き換えることを強くお勧めします。 ハングアップすることなく、高速に動作するようになります。 int iBars(string symbol_name,ENUM_TIMEFRAMES timeframe,datetime start_time,datetime stop_time) { static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; static datetime LastTime0=0; static int PerSec=0; static int PreBars=0; static datetime LastBAR=0; static datetime LastTimeCur=0; datetime TimeCur; if(stop_time<start_time) {TimeCur=stop_time; stop_time=start_time; start_time=TimeCur; } TimeCur=TimeCurrent(); if(LastTimeFrame!=timeframe) if(timeframe==PERIOD_MN1) PerSec=2419200; else PerSec=::PeriodSeconds(timeframe); if(timeframe<PERIOD_W1) TimeCur-=TimeCur%PerSec; if(start_time>TimeCur) {LastSymb=NULL; return(0);} if(LastTimeFrame!=timeframe || LastSymb!=symbol_name || ((TimeCur-LastBAR)>0 && TimeCur!=LastTimeCur)) LastBAR=(datetime)SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE); LastTimeCur=TimeCur; if(PerSec==0) return(0); if(start_time>LastBAR) {LastTimeFrame=timeframe; LastSymb=symbol_name; return(0);} datetime tS,tF=0; bool check=true; if(timeframe<PERIOD_W1) tS=start_time-(start_time-1)%PerSec-1; else if(timeframe==PERIOD_W1) tS=start_time-(start_time-259201)%PerSec-1; else { PerSec=2678400; MqlDateTime dt; TimeToStruct(start_time-1,dt); tS=dt.year*12+dt.mon; } if(stop_time<=LastBAR) { if(timeframe<PERIOD_W1) tF=stop_time-(stop_time)%PerSec; else if(timeframe==PERIOD_W1) tF=stop_time-(stop_time-259200)%PerSec; else { MqlDateTime dt0; TimeToStruct(stop_time,dt0); tF=dt0.year*12+dt0.mon; } if(tS==tF) {PreBars=0; check=false;} } if((LastTimeFrame!=timeframe || LastSymb!=symbol_name || tS!=LastTime || tF!=LastTime0) && check) PreBars=Bars(symbol_name,timeframe,start_time,stop_time); LastTime=tS; LastTime0=(datetime)tF; LastTimeFrame=timeframe; LastSymb=symbol_name; return(PreBars); } Artyom Trishkin 2018.04.09 22:18 #135 Nikolai Semko:iBarsの編集版(内蔵のBarsに似て いるが、不具合がなく、より高速である)。 いくつかのバグを修正しました。 内蔵のBars()がオーバーロードされる。 1. int Bars(const string symbol_name,ENUM_TIMEFRAMES timeframe) 2. int Bars(const string symbol_name,ENUM_TIMEFRAMES timeframe,datetime start_time,datetime stop_time) コールフォームは1つしかありません。 Nikolai Semko 2018.04.09 22:24 #136 Artyom Trishkin:組み込みのBars()はオーバーロードされています。 呼べる形は1つだけです。短いフォームが必要な場合は、内蔵のものを使用しても問題ありません。そこには、ほとんど不具合はありません。 fxsaber 2018.04.10 04:21 #137 Nikolai Semko:いいえ、その必要はありません。 TimeCurrent()はすべてのシンボルに対して普遍的なものであり、現在のものでなく、すべてのシンボルに対する引用の最終到着時刻を返すので、正しさを加えることはできない。 SymbolInfoInteger(symbol_name,SYMBOL_TIME) は TimeCurrent() に比べて非常に遅く、iBars が呼ばれるたびにこの時間が必要です。Cotypesは、興味のあるキャラクター以外のすべてのキャラクターに行くことができます。 OK、新しいソースを見ました。議論されていた編集が行われていないことを見た。出てきました。 transcendreamer 2018.04.10 07:11 #138 なぜ開発者が自分でやらないのか? transcendreamer 2018.04.10 07:12 #139 一つの関数を呼び出すだけで、複数の楽器にまたがる同期した(時間軸の揃った)行の配列を得ることができれば、ユーザーにとってはるかに便利です。 削除済み 2018.04.10 08:48 #140 ところで、Bars()関数について。これが決め手と なったのかもしれません。 1...7891011121314151617 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ではなぜ、18:00:01はM1-bar 18:01に属し、18:00には属さないとBarsが考えるのか理解できない。
そして、ここでの論理は、娘が1週間前に1歳になったばかりなのに、2歳の誕生日を迎えたことと同じである。あるいは、今日は2018.04.09ですが、01 Jan 00は2017年3ヶ月と8日前ですが.
ちなみに、TimeCurrentはSYMBOL_TIMEに置き換える必要があります。
ありがとうございます。そんな識別子があるなんて、本当に知りませんでした。
ところで、iBarsの アルゴリズムの正しさを、MQL4のBarsベンチマークと比較しながら、さまざまなバリエーションをランダムに試してみたところ、Barsにバグがあることがわかりました。
MQL5には、そのようなバグはありません。
もちろん、タイムフレーム=MN1、日付30と31、stop_time=23、そして2005年以前にしか表示されないので、重要ではありません :)))
これをキャッチするMQL4用のスクリプトがこちらで、iBarsはネイティブのBarsよりも参考になることが分かりました。
ちなみに、TimeCurrentはSYMBOL_TIMEに置き換える必要があります。
いいえ、その必要はありません。
TimeCurrent() はすべてのシンボルに対して普遍的なものであり、現在の時刻ではなく、すべてのシンボルに対する気配値の最終到着時刻を返すため、正しさを加えることはできないでしょう。
同時に SymbolInfoInteger(symbol_name,SYMBOL_TIME) は TimeCurrent() に比べて非常に遅く、この時間はiBars の呼び出しの たびに必要となります。
ご興味のある方へ。
iBarsの編集版(内蔵のBarsに似ているが、不具合がなく高速であることのみ)。
いくつかのバグを修正しました。
もし、あなたのMQL5コードが突然10-20秒間ハングアップし、0を返すことができるBars関数を持って いることに気づいたなら、このバージョンに置き換えることを強くお勧めします。
ハングアップすることなく、高速に動作するようになります。
iBarsの編集版(内蔵のBarsに似て いるが、不具合がなく、より高速である)。
いくつかのバグを修正しました。
内蔵のBars()がオーバーロードされる。
コールフォームは1つしかありません。
組み込みのBars()はオーバーロードされています。
呼べる形は1つだけです。
短いフォームが必要な場合は、内蔵のものを使用しても問題ありません。そこには、ほとんど不具合はありません。
いいえ、その必要はありません。
TimeCurrent()はすべてのシンボルに対して普遍的なものであり、現在のものでなく、すべてのシンボルに対する引用の最終到着時刻を返すので、正しさを加えることはできない。
SymbolInfoInteger(symbol_name,SYMBOL_TIME) は TimeCurrent() に比べて非常に遅く、iBars が呼ばれるたびにこの時間が必要です。
Cotypesは、興味のあるキャラクター以外のすべてのキャラクターに行くことができます。
OK、新しいソースを見ました。議論されていた編集が行われていないことを見た。出てきました。