FMZ量化交易币圈量化交易萌新看过来–带你走近币圈量化(三)
admin
2023-08-01 22:04:01
0

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意

国区邀请链接: https://www.myts3cards.com/cn/join/1837888   币种多,交易量大!

国际邀请链接:https://www.okx.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

FMZ量化交易平台邀请链接:https://www.fmz.com/

币圈量化交易萌新看过来–带你走近币圈量化(三)

报错信息

前几篇文章我们已经了解过所谓程序化、量化交易就是一个脚本程序根据从交易所获取到的数据,经过一系列的计算、判断、触发做出一些操作,操作交易所账户进行交易。这些获取数据、操作账户的行为都是通过交易所API接口进行的。简单说就是脚本程序和交易所交互,既然是交互那么就肯定有正常的交互、异常的交互。当发生异常交互时接口便返回了异常信息。

当然市面上的程序化、量化交易系统,是或自行开发的程序都会有各种各样的错误提示、报错信息。这些错误信息并非局限于交易所API接口的报错信息。还有诸如:程序运行时异常错误、配置错误、程序语法错误等。

在发明者量化交易平台上,错误信息也大概分为几个大类:

  • 策略语法错误
    这类错误最常见,通常是因为萌新不熟悉编程,学习测试阶段代码编写有语法错误导致。例如:1729d60a13cba9d922971729d60a13cba9d92297

    代码少写了括号之类的字符。此类错误通常在编辑策略页面就能看到错误提示,并且策略也是运行不起来的(运行时会直接报错,如下图)。

    17307cc98d89105d9df817307cc98d89105d9df8
    所以写完策略,在平台策略编辑页面习惯性的搂一眼,看看有没有红色小XX,有就肯定是有明显错误了。

  • 策略程序BUG导致的运行时程序异常
    程序存在BUG,在程序运行时,触发异常会导致程序异常停止,显示此类报错信息。16d0f7d1df7b22d4751d17307cc98d89105d9df8

    1759b0d5938e0f640fed17307cc98d89105d9df8

    此类错误都会导致程序异常,程序会停止运行。

  • 配置、设置不当导致的错误在FMZ平台,交易对统一定义为X_Y这样的格式,X代表交易币的名称,Y代表计价币的名称(期货币本位合约交易对的计价币通常用USD表示,在前几篇文章中有介绍)。例如BTC_USDT,如果我胡乱写交易对,写成BTC-USDT

    167c4c9470df9a5d927417307cc98d89105d9df8

    在FMZ平台回测系统中报错:

    1669566a9ee240c9d15717307cc98d89105d9df8

    实盘中报错:

    16a9397cba7e8df82fb417307cc98d89105d9df8

    再者,萌新经常遇到的一种错误:

    345be4d2aa663dd2c02cf5b97f95ce03fc0a737817307cc98d89105d9df8

    此类错误是由于修改了FMZ平台账号的密码,导致配置的交易所对象中的API KEY失效(用户的API KEY都是在浏览器端加密后配置在FMZ平台),策略无法启动,进而报错。

  • 接口调用报错接口调用报错是在运行策略时经常遇到的,往期文章中我们学习、了解到FMZ平台上的接口分为产生网络请求的接口不产生网络请求的接口。接口报错不会导致策略程序停止,通常是由于接口调用异常,返回了错误数据,然后策略没有做容错,使用了错误数据引发的程序异常错误导致程序停止(容错的概念在前几篇文章中有提及)。

    这里列举几个产生网络请求的接口报错信息:

    • 网络超时16803a54e430dc1fe98a17307cc98d89105d9df8

      萌新们经常遇到的报错信息之一,原因是使用了国内网络的设备(自己的电脑或者国内的服务器)。由于大部分交易所都被墙,所以国内网络基本上很多交易所都访问不到,访问接口都会报超时。(前几篇文章中有提及)

    • http 429 错误65057d99e2acdf9e237130ae7dc8082d333dc36b17307cc98d89105d9df8

      经典报错信息之一,原因是调用交易所接口过于频繁,超过交易所限制的频率。(前几篇文章中有提及)
      有的萌新同学可能会说,我多申请几个交易所的API KEY或者我多申请几个交易所账号不就行了。我们需要知道,交易所限制接口访问频率通常是基于IP地址的,简单说就是只要在一个IP地址发送的请求全部统计在这个IP地址上,超过了限制这个IP再发送请求交易所服务器就拒绝访问了。

    • 交易所接口业务层面的报错上面讲的timeout、429这些是网络层面的错误。交易所接口业务层面发生问题也会报错,例如我要获取现货行情,但是我设置了一个不存在的交易对。我在FMZ平台的调试工具里测试,调试工具是个很方便的测试工具,非常适合实盘测试函数调用、获取数据等需求。

      15fb2637a2e7593b051917307cc98d89105d9df8

      调试工具执行结果,调试工具执行和实盘执行并无区别。
      168e9d6a71669c56623517307cc98d89105d9df8

      Huobi	错误	GetTicker: Invalid ticker: {\"Info\":{\"err-code\":\"invalid-parameter\",\"err-msg\":\"invalid symbol\",\"status\":\"error\",\"ts\":1620872079355},\"High\":0,\"Low\":0,\"Sell\":0,\"Buy\":0,\"Last\":0,\"Volume\":0,\"OpenInterest\":0,\"Time\":0}
      

      这里的报错信息意思就是说交易对无效(从这里看出\"err-msg\":\"invalid symbol\")。
      例如此类和业务相关的报错还有很多,比如设置杠杆时某些交易所不支持带小数部分的杠杆值,此时杠杆值如果带有小数部分也会导致接口调用报错。

    列举一个不产生网络请求的接口调用

    • 设置期货合约代码
      有些接口仅仅是设置系统中的某些全局变量,不产生网络请求,例如:160b3d93560715ae1e1217307cc98d89105d9df8

      但是参数传错,或者乱写也是会报错的。

      16c2244b3fa8b8ab19e217307cc98d89105d9df8

    但是不论哪种类型的错误,显示出的报错信息都是查找问题的关键信息,通常都能从报错信息中看出问题所在。可以使用翻译工具,翻译报错信息,提取关键信息。例如上例中的\"err-msg\":\"invalid symbol\",翻译:“err msg”:“无效符号”。大概就知道是交易对设置错了,因为通常都用英文symbol代表交易代码、交易对。
    关于报错信息我们就简单探讨这些,对于常见问题有个帖子会持续收集用于查询:https://www.fmz.com/bbs-topic/1427

回测系统

回测系统也是一个量化工具中的重点,回测系统可以方便的测试策略原型,初步测试策略中潜在的BUG、逻辑问题等。对于回测系统需要理性看待。回测系统在一定程度上是可以反映出策略的一些问题的。

下面先简单的从FMZ支持的不同策略语言层面说明一下FMZ平台上的回测系统。(关于回测系统的一些介绍,前几篇文章中有所提及)

  • JavaScript浏览器端回测,使用的是本机硬件资源。
  • Python在托管者上回测,可以选择具体分配到哪一个托管者上(自己部署的托管者,FMZ平台的公共托管者都行)。鉴于FMZ平台上公共托管者负载较大,建议使用本机托管者回测(这样速度也会快些,公共托管者回测时,当任务较多超过负载,会取消一些回测任务,导致回测中断)。
  • C++和脚本语言不同,C++策略需要先编译然后执行。C++语言的策略会在FMZ平台(服务器)先编译(如果代码写的有问题,可能编译不通过,直接弹框报错提示)。编译通过后在FMZ平台上(服务器)回测。
  • 麦语言底层实现为JavaScript,回测时同样是在浏览器端回测。
  • 可视化底层实现为JavaScript,回测时同样是在浏览器端回测。

发明者量化交易平台的回测系统回测模式分为两种(这个不分策略语言,这个是回测设置,各种语言的策略回测都一样)。

167ba37ea237e9e4391c17307cc98d89105d9df8

关于回测系统的说明可以参看平台教程中的资料:

https://www.fmz.com/bbs-topic/4158#策略回测

  • 1、模拟级别回测
    模拟级别回测简单通俗的说就是根据K线数据模拟生成逐个时间节点的价格数据。

    K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
    

    就好比如图这样模拟:
    35c54e14e29601352720d51f75e2d7674415f92e17307cc98d89105d9df8
    当然实际回测系统实现这个模拟的时候情况比图上略微复杂,这里不做深究,理解模拟级别回测机制即可。
    知道了这个原理,就需要注意模拟级别回测的弊端了,虽然模拟级别回测速度很快(因为模拟生成的价格,并非真实的逐秒的价格一个个放出)。但是如果策略拟合了模拟的tick变动趋势就会让策略表现的非常优秀(但是实际情况中价格可能不是这种走势,虽然价格都在这个K线柱的框架内)。
    这里用于生成模拟tick数据的K线叫做底层K线,这个K线的周期叫做底层K线周期,在策略设置页面如图设置:

    16aba144dec480cbbe4e17307cc98d89105d9df8
    这里设置1分钟,意思就是使用周期为1分钟的K线数据作为生成模拟tick的数据源。

    还有一点就是对于高频策略,使用模拟级别回测显然不太合适。但是对于趋势策略,使用模拟级别回测还是能一定程度反映出策略的绩效的。

  • 2、实盘级别回测
    说了模拟级别回测,我们再讲一下实盘级别回测。简单说实盘级别回测就是回测时真实的放出逐秒的价格数据。让策略回溯行情中每秒的价格。这种回测模式下可以回测一些交易频率高的策略,并且可以得到一定程度的参考价值。
    缺点就是实盘级别回测数据量太大,无法较大时间范围的回测(通常时间范围不到1天)。可以通过关闭分笔数据,降低深度数据档位(成交逐笔数据,盘口深度数据在实盘级别回测中也有逐秒快照,所以实盘级别回测数据量庞大),来适当增大回测范围,如图:16c5759018ce2468f09417307cc98d89105d9df8

发明者量化交易平台回测系统的数据来源是何处呢?回测系统默认使用的是FMZ平台的数据中心的数据,FMZ平台数据中心自动收集设置好的各个交易所各个币种的行情数据,提供给平台上的回测系统。

  • 1、默认使用FMZ数据中心的数据
    前几篇文章中有提及:https://www.fmz.com/bbs-topic/6857#量化交易平台
    平台提供的回测数据只支持有限的交易对(全市场、全币种回测数据是一个天文数字,全部都收集不现实,平台收集了主流交易所、主流币种的行情数据)。
  • 2、使用自定义数据源数据
    可以使用回测页面的选项设置自定义数据源,简单说就是如果你自己有某个交易所的数据,可以根据FMZ平台的格式要求,提供给FMZ平台的回测系统,用于回测。170bc4ee715e452da58b17307cc98d89105d9df8

    关于自定义数据源FMZ API文档中也有一些说明:
    https://www.fmz.com/api#自定义数据源

    FMZ文库中也有一些方案:
    16a8d67c7729d576e61617307cc98d89105d9df8

    有兴趣的萌新们可以研究参考。

学习、测试、思考

做程序化、量化交易离不开学习测试思考
思考问题这个并不能凭空思考,那样是低效的。解决问题、思考问题最行之有效的就是查找资料、然后动手试下思考分析,问题如果没解决请往复以上动作。

但是通常萌新遇到问题,就会感觉:

“哎呀~程序化、量化、写策略太难了”。
“看了半天,还是懵懵的!”
“没入门到想放弃!”
….

在FMZ平台上入门其实很简单,首先要善于查找资料。发明者量化交易平台策略广场、社区、文库中有不少资料可以查阅。

16c07ea6b321d5897d8617307cc98d89105d9df8

然后就是动手能力,使用回测系统、调试工具可以很方便的测试,这里并不是说要测试一个完整的策略。其实你如果是完全0基础,甚至你可以在FMZ量化的回测系统上学习JavaScript程序基础。

这个是我经常学习JS的教程网站:https://www.runoob.com/js/js-loop-for.html 不仅限于JS,各种IT知识这里都能查询、学习。
比如我JS的正则表达式不知道怎么用,怎么办?
当然先查阅资料,然后动手试下咯~

我看到这样一个例子:
16b26187867bd99be89517307cc98d89105d9df8
我想测试下,甚至就可以用FMZ平台的回测系统测试学习。

回测系统上随便设置一个交易所
167a758dc4fb3a06d94917307cc98d89105d9df8

测试以下代码:

function IsEmail(str) {
    var reg=/^\\w+@[a-zA-Z0-9]{2,10}(?:\\.[a-z]{2,4}){1,3}$/;
    return reg.test(str);
}

function main() {
    var strEmailAddress1 = \"13512345678\"
    Log(strEmailAddress1, \" 是邮件地址么 ? \", \" 回答:\", IsEmail(strEmailAddress1))
    
    var strEmailAddress2 = \"123456789@qq.com\"
    Log(strEmailAddress2, \" 是邮件地址么 ? \", \" 回答:\", IsEmail(strEmailAddress2))
}

163051c589a0e35d5a2317307cc98d89105d9df8

看~多好的一个学习工具!
比如我想学习JavaScript语言的循环逻辑怎么写,动手试下:

按数组中的顺序,循环打印一个数组变量中的各个元素:

function main() {
    var arr = [{coinName: \"BTC\", price: 10000}, {coinName: \"LTC\", price: 100}, {coinName: \"ETH\", price: 2000}, {coinName: \"ETC\", price: 500}]
    for (var i = 0 ; i < arr.length ; i++) {
        Log(arr[i])
    }
}

171af7782a696ce2c56717307cc98d89105d9df8

瞬间是不是感觉学习有动力了呢!
其实在FMZ上,完全可以边看JavaScript教程,边在回测系统上动手学习JavaScript基础。JavaScript语法掌握的差不多了,进入下一个阶段需要实际使用交易所接口获取数据测试了,还可以使用FMZ平台的调试工具进行真实的接口测试。

然后就是多思考,举一反三,测试验证,对比分析等。这样学习入门就非常快了。

FMZ量化交易平台邀请链接:https://www.fmz.com/

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意,邀请链接:https://www.myts3cards.com/cn/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!。

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183

买好币上币库:https://www.kucoin.com/r/1f7w3

火必所有用户现在可用了,但是要重新注册账号火币:https://www.huobi.com

全球最大交易所币安,

国区邀请链接:https://accounts.suitechsui.mobi/zh-CN/register?ref=16003031 支持86手机号码,网页直接注册。

相关内容

热门资讯

Windows 11 和 10... Windows 11/10 文件夹属性中缺少共享选项卡 – 已修复 1.检查共享选项卡是否可用 右键...
事件 ID 7034:如何通过... 点击进入:ChatGPT工具插件导航大全 服务控制管理器 (SCM) 负责管理系统上运行的服务的活动...
Hive OS LOLMine... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...
Radmin VPN Wind... Radmin VPN 是一款免费且用户友好的软件,旨在牢固地连接计算机以创建一个有凝聚力的虚拟专用网...
如何修复 Steam 内容文件... Steam 内容文件锁定是当您的 Steam 文件无法自行更新时出现的错误。解决此问题的最有效方法之...
Hive OS 部署 PXE ... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...
如何在Instagram上扫描... 如何在Instagram上扫描名称标签/ QR? 总而言之,您可以通过大约四种不同的方法来扫描这些I...
在 Windows 11 中打... 什么是链路状态电源管理? 您可以在系统控制面板的电源选项中看到链接状态电源管理。它是 PCI Exp...
Hive OS 新建飞行表的方... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...
farols1.1.501.0... faro ls 1.1.501.0(64bit)可以卸载,是一款无需连接外部PC机或笔记本计算机即可...