初学者的问题 MQL5 MT5 MetaTrader 5 - 页 657

 
Alexey Kozitsyn:
它似乎都在点上,甚至还有参考文献...就在有人宣称他已经阅读了文件并要求移除网状物(顺便说一下,这是在FORTS上使用的)时......你必须在这里讽刺一下。
我会记住的,准备好讽刺。
 
Anatoli Kazharski:
确保你不会被送走。)
太晚了,你已经在那里了。
 
new-rena:
晚了,你已经在那里了。
是谁,在哪里,一目了然。)
 
Vladimir Karputov:

套期保值账户的例子。

第一个操作是买入0.02,第二个操作是卖出0.01。总共两个仓位:买入0.02和卖出0.001。然后我们关闭卖出0.01的仓位,并关闭买入0.02 的仓位。

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade         m_trade;                      // trading object
CPositionInfo  m_position;                   // trade position object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static long counter=0;
   counter++;
   if(counter%300==0 && counter<700)
     {
      static int number=0;
      number++;
      if(number==1)
         m_trade.Buy(0.02);
      if(number==2)
         m_trade.Sell(0.01);
     }
   if(counter>7000)
     {
      int positions= PositionsTotal();
      if(positions == 0)
         return;
      int positions_total=PositionsTotal();
      for(int i=positions_total-1;i>=0;i--)
         if(m_position.SelectByIndex(i))
            m_trade.PositionClose(m_position.Ticket(),-1);
     }
  }
//+------------------------------------------------------------------+

和杂志。

