Crie sua própria extensão MetaTrader (dll) - página 9

 

DLL não atualizando com novos carrapatos

Como continuação do meu anterior posto DLL (#81), tenho agora um problema adicional; quando a DLL é chamada assim:

int start()

{

taxas duplas[][6];

int MaximumRecords = ArrayCopyRates( Tarifas, Símbolo(), 0 );

for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = VAZIO; }

GetSMAArray( Tarifas, Registros Máximos, Períodos, OutPut );

return(0);

}

funciona bem no sentido de que ele faz os gráficos como esperado no gráfico, mas infelizmente não é atualizado com novos tiquetaques recebidos - ele apenas faz os gráficos em sua chamada inicial. Que código adicional posso acrescentar para fazer a atualização da DLL com os tiquetaques recebidos? Quase todas as minhas buscas têm apresentado variações sobre o uso de

ExtCountedBars = IndicatorCounted();

para forçar um loop de tempo para calcular, mas todos estes se aplicam aos cálculos contidos no próprio arquivo .mq4. Eu quero forçar a DLL a recalcular. Em segundo lugar, gostaria que este recálculo ocorresse somente na conclusão de uma barra e não na chegada de todos e de cada tick.

 

Para loop deve ser

for(int zz=MaximumRecords-1;.................

10 Registros ocupam as posições 0 a 9 em uma matriz

 
Tzuman:
Para loop deve ser

for(int zz=MaximumRecords-1;.................

10 Os registros ocupam as posições 0 a 9 em uma matriz

Receio que isto não tenha ajudado, a DLL ainda não é atualizada com novos tiquetaques.

 

O vídeo de amostra de Mistigri não está disponível

Olá a todos,

Alguém poderia disponibilizar o vídeo de amostra da Mistigri na Internet?

 
jocinet:
Olá a todos, alguém poderia disponibilizar o vídeo de amostra da Mistigri na Internet?

Mistigri o disponibilizou novamente em:

Projetos | PsNouvion

 

Um caminho para os desenvolvedores C#: MT4/5 -> C# DLL

Aqueles desenvolvedores C# que gostariam de escrever uma DLL em C# para Metatrader ao invés de em C++ agora têm um caminho para esse fim. Há um artigo muito interessante intitulado "Expondo o código C# para MQL5 usando exportações não gerenciadas" que acabei de ler.

Leia/escreva o artigo e leia a seção 2.5 em diante.

Expondo o código C# à MQL5 usando exportações não-gerenciadas - Artigos MQL5

Leia as instruções, depois baixe o Template para C# "Unmanaged Export Library" e coloque o arquivo zip no diretório correto (seguindo as instruções naquela página):

C# Modelo de Projeto para Exportações Não Gerenciadas

Carregar VS e selecionar o modelo "Unmanaged Export Library" (Biblioteca de exportação não administrada). Siga as amostras de código. Espero que isto ajude alguém!

 

erro crítico, mas sem travamento e esta é a forma de escrever dll

Finalmente posso escrever minha dll usando o MistigriFX Sample Debug (MFX_SD para abreviar) no Visual Studio 2008 Express.

No entanto, estou tendo um problema engraçado:

Não há problema ao rodar três MFX_SD no gráfico com entrada de período diferente. Entretanto, ao anexar outros três ao segundo gráfico com entrada de período diferente, estou tendo duas mensagens de erro (função 'GetSMAArray' chamada da dll 'Mistigri FX Sample 1.dll' erro crítico') e o especialista deixa de funcionar.

Então eu vejo dois gráficos, em um gráfico todos os três MFX_SD rodando bem a cada tick, em outro vejo apenas um MFX_SD rodando cada tick e os outros dois não estão.

algum conselho, pessoal?

Em anexo é como eu escrevo a dll no visual studio 2008. Escrevo isto em documento de texto para que você possa lê-la de seu Visual Studio.

Se você tiver algum erro, por favor amaldiçoe a si mesmo por seguir os conselhos de um programador novato como eu .

Muito obrigado de antemão.

Arquivos anexados:
 

erro crítico resolvido

Depois de tentar várias vezes, finalmente resolvi as mensagens de 'erro crítico' (leia meu post anterior).

Não tem nada a ver com a forma como eu fiz o .dll, mas tem a ver com a lógica miss na função GetSMAArray em códigos MFX_SD.

Aqui estão os códigos MFX_SD que eu destaco a lógica miss.

para ( int i = 0; i < MaximumRecords; i++)

{

soma dupla = 0,0;

para ( int k = 0; k < Período; k++ )

{

Soma += Tarifas[MaximumRecords-i-1-k].fechar;

}

Resultado[MaximumRecords-i-1] = Soma / Período ;

}

Por exemplo, supõe-se que temos Period = 2, MaximumRecord = 75, e i = 74. Isso comete erro ao calcular :

Soma += Tarifas[MaximumRecords-i-1-k].fechar;

porque o resultado do MaximumRecord - i - 1 - k é igual a -1. O único valor para Tarifas [-1] é zero, o que torna o valor da soma igual a zero também. E como calculamos SMA, temos que dividir a soma com Período, que é zero dividido por 2, E há o 'erro crítico' e o especialista pára.

Se você não acredita nisso, anexe vários MFX_SD a um gráfico de 1 minuto com período de entrada diferente, mas um de MFX_SD deve ter período de entrada = 1. Olhe a janela do Terminal MT e clique na aba expert. Você verá uma mensagem de erro crítico e o especialista pára de funcionar. Entretanto, se você olhar apenas para o gráfico MFX_SD com período = 1 ainda está funcionando.

Eu acho que o que MistigriFX tentou mostrar em seu vídeo foi como fazer dll e passar arrays para dll. Se ele tivesse que corrigir em sua lógica SMA, seria um vídeo que dói muito de cabeça para assistir. É por isso que ele nos mostra com não-correto, mas um exemplo simples de MA simples.

Feliz fazer dll.

 

Extensão MT4 - seu curso

Olá codersguru,

poderia por favor me dar alguns links para seu curso?

ou manual em pdf.

Eu precisaria de qualquer literatura para aprender mais sobre isso.

Muito obrigado.

Com os melhores cumprimentos

Ivan

 

...

Nas amostras de especialistas\\DLLSample pasta de metatrader (cada metatrader o instala lá) você tem um exemplo (fonte mql e C++, com projeto e arquivo def) que é tudo que você precisa saber sobre as chamadas dll (todos os tipos de parâmetros possíveis suportados pelo metatrader para dll e de volta "comunicação" são cobertos lá) O resto é até o seu conhecimento de C/C++.

holesovsky:
Olá codersguru,

Por favor, me dê alguns links para o seu curso,

ou manual em pdf.

Eu precisaria de qualquer literatura para aprender mais sobre isso.

Muito obrigado.

Com os melhores cumprimentos

Ivan
Razão: