程序库: 交易品种 - 页 5

 
Viktar Dzemikhau:
我想知道为什么需要自定义符号?

tick 历史记录- 而不是 MT5。您可以立即了解源在交易条件方面与 TS 的匹配程度。

  • 可以同步不同符号的价格历史记录,避免出现虚假套利情况。
  • 您可以在测试器中根据不同的价格历史记录运行统计智能交易系统,并比较交易条件。
  • 可以比较不同馈送之间的滞后期。
  • 您可以删除价格历史中的明显错误,填补漏洞。
  • 您可以利用必要的统计数据生成自己的价格历史 - Monte Carli TC。
  • 您可以生成合成符号的价格历史,并在其上运行 TC。
  • ...
  • 该分支中已实现一些功能。

     
    fxsaber:

    在 MT5 测试器中,通常(例如外汇),限价订单会出现正滑移,从而导致调用 ExpertRemove。从而大大加快优化速度。

    这对自定义符号尤为重要,因为即使余额为负,也会进行交易。

    简单的 ExpertRemove 是不行的,因为在自定义符号中没有相关数据的情况下(最常见的情况),它会以零最后价格 强制关闭当前仓位。


    因此,要想在没有扑克牌 的情况下退出回溯测试,应在 ExpertRemove 之前执行以下操作

    // 通过限价订单平仓
    bool CloseAll()
    {
      bool Res = true;
      
      for (int i = OrdersTotal() - 1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS))
          Res &= (OrderType() > OP_SELL) ? OrderDelete(OrderTicket())
                                         : OrderSend(OrderSymbol(), OrderType() ? OP_BUYLIMIT : OP_SELLLIMIT , OrderLots(), OrderClosePrice(), 100, 0, 0) && false;
        
      return(Res);
    }
    
    void OnTick( void )
    {
      if (IsRemove() && CloseAll())
        ExpertRemove();
    }


    请注意,在当前跳动点上平仓只能在净价上进行(在净价上执行了消除限价订单滑点的原始任务),因为在当前跳动点上平仓只能在净价上进行(在净价上执行了消除限价订单滑点的原始任务)。

    交易、自动交易系统和交易策略测试论坛。

    库: 符号

    fxsaber, 2018.04.06 16:43

    在交易所符号Netting 账户 上以当前价格下达的限价订单将立即执行(在 Tester 中),无需等待下一个刻度线。


    请注意,重要的不仅是股票代码,还有净额结算账户。例如,您可以在对冲-MQ-Demo 中使用 MOEX 符号,但其执行方式(在测试器中)与在同一净额结算-MQ-Demo 中的执行方式(在测试器中)不同。

    这就是为什么在完全相同的 MOEX 符号上进行的回溯测试会因账户类型不同而不同的原因之一。

    因此,有时您必须等待下一个跳动点。


    这就是跳舞。

     

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

    图书馆:符号

    fxsaber, 2018.04.07 22:37

    摘要

    在真实刻度上,刻度数量减少了 16 倍(最轻的过滤器),优化速度提高了 14 倍,质量丝毫不受影响(此处未输入的分析)。当然,只有以特定方式编写 TS 时才能做到这一点。特别是在没有条形分析的情况下。

    以前的免费通用加速度 只提高了两倍。现在的也是免费的(质量不受影响),但通用性较差。然而,收益却超过了一个数量级。现在,我只用这种方法优化 TC。没有错。

    既然话题涉及加速,这里还有一个加速秘诀

    交易、自动交易系统和交易策略测试论坛。

    错误、错误、问题

    fxsaber, 2018.09.11 17:15

    测试器文件夹移至 5GbRAMDisk,并在 MT5 目录中执行

    mklink /j Tester z:\Tester


    现在固态硬盘安然入睡,优化速度提高了 ~1.5倍(目测),而且是免费的!

    同时,固态硬盘也不会被杀死

     
    fxsaber:

    简单的 ExpertRemove 是做不到的,因为如果自定义符号中没有相关数据(最常见的情况),当前仓位就会被强制平仓,最后价格为零


    这些就是舞蹈。

    拐杖还在另一个

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

    错误、错误、问题

    fxsaber, 2018.09.12 18:30

    视频中

    在真实刻度上的交易所工具。条形图由 Bid 构建,无翻转数据,BUY 仓位打开。可以清楚地看到,该头寸的当前收盘价

    PositionGetDouble(POSITION_PRICE_CURRENT)

    一直等于零,尽管 Bid 一直在变化。我怎样才能向测试员解释,股票代码应按 Bid 关闭 BUY 仓位?现在,即使是权益也无法计算。


    这就是为什么目前唯一的解决办法是计算(Bid+Ask)/2

     
    fxsaber:

    由于主题涉及加速

    测试者三个月的 "真实点差 "演练(800 万点差)耗时 100 毫秒(4000 次订单发送、800 次交易 + EA 逻辑)。配方是自定义符号

     

    感谢您提供的代码。我已经根据它为自己创建了一些东西...不过,我稍微修改了一下克隆方法,以便可以加载历史记录的某一部分。否则,如果有很多刻度,就会消耗大量内存。

    bool CiCustomSymbol::Clone(const string _src_symbol,const ulong _from_msc=0,const ulong _to_msc=LONG_MAX)
    
     
    Denis Kirichenko:

    稍微调整了克隆方法,允许加载历史记录的某一部分。否则,如果有很多刻度,就会消耗大量内存。

    考虑到您的意见,我已经进行了更新,谢谢。

     

    我还创建了 2 个从文件加载自定义历史记录的方法。假设有 2 个包含刻度线和分钟数的文件。任务是将它们加载到所选符号的刻度和报价数据库中。

    bool              LoadTicks(const string _src_file_name);
    bool              LoadRates(const string _src_file_name);
     
    Denis Kirichenko:

    我还创建了 2 个从文件加载自定义历史记录的方法。假设有 2 个包含刻度线和分钟数的文件。任务是将它们加载到所选符号的刻度和报价数据库中。

    因此,在一般情况下没有定义格式。

     
    fxsaber:

    因此,格式并没有普遍定义。

    是的,但我们需要考虑一下。不过,我有指定格式的"√"存档,现在我已经把它做出来了。很简单:<日期>,<时间>,<编号>,<任务>。