Trade   2016.02.25 00:13:35   instant buy 0.02 EURUSD at 1.10167 (1.10158 / 1.10167 / 1.10158)
Trades  2016.02.25 00:13:35   deal #2 buy 0.02 EURUSD at 1.10167 done (based on order #2)
Trade   2016.02.25 00:13:35   deal performed [#2 buy 0.02 EURUSD at 1.10167]
Trade   2016.02.25 00:13:35   order performed buy 0.02 at 1.10167 [#2 buy 0.02 EURUSD at 1.10167]
TestEA (EURUSD,H1)      2016.02.25 00:13:35   CTrade::OrderSend: instant buy 0.02 EURUSD at 1.10167 [done at 1.10167]
Trade   2016.02.25 00:30:17   instant sell 0.01 EURUSD at 1.10157 (1.10157 / 1.10164 / 1.10157)
Trades  2016.02.25 00:30:17   deal #3 sell 0.01 EURUSD at 1.10157 done (based on order #3)
Trade   2016.02.25 00:30:17   deal performed [#3 sell 0.01 EURUSD at 1.10157]
Trade   2016.02.25 00:30:17   order performed sell 0.01 at 1.10157 [#3 sell 0.01 EURUSD at 1.10157]
TestEA (EURUSD,H1)      2016.02.25 00:30:17   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.10157 [done at 1.10157]
TestEA (EURUSD,H1)      2016.02.25 02:12:06   PositionClose #3 POSITION_TYPE_SELL 0.01
Trade   2016.02.25 02:12:06   instant buy 0.01 EURUSD at 1.10131, close #3 (1.10123 / 1.10131 / 1.10123)
Trades  2016.02.25 02:12:06   deal #4 buy 0.01 EURUSD at 1.10131 done (based on order #4)
Trade   2016.02.25 02:12:06   deal performed [#4 buy 0.01 EURUSD at 1.10131]
Trade   2016.02.25 02:12:06   order performed buy 0.01 at 1.10131 [#4 buy 0.01 EURUSD at 1.10131]

TestEA (EURUSD,H1)      2016.02.25 02:12:06   CTrade::OrderSend: instant buy 0.01 position #3 EURUSD at 1.10131 [done at 1.10131]
TestEA (EURUSD,H1)      2016.02.25 02:12:06   PositionClose #2 POSITION_TYPE_BUY 0.02
Trade   2016.02.25 02:12:06   instant sell 0.02 EURUSD at 1.10123, close #2 (1.10123 / 1.10131 / 1.10123)
Trades  2016.02.25 02:12:06   deal #5 sell 0.02 EURUSD at 1.10123 done (based on order #5)
Trade   2016.02.25 02:12:06   deal performed [#5 sell 0.02 EURUSD at 1.10123]
Trade   2016.02.25 02:12:06   order performed sell 0.02 at 1.10123 [#5 sell 0.02 EURUSD at 1.10123]
TestEA (EURUSD,H1)      2016.02.25 02:12:06   CTrade::OrderSend: instant sell 0.02 position #2 EURUSD at 1.10123 [done at 1.10123]

究竟是什么不清楚?你需要开一个相同数量的相反订单来平仓

谢谢你!我会努力的。
 

谁知道--"POSITION_PROFIT"是否包括佣金和互换?

如果不是,在MQL5中,应该用什么参数来找出订单的佣金金额?

 
new-rena:

谁知道--"POSITION_PROFIT"是否包括佣金和互换?

如果没有--在MQL5中应该使用什么参数来找出应计佣金的数额?

POSITION_PROFIT仅仅是指头寸的 利润(没有扣除佣金、掉期...)。要想知道一个仓位 的累计互换量,请按以下方法操作。

POSITION_SWAP

累积互换


而最终的佣金和总掉期,可以在平仓后,在交易历史中得到。

交易佣金

交易_佣金

折扣_SWAP

收盘时的累积互换

 
new-rena:

谁知道--"POSITION_PROFIT"是否包括佣金和互换?

如果不是,在MQL5中,应该使用什么参数来找出对订单收取的佣金金额?

在俄语中,订单不能盈利也不能亏损,只是一个执行的订单。当订单被执行时,你在市场上以你选择的价格收到你的头寸。


弗拉基米尔-卡尔普托夫

POSITION_PROFIT仅仅是头寸的 利润(没有任何佣金、掉期...)。你可以找出这样的位置 的累积互换。

而最终的佣金和最终的互换,你可以在平仓后,在交易历史中查到。

嗯,这都是错的,或者说是不完整的。

为什么我需要知道平仓后的佣金,或者说我需要知道它,但在任何时候,让我们假设账户有佣金和回撤或盈亏平衡,我如何计算,以便第一次触发是在价格回撤和平仓的情况下,佣金和掉期重叠的水平。我加1个点来支付佣金,那么掉期呢,因为头寸可能会在市场上停留一周,在这期间可能需要3个点来获得掉期,并在触发盈亏平衡时被平掉?

或者是我不懂计算方法?

 
Vitaly Muzichenko:

在俄语中,一个订单既不可能是盈利也不可能是亏损,它只是一个执行的订单。一旦订单被执行,你就会在市场上以你选择的价格获得你的头寸。


这都是错误的,或者说是不完整的。

为什么我需要知道收盘后的佣金,或者说我需要知道它,但在任何时候,让我们假设账户有佣金和追踪或收支平衡,我如何计算,以便在价格回滚和收盘的情况下,第一次击中的水平与佣金和交换重叠。我加1个点来支付佣金,那么掉期呢,因为头寸可能会在市场上停留一周,在这期间可能需要3个点来获得掉期,并在触发盈亏平衡时被平掉?

还是我在计算中遗漏了什么?

我知道"POSITION_PROFIT"已经包含了所有的内容(掉期、利润、佣金),这就足以断定我的利润是否有利可图?
 
new-rena:

谁知道--"POSITION_PROFIT"是否包括佣金和互换?

如果不是,在MQL5中,需要什么参数来找出对订单收取的佣金金额?

我没有强行使用MT4Orders库。但是,也许直接调用好的老的OrderCommission会更容易一些?

它不仅适用于套期保值账户,也适用于净值账户。

 
new-rena:
我理解"POSITION_PROFIT"已经包括了所有的内容(互换、利润、佣金)。
现在让我们用一个简单的专家顾问来检查它...
原因: