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

 
人が助ける。取引が開始された価格を取得しようとしている。最初はCTradeで取引したのですが、trade.resultpriceが0になってしまいました。MqlTradeで取引を開始したところ、Strategy Testerではresult.priceが良い結果を示していましたが、Liveではゼロに等しくなってしまいました。OnTradeTransactionで 試しましたが、ライブトレードでは遅すぎるし、自動売買を停止すると0と表示されます。買い取引が成立した価格を知る方法は?
 
mikhail_shmakov:
人が助ける。取引が開始された価格を取得しようとしている。最初はCTradeで取引したのですが、trade.resultpriceが0になってしまいました。MqlTradeで取引を開始したところ、Strategy Testerではresult.priceがうまく表示されていたのに、Liveでは0に等しくなってしまいました。OnTradeTransactionで 試しましたが、ライブトレードでは遅すぎるし、自動売買を停止すると0と表示されます。買い取引が成立した価格を知るには、どのような方法がありますか?
struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
非常に高速なトレードで」とはどういう意味ですか?OnTradeTransactionはすべての取引で機能します。TRADE_TRANSACTION_DEAL_ADDで取引の種類を分け、価格を取るだけです。
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

//+------------------------------------------------------------------+ 
//| Получает текущее количество отложенных ордеров с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 
int GetOrdersTotalByMagic(long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 
//--- пройдем по всем отложенным ордерам 
   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++; 
//--- 
   return(total); 
  }
プログラマー仲間の皆さん、こんにちは。この機能の改造をお願いします。上記のMQL5 Referenceの 関数ですが、与えられたMagicの全オープンポジションの数を計算させるにはどうしたらよいでしょうか?
 
Kolya32:
プログラマー仲間の皆さん、こんにちは。この機能の改造をお願いします。MQL5 Referenceで 紹介済みの関数ですが、Magicのオープンポジション数を計算させるにはどうしたらよいでしょうか?
せめてOrders***をPositions***に変更してから確認すべきです。
 
Alexey Viktorov:
少なくとも、あらゆる場所でOrders***をPositions***に変更して、確認してみてください。

動作しているようです))MQL 5にこの機能を追加することができます)) 早すぎるかもしれませんが、テストしてみます))

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 

int GetPositionsTotalByMagic(long const magic_number)  
  { 
   ulong position_ticket; 
   int total=0; 
//--- пройдем по всем открытым позициям 
   for(int i=0;i<PositionsTotal();i++) 
      if((position_ticket=PositionGetTicket(i))>0) 
         if(magic_number==PositionGetInteger(POSITION_MAGIC)) total++; 
//--- 
   return(total); 
  } 
 
Kolya32:

動作しているようです))MQL5ハンドブックに この機能を追加することができます)) 早すぎるかもしれませんが、まだテスト中です))

こんなことをいちいち付け加えていたら、ハンドブックがゴミ捨て場になってしまいます。すみません、変更したクオリティの問題ではありません。
 
mikhail_shmakov:
人が助ける。取引が開始された価格を知りたいのですが。最初はCTradeを使っていたのですが、trade.resultpriceが0になってしまいました。MqlTradeで取引を開始したところ、Strategy Testerではresult.priceが良い結果を示していましたが、Liveではゼロに等しくなって しまいました。OnTradeTransactionで 試しましたが、ライブトレードでは遅すぎるし、自動売買を停止すると0と表示されます。買い取引が成立した価格を知るには、どのような方法がありますか?

OrderSend は注文を送信する。そして、その実行と対応する取引が履歴に表示されるのを待つ必要があります。

これをすべて正しく行うには、OnTradeTransactionに長けているか、OrderSendのためにかなり重いコードを一度書かなければなりません。

2つ目のケースでも、CTradeは希望通りに動作します。

 

選択した チャートシンボルの価格計測の 精度を決定する小数点以下の桁数を返すDigitsのアナログは何でしょうか。

 
Aleksey Vyazmikin:

選択した チャートシンボルの価格計測の 精度を決定する小数点以下の桁数を返すDigitsのアナログは何でしょうか?

SymbolInfoInteger("XXXYYY",SYMBOL_DIGITS);
 
Artyom Trishkin:

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

理由: