初心者の方からの質問 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);
}
または

投稿が古いのは承知していますが、今、ピンときたのです。

このビットは正しくありません、FXの手数料はゼロにすることができます

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

ありがとうございました。
 
Alexey Volchanskiy:

投稿が古いのは承知していますが、今、ピンときたのです。

このビットは正しくありません、FXの手数料はゼロにすることができます


どのように不正確なのでしょうか?
 


MQL5におけるコピーコンストラクタの問題

コピーコンストラクタの動的配列 this.arr は、デバッガからは1次元と認識されます。

その結果,出力では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で正しく動作していたかは疑問です。

 
こんにちは!単一の保留注文を 開く方法を教えてください。
ベイが開いているときに1つの保留注文を開く必要がある場合、ループを止めるにはどうすればよいですか?

預金がなくなるまで何枚も開けられる!

保留中の注文を1つ開く方法がわかりません。

 
Akinak:
こんにちは!単一の保留注文を 開く方法を教えてください。
ベイが開いているときに1つの保留注文を開く必要がある場合、ループを止めるにはどうすればよいですか?

預金がなくなるまで何枚も開けられる!

ありがとうございました。


まずは「彼が何者なのか」を知る必要があります。

 
Vladislav Andruschenko:


まずは「何者なのか」を知る必要があります。


Vladislav Andruschenko:


まず、「彼が何者なのか」を知る必要があります。


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オッケー");
さもなくば
Print("SELLSTOP Error");
}
if(s>0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots_work,BOPrase,Slip,0,0,", Magic,0,clrBlue);
if(tik>0)
Print("BUYSTOPオッケー");
さもなくば
Print("BUYSTOP Error");
}

}


 

さて、このサイクルで何をするかというと、こうです。

ポジションを建てる→注文を出す→ポジションの 数が増える→このサイクルを無限大に繰り返す。

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で正しく動作します。

新しいビルドでは、コピーコンストラクタが1次元配列のサイズさえも変更できません:エラー4007。

これは正しくないと私は思います。

理由: