Complementando...
Eu sei que o indicador contém 2 Buffers: "double SellBuffer[];", "double BuyBuffer[];"
Que retornam o valor 0 ou maior que 0, com a cotação, quando a seta é plotada, isso eu posso ver na janela de dados.
Também consegui adicionar um "Print" quando os valores são gerados no indicador, para ver durante um teste do indicador:
if(MACD[bar]>SIGN[bar] && MACD[bar+1]<= SIGN[bar+1])
{
BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
Print("BuyBuffer[0] = ",BuyBuffer[0]);
}
if(MACD[bar]<SIGN[bar] && MACD[bar+1]>= SIGN[bar+1])
{
SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
Print("SellBuffer[0] = ",SellBuffer[0]);
}
Dentre tudo que eu pesquisei, imagino que o caminho seja conseguir ler os buffers dentro do expert advisor, e então, caso o 'buy' seja > 0 eu compro ou encerro venda e caso o 'sell' seja > 0 o contrário.
Eu chamo o indicador no meu expert advisor com: mocHandle=iCustom(_Symbol, _Period, "Downloads/macd_on_chart");
Entretando não tenho a mínima idéia de como leio os buffers dele.
Apenas quis mostrar até onde eu fui embora eu não tenha certeza que fui pelo caminho certo, também aproveito para confirmar que estou usando MT5.
Obrigado pela ajuda,
Robson
Olá Robson,
Você está muito próximo do seu objetivo, vamos ver se consigo te ajudar.
Na prática não existe diferença entre o que já fazes lendo buffers de um indicador nativo e de um custom.
Os parâmetros do iCustom, como são genéricos, talvez induzam a essa interpretação de que sejam muito diferentes de um indicador nativo qualquer, mas note que é apenas uma lista dos parâmetros de entrada do indicador.
O que talvez esteja te confundindo, portanto, é que a escolha do buffer não será feita quando você 'chama' o indicador pelo iCustom (como referido), e sim quando copiar os valores dos buffers do indicador para os teus buffers, usando por exemplo a função CopyBuffer().
Nessa função você irá definir o buffer desejado, seja um indicador nativo ou custom (parâmetro buffer_num abaixo):
int CopyBuffer( int indicator_handle, // indicator handle int buffer_num, // indicator buffer number int start_pos, // start position int count, // amount to copy double buffer[] // target array to copy );
Recomendo também, para te facilitar o entendimento, a leitura do artigo Como chamar indicadores no MQL5.
Se não ajudar ou tiver qualquer outra dúvida, é só perguntar.
Olá Rogério,
Ontem, durante a tarde, eu descobri sobre o CopyBuffer, mas ainda não tinha tido tempo de trabalhar no código.
Peguei a sua mensagem já um pouco tarde da noite e resolvi finalizar...
O código ficou:
double SellBuffer[],BuyBuffer[];
CopyBuffer(MOC_Handle,0,1,1,SellBuffer);
CopyBuffer(MOC_Handle,1,1,1,BuyBuffer);
Testei e aparentemente resolveu mesmo...
Depois disso, já peguei um outro indicador e da mesma forma consegui as informações que eu precisava, a coisa aqui parece estar caminhando.
Queria te agradecer pela atenção e ajuda, eu já tinha encontrato o método que eu precisava, mas você além de confirmar com mais experiência ainda me ajudou a concluir o que era o buffer_num, que eu não estava entendendo e era exatamente o que faltava para mim.
Muito obrigado.
Robson
Olá Rogério,
Ontem, durante a tarde, eu descobri sobre o CopyBuffer, mas ainda não tinha tido tempo de trabalhar no código.
Peguei a sua mensagem já um pouco tarde da noite e resolvi finalizar...
O código ficou:
double SellBuffer[],BuyBuffer[];
CopyBuffer(MOC_Handle,0,1,1,SellBuffer);
CopyBuffer(MOC_Handle,1,1,1,BuyBuffer);
Testei e aparentemente resolveu mesmo...
Depois disso, já peguei um outro indicador e da mesma forma consegui as informações que eu precisava, a coisa aqui parece estar caminhando.
Queria te agradecer pela atenção e ajuda, eu já tinha encontrato o método que eu precisava, mas você além de confirmar com mais experiência ainda me ajudou a concluir o que era o buffer_num, que eu não estava entendendo e era exatamente o que faltava para mim.
Muito obrigado.
Robson
De nada Robson, desejo sucesso nos teus robôs.
Uma última dica, quando colocar código fonte utiliza o botão SRC no editor, pois facilita a visualização.
Abraço.
De nada Robson, desejo sucesso nos teus robôs.
Uma última dica, quando colocar código fonte utiliza o botão SRC no editor, pois facilita a visualização.
Abraço.
Queria agradecer a você também. esse posta acabou de me ajuda. vlw mesmo.
Você pode usar também a função iCustom, assim você nem precisa do arquivo mq4 do indicador basta ter o ex4 dentro da pasta indicators e a função recebe os parametros do indicador.
+ou- assim:
iCustom(NULL, 0, "indicador", 1, 2)
onde indicador que está entre aspas deve ser o nome do indicador como esta na pasta indicators sem o .ex4 no final
e o numero 1 é o buffer do indicador
o numero 2 é shift (vela) que apareceu o indicador
Olá estou tentando fazer isso em um indicador também com 2 buffers, já tinha feito esse passo de
CopyBuffer(indicador, 0, 0, 3, SellBuffer); CopyBuffer(indicador, 0, 0, 3, BuyBuffer);
Mas não consigo criar a execução..
depois disso seria:
if (SellBuffer == true)??
não consigo colocar a lógica em prática.
alguém sabe como ficaria no caso após copiar os buffers?
- www.mql5.com
- 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
Olá a todos, sou novo por aqui, muito prazer.
Estou estudando MQL5..
Já sei emitir ordens, checar posição e etc. utilizando CTrade. Também já utilizei indicadores nativos, como por exemplo o cruzamento de médias móveis, para gerar o sinal de compra/venda e então emitir uma ordem ou fechar uma posição.
Agora a grande questão é, como gerar ou ler sinais de compra/venda de um indicador customizado.
Para início eu baixei um indicador simples, baseado em MACD https://www.mql5.com/pt/code/2015
Mas após muitas (lê-se 10) horas de tentativas e pesquisa decidi apelar para o Fórum, espero que possam me ajudar...
Quero que meu expert emita ou feche ordens baseados nas setas que o indicador que eu peguei como modelo gera.
Agradeço antecipadamente por qualquer ajuda.
Valeu!
Robson