iBarShiftのアナログ - ページ 4 1234567891011...17 新しいコメント fxsaber 2018.03.05 08:24 #31 Nikolai Semko:私見ですが、SeriesInfoInteger 関数はフリーではないので、使用は冗長だと思います。 でした。 なった。 約1.5倍のスピードアップを実現。 2%の利得。注 は、1970年1月1日からカウントされ、月曜日ではなく木曜日なので、PERIOD_W1およびPERIOD_MN1では正しく動作しない。そして、月ごとに秒数が違う。これは、PeriodSecondsのドキュメントに 追加する必要があります。 Nikolai Semko 2018.03.05 08:34 #32 Aleksey Vyazmikin:なぜなら、そのコードが特定の状況下で動作するかどうかを確実に知る必要があるからです。自分でミスをした場合に、他の人のせいにするのは正しくありません。1日に14時間あるとします(1時間ごとに相場がない場合はそれ以下)、M1チャートを持っていて、前日のM15のバーのシフトを知る必要があります。つまり、1時間に45分とか、1日に14時間とか、時間・スイッチングが落ちても、すべて正しく動作するのでしょうか?個人的には、このような機能を使うのが適切だと考えています。 int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } しかし、この関数はMQL4のiBarShift 関数の完全なアナログではないことに注意する必要があります。 それ以外は同一です。 標準関数とこの関数との完全な同一性を示す簡単なMQL4スクリプトを貼り付けます。 標準のiBarShift 関数と私の関数からの値が等しくない場合、Print.私には何も印刷されませんでした。 //+------------------------------------------------------------------+ //| iBarShift.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime t=TimeCurrent()+1000; const ENUM_TIMEFRAMES tf[9]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; while(!IsStopped()) { for(int i=0; i<9;i++) { int i1=iBarShift(NULL,tf[i],t); int i2=iBarShift2(NULL,tf[i],t); if(i1!=i2) Print(EnumToString(tf[i])," ",TimeToString(t)," ",i1," ",i2); } t-=10; Comment(TimeToString(t)); } } //+------------------------------------------------------------------+ int iBarShift2(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ Nikolai Semko 2018.03.05 08:39 #33 fxsaber: 勝率2%。注えっ、本当ですか? GetMicrosecondCount()を入れるのが面倒だったので、プロファイリングを信用した。 fxsaber 2018.03.05 08:50 #34 Nikolai Semko:そうなんですか? GetMicrosecondCount()を設定するのが面倒だったので、プロファイリングを信用した。プロファイリングとは、別のものです。2%が最大の利得です。 私のマシンのテスターで2億5千万回コールすると、1秒の節約になります。 間違いなく、あなたのオプションがベストですしかし、なぜMT5ではバーで作業する必要があるのか、想像もつきません。 Nikolai Semko 2018.03.05 09:04 #35 fxsaber:しかし、なぜMT5ではバーで作業する必要があるのか、さっぱりわかりません。マウスを操作するときに使っています。例えばこちら。 fxsaber 2018.03.05 09:17 #36 Nikolai Semko:マウスを操作するときに使っています。たとえば、ここ。ああ、そこが理解できないんだ。 Nikolai Semko 2018.03.05 09:28 #37 fxsaber:そう、そこがわからないんです。そして、その誤解が理解できない )) 例えば、あるチャンネルがあり、その特徴のひとつが開始時間(左端)です。そして、このチャンネルを異なるTFで構築する必要があります。さて、新しいTFでバー・ナンバーを見つける以外にどんな方法があるでしょうか? 他にもいろいろあるんです。 例えば、すべてのTFを対数スケールで1つにまとめると。これはとてもクールなテーマです。ここでもiBarShiftの アナログは欠かせない Nikolai Semko 2018.03.05 09:33 #38 Nikolai Semko:個人的には、このような機能を使うのは合理的だと思います。 しかし、これはMQL4標準のiBarShift 関数の完全なアナログではないことに注意する必要があります。 それ以外は同一です。 標準関数とこの関数との完全な同一性を示す簡単なMQL4スクリプトを貼り付けます。 標準のiBarShift 関数と私の関数からの値が等しくない場合、Print.印刷はしていません。 いいえ、Comment()のためではありません。 削除すると1だけ不一致になりますが、実際には新しいバーは 半バー分ずれて2つのアルゴリズムで定義されているので、間違いではないと思います。私のバージョンの新しいバー検出は、標準のものよりも論理的だと思います。 fxsaber 2018.03.05 10:04 #39 Nikolai Semko:そして、その誤解が理解できない ))バーを使う意味がわからない。CopyRatesなど。 Aleksey Vyazmikin 2018.03.30 06:26 #40 なぜこんなにスクリプトが遅いのですか? 2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=15 Stop=3 Day_Shift=0 index=02018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=02018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=15 Stop=3 Day_Shift=0 index=02018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0 2018.03.30 09:20:49.300 Scripts script BS (Si Splice,H4) loaded successfully 2018.03.30 09:21:20.209 Scripts script BS (Si Splice,H4) removed //+------------------------------------------------------------------+ //| iBarShift.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs input ENUM_TIMEFRAMES TF=PERIOD_D1; input int Bar=3; input int calcN=1; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { for(int index=0;index<calcN;index++) { int Day_Shift=iBarShift(_Symbol,TF,iTime(_Symbol,PERIOD_CURRENT,index),false); int Start=iBarShift(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Bar+Day_Shift),false); int Stop=iBarShift(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Day_Shift),false); if(index<3)Print("1 Start=",Start," Stop=",Stop," Day_Shift=",Day_Shift," index=",index); if(index<3)Print("1 Start=",TimeToString(iTime(_Symbol,TF,Bar+Day_Shift),TIME_DATE|TIME_MINUTES), " Stop=",TimeToString(iTime(_Symbol,TF,Day_Shift),TIME_DATE|TIME_MINUTES), " Day_Shift=",TimeToString(iTime(_Symbol,PERIOD_CURRENT,index),TIME_DATE|TIME_MINUTES)," index=",index); } for(int index=0;index<calcN;index++) { int Day_Shift=iBarShift2(_Symbol,TF,iTime(_Symbol,PERIOD_CURRENT,index),false); int Start=iBarShift2(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Bar+Day_Shift),false); int Stop=iBarShift2(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Day_Shift),false); if(index<3)Print("2 Start=",Start," Stop=",Stop," Day_Shift=",Day_Shift," index=",index); if(index<3)Print("2 Start=",TimeToString(iTime(_Symbol,TF,Bar+Day_Shift),TIME_DATE|TIME_MINUTES), " Stop=",TimeToString(iTime(_Symbol,TF,Day_Shift),TIME_DATE|TIME_MINUTES), " Day_Shift=",TimeToString(iTime(_Symbol,PERIOD_CURRENT,index),TIME_DATE|TIME_MINUTES)," index=",index); } return; } //+------------------------------------------------------------------+ //| Получим iBarShift для заданного номера бара | //+------------------------------------------------------------------+ int iBarShift2(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ //| Получим iBarShift для заданного номера бара | //+------------------------------------------------------------------+ int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime iTime(string symbol,ENUM_TIMEFRAMES tf,int index) { if(index < 0) return(-1); datetime Arr[]; if(CopyTime(symbol,tf,index,1,Arr)>0) return(Arr[0]); else return(-1); } //+------------------------------------------------------------------+ Analogue to iBarShift Errors, bugs, questions Question on Hedging 1234567891011...17 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私見ですが、SeriesInfoInteger 関数はフリーではないので、使用は冗長だと思います。
でした。
なった。
約1.5倍のスピードアップを実現。
2%の利得。注
は、1970年1月1日からカウントされ、月曜日ではなく木曜日なので、PERIOD_W1およびPERIOD_MN1では正しく動作しない。そして、月ごとに秒数が違う。
これは、PeriodSecondsのドキュメントに 追加する必要があります。
なぜなら、そのコードが特定の状況下で動作するかどうかを確実に知る必要があるからです。自分でミスをした場合に、他の人のせいにするのは正しくありません。
1日に14時間あるとします(1時間ごとに相場がない場合はそれ以下)、M1チャートを持っていて、前日のM15のバーのシフトを知る必要があります。つまり、1時間に45分とか、1日に14時間とか、時間・スイッチングが落ちても、すべて正しく動作するのでしょうか?
個人的には、このような機能を使うのが適切だと考えています。
しかし、この関数はMQL4のiBarShift 関数の完全なアナログではないことに注意する必要があります。
それ以外は同一です。
標準関数とこの関数との完全な同一性を示す簡単なMQL4スクリプトを貼り付けます。
標準のiBarShift 関数と私の関数からの値が等しくない場合、Print.私には何も印刷されませんでした。
勝率2%。注
えっ、本当ですか?
GetMicrosecondCount()を入れるのが面倒だったので、プロファイリングを信用した。
そうなんですか?
GetMicrosecondCount()を設定するのが面倒だったので、プロファイリングを信用した。
プロファイリングとは、別のものです。2%が最大の利得です。
私のマシンのテスターで2億5千万回コールすると、1秒の節約になります。
間違いなく、あなたのオプションがベストですしかし、なぜMT5ではバーで作業する必要があるのか、想像もつきません。
しかし、なぜMT5ではバーで作業する必要があるのか、さっぱりわかりません。
マウスを操作するときに使っています。例えばこちら。
マウスを操作するときに使っています。たとえば、ここ。
ああ、そこが理解できないんだ。
そう、そこがわからないんです。
そして、その誤解が理解できない ))
例えば、あるチャンネルがあり、その特徴のひとつが開始時間(左端)です。そして、このチャンネルを異なるTFで構築する必要があります。さて、新しいTFでバー・ナンバーを見つける以外にどんな方法があるでしょうか?
他にもいろいろあるんです。
例えば、すべてのTFを対数スケールで1つにまとめると。これはとてもクールなテーマです。ここでもiBarShiftの アナログは欠かせない
個人的には、このような機能を使うのは合理的だと思います。
しかし、これはMQL4標準のiBarShift 関数の完全なアナログではないことに注意する必要があります。
それ以外は同一です。
標準関数とこの関数との完全な同一性を示す簡単なMQL4スクリプトを貼り付けます。
標準のiBarShift 関数と私の関数からの値が等しくない場合、Print.印刷はしていません。
いいえ、Comment()のためではありません。
削除すると1だけ不一致になりますが、実際には新しいバーは 半バー分ずれて2つのアルゴリズムで定義されているので、間違いではないと思います。私のバージョンの新しいバー検出は、標準のものよりも論理的だと思います。
そして、その誤解が理解できない ))
バーを使う意味がわからない。CopyRatesなど。
なぜこんなにスクリプトが遅いのですか?
2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=15 Stop=3 Day_Shift=0 index=0
2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0
2018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=15 Stop=3 Day_Shift=0 index=0
2018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0
2018.03.30 09:20:49.300 Scripts script BS (Si Splice,H4) loaded successfully
2018.03.30 09:21:20.209 Scripts script BS (Si Splice,H4) removed