精简极致的均线策略 30行打造一个正向收益系统

原帖地址:https://www.fmz.com/bbs-topic-new/262

没错!你听的没错是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 上学习

30行JavaScript代码实现一个比特币量化策略的更多相关文章

  1. 30行左右代码实现一个类似httprunner的接口框架

    框架的最终归宿往往是领域语言+模板解析. 首先先约定一种所要执行操作的表述格式.然后通过模板解析将描述语言转化为代码进行执行.例如,我们可以使用以下yaml文件描述多个步骤并且需要关联的接口: api ...

  2. 用25行JavaScript语句实现一个简单的编译器

    原文:https://www.iteye.com/news/32680 译者注:即使对于专业程序员来说,构造一个编译器也是颇具挑战性的任务,本文将会引导你抽丝剥茧,一探究竟! 我已经写了几篇与编程语言 ...

  3. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  4. 不到30行JS代码实现的Excel表格

    不到30行JS代码实现的Excel表格,jQuery并非不可替代 某国外程序员展示了一个由原生JS写成不依赖第三方库的,Excel表格应用,有以下特性: 由不足30行的原生JavaScript代码实现 ...

  5. 60行JavaScript代码俄罗斯方块

    教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏   早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下( ...

  6. 18 行 JS 代码编一个倒时器

    有时候在生活中,你需要一个JavaScript倒计时时钟,而不是一个末日装置设备.不管你是否有一次约会,销售.促销.或者游戏,你可以受益于使用原生JavaScript构建一个时钟,而不是拿到一个现成的 ...

  7. 教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏

    早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用C写一个功能基本齐全的俄罗斯方块的话,大 ...

  8. 40多行python代码开发一个区块链。

    40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...

  9. 9 行 javascript 代码获取 QQ 群成员

    昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个 ...

随机推荐

  1. HDU 1041

    题意: 给原始序列1 给定变化规则是,对于原来的序列每一个0前边插入1,每个1前边插入0. 问原始序列经过n次变化之后有多少对相邻的0. 规律题: 从第二次开始 当第奇数次变化之后,数量变成原来数量的 ...

  2. asp.net mvc3的静态化实现

    静态化处理,可以大大提高客户的访问浏览速度,提高用户体验,同时也降低了服务器本身的压力.在asp.net mvc3中,可以相对容易地处理静态化问题,不用过多考虑静态网页的同步,生成等等问题.我提供这个 ...

  3. serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件

    https://github.com/eltld/serverSpeed https://github.com/c-wind/serverSpeed https://github.com/PeterK ...

  4. 从程序员角度看ELF | Linux-Programming (转)

    ★概要: 这片文档从程序员的角度讨论了linux的ELF二进制格式.介绍了一些ELF执行 文件在运行控制的技术.展示了如何使用动态连接器和如何动态装载ELF. 我们也演示了如何在LINUX使用GNU ...

  5. hduoj2094产生冠军

     产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  6. CocoaPoda在iOS开发中的使用

    CocoaPoda在iOS开发中的使用 CocoaPods 简介 CocoaPods是iOS开发中不可避免的依赖管理第三方的工具,能简化一些第三方库文件需要添加编译参数及依赖库的繁复工作 CocoaP ...

  7. 【iOS系列】-iOS开发,GET,POST请求使用

    [iOS系列]-iOS开发,GET,POST请求使用 步骤: 1:实例化URL(网络资源) 2:根据URL建立URLRequest(网络请求) 默认为GET请求: 对于POST请求,需要创建请求的数据 ...

  8. 超过经理收入的员工 表的自JOIN

    https://leetcode-cn.com/problems/employees-earning-more-than-their-managers/description/ The Employe ...

  9. java语法基础(二)

    流程控制语句 表达式语句 在表达式后面添加:就构成了表达式语句,简称“语句” 我们编写java代码,更多时候都是在书写表达式语句. int i;声明语句 i = 10;赋值语句 流程控制语句 流程控制 ...

  10. 设计模式-(9)中介者模式(swift)

    在对象去耦合的模式中,有两种模式:中介者模式,观察者模式 一,概念 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 这个 ...