Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1739

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
A primeira chamada para CopyRates() iniciou a troca de dados históricos (não corra por uma semana e você terá o mesmo novamente, bem, talvez não uma semana, mas algum tempo).
Você só precisa verificar quantos dados há no servidor e comparar a quantidade disponível com o Expert Advisor. Se for menos do que o necessário - deixar a EA até o próximo tick. No próximo tick, verifique novamente. Se a quantidade necessária de histórico não for obtida em uma determinada quantidade de tentativas - então este erro deve ser processado conforme necessário.
Obrigado pela informação!
Se você tiver tempo, por favor, informe como corrigi-lo:
Duas metas opostas são estabelecidas na história N velas atrás: Close[N]+50*Point e Close[N]-50*Point.
Então há uma condição que o preço deve atingir uma das metas (se (Alto[i] >Fech[N]+50*Ponto) ou (se (Baixo[i]<Fech[N]-50*Ponto)
Quando a condição é atingida, a distância de Close[N] a High[i] é escrita em x[alto]=High[i] array.
Depois é lançado aleatoriamente em qualquer um dos gráficos a qualquer momento.
E ao verificar via Print(x[high]), 1-2 de cada dez valores mostram menos de 50! Um tem 12, o outro 49. Embora, é estritamente indicado+50*Point. 8-9 são corretas (mais de 50) e 1-2 são anormais. Não é através do testador, mas com um gráfico real eu coloco um Expert Advisor (sem nenhuma função comercial); ele trabalha com o histórico e exibe resultados incorretos.
Quanto maior for o valor, menos erros ocorrem. Pensei que talvez fosse a propagação que interferisse, mas... O MT4 não parece ter se espalhado pela história
Olá Prezados usuários do fórum e programadores experientes! Eu preciso de ajuda para completar a EA)). Favor aconselhar como adicionar 2 coisas ao consultor de código:
1. Eis a situação: eu abro um pedido (1º) com TP e SL e um certo lote (provavelmente 0,01). Se este pedido fechar com lucro - frio, nada muda. Mas se este (1º) pedido for fechado no SL, o próximo pedido imediatamente após este (2º) é aberto com um lote 2 vezes maior (0,01*2=0,02). Se esta segunda ordem for fechada no Take Profit, então a próxima ordem (3ª ordem) é aberta com um lote regular, ou seja, 2 vezes maior lote é necessário somente para a próxima ordem (2ª ordem) depois que a anterior (1ª ordem) foi fechada no SL. Se a terceira ordem for fechada em SL pela segunda vez consecutiva, o lote permanecerá aumentado em 2x até que não haja nenhum TP fechado. Espero ter descrito em detalhes a lógica do que precisa ser acrescentado;
2. e a segunda coisa que temos que acrescentar é o movimento SL. agora deixe-me explicar com um exemplo: vamos assumir que temos uma ordem com parâmetros básicos T.p. + 300, S.l. - 500. O preço se move na direção desejada e passa +100 pips a partir do preço de abertura do pedido. Uma vez que o preço atinja +100 a partir do preço de abertura do pedido, SL deve passar da base -500 para +90. Isto é, quando o preço atinge +100 pips do preço de abertura do pedido, transferimos o pedido para o Breakeven ajustando S,L para +90 pips. Depois disso, se o preço se mover mais na direção desejada e passar por mais + 50 pips - S.L. é movido por 50 pips => deve agora estar a + 140 pips do preço de abertura do pedido. Isto é, a S.L. primeiro se move de sua posição base para + 90 pips do preço de abertura do pedido e depois se move se passar por + 50 pips ( - 500 => + 90 => + 140 => + 190 etc.). E assim vai ou até o preço chegar ao T.P. ou quando a tendência se inverte e atinge a S.L.
Espero ter descrito tudo em detalhes, e espero realmente sua ajuda, pois ao acrescentar estes elementos em falta, o Assessor Especialista estará pronto)) Se você tiver alguma dúvida, por favor, pergunte))) Estou colando uma parte do código do Expert Advisor abaixo:
Sobre o primeiro ponto: antes de abrir uma posição, veja como a anterior foi fechada. Se você tomar o SL, então o lote deve ser o dobro. O lote não deve ser aumentado pela metade do lote da posição anterior, mas definido nas configurações ou em algum lugar no código. Então, antes de abrir, você verificará a condição: se a posição anterior foi fechada pelo SL, então abra uma posição com o lote duplo.
Quanto à segunda: Há muito tempo atrás, coloquei uma parada de amostragem nesta linha. Procure por ela. Melhor no meu perfil em mensagens - você o encontrará lá mais rápido do que navegar por mais de 100 páginas aqui. Então, com base no exemplo encontrado, você tentará criar sua própria rede de arrasto.
A primeira chamada para CopyRates() iniciou a troca de dados históricos (não corra por uma semana e você terá o mesmo novamente, bem, talvez não uma semana, mas algum tempo).
Você só precisa verificar quantos dados há no servidor e comparar a quantidade disponível com o Expert Advisor. Se for menos do que o necessário - deixar a EA até o próximo tick. No próximo tick, verifique novamente. Se uma quantidade necessária de tentativas não for obtida - o erro é tratado conforme necessário.
Podemos obter o número de barras carregadas de forma programática?
Eu mesmo apenas olho para a data no arquivo de citações para cada TF e tento não ir além delas nos cálculos.
Esta tarefa pode ser desnecessária nesta forma. Seria mais correto obter uma bandeira quando a quantidade correta de barras é carregada, mas pode nunca ser carregada para um ou outro símbolo.
Sobre o primeiro ponto: antes de abrir uma posição, veja como a posição anterior fechou. Se por SL, então o lote deve ser o dobro. O lote não deve ser dobrado a partir do lote da posição anterior, mas a partir do conjunto nas configurações ou em algum lugar no código. Então, antes de abrir, você verificará a condição: se a posição anterior foi fechada pelo SL, então abra uma posição com o lote duplo.
Acho que já o mudei no código:
Ou é errado? Além disso, eu não sei como mudar duas coisas relacionadas ao lote. A primeira é que um pedido com um lote dobrado deve ser aberto somente uma vez e somente em um pedido (o próximo pedido após o pedido com S.L.). E a segunda, que não sei como acrescentar, é para que no caso de dois S.L.'s em fila (duas ordens fechadas em fila por S.L.) a terceira ordem não abra com muito mais 2 (2*2*2), mas apenas uma vez (2*2) como a segunda ordem.
Acho que já mudei isso no código:
Ou isso é errado? Além disso, eu não sei como mudar duas coisas sobre muita coisa. A primeira é fazer um pedido com lote duplo aberto somente uma vez e somente em um pedido (o próximo pedido após o pedido com S.L.). E a segunda, que não sei como acrescentar, é para que no caso de dois S.L.'s seguidos (duas ordens fechadas com S.L. seguidas) a terceira ordem não abra com muito mais 2 (2*2*2), mas apenas uma vez (2*2) como a segunda ordem.
Você tem DOIS tipos de pedido - pedido número 1 - um pedido com um lote normal, e pedido número 2 - um pedido com um lote maior. Os lotes são incrementados apenas pelo tipo SL #1.
Salvar o tipo de pedido em um "comentário", por exemplo. Ou, melhor ainda, memorize você mesmo. É um bom hábito memorizar tudo sobre seus pedidos.
você tem DOIS tipos de pedido - pedido número 1 - um pedido com um lote normal, e pedido número 2 - um pedido com um lote aumentado. Os lotes são incrementados apenas pelo tipo SL #1.
Salvar o tipo de pedido em um "comentário", por exemplo. Ou, melhor ainda, memorize você mesmo. É um bom hábito lembrar de tudo sobre suas encomendas.
Não precisamos memorizar nada (especialmente porque a memorização requer mais reconstrução). É suficiente para ele saber como a posição anterior foi fechada. Isso é tudo. Não há necessidade de conhecer nem dois, nem três, nem cem seguidos, nem cem não fechados por uma tampa, mas apenas a última posição. Se fosse fechado por Stop Loss, então o próximo deveria ser fechado com lote duplo. Mas o lote não deve ser dobrado a partir do lote da posição anterior, mas a partir do conjunto no lote normal do programa. Então, se a posição for fechada não no Stop Loss, então a próxima posição deverá ser aberta com o mesmo lote. Se a posição for fechada por Stop Loss, então duplique o lote para a próxima posição. Isso é tudo. Você não precisa saber mais nada.
Ele não precisa memorizar nada (especialmente porque a memorização requer recuperação posterior). Só precisa saber como a posição passada se fechou. Isso é tudo. Ele não precisa conhecer dois, ou três, ou cem seguidos, ou não fechados em uma parada, mas apenas a posição passada. Se fosse fechado por Stop Loss, então o próximo deveria ser fechado com lote duplo. Mas o lote não deve ser dobrado a partir do lote da posição anterior, mas a partir do conjunto no lote normal do programa. Então, se a posição for fechada não no Stop Loss, então a próxima posição deverá ser aberta com o mesmo lote. Se a posição for fechada por Stop Loss, então duplique o lote para a próxima posição. Isso é tudo. Você não precisa saber mais nada.
Não diga às pessoas o que devem fazer.
Você tem que lembrar seus dados e trabalhar com eles
Tudo o que ele precisa saber é como a posição passada se fechou. Isso é tudo. Você não precisa conhecer dois, três, cem em fila ou não em fila fechados em stopploss, apenas a posição passada. Se a posição foi fechada no stoploss, então a próxima deve ser com o lote duplo. Se a posição foi fechada no stoploss, então abra a próxima com o lote duplo.
Isto é o que eu preciso, essa é na verdade a questão - como escrevê-la no código?
Olá!
Alguém pode por favor me dizer como forçar o compilador a compilar para o MT4 e não para o MT5?
Se o arquivo tiver a extensão *.mq4, estou bem, se tiver a extensão *.mqh, então o compilador o aceita como *.mq5 e ocorrem erros.
Olá!
Alguém pode por favor me dizer como forçar o compilador a compilar para o MT4 e não para o MT5?
Se o arquivo tem a extensão *.mq4, estou bem, se tem a extensão *.mqh, então o compilador o aceita como *.mq5 e ocorrem erros.