Thursday 7 November 2019

Trading system simulation


Simulação do sistema de negociação Os preços brutos finais podem variar de acordo com o IVA local. O STL foi projetado principalmente para apoiar a implementação de MASs que incluíam agentes incorporados simulados. No entanto, a linguagem de coordenação também pode ser usada para implementar outras classes de MASs. Por esse motivo, mostramos neste capítulo como o STL pode ser usado para implementar uma simulação de um sistema comercial SCK99, SCH99. De fato, as inúmeras atividades que ocorrem dentro de um sistema comercial são geralmente distribuídas e podem ser modeladas por um MAS. O comércio eletrônico baseado em agentes está se tornando um dos domínios de aplicação mais importantes para os MAS NRS98, NS98, MGM99. As soluções concretas abrangem vários frameworks baseados em agentes, como Kasbah CM96 ou FishMarket RANSP97. A pesquisa em modelos e linguagens de coordenação também propôs alguns cenários específicos para implementar aplicativos de comércio eletrônico, veja, por exemplo, uma proposta baseada na plataforma PageSpace CKR97 e outra usando IWIM e Manifold PA98b. Nosso objetivo não é alcançar a automação total de um sistema comercial. Este trabalho concentra-se mais em simular a automação de tal sistema. Além disso, nosso objetivo não é se concentrar nos algoritmos de controle dos diferentes agentes, nem nas técnicas de negociação (ver, por exemplo, GM98) que são realizadas pelos agentes para processar uma transação, mas sim concentrar-se nos mecanismos básicos de coordenação ( A coordenação objetiva) que entram em jogo nas interações entre agentes, para o qual STL é precisamente adequado. Assim, nesta implementação, os agentes são dotados de uma autonomia muito básica no sentido de que eles podem tomar decisões por conta própria, sem a intervenção do usuário. Algoritmos de controle baseados em autonomia e técnicas de negociação inteligentes mais sofisticadas poderiam ser abordados em uma etapa adicional. A Figura 9.7, no final deste capítulo, fornece uma visão geral gráfica reduzida da organização dos agentes que compõem nosso sistema comercial, bem como suas interações. Para evitar a confusão do gráfico, os nomes das portas (em que se baseia) foram omitidos intencionalmente. A Figura 9.1 mostra a hierarquia de classes da implementação discutida neste capítulo. Nós explicamos as diferentes classes nas seções a seguir. Carlo Carlo Simulação do seu sistema de negociação NOTA: tópico avançado. Certifique-se de ler as partes anteriores do tutorial primeiro. Para interpretar corretamente os resultados da simulação de Monte Carlo, você precisa ler esta seção do manual. Configurações não triviais e detalhes não óbvios são explicados abaixo. Por favor, não salte. De um modo geral, os métodos de Carlo Carlo descrevem uma ampla classe de algoritmos computacionais que usam amostragem aleatória repetida para obter propriedades estatísticas de um determinado processo. Foi inventado pela matemática polaca Stanislaw Ulam trabalhando em projetos de armas nucleares no laboratório Los Alamos. Como ele não conseguiu analisar processos físicos complexos usando métodos matemáticos convencionais, ele pensou que ele poderia criar uma série de experiências aleatórias, observar os resultados e usá-los para obter propriedades estatísticas do processo. No desenvolvimento do sistema de negociação, a simulação Monte Carlo refere-se ao processo de utilização de seqüências de comércio simuladas aleatorizadas para avaliar as propriedades estatísticas de um sistema comercial. Há muitas maneiras de executar cálculos reais que diferem quando se trata de detalhes de implementação, mas provavelmente o mais simples e confiável é o método de bootstraping que realiza amostragem aleatória com a substituição da lista de comércio real gerada pelo back-test. Vários métodos de simulação de Monte Carlo permitem verificar a robustez do sistema de negociação, descobrir probabilidade de ruína e muitas outras propriedades estatísticas do sistema de negociação. Como funciona na AmiBroker Para executar a simulação de Monte Carlo (ou teste de inicialização) do seu sistema comercial, o AmiBroker executa o seguinte: A. Criando o conjunto de entradas A.1 Execute o teste posterior do seu sistema comercial para produzir o conjunto original de N Negociações B. Repetidamente (1000 vezes) B.1 escolha aleatoriamente trocas da lista de comércio original para produzir novo conjunto aleatório de N trades (chamado realização) Este conjunto aleatório contém o mesmo número de negócios, eles são ordenados aleatoriamente e algumas negociações originais Pode ser ignorado e alguns utilizados mais de uma vez (permutação com repetição, ou amostragem aleatória com substituição). Uma vez que o número de realizações únicas é NN (assim com apenas 100 negócios de entrada, temos 100 100 realizações únicas), com número suficiente de trades (gt100) a probabilidade de escolher uma seqüência idêntica como original é praticamente zero. B.2 executam sequencialmente o cálculo de perda de ganhos para cada comércio escolhido aleatoriamente, usando o dimensionamento de posição definido pelo usuário para produzir equidade do sistema. B.3 registrar a equidade do sistema na distribuição C.1 Dados do processo obtidos em B para gerar estatísticas e gráficos de distribuição. Todos os Acima acontece quando você pressiona o botão Backtest na janela New Analysis. O simulador AmiBrokers Monte Carlo é tão rápido que geralmente custa apenas uma fração de segundo em cima do procedimento de teste normal. Deve ser bem notado que os negócios simulados durante o bootstrap são realizados sequencialmente. Se o seu sistema de negociação original negociasse várias posições ao mesmo tempo (de modo que algumas ou todas as negociações estão sobrepostas), isso pode resultar em reduções menores do sistema sendo relatadas pelo teste bootstrap, porque as retiradas de negócios individuais ocorreram de forma sequencial (não em paralelo, como acontece com as transações sobrepostas ). A maneira como funciona o simulador de Monte Carlo pode ser controlada a partir da página Configurações de análise, como guia QuadMonte Carlota: Habilite a simulação de Monte Carlo, essa caixa de seleção controla sempre que a simulação MC é executada automaticamente como parte do backtest (logo após o backtest gera lista comercial) define o número De simulações de MC para executar (deve ser de 1000 ou mais) Simular usando mudanças de equivalência de carteira essa opção faz com que a simulação de MC use modificações de porcentagem de equivalência de carteira bar-by-bar ao invés de transações individuais. Essas mudanças de equidade individuais são escolhidas aleatoriamente e permutadas para criar a execução da simulação. Neste modo, as mudanças de capital bar-by-bar são calculadas como proporção (então 10 aumento é representado como 1.1), selecionado aleatoriamente e multiplicado cumulativamente. Esta configuração permite lidar com situações quando você possui vários negócios sobrepostas no seu sistema e não requer nenhuma configuração especial para o dimensionamento da posição. Simular usando a lista de comércio, esta opção faz com que a simulação de MC use trades individuais a partir do backtest original para criar a execução da simulação. Para executar a simulação nesse modo, o simulador MC escolhe aleatoriamente negócios originais e aplica novo dimensionamento de posição conforme definido abaixo. Este modo é útil nos casos em que você não possui transações sobrepostas. Define o método de dimensionamento de posição usado pelo simulador de MC no modo de listagem quottrade: não muda - usa o tamanho de posição original usado durante o teste de retorno. Tenha em mente que ele sempre usa o valor em dólar original do comércio (ou qualquer moeda que você usa), mesmo que sua fórmula esteja usando porcentagem do patrimônio da carteira. Tamanho fixo - usa número fixo de contratos de ações por negociação Valor constante - usa valor em dólar fixo para abrir todo o comércio Porcentagem do patrimônio líquido - usa porcentagem definida do valor atual do capital simulado atual. Tenha cuidado ao usar esta configuração - faz com que o tamanho da posição de um comércio dependa dos lucros em negócios anteriores (acumulando lucros) e crie dependência em série. Isso também pode levar a um efeito de composição extra quando você possui transações sobrepostas em seu backtest original, pois o bootstrap executa negócios de maneira sequencial (então eles não se sobrepõem). Por esse motivo, seu uso é limitado aos casos em que não ocorrem trocas de sobreposição. Habilitar as curvas de equidade do MC (MinMaxAvg) liga os gráficos de equidade do MC (incluindo os gráficos de capital mais altos, mais baixos e médios, além dos gráficos de equidade da palha de palha). Note-se que as linhas verdes e vermelhas (equidade minmax) não são realmente únicas e quotbestquot e quotworstquot equity. São os pontos mais altos (max) e mais baixos (mínimos) de TODAS as ações geradas durante a MC. Então eles são realmente melhores pontos de todas as ações e os piores pontos de todas as ações. E a linha azul (média) é a média de todas as linhas de equidade (todas as corridas). Mostrar valores absolutos s em escala linear - exibe ações em valores absolutos do dólar usando gráfico de escala linear Mostrar valor absoluto s em escala logarítmica - exibe ações em valores de dólar absolutos usando gráfico de semi-logs Mostrar Variação de porcentagem - exibe ações como quotrate de mudança desde o início Gráficos de quadros de vassoura de palha - define quantos equivalentes de teste individuais devem ser plotados como gráfico de vassoura de palha (o número grande pode diminuir o processamento do desenho) Use a escala logarítmica para o Equivalente Final Exibe o gráfico de CDF de capital final usando a escala de semi-log em vez de linear Use a escala logarítmica para Drawdown Exibe o gráfico CDF de redução de dólar usando a escala semi-log em vez de linear Use números negativos para Drawdown (Drawdown reverso CDF) Quando esta opção está ativada, tanto o dólar quanto o percentual de redução são relatados como números negativos. Isso também afetou a distribuição de CDF. Ele inverte a ordem de quotdrawdownquot coluna na tabela MC e inverte o significado (ou seja, o valor de 10 percentis significa que há 10 chances de que as cobranças sejam iguais ou pior (mais negativas) do que a quantidade apresentada. Com esta opção desativada (como em versões antigas ), As denominações são reportadas como números maiores que zero (positivo) e o valor de 10 percentil significa 10 chances de que as retiradas sejam iguais ou melhores (menor) do que a quantidade apresentada. Para remover os riscos de correlação serial que afetam os resultados da simulação de Monte Carlo é altamente encorajado Para usar o dimensionamento de posição fixa (ou o valor fixo em dólares das negociações ou o número fixo de contratos de ações), de modo que a ordem em que o dado comércio ocorre na sequência original não afeta a perda de lucro devido à composição. Além disso, dependendo sempre que seu sistema abra múltiplas posições sobrepostas, Escolha o método de simulação da seguinte maneira: Simule usando a lista de comércio - para sistemas com transações que não se sobrepõem ou Simule usando mudanças na equidade do portfólio. Ou sistemas com tradições sobrepostas (posições simultâneas) Os resultados da simulação de Monte Carlo são exibidos na página QuonteMonte Carlota do relatório Backtest. No topo da página, podemos ver uma tabela que fornece valores de algumas estatísticas-chave derivadas dos gráficos de distribuição cumulativa (CDFs) dos resultados da simulação de Monte Carlo. Aqui estão os resultados da amostra (os destaques são adicionados manualmente com a finalidade de ilustração). O patrimônio inicial foi de 10000 neste exemplo. O teste foi feito ao longo de 7 anos (dados EOD). Desta vez, o significado da coluna de retirada é reverso - diz-lhe que as retiradas seriam pior (mais negativas) do que a quantidade especificada, o valor de 99 percentil de -7,23 significa que em 99 dos casos você verá reduções pior (mais negativas) do que - 7.23. O valor de 1 percentil de -63,82 diz que, em 1 dos casos, você experimentaria reduções iguais ou pior (mais negativas) do que -63,82. Assim, a tabela pode ser lida em quotrow-wisequot e a parte superior da tabela (pequenos percentis) refere-se a quotpessimisticquot Cenários. Abaixo da tabela, podemos encontrar o gráfico de vassoura de palha minavgmax de ações simuladas: Observe que as linhas verdes e vermelhas (equidade minmax) não são ações de quotbestquot e quotworstquot. São os pontos mais altos (max) e mais baixos (mínimos) de TODAS as ações geradas durante a MC. Então eles são realmente melhores pontos de todas as ações e os piores pontos de todas as ações. E a linha azul (média) é a média de todas as linhas de equidade (todas as corridas). A nuvem de linhas cinza representa ações de teste individuais - como podemos ver, o mesmo sistema comercial pode gerar resultados diferentes quando as condições do mercado mudam e a simulação MC tenta simular vários resultados e fornecer algumas informações estatísticas sobre o quanto isso pode ser mau. Após o gráfico de palha de palha, você pode encontrar gráficos de função de distribuição cumulativa (CDF) do patrimônio final, CAR, drawdowns e menor capital (novamente linhas de anotações verdes e vermelhas foram adicionadas manualmente): gráficos de distribuição cumulativa apresentam a mesma informação que foi incluída na tabela em O topo da página do quotMonte Carloquot, mas na forma gráfica. Novamente, quando examinamos o gráfico de distribuição de lucro anual (CAR), podemos ver que, em aproximadamente 10 dos casos, o nosso sistema não se romperia (produz CAR Carga negativa). Também podemos ver que, em aproximadamente 35 dos casos, nosso CAR seria inferior a 5. Os lucros acima de 10 por ano só ocorrem no top 20 dos testes. Todos os outros gráficos na página MC são construídos de mesma forma e você pode lê-los usando a mesma metodologia. O gráfico de capital final mostra a função de distribuição cumulativa do valor final do capital próprio (no final do período de teste) O gráfico de retorno anual mostra a função de distribuição cumulativa do retorno percentual anual composto do teste Max. Drawdown e Max. Os gráficos de Drawdown mostram a função de distribuição cumulativa de drawdowns (distâncias dólarpercent máxima em pico para valey) experimentadas durante o teste O gráfico de Equidade mais baixa mostra a função de distribuição cumulativa do menor patrimônio já experimentado durante o teste Como controlá-lo a partir do nível da fórmula Além de usar Configurações Diálogo, você pode controlar o simulador Monte Carlo usando a função SetOption (). Você também pode recuperar esses valores usando a função GetOption. O valor SetOption (quotMCEnablequot, 0) 0 desabilita a simulação MC SetOption (quotMCEnablequot, 1) o valor 1 permite MC somente em backtests de portfólio (padrão) SetOption (quotMCEnablequot, 2) value 2 força MC a ser ativado em todos os lugares (em todos os modos, incluindo otimização - SLOW ) Note que habilitar o MC na otimização é altamente desencorajado, a menos que você realmente use métricas MC como otimização de destino via backtester personalizado ou use as distribuições MC no processo de otimização. O processo de Monte Carlo é computacionalmente caro e, enquanto algumas centenas de milissegundos adicionados a um backtest não importam muito, no caso de otimizações quando são multiplexadas por número de etapas, você pode facilmente aumentar o tempo de otimização por ordens de grandeza. Então, a menos que você REALMENTE precise de distribuição de MC como métrica personalizada e meta de otimização, NÃO habilite MC na otimização. SetOption (quotMCRunsquot, 1000) define o número de corridas de simulação de MC (realizações) Outros parâmetros de MC que podem ser configurados usando SetOption e retrived usando GetOption: quotMCChartEquityCurvesquot (truefalse) quotMCStrawBroomLinesquot (0..100) quotMCPosSizePctEquityquot (0..100) quotMCPosSizeMethodquot - 0 - não muda, 1 - tamanho fixo, 2 - valor constante, 3 por cento do patrimônio líquido, quotMCPosSizeSharesquot (número), quotMCPosSizeValuequot (número) quotMCPosSizePctEquityquot (número) quotMCUseEquityChangesquot (número), 1 significa usar as mudanças de equidade em vez da lista de negociação quotMCChartEquityScalequot (número ), 1 para escala de log, 0 para escala linear quotMCLogScaleFinalEquityquot (número), 1 para escala de log, 0 para escala linear quotMCLogScaleDrawdownquot (número), 1 para escala de log, 0 para escala linear quotMCNegativeDrawdownquot (número), 1 - use números negativos para Drawdown (CDR de retirada reversa) Como adicionar métricas personalizadas com base na distribuição de teste MC ao relatório backtest Além do MC incorporado Porta, você pode adicionar suas próprias métricas personalizadas ao relatório usando o método GetMonteCarloSim () do objeto Backtester e o objeto MonteCarloSim que essa função retorna. Se você é novo em métricas personalizadas, por favor, consulte quotComo adicionar métricas personalizadas ao relatório do relatório do backtester, parte deste manual primeiro. O objeto MonteCarloSim tem uma função GetValue (quotfieldquot, percentil) que permite acessar os valores de CDF. Os valores quotfieldquot disponíveis são: quotFinalEquityquot quotCARquot quotLowestEquityquot quotMaxDrawdownquot quotMaxPercDrawdownquot Agora, aqui é o código de exemplo que apresenta como adicionar o percentil 30 FinalEquity e CAR ao relatório: SetOption (MCEnable. True) SetOption (MCRuns. 1000) SetCustomBacktestProc () if (Status (ação ) ActionBackBacktesterObject () bo. Backtest () execute o procedimento de backtest padrão obter acesso aos resultados de Monte Carlo nota 1: pode ser NULL se o MC não estiver habilitado nota 2: os resultados de MC estão disponíveis após o Backtest () ou PostProcess como simulação de MC É feito na fase final do pós-processamento mc bo. GetMonteCarloSim () se (mc) obter o percentil 30 do patrimônio final e a distribuição do CAR bo. AddCustomMetric (FinalEq30. Mc. GetValue (FinalEquity. 30)) bo. AddCustomMetric (CAR30. Mc. GetValue (CAR. 30)) você também pode combinar estatísticas de MC com estatísticas normais st bo. GetPerformanceStats (0) bo. AddCustomMetric (CAR30MDD. Mc. GetValue (CAR. 30) st. GetValue ( MaxSystemDrawdownPercent)) Uma vez que as métricas personalizadas são adicionadas, ela pode ser usada como otimização alvo (não se esqueça de mudar MCEnable para 2) e usado no processo de teste Walk Forward como função objetiva. Para selecionar métrica personalizada como alvo de otimização, você precisará digitar seu nome exatamente como aparece na chamada AddCustomMetric no campo quotOptimization Targetquot na caixa de diálogo Configurações, Walk Forward. Desta forma, você pode executar um teste avançado de otimização direcionado por valores de distribuição de simulação de MC. Então, por exemplo, em vez de usar o CARMDD, você pode usar o CAR30MDD (CARRO do MC do 30º percentil dividido pela redução do sistema máximo). Como sobre a randomização de Monte Carlo em vez do teste de bootstrap O randomization de Monte Carlo é diferente do teste de bootstrap porque não usa a lista de negócios real (realizada) do backtest, mas tenta usar retornos individuais quotall sempre que eles são realizados ou hfoteticalquot. Por exemplo, quando o sistema de negociação está gerando mais sinais do que podemos negociar devido ao poder de compra limitado, então temos que escolher quais negociações tomamos e quais nós ignoraríamos. Normalmente, esta seleção é parte do sistema de negociação e, na variável AmiBroker PositionScore, diz ao backtester quais posições são preferenciais e devem ser negociadas. No teste de randomização, em vez de usar algum PositionScore analítico determinável, você usa um aleatório. Se houver mais sinais para posições abertas do que poderíamos tomar, esse processo levaria a escolhas de comércio randomizado. Agora, usando a função Optimize () e PositionScore aleatório, podemos executar milhares dessas picaretas aleatórias para produzir o teste de randomização de Monte Carlo: step Optimize (passo 1. 1. 1000. 1) 1000 backtests com seleções de comércio aleatório do universo amplo (certifique-se Você executa isso em grandes listas de exibição) PositionScore mtRandom () O teste de aleatorização tem uma grande desvantagem: não pode ser usado em muitos casos. Quando o sistema não produz sinais suficientes de cada barra, não há muito (se houver) para escolher. Além disso, mais importante ainda, a randomização de MC faz uma suposição falsa de que todas as oportunidades de oferta (sinais) são iguais. Em muitos casos eles não são. Muito frequentemente, nosso sistema comercial possui uma maneira específica e determinista de escolher negócios de muitas oportunidades por algum tipo de ranking. Quando o sistema está usando uma pontuação (rank) como um componente central do sistema (os sistemas rotativos fazem isso) - se você substituir a pontuação analítica com o número aleatório, você está apenas testando o ruído branco e não o sistema. Testando o Simulador do Sistema Esta é, de longe, meu Ferramenta de troca mais favorita e tenho o prazer de compartilhá-lo com você. Ele fornece uma prova empírica de que a negociação rentável não depende unicamente de uma alta porcentagem vencedora. Esta ferramenta é um dos recursos incluídos no software de mesa que vem com meu curso de troca de swing. Experimente, tenho certeza que você concordará que é um abridor de olho. Como usar esta ferramenta. 1. Digite os valores para a relação WinLoss e Win Probability (3.0 seria uma relação winloss de 3 a 1 e .50 seria uma probabilidade de 50 vitórias) 2. Digite as 8220 linhas sugeridas Qty8221 para desenhar várias curvas de equidade 3. Clique no 8220 Generate 8221 Botão para gerar curvas de equidade simuladas Obtendo erros de Java8230prenda este vídeo para remediar8230 Perguntas freqüentes O que esta ferramenta mostra Esta ferramenta simula uma curva de equidade de sua conta no longo prazo depois de aplicar sistematicamente os parâmetros conhecidos de Win Probability e WinLoss de resultados de negociação. Cada curva de equidade consiste em cerca de 385 trades, que é uma amostra estatisticamente significativa. O gerador aleatório decide (como o mercado faz) com uma determinada probabilidade se você ganha ou perde em um determinado comércio. A trajetória da curva de equidade é então gerada. 100 é o ponto de partida para que quaisquer linhas acima sejam lucrativas. O que é um parâmetro 8220WinLoss ratio8221 Divida seu vencedor médio pelo seu perdedor médio e você obtém uma relação WinLoss O que é um parâmetro 8220Win Prob8221 Este é o número que representa a probabilidade de um comércio vencedor do seu sistema comercial. Por exemplo, se você trocou 100 vezes e ganhou 61 negócios, então a probabilidade de ganhar é de cerca de 61 ou 0,61. O que é um parâmetro 8220Lines Qty8221 Esta é uma abreviatura para a quantidade de 8220Lines8221. Este é o número de curvas de equidade a serem geradas e plotadas simultaneamente. Esse recurso oferece uma oportunidade para ver os cenários do 8220 o que é if8221 para qualquer nível de sorte 8217. Em outras palavras, mesmo seu sistema vence em 99,9 vezes, a chance não-zero de chance de que todos os seus negócios possam perder, por exemplo, 10 vezes em uma partida. Quais são os 8220Kelly Val8221 e 8220Math Expect8221parameters Kelly Value e Expectativa Matemática do sistema comercial, respectivamente. O primeiro determina a porcentagem de seu capital que você deve colocar em um único comércio, a fim de maximizar o desempenho global da conta em um longo prazo e minimizar os riscos de ruína. O segundo é interpretado dessa maneira. Se for positivo do que historicamente seu sistema ganha, em média, se for negativo, é melhor você procurar outra estratégia. Ambos são bastante complicados, mas aqui vai8230. O Kelly Criterion surgiu do trabalho de John Kelly no AT038T8217s Bell Labs em 1956. Suas fórmulas originais trataram o ruído do sinal de transmissão telefônica de longa distância. Mas a comunidade de jogos de azar rapidamente entendeu que a mesma abordagem pode ajudá-los a calcular a quantidade ideal para apostar em um cavalo e a melhor maneira de tirar proveito de sobreposições e sobposições, maximizando o crescimento do seu bankroll no longo prazo. Hoje em dia, o Kelly Criterion é um sistema reconhecido de gerenciamento de dinheiro e sempre que a questão do ótimo tamanho de apostas aparece em handicapping ou livros de gerenciamento de dinheiro, você sempre vê a fórmula Kelly mencionada. A fórmula Kelly8217s é. Kelly W 8211 (1-W) R Kelly percentual de capital para ser colocado em um único comércio W Porcentagem histórico de ganhos de um sistema de negociação R Histórico Médio Rácio WinLoss A matemática por trás do sistema é bastante complicada. O documento original da Kelly8217s é todo menos ilegível para as majores não matemáticas. Para obter informações mais aprofundadas sobre o uso do valor Kelly8217s no estoque e no investimento a longo prazo, leia a seguinte literatura (ebooks gratuitos): Explicação matemática explicada (usando um exemplo de roda roulette) Na roleta há 36 números, zero duplo e O espaço em branco. Isso faz 38 espaços para apostar. Cada aposta custa 1 para jogar. O vencedor paga 35. Para calcular a expectativa matemática da roleta, faça o seguinte: Multiplique a probabilidade de ganhar pelo que ganha quando você ganha. E a partir disso, você subtrai a probabilidade de perder pelo custo de cada aposta. A diferença é a expectativa matemática. Se for positivo, é uma aposta justa. Se for negativo, você não joga. (138) x (35) (3738) x (1) expectativa matemática de jogar roleta. (3538) (3738) (-238) ou (-119). Então, no caso da roleta, a melhor aposta não é jogar

No comments:

Post a Comment