如果买入订单达到T / P时如何开立买入,如果买入订单达到S / L则卖出;如果卖单触及T / P卖出,如果卖出达到S / L,则卖出买入?

时间:2016-05-15 20:05:36

标签: algorithmic-trading mql4 metatrader4 mt4

我尝试了很多东西,但无法使用下面的代码。

我已经尝试过以下代码逻辑的变体,但失败了,不知道在哪里实现它:

echo '<a href="world.php?xx='. $_SESSION['x'] .'&yy='. $_SESSION['y'] .'">';
echo '<b>';
echo $row['usuario_atacante'];
echo '</b>';
echo '</a>';

if (  OrderSelect( OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY ) )
{
      if (  OrderType() == OP_BUY )
      {
            if (  OrderClosePrice() >  OrderStopLoss() )      Print( "Hit TP" );
            else                                              Print( "Hit SL" );
      }
      else if (  OrderType() == OP_SELL )
           {
                 if (  OrderClosePrice() <  OrderStopLoss() ) Print( "Hit TP" );
                 else                                         Print( "Hit SL" );
           }
}  

Orderselect... if ( MathAbs( OrderClosePrice() - OrderTakeProfit() ) > MathAbs( OrderClosePrice() - OrderStopLoss() ) ) Print( "StopLoss" ); if ( MathAbs( OrderClosePrice() - OrderTakeProfit() ) < MathAbs( OrderClosePrice() - OrderStopLoss() ) ) Print( "TakeProfit" ); 对我来说是一个问题,所以我们将非常感谢您的帮助。

以下是EA我试图添加它,但只知道如何以及放置它将有所帮助。

OrderSelect()

1 个答案:

答案 0 :(得分:0)

...打开WHEN ...... 是目标的关键部分

OrderSelect()对您解决“Open WHEN”难题没什么帮助。它只是在 db.POOL 记录中抓取, MetaTrader Terminal 4 localhost内部DBMS负责处理,这是处理事件的缓慢且非常非常低效的方式订单管理任务,因此尽量避免在生产级系统中进行任意扫描。在这里,您甚至不会从这些毁灭性的db.POOL扫描中获得您的任务所需的任何基本信息,所以让我们首先关注目标。

......什么...... 是目标背后的想法?

EA 是一个缓慢的200 /快速30简单移动平均交叉的学术上微不足道的变化。

我想你想补充一点额外交易的想法,条件是基础SMA交叉发起的交易分别达到{ SL | TP } - 终止,对吗?

对于这种情况,拥有 MetaTrader Server 4 的经纪商通常允许您发出一个所谓的待处理订单,它指示经纪人保留有关您遗嘱的记录进入市场,假设价格达到预定水平 - (猜猜看,这些是你在标题中要求的{ SL | TP } - 并且这样的记录正在等待(有一些更可配置的选项),直到这样的价格变动是否发生,在此期间,此等头寸处于非活动状态,称为挂单 ......

条款&amp;条件,请检查您的经纪人合同和/或询问他们的客户服务代表。可能会有一些特殊限制(更好地了解先验)。

... WHERE ... 放置代码?

如果不重新设计提供的代码(那里有一些小错误/效率低下),代码应该放在这里:

    result = OrderSend( Symbol(),
                        OP_SELL,  // PRIMARY SELL <<<AT-MARKET>>>
                        Lots,
                        Bid,
                        Slippage,
                        0,
                        0,
                        "Sell",
                        MagicNumber,
                        0,
                        Red
                        );
    if (  result >  0 )
    {     
          TheStopLoss   = 0;
          TheTakeProfit = 0;

          if (  TakeProfit >  0 ) TheTakeProfit = Bid - TakeProfit * MyPoint;
          if (  StopLoss   >  0 ) TheStopLoss   = Bid + StopLoss   * MyPoint;

          OrderSelect( result, SELECT_BY_TICKET );

          OrderModify( OrderTicket(),
                       OrderOpenPrice(),
                       NormalizeDouble( TheStopLoss,   Digits ),
                       NormalizeDouble( TheTakeProfit, Digits ),
                       0,
                       Green
                       );
       // ---------------------------------------------------- HERE ADD
          OrderSend(   Symbol(),
                       OP_SELLSTOP,    // SELL-STOP PENDING ORDER ON SELL.TP
                       Lots,
                       NormalizeDouble( TheTakeProfit
                                      - MarketInfo( _Symbol, MODE_SPREAD ),
                                        Digits
                                        ),
                       Slippage,
                       0,              // SL: T.B.D.
                       0,              // TP: T.B.D.
                       "Sell on Sell.TP",
                       sTpMagicNumber, // avoid collisions with other logic
                       0,              // never expires
                       Red
                       );

          OrderSend(   Symbol(),
                       OP_BUYSTOP,    // BUY-STOP PENDING ORDER ON SELL.SL
                       Lots,
                       NormalizeDouble( TheStopLoss
                                      - MarketInfo( _Symbol, MODE_SPREAD ),
                                        Digits
                                        ),
                       Slippage,
                       0,              // SL: T.B.D.
                       0,              // TP: T.B.D.
                       "Buy on Sell.SL",
                       bSlMagicNumber, // avoid collisions with other logic
                       0,              // never expires
                       Red
                       );
    }

差价调整并非绝对,因为在不稳定的时期内,市场存在虚假的利差波动。再次,经纪人的条款和条件适用于此,所以要小心。