新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1640

 
EVGENII SHELIPOV #:

大家好!!!!。

我正在为一个EA编写代码,用于从订单网格的平均价格中追踪止损组订单。

日志中没有错误,但拖网也不工作。以下是代码,请指出错误所在。谢谢你!

拖网是在错误的地方!

它看起来应该是这样的

如果盈亏平衡价格+利润-TRAL!=TakeProfit,开始拖网

这些数据从何而来?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

订单开放价格

返回所选订单的开盘价。

doubleOrderOpenPrice()。

请注意。

该订单必须使用OrderSelect() 函数进行预选。

 
MakarFX #:

谢谢你)。

 
MakarFX #:

那不是拖网所站的位置!

它应该是这样的。

如果盈亏平衡价格+利润-TRAL!=TakeProfit,则运行拖网。

下午好 Makar!!!!

据我所知,这就是有问题的那条线。在这种情况下,是买入订单。

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

马卡尔,如果你能更详细地解释一下

 
MakarFX #:

那不是拖网所站的位置!

它应该是这样的。

如果盈亏平衡价格+利润-TRAL!=TakeProfit,则运行拖网。

这些数据从何而来?

你今天说的是谜语,马卡。

可能还有另一个问题,为什么我们在计算盈亏平衡价格时没有检查?????

 
MakarFX #:

那不是拖网所站的位置!

它应该是这样的。

如果盈亏平衡价格+利润-TRAL!=TakeProfit,则运行拖网。

这些数据从何而来?

订单开放价格

返回所选订单的开盘价。

doubleOrderOpenPrice()。

请注意。

该订单必须使用OrderSelect() 函数进行预选。

是的,我想到了这一点,你已经写了

 
EVGENII SHELIPOV #:

下午好 Makar!!!!

就我的理解,这就是问题所在。在这种情况下,是买入订单。

马卡如果你能更详细地解释

你有一组订单,你定义一个盈亏平衡点并创建一条线,这最好是作为一个单独的函数来完成!你可以把它作为一个单独的函数。

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

然后你有你想得到的以点为单位的利润值,并从avg_price中加/减。

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

再有一个单独的拖网功能

对于购买:如果出价>avg_price = OrderModify()

对于销售:如果 avg < avg_price = OrderModify()


不幸的是,在你的代码中,我看到了不符合逻辑的行动(主观上)。

 
EVGENII SHELIPOV #:

这就是我所想的,你已经写了。

把功能分开,这样你就更容易浏览了。

下面是一个OnTick()的例子

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

正如你所看到的,这里只有函数调用

 
MakarFX #:

将各项功能分开,使你更容易浏览。

下面是一个OnTick()的例子

正如你所看到的,这里只有对函数的调用。

谢谢你,马卡,我会集中精力,这样想的

 
EVGENII SHELIPOV #:

谢谢你,马卡尔。 我会把我的想法放在一起,朝着这个方向思考。

(大声说)
 
问题:我怎样才能从EA的监护权中得到一个命令?也许已经有一些我不知道的截图或mt4功能。请给我指点迷津。我对学习mql 3、4、5等没有任何渴望和可能。
原因: