Tuesday 17 July 2018

Forex trading php script


Ciclo de negociação de notícias Alguém está ciente de todos os scripts de negociação de notícias aqui que teriam grandes dias de notícias e horários pré-programados. A maioria das novidades de EA que viam exigem a inserção manual de futuros tempos de notícias, o que faz backtesting impossível. Eu estava pensando em um script ou código que teria os principais dias e tempos precodificados. Em seguida, crie estratégias em torno daqueles tempos com EAs novos ou existentes. Qualquer um consciente do código existente para começar. Eu não me importaria inserir manualmente todos os principais dias e horas de notícias para o mês de antecedência para começar, mas, idealmente, quero algo que leva os dias e as notícias nos códigos. O que traz a questão: segunda-feira 26 de agosto no XX: XX é fácil de codificar antecipadamente, mas como um codificaria a 4ª segunda-feira de cada mês como um evento predefinido. Qualquer idéia de lógica ou código para enfrentar isso. Isso traz a questão: segunda-feira 26 de agosto em XX: XX é fácil de codificar antecipadamente, mas como um codificaria a 4ª segunda-feira de cada mês como um evento predefinido. Qualquer idéia de lógica ou código para enfrentar isso Ive jogou isso juntos e você pode usar ou adaptar alguns Do que você quer. Obviamente, se você usasse esse tipo de coisa no testador de estratégia, o tempo seria apenas o mais curto possível. O que traz a questão: segunda-feira 26 de agosto no XX: XX é fácil de codificar antecipadamente, mas como um codificaria a 4ª segunda-feira de cada mês como um evento predefinido. Qualquer idéia de lógica ou código para enfrentar isso. The ReturnDay (int count, string Dow, datetime start), a função aqui fará isso. Por exemplo, para obter o valor de data e hora MT4 da 4ª segunda-feira em dezembro de 2017 (ou seja, a 4ª segunda-feira após 1º de dezembro de 2017): ReturnDay (4, quotMonquot, StrToTime (quot2017.12.01quot)) Por exemplo, para retornar a 4ª segunda-feira Em cada mês em 2017: para (int i1 ilt12 i) Imprimir (DateToStr (ReturnDay (4, quotMonquot, StrToTime (quot2017.quotNumberToStr (i, quotZ2quot) quot.01quot)), quotw Dn YH: I: Squot)) Automatizado Negociação Parte 3: o roteiro do robô de 100 pips por dia O curso de negociação automatizado finalmente terminou. As primeiras duas partes já foram publicadas aqui há algum tempo: a terceira e última parte contém duas lições. Ele explica pela primeira vez como usar algoritmos de aprendizado de máquina para detectar padrões de preços rentáveis ​​para negociação automática de ações de preço. A última lição é sobre a programação de um robô de comércio de qualidade comercial com alguns números de desempenho impressionantes: - 95 vitórias. - lucro médio de 100 pips por dia - garantido. - cerca de 1000 rendimentos anuais sobre o capital. - verificado pelo MyFXBook com 1 ano de negociação ao vivo em uma conta real. Todo o código está incluído. O método de troca usado por este roteiro robô até agora nunca foi publicado quanto ao meu conhecimento. Para entender as lições, você precisará conhecer as duas primeiras partes do curso. Se algo não estiver esclarecido, pergunte. Posso ler as lições finais aqui passo a passo nos próximos dias. Membro Comercial Juntado em setembro de 2017 141 Posts Bob: Rápido, feche a porta Talvez tenha sido somado. Alice: O que aconteceu Bob: Alguém acabou de revelar o segredo comercial final para mim. Alice: Realmente Bob: Sim. É um método de troca de preço. Preciso que você programe isso imediatamente. Alice: ação de preço O que é Bob: você não usa nenhum indicador. Você troca apenas quando o padrão de vela de preço está certo. Você compara o aberto, alto, baixo e fechado da última vela com o aberto, alto, baixo e fechado das velas anteriores - esse é o padrão. É tudo o que você precisa. Alice: Hmm. Eu li que o japonês usava padrões de vela para negociar o mercado de arroz. Alguns padrões obtiveram nomes engraçados como QuotThree Little Bearsquot ou algo assim. Mas isso foi há 300 anos. Bob: Claro que você não trocará hoje com padrões japoneses de cachos de arroz se quiser manter seu dinheiro. Mas eu conheço um cara chamado Bert no McDuck Capital. Ele encontrou alguns padrões de vela novos que funcionam para o mercado Forex. Ele disse que é como uma slot machine que sempre ganha. O padrão aparece e o dinheiro sai. Bert ganhou um bônus louco e, desde então, McDuck negocia ação de preço com seus padrões. Alice: Então, você quer que eu escreva um script que verifique esses padrões e, em seguida, acione um sinal comercial. Não deve ser um problema. Bob: Bem, há um problema. Não conheço os padrões. Só sei que eles são feitos de três velas diárias. Como eles se parecem, é o segredo. Bert disse que tinha que me matar quando me falou os padrões. McDuck é muito sério nesse assunto. Alice: Hmm. Bob: Você não consegue descobrir os padrões você mesmo. Se um cara da McDuck os encontrou, eu acho que eu também posso encontrá-los. Mas por que eles funcionam, quero dizer, por que um movimento de preços deve ser precedido por um certo padrão de vela. Bob: Nenhuma idéia. Mas esse método funcionou para o mercado de arroz japonês. Talvez alguns grandes comerciantes acordem pela manhã, compare os preços de hoje, ontem e no dia anterior, e depois decidam se eles compram ou vendem sempre da mesma maneira. Alice: se isso estabelecer um padrão, posso aplicar uma função de aprendizado da máquina. Ele passa por preços históricos e verifica quais padrões de vela geralmente precedem um movimento de preços para cima ou para baixo. Bob: Isso será caro Alice: A busca de padrões de velas Não. Ainda assim, estou com medo de ter que carregar mais do que a última vez. Bob: Por que Alice é essa: taxa de risco. Eu posso ser morto ao programar esse script. Membro comercial Inscrito em setembro de 2017 141 Posts Esta é a primeira versão do script Alices que usa inteligência de máquinas para negociação de ações de preço. Pode detectar um sistema em padrões de vela e, em seguida, usar os padrões mais lucrativos para um sinal comercial. Para este script, você precisará da mais nova versão do Zorro, 1.10. Você pode baixá-lo no zorro-trader. Se você possui uma versão antiga, atualize-a baixando o novo com o mesmo link de download e instalando-o na mesma pasta. Quando você fez as primeiras partes do curso, muitas linhas neste código já devem ser familiares, mas também há alguns conceitos novos, especialmente as funções assessorLong e advisShort. Bem, passe por eles em detalhes amanhã. Membro comercial Inscrito em setembro de 2017 141 Posts A função de aconselhamento é o algoritmo de aprendizado da máquina. Parece uma condição de entrada estranha para um longo comércio: se (recommendLong (PATTERN2,0, priceHigh (2), priceLow (2), priceClose (2), priceHigh (1), priceLow (1), priceClose (1), Preço (1), preço (1), preçoFechar (1), preçoHigh (0), priceLow (0), priceFechar (0)) gt 30) enterLong () Alice chama advisLong com o método PATTERN e High, Low e Feche os preços das últimas 3 velas. Se adviceLong retornar um valor acima de 30, um comércio longo é inserido. Mas quando isso acontece No modo de treinamento, a função advisLong sempre retorna 100. Então, um comércio sempre é inserido. A função armazena um instantâneo de seus parâmetros de sinal - neste caso, 12 sinais dos preços Alto, Baixo e Fechar das últimas 3 velas - em uma lista interna. Em seguida, aguarda o resultado do comércio, e armazena o lucro ou perda do comércio junto com o instantâneo do sinal. Assim, após o treino, o Zorro possui uma longa lista interna contendo todos os instantâneos de sinais e seus lucros ou perdas comerciais correspondentes. Os sinais são então classificados em padrões. Alice usa o método de classificação PATTERN2. Divide os sinais em dois grupos iguais, cada um com 6 sinais. O primeiro grupo contém os preços das duas primeiras velas da sequência de 3 velas: E o segundo grupo contém os preços das duas últimas velas: Observe que a vela do meio, com deslocamento 1, aparece em ambos os grupos. O preço aberto não é usado nos sinais porque as moedas são negociadas 24 horas por dia, então o fechamento de uma barra diária normalmente é idêntico ao aberto da barra seguinte. O uso do preço aberto enfatizaria os padrões atípicos e finais, o que não é desejado. Dentro de cada grupo de sinais, Zorro agora compara cada sinal com todos os outros sinais. Isso gera um enorme conjunto de resultados maiores, menores ou iguais. Esse conjunto de resultados de comparação classifica um padrão. Não importa se priceHigh (2) for muito menor ou apenas um pouco menor do que o preço High (1) - o padrão resultante é o mesmo. Os padrões dos dois grupos agora são colados para formar um padrão único. Ele contém todas as informações sobre todas as comparações de preços dentro da primeira e segunda e dentro da segunda e da terceira vela, mas o padrão não contém nenhuma informação sobre como a primeira vela se compara com a terceira. Bert disse a Bob que é o melhor para negociar ações de preço para comparar apenas velas adjacentes - portanto, os dois grupos de padrões independentes. Se Alice tivesse procurado padrões de 4 velas, o galpão usava três grupos. Depois que o padrão foi gerado, o Zorro verifica a frequência com que aparece na lista e resume todos os lucros ou perdas. Se um padrão aparecer com frequência e com lucro, ele é considerado um padrão lucrativo. Zorro remove todos os padrões não lucrativos ou insignificantes da lista - padrões que não têm uma soma de lucro positiva ou aparecem menos de 4 vezes. Os padrões restantes são armazenados nos arquivos workshop7EURUSD. rul na pasta Dados - um arquivo por ciclo de caminhada para frente. Esse arquivo parece assim: podemos ver que qualquer linha da lista começa com uma combinação de letras estranhas, como FCDEABFACEBD. Essa combinação é o nome padrão do padrão que representa o conjunto de resultados de comparação. O número ao lado do nome é a freqüência do padrão - FCDEABFACEBD apareceu 25 vezes no período de treinamento. O seu lucro médio por comércio foi de 4.334. E o desvio padrão dos lucros foi de 11.562. A freqüência, o lucro médio e o desvio padrão são usados ​​mais tarde pelo Zorro para calcular a proporção de padrões de informação. Isso acontece quando testar ou negociar a estratégia. A função advisLong gera um padrão dos sinais atuais e o compara com os padrões armazenados no arquivo. rul. Se nenhum padrão armazenado corresponder ao atual, a função retornará 0. Caso contrário, retorna o índice de informações de padrões multiplicado por 100. Quanto maior o índice de informação, mais lucrativo é o padrão. Claro, os padrões com alta relação de informação são menos freqüentes. Portanto, o limite de entrada comercial deve ser um compromisso entre rentabilidade padrão e freqüência. Alice usou um limite de 30 aqui, o que significa que um comércio é inserido para qualquer padrão com relação de informação acima de 0,3. A negociação curta funciona da mesma maneira: se (aconselhar Curto (PATTERN2,0) gt 30) enterShort () A chamada advisShort não possui parâmetros de sinal. Nesse caso, a função usa os mesmos sinais que o último aviso, o que foi o aviso prévio. Desta forma, as listas de sinais longos não precisam ser escritas duas vezes. Amanhã, percorra o resto do script. O reconhecimento de padrões é uma das poucas funções de aprendizado de máquinas que funcionam para negociação com uma configuração relativamente simples. Não hesite em perguntar aqui se algo não está claro com este método. Membro comercial Juntou-se para setembro de 2017 141 Posts Existem alguns pré-requisitos para negociação com padrões de vela - vamos ver o resto do código: StartDate 2002 BarPeriod 2460 NumWFOCycles 5 NumWFOCycles ou algum método de teste fora de amostra semelhante é obrigatório para este tipo de estratégia . Todos os sistemas de aprendizagem de máquinas tendem a superar o excesso, de modo que qualquer resultado na amostra de padrões de preços, árvores de decisão ou préceptos não tem sentido. A análise de padrões também precisa de tantos bares quanto possível para encontrar padrões significativos. Oversampling não pode ser usado aqui porque os preços High, Low e Close dependem da barra de inicialização e final - as barras reaproveitadas produziriam padrões muito diferentes. Então, Alice precisa usar o período de simulação máximo possível, que é a partir de 2002, quando o EUR foi introduzido como substituto para as moedas européias. (Se os dados de preços de um determinado ano não estiverem incluídos no programa Zorro, ele pode ser baixado automaticamente do servidor intermediário ou com o pacote histórico de preços da página de download Zorro). Pelo mesmo motivo, Alice usa poucos ciclos WFO para obter grandes períodos de treinamento. A bandeira RULES é necessária para gerar padrões de preços com a função de aconselhamento. TESTNOW executa um teste automaticamente após o treinamento - isso economiza um clique no botão ao experimentar diferentes métodos de busca de padrões. A próxima parte do código se comporta diferente no treinamento e no modo de teste ou de comércio: o trem é verdadeiro no modo trem. Neste modo, o sinalizador HEDGING está configurado, permitindo abrir posições longas e curtas ao mesmo tempo. Isso normalmente não faz sentido, mas é necessário aqui para treinar os padrões. Caso contrário, as entradas de comércio após o aconselhamentoLong aconselharão que o início feche as posições opostas e, assim, atribua valores de lucro lucrativos errados aos padrões. TimeExit limita a duração de uma troca, neste caso a 5 barras. Assim, o lucro ou a perda de um comércio é sempre determinado após 5 barras e atribuído ao padrão que existia quando a transação foi registrada. A próxima parte do código é executada quando o Train não é verdadeiro, isto é, no modo Test ou Trade: o sistema normalmente fecha sua posição quando ocorre um padrão de vela oposto. Existem duas outras condições de saída: uma parada relativamente distante - apenas por estar no lado seguro em caso de choque de preço - e uma saída programada após 10 bar. A saída temporizada é usada por causa do método de predição. Ele usa trades de 5 barras, então o horizonte de previsão é de uma semana. Algum tempo após o horizonte de previsão, neste caso, após duas semanas, o preço provavelmente perderá qualquer correlação com o padrão de preços de 10 barreis atrás. Manter o comércio aberto por mais tempo não faz sentido. Muitas vezes, é melhor limitar o tempo de troca com um método final, por exemplo, com o TrailStep. Mas aqui uma saída temporizada é usada por causa da simplicidade. Agora, o lucro que podemos conseguir com os padrões aprendidos da máquina comercial. Clique em Treinar. Dependendo da velocidade do PC, Zorro precisará de alguns segundos para executar os cinco ciclos WFO e encontrar cerca de 100 padrões rentáveis ​​em cada ciclo. Clique em Resultado para a curva de equidade: Embora o lucro anual de cerca de 90 parece não muito impressionante, os padrões de preços nos proporcionam uma curva de equidade ascendente relativamente estável e resultados muito simétricos para negociação longa e curta. No entanto, há um método para mais do dobro do lucro anual da negociação de ações de preço - e esse método corre o risco. Bom lidar com isso amanhã. Membro comercial Junte-se a setembro de 2017 141 Posts Ok, agora vamos ver o que podemos fazer para tornar este sistema de negociação de ações rentável ainda mais rentável. Uma maneira poderia ser a eliminação do intervalo do fim de semana. Quando um padrão de preço lucrativo aparece durante a semana e leva a uma negociação a ser inserida na sexta-feira, o fim de semana está entre o padrão eo resultado comercial. Isso pode estragar o poder preditivo do padrão, ou torná-lo pelo menos menos preditivo do que os padrões que imediatamente precedem os negócios. Vamos modificar o script e evitar os negócios de sexta-feira: se (advertirLong (PATTERN2,0, priceHigh (2), price Low (2), priceClose (2), priceHigh (1), priceLow (1), priceClose (1), priceHigh (1 ), PriceLow (1), priceFose (1), priceHigh (0), priceLow (0), priceFechar (0)) gt 30 e dow () FRIDAY) enterLong () if (adviceShort (PATTERN2,0) gt 30 e dow () SEXTA-FEIRA) enterShort () A função dow retorna o dia da semana e pode ser usada para estabelecer diferentes comportamentos comerciais antes e depois dos fins de semana. Trem, Teste, Resultado: A curva de equidade agora parece definitivamente mais agradável, e também melhor é o lucro anual de 200. Melhorar um sistema desta forma tem um perigo - especialmente quando tempo, data ou critérios ad hoc semelhantes são usados ​​para condições de entrada adicionais. Quem pode dizer que o melhor lucro não é apenas por acaso, resultado de uma superposição. Certo, temos uma razão racional para não entrar em negociações na sexta-feira. No entanto, tal motivo é rapidamente encontrado em retrospectiva. O script de ação de preço funciona melhor quando o comércio de sexta-feira é impedido, e nós supomos que isso é por causa da diferença de fim de semana. Mas podemos usar um argumento semelhante para não negociar na segunda-feira. Evitar os negócios de segunda-feira, no entanto, não melhora a curva de patrimônio. Por que não ninguém realmente pode dizer. Alguns comerciantes acreditam que um determinado recurso só deve ser negociado durante suas principais horas de mercado, porque então o volume de negócios é o mais alto e há menos valores abertos. Conseqüentemente, eles trocam o GBPUSD somente durante o horário comercial da Bolsa de Valores de Londres. Outros comerciantes acreditam que um ativo só deve ser negociado fora de suas principais horas de mercado, pois os mercados são menos efetivos. Eles trocam o GBPUSD apenas quando a noite em Londres. Algumas estratégias funcionam melhor com o primeiro método, alguns com o outro - e, consequentemente, seus autores às vezes deram a primeira e às vezes a outra explicação. Qual é o direito Quanto você desenvolver estratégias, mais você perceberá que a teoria sobre o comportamento do mercado é inútil. Apenas importa o desempenho do teste. Mas há muitas armadilhas que levam a resultados excessivos e otimistas. Você não pode sempre evitar essas armadilhas. Mas você deve estar ciente de que eles estão lá. Agora, um breve resumo do que aprendemos nesta lição: 9658 Os padrões diários de vela podem ter poder preditivo sob certas circunstâncias. 9658 A função de aconselhamento gera regras de comércio com algoritmos de aprendizado de máquina. 9658 O teste fora da amostra é obrigatório para estratégias baseadas em AI. 9658 HEDGING permite abrir posições longas e curtas ao mesmo tempo. 9658 TimeExit limita a duração de uma negociação. 9658 A função dow retorna o dia da semana. 9658 Tenha cuidado ao melhorar um sistema com condições de entrada adicionais. Amanhã, comece com a lição final sobre a programação de um robô de alto lucro que supera praticamente todos os outros robôs comerciais que são discutidos nos fóruns de comerciantes. Um script de robô scam funciona de uma maneira muito diferente de uma estratégia comercial normal. A parte menos importante do script é o algoritmo do sinal de comércio. A maioria dos robôs usa aqui uma estratégia simples baseada em indicadores, como os sistemas encontrados publicados nos fóruns de comerciantes. O desenvolvedor de robôs geralmente sabe que não gerará lucro, mas isso não é importante por razões que logo se tornarão claras. Alice decidiu por uma abordagem ainda mais simples - esta é a sua primeira versão (taxa: 44,000): a estratégia entra em um comércio aleatório em qualquer barra. A função aleatória em 50 de todos os casos retornará um número que é maior que 0, portanto, desencadeando um comércio longo, caso contrário ele irá desencadear um curto comércio. Se a negociação não tivesse custo, esta estratégia teve uma expectativa de zero. Um clique no teste revela uma perda média de cerca de 3 pips por comércio. 3 pips são apenas o spread de corretores simulados, a diferença de preço Ask-Bid que sempre é perdida. Portanto, não há surpresa aqui. Este script de negociação aleatória obviamente não é lucrativo. Alice tem que proxeneta-lo. O primeiro passo é configurar alguns parâmetros do sistema e cumprir a demanda de Bobs da taxa de 95 vitórias: o robô deve trocar uma vez por dia, então Alice precisa de um período de barraira de 1440 minutos. Backtest é restrito para simular o ano de 2017 - o robô deve funcionar por apenas um ano, então não é necessário um backtest mais longo. Ele também não usa nenhum período de lookback, pois não há nenhum indicador ou outra função que precisaria de qualquer histórico de preços. Portanto, esta é a configuração dos parâmetros: BarPeriod 1440 StartDate 2017 NumYears 1 LookBack 0 As próximas linhas definem uma perda de parada a 200 pips a distância do preço atual e uma meta de lucro a 10 pips de distância: Stop 200PIP TakeProfit 10PIP Desta forma, o objetivo de lucro Será atingido 20 vezes antes do stop loss - o que significa que normalmente será atingido 20 vezes mais vezes. A partir de 20 negociações, 19 serão conquistados e apenas um será perdido - esta é a precisão 95 que o robô precisa para compartilhar a propaganda de Bobs. No entanto, para isso, Alice deve certificar-se de que qualquer comércio acabe por atingir a perda de parada ou a meta de lucro. Qualquer outra saída estragaria o 95. Outra saída acontece ao entrar em uma troca na direção inversa, que fecha automaticamente o comércio atual. Um método para evitar isso seria a configuração da bandeira Zorros HEDGING. No entanto, Hedging não é permitido aos cidadãos dos EUA, que são os principais compradores de robôs. Por não perder o mercado dos EUA, Alice impede a reversão do comércio apenas entrando em um novo comércio quando nenhum comércio está aberto: se (NumOpenTotal 0) se (random () gt 0) enterLong () else enterShort () A variável predefinida NumOpenTotal é a atual Número de negociações abertas. Um clique no teste revela que a versão atual do script tem, de fato, cerca de 95 taxas de ganhos. Claro que isso não melhora a sua rentabilidade. Embora 19 das 20 negociações sejam conquistadas, a perda do dia 20 obtém todos os lucros dos 19 vencedores antes. O único efeito da taxa de alta vitória é agora um padrão de dente de serra estranho na curva de equidade: podemos ver que as seqüências de negociações vencedoras de 1 dia causam partes da curva de equidade para aumentar linearmente até o ponto em que uma troca não está atingindo a Alvo de lucro no mesmo dia. Este comércio permanecerá aberto por mais tempo, possivelmente atingirá sua perda de parada e estragará a curva de equivalência patrimonial. Em termos de lucro, o sistema não é melhor do que a versão anterior. Mas Bob quer lucro de 100 pips por dia. Assumindo 250 dias de negociação por ano, o que significa um retorno anual de pelo menos 25 mil pips - o suficiente para despertar a expectativa de grande riqueza e vender muitos robôs. Alice pode ajustar o script para gerar 100 pips diários - lucro real, da negociação ao vivo - e isso com uma estratégia obviamente não lucrativa. Sim, ela pode. É a magia das estatísticas, em que bem se olha amanhã. Membro comercial Sessão de setembro de 2017 141 Posts Ok, vamos descobrir como obter lucro com negociação aleatória. A perda média de um comércio aleatório é o spread ou a comissão. Assim, um comércio por dia e 3 pips espalhados produzirá uma perda média de 750 pips por ano. Isso não significa que todos os comerciantes aleatórios receberão perda de 750 pips até o final do ano. Alguns podem acabar com uma perda maior, alguns mesmo com lucro. Deixamos a 3000 comerciantes algum capital inicial e a tarefa de entrar em negociações aleatórias, uma troca por dia, por um ano. Ao final do ano, juntaram os resultados em um gráfico de estatísticas. Será assim: Este gráfico de distribuição de lucro pode ser gerado com o script descrito abaixo. Executa 3000 ciclos de simulação de 1 ano da primeira estratégia de negociação aleatória Alices. O eixo x do gráfico exibe o lucro ou perda em pips no final do ano. O eixo y mostra o número de comerciantes que obtiveram esse lucro ou perda particular. Podemos ver que o maior grupo - cerca de 130 comerciantes - teve perda de 500 pips após um ano. Há também alguns comerciantes infelizes com perda de mais de 7000 pips, mas, por outro lado, bem no lado direito do gráfico, alguns fizeram mais de 7000 pips de lucro Sem dúvida, esses caras estão se considerando comerciantes geniais e se gabam com Seu sucesso em fóruns de comerciantes. Essa distribuição de lucro é uma distribuição normal de Gauss - o famoso quotBell Curvequot. Parece um pouco instável porque 3000 amostras não são suficientes para um sino perfeito. Ao executar a simulação com muitos comerciantes, a curva será mais regular, mas o script precisará de mais tempo para ser executado. O pico da curva do sino é de -750 - a perda média a ser esperada com propagação de 3 pips por comércio. Você pode gerar esses gráficos de distribuição de lucros com o seguinte script: a estratégia Alices agora é chamada como uma estratégia de função externa1 - isso não é realmente necessário, mas facilita a experimentação com diferentes estratégias. Alguns comandos no script são novos. Utilizamos oversampling para executar a simulação de um ano muitas vezes: o excesso de amostragem é normalmente usado para aumentar o número de negócios em uma simulação. Aqui, o objetivo é apenas repetir a simulação 3000 vezes, um ciclo de simulação por comerciante. EXITRUN é uma bandeira de status Zorro que é definida na última corrida de cada ciclo, no final do ano. É (EXITRUN), então torna-se verdadeira e as seguintes linhas são executadas: int Passo 250 int Resultado chão ((WinLongWinShort-LossLong-LossShort) Etapa PIPCost) WinLongWinShort-LossLong-LossShor t é o resultado do ciclo de simulação atual. Não podemos usar WinTotal-LossTotal como na oficina 6, porque os valores totais são resumidos em todos os ciclos. Nós dividimos o resultado por PIPCost para convertê-lo em pips. Nós dividimos ainda mais por 250 (a variável Step) para distribuir os resultados entre 250 pips de barras largas. Se um resultado for 1 pip ou 249 pips não importa - ambos contribuem para a mesma barra. A função do chão converte o valor resultante em um inteiro que podemos plotar em um gráfico. Para isso, a função plotBar é usada: Isso desenha uma barra em um gráfico chamado quotProfitquot na posição do gráfico Result40. O gráfico sempre começa na posição 0, então o 40 tem o efeito de deslocá-lo para a direita e permitir que resultados negativos também sejam visíveis. O valor do eixo x pertencente a essa barra é StepResult. Nós dividimos o resultado por 250 para a distribuição entre barras, então essa multiplicação permite que o valor do pip de barras apareça no eixo x abaixo da barra. O 1 é a altura da barra. A altura é resumida (SUM), de modo que a altura da barra aumentou em 1 para cada ciclo cujo resultado corresponda ao valor das pipas de barras. BARS diz à função plotBar para traçar barras em vez de uma linha, e LBL2 diz para imprimir apenas cada 2º valor no eixo x - caso contrário, seria difícil de ler. O último parâmetro, VERMELHO. Dá a cor da barra. Você pode ver que o gráfico resultante acima também desmascara um mito generalizado na cena do comerciante. É um fato citado que 95 de todos os comerciantes privados perdem todo seu dinheiro já no primeiro ano. Não é verdade - pelo menos não com negociação aleatória. Você pode estimar a partir da distribuição de lucro que apenas cerca de 55 perder dinheiro (a soma das barras vermelhas com lucro negativo), enquanto 45 terminam seu primeiro ano com lucro. É claro que a maioria daqueles que tiveram 45 anos perderá em um dos anos seguintes quando continuem a negociar - mas demoraria 5 anos até 95 perderam o dinheiro. Amanhã, veja como Alice pode manipular essa distribuição de lucro para terminar o ano com 25.000 Pips lucro. O que acontece com a distribuição de lucros quando Alice usa seus objetivos de parada e lucro para obter a taxa de 95 vitórias. Apenas edite o script postado acima e substitua a chamada de estratégia1 () com strategy2 (). Qual é a versão stoptakeprofit: a distribuição de lucro resultante: o sino do sino ainda está em -750 pips, mas a distribuição agora é muito mais estreita e um pouco distorcida para o lado esquerdo. Restringir negociações com metas de stop e lucro elimina grandes vitórias e grandes perdas. Isso coloca limites superiores e inferiores ao resultado anual, espremendo o sino dos dois lados. Com o objetivo de lucro de 10 pips, nenhum comerciante pode ganhar mais de 1750 pips por ano, mesmo no caso improvável de que todas as negociações sejam conquistadas. No entanto, Alice precisa de um resultado anual de pelo menos 25 mil pips. Ela não pode fazer nada sobre a perda média de 750 pips. Mas ela pode manipular a curva de distribuição de lucros de forma que um grande número de comerciantes acabam com 25 mil pips. Para isso, Alice apenas adiciona 3 linhas mais à sua estratégia: var ProfitGoal 100BarPIPCost var ProfitCurrent WinLongWinShort-LossLong-LossShort Lots clamp ((ProfitGoal-ProfitCurrent) (7PIPCost), 1, 200) Este é um sistema de martingale. Tais sistemas são usados, mais ou menos escondidos, na maioria dos robôs. Na primeira, Alice determina um objetivo de lucro. Ela precisa de 100 pips por dia. Um dia é equivalente a um bar, então, em qualquer barra, o lucro acumulado deve ser de 100 pips vezes o número da barra. Isso é multiplicado por PIPCost para obter o resultado na moeda da conta em vez de pips e armazenado na variável ProfitGoal. O lucro atual é então calculado na próxima linha e armazenado na variável ProfitCurrent. A terceira linha é a martingale. O tamanho do lote é definido dependendo de quanto o lucro atual desvia do objetivo de lucro. Se estivéssemos muito abaixo do nosso objetivo, precisamos de um enorme tamanho para recuperar o atraso. O número de Lotes é calculado apenas para que o próximo negócio vencedor atinja o objetivo do lucro. Para isso, a diferença de lucro é dividida pelo lucro esperado por lote. O lucro por lote de um comércio vencedor é 10 pips lucro alvo menos 3 pips espalhados. O resultado, 7 pips, é novamente multiplicado pelo PIPCost para convertê-lo em moeda da conta. A função de grampo limita Lotes entre 1 e 200. Precisamos de pelo menos 1 lote por comércio, e não queremos exceder 200 lotes por não serem óbvios demais ou arriscar perdas loucas. Ao analisar estratégias de robô, pode-se notar tal sistema de martingale a partir de picos indicadores no tamanho do lote. Por esse motivo, os robôs ou provedores de sinal geralmente aumentam não o número de lotes, mas o número de negócios, que é menos suspeito. Se você selecionar o script de estratégia modificado e clicar em Testar repetidamente, cada clique agora gerará uma curva de equidade diferente. A maioria parece assim: mas, surpreendentemente, muitos se parecem com isto: esta é apenas a curva de equidade perfeita que Bob queria para o seu robô. É mesmo um pouco perfeito demais: sua inclinação direta vem da variável ProfitGoal que apenas aumenta linearmente com o número da barra. Para realmente vender o robô, Alice teve que modificar a fórmula de metas de lucro para permitir que a curva apareça mais acidentada e realista. Nós deixamos isso como um exercício para o leitor. Permita agora copiar a estratégia modificada em nosso script de distribuição de lucro, para determinar a distribuição de lucro (mude o Passo para 2500 para obter uma escala maior): Esta distribuição não se assemelha mais a uma curva de sino. Embora a perda média ainda esteja em -750 pips, a distribuição obteve uma cauda esquerda extremamente longa (a barra alta na extremidade esquerda apenas representa a soma de todas as barras que não cabem no gráfico) e um pico afiado à direita no 25.000 ..30.000 pips área de lucro. Dos nossos 3000 comerciantes, cerca de 1100 ganharão mais de 25 mil pips com este robô Infelizmente, cerca de 1600 comerciantes sofrerão perdas, algumas até perdas extremas em excesso de 200 mil pips. Mas esperamos que uma chamada de margem misericordiosa os salve cedo. O gráfico de distribuição de lucro é um pouco enganador. Na verdade, o ano não terminará com 1100 comerciantes de sorte. Muitos deles terão mordido a poeira antes, porque suas curvas de equidade, embora atingindo o objetivo de 25.000 pips no final, passariam por disparos extremos entre eles e eliminariam sua conta. Vamos ver quantos comerciantes não encontrarão chamada de margem e alcançar o objetivo final sem problemas. Para isso, edite o script novamente e modifique a condição de entrada comercial de se (NumOpenTotal 0 e ProfitCurrent gt -250) Todo comerciante agora se abstendo de continuar a negociar quando sua perda exceder 250. Isso altera a distribuição de lucro de forma notável: cerca de 500 comerciantes agora deram No caminho, visível no pico alto da barra de -5000 pips que representa a perda de 250 na conta de lotes simulados. A perda pode ser, naturalmente, maior quando o último comércio perdedor teve um grande tamanho de lote - é por isso que muitas barras são mesmo superiores a -5000 pips. De qualquer forma, 600 comerciantes ainda atingiram o objetivo final de 25.000 pips - e isso com um comércio totalmente aleatório. Então, Alice agora possui um script que realmente gera mais de 25.000 pips por ano. Há um pequeno problema - funciona apenas para 20 (600 de 3000) de seus usuários. A maioria dos 80 restantes também ganhará lucros nos primeiros meses devido ao sistema de martingale e à alta taxa de ganhos, mas perderá todo seu dinheiro até o final do ano. Bob will mercifully not mention this in his robot advertisement - but he needs something else instead. For selling the robot, at least one of those 600 profitable equity curves has to be verified on a real account by a trade verification service. For this purpose Bob will invest 10,000. Not, as you might think, for bribing the service to confirm a fake curve. No, they are certainly honest guys and wont accept bribes. The 10,000 are used in a different way, which well describe tomorrow.

No comments:

Post a Comment