程序库: MT4Orders - 页 21

 

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

库:MT4Orders

fxsaber, 2018.04.14 09:10 AM

示例

#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnInit()
{
  long Ticket;
  
  PRINT((Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Bid - 100 * _Point, Bid + 100 * _Point, "Hello World!", 12345)));
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    PRINT(OrderClose(OrderTicket(), 0.3, OrderClosePrice(), 0));
}

void OnDeinit( const int )
{
  const int Total = OrdersHistoryTotal();
  
  for (int i = 1; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      OrderPrint();
      
      PRINT(OrderTicket());
      PRINT(OrderMagicNumber());
      PRINT(OrderComment());
      PRINT(OrderTicketOpen());
    }
}


结果

2018.03.25 00:00:00   instant buy 1.00 EURUSD at 1.23527 sl: 1.23414 tp: 1.23614 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #2  buy 1.00 EURUSD at 1.23527 done (based on order #2)
2018.03.25 00:00:00   deal performed [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   order performed buy 1.00 at 1.23527 [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   (Ticket=OrderSend(_Symbol,OP_BUY,1,Ask,0,Bid-100*_Point,Bid+100*_Point,Hello World!,12345)) = 2
2018.03.25 00:00:00   instant sell 0.30 EURUSD at 1.23514, close #2 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #3  sell 0.30 EURUSD at 1.23514 done (based on order #3)
2018.03.25 00:00:00   deal performed [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   order performed sell 0.30 at 1.23514 [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   OrderClose(OrderTicket(),0.3,OrderClosePrice(),0) = true
2018.03.26 01:04:40   take profit triggered #2  buy 0.70 EURUSD 1.23527 sl: 1.23414 tp: 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   deal #4  sell 0.70 EURUSD at 1.23614 done (based on order #4)
2018.03.26 01:04:40   deal performed [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   order performed sell 0.70 at 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
final balance 10000046.11 EUR
2018.03.26 23:59:59   #3 2018.03.25 00:00:00 buy 0.30 EURUSD 1.23527 1.23414 1.23614 2018.03.25 00:00:00 1.23514 0.00 0.00 -3.16 Hello World! 12345
2018.03.26 23:59:59   OrderTicket() = 3
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = Hello World!
2018.03.26 23:59:59   OrderTicketOpen() = 2
2018.03.26 23:59:59   #4 2018.03.25 00:00:00 buy 0.70 EURUSD 1.23527 0.00000 1.23614 2018.03.26 01:04:40 1.23614 0.00 0.00 49.27 tp 1.23614 12345
2018.03.26 23:59:59   OrderTicket() = 4
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = tp 1.23614
2018.03.26 23:59:59   OrderTicketOpen() = 2

在示例中,您可以看到当触发 TP/SL 时,原始注释 "Hello World!"完全被 MT5 注释 "tp 1.23614 "所取代。

在 MT4 中,在这种情况下,注释会变成 "Hello World! tp 1.23614"。我是否应该在 MT4Orders 中也这样做?

也就是说,对于 SL/TP/MO 平仓,历史记录中的订单注释应该是开仓和平仓时注释的组合,这是否正确/方便?

 
fxsaber:

在示例中,您可以看到当触发 TP/SL 时,原来的 "Hello World!"注释会被 MT5 的对应注释 "tp 1.23614 "全部替换。

在 MT4 中,在这种情况下,注释会变成 "Hello World! tp 1.23614"。我需要在 MT4Orders 中做同样的操作吗?

也就是说,对于 SL/TP/MO 平仓,历史记录中的订单注释应该是开仓和平仓注释的组合,这是否正确/方便?

我的建议如下

Original_Comment[tp: 1.23614](因为有时需要解析注释)。

当评论长度超过限制时,记录异常情况

 
fxsaber:

在示例中,您可以看到当触发 TP/SL 时,原来的 "Hello World!"注释会被 MT5 的对应注释 "tp 1.23614 "全部替换。

在 MT4 中,在这种情况下,注释会变成 "Hello World! tp 1.23614"。我需要在 MT4Orders 中做同样的操作吗?

也就是说,对于 SL/TP/MO 平仓,历史记录中的订单注释应该是开仓和平仓时注释的组合,这是否正确/方便?

OrderComment 和 OrderCommission 一样,都在库中,现在运行速度很慢(多次调用时很明显)。很明显,这只是因为 MT5 的特殊性(将此数据分成 2 笔交易)。

也许只需添加 OrderCommentOpen?或者制作一个完全通用的变体:OrderCommentOpen、OrderCommentClose 和 OrderComment,试图模仿 MT4 的行为。

我仍在考虑为重定单佣金和定单评论建立缓存,或者为我自己的交易列表建立缓存,这在我的特殊情况下是一样的。

 
Andrey Khatimlianskii:

现在库中的 OrderComment 和 OrderCommission 运行速度很慢(多次调用时很明显)。很明显,这只是因为 MT5 的特殊性(将这些数据分为两个交易)。

这不应该影响实时性。

也许只需添加 OrderCommentOpen?或者制作一个通用变体:OrderCommentOpen、OrderCommentClose 和 OrderComment,试图模仿 MT4 的行为。

也许值得添加。现在可以这样做(针对 MT4 的历史订单)

string OrderCommentOpen()
{
  return(HistoryDealSelect(OrderTicketOpen()) ? HistoryDealGetString(OrderTicketOpen(), DEAL_COMMENT) : NULL);
}

string OrderCommentClose()
{
  return(HistoryDealSelect(OrderTicket()) ? HistoryDealGetString(OrderTicket(), DEAL_COMMENT) : NULL);
}

我仍在考虑为重定单佣金和定单评论或我自己的交易列表建立缓存,这在我的特定情况下是一样的。

如果我们建立缓存,它应该是针对整个历史的。我想最好是在通用圣经的基础上进行缓存。唯一的缺点是会占用VPS 的 内存。

在 Tester 中,MQ 在历史记录方面做得很好--它变得很快。当它被加速后,关于缓存主题的想法就消失了(有原始版本的圣经),因为我没发现它会明显快很多。此外,我没能为 Tester 设计出一个 TS,因为交易历史会严重影响逻辑。

实时缓存历史是不可能的--可以追溯修正。为什么要在实时情况下节省微秒?

 
fxsaber:

实时性应该不会受到影响。

也许值得添加。现在可以如下操作(针对 MT4 历史订单)

如果我们进行缓存,则应针对整个历史记录。最好以通用圣经为基础。唯一的缺点是会占用VPS 内存。

在 Tester 中,MQ 在历史记录方面做得很好--它变得很快。当它被加速后,关于缓存主题的想法就消失了(有原始版本的圣经),因为我没发现它会明显快很多。此外,我没能 为 Tester 设计出一种 TS,在这种情况下,交易历史会严重影响逻辑。

实时缓存历史是不可能的--可以追溯修正。为什么要实时保存微秒?

如果我理解正确的话,我有一个 TS:在某一特定时间,我们开始根据信号进入市场,最终进行了几次买入和卖出,在交易结束时,我们按原样关闭一切。
也就是说,如果不访问历史记录,TS 就无法使用。

 
Vitaly Muzichenko:

如果我没有理解错的话,我有一个 TS,它的工作原理是:在某个时间,我们根据信号开始入市,最终进行几次买入和卖出,在交易时段结束时,我们按原样关闭所有交易。
也就是说,如果无法访问历史记录,TS 就无法使用。

这句话的关键词是 "认真"。很明显,交易历史可以切入交易逻辑。问题出在 TS 上,Tester 在访问历史记录时速度会明显变慢。

 
fxsaber:

实时性应该不会受到影响。

也许值得添加。现在可以如下操作(针对 MT4 历史订单)

如果我们进行缓存,则应针对整个历史记录。最好以通用圣经为基础。唯一的缺点是会占用VPS 内存。

在 Tester 中,MQ 在历史记录方面做得很好--它变得很快。当它被加速后,关于缓存主题的想法就消失了(有原始版本的圣经),因为我没发现它会明显快很多。此外, 我没能为 Tester 设计出一种 TS,在这种情况下,交易历史会严重影响逻辑

实时缓存历史是不可能的--可以追溯修正。为什么要实时保存微秒?

您曾展示过一段代码,可以搜索历史记录中的类似 "模式"。

下面是一个具有深度历史记录的简单 TS:

我们查看从 "现在 "到 "过去一段时间(例如交易日)"的某个时间段内的当前价格 "形状模式",查找历史上所有类似的价格模式,按照 "重合度 "对其进行分类,从历史上的此类 "图片 "中选择几个重合度最高的部分。我们通过虚拟 I/O 分析历史,并为当前状态的输入/输出提供建议。您甚至可以根据历史模式分析的结果,为每项建议分配 "权重"。

 
Artyom Trishkin:

你曾展示过一段代码,可以搜索历史记录中的类似 "模式"。

就在这里。

下面是最简单的 TS,具有深入的历史记录:

我们查看从 "现在 "到 "过去一段时间(例如交易日)"的某个时间段内的当前价格 "形状模式",搜索历史上所有类似的价格模式,按照 "重合度 "对其进行分类,在历史 "图片 "中选择几个重合度最高的部分。我们通过虚拟 I/O 分析历史,并为当前状态的输入/输出提供建议。您甚至可以根据历史模式分析结果,为每项建议分配 "权重"。

显然,您没有理解我的意思。我指的是交易历史。

Библиотеки: Кроссплатформенная библиотека оригинальных математических функций
Библиотеки: Кроссплатформенная библиотека оригинальных математических функций
  • 2017.03.27
  • www.mql5.com
Кроссплатформенная библиотека оригинальных математических функций: Автор: fxsaber...
 

历史会严重影响逻辑的 TC 是一种适应性 TC。

绊脚石是什么?

 
Алексей Тарабанов:

历史会严重影响逻辑的 TC 是一种适应性 TC。

你是哪里出错了?

您需要举例说明交易历史(而非价格历史)对回溯测试时间有重大影响的 TC。