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

 

大家好!

在我的简单的专家顾问中,有什么最简单的方法来编写(修改)一个订单,当某个条件发生时,删除其中的止盈和止损,一个方向最多三个订单(如果这很重要的话),我假设订单数被使用,我是否应该编写一个新的订单?我在等待一个关心我的人。

 
Порт-моне тв #:

大家好!

在我的简单的专家顾问中,有什么最简单的方法来编写(修改)一个订单,当某个条件发生时,删除其中的止盈和止损,最大应该是一个方向上不超过三个订单(如果这很重要的话),订单计数,我理解是用的,我应该再写一遍吗?我在等待一个关心我的人。

OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0);
 
Ivan Butko #:

不幸的是,很难理解如何使用这样的代码。


试着在打开买入订单时把标志放在1,关闭时把标志放在0,并把后者添加到打开条件中。它没有工作)
这很奇怪,事实上规则被打破了:如果标志==0,则打开。而且无论如何,它还是在同一根蜡烛上以1的价格开盘。

告诉我你是如何做到的。
 
Alexey Viktorov #:

为什么这么复杂?

不要耍小聪明。这不是问题的内容。

 
MakarFX #:
告诉我你是如何做到的。

它似乎是有效的,我已经这样重新做了。现在,我将在卖出时进行尝试,看看它们是否可以相互独立。

int Buy=0,
    Sell=0;

void OnTick(void)
  {
    double 
    ma=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0),
    ma2=iMA(NULL,0,80,0,MODE_SMA,PRICE_CLOSE,0);

    if (ma>ma2 && Buy==0) 
      { 
        OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue);
        Buy=1; 
      }
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=888 || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(perceptron_B() < Porog_B)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
            Buy=1;
           }
           
         break;
        }

UPD
Phew, it worked) 我对卖出也做了同样的工作,现在它们可以独立打开,并且有不同的逻辑。

 
Ivan Butko #:

它似乎是有效的,我已经这样重新做了。现在,我将在卖出时进行尝试,看看它们是否可以相互独立。

UPD
呼,设计成功了)我对卖出也做了同样的工作,现在它们可以独立打开,并伴随着不同的逻辑。

可能在编译时被刷掉了))))

 
MakarFX #:

可能会被人骂得狗血淋头,汇编))))

对了!有一点,"应检查'OrderSend'的返回值 AI (2).mq4 34 9"

但它似乎是有效的)
 
Ivan Butko #:

对了!有一点,"应检查'OrderSend'的返回值 AI (2).mq4 34 9"

但它似乎是有效的)

要像这样做

    if (ma>ma2 && Buy==0) 
      { 
        if(OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue))
        Buy=1; 
      }
 
MakarFX #:

让它成为现实吧!

谢谢你!

 
MakarFX #:

谢谢你!

原因: