Problemas de fechamento, por favor, ajude - página 3

 

Olá a todos
Com a ajuda de todos, o sintoma mudou.
A declaração ....if(OrderSelect(index, SELECT_BY_TICKET) foi feita para...SELECT_BY_POS. O código está longe de estar correto. O programa vende e depois fecha imediatamente após um pip. O resultado mostra que não há SL ou TP. Portanto, para uma verificação de sanidade, eu inseri no OrderSend o SL e TP (500) uma peça. Nenhuma alteração. Todas as execuções estão dentro de 1 ou 2 pips. Isto está ficando interessante. Ainda não sei bem por quê! Mais de mil execuções ocorrem em uma barra de 4 horas.
Eu estarei pesquisando, mas qualquer ajuda será bem-vinda.

 

Olá, Ais
Acabei de postar para descobrir que você postou antes de mim. O que você tem em mente?

 

Olá novamente
Estou tentando reformular ligeiramente o programa para uma melhor compreensão lógica
Gostaria que o programa agradasse a Você

 
Ais wrote >>

Olá novamente
Estou tentando reformular ligeiramente o programa para uma melhor compreensão lógica
Gostaria que o programa agradasse a Você

Olá, Ais
Você é tão gentil. Obrigado. Seu tempo é precioso. O estilo que estou certo que vai agradar.
Desbloqueei uma parte do problema, desde meu último posto. O programa vai fechar, não vai voltar como eu gosto.
A chave do problema de fechamento tem sido o fato de que não consegui inicializar adequadamente o ATR.
Mostrarei o antes e o depois para fechar a posição de Venda.

Então....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Now.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)...Isto fechará a posição de Venda

Não era assim que eu pretendia que o programa funcionasse. Mas, para fins de teste, eu inseri o novo código.
Isso ajuda a provar que o problema está dentro da ATR. Deve ser que eu não inicializei corretamente o ATR.
Para testar mais, tentei inserir o iATR ao invés de tentar construir uma nova variável chamada ATR.
Eu mostro como tentei codificá-la.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Isto também não funcionou.
Mais uma vez, obrigado.
Aguardo com expectativa a sua resposta.
 

Olá, Ais
Obrigado pela sugestão. A idéia de usar 365 (anual) versus my_method, é bem aceita. Propósitos de teste com prazos mais curtos
deve ser apenas por conveniência.
Eu tenho muito mais a aprender. Finalmente descobri como inserir o ATR, mas não posso multiplicá-lo. Segue um exemplo:

Neste momento isto é o que tenho......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))) // =Parada dura
Isto funciona, mas não é o que eu quero
Estou trabalhando para ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ),
Isto não funciona. Espero que isso se manifeste a você e aos outros, como o que tenho em mente. O iATR é multiplicado por 2.
Alguma sugestão para isto???? Uma vez resolvida esta questão, eu poderia também dividir pela metade a ATR para as posições de entrada.

Houve outra maneira que tentei mas não funcionou... if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Mais uma vez, obrigado pelo seu tempo. Tenho certeza de que há muitos que estão batendo à sua porta por sabedoria.
Saúde
 


Olá Huckleberry,
Saí para fazer apenas a função de abertura.
E neste momento estou tentando entender a lógica da fixação do lucro.
Paradas e tomadas estão faltando em seu OrderSend(), está tudo bem, mas o comando de fechamento só funciona em caso de perda. https://www.mql5.com/en/forum/124521/page2 E eu gostaria de saber sua opinião sobre a compreensibilidade do novo estilo de programa,
.
Tchau por enquanto,
:)

 

Olá Ais
Obrigado por sua resposta.
Deixe-me explicar a razão por trás de nenhum StopLoss ou TakeProfit.
Ao não inserir o SL e TP no OrderSend, o SL está dentro de um local diferente, sob a expressão

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)))

Embora isto funcione, não é exatamente o SL adequado. O exemplo está listado I meu último post....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)

A mudança no... iATR, na expressão acima, pode mudar de uma barra para a outra. Ao usar o OrderSend com SL e TP, não posso tirar proveito da mudança de turno.

Cada função funciona neste momento, apenas que eu preciso aprender como ajustar as funções.
Obrigado por sua observação e por sua pergunta.
Abraço

 

É bom trabalhar sem SL e TP.

Mas ainda precisamos da condição de fechar a ordem em caso de lucro.
Por favor, dê uma olhada na função renovada "iSignalClose",

. Agora é, naturalmente, condição de SL virtual. https://www.mql5.com/en/forum/124521/page2 Mas ainda precisamos da condição de TP virtual.
Aguardando sua resposta.
:)

 

Eu inseri para TP virtual o similar com condição SL, mas usando outro fator.
No futuro será fácil e convincente otimizar estes parâmetros.

Para otimizar declarar parâmetros desejáveis como "externos".
Exemplo:


////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

Após a otimização, alterar os valores originais dos parâmetros para os otimizados e apagar as declarações "externas".

Amostra de otimização para "A System: Edição Final do Campeonato 2008" também conhecida como "ACB6", https://www.mql5.com/en/forum/112633/page7#276861:
Arquivos anexados:
1e.txt  46 kb
1r.txt  49 kb