MQL5でOpen,Low,High,Closeのパラメータを取得するにはどうしたらいいですか? - ページ 7 1234567891011121314 新しいコメント Artyom Trishkin 2019.07.29 21:00 #61 Igor Makanu: を測定しました。 2019.07.30 00:44:29.156 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69407 2019.07.30 00:45:29.408 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=60250 うーん、どこかのモデレーターが炎上の挨拶が必要なようだ )))) スクリプトを実行する 2019.07.30 03:58:46.425 CopyClose: loops=-2147483648 ms=0 2019.07.30 03:58:46.425 iClose: loops=-2147483648 ms=0 どうしたんですか?(考える暇もなく) Igor Makanu 2019.07.29 21:04 #62 Artyom Trishkin:スクリプトを実行するどうしたんですか?(考える暇もなく) チャート上のバーの数のチェックはありません、多分存在しないバーによって終了します - 私はeuの無制限とH1期間を持って、rand()は最大65000を与えるようです。 rand()コンパイラをポチりました、4つのメソッドの正しいテストはこちらです。 // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos]. // А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume. #define DEFINE_TIMESERIE(NAME,FUNC,T) \ class CLASS##NAME \ { \ public: \ static T Get(const string Symb,const int TimeFrame,const int iShift) \ { \ T tValue[]; \ \ return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \ } \ \ T operator[](const int iPos) const \ { \ return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \ } \ }; \ \ CLASS##NAME NAME; \ \ T i##NAME(const string Symb,const int TimeFrame,const int iShift) \ { \ return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \ } //+------------------------------------------------------------------+ DEFINE_TIMESERIE(Volume,TickVolume,long) DEFINE_TIMESERIE(Time,Time,datetime) DEFINE_TIMESERIE(Open,Open,double) DEFINE_TIMESERIE(High,High,double) DEFINE_TIMESERIE(Low,Low,double) DEFINE_TIMESERIE(Close,Close,double) #define test(M,S,EX) {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn&&!_StopFlag;tst++){EX;} \ printf("%s: loops=%i ms=%u",S,nn,GetTickCount()-mss);} //+------------------------------------------------------------------+ void OnStart() { double buff[1]; MqlRates rates[1]; srand(GetTickCount()); test(10,"CopyClose",CopyClose(_Symbol,_Period,rand(),1,buff)); srand(GetTickCount()); test(10,"iClose",iClose(NULL,0,rand())); srand(GetTickCount()); test(10,"Close[i]",Close[rand()]); srand(GetTickCount()); test(10,"CopyRates",CopyRates(_Symbol,_Period,rand(),1,rates)); } //+------------------------------------------------------------------+ 2019.07.30 00:59:10.911 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69765 2019.07.30 01:01:23.655 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=132735 2019.07.30 01:03:51.541 tst_iXXX_Copy (EURUSD,H1) Close[i]: loops=1410065408 ms=147890 2019.07.30 01:05:19.872 tst_iXXX_Copy (EURUSD,H1) CopyRates: loops=1410065408 ms=88328 How do I get ASCTrend system PREDICT time period Artyom Trishkin 2019.07.29 21:13 #63 Igor Makanu: チャート上のバー数のチェックがないので、存在しないバーでクラッシュする可能性があります - 私はeuで無制限とH1期間を持っていますが、rand()は最大で65000を与えるようです rand()コンパイラをポチりました、4つのメソッドの正しいテストはこちらです。 2019.07.30 00:59:10.911 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69765 2019.07.30 01:01:23.655 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=132735 2019.07.30 01:03:51.541 tst_iXXX_Copy (EURUSD,H1) Close[i]: loops=1410065408 ms=147890 2019.07.30 01:05:19.872 tst_iXXX_Copy (EURUSD,H1) CopyRates: loops=1410065408 ms=88328 2019.07.30 04:12:50.825 CopyClose: loops=-2147483648 ms=0 2019.07.30 04:12:50.825 iClose: loops=-2147483648 ms=0 2019.07.30 04:12:50.825 Close[i]: loops=-2147483648 ms=0 2019.07.30 04:12:50.825 CopyRates: loops=-2147483648 ms=0 なぜかファイルが必要なときは困ります :) Igor Makanu 2019.07.29 21:21 #64 Artyom Trishkin: ファイルが必要なときには、なぜか不利になる :) うーん、やっぱりハーフリッターじゃないと無理か...。 なぜ私のソースコードではloops=-2147483648が違うのですか! ;) 追記:ulong-intsの定義での置換について - 朝までテストするのであれば ))) 。) Artyom Trishkin 2019.07.29 21:27 #65 Igor Makanu: うーん、やっぱりハーフリッターじゃないと無理か...。 なぜ私のソースコードではloops=-2147483648が違うのですか! ;) PS: 定義でintをulong-intoする - 朝までテストする場合 ))) 交換された。 2019.07.30 04:26:12.849 CopyClose: loops=1410065408 ms=71234 2019.07.30 04:26:12.849 iClose: loops=1410065408 ms=0 2019.07.30 04:26:12.849 Close[i]: loops=1410065408 ms=0 2019.07.30 04:26:12.849 CopyRates: loops=1410065408 ms=0 :)) Igor Makanu 2019.07.29 21:38 #66 Artyom Trishkin: 交換された。 :)) MQL-ソースコードは1対1なので、ターミナルログからテストをコピーしてみました。 うーん、いたずらな手が他にどこを掘ったのか想像がつかない )))) 私は、このコードにそれほどこだわりはありませんし、問題なく動作しています。 SZY: Win10 - 64, build 2093 (Intel Core - 8GB RAM) - 問題は指摘されていません。 -------------- を添付しました。スクリプトです。script フォルダにあります。 ファイル: tst_iXXX_Copy.mq5 8 kb Roman 2019.07.29 21:50 #67 Win10 x64では、すべてのコアが動作しています。 2019.07.30 00:25:29.057 Test (GBPUSD,M1) CopyClose: loops=1410065408 ms=72953 2019.07.30 00:27:51.501 Test (GBPUSD,M1) iClose: loops=1410065408 ms=143625 2019.07.30 00:30:17.904 Test (GBPUSD,M1) Close[i]: loops=1410065408 ms=149078 2019.07.30 00:31:56.618 Test (GBPUSD,M1) CopyRates: loops=1410065408 ms=88891 Debian x64のWine上では、なぜか1つのカーネルしか動作しません。 2019.07.30 00:38:03.104 Test (GBPUSD,M1) CopyClose: loops=1410065408 ms=119863 2019.07.30 00:41:10.478 Test (GBPUSD,M1) iClose: loops=1410065408 ms=187364 2019.07.30 00:44:16.935 Test (GBPUSD,M1) Close[i]: loops=1410065408 ms=186449 2019.07.30 00:46:29.732 Test (GBPUSD,M1) CopyRates: loops=1410065408 ms=132794 ファイル: CPU_Win10.png 47 kb CPU_Wine.png 21 kb Artyom Trishkin 2019.07.29 22:02 #68 Igor Makanu: MQL-sourceのコードは全く同じで、ターミナルログからテストをコピーしました。 うーん、いたずらなペンが他にどこを掘ったのか想像がつかない )))) 私は、このコードにそれほどこだわりはありませんし、問題なく動作しています。 SZY: Win10 - 64, build 2093 (Intel Core - 8GB RAM) - 問題は指摘されていません。 -------------- を添付しました。スクリプトです。script フォルダにあります。 // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos]. // А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume. #define DEFINE_TIMESERIE(NAME,FUNC,T) \ class CLASS##NAME \ { \ public: \ static T Get(const string Symb,const int TimeFrame,const int iShift) \ { \ T tValue[]; \ \ return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \ } \ \ T operator[](const int iPos) const \ { \ return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \ } \ }; \ \ CLASS##NAME NAME; \ \ T i##NAME(const string Symb,const int TimeFrame,const int iShift) \ { \ return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \ } //+------------------------------------------------------------------+ DEFINE_TIMESERIE(Volume,TickVolume,long) DEFINE_TIMESERIE(Time,Time,datetime) DEFINE_TIMESERIE(Open,Open,double) DEFINE_TIMESERIE(High,High,double) DEFINE_TIMESERIE(Low,Low,double) DEFINE_TIMESERIE(Close,Close,double) #define test(M,S,EX) {ulong mss=GetTickCount();ulong nn=(ulong)pow(10,M);for(ulong tst=0;tst<nn&&!_StopFlag;tst++){EX;} \ printf("%s: loops=%i ms=%u",S,nn,GetTickCount()-mss);} //+------------------------------------------------------------------+ void OnStart() { double buff[1]; MqlRates rates[1]; srand(GetTickCount()); test(10,"CopyClose",CopyClose(_Symbol,_Period,rand(),1,buff)); srand(GetTickCount()); test(10,"iClose",iClose(NULL,0,rand())); srand(GetTickCount()); test(10,"Close[i]",Close[rand()]); srand(GetTickCount()); test(10,"CopyRates",CopyRates(_Symbol,_Period,rand(),1,rates)); } //+------------------------------------------------------------------+ Vin10 - 64 , ビルド 2093 (Intel Core i3-3217U CPU @ 1.80GHz - 12GB RAM)- 問題なし... Igor Makanu 2019.07.29 22:09 #69 Artyom Trishkin: の問題点に気づいた... ここでやるべきことは、サイクル数を減らすことと、スクリプトが動作する場所があれば - GetLastError()アンパッキングを使ってそれを探すことだけ または、端末の設定?- うーん、どんな設定があるんだろう?- チャート上のバーの本数、以上 Artyom Trishkin 2019.07.29 22:20 #70 Igor Makanu: ここでは、サイクル数を減らし、スクリプトが動作する場所があれば - GetLastError()アンドゥを使用することです。 または、端末の設定?- うーん、どんな設定があるんだろう?- チャートのバーの数、これだけです。 探す時間がないんです。何か「はずれ」があるのでは......と思いつつ、とりあえず実行して結果を見た。そうしてはい、そしてスクリプトはすぐには動作せず、そのアイコンのPCMを押して強制的に閉じるまでハングします。そして初めて、そこにある何かが印刷されるのです。一般的に - マクロでは、何らかの理由で1つの手間がかかります。 1234567891011121314 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
を測定しました。
2019.07.30 00:44:29.156 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69407
2019.07.30 00:45:29.408 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=60250
スクリプトを実行する
どうしたんですか?(考える暇もなく)
スクリプトを実行する
どうしたんですか?(考える暇もなく)
チャート上のバーの数のチェックはありません、多分存在しないバーによって終了します - 私はeuの無制限とH1期間を持って、rand()は最大65000を与えるようです。
rand()コンパイラをポチりました、4つのメソッドの正しいテストはこちらです。
2019.07.30 00:59:10.911 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69765
2019.07.30 01:01:23.655 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=132735
2019.07.30 01:03:51.541 tst_iXXX_Copy (EURUSD,H1) Close[i]: loops=1410065408 ms=147890
2019.07.30 01:05:19.872 tst_iXXX_Copy (EURUSD,H1) CopyRates: loops=1410065408 ms=88328
チャート上のバー数のチェックがないので、存在しないバーでクラッシュする可能性があります - 私はeuで無制限とH1期間を持っていますが、rand()は最大で65000を与えるようです
rand()コンパイラをポチりました、4つのメソッドの正しいテストはこちらです。
2019.07.30 00:59:10.911 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69765
2019.07.30 01:01:23.655 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=132735
2019.07.30 01:03:51.541 tst_iXXX_Copy (EURUSD,H1) Close[i]: loops=1410065408 ms=147890
2019.07.30 01:05:19.872 tst_iXXX_Copy (EURUSD,H1) CopyRates: loops=1410065408 ms=88328
ファイルが必要なときには、なぜか不利になる :)
うーん、やっぱりハーフリッターじゃないと無理か...。
なぜ私のソースコードではloops=-2147483648が違うのですか!
;)
追記:ulong-intsの定義での置換について - 朝までテストするのであれば ))) 。)
うーん、やっぱりハーフリッターじゃないと無理か...。
なぜ私のソースコードではloops=-2147483648が違うのですか!
;)
PS: 定義でintをulong-intoする - 朝までテストする場合 )))
交換された。
:))
交換された。
:))
MQL-ソースコードは1対1なので、ターミナルログからテストをコピーしてみました。
うーん、いたずらな手が他にどこを掘ったのか想像がつかない ))))
私は、このコードにそれほどこだわりはありませんし、問題なく動作しています。
SZY: Win10 - 64, build 2093 (Intel Core - 8GB RAM) - 問題は指摘されていません。
--------------
を添付しました。スクリプトです。script フォルダにあります。
Debian x64のWine上では、なぜか1つのカーネルしか動作しません。
MQL-sourceのコードは全く同じで、ターミナルログからテストをコピーしました。
うーん、いたずらなペンが他にどこを掘ったのか想像がつかない ))))
私は、このコードにそれほどこだわりはありませんし、問題なく動作しています。
SZY: Win10 - 64, build 2093 (Intel Core - 8GB RAM) - 問題は指摘されていません。
--------------
を添付しました。スクリプトです。script フォルダにあります。
Vin10 - 64 , ビルド 2093 (Intel Core i3-3217U CPU @ 1.80GHz - 12GB RAM)- 問題なし...
の問題点に気づいた...
ここでやるべきことは、サイクル数を減らすことと、スクリプトが動作する場所があれば - GetLastError()アンパッキングを使ってそれを探すことだけ
または、端末の設定?- うーん、どんな設定があるんだろう?- チャート上のバーの本数、以上
ここでは、サイクル数を減らし、スクリプトが動作する場所があれば - GetLastError()アンドゥを使用することです。
または、端末の設定?- うーん、どんな設定があるんだろう?- チャートのバーの数、これだけです。
探す時間がないんです。何か「はずれ」があるのでは......と思いつつ、とりあえず実行して結果を見た。そうしてはい、そしてスクリプトはすぐには動作せず、そのアイコンのPCMを押して強制的に閉じるまでハングします。そして初めて、そこにある何かが印刷されるのです。一般的に - マクロでは、何らかの理由で1つの手間がかかります。