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

 
Artyom Trishkin #:

Em seu código, se uma posição estiver aberta, outra posição não se abrirá no sinal oposto. Isto é, antes de tudo, quando o sinal chega, é preciso verificar se existe uma posição oposta e fechá-la.

Mas, mais uma vez, tudo isso limita muito as possibilidades de melhorar as estratégias.

Devemos evitar a vinculação à presença/ausência de ordens (especialmente em quatro - ordens pendentes (o que é correto) e posições (o que é errado))).

Não, é correto e necessário ter em mãos o número de pedidos e posições de acordo com seus tipos. Mas é errado confiar na ausência de qualquer ordem apenas para os sinais.

Em geral, a maneira correta é ter funções para calcular ordens e posições (uma função que preenche a estrutura quando muda o número de ordens e posições), funções para abrir/fechar posições, funções para definir ordens e funções de alarme. Além disso, a capacidade de comparar dados de posição (abertos ou fechados) com alguns valores.

Qualquer estratégia pode ser construída a partir deste conjunto.

Artem, a estratégia existe uma ordem no mercado até o fechamento na TP ou SL.
 
MakarFX #:

Seu código

(Um bar aberto e sem ordens)

Verificado o sinal - sem sinal

... Aguarde o próximo bar.

Você repetiu o mesmo erro da última vez

P.S.

é

deve ser realizado após a abertura do pedido

Na verdade, meu código foi projetado para outra coisa. Para um robô que só negocia a preços de abertura. Simplesmente o tirei de mim e o acrescentei ao código de umcidadão usuáriocumpridor da lei e o mudei de acordo com os comentários. Todas as nuances não podem ser consideradas de uma só vez. Você só os vê durante os testes do robô.

Mas há uma coisa. Você também parece ter levado tudo em consideração. Um sinal foi recebido e a função bSignalSell oubSignalBuy enviou um comando para abrir uma ordem e retornou verdadeiro (o primeiro ponto). O segundo ponto é que ainda não foi aberta nenhuma ordem (o comando está esperando sua vez no terminal). Depois, quando a fila de comando aparece, ela é enviada para o servidor (ainda é hora). No servidor, ela é executada. Ou o servidor se recusa a executá-lo por uma de várias razões possíveis (consulte a documentação para obter detalhes). Ou não chega lá (interferência, conexão ruim e outros bugs de rede). E seu robô pensa que abriu um pedido e atualiza o horário de abertura do bar. Está tudo bem. Mas essa ordem não apareceu na lista de ordens em aberto. Assim, imagine que você tem 0 pedidos na lista e o robô "pensa": "Tudo bem, eu entrei no mercado". Como resultado, há um sinal durante todo um bar após uma entrada fracassada, mas o Consultor Especialista não "vê" e não faz nada. Tal situação é possível? É possível! Portanto, seu código não é muito bom. É melhor você pensar melhor. Ou deixar o cidadão cumpridor da lei pensar. Infelizmente, neste momento não posso. Estou trabalhando em um projeto muito interessante. E a criação de uma EA em pleno funcionamento com todos os seus mecanismos faz sentido apenas para um bom e lucrativo sistema comercial. O robô pode ser simplesmente executado no Strategy Tester e ver se é outra de minha versão ou a desenvolvida por você. Isso não faz nenhuma diferença.

 
законопослушный гражданин #:

Eu acabei de notar.

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

Índice 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

Considerando que você tem o MA com um índice de 0! Ou seja, ele anda por toda a barra e pode ir além de Aberto e Fechado. Portanto, é melhor indexar MA por 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

Então todos os sinais serão tomados excepcionalmente na barra formada e o robô será totalmente coerente com o sistema comercial com sinais sobre os preços abertos. Assim, o robô só terá que rastrear a abertura da barra (já acrescentei este código) e entrar na barra mais nova. Será mais confiável. E não haverá necessidade de se torcer, como Makar teve que fazer por causa do algoritmo de entrada originalmente errado.

 
Mihail Matkovskij #:

Eu acabei de notar.

Índice 1.

Considerando que você tem o MA com um índice de 0! Ou seja, ele anda por toda a barra e pode ir além de Aberto e Fechado. Portanto, é melhor indexar MA por 1.

