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

 
Taras Slobodyanik #:

为什么需要3种方法?
,在一个
,就足以完成所有事情。

  • 检查了订单

- 修改后的
- 未修改

这很有趣!

塔拉斯,假设我们有三个带TP和SL的买入订单,然后在一个订单中我们修改了SL。

问题:我怎样才能找到已被修改的订单?

 
Taras Slobodyanik #:

为什么需要3种方法?
,在一个
,就足以完成所有事情。

  • 检查了订单

- 修改后的
- 未修改

已经有两个了,一个是通过OrdersTotal()控制数组的大小,修改后的订单的票据被储存在这里,另一个是在这个数组中搜索票据。但现在我在其他地方修改了代码,与这一切无关,而且由于某些原因我捕捉到了一个错误(数组超限)。
 
MakarFX #:

有趣的是!

塔拉斯,假设有三个买入订单,有TP和SL,然后在一个订单中SL被改变。

问题:我怎样才能找到已更改的订单?

很明显,SL(或TP)被改变是有原因的,对吗?
我们应该根据一些条件来检查它。

那么在下一次检查时,这个条件将被定义为 "已完成"--订单已经被修改。


如果我们谈论的是手动修改,有人会在EA不知情的情况下改变一些东西,那么我们当然需要收集一个数组结构并不断与市场订单进行比较。

 
Taras Slobodyanik #:

为什么需要3种方法?
,在一个
,就足以完成所有事情。

  • 检查了订单

- 修改后的
- 未修改

顺序不是1,比方说有10个。我把每个修改过的票据写到一个数组中。但到目前为止,这是个问题。
 
MakarFX #:

已删除

MakarFX,谢谢!现在没有额外的非信号第一订单,但现在由于某些原因,第一信号订单(正常)提前进入了2个蜡烛))。我在留言中附上了测试者的截图,但即使是这样的第一个订单--最重要的事情已经完成了,再次非常感谢你)随着魔术师得到它,那么我将做一个外部变量,当我把espert附加到一个特定的货币对图表时,我将为每个货币对单独改变数字。

附加的文件:
 
Nerd Trader #:
订单不是1,有10个订单。我将把每个修改的票据写到数组中。但到目前为止,这是个问题。

有多少个订单并不重要 - 如果TP/SL不需要改变,根据条件=订单已经被修改。

 
SanAlex #:

那个在测试器中是很好的乐趣。

而这个是给你的,作为礼物--赚钱。

\\\\\\\\\\\\\\\\\\\\\\\\\\

我运行它是为了测试--我们今晚将看看它的工作情况。

\\\\\\\\\\\\\\\\\\\\\\\\\\\

检查了所有图表上的图案变化情况--一切都成功了!-整体利润如何达到目标。


SanAlex,非常有趣,我一定会详细研究这个EA,谢谢!

 

伙计们,今天好的代码建议,这里有一个图表,在右边的两个交易减去买入 - 是由一个卖出,卖出买入覆盖,根据算法应该进入买入,但为什么 - 那么这两个fi-tions,这看起来并产生一个减去交易的历史上最近 - 显示两个在加如何写,错误在哪里 - 这个TC翻转,平均 - 这些相同的F-I正常工作,总之,减去卖出后 - 必须打开购买,但它不打开,因为换句话说,如果我的订单是亏损的,它应该打开买入,但买入没有打开,因为f-i认为如果交易是亏损最多的边缘,这个f-iia报告为TRUE,否则为假,但它们都报告为TRUE。请帮助我决定。



// проверка предыдущего минусового селл
bool Calc_Loss_SELL()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) ==  DEAL_TYPE_BUY)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в селл разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В БАЙ разрешен ",TotalLot);
            break;
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


// проверка предыдущего минусового бай
bool Calc_Loss_BUY()
  {
   bool ord;
   bool TotalLot=false;
   HistorySelect(TimeCurrent()-HistoryDaysLoadI*86400,TimeCurrent());
   for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger(ticket,DEAL_TYPE) == DEAL_TYPE_SELL)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) < 0)
           {
            TotalLot=true;
            if (УСРЕДНЯЛКА) Print(" усреднение в бай разрешено ",TotalLot);
            else  Print(" ПЕРЕВОРОТ В СЕЛЛ разрешен ", TotalLot);
            break;          
           }
         else
           {
            break;
           }
        }
     }
   return (TotalLot);
  }


    //----------------------------------------------
      // проверка условий ПЕРЕВОРОТА В СЕЛЛ
      // нет поз рыночных и предыдущая сделка В БАЙ была минусовая и не было минусового селла
       Print(" Calc_Loss_BUY(): ",Calc_Loss_BUY(), " Calc_Loss_SELL(): ",Calc_Loss_SELL());
      
      if(!PositionSelect(Symbol()) && Calc_Loss_BUY() && !Calc_Loss_SELL())
        {
         m_trade.Sell(CalcLot(),_Symbol,LastTick.bid,LastTick.ask+double(SLE)*_Point,LastTick.bid-double(TPE)*_Point - _Spread*_Point);
         Print(" ПЕРЕВОРОТ БАЯ В СЕЛЛ, Calc_Loss_BUY(): ",Calc_Loss_BUY());
        }

 
      // проверка условий ПЕРЕВОРОТА в SELL
      // нет поз рыночных и предыдущий селл был минусовой И НЕ БЫЛО МИНУСОВОГО БАЙ
      
      if(!PositionSelect(Symbol()) && Calc_Loss_SELL() && !Calc_Loss_BUY())
        {
         m_trade.Buy(CalcLot(),_Symbol,LastTick.ask,LastTick.bid-double(SLE)*_Point,LastTick.ask+double(TPE)*_Point + _Spread*_Point);
         Print(" ПЕРЕВОРОТ СЕЛЛА В БАЙ, Calc_Loss_SELL(): ",Calc_Loss_SELL());
        }

我不能让它打开购买,但它应该在ubutical sell!!!!!!!!! 之后打开它。


在本质上,问题归结为确定盈利或亏损被关闭的边际位置,这成为一个买入或卖出的交易,并进一步看其类型!

帮助!加上!

 

日安!

有两个函数:一个是计算整个订单网格的函数,一个是关闭订单的函数

//+------------------------------------------------------------------+
double CalculiteProfit()
{
    double oProfit = 0;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            oProfit += OrderProfit();
          }
        }
      }
    }
    return(oProfit);
}
//+------------------------------------------------------------------+
 double FindLastBuyPrice()
{
   int oldticket, ticket = 0;
   double oldopenprice = 0;
   
   for(int cnt = OrdersTotal()-1; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
     {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
        {
          oldticket = OrderTicket();
          if (oldticket > ticket)
          {
            ticket = oldticket;
            oldopenprice = OrderOpenPrice();
          } 
        }
     }
   }
   return(oldopenprice);
 }
//+------------------------------------------------------------------+

关闭订单也有条件

 double op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

利润--在设定的存款货币中

这一切的想法:在订单网格计算等于零加上 存款货币利润 ,整个订单网格被关闭

请帮助我修改代码,以便有积分 而不是利润谢谢你。

 
Taras Slobodyanik #:

很明显,改变sl(或tp)是有原因的,不是吗?
但根据一些条件。

因此,在下一次检查时,这个条件将被定义为 "已满足"--订单已被修改。


如果我们谈论的是手动改变,有人会在EA不知情的情况下改变一些东西,那么我们当然需要收集一个数组结构,并不断与市场订单进行比较。

我已经忘记了......一开始我也是这样做的(好在我已经承诺了),但条件的方式似乎不可靠,我想要一些更明显的东西来表明已经改变的顺序。

原因: