Discussão do artigo "Expert Advisor Universal: Modos de Negociação das Estratégias (Parte 1)"

 

Novo artigo Expert Advisor Universal: Modos de Negociação das Estratégias (Parte 1) foi publicado:

Qualquer desenvolvedor de Expert Advisor, independentemente de suas habilidades de programação, diariamente é confrontado com as mesmas tarefas de negociação e problemas algorítmicos, que devem ser resolvidos para organizar um processo de negociação confiável. O artigo descreve as possibilidades do motor de negociação CStrategy que possibilita a solução destas tarefas e fornece ao usuário um mecanismo eficaz para descrever uma idéia de negociação personalizada.

Para entender a abordagem oferecida neste artigo, vamos primeiro tentar descrever um sistema de negociação clássico baseado em duas médias móveis, um dos quais tem um período médio de venda, e a segunda tem um período de compra. Assim, a média móvel com um período médio maior é mais lenta do que a média móvel com um período médio menor. Regras de negociação são simples: se a média móvel rápida é superior à lenta, o EA compra. Por outro lado, se a média móvel rápida é inferior a lenta, o EA vende. O gráfico a seguir mostra a nossa estratégia esquematicamente:

Fig. 1. O gráfico de um sistema de negociação baseado em duas médias móveis

Autor: Vasiliy Sokolov

 

Lógico, interessante... mas desisti de recursos desnecessários nos Expert Advisors (cronogramas, notícias e outras coisas externas) há muito tempo.

Há uma solução mais bonita - é mais conveniente definir o modo do Expert Advisor por meio de variáveis de terminal. Vários nomes de variáveis são fornecidos nos parâmetros do Expert Advisor, e ele usa seus valores para se orientar.

 
Maxim Kuznetsov:

Lógico, interessante... mas desisti de recursos desnecessários nos Expert Advisors (cronogramas, notícias e outras coisas externas) há muito tempo.

Há uma solução mais bonita - é mais conveniente definir o modo do Expert Advisor por meio de variáveis de terminal. Vários nomes de variáveis são fornecidos nos parâmetros do Expert Advisor, e ele usa seus valores para se orientar.

A ideia é ocultar esses truques em módulos auxiliares. O usuário faz uma descrição formal do TS, e o mecanismo de negociação faz todo o resto para ele.

A propósito, os "modos de negociação" são apenas uma consequência da organização proposta da lógica do EA. Se você descrever a lógica de negociação de um EA usando quatro ações, os modos de negociação aparecerão por si mesmos. Se você aprender a escrever um EA usando essas quatro ações, a velocidade de escrever um Expert Advisor aumentará várias vezes, e o número de erros tenderá a zero - testado repetidamente.

 
Vasiliy Sokolov:

A ideia é ocultar esses truques em módulos auxiliares. O usuário faz uma descrição formal do TS, e o mecanismo de negociação faz o resto para ele.

A propósito, os "modos de negociação" são apenas uma consequência da organização proposta da lógica do EA. Se você descrever a lógica de negociação de um EA com quatro ações, os modos de negociação aparecerão por si mesmos. Se você aprender a escrever um TS com a ajuda dessas quatro ações, a velocidade de escrita do EA aumentará várias vezes e o número de erros tenderá a zero - isso foi testado várias vezes.

O fato de que os modos de negociação aparecem é inegável. Mas é melhor definir esses modos de fora, em geral, por meios externos. Dessa forma, o EA "deixa" código desnecessário, não importa como você o veja, e consome recursos (computacionais, de desenvolvimento, de suporte etc.). Mas, em vez de um EA, você tem uma espécie de "shopping center", onde pode controlar várias corujas com um único controle remoto.
 
Maxim Kuznetsov:
É inegável que os modos de comércio aparecem. Mas é melhor definir esses modos de fora, por meios externos. Dessa forma, o EA "deixa" código desnecessário, não importa como você o veja, e consome recursos (computacionais, de desenvolvimento, de suporte etc.). Mas, em vez de um EA, você tem uma espécie de "shopping center", onde pode controlar várias corujas com um único controle remoto.

Bem, em geral, elas são configuradas do lado de fora. Você pode, por exemplo, criar uma forma visual de modos de negociação. Isso pode ser feito até mesmo no Win32. Também é possível colocar os modos de negociação como parâmetros. O mecanismo em si não possui nenhum modo de negociação. E, graças a isso, o que você escreveu é alcançado: independência da estratégia em relação a complementos e extensões - você pode usá-los ou não, eles são simplesmente escritos e descritos e podem ser usados, se necessário.

 
Achei a ideia bastante interessante, vou ler mais. Obrigado pelo artigo.
 
Maxim Kuznetsov:
É inegável que os modos de comércio aparecem. Mas é melhor definir esses modos de fora, por meios externos. Dessa forma, o EA "deixa" código desnecessário, não importa como você o veja, e consome recursos (computacionais, de desenvolvimento, de suporte etc.). Mas, em vez de um EA, você obtém uma espécie de "complexo de negociação", em que pode controlar várias corujas a partir de um controle remoto.

O que o faz pensar que isso é melhor? Sua abordagem é nojenta! Diga-me mais sobre o quanto você é realista e que não usa um testador.

Você tem muitas funções que determinam o resultado do trabalho do EA, mas não podem ser verificadas no testador.

Tudo o que altera o trabalho do EA deve ser regulado pela janela de propriedades do EA.

 

Ótimo artigo, onde está a continuação? Apresse-se e traduza-o!


 

Comecei agora a entendê-lo. Gostaria de uma descrição da estratégia XML - o que existe e onde. E pelo menos algum arquivo XML. Na minha opinião, ele está faltando no arquivo.

Muito obrigado.

 
Yuriy Asaulenko:

Comecei agora a entendê-lo. Gostaria de uma descrição da estratégia XML - o que existe e onde. E pelo menos algum arquivo XML. Na minha opinião, ele está faltando no arquivo.

Obrigado.

Exemplo de serialização de estratégias em XML:

<Global>
        <Strategies>
                <Strategy Name="MovingAverage" Magic="100" Timeframe="PERIOD_M1" Symbol="Si">
                        <TradeStateStart> Stop</TradeStateStart>
                        <Params>
                                <FastMA> 1</FastMA>
                                <SlowMA> 3</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="MovingAverage" Magic="101" Timeframe="PERIOD_M5" Symbol="SBRF">
                        <TradeStateStart> BuyOnly</TradeStateStart>
                        <Params>
                                <FastMA> 15</FastMA>
                                <SlowMA> 21</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="102" Timeframe="PERIOD_M15" Symbol="GAZR">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 30</Period>
                                <StdDev> 1.5</StdDev>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="103" Timeframe="PERIOD_M30" Symbol="ED">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 20</Period>
                                <StdDev> 2.0</StdDev>
                        </Params>
                </Strategy>
        </Strategies>
</Global>

A questão da serialização de estratégias é tratada nas partes seguintes. Esse exemplo está presente lá.

 

Olá,

O código-fonte do artigo não está sendo compilado.
O erro retornado é:

cannot cast 'DoubleValue' to 'ULongValue' Dictionary.mqh 210 14

     lValue=(ULongValue)dValue;


Obrigado por sua ajuda,
Pierre8r