Download MetaTrader 5

Verificação de Estatística do Sistema de Gestão de Dinheiro Labouchere

4 novembro 2015, 16:02
Alexander Dubovik
0
828

Existem três tipos de mentiras: mentiras, malditas mentiras e estatísticas.

Introdução

Enquanto navegava nas profundezas da Internet durante os fins de semana, me deparei com um sistema de gestão de dinheiro que eu nunca tinha ouvido falar. Ele é chamado de Labouchere, ou sistema de Cancelamento (Sistema Aspirador de Pó no Forex Usando o Labouchere, em russo). A descrição em inglês do sistema pode ser encontrada Aqui. O sistema é uma variação do Martingale, já que você precisa aumentar sua aposta depois que você perde e minimizá-la depois que você ganha. Esta é uma versão menos agressiva, pois as apostas não são dobradas, mas são colocadas a uma certa quantidade de cada vez.

Abaixo estão algumas passagens que descrevem as propriedades do sistema que me intrigaram muito:

  • "Então, por favor, note que a quantidade de operações rentáveis deve exceder 33-40 por cento para que o sistema funcione adequadamente e ganhar!!!"  – Esta é uma declaração muito forte. No entanto não está claro por que a variação inicial é tão ampla - de 33% a 40%.

  • "Tenha em mente que este método pode ser considerado um esquema desonesto para uma casa de jogo".  –  Mesmo? Então pode ser que realmente funcione, certo?!

  • "Mas o princípio permanece o mesmo - 33% de vitórias compensando 66% das perdas. Então, se você deseja aplicar esta gestão de dinheiro na negociação Forex real, você precisa de um sistema de negociação com 50% chance de ganhar e o fator de lucro >=1".

Na verdade, o mencionado artigo informa que você precisa de um sistema de negociação onde as vitórias sejam iguais às perdas e a probabilidade de vitória seja de 50% ("mais de 33%"). Se você tem tal sistema, o método Labouchere pode facilmente torná-lo lucrativo! Portanto nós vamos olhar ao sistema com uma expectativa matemática positiva, mas será que existe uma maneira de caminhar em território positivo? Bem, creio que não é muito difícil desenvolver um sistema de negociação, digamos... com 47% de vitórias!

Vamos ver como o sistema Labouchere varia as apostas.

A aposta mínima é convencionalmente assumida como sendo igual a um. Se vencermos, o tamanho da aposta permanece a mesma, enquanto a nosso balanço aumenta ligeiramente.

Se perdermos, o nosso tamanho da aposta é aumentada de um para 2 e nós adicionamos o tamanho da aposta perdida na linha:

-1

Se vencermos, neste ponto devemos acrescentar 2 a nossa linha:

-1 2

Então nós cruzamos esses dois números, uma vez que conseguimos recuperar a nossa perda (em outras palavras, aumentamos o nosso balanço em duas apostas).

Agora, vamos considerar uma série mais longa de derrotas.

-1

Vamos apostar 2. Perda:

-1 -2

Vamos apostar 3. Perda:

-1 -2 -3

Vamos apostar 4. Perda:

-1 -2 -3 -4

Vamos apostar 5. Perda:

-1 -2 -3 -4 -5

Vamos apostar 6. Perda de novo:

-1 -2 -3 -4 -5 -6

Vamos apostar 7. Nós finalmente vencemos:

-1 -2 -3 -4 -5 -6 +7

Assim, cruzamos o lote "-1" e "-6" com "+7", uma vez que a nossa aposta vencedora compensa estas duas. A aposta seguinte é a soma do primeiro e do último valor da linha perdedora, ou seja é novamente 7. Se vencermos:

-2 -3 -4 -5 +7
Cruzamos o lote "-1" e "-6" com "+7". Nosso próximo tamanho de aposta é mais uma vez a soma do primeiro e do último valor da linha perdedora. Sim, é 7 novamente (algum outros métodos recomendam a adição de 1 a tal aposta, para que se tenha um lucro mínimo em vez de 0 no caso de uma boa sorte). Se vencermos:
-3 -4 +7

Nós cruzamos todos os números restantes da linha perdedora, uma vez que nós ganhamos as nossas perdas de volta.

Se perder uma vez nas fases intermédiarias, esta perda é introduzida na linha perdedora e a próxima aposta é igual à soma do primeiro número mais o último valor desta linha.

Então, quais são as conclusões iniciais?

  1. Uma série de 6 perdas é de fato compensado por uma série de apenas três vitórias, porém deve ser uma série; vamos falar sobre isso mais tarde. Olhando a primeira vista, o sistema realmente parece tornar mais fácil o mercado e sem perdas.

  2. O tamanho da aposta é aumentado muito mais lentamente que o Martingale. Se tivéssemos usado essa série com o sistema de Martingale original, nossa última aposta teria que ultrapassar a inicial em 64 vezes.

  3. O rebaixamento do depósito total (a soma das apostas perdedoras) no exemplo acima compreende apenas 21, ao mesmo tempo que teria sido 63 no Martingale original.

  4. Cálculos simples mostram que nós deveríamos sofrer 13 derrotas consecutivas para perder todo o nosso saldo, se a aposta inicial fosse 1% do depósito ou 44 derrotas consecutivas se fosse de 0,1%. Você deve estar pensando: "44 derrotas consecutivas com relação 50/50?! A probabilidade é muito pequena! É mais provável que eu seja atingido por um meteorito! Essa probabilidade se encaixa me muito bem! ", etc).

  5. Você pode facilmente encontrar numerosos estudos dedicados aos inconvenientes e perigos do sistema Martingale. Aliás,você pode experimentar estes inconvenientes no seu próprio país, fazendo cálculos simples, usando uma caneta e um papel. No entanto, eu não encontrei estudos semelhantes no sistema Labouchere.

  6. O sistema de apostas parece muito complicado, dificultando o cálculo dentro de uma expectativa matemática positiva.

