「フローティングPositionSelect()エラー - ページ 4

 
prostotrader:

もう一度、「受験生」「医者」「教授」「学者」に対して。

OnTradeTransaction()に来るイベントはすべて失われる可能性が あります。

だから、意味のあるイベントTRADE_TRANSACTION_HISTORY_ADDを 受信した後では間違いだと思う。

の場合、端末のデータは更新されません。

ヘルプ(https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction) で。

端末から手動で、またはOrderSend()/OrderSendAsync()関数で送信した1つの取引要求がトレードサーバー上で複数の連続した取引トランザクションを生成 することができます。これらの取引の端末への到着順序は保証されていないため、ある取引取引の到着を他の取引より後に待つという取引アルゴリズムを構築することはできません。また、サーバーから端末に配信される際に、トランザクションが失われる可能性がある。

そのため、なぜこの機能が必要なのかが全く分からない。使わなければいいだけの話です。注文や取引の履歴を自分で分析する必要があるのです。

 
Dmitry Fedoseev:

ヘルプ(https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction) で。

そのため、なぜこの機能が必要なのかが全く分からない。使わなければいいだけの話です。注文や取引の履歴を自分で分析する必要があるのです。

ありがとうございます。また、他の機能もすべて使用する必要はありません :)(悪気はない)
 

注文、ポジション、取引に関しては

ヘルプにあるように-取引の順序は保証されない-履歴への注文転送の取引は、取引の取引より早く受け取ることができる。
ターミナルでのポジションの変更は、厳密には売買取引の受信の結果であり、その受信はポジションが変更されたことを保証するものである。
注文を履歴に移すトランザクションを取得することは、注文がアクティブ(オープン)でなくなり、注文履歴に移されたことのみを保証します。


Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.

このフレーズについては

非同期取引で端末の初期バージョンの1つのドキュメントに残っていたようです。近日中に削除する予定です。犯人は処刑される。

 
MQ Alexander:

注文、ポジション、取引に関しては

ヘルプにあるように-取引の順序は保証されない-履歴への注文転送の取引は、取引の取引より早く受け取ることができる。
ターミナルでのポジションの変更は、厳密には売買取引の受信の結果であり、その受信はポジションが変更されたことを保証するものである。
注文を履歴に移すトランザクションを取得することは、注文がアクティブ(オープン)でなくなり、注文履歴に移されたことのみを保証します。


このフレーズについては

非同期取引で端末の初期バージョンの1つのドキュメントに残っていたようです。近日中に削除する予定です。有罪の者は処刑される。

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

そして、私はマシンガン(せめてライフル)を持って、撮影に参加する?:)

 

MQアレクサンダー!

トレードやポジションの説明をもっと詳しくしてほしい。

YOUが書いたから。

Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.

そして、実際には次のようなことが判明しています。

Expert Advisor build 1375のデモを開くテスト(2回実行されました。)

//+------------------------------------------------------------------+
//|                                              Test_deff_order.mq5 |
//|                                                   Copyright 2016 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
uint  order_req_id;
ulong order_ticket;
ulong magic=987142563;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   OrderPlace();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
    switch( trans.type )
    {
      case TRADE_TRANSACTION_REQUEST:
        if((order_req_id > 0) && (order_req_id==result.request_id))
        {
          if(result.retcode==TRADE_RETCODE_PLACED) order_ticket=result.order;
        }
      break;
      case TRADE_TRANSACTION_DEAL_ADD:
        if((order_ticket!=0) && (trans.order==order_ticket))
        {
         Print("Deal done. Ticket: ",trans.order);
        }
      break;
      case TRADE_TRANSACTION_HISTORY_ADD:
        if((order_ticket!=0) && (trans.order==order_ticket))
        {
         Print("History done. Ticket: ",order_ticket);
         if(HistoryOrderSelect(order_ticket))
         {
           double vol_cur = HistoryOrderGetDouble(order_ticket,ORDER_VOLUME_CURRENT);
           double vol_init = HistoryOrderGetDouble(order_ticket,ORDER_VOLUME_INITIAL);
           datetime time_setup=datetime(HistoryOrderGetInteger(order_ticket,ORDER_TIME_SETUP));
           double deals_vol = GetDealsVolume(Symbol(),order_ticket,time_setup);
           Print("Volume initial: ",vol_init," Volume current: ",vol_cur," Deals done: ",deals_vol);
           if(PositionSelect(Symbol()))
           {
            Print("Position exists.");
           }
           else
           {
            Print("Position NOT exists.");
           }
         }
        }
      break;
    }
  }
