Boa tarde pessoal,
Tenho um indicador externo que pega a Media Móvel e me mostra no gráfico com mais duas linhas, sendo uma para cima da media e outra para baixo da media. O distanciamento é definido de acordo com o valor inserido no input linha_up e linha_down. O meu problema esta sendo na hora de incluir ele no EA, pois quando defino o periodo no EA ele me traz a media correta, mas nao sei importar essas linhas de distanciamento. Segue abaixo o arquivo de indicador e o comando dado no EA
EA
mmHandle
Perceba que o CopyBuffer() recebe em um dos parâmetros, o número do buffer a ler, conforme foram criados no seu indicador.
;)
Boa tarde,
No caso criei mais 2 buffers iguais do indicador.
double mmArray[]; double linha_upBuffer[]; double linha_downBuffer[]; mmHandle = iCustom(_Symbol, _Period, "::Indicators\\FreitasIndicator", ma_periodo); ArraySetAsSeries(mmArray, true); ArraySetAsSeries(linha_upBuffer,true); ArraySetAsSeries(linha_downBuffer,true); ChartIndicatorAdd(ChartID(), 0,mmHandle);
e meu CopyBuffer está assim ainda dentro do EA. Tenho que criar mais 2 CopyBuffers também? obrigado
if(CopyBuffer(mmHandle, 0, 0, 3, mmArray)<0) { Alert("Erro ao copiar dados da média móvel: ", GetLastError()); return; }
Flavio Jarabeck:
Você tem que criar +2 buffers no EA, e ler depois com CopyBuffer(), usando o seu
Perceba que o CopyBuffer() recebe em um dos parâmetros, o número do buffer a ler, conforme foram criados no seu indicador.
;)
if(CopyBuffer(mmHandle, 0, 0, 3, mmArray)<0) { Alert("Erro ao copiar dados da média móvel: ", GetLastError()); return; } if(CopyBuffer(mmHandle, 0, 0, 3, linha_upBuffer)<0) { Alert("Erro ao copiar dados da média móvel: ", GetLastError()); return; } if(CopyBuffer(mmHandle, 0, 0, 3, linha_downBuffer)<0) { Alert("Erro ao copiar dados da média móvel: ", GetLastError()); return; }Segue a inclusão de mais 2 CopyBuffers, porem alterei o input do EA e no gráfico ainda permanece o linha_up e down do input do indicador.
Segue a inclusão de mais 2 CopyBuffers, porem alterei o input do EA e no gráfico ainda permanece o linha_up e down do input do indicador.
O código acima está errado... leia atentamente a documentação dos parâmetros do CopyBuffer(), ela fará toda a diferença pra você em programação de EAs daqui pra frente...
Sugiro também trocar Alert() por Print(), assim não fica saltando popups à toa. Os Print()'s são exibidos na aba Experts. (e melhore as mensagens, se der pau, as mensagens são idênticas...)
Está quase lá...
;)
Certo Flavio, vou ler a documentação, já fiz as alterações sugeridas. Obrigado por enquanto. Acho que essa seria a única opção né da imagem abaixo (Em Anexo), onde você coloca o nivel de linha da MM.
O código acima está errado... leia atentamente a documentação dos parâmetros do CopyBuffer(), ela fará toda a diferença pra você em programação de EAs daqui pra frente...
Sugiro também trocar Alert() por Print(), assim não fica saltando popups à toa. Os Print()'s são exibidos na aba Experts. (e melhore as
mensagens, se der pau, as mensagens são idênticas...)
Está quase lá...
;)
- www.mql5.com
Certo Flavio, vou ler a documentação, já fiz as alterações sugeridas. Obrigado por enquanto. Acho que essa seria a única opção né da imagem abaixo (Em Anexo), onde você coloca o nivel de linha da MM.
hey, peraí... esses parâmetros são apenas para VISUALMENTE você ter níveis para trade manual. Seu EA não precisa disso.
Os buffers vão te dar todas essas informações numéricas. Aí vc trata como quiser dentro do código...
;)
Isso, seria visual mesmo, as entradas pela distorção ja esta funcionando, só queria deixar visível essas linhas para eu poder fazer estatísticas também.
hey, peraí... esses parâmetros são apenas para VISUALMENTE você ter níveis para trade manual. Seu EA não precisa disso.
Os buffers vão te dar todas essas informações numéricas. Aí vc trata como quiser dentro do código...
;)
Isso, seria visual mesmo, as entradas pela distorção ja esta funcionando, só queria deixar visível essas linhas para eu poder fazer estatísticas também.
Ah, ok!
No código do seu INDICADOR, você pode incluir mais linhas via programação:. Segue exemplo de codificação de um dos meus indicadores - configurado no OnInit():
IndicatorSetInteger( INDICATOR_DIGITS, Digits() ); IndicatorSetInteger( INDICATOR_LEVELS, 6 ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 0, inpExtremeOverbought ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 1, inpOverbought ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 2, inpOversold ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 3, inpExtremeOversold ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 4, inpFlatNegative ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 5, inpFlatPositive ); IndicatorSetString( INDICATOR_LEVELTEXT, 0, "Extreme overbought" ); IndicatorSetString( INDICATOR_LEVELTEXT, 1, "Overbought" ); IndicatorSetString( INDICATOR_LEVELTEXT, 2, "Oversold" ); IndicatorSetString( INDICATOR_LEVELTEXT, 3, "Extreme oversold" ); IndicatorSetString( INDICATOR_LEVELTEXT, 4, "Flat" ); IndicatorSetString( INDICATOR_LEVELTEXT, 5, "Flat" );
Bom dia Flavio, juro que tentei de tudo mas nao consegui fazer funcionar. Quando abro um grafico limpo e arrasto somente o indicador, ele exibe na tela sem problemas e caso eu alterar a linha up e down ele atualiza no grafico. Porem quando chamo ele pelo EA ele abre com as linha up e down definidas no indicador, mas quando abro o EA para alterar os paramentros por exemplo de 50 pontos para 100 pontos da media ai ja da erro.
Ah, ok!
No código do seu INDICADOR, você pode incluir mais linhas via programação:. Segue exemplo de codificação de um dos meus indicadores - configurado no OnInit():
Os paramentros do indicador esta mesma coisa que postei no começo do topico. No EA, pelo que entendi fiz umas alteração mas sem resultado positivo.
double mmHandleBuffer[]; double linha_upBuffer[]; double linha_downBuffer[]; int mmHandle = INVALID_HANDLE; int OnInit() { mmHandle = iCustom(_Symbol, _Period, "::Indicators\\FreitasIndicator", ma_periodo,ma_metodo,ma_preco,ma_desloc,linha_up,linha_down); ArraySetAsSeries(mmHandleBuffer, true); ArraySetAsSeries(linha_upBuffer,true); ArraySetAsSeries(linha_downBuffer,true); ChartIndicatorAdd(ChartID(), 0,mmHandle); } void OnTick() { if(CopyBuffer(mmHandle, 0, 0, 3, mmHandleBuffer)<0) { Print("Erro ao copiar dados da Média Móvel: ", GetLastError()); return; } Print("mmHandleBuffer",mmHandleBuffer[0]); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(CopyBuffer(mmHandle, 1, 0, 3, linha_upBuffer)<0) { Print("Erro ao copiar dados da Variação acima da Média: ", GetLastError()); return; } Print("linha_upBuffer",linha_upBuffer[0]); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(CopyBuffer(mmHandle, 2, 0, 3, linha_downBuffer)<0) { Print("Erro ao copiar dados da Variação abaixo da Média: ", GetLastError()); return; } Print("linha_downBuffer",linha_downBuffer[0]); }
Bom dia Flavio, juro que tentei de tudo mas nao consegui fazer funcionar. Quando abro um grafico limpo e arrasto somente o indicador, ele exibe na tela sem problemas e caso eu alterar a linha up e down ele atualiza no grafico. Porem quando chamo ele pelo EA ele abre com as linha up e down definidas no indicador, mas quando abro o EA para alterar os paramentros por exemplo de 50 pontos para 100 pontos da media ai ja da erro.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa tarde pessoal,
Tenho um indicador externo que pega a Media Móvel e me mostra no gráfico com mais duas linhas, sendo uma para cima da media e outra para baixo da media. O distanciamento é definido de acordo com o valor inserido no input linha_up e linha_down. O meu problema esta sendo na hora de incluir ele no EA, pois quando defino o periodo no EA ele me traz a media correta, mas nao sei importar essas linhas de distanciamento. Segue abaixo o arquivo de indicador e o comando dado no EA
EA