Mas vamos voltar para a nossa série de derrotas nas apostas. Vamos considerar que as nossas 6 derrotas consecutivas foram seguidas por apenas 2 vitórias, em vez de três. Então a nossa linha perdedora ficará da seguinte forma:

-3 -4

Apostamos 7 e perdemos:

-3 -4 -7
Apostamos 10 (note que enquanto perdemos nessa simulação, o tamanho da aposta começa a crescer por 3 em vez de 1, inciando uma série muito menos segura para o nosso depósito)e perdemos mais uma vez:
-3 -4 -7 -10

Temos que apostar 13 agora.

Assim, o sistema faz aumentar as nossas participações em mais do que 1 em caso de perdas repetidas e esta parece ser a única maneira de superar totalmente o rebaixamento. Aqui é onde o nosso depósito pode cair em problemas reais, uma vez que precisamos de uma série de vitórias para superar o rebaixamento. Calculando a expectativa no papel ainda parece ser muito complicado ou pelo menos muito chato...

Você está interessado em saber o que este sistema pode fazer? Se sim! Então vamos mergulhar em mais detalhes.


Definir a Tarefa: Assunto e Métodos

A questão mais importante é se o sistema de gestão de dinheiro Labouchere é realmente capaz de trazer expectativa matemática positiva. A passagem citada onde cerca de 33% de vitórias supera as perdas soa um pouco irrealista, é claro. Mas 49% ou 50% de vitórias será suficiente? E se não, será que o sistema Labouchere tem alguma outra vantagem?

Nós vamos usar as estatísticas, isto significa que precisamos desenvolver um programa MQL (em MQL4, pois eu ainda não domino totalmente o MQL5). Vamos executar o nosso programa em milhões de operações e "exterminar" milhares de depósitos, vamos olhar e analisar os resultados sem qualquer dano ao nosso dinheiro. Se o programa for rentável, poderemos implementar o algoritmo na negociação real.

O sistema Labouchere foi desenvolvido com base no pressuposto de vitória = perda. Ele pode ser adaptado para outras proporções, mas não parece razoável. Se o sistema pode afetar a expectativa matemática com vitória = perda, então ele pode afetar outras proporções também. Se não puder, então simplesmente estamos desperdiçando nosso tempo pensando sobre uma adaptação adequada.

Além disso, é muito mais fácil imaginarmos um sistema com vitória = perda e um valor de equilíbrio igual a 50% das apostas vencedoras, pois já somos familiarizados com a moeda jogar. Portanto, vamos chamar o nosso programa de CoinTest.

Em primeiro lugar, devemos descrever as principais características do nosso futuro programa:

  1. Devemos ter a capacidade de mudar a probabilidade de ganhar. A proporção 50/50 é apenas um caso especial da condição do equilíbrio.

  2. Devemos definir um nível de risco. O sistema Labouchere possui um tamanho fixo de aposta. Se escalonarmos a nossa aposta inicial de acordo com nosso tamanho do depósito, a essência do sistema será perdida, pois o nosso depósito nunca mais voltará ao seu estado inicial após todos os valores serem cruzados. Nós podemos recalcular o tamanho da aposta após sair de um rebaixamento, no entanto isso vai levar a números fracionários que são difíceis de trabalhar. Então vamos utilizar duas variáveis para definir o risco - depósito inicial e aposta inicial.

  3. É necessário definir o número máximo de operações por depósito, deve ser grande o suficiente para que possamos saber se estamos indo perder o depósito, mesmo a um risco inicial muito baixo. Afinal, se o depósito continua a crescer, o processo pode ser infinito e nunca saberemos o resultado.

  4. Devemos analisar os resultados da série de operações num único depósito, tanto na depuração do programa como para mudar a nossa lógica de negócios. Teremos um arquivo como saída para verificarmos o nosso propósito estatítico.

  5. Após definirmos o código para um único passe, avançaremos na coleta das estatísticas sobre uma série de passes sobre depósitos separados (de preferência) com parâmetros variáveis, como você entender, um experimento significa quase nada aqui. Os resultados estatísticos serão enviadas ao arquivo e não será necessário examinar um histórico de depósitos individuais.

Nosso sistema de seleção do tamanho da aposta pode potencialmente ser usado na negociação real, então devemos fazer dele uma classe.

As aberturas em tempo real das operações no terminal MetaTrader serão inúteis nesta fase e extremamente dispendiosas em termos dos recursos de computação. Nós somente precisamos corrigir os resultados das operações aleatórias realizadas que utilizam um tamanho de lote requerido e uma determinada probabilidade de ganhar. Com isto em mente vamos desenvolver um script, pois este tipo de programas MQL é perfeito para uma única execução, em comparaçãocom Expert Advisors ou indicadores.


