Erros, bugs, perguntas - página 1141
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Olá a todos!
Um tal problema.
Consigo o valor das Bandas e dos indicadores de MA com sucesso.
Bandas_handle=iBand(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE);CopyBuffer(Bands_handle,0,0,1,Base);
CopyBuffer(Bands_handle,1,0,1,Upper);
CopyBuffer(Bands_handle,2,0,1,Lower);
B_med_s=Base[0];
B_up_s=Cima[0];
B_low_s=Lower[0];
MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL);
CopyBuffer(MA_handle,0,0,1,MAv);
M_av_s=MAv[0];
Depois imprimir: B_up_s = 1.264249475876921 M_av_s = 1.2595
Depois tento realizar uma operação matricial B_up_s-M_av_s e obter o resultado 0,00000000.
O que é o milagre?
Olá a todos!
Um tal problema.
Consigo o valor das Bandas e dos indicadores de MA com sucesso.
CopyBuffer(Bands_handle,0,0,1,Base);
CopyBuffer(Bands_handle,1,0,1,Upper);
CopyBuffer(Bands_handle,2,0,1,Lower);
B_med_s=Base[0];
B_up_s=Upper[0];
B_low_s=Lower[0];
MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL);
CopyBuffer(MA_handle,0,0,1,MAv);
M_av_s=MAv[0];
Depois imprimir: B_up_s = 1.264249475876921 M_av_s = 1.2595
Depois tento realizar uma operação B_up_s-M_av_s mate e obter 0,00000000 como resultado.
O que é que é tão estranho?
1) Como inserir o código.
2) Em que tipo de variável se guarda o resultado da operação? Ou melhor ainda, dê-me por favor a parte do código onde a saída é produzida.
1) Como é que se insere o código.
2) Em que tipo de variável se armazena o resultado da operação? Melhor ainda, dar a parte do código onde a saída é produzida.
Todas as variáveis são do tipo duplo.
Não percebo porque é que as Bandas têm muitos dígitos enquanto que a MA tem apenas 4 casas decimais. Não deve haver qualquer resultado zero. É por esta razão que o algoritmo não funciona.
Tudo era tão simples na MQL4. Agora precisa da velocidade de optimização e da verificação de múltiplas moedas. Tenho de transferir tudo para a MQL5 (aparafusar)).
Todas as variáveis são do tipo duplo.
Não é claro porque é que as Bandas têm muitos dígitos e MA apenas 4 casas decimais. E o resultado zero não deve estar de todo presente. Esta é a razão pela qual o algoritmo não funciona.
Tudo era tão simples na MQL4. Agora é necessária uma maior velocidade de optimização e verificação de múltiplas moedas. Tenho de transferir tudo para a MQL5 (aparafusar)).
Deve funcionar. Abaixo está um guião baseado no seu código e no seu resultado:
Todas as variáveis são do tipo duplo.
Não é claro porque é que as Bandas têm muitos dígitos e MA apenas 4 casas decimais. O resultado de zero não deve estar aí de todo. É por esta razão que o algoritmo não funciona.
Tudo era tão simples na MQL4. Agora é necessária uma maior velocidade de optimização e verificação de múltiplas moedas. Agora tenho de transferir tudo para a MQL5 (aparafusar)).
Deve funcionar. Abaixo está o guião de acordo com o seu código e o seu resultado:
Sim, o guião funciona.
Até a EA com este exemplo funciona.
A minha EA, por outro lado, dá zero teimosamente. Vamos procurar por um erro ......
Olá a todos!
Pergunta, como fazer um valor variável a ser actualizado em cada tick num minuto, e depois esta soma é escrita para um valor separado, quando o minuto seguinte fecha, o valor da soma é substituído pelo novo valor?
int t = TimeSeconds();
enquanto (t !=0)
duplo b - a variável, que é actualizada durante cada minuto em cada tic.
duplo b1 - valor da variável b no tick anterior.
duplo s - quantidade em todas as carraças no espaço de um minuto.
duplo s1 - quantidade em todas as carraças dentro do minuto anterior.
b1=b;
s=b1+b
se (t=0) s1=s;
Como fazer um resumo dos dados em cada tic e como escrevê-los todos correctamente em geral?
Sim, o guião funciona.
Até a EA com este exemplo funciona.
Mas o meu Conselheiro Especialista dá zero. Vamos procurar o erro ......
Eis o que foi detectado.
Se apenas executar a EA, funciona bem mas no Testador de Estratégia produz zeros logo no início. Mas na linha seguinte, os zeros tornam-se magicamente um dado indicador normal. Não entendo o que se está a passar.....
Abaixo está o código.
Isto é o que o testador relata.
CJ 0 19:40:47.022 Core 1 EURUSD,M15 (Alpari-Ltd-Demo): OHLC bar states geradores. OnTick execução no bar só começa
IJ 0 19:40:47.022 Core 1 EURUSD,M15: início dos testes de peritos\tmp.ex5 de 2004.01.07 00:00 a 2004.02.02 00:00
LK 0 19:40:47.022 Core 1 2004.01.07 00:00:00 B_up_s=0.0 M_av_s=0.0
IM 0 19:40:47.022 Core 1 2004.01.07 00:00:00 sbl_top=verdadeiro B_up_s=0.0 M_av_s=0.0 B_up_s-M_av_s=0.00000000
OQ 0 19:40:47.022 Core 1 2004.01.07 00:15:00 B_up_s=1.279208140152992 M_av_s=1.2718
OI 0 19:40:47.022 Core 1 2004.01.07 00:15:00 sel=verdadeiro B_up_s=1.279208140152992 M_av_s=1.2718 B_up_s-M_av_s=0.00740814
CJ 0 19:40:47.022 Core 1 2004.01.07 00:30:00 B_up_s=1,279239651523307 M_av_s=1,2721
LN 0 19:40:47.022 Core 1 2004.01.07 00:45:00 B_up_s=1,279382808470771 M_av_s=1,2714
DS 0 19:40:47.022 Core 1 2004.01.07 01:00:00 B_up_s=1.279407737043184 M_av_s=1.2719
OD 0 19:40:47.022 Core 1 2004.01.07 01:15:00 B_up_s=1,279398917431485 M_av_s=1,2727
NI 0 19:40:47.022 Core 1 2004.01.07 01:30:00 B_up_s=1.279380702214008 M_av_s=1.2731
IM 0 19:40:47.022 Core 1 2004.01.07 01:45:00 B_up_s=1,279440208228416 M_av_s=1,2723
LE 0 19:40:47.022 Core 1 2004.01.07 02:00:00 B_up_s=1,279473515350084 M_av_s=1,272
DK 0 19:40:47.022 Core 1 2004.01.07 02:15:00 B_up_s=1,279515146590278 M_av_s=1,2715
FL 0 19:40:47.022 Core 1 2004.01.07 02:30:00 B_up_s=1.279601656250741 M_av_s=1.2709
IQ 0 19:40:47.022 Core 1 2004.01.07 02:45:00 B_up_s=1,279656914787522 M_av_s=1,2709
CE 0 19:40:47.022 Core 1 2004.01.07 03:00:00 B_up_s=1,27957962626541548 M_av_s=1,2707
Eis o que foi descoberto.
1) Não crie indicadores em cada tick!
2) Verificar se o indicador foi criado ou não, antes de aceder aos seus valores.
3) Verificar se os valores solicitados são copiados do indicador.
4) Apagar sempre a parte de cálculo do indicador após a conclusão do perito, caso contrário poderá, em algum momento, ficar sem RAM.
O problema foi porque se tentou copiar os valores do indicador que ainda não tinha sido criado. Faça disso uma regra - verifique o resultado das funções que chama.
Por favor, informe onde reside o erro.
Ekpert está a correr em demonstração, 3 pares. Aqui está o Diário de Bordo:
Aqui está o código.
Expert tenta executar OrderDelete(), dá erro, SendTradeRequest() está em loop, ekspert em conformidade com loops. Talvez o preço tenha mudado quando eu submeti a encomenda? Preciso de RefreshRates() e como lidar correctamente com isso? Procurei no fórum mas não encontrei nenhum exemplo...
Obrigado a todos de antemão