Discussão do artigo "Desenvolvendo um EA multimoeda (Parte 1): várias estratégias de trading trabalhando juntas" - página 3

 
Yuriy Bykov #:

Estou no processo de redesenhar quase do zero meu código escrito anteriormente nos últimos anos

Ao refatorar, você sempre quer fazer isso de forma que não precise refazer mais tarde e que seja conveniente/perspectivo.

Child( const string sInputs ) : Parent(sInputs)
{
  this.SetInputs(sInputs);
}

virtual int SetInputs( const string sInputs )
{
  return(this.Inputs.FromString(sInputs) + this.Parent::SetInputs(sInputs));
} 

Como resultado, cheguei a essa solução de trabalhar com entradas.

 
fxsaber #:

Ao refatorar, você sempre quer fazer com que não seja necessário refazê-lo mais tarde e que seja conveniente/perspectivo.

Parece arquitetonicamente promissor quando o CStrategy é dividido em três entidades: o núcleo de negociação (emite sinais), a parte de negociação (negocia sinais) e o MM

class CSimpleVolumeStrategy : public CStrategy {
private:
   //--- Parâmetros do sinal de abertura
   int               signalPeriod_;       // Número de velas para cálculo da média de volume
   double            signalDeviation_;    // Desvio relativo da média para a abertura da primeira ordem
   double            signaAddlDeviation_; // Desvio relativo da média para a abertura da segunda ordem e das ordens subsequentes

   //--- Parâmetros de ordens pendentes
   int               openDistance_;       // Distância do preço até a ordem pendente
   double            stopLevel_;          // Stop Loss (em pontos)
   double            takeLevel_;          // Take Profit (em pips)
   int               ordersExpiration_;   // Tempo de expiração das ordens pendentes (em minutos)

   //--- Parâmetros de gerenciamento de capital
   int               maxCountOfOrders_;   // Número máximo de ordens abertas simultaneamente

Aqui temos todas elas juntas. Mas é conveniente quando você pode alterar o mesmo núcleo (novo Core2 em vez de novo Core1) com outras entradas. Ao mesmo tempo, a substituição pode ser feita sem mexer nas entradas, pois elas são definidas sintaticamente da mesma forma - uma string.


Da mesma forma, com controle e MM. Em geral, proponho que se pense novamente em uma arquitetura universal.

 
fxsaber #:
Parece arquitetonicamente promissor quando a CStrategy é dividida em três entidades: núcleo de negociação (emite sinais), parte de negociação (negocia sinais) e MM....

Parece que essa abordagem já está implementada na classe SB - CExpert.

E há até mesmo uma classe CStrategy de Vasily Sokolov ))

Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
  • www.mql5.com
CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Eu vi a classe CExpert padrão, mas ela não funcionou para mim. Ela acrescentou muitas coisas de que eu não precisava. A hierarquia de herança também foi um pouco desanimadora, quando a classe base para implementar algoritmos de gerenciamento de dinheiro e risco e a classe base para criar geradores de sinais de negociação são herdadas da mesma classe base.

Não vi a série de artigos de Vasily Sokolov. Obrigado pelo link, vou dar uma olhada.

 
Denis Kirichenko #:

Portanto, parece que essa abordagem já está implementada no SB - classe CExpert.

Parece que a tarefa de integração com o Strategy Wizard foi resolvida lá. Ou seja, a abordagem inicial é bem diferente. Certamente, há algumas sobreposições, mas é mais uma coincidência.

 
Denis Kirichenko #:

E há até mesmo uma classe CStrategy de Vasily Sokolov ))

Parece-me que o esqueleto arquitetônico deve ser extremamente conciso e fácil de usar. É por isso que a classe básica do TS é assim.

Em seguida, um pouco de engorda de tendões. Deve ser muito simples.

Infelizmente, Vasily tem uma abordagem diferente.

 
fxsaber #:

Parece-me que o esqueleto arquitetônico deve ser extremamente conciso e fácil de usar. É por isso que a classe básica do TC é assim.

A seguir, um pouco de desenvolvimento dos tendões. Isso deve ser muito simples.

Há algo similar simples (em termos de interface), mas estendido (em termos de implementação) no livro.

interface TradingSignal
{
   virtual int signal(void);
};

interface TradingStrategy
{
   virtual bool trade(void);
};

...
...
AutoPtr<TradingStrategy> strategy;
   
int OnInit()
{
   strategy = new SimpleStrategy(
      new BandOsMaSignal(...параметры...), Magic, StopLoss, Lots);
   return INIT_SUCCEEDED;
}
   
void OnTick()
{
   if(strategy[] != NULL)
   {
      strategy[].trade();
   }
}
...
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
  • www.mql5.com
Автоматизация торговли - Программирование на MQL5 для трейдеров - Учебник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky #:

Há algo similarmente simples (em termos de interface), mas estendido (em termos de implementação) no livro.

Onde posso fazer o download do código-fonte?

 
fxsaber #:

Onde fazer o download do código-fonte?

https://www.mql5.com/pt/code/45595

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
 
Estratégia muito interessante!!!