エラー、バグ、質問 - ページ 696 1...689690691692693694695696697698699700701702703...3185 新しいコメント Alexey Klenov 2012.03.27 12:57 #6951 助けてくださいマルチスレッドを試したが、ターミナルがクラッシュする Time : 2012.03.27 14:38 (0:00:22) Program : Client Terminal Version : 500.607 (09 Mar 2012) Revision : 40583 OS : Windows 7 Professional (Build 7600) Processors : 4 x Intel Core i5-2410 M @ 2.30 GHz Memory : 1551 free of 4003 Mb Virtual : 1188 free of 2047 Mb CrashMD5 : 83 B4200991F2E548704A4F35763F5DAD Exception : C0000005 at 400067 A4 read to 400067 A4 Modules : 00400000 00 E38000 terminal.exe (5.0.0.607) : 0 F000000 00006000 detoured.dll : 72640000 0003 D000 nvd3d9wrap.dll (8.17.12.9573) : 72610000 0002 F000 nvdxgiwrap.dll (8.17.12.9573) : 72 F60000 00027000 wlidnsp.dll (7.250.4225.0) : 10000000 00265000 mql5.dll (5.0.0.607) : 51660000 0002 C000 pdm.dll (7.0.9466.0) : 51580000 0002 B000 msdbg2.dll (7.0.9466.0) : 013 F0000 0000 B000 borlndmm.dll 75 B73665:00012 [75 B73677] AcquireSRWLockExclusive (kernel32.dll) 77 B89F8F:00063 [77 B89FF2] RtlInsertElementGenericTableAvl (ntdll.dll) 77 B89F8F:00036 [77 B89FC5] RtlInsertElementGenericTableAvl (ntdll.dll) Registers : EAX=75 B73665 EIP=400067 A4 EFLGS=00010246 ES=002 b : EBX=32 E44168 ESP=3313 FF8C EBP=3313 FF94 FS=0053 : ECX=00000000 ESI=00000000 CS=0023 GS=002 b : EDX=400067 A4 EDI=00000000 DS=002 b SS=002 b C++のDLLを書きました。以下はそのコードです。//--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- #include <Classes.hpp> //--------------------------------------------------------------------------- class TMyThread : public TThread { private: protected: void __fastcall Execute(); public: __fastcall TMyThread(bool CreateSuspended); }; //--------------------------------------------------------------------------- TMyThread *Thr = new TMyThread(true); __fastcall TMyThread::TMyThread(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------- void __fastcall TMyThread::Execute() { FreeOnTerminate = true; for (int i=0;i<1000;i++) {} } //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) int __stdcall GetIntValue() { Thr->Resume(); return (10); } そして、スクリプト#import "Project1.dll" int GetIntValue(); #import //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Comment(GetIntValue()); } //+------------------------------------------------------------------+dllのコードをこのように変更するとvoid __fastcall TMyThread::Execute() { //---- Place thread code here ---- FreeOnTerminate = true; for (int i=0;i<1000;i++) { } MessageBox(NULL,"Ïðèâåò!","Äàé ïÿòü",MB_YESNO | //Äà íåò (êíîïêè) MB_DEFBUTTON1 | //Âûäåëåíàÿ êíîïêà MB_ICONEXCLAMATION | //Òèï èêîíêè MB_DEFAULT_DESKTOP_ONLY); }コメントの場所に10という数字が表示され、msgboxと2つのボタンが表示されました(本来は表示されるはずです)。ボタンを押すまで端末が落ちない。を押すとすぐに、クラッシュした理由とその修正方法を説明するメッセージが表示されます。 Slava 2012.03.27 13:00 #6952 papaklass:皆さん、他のTFを参照して、始値可視化モードで多通貨を実行した方はいらっしゃいますか?こちらは日足チャートです。 チャートは整理され、修正されました。例を挙げていただきありがとうございます。 Renat Fatkhullin 2012.03.27 13:26 #6953 olyakish: 少なくとも1つのボタンを押すまでは、端末がクラッシュしないのです。押すとすぐに、クラッシュの原因究明と修正方法についてのメッセージが表示されるのですが...。なお、OnStartの完了後、MQL5スクリプトは DLLを含めて自動的にアンロードされます。つまり、メモリにモーダルウィンドウをぶら下げた状態でスレッドを作成し、その下からスツールをたたき出したということです。モーダルウィンドウを閉じると、どこにも戻りません。あなたの場合、すべてのDLLスレッドが正常かつ保証された方法で終了するまで明示的に待機してからMQL5スクリプトを終了させる必要があるのです。 Alexey Klenov 2012.03.27 13:29 #6954 Renat:なお、OnStartの完了後、MQL5スクリプトは DLLを含めて自動的にアンロードされます。つまり、メモリにモーダルウィンドウをぶら下げたスレッドがあり、その下からスツールが叩き出されている。モーダルウィンドウを閉じた後、どこにも戻りません。あなたの場合、MQL5スクリプトを終了する前に、すべてのDLLスレッドが正常に終了するのを明示的に待ち、保証される必要があります。 ありがとうございます、理解できました。 Anatoli Kazharski 2012.03.27 14:04 #6955 一連の取引で一度も損失がない場合、PROFIT FACTORと SHARPE RATIOは 非現実的な、または極端な値をとります。エラーなのか、そのような瞬間も考慮し、何らかの処理をすべきなのか。正しいやり方は? Slava 2012.03.27 14:07 #6956 tol64: 一連の取引で一度も損失がない場合、PROFIT FACTORと SHARPE RATIOは 非現実的な、または極端な値をとります。エラーなのか、そのような瞬間も考慮し、何らかの処理をすべきなのか。正しいやり方は?EMPTY_VALUE(DBL_MAXと同じ)もちろん、未定義のナンを適用することもできますが、そうすると比較はできません。 Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы www.mql5.com Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5 Anatoli Kazharski 2012.03.27 14:12 #6957 stringo:EMPTY_VALUE(DBL_MAXと同じ)もちろん、未定義のナンを使うこともできますが、その場合、比較はできません。 実はそういう瞬間はそうそうないので、チャートが狂わないようにゼロにします。)) Mykola Demko 2012.03.27 14:14 #6958 tol64: 一連の取引で損失がない場合、PROFIT FACTORと SHARPE RATIOの 値は非現実的な、または極端な値をとります。エラーなのか、そのような瞬間も考慮し、何らかの処理をすべきなのか。正しいやり方は?プロフィットファクターは負の値で計算されるべきではなく、今回のように負の取引がない場合は計算されないため、どうやら間違いがあるようです。単純に、グローバルに(Gross Profit/Gross Loss)の計算式をとると、マイナス取引がない場合はゼロで割り、Gross Lossが大きい場合は1より小さい数字になるが、これも分析上正しくない。なぜなら、二つのプラスの利益要素の差は、二つの従来からのマイナス要素の差より何倍も大きいからである。 Rashid Umarov 2012.03.27 14:19 #6959 Urain:プロフィット・ファクターはマイナスの値では計算されないはずで、今回のようにマイナス取引がない場合は、どうやらエラーがあるようです。 これはエラーではなく、この指標の計算が不可能であることの表れであることは、すでに2つ上の記事で述べられています。 Mykola Demko 2012.03.27 14:45 #6960 Rosh: これはエラーではなく、この指標の計算が不可能であることの表れであることは、すでに2つ上の記事で述べられています。 質問者は特に禁止値を指定していなかったので、#INDとしました。また、DBL_MAXの 場合、計算できないとかなり理屈が通らない。 ただし、1回の計算でGross PorofitとGross Lossの両方に1セントずつ加算するのが1つのコツです。 そうすると、フォワードの計算式は、((グロス・ポロフィット+0.01)/(グロス・ロス+0.01))となります。 逆数の計算式(Gross Lossの方が大きい場合) すること-((グロスロス+0.01)/(グロスポロフィット+0.01)) Gross LossとGross Porofitがモジュールであることは明らかである。そうすると、GAにとって都合のいい左右対称の線になり、計算できない状況がまったくなくなります。しかし、それはあなたにとってではなく、独自の最適化基準を書いている人々にとって役に立つ可能性が高いでしょう。 1...689690691692693694695696697698699700701702703...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
助けてください
マルチスレッドを試したが、ターミナルがクラッシュする
C++のDLLを書きました。
以下はそのコードです。
そして、スクリプト
dllのコードをこのように変更すると
コメントの場所に10という数字が表示され、msgboxと2つのボタンが表示されました(本来は表示されるはずです)。
ボタンを押すまで端末が落ちない。
を押すとすぐに、クラッシュした理由とその修正方法を説明するメッセージが表示されます。
皆さん、他のTFを参照して、始値可視化モードで多通貨を実行した方はいらっしゃいますか?
こちらは日足チャートです。
少なくとも1つのボタンを押すまでは、端末がクラッシュしないのです。
押すとすぐに、クラッシュの原因究明と修正方法についてのメッセージが表示されるのですが...。
なお、OnStartの完了後、MQL5スクリプトは DLLを含めて自動的にアンロードされます。
つまり、メモリにモーダルウィンドウをぶら下げた状態でスレッドを作成し、その下からスツールをたたき出したということです。モーダルウィンドウを閉じると、どこにも戻りません。
あなたの場合、すべてのDLLスレッドが正常かつ保証された方法で終了するまで明示的に待機してからMQL5スクリプトを終了させる必要があるのです。
なお、OnStartの完了後、MQL5スクリプトは DLLを含めて自動的にアンロードされます。
つまり、メモリにモーダルウィンドウをぶら下げたスレッドがあり、その下からスツールが叩き出されている。モーダルウィンドウを閉じた後、どこにも戻りません。
あなたの場合、MQL5スクリプトを終了する前に、すべてのDLLスレッドが正常に終了するのを明示的に待ち、保証される必要があります。
一連の取引で一度も損失がない場合、PROFIT FACTORと SHARPE RATIOは 非現実的な、または極端な値をとります。エラーなのか、そのような瞬間も考慮し、何らかの処理をすべきなのか。正しいやり方は?
EMPTY_VALUE(DBL_MAXと同じ)
もちろん、未定義のナンを適用することもできますが、そうすると比較はできません。
EMPTY_VALUE(DBL_MAXと同じ)
もちろん、未定義のナンを使うこともできますが、その場合、比較はできません。
一連の取引で損失がない場合、PROFIT FACTORと SHARPE RATIOの 値は非現実的な、または極端な値をとります。エラーなのか、そのような瞬間も考慮し、何らかの処理をすべきなのか。正しいやり方は?
プロフィットファクターは負の値で計算されるべきではなく、今回のように負の取引がない場合は計算されないため、どうやら間違いがあるようです。
単純に、グローバルに(Gross Profit/Gross Loss)の計算式をとると、マイナス取引がない場合はゼロで割り、Gross Lossが大きい場合は1より小さい数字になるが、これも分析上正しくない。なぜなら、二つのプラスの利益要素の差は、二つの従来からのマイナス要素の差より何倍も大きいからである。
プロフィット・ファクターはマイナスの値では計算されないはずで、今回のようにマイナス取引がない場合は、どうやらエラーがあるようです。
これはエラーではなく、この指標の計算が不可能であることの表れであることは、すでに2つ上の記事で述べられています。
ただし、1回の計算でGross PorofitとGross Lossの両方に1セントずつ加算するのが1つのコツです。
そうすると、フォワードの計算式は、((グロス・ポロフィット+0.01)/(グロス・ロス+0.01))となります。
逆数の計算式(Gross Lossの方が大きい場合)
すること-((グロスロス+0.01)/(グロスポロフィット+0.01))
Gross LossとGross Porofitがモジュールであることは明らかである。
そうすると、GAにとって都合のいい左右対称の線になり、計算できない状況がまったくなくなります。
しかし、それはあなたにとってではなく、独自の最適化基準を書いている人々にとって役に立つ可能性が高いでしょう。