需要EA的一些帮助

时间:2016-03-27 23:50:01

标签: quantitative-finance algorithmic-trading mql4 metatrader4 forex

我正在尝试编写这种逻辑:

  

if no open orders and buy logic ( DayOpen - 10 * Point ) then < / strong> buy

     

if bought
  Sell when the one(也是唯一一个)bought order reaches Take Profit price.

这是我到目前为止所拥有的:

double DayOpen = iOpen( NULL, PERIOD_D1, 0 );
double TP      = 10.0;
int    ticket;

if ( OrdersTotal() == 0 && Bid == DayOpen - 10 * Point );
{    OrderSend( Symbol(),
                OP_BUY,
                1.0,
                Ask,
                0,
                0,
                Ask + TP * 10 * Point,
                NULL,
                12321,
                0,
                Blue
                );
}

2 个答案:

答案 0 :(得分:1)

Prologue
follow StackOverflow emphasis on posting a complete M.C.V.E.可以<)

代码应至少读作语法正确:

{                                                     // outer context missing
// .                                                  // outer context missing
// ..                                                 // outer context missing
// ...                                                // outer context missing
   RefreshRates();     // a life-saving jacket while  // outer context missing

   if (  OrdersTotal() == 0
      && Bid           <= iOpen( _Symbol, PERIOD_D1, 0 )
                        - ( 10 * _Point )
      )
   {  OrderSend( _Symbol,                            // <symbol>
                 OP_BUY,                             // <op> 
                 1.0,                                // <volume>
                 Ask,                                // <XTO_price>
                 0,                                  // <slippage_allowed>
                 0,                                  // <autoXTO_SL>
                 NormalizeDouble( Ask + 10 * _Point, // **ALWAYS**
                                  _Digits            // NORMALIZE XTO levels
                                  ),                 // <autoXTO_TP>
                 NULL,                               // <commentSTRING>
                 12321,                              // <MagNUM>
                 0,                                  // <expireSECONDs>
                 clrBlue                             // <arrowCOLOR>
                 );
   }

// ...
// ..
// .

}

后记

无需为给定逻辑添加任何其他构造。 MetaTrader Terminal 4 会将 OrderSend() 详细信息发送到远程 MetaTrader 4 Server < / strong> 如果您的值确实符合经纪人条款&amp;条件,您将获得这样的交易头寸(暴露于市场风险,同时得到完全支持并由您的权益覆盖)。

与此同时, MetaTrader 4 Server 将确保此类位置无需其他代码 <autoXTO_TP> - 在FX-Market达到预定义的TP终止级别时终止。

虽然上述情况属实,但可以公平地说,专业级算法交易系统有许多其他公用事业服务,附在核心交易逻辑上。只是为了有所了解,生产级系统中常见的设计约为80.000~100.000 SLOC

从哪里开始?

重新阅读 MQL4文档 可能会有所帮助(让我更清楚一点 - localhost已安装并更新了 实际发布的 - - MQL4语言...网络上的静态和“旧”文本,因为语法规则和特定于上下文的限制很多......仍然如此,参见下文)
而不是而不是再次使用“旧” - MQL4语法代码片段进行另一个问题。

MQL4语言在过去几年中发展很多,很多网站发布的代码片段已经失去了解释价值,因为范式发生了很多变化,发生在“语言内部”或由于代码执行平台更改

苦?是的。
痛苦?是的。

这是 the Life ,但是......

答案 1 :(得分:0)

所以,我认为你已经掌握了逻辑的第一部分(开始交易)。现在您希望所有订单在其中一个达到TP时关闭。这是你如何做到的。

将此添加到start()功能:

int total = OrdersHistoryTotal();
for (int i = total - 1; i >= 0; i--)
{
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false)
    {
        Print("Error selecting order from history: ", GetLastError());
        break;
    }
    if ((OrderSymbol() != Symbol()) || (OrderType() != OP_BUY) || (OrderClosePrice() < OrderTakeProfit())) continue;
    CloseAll();
    break;
}

这在start()函数之外:

void CloseAll()
{
   int total = OrdersTotal();
   for (int i = total - 1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS) == false) continue;
      if ((OrderSymbol() != Symbol()) || (OrderType() != OP_BUY)) continue;
      RefreshRates();
      OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);
   }
}