初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 938

 
Konstantin Nikitin:

そこで、必要な機能をクラスから引き出して、自分自身に書き込むのです。

ありがとうございます。私の質問はもっと簡単で、OrderSend(request,result)で注文を開き、そのパラメータですぐに操作したい、例えば、それらをプリントアウトしたい、ということなのです。こんな感じ。
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))
                
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ")
retcode、order、volumeなど一部のパラメータは出力されますが、dealとpriceは出力されません。
特に価格は気になるところです。すべての結果はMqlTradeResultに あります。同じようにプリントしているのに、プリントされるものとされないものがあります。
 

アレイを結合する方法は?

string eData[][50][3];
string bData[][20][5];
 ArrayCopy(eData,bData,ArraySize(eData)); // error: incompatible 3 arrays ranges for ArrayCopy function (50 and 20)

ArrayCopyは 1次元の配列しかコピーしないそうですが?

 
Vitaly Muzichenko:

アレイを結合する方法は?

ArrayCopyは 1次元の配列しかコピーしないそうですが?

いいえ、ArrayCopyは、mql5.comで許可されているすべてのアレイをコピーします。しかし、コピーするためには同一である必要があります。1番目の配列の2次元目は50、2番目の配列は20しかない。それは、3次元でも同じです。
 
Algotrader18:
ありがとうございます。私の質問はもっと簡単で、OrderSend(request,result)で注文を開き、そのパラメータですぐに操作したい、例えば、それらをプリントアウトしたい、ということなのです。例えば、retcode, order, volume などのパラメータは印刷されるが、deal, price は印刷されない。
特に価格は気になるところです。すべての結果はMqlTradeResultで 見ることができます。なぜ、あるパラメータは印刷され、別のパラメータは印刷されないのでしょうか?
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(!OrderSend(request,result))
          return;
                
        Print ("retcode = " + result. retcode + "; ");        
        Print ("deal = " + result. deal + "; ");
        Print ("order = " + result. order + "; "); 
        Print ("volume = " + result. volume + "; ");  
        Print ("price = " + result. price + "; ");
 
Konstantin Nikitin:

元々はそういうもの

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

初心者の方からの質問 MQL5 MT5 MetaTrader 5

アルゴトレーダー18 さん 2018.10.25 07:39

アフタヌーン!

ポジションをオープンして、MqlTradeResultの 内容をこのように表示したい。


   //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
 //============================================================     
        if(OrderSend(request,result))       
        Print ("result.retcode = " + result.retcode + "; ");        
        Print ("deal = " + result.deal + "; ");
        Print ("order = " + result.order + "; "); 
        Print ("volume = " + result.volume + "; ");  
        Print ("price = " + result.price + "; ");

result.retcodeでは、注文と数量は出力されますが、取引と価格は常に0になります。
どうか、何が間違っているのか教えていただけませんか?

なぜ、次のコードで迷子になったのか...。質問...

返品は受け入れられないと思います。次のティックに印刷されます。

 
Alexey Viktorov:
そして、その返り討ちは許せないと思っています。何しろ、次のティックに印刷されるのですから。

ラーニングオーダーセンド

戻り値

基本構造チェック(ポインタチェック)に成功した場合、true が返される 関数の結果をより詳細に 知るためには、結果構造のフィールドを分析 する必要がある

基本的なチェックが通れば、そのときだけ印刷する。全ては1つのティックに。と書いたのはそのためです。
        if(!OrderSend(request,result))
          return;
 
Konstantin Nikitin:

オーダーセンドを 探る

基本的なチェックに合格したら、そのときだけプリントアウトしてください。すべて同じティックに。だから書いたんです。
嗚呼、これは見てなかった。申し訳ありません...
 
Alexey Viktorov:

これは元々そうだったんです。

なぜ、次のコードで消えてしまったのか...。問

しかし、私の意見としては、これは許せません。次のティックに印刷されます。

これを含め、いろいろなバリエーションを試しました。

        ulong  deal;
        ulong  order;
        double volume;
        double price;    
          
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))

        retcode = result.retcode;
        deal = result.deal;
        order = result.order;
        volume = result.volume;
        price = result.price;
       
      
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ");

間違って全部質問にコピーしたわけではないのですが...。

 
Algotrader18:

これを含め、さまざまなオプションを試しました。

と間違えて質問にコピーしてしまった...。

検索してみると、かつてfxsaberがこの問題に取り組んだことがあります。彼が何をしたのか知らないし、興味もない。OnTradeTransactionで これらのパラメータをすべて取得する方が簡単なんです。
 
Rustam Esedulaev:
みなさん、こんにちは。
mql 4では、IsTradeContedtBusyという検証方法があります。
mql5にも同じようなものがあるのでしょうか?
ありがとうございました。

似たようなものはありません。MT5はマルチスレッドに対応しています。

理由: