EA: 新马丁

 

新马丁:

新马丁智能交易系统启动时在两个相对方向开单。OnTradeTransaction 处理。当止盈触发, 它在同方向上开仓 (一个仓位)。两条均线指标的交叉点是大手数开单的信号。

新马丁交叉

作者: Vladimir Karputov

 

版本 1.105:引入独立函数 OpenBuy 和 OpenSell

//+------------------------------------------------------------------+
//| 按符号开仓买入|
//+------------------------------------------------------------------+
bool OpenBuy(const double lot)
  {
   bool res=false;

   double price=m_symbol.Ask();
   double tp=m_symbol.NormalizePrice(m_symbol.Bid()+InpTP*m_adjusted_point);
   if(m_trade.Buy(lot,m_symbol.Name(),price,0.0,tp))
      if(m_trade.ResultDeal()>0)
         res=true;

   return(res);
  }
//+------------------------------------------------------------------+
//| 按符号建立卖出仓位|
//+------------------------------------------------------------------+
bool OpenSell(const double lot)
  {
   bool res=false;

   double price=m_symbol.Bid();
   double tp=m_symbol.NormalizePrice(m_symbol.Ask()-InpTP*m_adjusted_point);
   if(m_trade.Sell(lot,m_symbol.Name(),price,0.0,tp))
      if(m_trade.ResultDeal()>0)
         res=true;

   return(res);
  }

现在代码更易读了。

 

问题始终是如何处理挂着的无利可图的头寸?下面是 1.105 版的一个示例:

1.105

和版本 1.105 有一个小变化:在 OnTradeTransaction(当检测到 TakeProfit 仓位平仓时)中,我们搜索最无利可图的仓位,并关闭这个最无利可图的仓位:

1.105 有一个小改动: 在 OnTradeTransaction 中

请注意,单笔测试完全在"基于真实点数的每一点数"模式下进行。

两个变体的起点都是 10000。选择哪种变体--我认为这取决于您的具体目标。

 
当至少有一个仓位收到跳闸信号时,可选择关闭所有仓位
 
trader781:
当至少有一个仓位收到 tp 时,可以选择关闭所有仓位。

在这种情况下可以这样

第一个开始 - 两个多方向头寸,其中一个获得 TakeProfit,我们关闭所有头寸(即关闭剩余头寸 - 无利可图的头寸)。结果,我们在 TakeProfit 上获利,同时在第二个仓位上亏损。

这听起来不太好。

 
Vladimir Karputov:

在这种情况下,可以这样做:

首先开始 - 两个多方向头寸,其中一个获得 TakeProfit,然后我们关闭所有头寸(即关闭剩余的头寸 - 无利可图的头寸)。结果,我们在 TakeProfit 上获利,同时在第二个仓位上亏损。

这可不太好。

我有一个这样的系统,但至少应该有 2 个仓位 + 成功入场。

主要问题是找到一个入口,使成功入场的总和超过失败入场总和的一半。

如果不是十字星,从 0.01 开始的 8 个膝盖就足够了。

理论

1) 根据信号在不同方向开立 2 个各为 0.01 的订单

2) 如果价格超过所需的获利距离,则补仓,补仓次数、膝位和止损的步长--您可以玩很长时间。

 

我决定保留第二个选项(...有一个小改动: 在 OnTradeTransaction 中(当检测到 TakeProfit 平仓时),我们搜索最不盈利的仓位并关闭这个最不盈利的仓位......):

交易、自动交易系统和交易策略测试论坛

专家顾问:新马丁

Vladimir Karputov, 2017.01.22 19:00

一如既往的问题--如何处理挂着的无利可图的头寸?下面是 1.105 版的一个例子:

1.105

和 1.105 版有一个小改动:在 OnTradeTransaction(当检测到 TakeProfit 仓位平仓时)中,我们搜索最不盈利的仓位并关闭这个最不盈利的仓位:

1.105 有一个小改动: 在 OnTradeTransaction 中

请注意,单笔测试完全在"基于真实点数的每一点数"模式下进行。

两个变体的起点都是 10000。选择哪个变量--我认为这取决于您的具体目标。


现在版本 1.106

 
新马丁顾问代码作为免费的新马丁 演示信号推出。
 

1.007 版 - 防止终端重启:

//---
   if(!RefreshRates())
      return;

   if(m_first)
     {
      //--- 防止终端重启:
      int total=0;
      for(int i=PositionsTotal()-1;i>=0;i--) // 返回未结头寸的数量
         if(m_position.SelectByIndex(i))     // 通过索引选择位置,以便进一步访问其属性
            if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
               total++;
      //--- 如果交易账户中已经有该智能交易系统开立的仓位
      //--- 因此,我们初始化变量的方式似乎已经是第一次了。
      if(total>0)
        {
         bln_buy=true;
         bln_sell=true;
         m_first=false;
         return;
        }


      if(OpenBuy(InpLot))
         bln_buy=true;
      if(OpenSell(InpLot))
         bln_sell=true;
      m_first=false;
     }
//---


现在,如果终端已重启或 EA 已重新编译,而 EA 已在指定交易账户 上开仓,则不会出现 "首次运行 "的情况。

 

版本 1.108 现在,在交叉和止盈时,如果有盈利头寸,也会平仓。

比较 1.108(顶部图表)和之前的 1.107 版本:

新马丁英镑兑美元 107 vs 108

и

新马丁欧元兑美元 107 vs 108.png

1.108 版的总利润较小,但困难时期的缩水也比 1.107 版小一倍。

 
楼主,能编为MQ4能用的吗