エラー、バグ、質問 - ページ 1781 1...177417751776177717781779178017811782178317841785178617871788...3185 新しいコメント A100 2017.02.05 13:33 #17801 不安定な性能インジケーター位置のパス。 \୧⃛(๑⃙⃘◡̈๑⃙⃘)Expert Advisorの保存先パス: \ExpertsTest.ex5スクリプトの場所パス。 \♪♪~ステップの順序Test_s.ex5'スクリプトをM15チャート(EURUSDシンボル)に複数回接続します。結果2017.02.05 15:17:59.076 OnStart 1回目装着時 2017.02.05 15:18:03.293 OnStart 2回目を装着しました。 2017.02.05 15:18:07.760 OnStart 3回目の参加です。 2017.02.05 15:18:07.778 OnInit 2017.02.05 15:18:07.781 OnDeinit:1 2017.02.05 15:18:16.891 OnStart 4回目の参加となりました。結合の結果が違うのです。OnInitOnDeinitの行は1回目から表示されることもあれば、10回目から表示されることもあり、結果はランダムです。//Test_i.mq5 //Индикаторvoid OnInit() { Print( __FUNCTION__ ); }void OnDeinit( const int reason ) { Print( __FUNCTION__, ":", reason ); }int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }//Test_s.mq5 //Скрипт#import "..\\Experts\\Test.ex5" void OnInit();#importvoid OnStart(){ Print( __FUNCTION__ ); OnInit();}エキスパートファイル添付(実際にはライブラリとして使用)、コードはこちらhttps://www.mql5.com/ru/forum/1111/page1801#comment_4059227 Ошибки, баги, вопросы www.mql5.com Форум алго-трейдеров MQL5 ファイル: Test.mq5 1 kb Errors, bugs, questions Discussion of article "Trade Overview of Copy functions Aleksey Vyazmikin 2017.02.05 16:57 #17802 このエラーが私のものなのか、それとも端末のものなのか理解できません。 5桁目にてvoid OnStart() {double A=1.11111;double B=1.11111;double C=1.11111;long CalcX=NormalizeDouble(A,Digits)*MathPow(10,(Digits+1)*3-1)+NormalizeDouble(B,Digits)*MathPow(10,(Digits+1)*2-1)+NormalizeDouble(C,Digits)*MathPow(10,(Digits+1)*1-1);Print ("CalcX=",CalcX); }印刷 CalcX=111111111111111104 期待値 CalcX=1111111111111111111 Slava 2017.02.05 17:24 #17803 A100:チャート周期変更時の関数呼び出し順が正しくない。Indicator location path: \IndicatorsTest_i.ex5Expertの場所: {ExpertsTest.ex5アクションのシーケンス。Test.ex5' Expert AdvisorをM5チャート(シンボルはGBPUSD)にアタッチします。チャート期間をM15に変更チャート周期をM30に変更チャートからExpert Advisorを削除します。 ログを表示します。時間軸がわかるように。 なお、チャートへのインジケータの 追加とチャートからのインジケータの削除は非同期操作であることをここに付け加えておきます。 また、タイムフレームを変更した場合、このタイムフレームからすぐにインジケータがアンロードされるわけではありません。そして、新しいタイムフレームにインジケータの新しいコピーを作成します。コンストラクタ-デストラクタのプリントを拝見しましたが、デストラクタはすぐに呼び出されるのでしょうか?いいえ、それは誤解です。デストラクタはインジケータがアンロードされるときに呼び出され、インジケータが削除された後の数秒間のみアンロードされます A100 2017.02.05 18:12 #17804 Slawa: ログを表示する。だから、タイミングがわかるんです。 なお、チャートへのインジケータの 追加とチャートからのインジケータの削除は非同期操作であることを付記しておきます。 また、タイムフレームを変更しても、このタイムフレームからすぐにインジケータがアンロードされるわけではありません。そして、新しいタイムフレームにインジケータの新しいコピーを作成します。コンストラクタ-デストラクタのプリントを拝見しましたが、デストラクタはすぐに呼び出されるのでしょうか?いいえ、それは誤解です。デストラクタはインジケータがアンロードされたときに呼び出され、インジケータを削除してから数秒後にアンロードされますステップ間に十分な時間があることが前提(グラフの周期が変化する)2017.02.05 19:49:49.984 I::I->M5 #step1: join 2017.02.05 19:49:49.984 OnInit->M5 2017.02.05 19:51:39.853 I::I->M15 #step2:期間変更M5→M15 2017.02.05 19:51:39.853 OnInit->M152017.02.05 19:53:29.813 OnDeinit->M15:3 #step3: 期間変更 M15->M30 2017.02.05 19:53:29.813 I::~I->M15 2017.02.05 19:53:29.864 I::I->M30 2017.02.05 19:53:29.864 OnInit->M30 2017.02.05 19:54:03.245 OnDeinit->M30:3 #step4: 期間変更 M30->H1 2017.02.05 19:54:03.245 i::~i->m30 2017.02.05 19:54:03.286 i::i->h1 2017.02.05 19:54:03.286 OnInit->H12017.02.05 19:55:02.984 I::I->H4 #step5: H1 ->H4 期間変更 2017.02.02.05 19:55:02.984 OnInit->H4 2017.02.05 19:55:02.984 OnDeinit->H1:3 2017.02.05 19:55:02.984 I::~I->H1 2017.02.05 19:55:50.697 I::I->D1 #step6:H4→D1期間変更 2017.02.05 19:55:50.697 OnInit->D1 2017.02.05 19:55:50.697 OnDeinit->H4:3 2017.02.05 19:55:50.697 i::~i->h42017.02.05 19:56:11.122 OnDeinit->M5:1#step7: 削除 2017.02.05 19:56:11.122 I::~I->M52017.02.05 19:56:11.122 OnDeinit->D1:1 2017.02.05 19:56:11.123 I::~I->D1同時性がないのは、ステップ内の関数呼び出しの順序の違いにのみ影響する(ステップ#3、#5に見られるように)ご覧のように、最初の1回(step#2:2本の出力線)を除いて、その後のチャート周期の変更はすべて予想通りです(step#3:4本の出力線と同様です)。また、なぜ最初のチャート期間の変更が、他のすべてのチャート期間と異なる必要があるのでしょうか?どのように良くなった/悪くなったのか?ステップ#2(とその1つだけ)の出力行が2つ欠けていたのが、なぜステップ#7(赤で強調表示)に移動したのでしょうか? Errors, bugs, questions BUG - Notifications: not Stay at home Mom A100 2017.02.05 18:15 #17805 -Aleks-:このエラーが私のものなのか、それとも端末のものなのか理解できません。印刷 CalcX=111111111111111104 期待値 CalcX=1111111111111111111 doubleの有効桁数が >DBL_DIG=15 の場合、通常のルールは機能しない Slava 2017.02.05 18:39 #17806 A100:ステップ間に十分な時間があることが前提(グラフの周期が変化する)2017.02.05 19:49:49.984 I::I->M5 #step1: join 2017.02.05 19:49:49.984 OnInit->M5 2017.02.05 19:51:39.853 I::I->M15 #step2:期間変更M5→M15 2017.02.05 19:51:39.853 OnInit->M152017.02.05 19:53:29.813 OnDeinit->M15:3 #step3: 期間変更 M15->M30 2017.02.05 19:53:29.813 I::~I->M15 2017.02.05 19:53:29.864 I::I->M30 2017.02.05 19:53:29.864 OnInit->M30 2017.02.05 19:54:03.245 OnDeinit->M30:3 #step4: 期間変更 M30->H1 2017.02.05 19:54:03.245 i::~i->m30 2017.02.05 19:54:03.286 i::i->h1 2017.02.05 19:54:03.286 OnInit->H12017.02.05 19:55:02.984 I::I->H4 #step5: H1 ->H4 期間変更 2017.02.02.05 19:55:02.984 OnInit->H4 2017.02.05 19:55:02.984 OnDeinit->H1:3 2017.02.05 19:55:02.984 I::‾I->H1 2017.02.05 19:55:50.697 I::I->D1 #step6:期間変更 H4 ->D1 2017.02.05 19:55:50.697 OnInit->D1 2017.02.05 19:55:50.697 OnDeinit->H4:3 2017.02.05 19:55:50.697 i::~i->h42017.02.05 19:56:11.122 OnDeinit->M5:1 #step7: 削除 2017.02.05 19:56:11.122 I::~I->M52017.02.05 19:56:11.122 OnDeinit->D1:1 2017.02.05 19:56:11.123 I::~I->D1同時性がないのは、ステップ内の関数呼び出しの順番が異なる場合のみ(ステップ#3と#5に見られるように)見てわかるように、最初の期間変更(ステップ#2)を除いて、その後のチャートの期間変更はすべて予想通りに行われます(ステップ#3と同様)。なぜ、最初のピリオド変更は他のものと違うのですか?どのように良くなった/悪くなったのか? もう一度説明します。 M5チャートには、何らかの指標があります。タイムフレームをM5からM15に変更すると、同じインジケータの2つ目のコピーが作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が発生しているのだ。 その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケーターはチャートからアンロードされます。このとき、このインジケータのグローバル・オブジェクトのデストラクタが呼び出されます。 A100 2017.02.05 19:14 #17807 Slawa: もう一度説明します。 M5チャートには、ある指標があります。タイムフレームをM5からM15に変更すると、同じインジケータの2つ目のコピーが作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が発生しているのだ。 その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケータはチャートからアンロードされます。このインジケータのグローバルオブジェクトのデストラクタがタイムフレームがM5からM15に変更されたとき、M5 Deinitコマンドは最初のインジケーターに(そしてそれだけに-この場合はM5)送られず、ユーザーがEAを削除するまでチャートからアンロードされないと主張します(そしてそれをチェックすることを提案します)。 Test_i.ex5'のstruct Iを除外すると(効果なし)、出力が簡略化されます。 2017.02.05 20:49:06.842 OnInit->M5 2017.02.05 20:49:21.253 OnInit->M15(*) 期間変更 M5 -> M15: M5指標はアンロードされていない。2017.02.05 20:56:40.001 OnDeinit->M15:3 期間変更 M15 -> M30:M15 指標を 直ちに アンロード 2017.02.05 20:56:40.132 OnInit->M30(*)から5分以上経過しているが、M5インジケーターがアンロード されていない場合チャートからExpert Advisorを削除する2017.02.05 20:57:35.176 OnDeinit->M5:1 Expert Advisorを削除して初めてM5インジケータがアンロードされる 2017.02.05 20:57:35.177 OnDeinit->M30:1 Errors, bugs, questions Experts: earlyTopProrate WebRequest error 4014 in 削除済み 2017.02.05 20:05 #17808 Slawa: もう一度説明します。 M5チャートには、ある指標があります。タイムフレームをM5からM15に変更すると、同じインジケータのコピーが2つ作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が 発生しているのだ。 その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケーターはチャートからアンロードされます。その際、このインジケータのグローバルオブジェクトのデストラクタは どのスレッドのことなのか、説明していただけますか?1つのシンボルのインジケータはすべて1つのスレッドで動作しないのですか? Maxim Kuznetsov 2017.02.05 20:16 #17809 Vladimir Gribachev:Bill Williamsインジケーター装着時の不具合についてフラクタルを入れてみました。AOを設定する - ADXを設定するビルド1031 MQx/Indicatorsのディレクトリ構造を変更するとメニューが更新されないという何百年も前のバグ :-)バグはもう機能として認識されるくらい古いんだから慣れろ...使い勝手は四角いボルトでスレスレだけど、円周率という数字が一番早くカウントされる :-) Aleksey Vyazmikin 2017.02.05 20:39 #17810 A100: doubleの有効小数点以下の桁数 >DBL_DIG=15 の場合、通常のルールは機能しないどれが効果的か?ヘルプによると、longの最大値は9223372036854775807とありますが、明らかにそれに 達していません。 1...177417751776177717781779178017811782178317841785178617871788...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
不安定な性能
ステップの順序Test_s.ex5'スクリプトをM15チャート(EURUSDシンボル)に複数回接続します。
結果
2017.02.05 15:17:59.076 OnStart 1回目装着時
2017.02.05 15:18:03.293 OnStart 2回目を装着しました。
2017.02.05 15:18:07.760 OnStart 3回目の参加です。
2017.02.05 15:18:07.778 OnInit
2017.02.05 15:18:07.781 OnDeinit:1
2017.02.05 15:18:16.891 OnStart 4回目の参加となりました。
結合の結果が違うのです。OnInitOnDeinitの行は1回目から表示されることもあれば、10回目から表示されることもあり、結果はランダムです。
void OnInit() { Print( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Print( __FUNCTION__, ":", reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
#import "..\\Experts\\Test.ex5"
void OnInit();
#import
void OnStart()
{
Print( __FUNCTION__ );
OnInit();
}
エキスパートファイル添付(実際にはライブラリとして使用)、コードはこちらhttps://www.mql5.com/ru/forum/1111/page1801#comment_4059227
このエラーが私のものなのか、それとも端末のものなのか理解できません。
5桁目にて{
double A=1.11111;
double B=1.11111;
double C=1.11111;
long CalcX=
NormalizeDouble(A,Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(B,Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(C,Digits)*MathPow(10,(Digits+1)*1-1);
Print ("CalcX=",CalcX);
}
印刷 CalcX=111111111111111104 期待値 CalcX=1111111111111111111
チャート周期変更時の関数呼び出し順が正しくない。
アクションのシーケンス。
なお、チャートへのインジケータの 追加とチャートからのインジケータの削除は非同期操作であることをここに付け加えておきます。
また、タイムフレームを変更した場合、このタイムフレームからすぐにインジケータがアンロードされるわけではありません。そして、新しいタイムフレームにインジケータの新しいコピーを作成します。コンストラクタ-デストラクタのプリントを拝見しましたが、デストラクタはすぐに呼び出されるのでしょうか?いいえ、それは誤解です。デストラクタはインジケータがアンロードされるときに呼び出され、インジケータが削除された後の数秒間のみアンロードされます
ログを表示する。だから、タイミングがわかるんです。
なお、チャートへのインジケータの 追加とチャートからのインジケータの削除は非同期操作であることを付記しておきます。
また、タイムフレームを変更しても、このタイムフレームからすぐにインジケータがアンロードされるわけではありません。そして、新しいタイムフレームにインジケータの新しいコピーを作成します。コンストラクタ-デストラクタのプリントを拝見しましたが、デストラクタはすぐに呼び出されるのでしょうか?いいえ、それは誤解です。デストラクタはインジケータがアンロードされたときに呼び出され、インジケータを削除してから数秒後にアンロードされます
ステップ間に十分な時間があることが前提(グラフの周期が変化する)
2017.02.05 19:49:49.984 I::I->M5 #step1: join
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #step2:期間変更M5→M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #step3: 期間変更 M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #step4: 期間変更 M30->H1
2017.02.05 19:54:03.245 i::~i->m30
2017.02.05 19:54:03.286 i::i->h1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #step5: H1 ->H4 期間変更
2017.02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #step6:H4→D1期間変更
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 i::~i->h4
2017.02.05 19:56:11.122 OnDeinit->M5:1#step7: 削除
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
同時性がないのは、ステップ内の関数呼び出しの順序の違いにのみ影響する(ステップ#3、#5に見られるように)
ご覧のように、最初の1回(step#2:2本の出力線)を除いて、その後のチャート周期の変更はすべて予想通りです(step#3:4本の出力線と同様です)。また、なぜ最初のチャート期間の変更が、他のすべてのチャート期間と異なる必要があるのでしょうか?どのように良くなった/悪くなったのか?ステップ#2(とその1つだけ)の出力行が2つ欠けていたのが、なぜステップ#7(赤で強調表示)に移動したのでしょうか?
このエラーが私のものなのか、それとも端末のものなのか理解できません。
印刷 CalcX=111111111111111104 期待値 CalcX=1111111111111111111
ステップ間に十分な時間があることが前提(グラフの周期が変化する)
2017.02.05 19:49:49.984 I::I->M5 #step1: join
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #step2:期間変更M5→M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #step3: 期間変更 M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #step4: 期間変更 M30->H1
2017.02.05 19:54:03.245 i::~i->m30
2017.02.05 19:54:03.286 i::i->h1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #step5: H1 ->H4 期間変更
2017.02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::‾I->H1
2017.02.05 19:55:50.697 I::I->D1 #step6:期間変更 H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 i::~i->h4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #step7: 削除
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
同時性がないのは、ステップ内の関数呼び出しの順番が異なる場合のみ(ステップ#3と#5に見られるように)
見てわかるように、最初の期間変更(ステップ#2)を除いて、その後のチャートの期間変更はすべて予想通りに行われます(ステップ#3と同様)。なぜ、最初のピリオド変更は他のものと違うのですか?どのように良くなった/悪くなったのか?
M5チャートには、何らかの指標があります。タイムフレームをM5からM15に変更すると、同じインジケータの2つ目のコピーが作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が発生しているのだ。
その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケーターはチャートからアンロードされます。このとき、このインジケータのグローバル・オブジェクトのデストラクタが呼び出されます。
もう一度説明します。
M5チャートには、ある指標があります。タイムフレームをM5からM15に変更すると、同じインジケータの2つ目のコピーが作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が発生しているのだ。
その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケータはチャートからアンロードされます。このインジケータのグローバルオブジェクトのデストラクタが
タイムフレームがM5からM15に変更されたとき、M5 Deinitコマンドは最初のインジケーターに(そしてそれだけに-この場合はM5)送られず、ユーザーがEAを削除するまでチャートからアンロードされないと主張します(そしてそれをチェックすることを提案します)。
Test_i.ex5'のstruct Iを除外すると(効果なし)、出力が簡略化されます。
2017.02.05 20:49:06.842 OnInit->M5
2017.02.05 20:49:21.253 OnInit->M15(*) 期間変更 M5 -> M15: M5指標はアンロードされていない。
2017.02.05 20:56:40.001 OnDeinit->M15:3 期間変更 M15 -> M30:M15 指標を 直ちに アンロード
2017.02.05 20:56:40.132 OnInit->M30
(*)から5分以上経過しているが、M5インジケーターがアンロード されていない場合
チャートからExpert Advisorを削除する
2017.02.05 20:57:35.176 OnDeinit->M5:1 Expert Advisorを削除して初めてM5インジケータがアンロードされる
2017.02.05 20:57:35.177 OnDeinit->M30:1
もう一度説明します。
M5チャートには、ある指標があります。タイムフレームをM5からM15に変更すると、同じインジケータのコピーが2つ作成されます。コマンドは両方のインジケータに送信されます。最初のインジケータはM5 Deinitに、2番目のインジケータはM15 Initに送信されます。同時に、どのコマンドが先に実行されるかは分からない。つまり、異なるスレッド間で古典的な競合が 発生しているのだ。
その後、最初のインジケーターの使用量カウンターを減少させます。使用量カウンターがゼロになってから数秒後に、インジケーターはチャートからアンロードされます。その際、このインジケータのグローバルオブジェクトのデストラクタは
Bill Williamsインジケーター装着時の不具合について
フラクタルを入れてみました。
AOを設定する - ADXを設定する
ビルド1031
doubleの有効小数点以下の桁数 >DBL_DIG=15 の場合、通常のルールは機能しない
どれが効果的か?
ヘルプによると、longの最大値は9223372036854775807とありますが、明らかにそれに 達していません。