Verificação Estatística da Qualidade do Gerador de Números Pseudo-Aleatórios

A qualidade do Gerador de Números Pseudo-Aleatórios (PRNG - Pseudo-Random Number Generator Quality) é de extrema importância para nós, pois será usado para definir o resultado de cada negócio (vitórias/derrotas). A precisão da distribuição das séries de vitórias/derrotas é a mais crítica. Vamos tentar avaliar esta distribuiçao sem nos referirmos a complicada teoria estatística matemática.

Este artigo não se destina a um estudo sério da qualidade do PRNG (caso contrário, teríamos de realizar 15 testes diferentes). Estamos mais interessados nas propriedades do PRNG que podem afetar os resultados dos testes do sistema Labouchere e não requerem procedimentos de verificação demasiadamente complexos.

O terminal MetaTrader apresenta a função MathRand() que define as propriedades do PRNG padrão. A sequência do PRNG é inicializada pela função MathSrand().

Vamos escrever um pequeno script (RandFile) Para verificar a qualidade do PRNG padrão. O script terá 2 parâmetros:

  • Um número de milhões de palavras aleatórias de 32 bits deve ser gerado (uma palavra de 32 bits por 3 chamadas da função MathRand() fornecendo 15 bits significativos). A unidade de medida usual será milhões de decimal em vez de 2 elevado à potência 20, pois vamos examinar visualmente os resultados também.

  • Os parâmetros lógicos CalcSeries (a distribuição de bits semelhantes dos comprimentos de séries devem ser calculados).

O cálculo da distribuição de bits semelhantes dos comprimentos de séries utiliza intensivamente os recursos (aumentando o tempo de execução de script em dez vezes). Por isso são dispostos como uma opção separada.

O script produz os seguintes resultados:

  • o cálculo do Tempo (exibido no diário);
  • quantidade de 1 bit detectado entre todos os bits gerados (exibido no diário);
  • O arquivo RandFile.bin - arquivo binário com o resultado da operação do PRNG;
  • O arquivo RandStat.csv - arquivo log contendo as taxas de ocorrência de certos bytes;
  • O arquivo RandOnesSeries.csv - arquivo de log contendo "1" bit das séries de comprimentos;
  • O arquivo RandZerosSeries.csv - arquivo de log contendo "0" bit das séries de comprimentos;
Vamos gerar 3 conjuntos de teste de vários comprimentos:
  • 10 milhões de palavras de teste de 4 bytes cada uma (40 milhões de bytes no total);
  • 100 milhões de palavras de teste de 4 bytes cada uma (400 milhões de bytes no total);
  • 1 000 milhões de palavras de teste de 4 bytes cada uma (4 000 milhões de bits no total).

Agora, vamos verificar os seguintes parâmetros:

  1. Compressibilidade de arquivos contendo dados aleatórios pelo WinRAR com as configurações máximas de compressão. Dados aleatórios de alta qualidade não são comprimidos. Claro que a incompressibilidade dos arquivos não significa necessariamente a qualidade dos dados aleatórios contidos, mas se eles são compactados, isso significa que os dados têm regularidade estatística.

    Compressão do PRNG é de 10 milhões de palavras

    Cmpressão do PRNG é de 100 milhões de palavras

    Cmpressão do PRNG é de 1 000 milhões de palavras

  2. Quantidade de "1" Bit:
      Equilíbrio Atual Desvio absoluto
     Desvio, %
    10М
    160 000 000
    160 004 431
    4 431
    0,0027694
    100М
    1 600 000 000
    1 599 978 338
    21 662
    0,0013539
    1000М
    16 000 000 000
    15 999 996 180
    3 820
    0,0000239
  3. Taxa de ocorrência de certos bytes, valores em arquivos aleatórios:

    Taxa de ocorrência de certos bytes do PRNG, 10M de palavras

    Taxa de ocorrência de certos bytes do PRNG, 100M de palavras

    Taxa de ocorrência de certos bytes do PRNG, 1000M de palavras

  4. Os comprimentos das séries de bits idênticos, iremos gerar dois gráficos para cada tamanho de amostra:

    • a primeira amostra exibe quantidade real das séries de bits idênticos de um determinado comprimento, bem como o valor de equilíbrio da quantidade das séries (em escala logarítmica);
    • a segunda amostra exibe o desvio percentual da quantidade real das séries de bits idênticos detectados a partir do equilíbrio (em escala logarítmica).

    A escala linear do gráfico não é adequado para nós, pois os valores que temos são extremamente dispersos (os valores variam de 1 a 4 000 000 000 ou a partir de 0.00001-6 000 que estão presentes num único gráfico). Além disso, o gráfico mostra o valor de equilíbrio da quantidade das séries longas em escala logarítmica, mostrando como uma linha reta - quando o comprimento das séries é aumentado por 1, a probabilidade da sua ocorrência é reduzida para metade.

Comprimentos das séries de bits idênticos para 10M de palavras

Desvios dos comprimentos das séries a partir do equilíbrio para 10M de palavras

Comprimentos das séries de bits idênticos para 100M de palavras

Desvios dos comprimentos das séries a partir do equilíbrio para 100M de palavras

Desvios dos comprimentos das séries a partir do equilíbrio para 1 000M de palavras

Desvios dos comprimentos das séries a partir do equilíbrio para 1 000M de palavras

