初学者的问题 MQL5 MT5 MetaTrader 5 - 页 741

 
fxsaber:
你问的是没有变态的情况。如果你做到了,那么...
这就是为什么它是这样的。
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}

我意识到这个帖子是旧的,但它现在才像一根刺一样击中了我。

这一点是不正确的,外汇的佣金可以是零。

// На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
 
Artyom Trishkin:
ObjectGetValueByShift()(仅限MT4)ObjectGetValueByTime()(MT4,MT5)

谢谢你
 
Alexey Volchanskiy:

我意识到这个帖子是旧的,但它现在才像一根刺一样击中了我。

这一点是不正确的,外汇的佣金可以是零。


怎么会不正确呢?
 


在MQL5中复制构造函数的问题

在复制构造函数中的动态数组 this.arr被调试器看成是一维的。

因此,输出中ob2.arr的大小等于0。

为什么?

同样的片段在MQL4中也能正常工作。

MT5编辑

MetaEditor 5.0 1578

MT4编辑器

MetaEditor 5.0 1562

class obj
  {
public:
   double            arr[][2];
                     obj(){}
                     obj(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
     }
   obj operator=(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
      return &this;
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
obj Copy(obj &o)
  {
   return o;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   obj ob1,ob2;
   ArrayResize(ob1.arr,3);
   ob2=Copy(ob1);
   bool stop=true;
  }


 
Klimenko_a_e:

其结果是,输出中ob2.arr的大小为0。

为什么?

obj* Copy(obj &o)
  {
   return & o;
  };

否则你就是在创建一个新的对象。


   void operator=(obj &o)
     {
      ArrayCopy(this.arr,o.arr);
      return; // &this;
     }

否则就会发生不必要的事情。


我怀疑你的代码在MQL4中是否正常工作。

 
日安!请告诉我如何开立一个挂单
如果我需要在海湾开放时打开一个挂单,我如何停止循环呢?

我可以打开一堆,直到存款用完为止!

我不知道如何打开一个挂单。

 
Akinak:
日安!请告诉我如何开立一个挂单
如果我需要在海湾开放时打开一个挂单,我如何停止循环呢?

我可以打开一堆,直到存款用完为止!

提前感谢!


首先你需要找出 "他是谁"。

 
Vladislav Andruschenko:


首先,你必须找出 "他是谁"。


Vladislav Andruschenko:


首先,你需要找出 "他是谁"。


for(int i=0; i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS))
如果(OrderSymbol()==Symbol())
如果(OrderMagicNumber()==Magic)
如果(b>0)
{
int tak=OrderSend(Symbol(),OP_SELLSTOP,Lots_work,SOPrase,Slip,0,0,",Magic,0,clrRed)。
如果(tak>0)
Print("SELLSTOP Ok");
否则
Print("SELLSTOP错误")。
}
如果(s>0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,",Magic,0,clrBlue)。
如果(tik>0)
Print("BUYSTOP Ok");
否则
Print("BUYSTOP错误")。
}

}


 

那么,你在循环中所做的是这样的。

你开了一个头寸--你开了一个订单,头寸的数量 增加了,循环往复--直到无穷大。

int OrderSTotal=OrdersTotal();
for(int i=0; i<OrderSTotal;i++)
  {
   if(OrderSelect(i,SELECT_BY_POS))
      if(OrderSymbol()==Symbol())
         if(OrderMagicNumber()==Magic)

           {
            if(b>0)
              {
               int tak=OrderSend(Symbol(),OP_SELLSTOP,Lots_work,SOPrase,Slip,0,0,"",Magic,0,clrRed);
               if(tak>0)
                  Print("SELLSTOP  Ok");
               else
                  Print("SELLSTOP  Error");
              }

            if(s>0)
              {
                int tik=OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,"",Magic,0,clrBlue);
               if(tik>0)
                  Print("BUYSTOP  Ok");
               else
                  Print("BUYSTOP  Error");
              }
           }
  }
//+------------------------------------------------------------------+


你需要知道什么是b和s

 
fxsaber:

否则你就是在创建一个新的对象。


否则会发生不必要的事情。


我怀疑你的代码在MQL4中是否正常工作。

在真正的代码中--该函数返回一个对象。

我认为在这种情况下,复制构造函数应该创建一个临时副本。

该代码在MQL5 build 1545中正确工作。

在新版本中,复制构造函数甚至不能调整一维数组的大小:错误4007。

在我看来,这是不正确的。