Ошибки, баги, вопросы - страница 696

 

Прошу помощи

пробую многопоточность но загибается терминал

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-2410M  @ 2.30GHz
Memory      : 1551 free of 4003 Mb
Virtual     : 1188 free of 2047 Mb
CrashMD5    : 83B4200991F2E548704A4F35763F5DAD
Exception   : C0000005 at 400067A4 read to 400067A4

Modules     : 00400000 00E38000 terminal.exe (5.0.0.607)
            : 0F000000 00006000 detoured.dll
            : 72640000 0003D000 nvd3d9wrap.dll (8.17.12.9573)
            : 72610000 0002F000 nvdxgiwrap.dll (8.17.12.9573)
            : 72F60000 00027000 wlidnsp.dll (7.250.4225.0)
            : 10000000 00265000 mql5.dll (5.0.0.607)
            : 51660000 0002C000 pdm.dll (7.0.9466.0)
            : 51580000 0002B000 msdbg2.dll (7.0.9466.0)
            : 013F0000 0000B000 borlndmm.dll

75B73665:00012 [75B73677] AcquireSRWLockExclusive (kernel32.dll)
77B89F8F:00063 [77B89FF2] RtlInsertElementGenericTableAvl (ntdll.dll)
77B89F8F:00036 [77B89FC5] RtlInsertElementGenericTableAvl (ntdll.dll)

Registers   : EAX=75B73665  EIP=400067A4  EFLGS=00010246  ES=002b
            : EBX=32E44168  ESP=3313FF8C  EBP=3313FF94    FS=0053
            : ECX=00000000  ESI=00000000  CS=0023         GS=002b
            : EDX=400067A4  EDI=00000000  DS=002b         SS=002b

Написал на с++ 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 кнопки

терминал не падает пока я не нажму хотя бы одну из кнопок.

как только нажимаю сразу выдается сообщение о поиске причины краха и пути ее устранения...

 
papaklass:

Господа, а кто-нибудь запускал мультивалютник в режиме визуализации по ценам открытия с обращением к другим ТФ?

Вот дневной график:


С графиком разобрались и исправили. Спасибо за пример.
 
olyakish:

терминал не падает пока я не нажму хотя бы одну из кнопок.

как только нажимаю сразу выдается сообщение о поиске причины краха и пути ее устранения...

Обратите внимание, что MQL5 скрипт после завершения OnStart автоматически выгружается, включая Вашу DLL.

То есть, в памяти висит Вами созданный поток с модальным окном, а у него из-под ног выбили табуретку. После закрытия модального окна возврат происходит в никуда.

В Вашем случае перед завершением MQL5 скрипта Вам нужно явно ждать пока все потоки DLL будут завершены штатно и гарантированно.

 
Renat:

Обратите внимание, что MQL5 скрипт после завершения OnStart автоматически выгружается, включая Вашу DLL.

То есть, в памяти висит поток с модальным окном, а у него из-под ног выбили табуретку. После закрытия модального окна возврат происходит в никуда.

В Вашем случае перед завершением MQL5 скрипта Вам нужно явно ждать пока все потоки DLL будут завершены штатно и гарантированно.

Спасибо, теперь понятно.
 
В случае, если в серии сделок не было ни одной убыточной, то показатели PROFIT FACTOR и SHARPE RATIO принимают какие-то нереальные/экстремальные значения. Это ошибка или такие моменты нужно просто учитывать и как-то обрабатывать? Как это сделать правильно?
 
tol64:
В случае, если в серии сделок не было ни одной убыточной, то показатели PROFIT FACTOR и SHARPE RATIO принимают какие-то нереальные/экстремальные значения. Это ошибка или такие моменты нужно просто учитывать и как-то обрабатывать? Как это сделать правильно?

EMPTY_VALUE (то же самое, что и DBL_MAX)

Можно конечно применить какойнибудь неопределённый nan, но тогда нельзя проводить сравнения.

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
stringo:

EMPTY_VALUE (то же самое, что и DBL_MAX)

Можно конечно применить какойнибудь неопределённый nan, но тогда нельзя проводить сравнения.

В принципе не так уж и часто такие моменты встречаются, поэтому буду просто обнулять, чтобы графики с ума не сходили. ))
 
tol64:
В случае, если в серии сделок не было ни одной убыточной, то показатели PROFIT FACTOR и SHARPE RATIO принимают какие-то нереальные/экстремальные значения. Это ошибка или такие моменты нужно просто учитывать и как-то обрабатывать? Как это сделать правильно?

Видимо ошибка, так как профитфактор не должен рассчитываться при отрицательных значениях, ну и как в данном случае при отсутствии отрицательных сделок.

Просто если взять формулу влоб (Gross Profit/Gross Loss) то при отсутствии отрицательных сделок получаем деление на ноль, а при большем Gross Loss получим число меньше 1, что тоже не правильно для дальнейшего анализа, тк разница между двумя положительными профитфакторами будет в разы больше чем разница между двумя условно говоря отрицательными.

 
Urain:

Видимо ошибка, так как профитфактор не должен рассчитываться при отрицательных значениях, ну и как в данном случае при отсутствии отрицательных сделок.

Уже было сказано двумя постами выше, что это не ошибка, а признак невозможности рассчитать данный показатель.
 
Rosh:
Уже было сказано двумя постами выше, что это не ошибка, а признак невозможности рассчитать данный показатель.
Спрашивающий не указал какое именно запредельное значение получается, поэтому я решил что #IND. А в случае с DBL_MAX вполне логично, если нельзя вычислить.
Хотя можно сделать один финт, при каждом вычислении добавлять 1 цент и к Gross Porofit и к Gross Loss.
Тогда прямая формула будет ((Gross Porofit+0.01)/(Gross Loss+0.01))
А формулу для вычисления обратного значения (когда Gross Loss больше)
сделать -((Gross Loss+0.01)/(Gross Porofit+0.01))
Ну понятно что Gross Loss и Gross Porofit это модули.

Тогда линия будет симметрична с обоих сторон что хорошо для ГА и не будет вообще невычислимых ситуаций.

ЗЫ Но это будет полезно скорее не вам, а людям которые пишут свои критерии оптимизации.