文章 "基于交易模块创建多个 EA 交易" - 页 4

 

非常感谢作者提供的文章和代码。今天,我重新设计了模型类简单智能交易系统的代码。经过一番努力,我成功地在不同的货币对和时间框架上实现了并行工作。

代码中唯一需要修正的地方是对 GetMyPosition() 函数稍作现代化处理,使其仅按作为参数传递的符号计算交易量。否则,在两个或更多交易对捆绑下工作的模型在调用 GetMyPosition() 时,得到的是多个交易对的总成交量,而不是所需的每个交易对的单独成交量。我还在CTableOrders 类中添加了一个方法来获取订单符号。

string            OrderSymbol(){return(m_symbol);}


再次感谢!

 

朋友们,感谢你们对我工作的赞赏!我很高兴认识到,我所思考的问题是相关的、必要的。让我们不要与不识字的批评者争论。他们永远存在,即使在显而易见的事情上,他们也不会被说服。

最好相应地重载 double GetMyPosition() 方法:double GetMyPosition(stringSymbol).这将给您带来更大的灵活性和通用性。

毫无疑问,随着时间的推移,代码会不断改进和变化,因为不可能同时考虑到所有可能的应用领域。

再次感谢您,祝您 2011 年新年快乐!幸福和好运

 
Огромное спасибо автору за статью, обязательно возьму себе на вооружение.
 

感谢 Vasily 的文章--在我看来,这是目前最好的方法。你是如何调试出这段代码的,真是令人难以置信。

Vasily - 在没有测试仪调试器的情况下,你是如何调试这段代码的? 我发现在没有测试仪调试器的情况下工作非常困难,因为信号不同,条件也不同。

请分享您的调试经验。

 

你好。

我调试了这段代码,发现 Model.mqh 中第 355 行有个错误

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;

在 ORDER_TYPE_BUY 下: is none Funktion.Is that right?No function by Buy?
我修改了以下代码:

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;


但是,您在 Jornual 中看到,他没有多头头寸,只有空头头寸。


ea_modelclass



我找不到错误。需要帮助。


MfG Christian

附加的文件:
logfile.txt  100 kb
 
在最新的终端更新 后,模型停止了工作。有人能解释一下发生了什么吗?
 
YYURIYY:
在最新的终端更新后,模型停止了工作。有人能解释一下发生了什么吗?


同样。一个星期以来,我一直在一个逗号一个逗号地解析代码。该策略下了卖单,但 GetNumberOrders() 函数只返回卖单 = 0,而买单 = 1。

我想请这段代码的开发者瓦西里帮帮我。我还不知道原因何在。

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

为这篇文章点赞!!

我很高兴有更多人关注这个想法。以前,我曾尝试在 MQL4 中开发多货币多策略 EA 模板。

由于 MQL5 的出现,我试图设计这样一个 EA 的对象模型并开始实现它。

不幸的是,没有空闲时间进行这些活动... :-(

请继续这个项目......这是我的想法......有一个框架,可以轻松实现许多策略,并可以手动或自动切换/关闭任何策略。这样,我们就可以拥有一个 EA 组合,甚至可以根据需要添加或删除某些 EA。

谢谢您的帮助

PS: 如果您有兴趣,这里有一个链接...

https:// www.mql5.com/en/forum/118148

Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
  • www.mql5.com
Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
 
YYURIYY:
在最新的终端更新后,模型停止了工作。有人能解释一下发生了什么吗?

我想我知道了。在代码中,您需要更改 :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

#include <Trade\_OrderInfo.mqh>
#include <Trade\_HistoryOrderInfo.mqh>
#include <Arrays\List.mqh>
class CTableOrders : CObject
{
private:
   ulong             m_magic;       // 发布命令的专家的魔力
   ulong             m_ticket;      // 主订单的机票
   ulong             m_ticket_sl;    // 根据主订单(止损)执行的交易回购订单的票据
   ulong             m_ticket_tp;    // 根据主订单(获利)执行的交易的回购订单票据
   ENUM_ORDER_TYPE   m_type;         // 主订单类型
   datetime          m_time_setup;  // 订单设置时间
   double            m_price;       // 订购价格
   double            m_sl;          // 建议止损价
   double            m_tp;          // 预计获利的价格
   double            m_volume_initial;      // 订购量
public:
                     CTableOrders();
   bool              Add(COrderInfo &order_info, double stop_loss, double take_profit);
   bool              Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit);
   double            StopLoss(void){return(m_sl);}
   double            TakeProfit(void){return(m_tp);}
   ulong             Magic(){return(m_magic);}
   ulong             Ticket(){return(m_ticket);}
   int               Type() const;
   datetime          TimeSetup(){return(m_time_setup);}
   double            Price(){return(m_price);}
   double            VolumeInitial(){return(m_volume_initial);}
};

CTableOrders::CTableOrders(void)
{
   m_magic=0;
   m_ticket=0;
   m_type=0;
   m_time_setup=0;
   m_price=0.0;
   m_volume_initial=0.0;
}

bool CTableOrders::Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit)
{
   if(HistoryOrderSelect(history_order_info.Ticket())){
      m_magic=history_order_info.Magic();
      m_ticket=history_order_info.Ticket();
       m_type=history_order_info.OrderType();
      m_time_setup=history_order_info.TimeSetup();
      m_volume_initial=history_order_info.VolumeInitial();
      m_price=history_order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

bool CTableOrders::Add(COrderInfo &order_info, double stop_loss, double take_profit)
{
   if(OrderSelect(order_info.Ticket())){
      m_magic=order_info.Magic();
      m_ticket=order_info.Ticket();
      m_type=order_info.OrderType();
      m_time_setup=order_info.TimeSetup();
      m_volume_initial=order_info.VolumeInitial();
      m_price=order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

int   CTableOrders::Type() const
{
   return((ENUM_ORDER_TYPE)m_type);
}
 

这篇文章的范围很广,而且考虑得**周全。

我无法用言语表达我对你为构建这个框架所做努力的感激之情;你还将你的方法背后的原因解释得通俗易懂(至少对我来说是这样!)。这篇文章远远超出了概念的范畴,我同意这一点--这是对交易和 OO 编程技术的实用、正确、最重要的 审慎 应用!

有一个请求--您在英文文件中的评论能否翻译一下?另外,有人能告诉我如何使用俄语工具吗?MetaEditor 中的注释甚至不显示为俄语,而显示为与本示例差别不大的乱码重音符号字符:

 // Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD

我使用 Chrome+Google Translate 浏览俄语网站已经有一段时间了,但对于较长的文章(尤其是这篇文章),我只能翻译出有限长度的文档。我很想深入阅读这篇文章,但不得不等待一段时间,至少对我来说,这是难以忍受的!如果您能就如何更好地使用外语提出建议,我们将非常乐意接受!

这是一篇杰作,索科洛夫先生。我向您致以崇高的敬意和感激之情,并期待着实现我对这一伟大交易系统方法的愿景。您解决了我在尝试设计一个系统时遇到的许多矛盾,这个系统可以满足我对最终交易系统的要求。至于其余有待解决的问题,这个框架通过设计将我的努力引向了正确的方向。