Hatalar, hatalar, sorular - sayfa 696

 

yardım istiyorum

Çoklu iş parçacığı kullanmayı deniyorum ama terminal bükülmüş

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 ile yazılmış

İşte onun kodu

 //---------------------------------------------------------------------------

#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 );
}

ve senaryo

 #import "Project1.dll"
   int GetIntValue();
#import 

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {

   Comment (GetIntValue());
  }
//+------------------------------------------------------------------+


Bunun için dll kod yöntemini biraz değiştirirseniz

 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);

}

Ardından, yorumun olduğu yerde (olması gerektiği gibi) ekranda 10 sayısı belirir, ardından msgbox uçar ve 2 düğme

düğmelerden en az birine basana kadar terminal çökmez.

Tıkladığım anda, çarpışmanın nedeninin aranması ve onu ortadan kaldırmanın yolu hakkında hemen bir mesaj görüntüleniyor ...

 
papaklass :

Beyler, diğer TF'lere atıfta bulunarak açılış fiyatlarında görselleştirme modunda çoklu para birimi başlatan var mı?

İşte günlük grafik:


Takvim düzenlendi ve düzeltildi. Örnek için teşekkürler.
 
olyakish :

düğmelerden en az birine basana kadar terminal çökmez.

Tıkladığım anda, çarpışmanın nedeninin aranması ve onu ortadan kaldırmanın yolu hakkında hemen bir mesaj görüntüleniyor ...

Lütfen, DLL'niz de dahil olmak üzere OnStart tamamlandıktan sonra MQL5 komut dosyasının otomatik olarak kaldırıldığını unutmayın.

Yani modal pencere ile oluşturduğunuz ip hafızada asılı kalmış ve ayağının altından bir tabure çekilmiştir. Kalıcı pencereyi kapattıktan sonra dönüş hiçbir yere gitmez.

Sizin durumunuzda, bir MQL5 betiğini sonlandırmadan önce, tüm DLL iş parçacıklarının normal şekilde tamamlanmasını ve garanti altına alınmasını açıkça beklemeniz gerekir.

 
Renat :

Lütfen, DLL'niz de dahil olmak üzere OnStart tamamlandıktan sonra MQL5 komut dosyasının otomatik olarak kaldırıldığını unutmayın.

Yani, kalıcı pencereli bir iplik bellekte asılı kalıyor ve ayaklarının altından bir tabure devrildi. Kalıcı pencereyi kapattıktan sonra geri dönüş hiçbir yere gitmez.

Sizin durumunuzda, MQL5 betiğini sonlandırmadan önce, tüm DLL iş parçacıklarının normal şekilde tamamlanmasını ve garanti altına alınmasını açıkça beklemeniz gerekir.

Teşekkürler, şimdi açık.
 
Seride kârsız anlaşmalar olmasaydı, KÂR FAKTÖRÜ ve KESKİN ORAN göstergeleri bazı gerçekçi olmayan/aşırı değerler alır. Bu bir hata mı yoksa bu tür anlar bir şekilde dikkate alınmalı ve ele alınmalı mı? Nasıl doğru yapılır?
 
tol64 :
Seride kârsız anlaşmalar olmasaydı, KÂR FAKTÖRÜ ve KESKİN ORAN göstergeleri bazı gerçekçi olmayan/aşırı değerler alır. Bu bir hata mı yoksa bu tür anlar bir şekilde dikkate alınmalı ve ele alınmalı mı? Nasıl doğru yapılır?

EMPTY_VALUE (DBL_MAX ile aynı)

Tabii ki, bazı belirsiz nan kullanabilirsiniz, ancak o zaman karşılaştırma yapamazsınız.

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

EMPTY_VALUE (DBL_MAX ile aynı)

Tabii ki, bazı belirsiz nan kullanabilirsiniz, ancak o zaman karşılaştırma yapamazsınız.

Prensip olarak, bu tür anlar çok sık meydana gelmez, bu yüzden grafiklerin çıldırmaması için onları sıfırlayacağım. ))
 
tol64 :
Seride kârsız anlaşmalar olmasaydı, KÂR FAKTÖRÜ ve KESKİN ORAN göstergeleri bazı gerçekçi olmayan/aşırı değerler alır. Bu bir hata mı yoksa bu tür anlar bir şekilde dikkate alınmalı ve ele alınmalı mı? Nasıl doğru yapılır?

Görünüşe göre bir hata, çünkü bu durumda olduğu gibi, olumsuz işlemlerin yokluğunda, kâr faktörü negatif değerlerle hesaplanmamalıdır.

Sadece (Brüt Kâr / Brüt Zarar) formülünü alırsak, negatif işlemlerin yokluğunda sıfıra bölünürüz ve daha büyük bir Brüt Zarar ile 1'den küçük bir sayı elde ederiz, bu da daha fazlası için doğru değildir. Analiz, çünkü iki pozitif kâr faktörü arasındaki fark, nispeten olumsuz olan iki faktör arasındaki farktan çok daha büyük olacaktır.

 
Urain :

Görünüşe göre bir hata, çünkü bu durumda olduğu gibi, olumsuz işlemlerin yokluğunda, kâr faktörü negatif değerlerle hesaplanmamalıdır.

Bunun bir hata değil, bu göstergeyi hesaplamanın imkansızlığının bir işareti olduğu zaten iki mesaj yukarıda söylendi.
 
Rosh :
Bunun bir hata değil, bu göstergeyi hesaplamanın imkansızlığının bir işareti olduğu zaten iki mesaj yukarıda söylendi.
Soruyu soran kişi ne tür bir aşkın değer elde edildiğini belirtmedi, ben de #IND'ye karar verdim. Ve DBL_MAX durumunda, hesaplanamazsa oldukça mantıklıdır.
Bir numara yapmak mümkün olsa da, her hesaplamada hem Brüt Porofit'e hem de Brüt Zarar'a 1 cent ekleyin.
O halde doğrudan formül (( Brüt Porofit+0.01 )/( Brüt Kayıp+0.01 )) olacaktır.
Ve ters değeri hesaplama formülü (Brüt Kayıp daha büyük olduğunda)
do -(( Brüt Zarar+0.01 )/ ( Brüt Porofit+0.01 ))
Brüt Kayıp ve Brüt Porofit'in modüller olduğu açıktır.

O zaman çizgi her iki tarafta da simetrik olacaktır, bu GA için iyidir ve hesaplanamayan hiçbir durum olmayacaktır.

ZY Ama sizin için değil, optimizasyon kriterlerini yazan kişiler için faydalı olacaktır.

Neden: