脚本: ThirdPartyTicks

 

ThirdPartyTicks:

与第三方逐笔报价档案协同工作的函数库。


作者: fxsaber

 
Automated-Trading:

ThirdPartyTicks

作者:fxsaber

但 mt5 的策略测试器无法使用该 tick 数据 - 对吗?:(

您是否可以编写一个脚本,从刻度线数据中为 MT5 创建一个人工符号,这样就可以使用自己的本地刻度线数据对该人工符号进行测试和优化?

== 谷歌翻译 ====>

但是,MT5 策略测试器不能使用 tick 数据,对吗? :(

您能否编写一个脚本,通过刻度线数据为 MT5 创建一个人工符号,以便使用自己的本地刻度线数据对该人工符号进行测试和优化?
 
Carl Schreiber:

但 mt5 的策略测试器无法使用该刻度线数据,对吗?:(

您能否编写一个脚本,从刻度线数据中为 MT5 创建一个人工符号,以便可以使用自己的本地刻度线数据对该人工符号进行测试和优化?

该脚本创建的自定义符号 可用于在 Strategy Tester 中进行测试。

 
//https://www.mql5.com/zh/code/20225
#include <fxsaber\ThirdPartyTicks\Web.mqh>
#include <fxsaber\ThirdPartyTicks\String.mqh>
#include <fxsaber\ThirdPartyTicks\Data.mqh>

struct SYMBOL_PROFILE 
{
  string Name;
  
  double BuyLots;
  double SellLots;
  
  bool operator ==( const SYMBOL_PROFILE &Value) const
  {
    return(this.Name == Value.Name);
  }
  
  string ToString( void ) const
  {
    return(this.Name + " +" + ::DoubleToString(this.BuyLots, 2) + " -" + ::DoubleToString(this.SellLots, 2));
  }
};

class SYMBOLS_PROFILE : public DATA<SYMBOL_PROFILE >
{
private:
  static const uchar CensoredURL[];
  
public:
  SYMBOLS_PROFILE( const string URL = NULL )
  {
    uchar Bytes[];
    
    if (WEB::Get(Bytes, (URL == NULL) ? ::CharArrayToString(SYMBOLS_PROFILE::CensoredURL) : URL))
    {
      string Str = ::CharArrayToString(Bytes);
      
      STRING::Between(Str, "<tbody>", "</tbody");
      STRING::Between(Str, "<tbody>", "</tbody");
      Str = STRING::Between(Str, "<tbody>", "</tbody");
      
      SYMBOL_PROFILE SymbProfile;
      
      while (::StringLen(Str) > 400)
      {
        SymbProfile.Name = STRING::Between(Str, "<td width=\"10%\">", "</td>");
        SymbProfile.BuyLots = (double)STRING::Between(Str, "<span>", "</span>");
        SymbProfile.SellLots = (double)STRING::Between(Str, "<span>", "</span>");
        
        this.Add(SymbProfile);
      }
    }
  }
  
  string ToString(void ) const
  {
    string Res = NULL;
    
    const uint Size = this.GetAmount();
    
    for (uint i = 0; i < Size; i++)
      Res += this[i].ToString() + "\n";
    
    return(Res);
  }
};

static const uchar SYMBOLS_PROFILE::CensoredURL[] =
{
  0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x72, 0x61, 0x6E, 0x6E, 0x66, 0x6F,
  0x72, 0x65, 0x78, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x75, 0x2F, 0x73, 0x68, 0x6F,
  0x77, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2F
};

// 简介
void OnStart()
{
  SYMBOLS_PROFILE Symbols;
  
  Print(Symbols.ToString());
}


结果

AUDCAD +0.06 -0.00
AUDCHF +0.02 -0.03
AUDUSD +0.05 -0.04
CADCHF +0.02 -0.03
CHFJPY +0.00 -0.01
DAX30 +0.00 -0.10
DJI30 +0.90 -0.00
EURAUD +0.16 -0.08
EURCAD +0.12 -0.00
EURCHF +0.00 -0.03
EURGBP +1.35 -19.99
EURJPY +0.00 -0.28
EURNZD +0.10 -0.00
EURRUB +0.00 -0.02
EURUSD +0.29 -0.19
GBPAUD +0.04 -0.03
GBPCAD +0.22 -0.54
GBPCHF +0.00 -0.06
GBPNZD +0.00 -0.05
GBPUSD +0.02 -0.02
NZDCAD +0.00 -0.01
NZDUSD +0.00 -0.01
USDCAD +0.09 -0.01
USDCHF +0.05 -0.01
USDJPY +0.15 -0.02
USDRUB +0.00 -0.02
USDZAR +0.00 -0.01
XAGUSD +0.00 -0.01
XAUUSD +0.02 -0.00
XBRUSD +0.00 -0.10
 
Библиотеки: Symbol
Библиотеки: Symbol
  • 2017.10.13
  • www.mql5.com
Symbol: Автор: fxsaber...
 

在第三方点数报价中,如果不借助该库 禁用限价订单的滑点功能,我们可以在测试器中得到以下结果

final balance 10005004.00 RUR
OnTester result 10004391
2018.04.04 23:59:57   deal #397 balance -613.00 [withdrawal] done
TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.468. Test passed in 0:00:03.416 (including ticks preprocessing 0:00:00.811).
TESTER_Censored,M1: total time from login to stop testing 0:00:03.884 (including 0:00:00.468 for history data synchronization)

即利润为 5004 点,而 631 点(每八点)是测试器的 "奖励",这并不好。


在禁用限价订单滑点的情况下。

final balance 10004391.00 RUR
OnTester result 10004391
TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:00:03.432 (including ticks preprocessing 0:00:00.827).
TESTER_Censored,M1: total time from login to stop testing 0:00:03.463 (including 0:00:00.031 for history data synchronization)

没有 "奖励",这不是误导。

SlipPage
SlipPage
  • 投票: 20
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Проскальзывания при исполнении ордеров вносят несистемные прибыль/убыток. Данный скрипт выводит величины этих проскальзываний в валюте счета. Можно оценить качество исполнения ордеров торговавшей ТС — вклад несистемных проскальзываний в ее мат. ожидание. Тестер в режиме...
 

您提到在 MO 中使用铸字,能详细说明一下吗?

我知道在当前版本中这是套利。或者是否有加载其他数据的选项?

我对从另一个开放式实时终端加载数据也很感兴趣,如何通过库更正确地实现这一点?

 
Maxim Dmitrievsky:

您提到使用铸字来制作《国防部》,能详细说明一下吗?

有人建议在国防部中使用历史。我没有解释,请参阅说明。自定义符号很方便,因为它们可以在 MQL 和测试器中同时使用。

据我所知,当前版本是套利。或者还有加载其他数据的变种?

当前版本是什么?我觉得没有理由使用其他数据源。

我还对从另一个开放终端实时加载数据感兴趣,如何通过库更恰当地实现这一点?

实时自定义是非常容易实现的。例如,实时股票符号(自动生成 M1 和 "tick "历史)只需 5-10 行纯 MQL 代码即可创建。

到目前为止,我自己只在 Tester/Optimiser 的基础上创建 TS 时使用自定义符号。为此,我使用该工具包作为源材料。

我使用其他工具加速和调整 Tester/Optimiser--请参阅上面的帖子。

 
fxsaber:

什么的当前版本?我认为没有理由使用其他来源。

当前版本--就使用第三方来源的报价而言,可以添加一些宏观经济指标等,但这只是国防部的一个研究课题。

但对于不同报价的套利(多币种测试)--非常有趣,可以编写有趣的模型,但也是一个研究课题。

还有一个想法是将任意分布的值转化为自定义符号......但如何进一步应用也是一个研究课题:)

 
Maxim Dmitrievsky:

目前的版本--从引用第三方资料来源的意义上讲,可以将一些宏观经济指标等塞入其中,但这只是国防部的一个研究课题。

但对于不同报价的套利(多币种测试)--非常有趣,你可以建立有趣的模型,但这也是一个研究课题。

还有一个想法是将任意分布的值转化为自定义符号......但如何进一步应用也是一个研究课题:)

本主题与使用自定义符号的方法无关。这里只是以这些符号为形式的第三方勾选历史

至于为什么要选择它,请参阅说明。

 
fxsaber:

本主题毕竟与使用自定义符号的方法无关。这里只是以这些符号为形式的第三方勾选历史

以及选择它的具体原因--请参阅说明。

我只是随便想想,抱歉,我可以删除以前的帖子,我应该这样做吗?)