Então, quais são as conclusões?

  • A eficiência do PRNG padrão é aceitável para a nossa tarefa.

  • Armazenando os arquivos contendo os resultados da operação do PRNG não leva a sua compressão.

  • O valor de zero e um bit corresponde ao valor equidistante. O desvio do equilíbrio (em percentagem) diminui à medida que o tamanho da amostra aumenta.

  • A distribuição da taxa de ocorrência de certos bytes nos resultados operacionais do PRNG oscila dentro de um intervalo estreito em torno do equilíbrio. A dispersão da taxa de ocorrência é reduzida quando tamanho da amostra é aumentado.

  • A taxa de ocorrência de bits das séries de bits idênticos se afasta do equilíbrio apenas se as séries são bastante longas (que é bastante raro). Com o aumento do comprimento da amostra, a taxa de ocorrência real do "ponto de desvio" se afasta a partir do equilíbrio no sentido do aumento do comprimento das séries e está sempre localizada em torno do valor de 100 inclusões para toda a sequência.

Assim, não foram detectadas falhas estatísticas graves no padrão do PRNG que são susceptíveis de distorcer os resultados dos testes, mesmo com as sequências de cerca de 3 bilhões de gerações (3 gerações são usadas por uma palavra de 32 bits).


Escrevendo a Classe CLabouchere para Gerenciar o Tamanho da Posição

A classe CLabouchere acabou por ser suficientemente pequena. Sua interface é composta por apenas duas funções wrapper para a criação/recepção do tamanho inicial, duas funções realmente úteis - para definir um resultado de uma operação e receber o tamanho da posição em tempo real, bem como para redefinir ao estado inicial:

// Gestão do dinheiro Labouchere.
// Take/stop é assumido = 1/1.
class CLabouchere
{
        private:
        protected:
                // Lote Inicial. By default - 0.1.
                double p_dStartLot;

                // A seqüência em que os números são armazenados de acordo com Labouchere
                double p_dLotsString[];
        public:
                void CLabouchere();
                void ~CLabouchere();

                double GetStartLot() {return p_dStartLot;};
                void SetStartLot(double a_dStartLot) {p_dStartLot = a_dStartLot;};

                // Retorna um lote que está para ser usado durante a próxima entrada no mercado
                double GetCurrentLot();

                // Escreve o resultado da negociação em tempo real - take (true) ou stop (false)
                void SetResult(bool a_bResult);

                // Redefinir ao estado inicial, exceto o lote inicial
                void Init() {ArrayResize(p_dLotsString, 0);};
};


Escrevendo o Script. Avaliação Preliminar

Agora, é hora de escrever um script simples que tem uma centena de stings. Os parâmetros de entrada são os seguintes:

//--- Parâmetros de entrada
input int RepeatsCount=100000;
input int StartBalance = 10000;
input int Take = 50;
input double SuccessPercent = 50.0;
// Se verdadeiro, SuccessPercent é ignorado
input bool FiftyFifty = true;

O script faz uma série de operações até que o depósito é perdido ou o RepeatsCount é atingido.

A relação vitória/perda = 50/50 é feita num parâmetro separado. Neste último caso, um dos bits pseudo-aleatórios de um número são utilizados como uma moeda lançando resultados. Caso contrário, um valor do lucro/perda é calculado e um número aleatório é comparado a ele. O parâmetro separado para 50/50 foi implementada porque o ciclo do PRNG de um bit se encaixa muito bem, embora nós não avaliamos o ciclo de ocorrência dos valores superiores a um valor limite.

As configurações padrão:

  • tamanho do depósito – 10 000;
  • aposta inicial – 50 (0.5% do depósito inicial).

Aproximadamente no 10º lançamento do script, recebemos um resultado espetacular - um depósito de 46 300 no passo 2 335. No entanto, o rebaixamento já ocorre no passo 2 372:

Aumentando e perdendo o depósito

Esta é a forma como é visto no gráfico:

Gráfico de depósito

Como podemos ver, o saldo caiu para valores críticos duas vezes antes do depósito ser finalmente dizimado.

Em alguns casos, o depósito foi destruído durante as primeiras dezenas de operações e não houve sequer um único caso em que mostrou uma vida útil máxima de 100 000 negociações.

Enquanto eu estava tentando vários parâmetros, as seguintes modificações vieram à minha mente:

  • Seria razoável a adicionar um parâmetro que define a quantidade de fundos a ser sacado da conta de negociação. Se conseguirmos retirar os fundos que exceda o depósito inicial antes de ser extinto, então nosso depósito inicial torna-se simplesmente uma perda previsível. Assim, o novo parâmetro chamado PocketPercent foi implementado. Ele define a percentagem de operações bem sucedidas que nós retiraríamos da conta de negociação e colocaríamos no "bolso". Afinal, isto é o que geralmente acontece na vida real.

  • Claro que o depósito deve ser lançado várias vezes num loop (que seria uma tarefa bastante banal para executar manualmente centenas de vezes). Nós também devemos alterar outros parâmetros - PocketPercent e Take (o tamanho da aposta inicial), bem como para calcular os resultados médios (crédito do "bolso" e depósito na conta).

  • Devemos ter duas versões do script: a primeira realiza execuções recorrentes sem escrever as informações das negociações num arquivo, enquanto que a segunda funciona da maneira oposta. Execuções recorrentes significa que devemos usar um código de objeto. Assim, desenvolvemos o "código operacional" com a classe CCoinTest, enquanto os scripts são feitas da forma mais simples possível.

