mql5言語の特徴、微妙なニュアンスとテクニック - ページ 11

 
Leo59 です。
ありがとうございました。
注文は取引 注文である」ため、保留中の注文のみが「有効な注文」として分類され、「ポジション-買いおよび売り」は取引のための注文ではありません。それとも、私が「何かを見逃している」のでしょうか?

注文はロシア語でオーダーです。注文を出すと、8つの うちどれでもいい。

1, 2, 3, 4 -buy-stop, sell-stop, buy-limit, sell-limit -注文がトリガーされた後、ポジションが表示さ れます。

5, 6 - 買いまたは売り - これらは注文ではありません。

7, 8 - stopLoss と TakeProfit - これらは、証券会社の注文で、市場から退出するためのものです。

ケース1、2、3、4-保留中

5, 6 - 市場獲得)、すなわち市場で一定の位置を占めることは、戦争と同じで、司令官によって送られた前線で、誰もが自分の位置を持っています。

 
Leo59 です。
ありがとうございます。
注文は取引 注文である」ため、「有効な注文」として分類できるのは保留中の注文のみであり、「ポジション-売買」は取引注文ではありません。それとも、私が「何かを見逃している」のでしょうか?
また、リンク先の第1項「取引条件」でも ご確認いただけます。
 
ヴィタリー・ムジチェンコ

5, 6 - buy or sell - これらはもはや注文ではありません。

以下のコードでは、これらが実際の注文であることを示しています。

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

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2017.02.25 16:30

// Триггер срабатывания SL/TP - работает только на демо/реале (не в тестере).
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
       PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
       (PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
  {
    const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
    
    if (Price == PositionGetDouble(POSITION_TP))
      Print("Position #" + (string)Trans.position + " - triggered TP.");    
    else if (Price == PositionGetDouble(POSITION_SL))
      Print("Position #" + (string)Trans.position + " - triggered SL.");    
  }
}
 
fxsaber
有効注文とは、TP/SL注文とマージンコール注文を除く、約定または取消待ちの取引注文の ことです。有効な注文は、買いおよび売りの場合があります。
ありがとうございました。
私の理解では、「有効な注文」とは、買いおよび/または売りのポジションと、設定された(ブローカーが受け付けた)保留中の注文のことを指します。
ロングと ショートの ポジションを持ち、買い 指値と 売り指 値を設定している場合、OrdersTotal()は値=4を返しますよね?
 
Leo59 です。
ありがとうございました。
私の理解では、「有効な注文」とは、買いおよび/または売りのポジションと、設定された(ブローカーが受け付けた)保留中の注文を指します。
ロングと ショートの ポジションを持ち、買い 指値と 売り指 値を設定している場合、OrdersTotal()は値=4を返しますよね?
OrdersTotal() は 2 件 (買いの指値注文と 売りの逆指値注文) を返し、PositionTotal() も 2 件 (買いと売りのポジション) を返します。
 
ウラジーミル・カルプトフ
いいえ。OrdersTotal() は 2 件 (これらは買い指値注文と 売り指値注文) を返し、PositionTotal() も 2 件 (買いポジションと売りポジション) を返します。
))今、これがカッコいい!!!!関数OrdersTotal()は何を返すのですか?
 
Leo59 です。
))今のはカッコイイ!!!!関数OrdersTotal()は何を返すのですか?
ポジションとは、すでに売買が成立しているもの、または保留中の注文を 指し、注文とは、価格が一定の水準に達した場合にポジションを建てるための保留中の注文を指します。
 
Leo59 です。
))今のはカッコイイ!!!!OrdersTotal() 関数は何を返すのですか?

もうヘルプを読んでください :)

勉強してください。

//+------------------------------------------------------------------+
//|                                    OrdersTotalPositionsTotal.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo  m_position;                   // trade position object
COrderInfo     m_order;                      // pending orders object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
        {
         //if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
         Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
               " ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
         total++;
        }
   total=0;
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
        {
         //if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
         Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
               " ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
         total++;
        }
  }
//+------------------------------------------------------------------+

ここでは、「取引」タブの状況を説明します。

トレード

ご覧の通り、2つのオープンポジション(EURUSD buy 0.03とUSDCAD buy 0.02)と3つのローカルオーダー(USDJPY buy limit, USDJPY sell limit and EURUSD buy limit)が存在します。

とスクリプトをプリントアウトしたものです。

2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 0: USDCAD POSITION_TYPE_BUY 0.02 1.32797000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
ファイル:
 
マキシム・フローレンコ
次の用語を採用することができます:ポジションとは、すでに売買されたもの、または手動で、または保留中の注文が トリガーされたもので、注文とは、価格が指定されたレベルに達した場合にポジションを開くための保留中の注文のことです。
すべては昔から認められていることで、ドキュメントを書く前に、Sergei Kovalevのチュートリアル(MQL4に組み込まれています)を読むといいかもしれません。


このように、成行注文と未決済注文を分析するブロックを構築することができます。

   for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                    
         // Здесь должен выполняться ..
         // ..анализ характеристик ордеров
        }
     }                                        //Конец тела цикла

ループ文のヘッダに初期値i=1を指定し、ループの終了条件はi<=OrdersTotal()という式になる。関数 OrdersTotal() は、Terminal の Trade タブに表示されている成行注文および 保留注文の合計金額を返します。したがって、ループの反復回数は、取引に存在する注文の数と同じになります。

 
Leo59 です。
すべては昔から認められていることで、ドキュメントを書く前に、Sergei Kovalevのチュートリアル(MQL4に組み込まれている)を読んでもおそらく損はないでしょう。


このように、成行注文と未決済注文を分析するブロックを構築することができます。

ループ文のヘッダに初期値i=1を指定し、ループの終了条件はi<=OrdersTotal()という式になる。関数 OrdersTotal() は、Terminal の Trade タブに表示されている成行注文および 保留注文の合計金額を返します。したがって、ループ内の反復回数は、取引に存在する注文の数となります。

アニールする必要はありません)

これはMT4のコードで、注文とポジションの区分はなく、すべてが混在しています。

理由: