Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXIII): classe básica de negociação, controle de parâmetros válidos"
Bem, obrigado. Para a MQL4, isso é realmente um achado. Obrigado por seu trabalho árduo e pelo tempo gasto em benefício da comunidade.
Vamos começar a escrever a documentação.
Bem, obrigado. Para a MQL4, isso é realmente um achado. Obrigado por seu trabalho árduo e pelo tempo dedicado ao benefício da comunidade.
Vamos começar a escrever a documentação.
Estou curioso: alguém usa essas bibliotecas? Elas são realmente enormes folhas de código e levará mais tempo para entendê-las do que para estudar a própria MQL. É bem possível que a biblioteca seja útil. Mas, em minha opinião, há menos operadores no mql5 do que métodos e classes nessa enorme biblioteca.
Na minha opinião, a OOP deve reduzir o código e torná-lo mais legível. Mas, ao usar todas essas bibliotecas, não notei nenhuma conveniência. Se você usar a biblioteca padrão, para abrir uma posição, será usada uma instrução simples: Objeto obrigatório do tipo:
Ctrade tr;
tr.OpenBuy();
é isso!
Mas, com essa biblioteca, apenas o OnInit está repleto de muitas coisas. Muitas variáveis globais são usadas. É problemático encontrar algo, para dizer o mínimo.
Estou curioso: alguém usa essas bibliotecas? Elas são realmente enormes folhas de código e levaria mais tempo para entendê-las do que para estudar a própria MQL. É bem possível que a biblioteca seja útil. Mas, em minha opinião, há menos operadores no mql5 do que métodos e classes nessa enorme biblioteca.
Na minha opinião, a OOP deve reduzir o código e torná-lo mais legível. Mas, ao usar todas essas bibliotecas, não notei nenhuma conveniência. Se você pegar a biblioteca padrão, para abrir uma posição, é usada uma condição simples: Obligated object type:
Ctrade tr;
tr.OpenBuy();
é isso!
E com essa biblioteca, apenas o OnInit é preenchido com muitas coisas. Muitas variáveis globais também são usadas. É, para dizer o mínimo, problemático encontrar algo.
Sim, elas existem.
Você não precisa analisar o código da biblioteca. Os artigos descrevem o processo de criação e servem como um tutorial detalhado para os interessados.
Cada artigo é acompanhado por um orientador de teste, que mostra como usar essa ou aquela funcionalidade da biblioteca. Se a funcionalidade não for necessária, ela não precisará ser inicializada.
A biblioteca não está concluída, está apenas sendo desenvolvida. Haverá funções simples e convenientes para acessar dados e abrir uma posição. A propósito, você descreveu a abertura de uma posição com valores padrão. E você pulou (de propósito?) a inicialização do objeto de negociação.
Se não houver um método simples Buy(), Sell() na biblioteca no momento, isso não significa que não haverá nenhum no futuro. Haverá, e não apenas eles.
E agora, por favor, mostre-me, por exemplo, como você pode identificar facilmente uma posição fechada em MQL4, a anterior, com magik 123 e não o símbolo atual - se ela foi aberta quando uma ordem pendente foi acionada. E que tipo de ordem.
se foi aberta quando a ordem pendente foi acionada. E que tipo de ordem.
A MQL4 não armazena o histórico de ordens pendentes acionadas, você só pode determinar no histórico de ordens:
- se a ordem fechada era do tipo OP_BUY ou OP_SELL, isso significa que uma ordem a mercado foi fechada.
- se a ordem fechada era do tipo OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ou OP_SELLSTOP, significa que a ordem pendente foi cancelada.
A hora do fechamento da ordem corresponde à hora do fechamento da ordem de mercado ou à hora do cancelamento da ordem pendente.
O horário de abertura da ordem pendente corresponde ao horário de colocação da ordem pendente, mas esse horário será substituído no momento do acionamento da ordem pendente pelo horário de abertura da ordem de mercado.
O número do tíquete e da mágica da ordem não muda durante todo o tempo (exceto no caso de fechamento contra ou parcial da ordem - há uma situação diferente, mas a mágica não muda).
Ou seja, o fato de a ordem pendente ser acionada não está presente no histórico de ordens MQL4, há apenas o fato do cancelamento da ordem pendente. Eu nem me lembro o quanto essa informação é necessária, talvez eu não conheça todas as tarefas envolvidas.
Quanto disso são informações necessárias - não consigo me lembrar, talvez as tarefas não sejam tudo o que eu sei
Estimativa do valor da derrapagem. No MT5, há o OrderOpenPriceRequest e o OrderClosePriceRequest para essa finalidade.
A MQL4 não armazena o histórico de ordens pendentes acionadas, você só pode definir no histórico de ordens:
- se a ordem fechada era do tipo OP_BUY ou OP_SELL - significa que uma ordem a mercado foi fechada
- se a ordem fechada era do tipo OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ou OP_SELLSTOP - significa que a ordem pendente foi cancelada.
A hora do fechamento da ordem corresponde à hora do fechamento da ordem a mercado ou à hora do cancelamento da ordem pendente.
O horário de abertura da ordem pendente corresponde ao horário de colocação da ordem pendente, mas esse horário será substituído no momento do acionamento da ordem pendente pelo horário de abertura da ordem de mercado.
O número do tíquete e da mágica da ordem não muda durante todo o tempo (exceto no caso de fechamento contra ou parcial da ordem - há uma situação diferente, mas a mágica não muda).
Ou seja, o fato de a ordem pendente ser acionada não está presente no histórico de ordens MQL4, há apenas o fato do cancelamento da ordem pendente. Eu nem me lembro o quanto essa informação é necessária, talvez eu não conheça todas as tarefas envolvidas.
Por isso, pedi a uma pessoa que não entende os recursos da biblioteca que escrevesse como ela a reconhece de forma "fácil e simples".
E a biblioteca consegue. E o usuário nem precisa pensar sobre isso - basta perguntar.
Fica imediatamente claro para ele: "Eu não li, mas o condeno".
Estimativa do valor da derrapagem. O MT5 tem o OrderOpenPriceRequest e o OrderClosePriceRequest para essa finalidade.
Ainda não o avaliei, porque estou preso na criação da perfeição... reescrevendo, reescrevendo - reescrevendo ((((
mas, na minha opinião, essas coisas (avaliação do trabalho do corretor) devem ser feitas em paralelo com o trabalho do Expert Advisor principal e registradas; esses dados não fazem sentido para o testador?
-------------------
Então, pedi a uma pessoa que não entende os recursos da biblioteca que escrevesse como ela a reconhece "fácil e simplesmente".
E a biblioteca consegue. E o usuário não precisa nem pensar nisso - basta perguntar.
Fica imediatamente claro para ele: "Eu não li, mas condeno".
Nos materiais do artigo, eu folheio seletivamente, a quantidade de informações é muito grande, então é mais fácil perguntar:
É possível salvar o estado do TS nos exemplos de teste? - Não estou interessado em "pegar" ordens em minha própria magia, estou interessado na realização de salvar o estado do Expert Advisor em caso de recarga do terminal.
esses dados não fazem sentido em um testador?
Faz muito sentido em um testador. Você pode ser muito enganado se não estimar a derrapagem.
Por exemplo, notei essa situação imediatamente
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
MetaTrader 5 Strategy Tester: erros, bugs, sugestões para melhorar seu trabalho
fxsaber, 2019.10.13 16:58
Nos símbolos personalizados de ações, as retiradas são aceitas pelo último preço e executadas pelo lance/pedido.
Por exemplo, a compra de uma posição de COMPRA está em 1,09801. O lance/pedido/último tick = 1,09799/1,09802/1,09801. Ela é acionada porque o último preço foi tocado, mas é acionada no preço de compra, que é pior do que o último.
Acontece que as tomadas são acionadas o tempo todo com slippage negativo.
...
Nos materiais do artigo, eu folheio seletivamente, o volume de informações, bem, é grande, então é mais fácil perguntar:
Os exemplos de teste oferecem a possibilidade de salvar o estado do TC? - Não estou interessado em "pegar" ordens em minha própria mágica, estou interessado na realização de salvar o estado do Expert Advisor em caso de recarga do terminal.
Os exemplos de teste servem apenas para verificar o que está descrito nesse artigo específico. Como um teste de operacionalidade.
Os exemplos de uso da funcionalidade, juntamente com sua descrição, estarão em artigos separados após a conclusão da funcionalidade da biblioteca principal e a criação de funções de usuário para acesso rápido a todos os recursos da biblioteca.
----------------------
O que significa "estado de especialista"?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXIII): classe básica de negociação, controle de parâmetros válidos foi publicado:
Neste artigo, continuaremos a acompanhar o desenvolvimento da classe de negociação, criaremos um controle que encontre valores incorretos nos parâmetros da ordem de negociação e sonorizaremos eventos de negociação.
Compilamos e executamos o EA no testador, tendo previamente definido nos parâmetros o valor Lots como 10,
enquanto os valores StopLoss in points e TakeProfit in points, como 1 ponto:
Assim, tentaremos abrir uma posição com um tamanho de lote inválido (parecendo que não há dinheiro suficiente) e violar os requisitos de distância mínima para definir stops, distância essa regulada pelo parâmetro StopLevel do símbolo:
Nosso EA exibiu no log dois erros: "não há fundos suficientes para concluir a operação de negociação" e "o valor StopLoss não cumpre os requisitos segundo o parâmetro StopLevel do símbolo". Mas também definimos o TakeProfit como um ponto. Por que ele não imprimiu uma mensagem sobre esse erro? Porque não há erro, pois os níveis de TakeProfit e StopLoss dentro do nível mínimo SYMBOL_TRADE_STOPS_LEVEL estão definidos segundo a regra.
Os níveis TakeProfit e StopLoss devem ser comparados com o preço atual com base no qual pode ser executada uma operação de direção oposta.
Autor: Artyom Trishkin