O código para script é tão pequeno que vou publicá-lo (todo o trabalho, incluindo os detalhes da negociação num arquivo, é feito pela classe CCoinTest):

#include <CCoinTest.mqh>

//--- Parâmetros de entrada
input int RepeatsCount=100000;
input int StartBalance = 10000;
input int Take = 50;
input int PocketPercent = 10;
input double SuccessPercent = 50.0;
input string S2 = "Se verdadeiro, SuccessPercent é ignorado";
input bool FiftyFifty = true;
input string S3 = "Se verdadeiro, usar um lote fixo em vez do Labouchere";
input bool FixedLot = false;

void OnStart()
{
        MathSrand(GetTickCount());

        CCoinTest Coin;

        Coin.SetRepeatsCount(RepeatsCount);
        Coin.SetStartBalance(StartBalance);
        Coin.SetTake(Take);
        Coin.SetPocketPercent(PocketPercent);
        Coin.SetSuccessPercent(SuccessPercent);
        Coin.SetFiftyFifty(FiftyFifty);
        Coin.SetFileName("Coin.csv");
        Coin.SetFixedLot(FixedLot);

        Coin.Go();
}

Depois de adicionar o "pocket", os gráficos de operação do sistema parecem um pouco diferente (40% do lucro é retirado no exemplo a seguir):

Foi adicionado o gráfico de equilíbrio após o "pocket" (exemplo 1)

A linha roxa (saldo do "Pocket") é muito semelhante ao gráfico da conta de negociação perfeita que todo o trader sonha. Quando na verdade, devemos prestar mais atenção na linha amarela (saldo total da conta de negociaçao e do "bolso"), onde parece que não está tão bom. Além disso, os seguintes gráficos são muito mais comuns:

Foi adicionado o gráfico de equilíbrio após o "pocket" (exemplo 2)

As nossas conclusões até o estágio atual:

  • O sistema na verdade demonstra o comportamento pretendido pelo autor: rebaixamentos de crédito muitas vezes superam o depósito e tende a crescer ainda mais.

  • Normalmente essa tentativa termina em fracasso completo. Na verdade, o sistema tem apenas duas opções depois de entrar no rebaixamento - superação ou perder o depósito inteiro.

  • A aposta inicial nestes exemplos são de 0,5% do depósito inicial (50 de 10 000). No primeiro exemplo, o nível básico de risco foi reduzida para cerca de 0,1% (o depósito foi aumentado 4,5 vezes o valor da aposta inicial). No entanto isto não salvou o depósito do fracasso.


Avaliação Final para Diferentes Valores da Probabilidade. Comparando os Resultados do Labouchere e os Sistemas de Apostas Fixas

Agora vamos a parte mais emocionante - recolher os resultados de muitos experimentos. Estamos prestes a descobrir se as vitórias sobre os depósitos bem sucedidos podem cobrir as perdas onde falharam. Será que o algoritmo provará ser mais eficiente se o tamanho inicial da aposta for reduzido (assim, fornecer mais proteção para o depósito) ou aumentado? Qual a porcentagem de lucro que devemos retirar da conta de negociação? Será que o sistema Labouchere seria diferente com uma taxa fixa em tudo? E o que vai acontecer se o sistema inicial tem uma expectativa matemática positiva (o "apostador" ganha mais frequentemente)? Como você pode ver, existem várias perguntas que devemos lidar adequadamente.

O script para o lançamento de depósitos em loop com parâmetros variáveis consiste em cerca de 100 strings. Vou mostrar apenas alguns fragmentos aqui.

Os parâmetros de entrada:

//--- Parâmetros de entrada
input int RepeatsCount=100000;
input int StartBalance = 10000;
input string S1 = "Quantidade de depósitos perdidos";
input int Deposits = 100;
input double SuccessPercent = 50.0;
input string S2 = "Se verdadeiro, SuccessPercent é ignorado";
input bool FiftyFifty = true;
input string S3 = "Se verdadeiro, usar um lote fixo em vez do Labouchere";
input bool FixedLot = false;

Os arrays contendo o valor de aposta inicial e o percentual de vitórias colocado no "bolso":

// array PocketPercent
int iPocketPercents[24] = {1, 2, 3, 5, 7, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 75, 80, 85, 90, 95, 97, 98, 99};

// Array da aposta inicial
int iTakes[15] = {5, 10, 15, 20, 50, 75, 100, 150, 200, 300, 400, 500, 1000, 2000, 3000};

Como podemos ver, o tamanho inicial da aposta varia de 5 (0,05% do depósito inicial) para 3 000 (30% do depósito inicial). Os fundos colocados no "bolso" podem variar de 1% a 99%. Os parâmetros são definidos com uma margem de segurança que sobrepõem limites razoáveis em ambas as direções.

Assim o espaço de busca é bidimensional e 360 pontos discretos (24 * 15) são tomadas dentro desse espaço. O saldo médio total (fundos do "bolso" + conta de negociação) e o valor médio das operações antes da perda de depósito (tempo de vida do depósito) são calculados para cada um dos pontos com base no resultado das séries. A quantidade de depósitos por séries é definido pelo parâmetro Deposits.

Os resultados dos cálculos do espaço bidimensional são tridimensionais, o que significa que eles são difíceis de visualizar por meio de duas dimensões. Para superar este problema, vamos simplesmente desenhar gráficos bidimensionais com o eixo-x nos números das séries dos pontos do espaço de busca (de 0 a 359). Se necessário, alguns valores do Takes e PocketPercent serão fornecidos separadamente.

Depois de executar 100 depósitos, o saldo médio é o seguinte:

Saldo após 100 iterações, Labouchere, 50/50

Abaixo, o gráfico de depósito completo (em escala logarítmica):

Tempo de vida do depósito, 100 iterações, Labouchere, 50/50

O tempo de vida do depósito superior a 10 000 negociações com o risco inicial de 0,05% tende a diminuir para menos do que 10 operações com o risco inicial de 30%. A alto valor de PocketPercent também reduz a quantidade média das operações antes do depósito ser perdido. Isto é um resultado esperado.

Podemos selecionar alguns pontos promissores no gráfico indicando os conteúdos médios do "bolso" e do saldo. Quatro dos pontos estão localizados próximos uns dos outros, por isso espero que possamos encontrar a área ideal. Agora vamos calcular os resultados para Depósitos = 1 000 e sobrepô-los no mesmo gráfico:

Saldo após 100 e 1000 iterações, Labouchere, 50/50

Como podemos ver, a área supostamente ideal simplesmente desaparece sob a pressão de um número suficientemente grande de dados estatísticos. Independentemente de quaisquer parâmetros, o gráfico flutua aleatoriamente perto do saldo inicial de 10 000.

Assim, Depósitos = 100 não são suficientes. Todas as outras experiências serão realizadas com Depósitos = 1 000.

Vamos exibir os resultados dos sistemas Labouchere e Aposta Fixa num único gráfico:

Saldo após 1000 iterações, Labouchere e lote fixo, 50/50

O gráfico do tempo de vida do depósito dos sistemas Labouchere e Aposta Fixa

Deposit lifetime, 1000 iterations, Labouchere and fixed lot, 50/50

Conclusões:

  • O resultado financeiro do sistema Labouchere é zero coincidindo com o do sistema de Aposta Fixa.

  • Ao contrário do sistema Labouchere, a Aposta Fixa mostra uma crescente dispersão de dados em torno do valor médio. Parece que os valores dos Depósitos fixos não estão muito bem de acordo com o comportamento estatístico do sistema de Aposta Fixa.

  • O tempo de vida de depósito é muito menor quando se utiliza o sistema Labouchere (10 ou mais vezes com a maioria dos parâmetros e até mesmo mais do que 100 vezes com certos parâmetros). No caso do nível de risco baixo, podemos ver que o gráfico atinge uma limitação estabelecida pelo parâmetro RepeatsCount (o valor padrão é de 100 000). Estes resultados confirmam parcialmente a opinião popular onde os sistemas que aumentam o nível de risco são perigosos para um depósito. Tais sistemas reduzem o tempo de vida de depósito, embora nós ainda não descobrimos qualquer perigo para os resultados financeiros (desde que uma certa porcentagem de vitórias seja retirada).

Vamos introduzir um novo parâmetro de script que nos permitirá coletar dados estatísticos suficientes para avaliar o comportamento das áreas de alto risco:

input string S2 = "O montante mínimo de operações por cada par de parâmetros";
input int MinDeals = 10000000;

Se nós temos menos de 10 milhões de transações por 1000 depósitos perdidos, então devemos continuar.

Como resultado, os dados do gráfico se tornam menos disperso:

Saldo após 1000 iterações e pelo menos 10 milhões de operações, Labouchere e Lote Fixo, 50/50

Tempo de vida do Depósito, 1000 iterações e pelo menos 10 milhões de operações, Labouchere e lote fixo, 50/50

E agora vamos verificar o funcionamento dos sistemas usando as probabilidades iniciais do sistema diferentes de 50/50.

Saldo após 1000 iterações, Labouchere e loteo fixo, 49% de vitórias

O tempo de vida do depósito:

O tempo de vida do depósito, 1000 iterações, Labouchere e lote fixo, 49% de vitórias

O que podemos ver nestes gráficos?

  • No caso de 49% de operações vencedoras, ambos os sistemas se tornam claramente deficitários.

  • Os resultados financeiros do sistema de Aposta Fixa são muito baixos, mostrando que a retirada de lucro para o "bolso (pocket)" é mais adequado para o sistema Labouchere do que para o Aposta Fixa numa relação de vitórias menor do que 50%. Os fundos são transferidos para o "bolso" somente se estiver fora do rebaixamento.

    Ao contrário do sistema de Aposta Fixa, o Labouchere é capaz de estabelecer novos recordes (desde que exista dinheiro suficiente para fazer mais outra aposta), mesmo com uma relação de vitória de 49%. No caso do depósito diminuir rapidamente, os traders humanos provavelmente não irão executar 100 000 ou mesmo 10 000 ofertas até que sejam completamente dizimados os depósitos. Eles certamente irão parar as operações antes disto acontecer. O algoritmo do sistema de Aposta fixa não pode fazer isto. O algoritmo do sistema Labouchere é muito mais semelhante à condição humana, a este respeito ele se comporta como um trader incentivado por novos registros e que operam até o depósito ser completamente destruído.

