你需要写一个顾问。我有一个想法。 - 页 4

 
dimasik >>:
lascu.roman, ты можешь сделать чтобы ордера открывались не с рынка, а отложенниками??? Это важно, потому что брокер с рынка не принимает сразу установку SL и TP. Вот.

这要分2个步骤进行。

1) 在市场上开盘 TP = 0, SL = 0

2)修改SL、TP。

还是我弄错了?

 
meta-trader2007 >> :

事实上,这个TS在H1和更高的时间段是有利可图的(但并不总是如此,有时是在没有趋势的情况下)。

最主要的是不要使用TP,拖网必须是3次以上的停顿。

我一定是在错误的地方做了测试 =)

 
GarF1eld >> :

它分两步完成。

...

还是我弄错了?

最好把直流电改成正常的。

也许我在错误的地方进行了测试 =)

你必须在一个低劣的故事上进行测试)

而在检查站上的情况是这样的。


 
我已经有了点头绪了)。
 
meta-trader2007 >> :

最好是把直流电改成正常的直流电。

你必须在一个质量差的故事上进行测试)

这就是检查站上的情况。


您能否在专家顾问中增加关于待定订单的内容,在下一对订单打开时删除以前的订单?

这将是非常好的......而且贸易流不会被堵塞......418的错误正在出现。

 
并在已经打开的其中一个被触发时删除)
 
extern bool Limits = TRUE; // TRUE - LIMIT orders; FALSE - STOP orders
extern double Distance = 10; // Probably less than zero
extern double TP = 144;
extern double SL = 55;
extern double TralSL = 34;
extern double Lots = 0.1;

double Spread;

void init()
{
  Distance *= Point;
  TP *= Point;
  SL *= Point;
  TralSL *= Point;
  
  Spread = Point * MarketInfo(Symbol(), MODE_SPREAD);
  
  return;
}

void TrailingOrders()
{
  int i, Total = OrdersTotal();
  double Difference, tp, sl;
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
   
    if (OrderType() == OP_BUY)
    {
      sl = Bid - TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference > 0)
      {
        sl = NormalizeDouble( sl, Digits);
        
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
    else if (OrderType() == OP_SELL)
    {
      sl = Ask + TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference < 0)
      {
        sl = NormalizeDouble( sl, Digits);
       
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
  }
  
  return;
}

bool OrderScan( int TypeOrder )
{
  int i, Total = OrdersTotal();
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
    
    if (OrderType() == TypeOrder)
      return(TRUE);
  }
  
  return(FALSE);
} 

void MyOrderSend( int TypeOrder, double open, double sl, double tp )
{
  if ( OrderScan( TypeOrder))
    OrderModify(OrderTicket(), open, sl, tp, 0);
  else
    OrderSend(Symbol(), TypeOrder, Lots, open, 0, sl, tp);
      
  return;
}

void OpenOrders( double H, double L )
{
  double open, tp, sl;
  
  if ( Limits)
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( L - Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYLIMIT, open, sl, tp);
    }
  
    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( H + Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLLIMIT, open, sl, tp);
    }
  }
  else
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( H + Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYSTOP, open, sl, tp);
    }

    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( L - Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLSTOP, open, sl, tp);
    }
  }
  
  return;
}

void start()
{
  static int PrevTime = 0;

  TrailingOrders();
  
  if ( PrevTime == Time[0])
    return;
    
  PrevTime = Time[0];
  
  OpenOrders(High[1], Low[1]);
  
  return;
}


mpeugep,在这里公布你的测试结果。

 

在演示中运行这些EA,订单没有被放置....原因是什么呢?

 
dimasik >> :

在演示中运行这些EA,订单没有被放置....原因是什么呢?

只要没有相应的未结头寸,待定订单就会在新条形图形成之初下达。

在此写下附有堆栈的测试器的积极结果。

 

当我在DAX演示中实时测试exp_Higt-Low.mq4专家时(5小时),起初它显示盈利,然后它开始亏损。

我只有一句话要说--朝这个方向努力是可能的。唯一的问题是,我的专家顾问试图加载一个带有挂单的 交易流程,这就是为什么它有一个关闭挂单的任务,例如,当其中一个挂单被触发或当其中一个新的对子打开时。

到mql4com

你能按照我上面的描述,添加meta-trader2007之前发布的exp_Higt-Low.mq4吗?

我明天将继续测试。