エラー、バグ、質問 - ページ 1936 1...192919301931193219331934193519361937193819391940194119421943...3185 新しいコメント Renat Fatkhullin 2017.07.21 09:00 #19351 Aleksey Vyazmikin:のため、まだコードを表示する準備ができていません。しかし、MT5からプロファイリングの結果を表示する準備ができている - 私はトレーディング機能は問題外であると理解しています。OHLC環境では、以下の機能を使用しています。 もしかして、私のやり方が悪いのでしょうか?残念ながら、あなたはやり方を間違えて います。ネイティブで効率的なMQL5のコードを書く代わりに、ひどく非効率なMQL4エミュレーターを使い、何十倍も動作を遅くして いるのです。 悪いのは、速度に関する質問をしているのだから、自分が何をやっているのかすら分かっていないことだ。 fxsaber 2017.07.21 09:07 #19352 Aleksey Vyazmikin:その結果、次のようなコードになります。https://www.mql5.com/ru/code/18305 Высокопроизводительная библиотека iTimeSeries 投票: 192017.05.25nicholishenwww.mql5.com Эта библиотека предоставляет молниеносный доступ к таймсериям для реализации привычных методов MQL4 (например, iBarShift) в чувствительных к задержкам приложениях на MQL5. Aleksey Vyazmikin 2017.07.21 12:14 #19353 fxsaber:https://www.mql5.com/ru/code/18305ありがとうございます - このライブラリは見たことがあります - 説明は分かりにくかったです ほとんどの時間は、初期化の段階で 費やされます。時系列データに何度もアクセスする予定がない限り(バー形成中に数千回以上)、別の方法を検討する必要があります。 私のExpert Advisorはバーのオープニングでしか動作しませんが、試してみることに意味があると思いますか? Aleksey Vyazmikin 2017.07.21 12:27 #19354 Renat Fatkhullin:残念ながら、やり方が間違って いるのです。ネイティブで効率的なMQL5コードを書く代わりに、ひどく非効率なMQL4エミュレーターを使い、何十倍も動作を遅くして いるのです。 悪いのは、速度について質問しているのだから、自分が何をしているのかすら理解していないことだ。もちろん、私は解決策を探していました - MQL4の関数をMQL5に置き換える方法、特に時系列を参照すること、そしてこれがMQL5に移行するほとんどの人が遭遇する問題の1つであることを見ました。そこで、同サイトの記事の中で、私の方法を推奨しているものがあり、解決策を見つけました。個人的には、便利で良い機能を言語から排除する理由が理解できません。そこで質問ですが、情報の正しい受け取り方と、MQL5の 活用方法について教えてください。 Renat Fatkhullin 2017.07.21 12:55 #19355 Aleksey Vyazmikin:そこで質問ですが、MQL5の 良さを実感するために、受信データを正しく整理するにはどうしたらよいのでしょうか。MQL4のコードにしがみつかず、MQL5のネイティブでより生産性の高い機能を利用すること。MQL4 -> MQL5コンバータ/スプリッターは、MQL4のダイレクトアクセスマイクロファンクションをMQL5のバルクオペレーションでエミュレートしようとするため、パフォーマンスが数十倍遅くなります。しかも、そのエミュレーションは、最適化やキャッシュをまったく行わずに行われるのです。特定の機能(他人のコードを含むコードのビット)を使用する根底には、具体的に何が行われているかという理解があるはずです。そうしないと、「他人のコードを使ったばかりに速度が落ちた!」ということになります。道具を理解し、それを使って何をするのかを理解しなければ、良い結果を得ることはできません。 正しいやり方」に加えて、「プログラミングを学ぶ」という作業は、ある言語を操作する(理解するのではなく、操作する)という最も基本的なレベル以上になると、極めて困難であることを明確にしておく。ですから、大量の記事、ドキュメント、ライブラリにある既成のコードを読み、数年間強制的に練習する以外に、学ぶ方法はないと思っています。 Aleksey Vyazmikin 2017.07.21 13:10 #19356 Renat Fatkhullin:MQL4コードに固執せず、MQL5言語のネイティブでより生産的な機能を使用してください。特定の関数(他人のコードを含むコードの一部)を使用する根底には、何が行われているのかを理解することが必要です。そうしないと、「他人のコードを使っただけなのに、見ろよ、速度が落ちたぞ!」となる。道具を理解し、それを使って何をするのかを理解しなければ、良い結果を得ることはできません。 正しいやり方」に加えて、「プログラミングを学ぶ」という作業は、その言語を操作する(理解するのではなく、操作する)最も基本的なレベル以上になると、非常に困難であることを明確にしておく必要があります。だから、記事やドキュメントを読み、ライブラリにあるレディコードを読み、数年間練習する以外に、学ぶ方法はないと思っているんだ。Renatさん、コードベースはご覧になりましたか?MQL4から流用した関数を使ったコードがあるのですが。私は、環境に関する正しい情報を得る方法を具体的に書いてくださいと言っているのです。抽象的な本を参照することは生産的ではなく、チェックできない言い訳に過ぎないという私の(おそらく間違った)考えを強めるだけです。配列に情報をコピーする関数の意味が分からないほど頭が悪いというのは、プログラミング言語の付属文書が低レベルであることを意味する。この配列から別の配列へのコピーの利点と、必要に応じて配列から情報を取得する関数がなぜひどいコードになるのか理解できません。 Alexey Viktorov 2017.07.21 13:42 #19357 Aleksey Vyazmikin:もちろん、MQL4の関数をMQL5に置き換える方法、特に時系列を参照する方法を探していて、これがMQL5に移行するほとんどの人が遭遇する問題の1つであることを知りました。そこで、同サイトの記事の中で、私の方法を推奨しているものがあり、解決策を見つけました。個人的には、便利で良い機能を言語から排除する理由が理解できません。だからこそお聞きしたいのですが、私がMQL5の 良さを実感するための正しい情報の受け取り方とは何でしょうか?もしかして私の探し方が悪いのでしょうか?ここでは、このすべてのコードの代わりに必要なものを1つのコピーにまとめています。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム エラー、バグ、質問 アレクセイ・ヴャズミキン さん 2017.07.21 01:20 ありがとうございます - 修正しました。その結果、以下のようなコードになりました。//------------------------------------------------------------------- //==MQL4toMQL5 //+------------------------------------------------------------------+ //| Получим Open для заданного номера бара | //+------------------------------------------------------------------+ double Open(int index) { double open=0; int copied=CopyOpen(Symbol(),0,index,1,Open); if(copied>0) open=Open[0]; return(open); } //+------------------------------------------------------------------+ //| Получим Low для заданного номера бара | //+------------------------------------------------------------------+ double Low(int index) { double low=0; int copied=CopyLow(Symbol(),0,index,1,Low); if(copied>0) low=Low[0]; return(low); } //+------------------------------------------------------------------+ //| Получим High для заданного номера бара | //+------------------------------------------------------------------+ double High(int index) { double high=0; int copied=CopyHigh(Symbol(),0,index,1,High); if(copied>0) high=High[0]; return(high); } //+------------------------------------------------------------------+ //| Получим Close для заданного номера бара | //+------------------------------------------------------------------+ double Close(int index) { double close=0; int copied=CopyClose(Symbol(),0,index,1,Close); if(copied>0) close=Close[0]; return(close); } //+------------------------------------------------------------------+ //| Получим IOpen для заданного номера бара | //+------------------------------------------------------------------+ double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double open=0; int copied=CopyOpen(symbol,timeframe,index,1,OpenI); if(copied>0) open=OpenI[0]; return(open); } //+------------------------------------------------------------------+ //| Получим iLow для заданного номера бара | //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; int copied=CopyLow(symbol,timeframe,index,1,LowI); if(copied>0) low=LowI[0]; return(low); } //+------------------------------------------------------------------+ //| Получим iHigh для заданного номера бара | //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; int copied=CopyHigh(symbol,timeframe,index,1,HighI); if(copied>0) high=HighI[0]; return(high); } //+------------------------------------------------------------------+ //| Получим iClose для заданного номера бара | //+------------------------------------------------------------------+ double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double close=0; int copied=CopyClose(symbol,timeframe,index,1,CloseI); if(copied>0) close=CloseI[0]; return(close); }テスターの時間が長くなった - もう待ちくたびれた ::)使うためには、どういう構造なのかを理解すればいいのですstruct MqlRates { datetime time; // время начала периода double open; // цена открытия double high; // наивысшая цена за период double low; // наименьшая цена за период double close; // цена закрытия long tick_volume; // тиковый объем int spread; // спред long real_volume; // биржевой объем }; Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates www.mql5.com Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Aleksey Vyazmikin 2017.07.21 14:10 #19358 Alexey Viktorov:もしかしたら、私の見方が悪かったのか?この 1冊で、このようなコードの代わりに必要なものをすべて手に入れることができます。これを使うためには、構造がどうなっているかを理解すればいいのです同じものが出てくるんですよ、実は...。ご指摘のバリエーションは、ifleに合っていますね。- 計算が行われるのは、バーの開店時のみです。- 必要なバーの本数が事前にわかるコードにループがあり、計算量があらかじめわからない場合があるのですが。また、新しいバーの情報を追加するだけの方が合理的なのに、例えば300本分の情報を開くたびにコピーすることに何の意味があるのか、開発者はなぜこの方法をとらなかったのでしょうか。 Renat Fatkhullin 2017.07.21 14:42 #19359 申し訳ないが、初心者にいちいちプログラミングを教えることに付き合っている時間は全くない。特に、その人がプログラミングを理解するための基礎すらできていないことがわかると、つまらないことを聞いてくるんです。 でも、方向性は示しますよ。MQL5ドキュメントコードベース記事一覧フォーラム(「俺のために書いてくれ、なんで教えてくれないんだ、俺の仕事しろ」モードではない)フリーランス(こちらは正しく書けるそうです)"なぜこのラッパーが遅くなり、リソースを浪費しなければならないのか、最適に書き直せるかもしれない "という思慮深い分析による独立した仕事。 コードの各行におけるリソースの実際の消費量を示すプロファイラの 使用 Профилирование кода - Разработка программ - Справка по MetaEditor www.metatrader5.com Профилирование — это сбор характеристик программы, таких как время выполнения отдельных ее фрагментов (функций, строк). В MetaEditor встроена... Alexey Viktorov 2017.07.21 14:54 #19360 このような形でコミュニケーションを図りたいとは思っていません。その話を理解しようとせず、何が起こるのかを考えようとせず、信じられないような反論を投げかけてくるのです。 1...192919301931193219331934193519361937193819391940194119421943...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
のため、まだコードを表示する準備ができていません。
しかし、MT5からプロファイリングの結果を表示する準備ができている - 私はトレーディング機能は問題外であると理解しています。
もしかして、私のやり方が悪いのでしょうか?OHLC環境では、以下の機能を使用しています。
残念ながら、あなたはやり方を間違えて います。
ネイティブで効率的なMQL5のコードを書く代わりに、ひどく非効率なMQL4エミュレーターを使い、何十倍も動作を遅くして いるのです。
悪いのは、速度に関する質問をしているのだから、自分が何をやっているのかすら分かっていないことだ。その結果、次のようなコードになります。
https://www.mql5.com/ru/code/18305
https://www.mql5.com/ru/code/18305
ありがとうございます - このライブラリは見たことがあります - 説明は分かりにくかったです
ほとんどの時間は、初期化の段階で 費やされます。時系列データに何度もアクセスする予定がない限り(バー形成中に数千回以上)、別の方法を検討する必要があります。
残念ながら、やり方が間違って いるのです。
ネイティブで効率的なMQL5コードを書く代わりに、ひどく非効率なMQL4エミュレーターを使い、何十倍も動作を遅くして いるのです。
悪いのは、速度について質問しているのだから、自分が何をしているのかすら理解していないことだ。もちろん、私は解決策を探していました - MQL4の関数をMQL5に置き換える方法、特に時系列を参照すること、そしてこれがMQL5に移行するほとんどの人が遭遇する問題の1つであることを見ました。
そこで、同サイトの記事の中で、私の方法を推奨しているものがあり、解決策を見つけました。
個人的には、便利で良い機能を言語から排除する理由が理解できません。
そこで質問ですが、情報の正しい受け取り方と、MQL5の 活用方法について教えてください。
そこで質問ですが、MQL5の 良さを実感するために、受信データを正しく整理するにはどうしたらよいのでしょうか。
MQL4のコードにしがみつかず、MQL5のネイティブでより生産性の高い機能を利用すること。MQL4 -> MQL5コンバータ/スプリッターは、MQL4のダイレクトアクセスマイクロファンクションをMQL5のバルクオペレーションでエミュレートしようとするため、パフォーマンスが数十倍遅くなります。しかも、そのエミュレーションは、最適化やキャッシュをまったく行わずに行われるのです。
特定の機能(他人のコードを含むコードのビット)を使用する根底には、具体的に何が行われているかという理解があるはずです。そうしないと、「他人のコードを使ったばかりに速度が落ちた!」ということになります。道具を理解し、それを使って何をするのかを理解しなければ、良い結果を得ることはできません。
正しいやり方」に加えて、「プログラミングを学ぶ」という作業は、ある言語を操作する(理解するのではなく、操作する)という最も基本的なレベル以上になると、極めて困難であることを明確にしておく。ですから、大量の記事、ドキュメント、ライブラリにある既成のコードを読み、数年間強制的に練習する以外に、学ぶ方法はないと思っています。
MQL4コードに固執せず、MQL5言語のネイティブでより生産的な機能を使用してください。
特定の関数(他人のコードを含むコードの一部)を使用する根底には、何が行われているのかを理解することが必要です。そうしないと、「他人のコードを使っただけなのに、見ろよ、速度が落ちたぞ!」となる。道具を理解し、それを使って何をするのかを理解しなければ、良い結果を得ることはできません。
正しいやり方」に加えて、「プログラミングを学ぶ」という作業は、その言語を操作する(理解するのではなく、操作する)最も基本的なレベル以上になると、非常に困難であることを明確にしておく必要があります。だから、記事やドキュメントを読み、ライブラリにあるレディコードを読み、数年間練習する以外に、学ぶ方法はないと思っているんだ。
Renatさん、コードベースはご覧になりましたか?MQL4から流用した関数を使ったコードがあるのですが。
私は、環境に関する正しい情報を得る方法を具体的に書いてくださいと言っているのです。抽象的な本を参照することは生産的ではなく、チェックできない言い訳に過ぎないという私の(おそらく間違った)考えを強めるだけです。
配列に情報をコピーする関数の意味が分からないほど頭が悪いというのは、プログラミング言語の付属文書が低レベルであることを意味する。この配列から別の配列へのコピーの利点と、必要に応じて配列から情報を取得する関数がなぜひどいコードになるのか理解できません。
もちろん、MQL4の関数をMQL5に置き換える方法、特に時系列を参照する方法を探していて、これがMQL5に移行するほとんどの人が遭遇する問題の1つであることを知りました。
そこで、同サイトの記事の中で、私の方法を推奨しているものがあり、解決策を見つけました。
個人的には、便利で良い機能を言語から排除する理由が理解できません。
だからこそお聞きしたいのですが、私がMQL5の 良さを実感するための正しい情報の受け取り方とは何でしょうか?
もしかして私の探し方が悪いのでしょうか?ここでは、このすべてのコードの代わりに必要なものを1つのコピーにまとめています。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
エラー、バグ、質問
アレクセイ・ヴャズミキン さん 2017.07.21 01:20
ありがとうございます - 修正しました。
その結果、以下のようなコードになりました。
テスターの時間が長くなった - もう待ちくたびれた ::)
使うためには、どういう構造なのかを理解すればいいのです
もしかしたら、私の見方が悪かったのか?この 1冊で、このようなコードの代わりに必要なものをすべて手に入れることができます。
これを使うためには、構造がどうなっているかを理解すればいいのです
同じものが出てくるんですよ、実は...。
ご指摘のバリエーションは、ifleに合っていますね。
- 計算が行われるのは、バーの開店時のみです。
- 必要なバーの本数が事前にわかる
コードにループがあり、計算量があらかじめわからない場合があるのですが。
また、新しいバーの情報を追加するだけの方が合理的なのに、例えば300本分の情報を開くたびにコピーすることに何の意味があるのか、開発者はなぜこの方法をとらなかったのでしょうか。
でも、方向性は示しますよ。
このような形でコミュニケーションを図りたいとは思っていません。その話を理解しようとせず、何が起こるのかを考えようとせず、信じられないような反論を投げかけてくるのです。