Você se lembra o artigo que eu mencionei na Introdução? Ele diz que o sistema irá funcionar mesmo com "33-40%" de vitórias. Vamos verificar o limite superior (40%) deste intervalo apenas para o divertimento do autor do artigo:

Saldo após 1000 iterações, Labouchere e o lote fixo, 40% de vitórias

Tempo de vida do depósito, 1000 iterações, Labouchere e lote fixo, 40% de vitórias

Agora vamos considerar a expectativa matemática positiva do sistema inicial (mais de 50% de vitórias).

Temos de mostrar os gráficos do balanço em escala logarítmica, mesmo com uma relação de vitória a 51%.

Saldo após 1000 iterações, Labouchere e lote fixo, 51% de vitórias

Tempo de vida do depósito, 1000 iterações, Labouchere e lote fixo, 51% de vitórias

Conclusões:

  • Ambos os sistemas foram transferidos a uma expectativa positiva.

  • No caso de um baixo nível de risco, o sistema de Aposta Fixa mostra uma "vitalidade" ilimitado. Em outras palavras, é quase impossível perder um depósito.

  • No entanto, o sistema Labouchere poderá destruir um depósito (mas não se esqueça do "bolso (pocket)").

  • O sistema de Aposta Fixa faz 10 vezes mais lucro do que o Labouchere com a maioria dos parâmetros (e às vezes até 17 vezes mais lucro com determinados parâmetros).

A maioria dos leitores podem pensar que o sistema de Aposta Fixo é em todos os aspectos superiores ao Labouchere. Não só protege um depósito melhor, como também traz 10 vezes mais dinheiro! Infelizmente estão sendo enganados pelas estatísticas.

O sistema de Aposta Fixa esbarra na limitação de 100 000 negócios por um depósito. Se o parâmetro RepeatsCount fosse de 200 000, então o sistema teria feito 2 vezes mais lucro. "Mas é simplesmente maravilhoso!" - dirão os leitores enganados pelas estatísticas e eles vão estar errados novamente.

Dê uma olhada nos gráficos dos lucros médios feitas pelos sistemas por negociação (em escala logarítmica):

Lucro por negociação, Labouchere e lote fixo, 51% de vitórias

O gráfico do lucro por negociação de percentagem da aposta inicial faz toda a imagem ficar ainda mais clara:

Lucro por negociação, % da aposta inicial, Labouchere e lote fixo, 51% de vitórias

Conclusões:

  • O sistema Aposta Fixa faz 2% da aposta inicial por negociação. Isso é totalmente consistente com a teoria, pois a taxa de ganho/perda aqui é 51/49. Em outras palavras, as vitórias excedam as perdas por 2.

  • O sistema Labouchere faz mais lucro, mesmo com os parâmetros mais inadequados. E se os parâmetros estão definidos corretamente, podem produzir de 6 a 7 vezes mais lucro.

Assim parece que se você tem uma quantidade ilimitada de tempo, você pode fazer muito bem o sistema Labouchere.

Você pode argumentar que o sistema de Aposta Fixa pode ser substituído pelo sistema de Porcentagem Fixa de Risco, de modo que o lucro por negociação vai aumentando (na verdade, o lucro vai crescer continuamente, mas devemos usar distâncias semelhantes para comparação). Porém neste caso, um volume de posição também poderia ser alterado para o sistema Labouchere.

Então o sistema Labouchere parece ser mais rentável, não é?

Se você disser que sim, então as estatísticas te enganaram mais uma vez.

Dê uma olhada na tabela:

 Aposta
tamanho
Porcentagem
transferida
para o "pocket"
 "Pocket" e balanço
médio,
Sistema Labouchere
Média das
quantidade de operações,
=Sistema Labouchere
 "Pocket" e balanço
médio,
Aposta Fixa

 Quantidade média de
operações,
Aposta Fixa

Lucro
por negociação,
=Sistema Labouchere
Lucro
por negociação,
Aposta Fixa


Lucro
por negociação,
% da aposta inicial,
Sistema Labouchere
Lucro
por negociação,
% da aposta
inicial, Aposta Fixa

75
10
51 177.34
3 728.62
160 489.6
99 530.41
11.04
1.51
14.72
2.02
500
45
14 016.36
127.27
349 479
33 771.46
31.56
10.05
6.31
2.01

Na verdade, podemos facilmente fazer a mesma quantidade de lucro usando o sistema de aposta Fixa. Nós simplesmente precisamos aumentar a aposta 7 vezes (de 0,75% até 5% neste caso). Claro que 5% é um nível de risco muito elevado, mas o sistema de Aposta Fixa ainda tem 10 vezes mais "vitalidade", neste caso.

Então mais uma vez o sistema de Aposta Fixa parece ser mais benéfico, certo?

Eu acho que as estatísticas lhe traíram novamente.

Na verdade, não importa a quantas operações o depósito poderá sobreviver (em média, é claro), uma vez que colocamos uma parte de nossos lucros no "bolso". Se o total do "bolso" exceder o saldo inicial da conta várias vezes, a perda do depósito não é um problema significativo.

Talvez a conclusão mais válida que pode ser extraída desses cálculos é a seguinte: "Se a relação de vitória é de 51%, os lucros obtidos pelos sistemas Labouchere ou de Aposta Fixa são muito parecidos, desde que o sistema Labouchere tenha uma aposta inicial de 0,75% do depósito e 10% do lucro seja retirado da conta , enquanto que a Aposta Fixa use 5% do depósito inicial e 45% do lucro seja retirado da conta. O sistema Labouchere atinge o mesmo nível de rentabilidade, aumentando o tamanho da posição durante o seu funcionamento".

Também tenha em mente que qualquer conclusão estatística é considerada válida somente após a realização de um grande número de experimentos. Uma única conta virtual pode ser virtualmente dividida em diversos depósitos. A perda de um depósito virtual significa a perda de uma parte da conta de negociação e retorna ao tamanho inicial da aposta quando um certo nível de risco é atingido. O artigo mostra que a simulação de 100 depósitos produz dados muito dispersos. Se dividir depósito de um trader médio em 100 partes, a negociação normal será impossível.

Qual sistema é melhor? É difícil dizer. A escolha depende das preferências dos operadores e a expectativa matemática do sistema é de uma importância primordial. O código mostrado no artigo permite que qualquer pessoa possa simular o funcionamento do sistema Labouchere em seu próprio sistema de negociação.

Vamos examinar os charts de ambos os sistemas com 55% de vitórias:

Saldo após 1000 iterações, Labouchere e lote fixo, 55% de vitórias

Tempo de vida do Depósito, 1000 iterações, Labouchere e lote fixo, 55% de vitórias

Lucro por negociação, Labouchere e lote fixo, 55% de vitórias

Lucro por negociação, % da aposta inicial, Labouchere e lote fixo, 55% de vitórias

Com 55% de vitórias, ambos os sistemas se tornem rentáveis.

A diferença entre os lucros médios por operações diminuiu de 6 a 7 vezes (51% de vitórias) para cerca de 3,7 (55% de vitórias). Isto acontece devido ao fato de uma maior confiança do sistema inicial, o sistema Labouchere gasta menos tempo nos rebaixamentos e não tem que negociar usando um aumento muito maior também.


Conclusão

Nenhum milagre aconteceu. O sistema de gestão do dinheiro Labouchere não pode transformar um prejuízo ou um sistema neutro em outro rentável.

Alguns equívocos sobre o sistema Labouchere são claramente vistos agora:

  • Complexidade que dificulta o cálculo dos resultados do sistema.
  • A falta de dados estatísticos durante os testes manuais.
  • Capacidade do sistema para estabelecer recuperação dos lucro, mesmo se o sistema inicial tenha expectativa negativa, fazendo os traders acreditarem na sua eficiência.

Vale a pena tentar o sistema Labouchere como um sistema de expectativa positiva? A escolha é sua. O sistema Labouchere é bastante complicado e sua eficiência não pode ser chamado de excelente. De qualquer forma, eu posso te dar duas dicas - não ultrapasse o nível de risco aceitável se você se preocupa com o seu depósito e tente melhorar a esperança matemática do seu sistema de negociação.

Traduzido do russo por MetaQuotes Software Corp.
Artigo original: https://www.mql5.com/ru/articles/1800

Arquivos anexados |
ccointest.mqh (12.2 KB)
clabouchere.mqh (5.34 KB)
cointest2.mq4 (2.47 KB)
cointest3.mq4 (5.88 KB)
cointest1.mq4 (5.08 KB)
randfile.mq4 (10.33 KB)
Análise Avançada de uma Conta de Negociação Análise Avançada de uma Conta de Negociação

O artigo trata sobre sistema automático para análise de qualquer conta de negociação no terminal MetaTrader 4, são considerados os aspectos técnicos de um relatório gerado e a interpretação dos resultados obtidos. Conclusões sobre as melhorias dos fatores das negociações são mostradas após a análise detalhada do relatório. O script MQLab ™ Graphic Report é usado para análise.

Otimização Visual de Indicador e Sinal de Rentabilidade Otimização Visual de Indicador e Sinal de Rentabilidade

Este artigo é uma continuação e desenvolvimento de meu artigo anterior "Testes Visuais de Rentabilidade dos Indicadores e Alertas". Tendo acrescentado alguma interatividade com o processo de mudança de parâmetro e reformulado os objetivos do estudo, além de obter uma nova ferramenta que mostra os potenciais resultados com base nos sinais utilizados, também permite que você obtenha imediatamente um layout de operações, gráfico do saldo e o resultado final da negociação, movendo controles deslizantes virtuais que funcionam como controladores para os valores dos parâmetros do sinal no gráfico principal.

Gerenciando o Terminal MetaTrader Via DLL Gerenciando o Terminal MetaTrader Via DLL

O artigo trata sobre o gerenciamento dos elementos da interface de usuário MetaTrader através de uma biblioteca DLL auxiliar, usando o exemplo de como alterar as configurações de entrega das notificações Push. O código fonte da biblioteca e o script como exemplo estão anexados ao artigo.

Gerenciamento de dinheiro revisitado Gerenciamento de dinheiro revisitado

O artigo lida com algumas questões que surgem quando investidores aplicam vários sistemas de gerenciamento de dinheiro nas negociações Forex. Dados experimentais obtidos de realizações de negócios usando diferentes métodos de gerenciamento de dinheiro (MM) são também descritos.