///----
double GetDealsVolume(const string a_symbol,const ulong a_ticket,const datetime start)
  {
   double volume=0;
   if(HistorySelect(start-180,TimeTradeServer()+180))
     {
      int deals=HistoryDealsTotal();
      if(deals>0)
        {
         for(int i=deals-1; i>=0; i--)
           {
            ulong deal_ticket=HistoryDealGetTicket(i);
            ulong ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));
            if(( ticket>0) && (ticket==a_ticket))
              {
               volume+=HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);
              }
           }
        }
     }
   return( volume );
  } 
//---
//+------------------------------------------------------------------+
//| Place order                                                      |
//+------------------------------------------------------------------+
void OrderPlace()
{
  ResetLastError();
  MqlTradeRequest request={0};
  MqlTradeResult  result={0};
  order_ticket=0;
  order_req_id=0;
    
//--- Fill structure
  request.action=TRADE_ACTION_DEAL;//PENDING;
  request.magic=magic;
  request.symbol=Symbol();
  request.volume=1;
  double step=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); 
  request.price=0;//SymbolInfoDouble(Symbol(), SYMBOL_ASK);//-step;
  request.type = ORDER_TYPE_BUY;//BUY_LIMIT;
  request.comment = "";      
  request.type_filling = ORDER_FILLING_IOC; ///
  request.type_time = ORDER_TIME_DAY;
  if(OrderSendAsync(request, result))
  {
    if(result.retcode==TRADE_RETCODE_PLACED) 
    {
      order_req_id=result.request_id;
    }
    else
    {
      Print( __FUNCTION__, ": Error! Retcode: ",GetLastError());
    }
  }
  else
  {
    Print( __FUNCTION__, ": Order not sent!");
  }
}   
//+------------------------------------------------------------------+

そして、その結果がこちらです。

2回ともTRADE_TRANSACTION_HISTORY_ADDが先に来ていますが

最初のケースではポジションがなかったのに、2番目のケースではポジションがあったのです

どのように理解 すればよいのでしょうか?

端末のログを添付するのを忘れました。

2016.08.15 15:37:14.935 Experts expert Test_deff_order (GAZR-9.16,M1) loaded successfully
2016.08.15 15:37:17.694 Trades  '1007932': exchange buy 1.00 GAZR-9.16 at market
2016.08.15 15:37:17.702 Trades  '1007932': exchange buy 1.00 GAZR-9.16 at market placed for execution in 8 ms
2016.08.15 15:37:17.721 Trades  '1007932': deal #7487011 buy 1.00 GAZR-9.16 at 13897 done (based on order #50942179)
2016.08.15 15:37:46.456 Trades  '1007932': exchange sell 1.00 GAZR-9.16 at market, close #50942179 buy 1.00 GAZR-9.16 13897
2016.08.15 15:37:46.463 Trades  '1007932': exchange sell 1.00 GAZR-9.16 at market, close #50942179 buy 1.00 GAZR-9.16 13897 placed for execution in 7 ms
2016.08.15 15:37:46.497 Trades  '1007932': deal #7487015 sell 1.00 GAZR-9.16 at 13892 done (based on order #50942187)
2016.08.15 15:37:50.348 Experts expert Test_deff_order (GAZR-9.16,M1) removed
2016.08.15 15:37:51.845 Experts expert Test_deff_order (GAZR-9.16,M1) loaded successfully
2016.08.15 15:37:53.776 Trades  '1007932': exchange buy 1.00 GAZR-9.16 at market
2016.08.15 15:37:53.786 Trades  '1007932': exchange buy 1.00 GAZR-9.16 at market placed for execution in 9 ms
2016.08.15 15:37:53.807 Trades  '1007932': deal #7487017 buy 1.00 GAZR-9.16 at 13898 done (based on order #50942195)
2016.08.15 15:37:58.632 Trades  '1007932': exchange sell 1.00 GAZR-9.16 at market, close #50942195 buy 1.00 GAZR-9.16 13898
2016.08.15 15:37:58.639 Trades  '1007932': exchange sell 1.00 GAZR-9.16 at market, close #50942195 buy 1.00 GAZR-9.16 13898 placed for execution in 7 ms
2016.08.15 15:37:58.664 Trades  '1007932': deal #7487020 sell 1.00 GAZR-9.16 at 13892 done (based on order #50942197)
2016.08.15 15:41:52.483 Experts expert Test_deff_order (GAZR-9.16,M1) removed
 

