Thursday 17 August 2017

Backtest forex mt4 programmers


Acelere seu MT4 Backtest Um punhado pequeno dos comerciantes gosta de triturar tantos como números como possíveis através do verificador histórico de MetaTrader. Embora eu não concordar necessariamente com essa abordagem para backtesting. Há uma série de coisas que se pode fazer para acelerar o processo. 1) Use as perdas de parada fixa e ter lucros para o backtest em vez de paradas furtivas. A execução em modo furtivo requer que a EA faça cálculos em cada único sinal para determinar se precisa ou não sair. Colocar os pedidos com o corretor elimina esta sobrecarga. 2) Se sua estratégia funciona fora de barras fechadas, em seguida, certifique-se de que sua estratégia só calcula valores de indicador uma vez por barra. Isso parece óbvio, mas muitos programadores permitem que isso aconteça por ignorância ou preguiça. Cenário: Compre quando a média de movimentação rápida cruzar e fechar acima da média de movimentação lenta A boa abordagem: Na primeira marca da nova barra, verifique quais foram os valores das médias móveis nas duas barras anteriores. Se parece que uma cruz ocorreu, saia de todos os comércios na direção errada e abrir novos negócios em consonância com o sinal. Ignorar todos os outros carrapatos nesta barra. A abordagem ruim: Calcule os valores de média móvel nas duas barras anteriores em cada único sinal. 3) Considere o uso de preços Open Only se sua estratégia permitir. Você não deve usar os preços abertos apenas se qualquer um dos seguintes se aplica à sua estratégia: Trades às vezes abrir e sair em uma única barra ou vela. Isso pode acontecer se o seu stop loss ou ter lucro é um pouco provável de ser atingido na primeira barra de um comércio aberto Trades não abrir no primeiro tick de um bar. As saídas podem ocorrer enquanto uma barra ainda está aberta. Isso não inclui paradas ou lucros. Deixar uma resposta Cancelar replyBacktesting Backtesting em Metatrader Depois de ter executado um backtest do seu Expert Advisor (EA) usando Metatrader, é importante interpretar com precisão e analisar os resultados do seu backtest. Na tela Testador de Estratégia, clique na guia 8220Results8221. Esta guia define cada comerciante que foi executado ou modificado durante o período de backtesting. Esta é a melhor maneira de certificar-se de que seu EA está colocando nos comércios apropriados. Ao lado da guia 8220Results8221, vemos a guia 8220Graph8221, que mostra o desempenho do EA em forma gráfica. Muitos comerciantes principalmente ver a força do seu desempenho EA8217s através da guia 8220Graph8221, mas isso pode ser muito enganador. A fim de realmente entender o desempenho da EA durante o backtest. Você precisa olhar para os dados apresentados na guia 8220Report8221. O número mais importante na guia 8220Report8221 é Qualidade de Modelagem, este número indica a precisão do seu modelo. Se você tem uma Qualidade de Modelagem de menos de noventa, então os resultados do backtest devem ser ignorados. Estreitamente relacionados com o Índice de Qualidade de Modelagem estão as Barras Não Mescladas. Idealmente, você deseja que este número seja zero, quanto maior o número de barras incompatíveis, menos a qualidade de modelagem. Manipular os dados históricos para melhorar a classificação da Qualidade de Modelagem será discutido em um vídeo futuro e está além do escopo desta discussão. O restante da guia de relatório dá uma idéia geral de quão bem a estratégia realizada. Informações como o número total de negócios, fator de lucratividade, levantamento máximo e informações sobre o número ea proporção de negócios vencedores e perdedores. A informação apresentada nesta tela dá aos comerciantes um modelo através do qual começar a análise de sua EA. A guia final é a guia 8220Journal8221, que lista tudo o que aconteceu durante o backtest. Idealmente, a página 8220Journal8221 deve corresponder perfeitamente à guia 8220Results8221. Se houver algum erro executando comércios, eles serão listados na guia 8220Journal8221. Esta guia é um ótimo lugar para olhar se algo parece fora sobre os resultados de um backtest. Desempenho de backtesting fraco pode freqüentemente ser explicado por erros ao entrar ou modificar ofícios. Se você quiser salvar os resultados do backtest para ver mais tarde, volte para a guia 8220Report8221. Clique com o botão direito do mouse em qualquer lugar na tela e clique em Salvar como relatório. Depois de salvar o relatório, uma janela será iniciada mostrando o relatório que você salvou. Isso trará todas as informações sobre o backtest em formato de página única no seu navegador padrão. Muitas pessoas afixaram seus sistemas de comércio neste fórum, mas a maioria dos sistemas está faltando algo essencial: eles não foram backtestados. Portanto, não há nenhuma maneira de saber se o sistema é rentável ou não. Um quotmanual backtestquot por eyeballing alguns gráficos ou tentar alguns comércios demo não pode dar qualquer informação útil. Conseqüentemente, você pode ver em cinco minutos com um backtest simples de 4 anos que a maioria dos sistemas postados aqui perderá dinheiro. Por outro lado, alguns deles podem gerar lucro notável. Mas como você sabe que eu acho que ninguém pode desenvolver um sistema bem sucedido, desde que ele não tem nenhum método para testá-lo. Que no entanto exige para programar o sistema como um EA, script, estratégia, seja qual for o nome. Heres o problema: a maioria dos comerciantes acho que a programação é muito difícil para eles. Mas isso não. Qualquer um pode aprender EA ou estratégia de programação em poucos dias, e pode então facilmente backtest seus sistemas ou até mesmo trocá-los automaticamente. Estou no processo de escrever um curso para isso. Eu espero de postar o curso aqui que eu recebo algum feedback sobre o que é fácil de entender e que não, para que eu possa melhorar o material. Vou postar a primeira parte aqui nos próximos dias. A primeira parte é apenas sobre programação de aprendizagem em C, e abrange variáveis, funções, ramos e loops. A segunda parte será sobre a programação de sistemas de comércio e cobrirá negociação de tendências, negociação de tendências contrárias, otimização, análise prospectiva, estratégias de carteira e gerenciamento de dinheiro. Ele usa alguns novos algoritmos de negociação, como filtros de freqüência. A linguagem C tem a vantagem de que você pode usar o conhecimento C para escrever EAs ou estratégias em muitas plataformas, como Ninja Trader, MT4, mesmo Tradestation etc, porque todas essas línguas são bastante semelhantes. O curso vai passar cerca de 2 semanas. O objetivo é desenvolver uma estratégia de portfólio com um sólido retorno anual sobre o capital. Pode haver uma terceira parte sobre o uso de inteligência artificial, tais perceptrons e árvores de decisão, mas ainda não terminou e vem em um momento posterior. Para o curso você precisará de algum programa para executar os exemplos de script e testar as estratégias. É chamado quotZorroquot e você pode baixá-lo gratuitamente de zorro-trader. Nós não usaremos MT4 para este curso, embora MT4 também usa C para seus EAs. Existem várias razões: MT4 requer algum material de código extra que é desnecessariamente difícil de aprender para um iniciante. MT4 carece também características essenciais para testar corretamente uma estratégia. A terceira razão é que MT4 tem um recurso escondido chamado quotVirtual Dealer Pluginquot, que pode ser usado por seu corretor para remover uma parte de seus lucros. Portanto, tendem a evitar MT4. No entanto, quando você está através deste curso você também terá o conhecimento básico para escrever um EA para MT4 se você quiser. Membro Comercial Registrado em Sep 2012 141 Mensagens Permite começar a trabalhar. No início, uma pequena teoria. O propósito de um script (ou EA, ou programa, ou o que quer que seja chamado) está dizendo ao computador o que fazer sob que circunstâncias. Um script consiste de variáveis ​​e funções - nesta primeira lição deixe-me explicar variáveis. Uma variável é um lugar na memória do computador (como um recipiente) que é usado para armazenar números, texto ou outras informações. Porque você não quer ter que lembrar onde no computador que variável é armazenada, qualquer variável tem um nome exclusivo thats usado no script. Algumas linhas de script de exemplo que definem variáveis: var Price var PercentPerMonth 1.5 // o interesse mensal int Dias 7 string Riqueza quotI am richquot bool Vencimento true Estas são algumas linhas curtas de código, mas podemos usá-los para aprender muitas coisas novas: 9658 Cada variável deve ser definida (programadores também dizem declarado) antes de ser usado. Temos diferentes tipos de variáveis: var para variáveis ​​com decimais, como preços ou taxas int para variáveis ​​que não têm decimais, como para contar algo string para texto e bool para uma espécie de chave alternada que é verdadeira ou falsa. Existem ainda mais tipos de variáveis ​​básicas, mas em scripts de negociação normalmente você encontrará apenas esses quatro. Se escrever esta linha no seu script: Dias 3 e você não definiu a variável chamada Dias antes, você receberá uma mensagem de erro. A única exceção são variáveis ​​que o Zorro já sabe porque estão pré-definidas no compilador. 9658 Qualquer variável pode receber um valor inicial no início, mas nós arent forçado a fazer isso quando o valor inicial não importa. Exemplo: int numbars 7 var limit 3.5 9658 Podemos adicionar nossos próprios comentários ao código. Sempre que encontrar duas barras //, Zorro irá ignorar as palavras que o seguem, até o fim da linha. Dessa forma, podemos adicionar informações úteis ao nosso código: int barwidth // a largura de uma barra em minutos ou podemos desativar temporariamente uma linha no script colocando duas barras na frente dela. Isso é chamado quotcommenting outquot uma linha, e enquanto a programação é usado com tanta freqüência que o editor de script tem dois botões extras para comentar e comentar dentro 9658 Cada definição ou qualquer comando em C precisa terminar com um ponto e vírgula. Muitos novatos se esquecem de adicionar quotquot no final de suas linhas de código, e isso também leva a uma mensagem de erro - não na linha com o ponto-e-vírgula em falta, mas na seguinte linha 9658 Cada nome de variável deve começar com uma letra ou com Um sublinhado. Aqui estão alguns nomes de variáveis ​​válidos: var AlohA var metoo var go42 var Iamb19 var 12345 Agora vamos dar uma olhada em alguns exemplos ruins: var ItoldYou var 1forall var 12345 Vou deixar você descobrir o que está errado nas definições acima. 9658 Os nomes de variáveis ​​são sensíveis a maiúsculas e minúsculas. Isto significa que se definimos um int desta forma: e depois usá-lo mais tarde no nosso código desta forma: mytradepositions 5 // ou Mytradepositions 5 // ou MYTRADEPOSITIONS 5 Zorro não vai aceitá-lo. 9658 Você pode definir várias variáveis ​​em uma linha. Isso economiza linhas e mantém seu código curto. Exemplo: var momentum, força, pontuação int largura 7, altura 14, profundidade 20 9658 Finalmente, as variáveis ​​devem ter nomes significativos. Embora seja possível definir uma pilha de variáveis ​​que se parecem com isso: var x32 var a125 var h345 var z34187 não é uma boa idéia fazê-lo desta forma. Você terá problemas tentando lembrar o que essas variáveis ​​fazem se você olhar para o script algumas semanas mais tarde. Se você quiser mostrar o seu script para outras pessoas, eles terão um tempo difícil tentando descobrir o que você queria fazer com seu código. Amanhã bem escrever um pequeno script de exemplo que faz algo com variáveis. Por favor, não hesite em perguntar aqui se algo não está claro ou mau explicado. Hoje, escreva bem nosso primeiro roteiro. Você precisará baixar o Zorro agora se você já não o fez. Após a instalação, inicie-o e veja isso: Clique na caixa de rolagem Script, vá até o fim e selecione Novo Script. Um editor de texto será aberto. Digite o seguinte: Agora, selecione Salvar como no menu Arquivo do editor de texto e salve-o sob um nome como quotmyfirstscript. cquot na subpasta quotStrategyquot de sua instalação Zorro. Quando você agora clicar em Zorros Script novamente, o nome quotmyfirstscriptquot deve aparecer entre os outros scripts. Selecione-o, pressione Test no painel Zorros e veja o que acontece na janela de mensagens. Se você fez alguma coisa bem, você deve ver uma mensagem como esta: Se você ver algo diferente na linha QuotResult, por favor, reclame aqui. Agora, edite os números nas linhas a e b e substitua-os por Salvar o script editado (Arquivo / Salvar ou Ctrl-S) e pressione Test novamente. Diga-nos se seu resultado é diferente de 17. Esse foi o nosso primeiro programa. Começando a fazer sentido, isso não é Parece que c é a soma de aeb tentar digitar vários valores para aeb e você vai se convencer. Agora vamos dar uma olhada no pedaço de script que transforma Zorro em uma espécie de calculadora simples. O script começa com uma função chamada main - tudo o que acontece em um programa está dentro dos parênteses alados de uma função. Mas bem vir a funções amanhã. Aqui nós nos concentramos em variáveis, e as próximas linhas já devem ser familiares do que eu disse acima: Podemos ver que as 3 variáveis ​​a, b, c são definidas, tal como descrito acima. As seguintes linhas são comandos: As variáveis ​​aqui obtêm um conteúdo que são definidos como 5 e 12. Agora, a seguinte linha é o núcleo do nosso script: Esta linha de código C parece ser simples também faz c igual à soma de um E b. É um comando para o computador adicionar o conteúdo das variáveis ​​aeb, armazenar o resultado na variável c. Os comandos são linhas no código que fazem algo, geralmente com variáveis. A última linha também é um comando, usado para exibir c na janela de mensagem: Vamos fazer uma pequena experiência. Encontre a linha de código c a b no editor e, em seguida, substitua o quotquot por um quotquot, o caractere times, para que a linha agora lê: Salve o script e pressione o botão Test novamente. O resultado faz sentido Você já dominou o básico do lite-C. Zorro multiplicou 5 por 12, exibindo o resultado correto: 60. Eu sei que não é ainda uma estratégia comercial o que estava fazendo aqui, mas estavam indo em algum lugar Então agora nós sabemos como adicionar e multiplicar valores que podemos usar quot-quot para subtrair dois Números ou quot / quot para dividi-los. Poderíamos substituir a linha que faz o cálculo c a b com expressões muito mais complexas. Mas bem salvar que para as próximas lições. Suficiente por hoje. Por favor, deixe-me saber se algo não foi claro ou difícil de entender. Eu acho que eu corro para o site zorro há alguns meses atrás, ao fazer uma pesquisa sobre c relacionadas struct ou funções para escrever o meu próprio backtest de negociação, na época não estava pronto para download ainda, mas parece um design elegante, com bom tutorial e O c como linguagem. Naquela época eu corro para o site, parecia um software já estabelecido, mesmo que eu queria saber por que o site começou há anos, mas ainda não está pronto para a implantação. Parece muito com o script amibroker. É a linguagem baseada em matriz Você é o desenvolvedor da plataforma que você deseja. O site Zorro está on-line desde algumas semanas apenas, mas nós tínhamos o manual do Zorro naquele endereço da web desde vários meses para os testadores beta. Zorro foi desenvolvido por uma equipe de programação de jogos, mas eu estava envolvido em projetar suas estratégias e escrever seu manual e tutorial. Sim, o idioma suporta matrizes e variáveis ​​de negociação são baseados em matriz. De volta ao trabalho. Esta lição introduzirá funções. Uma vez que você tem variáveis ​​e funções, você tem uma compreensão básica de como funciona um script. Quais são essas funções, de qualquer maneira Vamos ver um pequeno exemplo: Você vê o que eu vejo Uma função não é nada mais do que uma coleção de comandos C que são executados pelo computador um após o outro. Vamos ver algumas propriedades para estas funções: 9658 Uma função é normalmente definida usando a função palavra seguida pelo nome da função e um par de parênteses (). Os parênteses são usados ​​para passar variáveis ​​adicionais para a função bem aprender sobre isso mais tarde. No nosso caso, não passamos nenhuma variável, então eles estão vazios. 9658 O corpo da função (sua lista de comandos) deve ser escrito dentro de um par de suportes alados. O corpo consiste de uma ou mais linhas de código lite-C que terminam com um ponto e vírgula. Para maior clareza, os programadores geralmente recuam o código no corpo da função por alguns espaços ou uma guia, para deixar claro que ele está dentro de algo. 9658 Os nomes usados ​​para as funções seguem a mesma convenção de nomenclatura que para variáveis. Você não deve usar o mesmo nome para uma variável e uma função isso levará a erros. Se você puder ler este tutorial, espero que você saiba sua idade, também. Não em anos, mas em dias O que, você não sabe Ok, então vamos tentar escrever uma função que calcula o número de dias passados ​​por mim (ou você) na Terra. Eu sei como começar a escrever a palavra-chave função e, em seguida, o nome da função permite que o nome computedays: Eu não esqueci os parênteses após o nome da função e eu adicionei o primeiro suporte curly Vamos usar algumas variáveis, então wed melhor Defini-los agora: var myage 33 // sua idade (em anos) vai aqui var daysayear 365.25 Nada de novo até agora, certo Nós definimos duas variáveis ​​var e eles receberam valores iniciais, porque eu sei a minha idade em anos e também sei Que cada ano tem cerca de 365,25 dias. Agora vem a parte assustadora: como vou ser capaz de dizer ao computador para calcular o número de dias Como eu faria isso com uma calculadora de bolso Eu iria digitar algo como isto: Agora vamos dar uma olhada em nossas variáveis ​​se eu substituir 33 com Myage e 365.25 com daysayear. Eu vou ter algo parecido com isto: numberofdays myage daysayear Ok, então nossa função deve terminar assim: var numberofdays myage daysayear printf (quotI am. f dias oldquot, numberofdays) Eu me lembrei de adicionar o segundo suporte curly, então agora o corpo de A função é delimitada por dois parêntesis curvos necessários. Estou realmente curioso para ver se esta função funciona, então vamos testá-lo. Ative o Zorro e, em seguida, selecione Novo Script na lista Script. Aguarde até que o editor seja aberto. Em seguida, copie e cole as linhas abaixo na janela do editor. Selecione o script inteiro abaixo com o mouse, clique com o botão direito do mouse e escolha Copiar (ou pressione Ctrl-C), mude para o editor, clique com o botão direito do mouse na janela vazia chamada quotscript1quot e escolha Colar: O código parece bastante simples, Saber como trabalhar com essas variáveis, sabemos como adicionar comentários. Então vamos salvá-lo (File / Save As) na pasta Estratégia da instalação do Zorro, sob um nome como myscript2.c. Não se esqueça do quot. c quot no final - isso significa que este arquivo contém C código. Se você fez tudo certo, agora você deve encontrar myscript2 na lista Script. Selecione-o. Tempo para testar nosso script: Esta mensagem de erro significa que um script sempre precisa de uma função main () ou run () Sim, main é um nome de função predefinida. Se uma função é nomeada main. Ele será executado automaticamente quando iniciar o nosso script. A função chamada executar é especial para Zorro que contém a nossa estratégia de comércio e é executado automaticamente uma vez para cada período de tempo. Se um script não tem uma função main ou run, Zorro assume que você cometeu um erro e lhe dará essa mensagem de erro. Agora, vamos inserir uma função principal no final do script: O jeito que eu vejo, este código chama (o que significa que ele começa) nossa função computedays. Ok, agora que estamos aqui vamos ver como chamamos uma função: nós escrevemos seu nome seguido por um par de parênteses e, em seguida, terminamos a linha de código com um ponto-e-vírgula. Sons lógico, doesnt ele Dica importante: escrever as linhas de código para suas funções primeiro e chamá-los mais tarde. O computador lê o código da mesma forma que você lê um livro: ele começa com o topo da página de script e vai para baixo, lendo o código linha por linha. Se eu escrever meu script ao contrário, como este: o computador vai dizer: oh, thats função principal. Eu sei função principal eu preciso executá-lo cada vez. O que ele diz agora computedays (). O que está com esta função Eu não sei ainda Eu não sei o que quer de mim. Vou mostrar uma mensagem de erro e vou tirar o resto do dia: Não se esqueça de definir suas funções primeiro, caso contrário, o computador vai reclamar quando você tentar usá-lo. Amanhã bem olhar em funções mais de perto. Favor Reclamar aqui se algo didnt trabalho ou foi não claro. Um breve resumo das coisas que aprendemos ontem: 9658 Definimos funções escrevendo quot função name (.) Quot no script. 9658 Se uma função tem o nome main ou run. Ele é executado automaticamente. Todas as outras funções devem ser chamadas a partir de uma função já em execução a ser executada. Mas isso não é tudo o que uma função pode fazer. Ele também pode obter variáveis ​​da função chamadora e retornar o valor de uma variável. Vamos ver um exemplo de uma função que recebe e retorna variáveis. Para uma função retornar o valor de uma variável, basta escrever a variável - ou a expressão aritmética que calcula o valor - atrás de um comando de retorno. A função, em seguida, dá esse valor de volta para onde ele foi chamado. Você notou que nós definimos esta função não com a palavra-chave quot função quot, mas com quot var quot Mas é var não uma definição de variável Sim, mas quando uma função é esperada para retornar algo, é apenas definida com o tipo de retornado variável. Portanto, se uma função retorna uma variável do tipo int. Defina-o com int se ele retorna um var. Defini-lo com var. Ainda assim, o computador sabe a partir dos parênteses (..) que esta é uma definição de função e nenhuma definição de variável. Se uma função espera variáveis, coloque-as junto com seu tipo na definição da função entre esses parênteses. Se houver várias variáveis, separe-as por vírgulas. Quando você chamar essa função, basta colocar os valores das variáveis ​​que você deseja passar para a função entre os parênteses. A função então usará essas variáveis ​​como qualquer outra variável para calcular um resultado. Se uma função retorna algo, você pode apenas colocar uma chamada para essa função em vez da variável que retorna. Isso soa meio complicado Vamos tentar de imediato com a nossa nova função computedays. Este é o nosso novo script: Weve apenas definir a nossa variável numberofdays direto do valor retornado por computedays (myage). Isso torna nosso código mais curto e mais elegante. Ainda assim, o resultado é o mesmo: Agora o que é este misterioso printf (..). Ele tem parênteses anexados, por isso é obviamente também uma função que chamamos para exibir o nosso resultado. No entanto, não definimos em nenhuma parte essa função, é uma função que já é quotbuilt-inquot em C. Assim como as variáveis ​​incorporadas que mencionamos no último workshop, existem também muitas funções já construídas na linguagem de script. O quotI am. f dias oldquot, numberofdays são as duas variáveis ​​que passamos para a função printf. A primeira variável é uma string. Usado para exibir algum texto: quotI am. f dias oldquot. A segunda variável é uma var. número de dias . As variáveis ​​passadas para as funções são separadas por vírgulas. Você pode ler detalhes sobre a função printf no manual do Zorro: Clique em Ajuda e, em seguida, navegue até as funções quotScript / Input / Output / printfquot. Por enquanto, só precisamos saber que o estranho quot. f quot na string é um espaço reservado. Significa: a função insere aqui o valor - sem decimais - da var que é passada para a função. Portanto, se numberofdays tem o valor 12045. Nossa função printf imprimirá quotI am 12045 days oldquot. Podemos tornar nosso código ainda mais curto. Lembre-se, se uma função retorna uma var. Podemos apenas fazer uma chamada dessa função em vez da própria var - mesmo dentro dos parênteses de outra função. Bem, salve uma variável e uma linha de script desta forma. Os programadores fazem tais atalhos o tempo todo porque são preguiçosos e preferem digitar como menos código possível: o suficiente para hoje. O próximo workshop nos ensinará como um script pode tomar decisões (chamados ramos em computerish). Ser capaz de decidir algo é importante para a negociação. Então agora estávamos indo em passos enormes para escrever nossa própria estratégia de comércio. Por favor, deixe-me saber se algo não estava claro com passar variáveis ​​para e de funções. Ok, estou interessado, mas whos dados que você está usando Se o seu fxcm demo, em seguida, onde é o benefício sobre o uso de fxcms metatrader Meu maior problema com back testar em mt4 é a confiabilidade dos dados como você pode executar o mesmo ea com as mesmas configurações em diferentes Brokers e obter um resultado diferente. Estou usando gráficos diários também para que você não teria pensado que haveria muita diferença. Eu uso dados de todas as fontes possíveis, mas você está certo - pode haver uma enorme diferença e pode ter várias razões. O primeiro problema é usar MT4, como MT4 não é adequado para backtesting. Simular um sistema ao longo de um par de anos sozinho não vai te dizer muito sobre seu desempenho um backtester sério é combinado com um otimizador de parâmetros e análise de andamento para que você veja como seu sistema reage em modificações de parâmetros. Só então você pode julgar se seu desempenho é estável ou não. Existem também vários outros recursos que um backtester precisa. Os backtesters das plataformas as mais profissionais, tais como Ninja, Tradestation, ou Zorro naturalmente, são aprovados, mas MT4 não é nenhuma ferramenta profissional para negociar automatizado e backtesting em minha opinião. O segundo problema é quando suas barras diárias começam. Para resultados comparáveis, eles devem começar ao mesmo tempo, f. i. À meia-noite, e você deve ser capaz de configurar essa hora de início em sua plataforma de teste. Terceiro problema é que a derrapagem, comissão, spread e rollover deve ser simulado em sua plataforma, e eles dependem do corretor. Spread e derrapagem têm forte influência sobre o desempenho de curto prazo de negociação e rollover também tem influência perceptível no longo prazo comércios. Eu uso dados de todas as fontes possíveis, mas você está certo - pode haver uma enorme diferença e pode ter várias razões. O primeiro problema é usar MT4, como MT4 não é adequado para backtesting. Simular um sistema ao longo de um par de anos sozinho não vai lhe dizer muito sobre seu desempenho um backtester sério é combinado com um otimizador de parâmetro para que você veja como seu sistema reage em modificações de parâmetros. Só então você pode julgar se o desempenho é estável ou não. Isso é suportado pela maioria das plataformas profissionais, como Ninja, Tradestation. Ok, mas como é que usando Zorro fazer alguma diferença se os dados que você está usando é o mesmo Eu não gostaria de apenas confiar nos dados de um provedor Com o meu perito conselheiro testes no mt4 agora tudo o que eu faço é testar os diferentes parâmetros em 3 ou 4 diferentes mt4 corretores e ver se eles saem semelhantes. Esta não é uma solução perfeita, mas dá-me mais confiança na minha expectativa positiva. Tenho utilizado até agora os dados de vários fornecedores com Zorro, mas nunca vi quaisquer diferenças visíveis nos resultados do backtest. A única diferença que eu notei, além das diferenças de preço mínimas usuais, é a qualidade dos dados, ou seja, lacunas ou outliers. Por exemplo, os dados do FXCM são, por vezes, ausentes barras intraday ou tem picos de preços. Mas eles normalmente não afetará o resultado muito como eles devem ser filtrados pela plataforma. Quando você obtém resultados definitivamente diferentes, deve haver uma certa razão, por exemplo diferentes horas de início da barra, e você. Ok, obrigado, estou baixando a plataforma agora e estou assistindo seus tutoriais com interesse. Para evitar mal-entendidos, o meu aviso contra o uso de MT4 para backtesting foi apenas para encontrar um sistema rentável. MT4 é muito bem capaz de encontrar a maioria dos sistemas não rentáveis. Um MT4 positivo backtest não significa que o sistema é rentável, mas um backtest negativo garante que o sistema vai perder dinheiro. Assim, um backtest mesmo com MT4 é melhor do que nada. Tenho você. Bem hedged Então, qual é a sua opinião sobre o meu método de testar o mesmo ea com as mesmas configurações em vários corretores para obter um resultado médio Bem. Se os resultados diferem por uma grande quantidade, então o sistema é irremediavelmente inconsistente ou algo está errado com os dados de preço. A média não vale muito em tal caso. Se, no entanto, os resultados são muito próximos uns dos outros e todos positivos, então você deve obter uma plataforma melhor (eu acho que você sabe o que quero dizer) e continuar com alguns testes sérios - oversampling, walk forward e análise de portfólio. O sistema pode valer a pena. O sistema não pode ser irremediavelmente inconsistente se você está negociando-lo no mesmo período ea única coisa que está mudando é o provedor de dados. Deve sempre ser um problema com os dados. Eu acho que se o sistema testar positivamente em todos os 4 corretores, então deve ser ok para o comércio indo para a frente. Meu problema com a sua afirmação de que sua plataforma é melhor (não tenho dúvidas de que é melhor do que testador de estratégia mt4, sem dúvida e de fato é provavelmente um par com os melhores testadores de estratégia disponíveis a partir do que eu vi até agora) é Que você ainda está à mercê dos dados fornecidos a você pelo seu provedor. Quem está a dizer que os dados fxcm é melhor do que ninguém elses Talvez você poderia incluir em suas instruções tutorial sobre como acessar outros provedores de dados para fins de teste cruzado Desculpe ter tomado sobre o seu segmento um pouco, mas acho que esta discussão será Útil para as pessoas que vêm atrás de nós. Membro Comercial Registrado em Sep 2012 141 Posts No manual Zorro sob quotimport / exportquot youll encontrar uma breve descrição de como importar dados de preços de outros fornecedores. (Zorro-trader / manual / pt / export. htm) Eu não queria iniciar o tutorial com um crossover MA simples, porque normalmente não é rentável, assim, Alice não poderia honestamente desenvolver essa estratégia e exigir dinheiro para ele. Mas não se preocupe, nada será explicado. Essa é a razão pela qual eu postei o curso aqui: Você pode fazer perguntas específicas se algo não está claro, e eu vou aprender onde o tutorial pode ser melhorado, e pode torná-lo mais suave. - De volta ao trabalho. Ainda não estavam em sistemas de comércio primeiro bem ter que aprender como um programa toma decisões. Se minhas contas crescem mais de 3000, eu preciso encontrar um novo emprego, senão vou manter o meu trabalho existente. Sim, meu cérebro ainda está funcionando bem, obrigado por perguntar. Isso seria apenas um exemplo de uma se - else branch seu código associado seria semelhante a este: Você vai usar quot if quot instruções quando você quer que o seu script para tomar decisões - o que significa que ele se comporta diferentemente dependendo de algumas condições, como entrada do usuário, um O resultado de uma operação matemática, um cruzamento de dois indicadores, etc Heres a forma básica do quot se quot declaração: if (alguma condição é verdadeira) dosomething () // executar este comando (um único comando) if (Alguma condição é verdadeira) // executa um ou vários comandos que são colocados dentro dos parênteses curvos Uma forma mais complexa da instrução quotifquot está listada abaixo: if (alguma condição é verdadeira) // executa um ou vários comandos que são colocados dentro Os colchetes else // executam um ou vários comandos que são colocados dentro destes curly brackets As instruções colocadas dentro do quot else quot part são executadas somente se quot alguma condição quot is not true. Heres um exemplo prático: É bastante claro que a renda pode ser 2000 ou 3000, porque apenas um dos ramos será executado (renda de 2000 ou renda 3.000, não ambos). As partes condicionais do código são chamadas quotbranchesquot porque várias instruções aninhadas if podem parecer uma árvore com a raiz no primeiro quot se quot e muitos ramos dos quais apenas um é executado. Lets draw some conclusions: 9658 quot if quot branching statements start with the if keyword followed by a pair of parentheses 9658 the parentheses contain a comparison, or any other expression (quotsome conditionquot) that can be true or false 9658 if the expression is true, the following instruction or the set of instructions placed inside the first pair of curly brackets is executed 9658 if the expression is false and we dont use quot else quot, the set of instructions placed between the curly brackets is skipped (it isnt executed) 9658 if the expression is false and we are using the quot else quot branch as well, the set of instructions placed inside the first pair of curly brackets is skipped, and the set of instructions placed inside the second pair of curly brackets is executed. Youll be mastering these branching techniques in no time, trust me Lets write the following script : The code doesnt look that complicated we have defined a var named profit which receives an initial value of 50 . and an if statement. If profit is greater than 100 . we have enough, otherwise not. We can omit the if / else pairs of curly brackets mentioned above when their content consists of a single line of code. Create a new script - you have learned in the last workshops how to do that - copy/paste the content from the code box above, save it as quot myscript3.c quot in the Strategy folder, select and Test it: Now lets try something else. Modify the code by editing the marked line: When you now click Test to run the script again, youll notice that the bottom slider gets the label quot Profit quot. Move it all the way to the right, so that 200 appears in the small window, and click Test again: What happened The slider() function put its return value - which is the value from the bottom slider - into the profit variable, and thus the if(..) condition became true as the value was now bigger than 100. We can make an educated guess how the slider function works: It gets six variables - the slider number (3), the initial value (50), the right and left borders (0 and 200), the name of the slider (quotProfitquot), and a tooltip (here 0, i. e. not used). You can find a detailed description of this function in the Zorro help file. Put the slider to the right again and verify that the program now prints quotNot enoughquot when you click Test with the slider value at 100 or below. You can now imagine how we can use the sliders for adjusting variables for our strategies. Were now almost through with the programming part. One last lesson tomorrow and then well start writing our first trade robot. Please mention here if something was unclear so far. A little more about if statements. Lets assume that you want to do something only when two different conditions are fulfilled. Try the following program: Now two sliders are involved. How do you need to set them for the quotEnoughquot condition We leave this as a little puzzle to the reader. but weve learned that we can combine two conditions using the quotandquot keyword. There is also an quotorquot keyword when one or the other condition needs be true. (C/CC programmers might wonder why they have to use and and or instead of the familiar operators ampamp and . Dont worry, all C operators work as before, were just using easier-to-memorize operators in lite-C for beginners sake.) Now, Im giving you three important tips for avoiding coding mistakes. Heres the first one. Have you noted the use of parentheses around (profit gt 50) and (loss 0) . We know from school mathematics that in a mathematical equation, the expressions in the parentheses are solved first. (12)3 is not the same as 1(23) - this is true in mathematics and also in a programming language. Always use parentheses to make sure that the program calculates in the same order that we want. and make sure that you have as many opening as closing parentheses A missing parentheses at the end of a line is one of the most frequent reasons of compiler error messages. The computer will usually complain about an error in the following line because its there looking for the missing parenthesis. Whats with that quot loss 0 quot in the first new line of code Is the double equals sign a typing error No, it isnt. Whenever you compare two expressions ( loss and 0 in the example above) you have to use quot quot instead of quot quot, because a line of code that looks like this: will set loss to zero instead of comparing loss with zero This is one of the most frequent mistakes even an experienced programmer might set a variable to a certain value by mistake, instead of comparing it with that value. Using one instead of two equality signs for comparing two expressions is a very frequent mistake. Dont forget this if (a 3) // correct // dosomestuff You can avoid this mistake if you make it a habit to put the constant value on the left side of a comparison and the variable on the right side. The loss comparison statement would look this way: If you then accidentally put a single instead of , Zorro will report an error because it knows that 0 cant be set to a different value. That was the second tip. The third tip is that you should use the comparison with care. When you calculate a var variable in a complicated mathematical expression . the result is usually inaccurate. Instead of 2 . it might be 2.00001 or 1.99997 . This is due to the limited precision of variables in a computer. When you then compare it with 2, the comparison always comes out false - so better use greater or smaller comparisons (lt or gt) when working with var variables. This problem does not affect int variables.

No comments:

Post a Comment