错误、漏洞、问题 - 页 696 1...689690691692693694695696697698699700701702703...3184 新评论 Alexey Klenov 2012.03.27 10: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 11:00 #6952 papaklass:先生们,有没有人在开盘价可视化模式下参照其他TFs运行多币种?这里是日线图。 该图表已被整理和修复。谢谢你的例子。 Renat Fatkhullin 2012.03.27 11:26 #6953 olyakish: 直到我按下至少一个按钮,终端才会崩溃。一旦我按下它,就会出现一条关于寻找崩溃原因和如何修复的信息......。请注意,在OnStart完成后,MQL5脚本 会自动卸载,包括你的DLL。也就是说,你在内存中创建了一个挂着模态窗口的线程,而凳子已经从它下面被打掉了。关闭模态窗口后,它又回到了原地。在你的情况下,你需要明确地等待,直到所有的DLL线程都以正常和保证的方式终止,然后再终止MQL5脚本。 Alexey Klenov 2012.03.27 11:29 #6954 Renat:注意,在OnStart完成后,MQL5脚本 会自动卸载,包括你的DLL。也就是说,一个带有模态窗口的线程挂在内存中,而一个凳子从它下面被打掉了。模态窗口关闭后,它又回到了原处。在你的案例中,在终止MQL5脚本之前,你需要明确地等待所有的DLL线程正常终止并得到保证。 谢谢你,我现在明白了。 Anatoli Kazharski 2012.03.27 12:04 #6955 如果在一系列的交易中没有一次亏损,那么PROFIT FACTOR 和SHARPE RATIO 就会出现一些不现实的/极端的数值。这是一个错误,还是应该考虑并以某种方式处理这样的时刻?如何正确操作? Slava 2012.03.27 12:07 #6956 tol64: 如果在一系列的交易中没有一次亏损,那么PROFIT FACTOR 和SHARPE RATIO 就会出现一些不现实的/极端的值。这是一个错误,还是应该考虑并以某种方式处理这样的时刻?如何正确地做到这一点?EMPTY_VALUE(与DBL_MAX相同)当然,你可以应用一些未定义的南,但那样你就不能进行比较了。 Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы www.mql5.com Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5 Anatoli Kazharski 2012.03.27 12:12 #6957 stringo:EMPTY_VALUE(与DBL_MAX相同)当然,你可以使用一些未定义的nan,但那样你就不能做比较了。 其实这样的时刻并不经常出现,所以我就把它们归零,这样图表就不会疯掉。)) Mykola Demko 2012.03.27 12:14 #6958 tol64: 如果在一系列的交易中没有损失,那么PROFIT FACTOR 和SHARPE RATIO 的值就会出现一些不现实的/极端的值。这是一个错误,还是应该考虑并以某种方式处理这样的时刻?如何正确地做到这一点?显然这是个错误,因为利润系数不应该用负值来计算,在这种情况下,没有负值的交易也是如此。简单地说,如果我们在全球范围内采用公式(毛利润/毛亏损),那么在没有负数交易的情况下,我们会得到除以0 的结果,而当毛亏损较高时,我们会得到小于1的数字,这对于进一步分析也是不正确的,因为两个正数利润因素之间的差异会比两个传统的负数之间的差异大很多倍。 Rashid Umarov 2012.03.27 12:19 #6959 Urain:显然有一个错误,因为利润系数不应该以负值计算,而在这种情况下,没有负的交易。 上面两个帖子已经说过,这不是一个错误,而是一个不可能计算这个指标的标志。 Mykola Demko 2012.03.27 12:45 #6960 Rosh: 上面两个帖子已经说过,这不是一个错误,而是一个不可能计算这个指标的标志。 提问者没有指定一个特定的禁止值,所以我认为是#IND。而在DBL_MAX 的情况下,如果你不能计算它,那就很符合逻辑了。 虽然你可以做一个诀窍,在每次计算时,在毛利润和毛损失中都加1美分。 那么远期公式将是((毛利润+0.01)/(毛损失+0.01))。 计算互换值的公式(当总损失较大时) 要做的是-((毛损失+0.01)/(毛利润+0.01)) 很明显,毛损失和毛门槛是模块。那么这条线将在两边对称,这对GA来说是好事,而且根本不会有不可计算的情况。但它很可能不是对你有用,而是对那些正在编写自己的优化标准的人有用。 1...689690691692693694695696697698699700701702703...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
帮帮我吧
尝试多线程,但终端崩溃了
我写了一个C++ dll。
以下是代码
而剧本
如果你把dll的代码改成这样
我在屏幕上看到数字10在评论的位置(应该是),然后我得到msgbox和2个按钮。
直到我按下其中一个按钮,终端才会崩溃。
一旦我按下它,就会出现信息,解释为什么会发生崩溃,以及如何修复它...。
先生们,有没有人在开盘价可视化模式下参照其他TFs运行多币种?
这里是日线图。
直到我按下至少一个按钮,终端才会崩溃。
一旦我按下它,就会出现一条关于寻找崩溃原因和如何修复的信息......。
请注意,在OnStart完成后,MQL5脚本 会自动卸载,包括你的DLL。
也就是说,你在内存中创建了一个挂着模态窗口的线程,而凳子已经从它下面被打掉了。关闭模态窗口后,它又回到了原地。
在你的情况下,你需要明确地等待,直到所有的DLL线程都以正常和保证的方式终止,然后再终止MQL5脚本。
注意,在OnStart完成后,MQL5脚本 会自动卸载,包括你的DLL。
也就是说,一个带有模态窗口的线程挂在内存中,而一个凳子从它下面被打掉了。模态窗口关闭后,它又回到了原处。
在你的案例中,在终止MQL5脚本之前,你需要明确地等待所有的DLL线程正常终止并得到保证。
如果在一系列的交易中没有一次亏损,那么PROFIT FACTOR 和SHARPE RATIO 就会出现一些不现实的/极端的值。这是一个错误,还是应该考虑并以某种方式处理这样的时刻?如何正确地做到这一点?
EMPTY_VALUE(与DBL_MAX相同)
当然,你可以应用一些未定义的南,但那样你就不能进行比较了。
EMPTY_VALUE(与DBL_MAX相同)
当然,你可以使用一些未定义的nan,但那样你就不能做比较了。
如果在一系列的交易中没有损失,那么PROFIT FACTOR 和SHARPE RATIO 的值就会出现一些不现实的/极端的值。这是一个错误,还是应该考虑并以某种方式处理这样的时刻?如何正确地做到这一点?
显然这是个错误,因为利润系数不应该用负值来计算,在这种情况下,没有负值的交易也是如此。
简单地说,如果我们在全球范围内采用公式(毛利润/毛亏损),那么在没有负数交易的情况下,我们会得到除以0 的结果,而当毛亏损较高时,我们会得到小于1的数字,这对于进一步分析也是不正确的,因为两个正数利润因素之间的差异会比两个传统的负数之间的差异大很多倍。
显然有一个错误,因为利润系数不应该以负值计算,而在这种情况下,没有负的交易。
上面两个帖子已经说过,这不是一个错误,而是一个不可能计算这个指标的标志。
虽然你可以做一个诀窍,在每次计算时,在毛利润和毛损失中都加1美分。
那么远期公式将是((毛利润+0.01)/(毛损失+0.01))。
计算互换值的公式(当总损失较大时)
要做的是-((毛损失+0.01)/(毛利润+0.01))
很明显,毛损失和毛门槛是模块。
那么这条线将在两边对称,这对GA来说是好事,而且根本不会有不可计算的情况。
但它很可能不是对你有用,而是对那些正在编写自己的优化标准的人有用。