网赚论坛

 找回密码
 免费注册
查看: 302|回复: 0
打印 上一主题 下一主题

比特币量化交易之30行代码带你进入量化投资世界

[复制链接]

14

主题

15

帖子

56

积分

Ⅰ级财主

Rank: 1

积分
56
跳转到指定楼层
楼主
发表于 2017-11-20 22:56:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30行代码带你进入量化投资世界


精简极致的均线策略 30行打造一个正向收益系统
没错!你听的没错是30行代码!仅仅30行小编我习惯先通篇来看看 代码,这样能有个宏观的了解!

策略参数如下

参数描述类型默认值
FastPeriod入市快线周期数字型(number)3
SlowPeriod入市慢线周期数字型(number)7
EnterPeriod入市观察期数字型(number)3
ExitFastPeriod离市快线周期数字型(number)3
ExitSlowPeriod离市慢线周期数字型(number)7
ExitPeriod离市观察期数字型(number)1
PositionRatio仓位比例数字型(number)0.8
Interval轮询周期(秒)数字型(number)10

  • 导入了 交易类库 方便策略编写, 不用为 是否买到 是否卖出等 挂单 烦恼了。读代码的时候,发现未声明的变量感到迷惑时,到群里解答。
function main() { var STATE_IDLE = -1; var state = STATE_IDLE; var opAmount = 0; var initAccount = $.GetAccount(); Log(initAccount); while (true) { if (state === STATE_IDLE) { var n = $.Cross(FastPeriod, SlowPeriod); if (Math.abs(n) >= EnterPeriod) { opAmount = parseFloat((initAccount.Stocks * PositionRatio).toFixed(3)); var obj = n > 0 ? $.Buy(opAmount) : $.Sell(opAmount); if (obj) { opAmount = obj.amount; state = n > 0 ? PD_LONG : PD_SHORT; Log("开仓详情", obj, "交叉周期", n); } } } else { var n = $.Cross(ExitFastPeriod, ExitSlowPeriod); if (Math.abs(n) >= ExitPeriod && ((state === PD_LONG && n < 0) || (state === PD_SHORT && n > 0))) { var obj = state === PD_LONG ? $.Sell(opAmount) : $.Buy(opAmount); state = STATE_IDLE; var nowAccount = $.GetAccount(); LogProfit(nowAccount.Balance - initAccount.Balance, '钱:', nowAccount.Balance, '币:', nowAccount.Stocks, '平仓详情:', obj, "交叉周期", n); } } Sleep(Interval*1000); }}

  • 这个策略只有一个主函数function main(),没有其它的函数模块。主函数内只有一个循环。
  • 小编我把这个策略的代码注释版已经传上QQ群共享了,初次学习的同学可以看看注释方便学习
  • 这里没有加入官方QQ群的请加入:309368835 BotVS EA交流(BotVS)。策略就这么几十行代码,很精简吧!为了照顾没有Javascript语言基础的同学我们在此简单讲下语法,以免有同学看不明白代码。
变量声明

用关键字 var + 变量名 例如 var name = “小明”

循环

while(循环条件){ // 将会重复执行的代码}
循环条件为真则反复执行{}内的代码。 循环条件为假 则跳出循环。

条件分支

if (判断条件){ // 执行代码} else { // 执行代码}
很简单,翻译就是 如果(真){执行这代码}其 它情况{执行这代码}

赋值

一个=号是 赋值,例如

name = “张三”;
就是把“张三”这个名字 给 name, 赋值容易与比较相等搞混
如 比较 为 == 两个等号,
例子 “张三”==“李四” 明显张三不是李四 所以 “张三”==“李四” 为假。

相关API

在演示写策略之前我们梳理下策略中用到的API和模板导出函数, 在 BotVS 上有详细的API文档和模板源码说明。


  • $.GetAccount函数:模板导出函数,用于获得交易所账户信息
  • Log函数:API,用于向日志输出信息,显示数值等
  • $.Cross函数:模板导出函数,用于检测均线指标交叉情况
  • $.Buy函数:模板导出函数,用于购买操作
  • $.Sell函数:模板导出函数,用于卖出操作
  • LogProfit函数:API,用于输出收益,函数从第二个参数可以加其它信息Sleep函数:API,让程序暂停一会儿,参数单位为毫秒。
策略代码还用到了Javascript的库函数、对象方法。


  • Math.abs()函数:返回参数的绝对值
  • Number对象的 toFixed()函数:按参数 保留小数位数四舍五入。注意,函数返回的为字符串parseFloat全局函数:把 字符串参数 返回浮点数。
以上Javascript的相关资料可以在:JavaScript Number 对象 http://www.w3school.com.cn/jsref/jsref_obj_number.asp 上学习

程序的流程图 手绘的 没用工具画 很业余 见谅!


一步一步的搭建我们的策略

所有的策略程序入口处都是 main() 函数,也就是说策略先从main函数开始运行。






实盘

至此简单的30行策略就完成了!把代码部署到托管机器人上,
Running!策略开始运行了,买入操作。。。。


感谢BotVS,提供这么精简的代码,在BotVS上有大量的开源策略可供学习提升,与众多量化高手一同进步。

官方QQ群定期更新学习资源,为量化学习者铺平道路,登堂入室。

配套视频教学


参考资料



  • 策略源码
  • 知乎链接
  • github上的代码库BotVS的代码广场


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2026-7-19 01:28 , Processed in 0.577201 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表