Então todos os sinais serão tomados excepcionalmente na barra formada e o robô será totalmente coerente com o sistema comercial com sinais sobre os preços abertos.

Esta é a essência do sinal.

O MA atual entra no corpo da vela anterior e dependendo de qual vela (UP/DN) dá o mesmo sinal.

 
MakarFX #:

Esta é a essência do sinal.

O MA atual entra no corpo de uma vela anterior e, dependendo da vela (UP/DN), será o mesmo sinal.

Neste caso, o MA deve ser traçado com o índice 1 no menor intervalo de tempo. Então, não haverá necessidade de aplicar nenhuma mudança. Dentro do período de tempo aberto e fechado, haverá várias (ou muitas) barras na parte inferior. Você sabe por que os prazos foram inventados, não sabe? Caso contrário, então comece a estudar esta questão a partir da história dos castiçais japoneses. Em resumo, o objetivo é simplificar a análise técnica. E com o advento da era digital, também simplificou a discretização dos sistemas comerciais.

 
Mihail Matkovskij #:

Nesse caso, o MA deve ser tomado com índice 1 no período de tempo inferior. Então, não haverá necessidade de se torcer. Haverá várias (ou muitas) barras dentro de Aberto e Fechado do período de tempo mais alto no mais baixo. Você sabe por que os prazos foram inventados, não sabe? Caso contrário, então comece a estudar esta questão a partir da história dos castiçais japoneses. Em resumo, o objetivo é simplificar a análise técnica. E, com o advento da era digital, também simplifica a discretização dos sistemas comerciais.

Eu não entendo porque você está bravo comigo. O homem escreve sua estratégia da maneira como a vê, e este homem não sou eu.

Eu só respondi sua pergunta: "Como evitar múltiplas aberturas no mesmo bar?"

O que aprendo eu mesmo sei, e se não sei, pergunto. Neste momento, não perguntei nada a ninguém.

 
MakarFX #:

Não entendo porque você está descarregando em mim. O homem escreve sua estratégia como ele a vê e esse homem não sou eu.

Eu só respondi sua pergunta: "Como evitar múltiplas aberturas no mesmo bar?"

O que aprendo eu mesmo sei, e se não sei, pergunto. Agora eu não perguntei nada a ninguém.

Estranho. Estou tentando chegar ao fundo de uma questão e você está falando de algum tipo de esclarecimento de relacionamento. Estou me comunicando apenas sobre o assunto de programação. Se você estiver ofendido por algo, não se ofenda. Estou escrevendo software há 15 anos. Você diz que meu códigonão funcionacorretamente em sua opinião. Não estou me ofendendo. Estou tentando explicar como funcionam na realidade os sistemas comerciais automatizados. É uma conversa puramente técnica. E você está me falando de algum tipo de insulto... :)

 
Mihail Matkovskij #:

Isso é estranho. Estou tentando chegar ao fundo de um problema e você está falando de algum tipo de relacionamento. Estou me comunicando apenas sobre o assunto de programação. Se isso o ofende, não fique ofendido. Estou escrevendo software há 15 anos. Você diz que meu códigonão funcionacorretamente em sua opinião. Não estou me ofendendo. Estou tentando explicar como funcionam na realidade os sistemas comerciais automatizados. É uma conversa puramente técnica. E você está me falando de algum tipo de insulto... :)

Então eu também lhe expliquei o que seu código está errado (neste caso), e você diz que precisa refazer a EA)
 
Mihail Matkovskij #:

Há 15 anos estou escrevendo programas.

Tenho uma sugestão a fazer. Dê-me seu telegrama em particular.

 
MakarFX #:
Então eu também lhe expliquei o que seu código está errado (neste caso), e você diz que precisa refazer a EA)

Neste caso, ele precisa ser retrabalhado para que não se torça. Porque o código que acrescentei foi projetado para um robô com sinais de abertura de preço, como já disse antes. Eu pensei: Isto é estranho. E então eu encontrei a razão. Se você acertar desde o início, não terá nenhum problema no futuro. Assim, você deve sempre procurar a causa e não combater as conseqüências.