오류, 버그, 질문 - 페이지 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- 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개의 버튼이 표시됩니다.

버튼 중 하나를 누를 때까지 터미널이 충돌하지 않습니다.

클릭하자마자 충돌의 원인과 해결 방법에 대한 검색에 대한 메시지가 즉시 표시됩니다 ...

 
papaklass :

여러분, 다른 TF를 참고하여 시가로 시각화 모드에서 다중 통화를 출시한 사람이 있습니까?

다음은 일일 차트입니다.


일정이 정리되어 수정되었습니다. 예를 들어 주셔서 감사합니다.
 
olyakish :

버튼 중 하나를 누를 때까지 터미널이 충돌하지 않습니다.

클릭하자마자 충돌의 원인과 해결 방법에 대한 검색에 대한 메시지가 즉시 표시됩니다 ...

MQL5 스크립트 는 DLL을 포함하여 OnStart가 완료된 후 자동으로 언로드됩니다.

즉, 모달 창으로 만든 스레드가 메모리에 매달려 있고 의자가 발 아래에서 녹아웃되었습니다. 모달 창을 닫은 후 아무데도 반환이 발생하지 않습니다.

귀하의 경우 MQL5 스크립트를 종료하기 전에 모든 DLL 스레드가 정상적으로 완료되고 보장될 때까지 명시적으로 기다려야 합니다.

 
Renat :

MQL5 스크립트 는 DLL을 포함하여 OnStart가 완료된 후 자동으로 언로드됩니다.

즉, 모달 창이있는 실이 기억에 걸려 있고 의자가 발 아래에서 쓰러졌습니다. 모달 창을 닫은 후 아무데도 반환이 발생하지 않습니다.

귀하의 경우 MQL5 스크립트를 종료하기 전에 모든 DLL 스레드가 정상적으로 완료되고 보장될 때까지 명시적으로 기다려야 합니다.

감사합니다. 이제 명확해졌습니다.
 
시리즈에 수익성이 없는 거래가 없는 경우 PROFIT FACTORSHARPE RATIO 표시기 는 일부 비현실적/극단적 값을 취합니다. 이것은 실수입니까, 아니면 그러한 순간을 고려하여 어떻게든 처리해야 합니까? 제대로 하는 방법?
 
tol64 :
시리즈에 수익성이 없는 거래가 없는 경우 PROFIT FACTORSHARPE RATIO 표시기 는 일부 비현실적/극단적 값을 취합니다. 이것은 실수입니까, 아니면 그러한 순간을 고려하여 어떻게든 처리해야 합니까? 제대로 하는 방법?

EMPTY_VALUE (DBL_MAX와 동일)

물론 부정한 nan을 사용할 수는 있지만 비교할 수는 없습니다.

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

EMPTY_VALUE (DBL_MAX와 동일)

물론 부정한 nan을 사용할 수는 있지만 비교할 수는 없습니다.

원칙적으로 그런 순간은 그렇게 자주 발생하지 않으므로 그래프가 미쳐지지 않도록 간단히 재설정하겠습니다. ))
 
tol64 :
시리즈에 수익성이 없는 거래가 없는 경우 PROFIT FACTORSHARPE RATIO 표시기 는 일부 비현실적/극단적 값을 취합니다. 이것은 실수입니까, 아니면 그러한 순간을 고려하여 어떻게든 처리해야 합니까? 제대로 하는 방법?

분명히 실수입니다. 이익 계수는 음수 거래가없는 경우와 같이 음수 값으로 계산되어서는 안되기 때문입니다.

우리가 공식 (총 이익 / 총 손실)을 취하면 음수 거래가 없으면 0 으로 나누고 총 손실이 크면 1보다 작은 숫자를 얻습니다. 이는 더 이상 정확하지 않습니다. 두 개의 긍정적인 이익 요인 간의 차이가 상대적으로 말하는 부정적인 두 가지 간의 차이보다 몇 배는 더 클 것이기 때문입니다.

 
Urain :

분명히 실수입니다. 이익 계수는 음수 거래가없는 경우와 같이 음수 값으로 계산되어서는 안되기 때문입니다.

이것은 오류가 아니라이 지표를 계산할 수 없다는 신호라고 이미 두 개의 게시물에서 언급되었습니다.
 
Rosh :
이것은 오류가 아니라이 지표를 계산할 수 없다는 신호라고 이미 두 개의 게시물에서 언급되었습니다.
질문자가 어떤 종류의 초월적 가치를 얻을 수 있는지 명시하지 않았기 때문에 #IND로 결정했습니다. 그리고 DBL_MAX 의 경우 계산할 수 없다면 상당히 논리적입니다.
하나의 페인트칠을 할 수 있지만 각 계산에서 총 이익과 총 손실에 1센트를 추가합니다.
그러면 직접 공식은 (( Gross Porofit+0.01 )/( Gross Loss+0.01 ))
그리고 역값 계산 공식(총 손실이 클 때)
do -(( 총 손실 +0.01 )/ ( 총 이익 + 0.01 ))
글쎄, 총 손실과 총 이익이 모듈이라는 것은 분명합니다.

그러면 선이 양쪽에서 대칭이 되어 GA에 좋고 계산할 수 없는 상황이 전혀 발생하지 않습니다.

ZY 그러나 그것은 당신이 아니라 최적화 기준을 작성하는 사람들에게 유용할 것입니다.