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
obrigado pelo conselho, aqui está uma versão muito simples do meu código, este não é meu código real, mas espero que isto seja mais claro.
como eu disse que este não é o código real, encontrar padrão etc. é apenas um exemplo. a razão pela qual abri este tópico é afunção DetectExistingPattern()
Já lhe dei um exemplo de código sobre como executar o código na primeira execução do OnTick(), então agora atualize seu post de código de acordo para que seu DetectExistingPattern() seja executado na primeira chamada do OnTick() e não no OnInit().
Além disso, você não pode usar "Barras" para detectar uma Nova Barra. Isso é incorreto. Você deve usar ou "Time[0]" ou "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Aqui está um exemplo:
Já lhe dei um exemplo de código sobre como executar o código na primeira execução do OnTick(), então agora atualize seu post de código de acordo para que seu DetectExistingPattern() seja executado na primeira chamada do OnTick() e não no OnInit().
Além disso, você não pode usar "Barras" para detectar uma Nova Barra. Isso é incorreto. Você deve usar ou "Time[0]" ou "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Aqui está um exemplo:
obrigado @FMIC, acrescentei o código simples porque @jjc o pediu. A propósito, eu aprendi usando Bars da parte de como eu me lembro, todos estavam escrevendo dessa maneira, então eu escrevi. Por que isso está errado? Pode funcionar de forma inadequada?
ps: Eu uso metatrader 4, então é mql4 certo ?
obrigado @FMIC, acrescentei o código simples porque @jjc o pediu. A propósito, eu aprendi usando Bars com o Bars, como me lembro, todos estavam escrevendo dessa maneira, então eu o fiz. Por que isso está errado? Pode funcionar de forma inadequada?
ps: Eu uso metatrader 4, então é mql4 certo ?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
como eu disse que este não é o código real, encontrar padrão etc. é apenas um exemplo. a razão pela qual abri esta linha é afunção DetectExistingPattern()
Voltando à sua pergunta original... Neste exemplo, uma opção seria mudar sua função CheckTrendPattern() para que se possa dizer a ela para começar em uma barra específica. Em vez de usar a faixa fixa de barras de 1 a 10, você usa um offset de 1 a 10 a partir de um ponto de partida específico.
Quando não há nenhuma ordem existente, e você deseja verificar se o padrão é atualmente atendido, você então usa CheckTrendPattern(0) em vez de CheckTrendPattern().
Ao iniciar, se você tiver uma ordem existente, então você pode procurar o padrão que acionou o padrão da seguinte forma. Esta é a mesma sugestão que eu fiz no início: você obtém o índice de barras que é equivalente ao tempo aberto da ordem existente, e começa a olhar para trás a partir daí.
Entretanto, como diz a FMIC, é preferível fazer esta verificação na primeira chamada para OnTick() em vez de OnInit(). Minhas próprias razões para sugerir isto não têm nada a ver com "atrasar a inicialização". Em vez disso, eu ficaria preocupado que, quando o MT4 está reiniciando com a EA já anexada a um gráfico, você ainda não tem 100% de confiança uma lista de pedidos do corretor ou um histórico atualizado da barra.
Outra consideração que você pode querer ter em mente é o seguinte cenário, tudo acontecendo durante o tempo coberto por uma única barra:
Você pode querer verificar as ordens fechadas, bem como as ordens abertas, para evitar isto.
Voltando à sua pergunta original... Neste exemplo, uma opção seria mudar sua função CheckTrendPattern() para que se possa dizer a ela para começar em uma barra específica. Em vez de usar a faixa fixa de barras de 1 a 10, você usa um offset de 1 a 10 a partir de um ponto inicial especificado.
Quando não há nenhuma ordem existente, e você deseja verificar se o padrão é atualmente atendido, você então usa CheckTrendPattern(0) em vez de CheckTrendPattern().
Ao iniciar, se você tiver uma ordem existente, então você pode procurar o padrão que acionou o padrão da seguinte forma. Esta é a mesma sugestão que fiz no início: você obtém o índice de barras que é equivalente ao tempo aberto da ordem existente, e começa a olhar para trás a partir daí. No entanto, como diz a FMIC, é preferível fazer esta verificação na primeira chamada para OnTick() em vez de OnInit(). Minhas próprias razões para sugerir isto não têm nada a ver com "atrasar a inicialização". Em vez disso, eu ficaria preocupado que, quando o MT4 está reiniciando com a EA já anexada a um gráfico, você ainda não tem 100% de confiança uma lista de pedidos do corretor ou um histórico atualizado da barra.
Outra consideração que você pode querer ter em mente é o seguinte cenário, tudo acontecendo durante o tempo coberto por uma única barra:
Agora está mais claro porque eu deveria fazê-lo no OnInit, a confiabilidade é o ponto mais importante, é claro, e eu não pensei no aviso de sua consideração. esta parte é realmente importante, eu poderia abrir pedidos redundantes, talvez raros, mas possíveis. Tenho que lidar com isto de alguma forma. realmente muito obrigado.
@WHRoeder seu novo controle de verificação de barras é tão simples e bonito. Eu adicionei seu método ao meu código, obrigado.
Olá a todos,
como @FMIC aconselhou, escrevo e indicador que encontra meu padrão, dou um sinal e mais alguns dados que serão usados para meus pedidos (posso abrir mais de um pedido a preços diferentes). Agora eu quero usá-lo em meu EA, mas tenho uma pergunta, preciso da sua experiência na verdade. Quando recebo um sinal do meu indicador, abrirei um pedido ou colocarei um pedido (limite de venda ou limite de compra etc.) se meu mt4 falhar por qualquer motivo quando eu o reabrir, como posso descobrir que o pedido aberto pertence a qual sinal no meu indicador. está bem usar o deslocamento de barra para isso ? como conversamos antes, posso encontrar o tempo de criação do pedido, depois encontrar esse deslocamento de barra e devo tentar obter o valor do indicador usando esse deslocamento? Como posso combinar esta ordem e o indicador de mudança?
obrigado.
Sim, você pode usar iBarShift(), assim como jjc lhe explicou em um post anterior para então fazer referência aos dados de seu indicador através da função iCustom().