Erros, bugs, perguntas - página 696

 

Ajude-me aqui

tentar multithreading mas crashes terminais

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

Escrevi uma dll C++.

Aqui está o código

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

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

E o guião

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

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

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


Se eu alterar o código desta dll para o seguinte

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

}

Tenho o número 10 no ecrã no lugar do comentário (deve ser) e depois recebo msgbox e 2 botões

o terminal não se despenhará enquanto eu não carregar num dos botões.

assim que a pressiono, aparece a mensagem explicando porque ocorreu o acidente e como repará-lo...

 
papaklass:

Cavalheiros, alguém correu multi-divisas no modo de visualização de preços de abertura com referência a outras TFs?

Aqui está o gráfico diário:


O gráfico foi ordenado e fixado. Obrigado pelo exemplo.
 
olyakish:

O terminal não cai até eu premir pelo menos um dos botões.

Assim que a pressiono, aparece a mensagem sobre encontrar a causa do acidente e como repará-la...

Note que o script MQL5 é automaticamente descarregado após a conclusão do OnStart, incluindo a sua DLL.

Ou seja, criou-se um fio com uma janela modal pendurada na memória, e o banco foi derrubado por baixo dele. Depois de fechar a janela modal, volta para lado nenhum.

No seu caso, precisa de esperar explicitamente até que todos os tópicos DLL sejam terminados de uma forma normal e garantida antes de terminar o script MQL5.

 
Renat:

Note que o script MQL5 é automaticamente descarregado após a conclusão do OnStart, incluindo a sua DLL.

Ou seja, há um fio com uma janela modal pendurada na memória, e um banco foi derrubado por baixo dele. Depois de a janela modal estar fechada, volta para lado nenhum.

No seu caso, antes de terminar o script MQL5, precisa de esperar explicitamente que todos os fios DLL terminem normalmente e que lhe seja garantido.

Obrigado, compreendo-o agora.
 
Se não houver uma única perda numa série de ofícios, o FACTOR DE LUCRO e a RÁCIO SHARPE tomam alguns valores irrealistas/extremos. É um erro ou tais momentos devem ser considerados e, de alguma forma, processados? Como fazê-lo correctamente?
 
tol64:
Se não houver uma única perda numa série de ofícios, o FACTOR DE LUCRO e a RÁCIO SHARPE tomam alguns valores irrealistas/extremos. É um erro ou tais momentos devem ser considerados e, de alguma forma, processados? Como fazê-lo correctamente?

EMPTY_VALUE (o mesmo que DBL_MAX)

É claro que se pode aplicar alguma nan, mas depois não se pode fazer comparações.

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

EMPTY_VALUE (o mesmo que DBL_MAX)

É claro que se pode usar alguma nan, mas depois não se pode fazer comparações.

Na verdade, tais momentos não ocorrem com tanta frequência, por isso vou apenas zerá-los para que os gráficos não enlouqueçam. ))
 
tol64:
Se não houver perda numa série de ofícios, os valores de FACTOR DE LUCRO e RÁCIO SHARPE tomam alguns valores irrealistas/extremos. É um erro ou tais momentos devem ser considerados e, de alguma forma, processados? Como fazê-lo correctamente?

Aparentemente existe um erro, porque o Factor de Lucro não deve ser calculado com valores negativos, bem como, neste caso, com ausência de negócios negativos.

Simplesmente, se tomarmos a fórmula globalmente (Lucro Bruto/Perda Bruta), então na ausência de negócios negativos obtemos divisão por zero, e quando a Perda Bruta é maior obtemos número inferior a 1, o que também não é correcto para uma análise mais aprofundada, porque a diferença entre dois factores de lucro positivo será muitas vezes mais do que a diferença entre dois convencionalmente negativos.

 
Urain:

Aparentemente existe um erro, uma vez que o factor de lucro não deve ser calculado com valores negativos, e como neste caso, sem negócios negativos.

Já foi dito dois postos acima que isto não é um erro, mas um sinal de impossibilidade de calcular este indicador.
 
Rosh:
Já foi dito dois postos acima que isto não é um erro, mas um sinal de impossibilidade de calcular este indicador.
Ele não especificou um valor em particular, por isso assumi que era #IND. E no caso de DBL_MAX, é bastante lógico que não se possa calculá-lo.
Embora se possa fazer um truque, a cada cálculo adiciona-se 1 cêntimo tanto ao Porofit Bruto como à Perda Bruta.
Então a fórmula forward seria ((Gross Porofit+0.01)/(Gross Loss+0.01))
A fórmula para calcular o valor recíproco (quando a perda bruta é maior)
A fazer -((Perda bruta+0,01)/(Porofit bruto+0,01))
Bem, é evidente que a Perda Bruta e o Gross Porofit são módulos.

Então a linha será simétrica de ambos os lados, o que é bom para a AG e não haverá nenhuma situação não calculável.

Mas será muito provavelmente útil não para si, mas para as pessoas que estão a escrever os seus próprios critérios de optimização.