简易版牛熊判定,短线对冲交易策略[gekko]

策略介绍

该策略非原创,来自github: https://github.com/Saichovsky, 本文不构成任何投资建议,仅供参考。

这是一个基于MA(移动平均线)来自动改变RSI参数的短线交易策略,自动判断牛熊。

我把测试结果放在前面,希望大家看到后如果觉得收益不是很满意,就不需要配置该策略文件了,帮大家节省时间。 该策略更适合USDT/BTC交易对。

该策略回测结果

  • noop为不做交易的情况下的收益率。系统默认策略中,我选择了RSI, 是因为在以往测试中发现该策略收益更理想一些,而且本文介绍的策略是基于RSI优化的。在调整过程中,Candle Size 10minute也是测试的最佳时间间隔。

测试结果

参数:
  • Candle Size: 10 minute
  • 回测时间段: 2018.01.03-2018.03.03
  • 数据来源: 币安
  • RSI_BULL_BEAR 策略参数
    *BEAR_RSI = 15
    *BEAR_RSI_high = 50
    *BEAR_RSI_low = 25
收益率统计
交易對 \策略 noop RSI RSI_BULL_BEAR
USDT/BTC -17.87931% -25.47593% 10.72157%
USDT/ETH 10.72157% -21.74737% -5.33235%
BTC/ADA - -43.44617% -37.35651%
  1. USDT/BTC
    统计结果:在该时间段 完成 41次 买入/卖出操作,使用RSI_BULL_BEAR 该策略收益大概20%左右。
    屏幕快照 2018-03-03 上午9.53.34.png
  1. USDT/ETH
    统计结果:在该时间段 完成 42次 买入/卖出操作,使用RSI_BULL_BEAR 该策略收益大概-15%左右。
    屏幕快照 2018-03-03 上午10.17.02.png
  1. BTC/ADA
    统计结果:在该时间段 完成 42次 买入/卖出操作,使用RSI_BULL_BEAR 该策略收益大概-37%左右。
    btc:ada.png

策略配置

  1. 将如下代码文件保存在 RSI_BULL_BEAR.js 文件中,放置在路径gekko/config/strategies 下。
/*
    RSI Bull and Bear
    Use different RSI-strategies depending on a longer trend

    (CC-BY-SA 4.0) Tommie Hansen
    https://creativecommons.org/licenses/by-sa/4.0/
*/

var _ = require ('lodash');
var log = require ('../core/log.js');

// Configuration
var config = require ('../core/util.js').getConfig();
var async = require ('async');

// Let's create our own method
var method = {};


// Prepare everything our method needs
method.init = function () {

   this.name = 'RSI Bull and Bear';

   // Keep state about stuff
   this.trend = {
       direction: 'none',
       duration: 0,
       persisted: false,
       adviced: false
   };

   // How many candles do we need as a base before start giving advice
   this.requiredHistory = config.tradingAdvisor.historySize;

    // add indicators
    this.addTulipIndicator('maSlow', 'sma', { optInTimePeriod: this.settings.SMA_long });
    this.addTulipIndicator('maFast', 'sma', { optInTimePeriod: this.settings.SMA_short });

    this.addTulipIndicator('BULL_RSI', 'rsi', { optInTimePeriod: this.settings.BULL_RSI });
    this.addTulipIndicator('BEAR_RSI', 'rsi', { optInTimePeriod: this.settings.BEAR_RSI });

}

// What happens on every new candle?
method.update = function(candle) {} // do nothing
method.log = function() {} // do nothing

method.check = function (candle)
{
   if( candle.close.length < this.requiredHistory ) { return; } // TODO: still needed?!

    // get all indicators
    let ind = this.tulipIndicators;

    let maSlow = ind.maSlow.result.result,
        maFast = ind.maFast.result.result,
        rsi;


    // define rules
    let goLong = false,
        goShort = false;

    // BEAR TREND
    if( maFast < maSlow )
    {
        log.debug('BEAR Trend');
        rsi = ind.BEAR_RSI.result.result;
        if( rsi > this.settings.BEAR_RSI_high ) goShort = true;
        if( rsi < this.settings.BEAR_RSI_low )  goLong = true;
    }

    // BULL TREND
    else
    {
        log.debug('BULL Trend');
        rsi = ind.BULL_RSI.result.result;
        if( rsi > this.settings.BULL_RSI_high ) goShort = true;
        if( rsi < this.settings.BULL_RSI_low )  goLong = true;
    }

    // LONG
    if( goLong )
    {

        // new trend? (only act on new trends)
        if (this.trend.direction !== 'up')
        {

            // reset the state for the new trend
            this.trend = {
                duration: 0,
                persisted: false,
                direction: 'up',
                adviced: false
            };


            if( !this.trend.adviced )
            {
                this.trend.adviced = true;
                this.advice('long');
            }
            else {
                this.advice();
            }

        }

        this.trend.duration ++;
        log.debug ('Positive since ', this.trend.duration, 'candle (s)');

    }

    // SHORT
    else if( goShort )
    {

        // new trend? (else do things)
        if( this.trend.direction !== 'down' )
        {

            // reset state
            this.trend = {
                duration: 0,
                persisted: false,
                direction: 'down',
                adviced: false
            };

            if( !this.trend.adviced )
            {
                this.trend.adviced = true;
                this.advice ('short');
            }
            else {
                this.advice();
            }

        }

        this.trend.duration ++;
        log.debug ('Negative since ', this.trend.duration, 'candle (s)');

    }

    // default
    else
    {
        //log.debug('No trend');
        this.advice();
    }

} // method.check()

module.exports = method;
  1. 将如下代码文件保存为 RSI_BULL_BEAR.toml 文件,放在 gekko/config/strategies路径下
# BEAR
BEAR_RSI = 15
BEAR_RSI_high = 50
BEAR_RSI_low = 25


# BULL/BEAR is defined by the longer SMA trends
# if SHORT over LONG = BULL
# if SHORT under LONG = BEAR
  1. 保存完成后,在gekko路径下执行如下命令(docker方式启动)
docker-compose build
HOST=deamon.com PORT=3000 docker-compose up -d   # HOST 需要修改

欢迎大家加入gekko 知识星球, 在这里你可以得到,关于gekko环境搭建问题的解答/查看群主分享的交易机器人策略/加入gekko策略交流群组,以及获取更多的关于gekko使用方面的信息。
没有任何基础的小白也可以搭建自己的交易机器人。


gekko交流

你可能感兴趣的:(简易版牛熊判定,短线对冲交易策略[gekko])