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
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
EA a partir de indicador personalizado
wlysan, 2019.08.18 00:37
Olá, sou novato na programação com o mql5.
Estou tendo dificuldades em criar um EA a partir de um indicador personalizado, eu só quero obter os dados de um indicador que criar e manipulá-los no robô de maneira simples.
Estou tentando algo como o código abaixo, mas parece não ser o caminho certo, eu tomei como base a chamada de um indicador iMA simples.
void OnTick()
{
double stopATR_Array[];
int stopATR_Handle;
stopATR_Array = iCustom(_Symbol, _Period, "StopATR", 10, 1);
ArraySetAsSeries(stopATR_Array, true);
CopyBuffer(stopATR_Handle, 0, 0, 3, stopATR_Array);
}
Alguém poderia me dar o caminho das pedras? Eu encontrei vários códigos diferentes, porem alguns bem complexos e com muitos rodeios.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Como listar todas as opções em negociação de um ativo(symbol)?
Trader_Patinhas, 2018.07.01 23:34
Olá Thadeu,
Segue um script que eu construí para listar todas as opções de um ativo escolhido e suas principais propriedades:
Na corretora Modalmais, que costuma preencher corretamente todas as propriedades das opções, o script imprime o resultado no terminal assim (abaixo apenas um trecho da resposta, pois para a PETR4 são centenas de opções):
O problema é que nem todas as corretoras preenchem corretamente as propriedades das opções. Se for este o caso da sua corretora, vc vai ter que ter algum "jogo de cintura" (obter o strike analisando a descrição, obter o vencimento com base na quinta letra do ticker, etc.).
obs: se a sua corretora não preencher nem o strike, vc vai ter que mexer no código para eliminar o filtro que seleciona somente ativos com strike maior que zero, senão não vai aparecer nada. Nesse caso, podem aparecer na lista outros tipos derivativos da ação que não sejam opções e vc vai ter que ter mais "jogo de cintura" ainda pra filtrar (por exemplo: descartar os tickers cujo ultimo caracter não for numérico.
Espero ter ajudado.
Abraços
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Dúvida sobre a função ZeroMemory()
Márcio Hermes, 2019.08.09 02:01
Com base no seu retorno, vou explanar como o EA está desenvolvido para fins de alinhar a nossa conversa.
1º - o desenvolvimento do código está em dois arquivos tradicionais(.mq5 e .mqh).
Observei que em vários exemplos aqui na comunidade, o pessoal gosta de deixar todo o código no próprio .mq5.
2º - no arquivo .mq5 é feito o #include e criado uma variável (ou um objeto) da classe incluída, como mostrado no exemplo de código abaixo:
3º - logo, a partir dos eventos de OnTick(), OnTrade(), OnChartEvent(), e inclusive OnBookEvent(), a brincadeira começa. Inclusive são gerados eventos de botões.
4º - feito este preâmbulo, vamos aos fatos. A função que está incluída logo abaixo, contém as tradicionais variáveis do tipo MqlTradeRequest e MqlTradeResult.
Ambas variáveis MqlTradeRequest e MqlTradeResult são declaradas de foma local, ou seja, dentro da função. Se realmente entendi sua explanação, e se estamos "falando a mesma língua", seria necessário então usar a função ZeroMemory(), antes de "montar" a ordem de compra, para garantir que todas as variáveis sejam inicializadas com valores "padrão". Se não entendi de forma correta, aponte-me o erro, por favor.
Está postado toda a função:
Já nesta função, as variáveis MqlTradeRequest e MqlTradeResult também são declaradas de forma local, dentro da função, porém como se trata de uma iteração, onde há uma busca por uma ordem em específico, se faz necessário a utilização da função ZeroMemory() para garantir que todas as variáveis sejam inicializadas com o valor "padrão", antes da próxima iteração. Segue código abaixo:
Grande abraço.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Zero Divide em dois indicadores em TF menores
prsc, 2019.08.22 17:45
Procurando solução para esse erro e lendo aqui sobre os pontos positivos e negativos, acabei encontrando um detalhe, nem vou chamar de erro que pode gerar esse erro de divisão, isso foi no meu caso.
Eu tenho um loop for que soma o volume para fazer uma média, sei que tem como usar o indicador do próprio mt5, mas preferi fazer na mão.
Em um indicador configurado para timeframe de 5 minutos estava funcionando, e em outro que fiz com o mesmo código, mas com resultados para 2 minutos ficou dando esse erro.
Até que notei uma única diferença entre ambos, onde eu usava direto o vetor Volume[] no de 5 minutos, e acabei resumindo instânciando vol[i] = volume[i], e usando o vol[i] em todo o código.
Mas no loop isso começou a gerar o erro de divisão, então voltei para o modo antigo deixando assim:
Então parou o erro, e testei voltando para "vol", e o erro volta a acontecer.
Se alguém puder explicar porque pode acontecer isso seria interessante.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Dúvida sobre a função ZeroMemory()
Márcio Hermes, 2019.08.09 02:01
Com base no seu retorno, vou explanar como o EA está desenvolvido para fins de alinhar a nossa conversa.
1º - o desenvolvimento do código está em dois arquivos tradicionais(.mq5 e .mqh).
Observei que em vários exemplos aqui na comunidade, o pessoal gosta de deixar todo o código no próprio .mq5.
2º - no arquivo .mq5 é feito o #include e criado uma variável (ou um objeto) da classe incluída, como mostrado no exemplo de código abaixo:
3º - logo, a partir dos eventos de OnTick(), OnTrade(), OnChartEvent(), e inclusive OnBookEvent(), a brincadeira começa. Inclusive são gerados eventos de botões.
4º - feito este preâmbulo, vamos aos fatos. A função que está incluída logo abaixo, contém as tradicionais variáveis do tipo MqlTradeRequest e MqlTradeResult.
Ambas variáveis MqlTradeRequest e MqlTradeResult são declaradas de foma local, ou seja, dentro da função. Se realmente entendi sua explanação, e se estamos "falando a mesma língua", seria necessário então usar a função ZeroMemory(), antes de "montar" a ordem de compra, para garantir que todas as variáveis sejam inicializadas com valores "padrão". Se não entendi de forma correta, aponte-me o erro, por favor.
Está postado toda a função:
Já nesta função, as variáveis MqlTradeRequest e MqlTradeResult também são declaradas de forma local, dentro da função, porém como se trata de uma iteração, onde há uma busca por uma ordem em específico, se faz necessário a utilização da função ZeroMemory() para garantir que todas as variáveis sejam inicializadas com o valor "padrão", antes da próxima iteração. Segue código abaixo:
Grande abraço.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Profit < 0 só de um ativo
sergiomt, 2019.08.24 18:35
Tô testando um EA que trabalha com dois ativos ao mesmo tempo. Lá nos input´s estes dois ativos estão configurados como symbols0 e symbols1. O trecho do código abaixo mostra a abertura de uma posição quando já houver 2 compras abertas (count_buys==2) no symbols0. O que devo incluir, de mais simples, para que só abra mais posições se o Profit deste símbolo (só deste) estiver menor que zero ?
Algo do tipo: if(Use_Symbol0 && count_buys==2 && m_symbols0.Profit() < 0) = Sei que não é bem assim, só coloquei para minha dúvida ficar mais clara. Profit só de um determinado símbolo (ativo), que inclusive pode ter várias ordens abertas ao mesmo tempo.
if(Use_Symbol0 && count_buys==2)
OpenPosition(m_symbols0.Name(),PosType,Symbol0_Lot);
GRATO
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Minha EA encerra operações e incia novas antes do esperado sem adicionar stop loss ou gain
Leonardo Fernandez, 2019.08.14 23:15
Ola,
Criei uma EA no meta editor usando o Expert Advisor (gerar), o problema é o seguinte, eu determinei um stop loss e um gain, porem, no primeiro trade que a EA faz no dia ela adiciona o STOP loss e o GAIN mas depois disso antes mesmo de chegar no loss ou no gain ela encerra a operação e inicia outra só que dessa vez ela não adiciona o stop loss nem o stop gain e fica operando "aleatoriamente" sem utilizar as regras de stop.
Basicamente o seguinte: Minha EA não espera uma operação terminar para iniciar outra, e quando incia ela não adiciona stop loss nem o gain.
Nos backtests ela funciona perfeitamente, porem, quando colocada no mercado em tempo real (demo) ela tem esse comportamento.
Existe alguma forma de contornar isso? Lembrando que não escrevi o código, é o código padrão do expert advisor (gerar).
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Novo indicador de volume para mini ínidce da B3
kuramaua brazil, 2019.08.20 17:43
Não estou conseguindo colocar estes dois indicadores na CODEBASE, o que devo fazer ?
https://www.mql5.com/pt/code/26421/
indicador 1:
indicador 2: Intra Volume para decisões rápidas.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
ativa função do EA ao mudar de tick
Márcio Hermes, 2019.08.22 00:50
Se entendi sua necessidade:
- Insira este trecho no arquivo .mq5, caso o mesmo não exista.
- Se por acaso esta função já está inserida, é ela que monitora mudança de tick.
Bons negócios.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Limpar Array Estatico ou tirar o erro que tenho de array fora de range.
Maylon Sales, 2016.07.16 15:06
Bom dia .
Como faço para limpar o buffer de um array Estático ?
E porque quando executo o código a baixo da erro de array fora de range no UpFractal_1 ?
Para tirar esse erro eu defini o arrei como Estatico -> double UpFractal_1[10];
Porem agora preciso limpar o baffer do UpFractal_1 mas a função ArrayFree() Somente limpa os array Dinâmicos.
Por favor me ajudem.