mql5语言的特点、微妙之处以及技巧 - 页 11

 
利奥59
谢谢你!
由于 "订单是交易 指令",只有挂单才能被归类为 "有效订单",而 "头寸-买入和卖出 "不是交易指令。还是我 "错过了什么"?

在俄语中,订单就是命令。你给出一个命令,它可以是8个中的 任何一个。

1,2,3,4 -买入-停止,卖出-停止,买入-限制和卖出-限制 -在订单被触发后,出现一个位置

5、6 - 买入或卖出 - 这些不是订单

7, 8 - stopLoss 和 TakeProfit - 这些是订单;这些是经纪公司退出市场的订单。

案件1、2、3、4--待定的命令

5,6 - 占领市场),即在市场上占据一定的位置,这就像在战争中一样:每个人在前线都有自己的位置,他们被指挥官派往那里。

 
利奥59
谢谢!
由于 "一个订单就是一个交易 订单",只有挂单才能被归类为 "有效订单",而 "头寸--买入和卖出 "并不是一个交易订单。还是我 "错过了什么"?
你也可以在链接上看到第一节"交易条款"
 
维塔利-穆齐琴科

5、6 - 买入或卖出 - 这些不再是订单了

下面的代码显示,这些是实际的订单。

关于交易、自动交易系统和交易策略测试的论坛

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和MarginCall订单除外。有效的订单可以是买入和卖出。
谢谢你!
据我所知,"有效订单 "一词是指买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。
如果我有:多头和 空头 头寸,并设置了买入限价 卖出止损,那么OrdersTotal()将返回值=4。 对吗?
 
利奥59
谢谢你!
根据我的理解,"有效订单 "指的是买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。
如果我有:多头和 空头 头寸,并设置了买入限价 卖出止损,那么OrdersTotal()将返回值=4,对吗?
OrdersTotal()将返回2(这些是买入限价和卖出止损的挂单),PositionsTotal()也将返回2(买入和卖出头寸)。
 
弗拉基米尔-卡尔普托夫
OrdersTotal()将返回2(这些是买入限价和卖出止损的挂单),PositionsTotal()也将返回2(买入和卖出头寸)。
))现在这是酷!!!!函数OrdersTotal()返回什么?
 
利奥59
))现在,这就是酷!!!!函数OrdersTotal()返回什么?
我们可以使用以下术语:仓位--已经买入/卖出的东西或已经触发的挂单,而订单--如果价格达到一定水平,就可以开仓的挂单。
 
利奥59
))现在,这就是酷!!!!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++;
        }
  }
//+------------------------------------------------------------------+

这里是 "贸易 "标签的状态。

贸易

正如你所看到的,有两个未结头寸(欧元兑美元买入0.03和美元兑加元买入0.02),有三个本地订单(美元兑日元买入限额、美元兑日元卖出限额和欧元兑美元买入限额)。

和打印出的脚本。

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
附加的文件:
 
Maxim Khrolenko:
我们可以采用以下术语:头寸是指已经买入/卖出的东西,或者是手动的,或者是已经触发的挂单,订单是指在价格达到指定水平时开仓的挂单。
所有这些早已被接受,在编写文档之前,也许值得阅读Sergei Kovalev的教程(它被内置在MQL4中)。


这就是如何构建一个分析市场和挂单的区块。

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

循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些在终端交易标签中显示的订单。因此,循环中的迭代次数将等于交易中存在的订单数量。

 
利奥59
一切都早已被接受,在写文档之前,读一读Sergei Kovalev的教程可能不会有什么坏处(它被内置在MQL4中)。


这就是如何构建一个分析市场和挂单的区块。

循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些显示在终端交易标签中的订单。因此,循环中的迭代次数将是交易中存在的订单数量。

没有必要进行退火处理)

这是MT4代码,没有对订单和头寸进行划分--所有东西都混在一起。