Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
CSetupLedger: a per-setup win rate ledger for Expert Advisors - biblioteca para MetaTrader 5
- Visualizações:
- 10
- Avaliação:
- Publicado:
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Por que escrevi isso
Meu scalper opera com duas configurações: um bloco de ordens de alta e seu espelho de baixa. O Testador de Estratégias me deu um único fator de lucro para ambas. Passei duas semanas ajustando os parâmetros que se aplicavam igualmente a cada uma das configurações.
Em seguida, separei as negociações por tipo de configuração. No USDCAD M1, o lado de alta havia causado 88% das perdas. O lado de baixa ficou praticamente em equilíbrio. O número de que eu precisava estava em meu próprio histórico de negociações o tempo todo. Eu simplesmente não tinha como interpretá-lo.
Esta aula sabe interpretá-lo.
O que ela oferece a você
Você registra seus tipos de configuração uma vez, na inicialização. Cada um recebe um ID. Esse ID é adicionado à sua base de números mágicos, de modo que cada pedido carrega sua própria tag de configuração a partir do momento em que é enviado.
Depois disso, o livro-razão responde a três perguntas para cada configuração: quantos ganhos e perdas; qual foi o resultado líquido após o swap e a comissão; e se a taxa de acerto já conquistou alguma confiança.
Essa última pergunta é o motivo pelo qual criei isso. Três ganhos em três negociações representam uma taxa de acerto de 100%. É também o que uma moeda que cai em cara 44% das vezes consegue, aproximadamente, uma vez a cada doze tentativas. Assim, a classe exibe um limite inferior da pontuação de Wilson ao lado da taxa bruta e a compara com a taxa de acerto de equilíbrio exigida pela sua relação de recompensa. Na relação de 1:2, esse limite fica em 33,3%. Uma estratégia só é considerada confiável quando até mesmo sua taxa pessimista ultrapassa esse limite. No início, tudo aparece como “ainda não confiável”. Essa é a resposta honesta quando você tem vinte negociações.
Como usar
#include <CSetupLedger.mqh> CSetupLedger ledger; int SETUP_BULL, SETUP_BEAR; int OnInit() { ledger.Init(552001); // sua base mágica SETUP_BULL = ledger.Register("Bullish OB"); // id 0 -> número mágico 552001 SETUP_BEAR = ledger.Register("Bearish OB"); // id 1 -> magic 552002 ledger.RebuildFromHistory(); // ler o registro da conta Print(ledger.Report(2.0)); // 2,0 = relação recompensa/risco return INIT_SUCCEEDED; }
Aplique a configuração à operação antes que a ordem seja enviada.
trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));Encerre a posição assim que ela for fechada.
double net = 0.0; if(ledger.ProcessClosedPosition(posId, setupId, net)) Print(ledger.Report(2.0));
A função Report() retorna um bloco de texto. Ela funciona como uma Print () e como uma Comment (). Aqui está uma execução real minha no USDCAD M1.
Per-setup ledger (breakeven win rate at 1:2.0 = 33.3%) --------------------------------------------------------------------- Bullish OB 235/529 raw 30.8% wilson 27.6% net -5819.94 not yet trusted Bearish OB 191/393 raw 32.7% wilson 29.0% net -811.42 not yet trusted

O mesmo relatório passado para Comment () fica exibido no canto do gráfico enquanto o EA está em execução. A caixa na barra é o rótulo de entrada. Ela registra qual era o histórico daquela configuração antes da operação ser realizada. Aqui, o painel mostra 4 vitórias e 6 derrotas. Taxa bruta de 40%. Limite inferior de Wilson de 16,8%. Portanto, em dez operações, o veredicto ainda é “ainda não confiável”, o que é exatamente o objetivo da coluna.
As contagens são vitórias sobre derrotas. Portanto, são 764 negociações na configuração de alta e 584 na de baixa. Ambos os saldos líquidos somam-se à própria perda líquida do testador, até o último centavo. Faça essa reconciliação em sua própria saída antes de confiar em qualquer registro, incluindo este. Se as negociações por configuração não somarem a contagem de negociações do testador, então as posições estão sendo contabilizadas incorretamente e qualquer porcentagem acima dessa linha não tem valor.
Três armadilhas que ele resolve para você
Versões feitas à mão costumam errar nesses pontos. Eu mesmo errei em duas delas antes de esta aula existir.
Operações não são negociações. O histórico do MT5 é uma lista de operações. Uma posição fechada em três partes gera três operações OUT. Faça um loop pelas operações e conte cada uma que deu lucro como uma vitória; assim, uma única negociação vencedora se transforma em três vitórias. O livro-razão agrega por DEAL_POSITION_ID , portanto, um fechamento parcial ainda conta uma vez.
DEAL_PROFIT não é o resultado. Swap e comissão ficam em campos separados. Em um EA de swing, essa diferença é meramente cosmética. Em um scalper, ela determina se a operação gerou lucro ou não. Uma operação que obteve um ganho de 3 USD com a variação de preço e pagou 4 USD em comissão é um prejuízo. O livro-razão soma o lucro mais o swap mais a comissão.
POSITION_TICKET não é POSITION_IDENTIFIER . A função HistorySelectByPosition () requer o identificador. Na maioria das vezes, os dois têm o mesmo valor em uma conta de compensação, de modo que o bug permanece invisível até que uma conta de hedge ou um fechamento parcial os separe. Nesse caso, a seleção retorna vazia e não fornece nenhuma informação.
A única regra que você não deve quebrar
A ordem de registro é um formato de dados. O ID da configuração não existe em nenhum outro lugar, exceto nos números mágicos das negociações já encerradas. Insira uma nova configuração no meio da lista no mês que vem e todas as negociações históricas da configuração que costumavam ter esse ID silenciosamente se tornam negociações da nova configuração. Nada gera um erro. Os números simplesmente ficam errados a partir daquele momento.
Novas configurações vão para o final da lista. Se você desativar uma configuração, deixe a chamada de `Register ()` onde está, para que o ID continue ocupado. Um breve comentário acima do bloco de registro explicando isso vale a pena.
O que isso não fará
Ele mantém um registro por posição. Um EA que acumula uma segunda entrada na mesma posição líquida atribuirá o valor total à primeira configuração. Se o seu fizer isso, ele precisa, em vez disso, de um modelo por negociação.
O limite máximo é de dezesseis configurações. Aumente o valor de SETUP_LEDGER_MAX se precisar de mais. Dezesseis configurações em uma conta também significam dezesseis amostras pequenas, e a coluna Wilson indicará isso.
Um resultado líquido exatamente igual a zero é considerado uma perda. Operações sem ganho nem perda são raras, e tratá-las como ganhos é o erro mais lisonjeiro.
A função ProcessClosedPosition() substitui a seleção global do histórico, pois chama a função HistorySelectByPosition (). Não a chame no meio do seu próprio loop de histórico sem refazer a seleção posteriormente.
E ela avalia suas saídas, e não sua ideia. Uma configuração que identifique corretamente a direção, mas coloque mal seu stop, é classificada como uma configuração ruim. Para decidir o que negociar amanhã, essa é, sem dúvida, a resposta certa. Não é o mesmo que julgar se a ideia era válida.
Requisitos
MetaTrader 5. Sem dependências além da biblioteca padrão. Salve o arquivo em MQL5/Include/ e inclua-o. Escrito e testado na versão 6190.
Mais uma coisa. Um livro-razão criado com base em um único backtest dentro da amostra avalia esse backtest. Ele não valida uma estratégia. Testes fora da amostra em um período que você nunca ajustou são uma tarefa à parte, e esta classe não os substitui.
— Ali Rajput
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/77531
Session Candle Counter: candles numbered from the cash open, DST aware
Numera cada vela do dia de negociação atual, a partir da abertura do mercado à vista em Frankfurt, Londres, Nova York ou Tóquio. O ponto de referência é convertido da hora local da bolsa para a hora do servidor da corretora, com ajuste automático para o horário de verão, de modo que a primeira vela após a abertura é sempre a número um, tanto no verão quanto no inverno.
RiskGuard Lite - Percent-Risk EMA/ATR EA
EA educacional para MT5: entradas com cruzamento de EMA em barras fechadas, stop loss e take profit baseados no ATR, tamanho do lote calculado a partir de uma porcentagem fixa do patrimônio líquido por meio do OrderCalcProfit, filtro de spread, isolamento de números mágicos e verificações de códigos de retorno do servidor. Um modelo simples para a criação de EAs com controle de risco. Sem garantia de lucro.
Accumulation/Distribution
O Indicador Accumulation/Distribution (Acumulação/Distribuição ou A/D) é determinado pelas mudanças de preço e volume.
Accelerator Oscillator (AC)
O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.