文章 "开发多币种 EA 交易(第 1 部分):多种交易策略的协作" - 页 3

 
Yuriy Bykov #:

我正在重新设计我过去几年编写的代码,几乎是从零开始

在重构时,你总是希望以这样一种方式进行,即以后不必重做,而且方便/透视。

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

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

因此,我想到了这个使用输入的解决方案。

 
fxsaber #:

在重构时,你总是希望以后不必重做,而且方便/透视。

如果将 CStrategy 分成三个实体:交易核心(提供信号)、交易部分(交易信号)和 MM,在架构上似乎很有前途。

class CSimpleVolumeStrategy : public CStrategy {
private:
   //--- 打开信号的参数
   int               signalPeriod_;       // 平均交易量的蜡烛数量
   double            signalDeviation_;    // 开第一单时与平均值的相对偏差
   double            signaAddlDeviation_; // 开仓第二单和后续单时与平均值的相对偏差

   //--- 挂单参数
   int               openDistance_;       // 从价格到挂单的距离
   double            stopLevel_;          // 止损点(单位:点)
   double            takeLevel_;          // 止盈(点数)
   int               ordersExpiration_;   // 挂单到期时间(分钟)

   //--- 基本建设管理参数
   int               maxCountOfOrders_;   // 同时打开的最大订单数

在这里,我们将它们放在一起。但是,如果您可以用其他输入来更换同一个核心(新核心 2 代替新核心 1),那就很方便了。同时,由于输入的语法定义相同,都是字符串,因此无需对输入进行任何改动即可完成替换。


控制和 MM 也是如此。总的来说,我建议重新考虑通用架构。

 
fxsaber #:
如果将 CStrategy 分为三个实体:交易核心(提供信号)、交易部分(交易信号)和 MM....,在架构上似乎很有前途。

这种方法似乎已在 SB -CExpert 类中实现。

甚至还有 Vasily Sokolov 的CStrategy ))

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

我看到了标准的CExpert 类,但它对我不起作用。它增加了太多我不需要的东西。当实现资金和风险管理算法的基类和创建交易信号生成器的基类继承自同一个基类时,继承层次结构也有点令人泄气。

我还没看过 Vasily Sokolov 的系列文章,谢谢你的链接,我会看看的。

 
Denis Kirichenko #:

这样看来,这种方法已经在 SB 类CExpert 中实现了。

集成到策略向导中的任务似乎已经在这里解决了。也就是说,最初的方法是完全不同的。当然,也有一些重叠之处,但这只是巧合。

 
Denis Kirichenko #:

甚至还有 Vasily Sokolov 的CStrategy 类 ))

在我看来,架构骨架应该非常简洁、易于使用。这就是为什么 TS 的基本类是这样的。

接下来,来点筋骨肥。这应该非常简单。

不幸的是,瓦西里有不同的方法。

 
fxsaber #:

在我看来,架构骨架应该非常简洁、易于使用。这就是为什么 TC 的基本类是这样的。

接下来是肌腱的细化。它应该非常简单。

书中 也有类似的简单(在接口方面)但扩展(在实现方面)的内容。

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 #:

书中 也有类似的简单(就界面而言)但扩展(就实现而言)的内容。

在哪里可以下载源代码?

 
fxsaber #:

从哪里下载源代码?

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

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
 
非常有趣的战略