エラー、バグ、質問 - ページ 2101 1...209420952096209720982099210021012102210321042105210621072108...3185 新しいコメント Alexey Viktorov 2018.01.09 18:16 #21001 damirqa:こんにちは、https://www.mql5.com/ru/articles/100 から MQL5 の勉強を始めました。コードを起動したところ、エラー4756が発生しました。 ドキュメントに目を通しましたが、これ以上はダメでした。まずは簡単なもの(Alert/Print...)から始めてみようと思ったのです。最も重要な機能のひとつがOrderSendです。OrderSendの使い方について、フォーラム/ドキュメントを検索し始めました。この記事https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions、 買いポジションを開くためのコードが見つかりました。エラー4756とretcode10030が出ました。10030 - それはOrderSendプロパティであることは理解しましたが、このプロパティがどのように使用されるべきか(他の人のコードを見ました)、そして主に何のために使用されるのかが理解できていません。そして、https://www.mql5.com/ru/docs/trading/ordersend を開き、 コードをコピーして実行したら、うまくいきました。 しかし、なぜエラー4756が出るのか、どうすれば10030と同じように解消できるのか、まだ理解できていません。の間のコードを見てみました。とこちらも私にはほとんど同じに見えますが、これらのエラーはどこに出ているのでしょうか(4756と10030)。指をさして説明してください。 構造体の1フィールドが未入力である。そして、十分とは言えないが、そんなエラーはない。インスタントエグゼキューション即時約定モード(ストリーミング価格で取引するモード)でポジションを建てるための取引注文です。9項目は必須項目です。アクション記号ボリューム価格スラムティーピー偏差値タイプタイプフィリングまた、マジックやコメント欄の指定も可能です。マーケットエグゼキューション成行執行モードでポジションを建てるための取引注文。5つのフィールドの指定が必要です。アクション記号ボリュームタイプタイプフィリングまた、マジックやコメント欄の指定も可能です。 Konstantin 2018.01.11 10:53 #21002 what update has arrived, 1736, what's in it, where can I read it? Vladimir Pastushak 2018.01.12 07:21 #21003 どのインジケータがチャートに描画されているかをプログラムで決定する機会を提供することを提案します。仮にトレーダーが独自のインディケータを始めたとすると、計算に使うバッファの数と、チャート上にインディケータを 描くために使うバッファの数が分かりません。カスタムインディケーターへの対応intChartIndicatorGet() longchart_id,// チャート識別子intsub_window// サブウィンドウの番号const string indicator_shortname // 短いインジケータ名);また、描画バッファの配列を要求することもできますintChartIndicatorGet() longchart_id,// チャート識別子intsub_window//ウインドウ番号const string indicator_shortname // 短いインジケータ名int & IndicatorVisualBuffer[] // 描画バッファの番号...);これにより、チャートにインストールされている未知のインジケーターと連携できる可能性が広がります... Alexey Viktorov 2018.01.12 07:32 #21004 Vladimir Pastushak:どのインジケータがチャートに描画されているかをプログラムで決定する機会を提供することを提案します。トレーダーがインジケータを始めたとすると、計算に使われるバッファの数と、チャート上にインジケータを 描画するために使われるバッファの数が分かりません。による指標への対応intChartIndicatorGet() longchart_id,// チャートIDintsub_window// サブウィンドウの番号const string indicator_shortname // 短いインジケータ名);また、描画バッファの配列を要求することもできますintChartIndicatorGet() longchart_id,// チャート識別子intsub_window//ウインドウ番号const string indicator_shortname // 短いインジケータ名int & IndicatorVisualBuffer[] // 描画バッファの番号...);これにより、チャートにインストールされている未知のインジケーターと連携する可能性が高まります...何を返してくれるの? int ChartIndicatorGet( long chart_id, // идентификатор графика int sub_window // номер подокна const string indicator_shortname // короткое имя индикатора );そして、それを追加することに何の意味があるのでしょうか?入力パラメータを追加して、その応答として同じインジケータハンドルを受け取りたい...。また、差し支えなければ、どのような目的で必要なのでしょうか?私は皮肉を言っているのではありません。やはり、提案されたものは、その必要性について説得力のある議論をすべきと私は思います。 Vladimir Pastushak 2018.01.12 07:37 #21005 Alexey Viktorov:何を返すか とか、追加して何かいいことあるのか?入力パラメータを追加して、その応答として同じインジケータ・ハンドルを取得することを提案する...そして、もしそれが困難でないとしたら、そのような必然性は何のために現れたのでしょうか。皮肉を込めた問いかけがない。やはり、何かを提供するのであれば、その必要性を説得的に説明することが必要だと思うのです。ユーザーは任意のインジケータを置く。Expert Advisorは自動的にそれを見つけ、バッファデータを使ってシグナルを受信します。あとはiCustomを使って、パラメータリストを書けばいいのですが、ここでバッファの問題が......。Copyでバッファ量をカウントすることは可能ですが、どのバッファなのかを把握することは不可能です ... Alexey Viktorov 2018.01.12 07:50 #21006 Vladimir Pastushak: ユーザーは任意のインジケータを配置する。Expert Advisorは自動的にそれを見つけ、バッファーのデータを使ってシグナルを取得します。あとはiCustomを使って、パラメータのリストを書けばいいのですが、ここでバッファの問題が......。プログラムでCopyを使ってバッファ量をカウントすることは可能ですが、どれが描画しているのか把握できません ...なぜ不可能なのか?iCustom()で バッファINDICATOR_CALCULATIONSを取り出すことは可能ですか?質問は面白いが、それを議論するのはこのスレッドではない。個人的には、それが何らかの形でプログラマーの仕事を改善したり、簡略化したりすることができるのか、疑問を持っています。指標が違いすぎるし、適用条件も違いすぎる。そうすると、グラフィカルなプロットの種類を 決められるようにしてほしいとか、社内の要望が雪だるま式に増えていくんです。 Vladimir Pastushak 2018.01.12 08:41 #21007 Alexey Viktorov:なぜできないのでしょうか?iCustom()でINDICATOR_CALCULATIONS バッファにアクセスできますか?質問は面白いが、それを議論するのはこのスレッドではない。個人的には、それが何らかの形でプログラマーの仕事を改善したり、円滑にしたりすることができるのか、疑問を持っています。指標が違いすぎるし、適用する条件も違いすぎる。そうすると、グラフィカルなプロットの種類を 決められるようにしてほしいとか、社内の要望が雪だるま式に増えていくんです。理論的には、インジケータにデフォルトで書き込まれているもの(プログラマーのコードのことではありません)は、外部から利用できるはずです.バッファの数、プロットの種類、色、その他の標準的な... Alexey Viktorov 2018.01.15 10:08 #21008 これが、私が遭遇した問題です。ChartIDを1000か10000で割った余りをマジックとして使うことにしました。しかし、なぜかChartID()を変えると、割り算の残りが突然同じになります。質問:なぜですか?スクリプトを確認する/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d = 100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", fmod(ChartID(), d)); }/*******************************************************************/ 結果2018.01.15 13:01:45.881 Script 00 EURUSD,M15: removed 2018.01.15 13:01:45.881 00 EURUSD,M15: uninit reason 0 2018.01.15 13:01:45.881 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 13:01:45.881 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 13:01:45.881 00 EURUSD,M15: initialized 2018.01.15 13:01:45.871 Script Test\00 EURUSD,M15: loaded successfully 2018.01.15 13:01:40.361 Script 00 EURUSD,H1: removed 2018.01.15 13:01:40.361 00 EURUSD,H1: uninit reason 0 2018.01.15 13:01:40.361 00 EURUSD,H1: fmod(ChartID(), 100000) = 74912 2018.01.15 13:01:40.361 00 EURUSD,H1: ChartID - 131472503841474908 2018.01.15 13:01:40.361 00 EURUSD,H1: initialized 2018.01.15 13:01:40.351 Script Test\00 EURUSD,H1: loaded successfully 割り算の残りは同じはずなので、それぞれ74907と74908が表示されると予想しました。この質問に対する回答も待っています。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム バグ、バグ、質問 アレクセイ・ビクトロフ さん 2018.01.09 14:21 MT5テスターでは、「入力フィールド」オブジェクトOBJ_EDITは、その中にある値を編集することを許可して いません。これは設計上そうなっているのか、それともバグなのか?ターミナルとMT4テスターでは編集可能ですが、MT5テスターでは編集しようとせず、オブジェクト作成 時にプログラムで入力した値が全く消えてしまいます。 fxsaber 2018.01.15 10:53 #21009 Alexey Viktorov:しかし、なぜか違うChartID()でいきなり同じ残差を割り算で出してしまう。質問:なぜですか?入力fmodが2倍になっているため。Doubleは膨大な数の整数を格納することができません。例えば、こんなケースです。Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912 これをやってください。long fmod( const long Value, const long Value2 ) { return(Value % Value2); }floatを例にとると、doubleの特殊性がすぐに理解できます。#define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { for (int i = 0; i < INT_MAX; i++) if ((int)(float)i != i) { PRINT(i); PRINT((float)i); PRINT((double)i); break; } }結果i = 16777217 (float)i = 16777216.0 (double)i = 16777217.0SZYダブルはインレンジ全体の情報を失わない、ロングではそうではない。 Alexey Viktorov 2018.01.15 11:11 #21010 fxsaber:入力のfmodがdoubleであるため。Doubleは膨大な数の整数を格納することができません。例えば、あなたの場合。これをやってください。もちろん、このサンプルはこれから確認するのですが、こんなチェックコードもありました。/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d=100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", fmod(ChartID(), d)); printf("LONG_MAX = %I64d",LONG_MAX); printf("DBL_MAX = %.16e",DBL_MAX); Print("DBL_MAX-LONG_MAX = ", DBL_MAX-LONG_MAX); }/*******************************************************************/ その結果2018.01.15 14:07:20.440 Script 00 EURUSD,M15: removed 2018.01.15 14:07:20.440 00 EURUSD,M15: uninit reason 0 2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX-LONG_MAX = 17976931348623157081452742373170435679807 0567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX = 1.7976931348623157 e+308 2018.01.15 14:07:20.440 00 EURUSD,M15: LONG_MAX = 9223372036854775807 2018.01.15 14:07:20.440 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 14:07:20.440 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 14:07:20.440 00 EURUSD,M15: initialized 2018.01.15 14:07:20.430 Script Test\00 EURUSD,M15: loaded successfully 値の切り捨てが行われてはならないことを示す。しかし、ここで私はこのバリアントを確認し、提案されたものを少し変更しました。/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d=100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", (long)fmod(ChartID(), d)); Print("ChartID() % ", d, " = ", ChartID() % d); }/*******************************************************************/ で、期待通りのバリアントが得られました。2018.01.15 14:17:51.301 Script 00 EURUSD,M15: removed 2018.01.15 14:17:51.301 00 EURUSD,M15: uninit reason 0 2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID() % 100000 = 74907 2018.01.15 14:17:51.301 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 14:17:51.301 00 EURUSD,M15: initialized 2018.01.15 14:17:51.291 Script Test\00 EURUSD,M15: loaded successfully もうひとつの疑問が浮かびます。 MathMod および fmod が、2つの数値の除算後の 実数余りを 返す場合。そして、ドキュメントによると分の余り=時間%60。 なぜ違いがあるのでしょうか? 1...209420952096209720982099210021012102210321042105210621072108...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、https://www.mql5.com/ru/articles/100 から MQL5 の勉強を始めました。コードを起動したところ、エラー4756が発生しました。 ドキュメントに目を通しましたが、これ以上はダメでした。まずは簡単なもの(Alert/Print...)から始めてみようと思ったのです。最も重要な機能のひとつがOrderSendです。OrderSendの使い方について、フォーラム/ドキュメントを検索し始めました。この記事https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions、 買いポジションを開くためのコードが見つかりました。エラー4756とretcode10030が出ました。10030 - それはOrderSendプロパティであることは理解しましたが、このプロパティがどのように使用されるべきか(他の人のコードを見ました)、そして主に何のために使用されるのかが理解できていません。そして、https://www.mql5.com/ru/docs/trading/ordersend を開き、 コードをコピーして実行したら、うまくいきました。
しかし、なぜエラー4756が出るのか、どうすれば10030と同じように解消できるのか、まだ理解できていません。
の間のコードを見てみました。
とこちらも
私にはほとんど同じに見えますが、これらのエラーはどこに出ているのでしょうか(4756と10030)。指をさして説明してください。
インスタントエグゼキューション
即時約定モード(ストリーミング価格で取引するモード)でポジションを建てるための取引注文です。9項目は必須項目です。
また、マジックやコメント欄の指定も可能です。
マーケットエグゼキューション
成行執行モードでポジションを建てるための取引注文。5つのフィールドの指定が必要です。
また、マジックやコメント欄の指定も可能です。
what update has arrived, 1736, what's in it, where can I read it?
どのインジケータがチャートに描画されているかをプログラムで決定する機会を提供することを提案します。
仮にトレーダーが独自のインディケータを始めたとすると、計算に使うバッファの数と、チャート上にインディケータを 描くために使うバッファの数が分かりません。
カスタムインディケーターへの対応
intChartIndicatorGet()
longchart_id,// チャート識別子
intsub_window// サブウィンドウの番号
const string indicator_shortname // 短いインジケータ名
);
また、描画バッファの配列を要求することもできます
intChartIndicatorGet()
longchart_id,// チャート識別子
intsub_window//ウインドウ番号
const string indicator_shortname // 短いインジケータ名
int & IndicatorVisualBuffer[] // 描画バッファの番号...);
これにより、チャートにインストールされている未知のインジケーターと連携できる可能性が広がります...
どのインジケータがチャートに描画されているかをプログラムで決定する機会を提供することを提案します。
トレーダーがインジケータを始めたとすると、計算に使われるバッファの数と、チャート上にインジケータを 描画するために使われるバッファの数が分かりません。
による指標への対応
intChartIndicatorGet()
longchart_id,// チャートID
intsub_window// サブウィンドウの番号
const string indicator_shortname // 短いインジケータ名
);
また、描画バッファの配列を要求することもできます
intChartIndicatorGet()
longchart_id,// チャート識別子
intsub_window//ウインドウ番号
const string indicator_shortname // 短いインジケータ名
int & IndicatorVisualBuffer[] // 描画バッファの番号...);
これにより、チャートにインストールされている未知のインジケーターと連携する可能性が高まります...
何を返してくれるの?
そして、それを追加することに何の意味があるのでしょうか?入力パラメータを追加して、その応答として同じインジケータハンドルを受け取りたい...。
また、差し支えなければ、どのような目的で必要なのでしょうか?私は皮肉を言っているのではありません。やはり、提案されたものは、その必要性について説得力のある議論をすべきと私は思います。
何を返すか
とか、追加して何かいいことあるのか?入力パラメータを追加して、その応答として同じインジケータ・ハンドルを取得することを提案する...
そして、もしそれが困難でないとしたら、そのような必然性は何のために現れたのでしょうか。皮肉を込めた問いかけがない。やはり、何かを提供するのであれば、その必要性を説得的に説明することが必要だと思うのです。
ユーザーは任意のインジケータを置く。
Expert Advisorは自動的にそれを見つけ、バッファデータを使ってシグナルを受信します。
あとはiCustomを使って、パラメータリストを書けばいいのですが、ここでバッファの問題が......。
Copyでバッファ量をカウントすることは可能ですが、どのバッファなのかを把握することは不可能です ...
ユーザーは任意のインジケータを配置する。
Expert Advisorは自動的にそれを見つけ、バッファーのデータを使ってシグナルを取得します。
あとはiCustomを使って、パラメータのリストを書けばいいのですが、ここでバッファの問題が......。
プログラムでCopyを使ってバッファ量をカウントすることは可能ですが、どれが描画しているのか把握できません ...
なぜ不可能なのか?iCustom()で バッファINDICATOR_CALCULATIONSを取り出すことは可能ですか?
質問は面白いが、それを議論するのはこのスレッドではない。個人的には、それが何らかの形でプログラマーの仕事を改善したり、簡略化したりすることができるのか、疑問を持っています。指標が違いすぎるし、適用条件も違いすぎる。そうすると、グラフィカルなプロットの種類を 決められるようにしてほしいとか、社内の要望が雪だるま式に増えていくんです。
なぜできないのでしょうか?iCustom()でINDICATOR_CALCULATIONS バッファにアクセスできますか?
質問は面白いが、それを議論するのはこのスレッドではない。個人的には、それが何らかの形でプログラマーの仕事を改善したり、円滑にしたりすることができるのか、疑問を持っています。指標が違いすぎるし、適用する条件も違いすぎる。そうすると、グラフィカルなプロットの種類を 決められるようにしてほしいとか、社内の要望が雪だるま式に増えていくんです。
理論的には、インジケータにデフォルトで書き込まれているもの(プログラマーのコードのことではありません)は、外部から利用できるはずです.バッファの数、プロットの種類、色、その他の標準的な...
これが、私が遭遇した問題です。
ChartIDを1000か10000で割った余りをマジックとして使うことにしました。
しかし、なぜかChartID()を変えると、割り算の残りが突然同じになります。質問:なぜですか?
スクリプトを確認する
結果
割り算の残りは同じはずなので、それぞれ74907と74908が表示されると予想しました。
この質問に対する回答も待っています。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
アレクセイ・ビクトロフ さん 2018.01.09 14:21
MT5テスターでは、「入力フィールド」オブジェクトOBJ_EDITは、その中にある値を編集することを許可して いません。これは設計上そうなっているのか、それともバグなのか?
ターミナルとMT4テスターでは編集可能ですが、MT5テスターでは編集しようとせず、オブジェクト作成 時にプログラムで入力した値が全く消えてしまいます。
しかし、なぜか違うChartID()でいきなり同じ残差を割り算で出してしまう。質問:なぜですか?
入力fmodが2倍になっているため。Doubleは膨大な数の整数を格納することができません。例えば、こんなケースです。
これをやってください。
floatを例にとると、doubleの特殊性がすぐに理解できます。
結果
SZYダブルはインレンジ全体の情報を失わない、ロングではそうではない。
入力のfmodがdoubleであるため。Doubleは膨大な数の整数を格納することができません。例えば、あなたの場合。
これをやってください。
もちろん、このサンプルはこれから確認するのですが、こんなチェックコードもありました。
その結果
値の切り捨てが行われてはならないことを示す。
しかし、ここで私はこのバリアントを確認し、提案されたものを少し変更しました。
で、期待通りのバリアントが得られました。
もうひとつの疑問が浮かびます。
MathMod および fmod が、2つの数値の除算後の 実数余りを 返す場合。そして、ドキュメントによると
分の余り=時間%60。
なぜ違いがあるのでしょうか?