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

 
Vladimir Zubov:

这个我不知道,我通常在进入 "准备检查 "阶段前不会关闭浏览器。试着在你的标签中寻找 "我的产品",草稿通常在那里,如果不在那里,你可能需要从头开始。如果你想发布的产品名称没有被占用,很可能是草案还没有被保存。

谢谢你!找到了!
 
亲爱的同事们,大家好!
很久以前,我问过一个问题,就是能否将类对象的 数组保存到文件中,我从社区得到了肯定的答复。我终于有机会检查这一切了。是的,确实是这样的,这样的救赎。然后它甚至读到了 "that"。总之,FileWriteArray和FileReadArray都按写入和读出的项目数量返回正确的值。然而,当试图通过一个类方法访问数组的第一个元素时,测试者产生了无效的指针访问错误,然后是OnTick关键错误,并终止了。不过请注意,如果你不是在处理一个先写后读的数组,而只是处理在内存中创建的东西,那么一切都能正常工作。可能是什么问题?恢复已保存的对象阵列的正确方法是什么?
 
BlackTomcat:
亲爱的同事们,大家好!
很久以前,我问过一个问题,就是能否将类对象的 数组保存到文件中,我从社区得到了肯定的答复。我终于有机会检查这一切了。是的,确实是这样的,这样的救赎。然后它甚至读到了 "that"。总之,FileWriteArray和FileReadArray都按写入和读出的项目数量返回正确的值。然而,当试图通过一个类方法访问数组的第一个元素时,测试者产生了无效的指针访问错误,然后是OnTick关键错误,并终止了。不过请注意,如果你不是在处理一个先写后读的数组,而只是处理在内存中创建的东西,那么一切都能正常工作。可能是什么问题?如何正确恢复保存的对象阵列?
请把代码发给我!
 
你好!我对MT4很了解,但MT5是个初学者。请告诉我哪条命令可以关闭订单!我在这里的操作类型列表中找不到https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions。只有CLOSE_BY,我只需要关闭它。
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
你好,我对MT4很了解,但MT5是个新手。请告知哪条命令可以关闭订单!我在这里的操作类型列表中找不到任何命令https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions。我唯一的命令是CLOSE_BY,我只需要关闭订单。

在MT5中没有那么简单

平仓是指以相同的手数开立一个相反的交易。

TRADE_ACTION_DEAL 操作

 
Vladislav Andruschenko:

在MT5中没有那么简单

平仓是指以相同的手数开立一个相反的交易。

TRADE_ACTION_DEAL 操作

谢谢你的回答,但我还不太清楚......。我开了一个相反的交易,然后我需要在它们之间做一个TRADE_ACTION_CLOSE_BY
 
Alexander Kharlamov:
谢谢你的回答,但我还不太明白。我是否建立一个相反的头寸,然后在它们之间进行TRADE_ACTION_CLOSE_BY

在MT5中,有一个 "位置 "的概念。你可以关闭一个位置。如果你想完全关闭一个位置,请使用标准库。对于一个净值账户来说,一个平仓的例子。

//+------------------------------------------------------------------+
//|                                                 PositionClos.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>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
附加的文件:
 
Karputov Vladimir:

在MT5中,有一个POSITION的概念。你可以关闭一个位置。如果你想完全关闭一个位置,请使用标准库。对于一个净值账户来说,一个如何平仓的例子。

我想我开始明白了!) 仓位会随着该工具的每一次订单执行 而改变,对吗。现在的问题是"职位标识符是一个唯一的数字,分配给每个新开的职位,并且在整个生命周期内不会改变 它与开仓时的订单票相对应"。

如果后来的命令改变了位置,它的数量是否仍然等于创造它的第一个命令?
 
Alexander Kharlamov:

1.我想我开始明白了!)这个符号的每一次订单执行,头寸都会改变,对吗?
2.职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应"。

如果后来的命令改变了位置,它的数量是否仍然等于创造它的第一个命令?

1.是的,这是正确的。执行一个订单会产生一个交易。一项交易可以。

  • 创建一个职位
  • 改变一个位置的音量
  • 平仓
2.还有什么能比实践更好呢?:)在任何图表上打开一个头寸(手动)。运行脚本

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.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"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

- 注意这一行(看终端的 "专家 "标签)。

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

增加音量,再次运行脚本--再次比较这一行

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

正如你所看到的,如果位置不反转,位置属性(POSITION_IDENTIFIER)不会改变。

附加的文件:
 
POSIITION_IDENTIFIER在位置颠倒时 发生变化。