• 30行JavaScript代码实现一个比特币量化策略


    精简极致的均线策略 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 上学习

  • 相关阅读:
    BP神经网络的数学原理及其算法实现
    机器学习必知的10大算法
    支持向量机通俗导论(理解SVM的三层境界)
    svm算法 最通俗易懂讲解
    read/write/fsync与fread/fwrite/fflush的关系和区别
    ubuntu16.04编译QT5.6所依赖的库
    Linux下的tar压缩解压缩命令详解
    Ubuntu16下编译linux内核,报"mkimage" command not found错的解决
    Git之(一)Git是什么[转]
    mac上完整卸载删除:android studio方案
  • 原文地址:https://www.cnblogs.com/botvsing/p/10843577.html
Copyright © 2020-2023  润新知