プロストレーダー、内輪の質問です。なぜ、ヒストリカルオーダーが 好きで、トレードが 嫌いなのですか?:-))

MQアレクサンダーは こう語る。

Что касается ордеров, позиций и сделок.

ヘルプに書かれているように - 着信トランザクションの順序は保証されません - トランザクションの前に履歴への注文転送のトランザクションを受信することができます。
ターミナルでのポジションの変更は厳密には トレード トランザクションを受信した結果であるため、その受信はポジションが変更されたことを保証するものです。
注文を履歴に移すためのトランザクションを取得することは、注文が有効(オープン)でなくなり、注文履歴に移されたことのみを保証するものです。

そして、あなたの場合

case TRADE_TRANSACTION_DEAL_ADD


空っぽ

そして、もう一つの叙情的な発言。MT5の概念では、履歴注文の存在は、取引を行おうとした事実を反映しています。しかも、実行されたのは事実ではない。そして、それを知るためには、貿易を参照する必要があります。すでに取引操作の結果が反映されています。それなら、コードの中でトランザクションを扱う方が論理的です...。

 
Dennis Kirichenko:

プロストレーダー、内輪の質問です。なぜ、ヒストリカルオーダーが 好きで、トレードが 嫌いなのですか?:-))

MQアレクサンダーは こう語る。

そして、あなたの場合


がほとんどない...。

あなたの親密な質問に答えているのです。

あなたはおそらく、FOREX市場で働いていて、1つの注文を扱っているのでしょう。

だから、理解もできない問題でしつこく「嘘」をつくのですね。

車に2つのハンドルがあり、2人のドライバーがどちらも前方だけを見て運転していると想像してください。

道路1stドライバーは、相手がステアリングを切っている(仮に右に切っている)ことをどうやって知ることができるのでしょうか?

また、よく見て ください。

原始的なロジックはすべて成行 注文の実行を前提にしていますから。

指値 注文と保留注文 があることに注意を喚起する

完全には実行されず、部分的に実行される可能性があります。

 
prostotrader:

また、よく見て ください。

そして、そこで何を見ればいいのか!

TRADE_TRANSACTION_HISTORY_ADDの場合、誤ってポジション情報を取得していることに気づきましたか?

と、すでに言われているようですが...。
 

prostotrader:

原始的なロジックはすべて成行 注文の実行を前提にしていますから。

指値 注文と未決済注文 があることに注意を喚起したい

全部ではなく、部分的に実行される可能性があります。

あなたは私の原始的な論理を判断することはできません、子供...
 
Dennis Kirichenko:
私の原始的な論理を判断するのは、あなたではありません...。

そして、誰が判断するのでしょうか。

私はあなたの発言であなたの能力を判断します!

写真は明らかに美しくない :(

教授、もっと理解できる?

それに、MQアレクサンダーが あなたに回答を委任した覚えはありません。