策略是Gekko自动化交易的核心。他们关注市场并根据技术分析指标决定做什么。
默认策略介绍
DEMA
这个方法使用(EMA)Exponential Moving Average crossovers来预测当前市场的走向。所谓的EMA可以参考wikipedia,总的来说,可以把它理解成一个K线图的加权平均,所以自带一个参数α,数值介乎0至1。α也可用天数N来代表,这个时候(α=1/(N+1))。在gekko这个框架里面,涉及用到EMA的策略,我们通常可以看到short和long这两个参数。分别代表短期N和长期的N。
DEMA中,使用短期平均和长期平均曲线的交错点来判断市场走向。下面的down和up阈值就分别代表了其上下的幅度MACD
基本和DEMA相同,不同点是引入了一个叫signal的参数,这个时候会有第三条EMA曲线,是用short和long EMA的查生成的。signal是其期间长度。PRO
基本和MACD相同,具体区别参考这里。RSI
Relative Strength Index。主要考察过卖,过买点来分析市场走向。low 和 high两个参数代表RSI数值的上值和下值,超过上值就有可能发生超买,低于下值就有可能发生超卖。CCI
Commodity Channel Index。计算当前价和均价的相关性。也是判断超买和超卖的指标,前提是假设这些走向具有周期性。
创建策略
- 策略所在代码路径 gekko/strategies/
- 策略模板
//创建自己的策略
var strat = {};
// 初始化参数
strat.init = function() {
// your code!
}
// 针对每个柱形图要做什么操作
strat.update = function(candle) {
// your code!
}
// 策略运行中,debug信息
strat.log = function() {
// your code!
}
// 基于最新的数据计算,判断是否应该更新
strat.check = function(candle) {
// your code!
}
// 可选的执行代码
// 这部分模块只会在backtest时执行,在live时,是不会执行的。
strat.end = function() {
// your code!
}
module.exports = strat;
上述样板包含四个必须完成的功能。这些函数的执行方式如下所示:
在启动时:运行init。
在每个新蜡烛上:运行更新。
如果需要创建历史记录(请参阅check()下面的功能):运行日志,运行检查。
初始化函数
当交易策略开始时执行。在此处初始化交易参数。
更新功能
该功能在每个新蜡烛上执行。刷新交易参数。
日志功能
日志功能在debug
标志配置打开时执行(在config中设置)。随着时间的推移init
和update
功能的执行,记录用于跟踪参数值。
检查功能
在交易策略开始之前,大多数策略需要的历史数量最少。例如,策略可能是计算前3个蜡烛的移动平均值,所以它必须至少有3个蜡烛才能启动。检查功能在所需历史时间结束后执行。默认的所需历史记录为0.您可以在init函数中像这样设置它:
this.requiredHistory = 5; // require 5 candles before giving advice
如果您在检查功能中发现您想向交易者提供新建议,则可以使用建议功能:
this.advice('short');
// or
this.advice('long');
蜡烛变量
编写策略时可以使用以下蜡烛变量列表:
- candle.close:柱形图的收盘价
- candle.high:柱形图最高价格
- candle.low:柱形图的最低价格
- candle.volume:该柱形图的交易量
- candle.trades:该柱形图的交易数量
请记住,根据构建柱形图的时间窗口设置(1分钟,15分钟,1小时等),这些变量会给出不同的结果。
基本策略示例
这是一个基本的策略示例,它在达到特定价格时买入和卖出BTC / USDT。
var strat = {};
// Prepare everything our strat needs
strat.init = function() {
// setting buy price
this.buyPrice = 2000;
// setting sell price
this.sellPrice = 2500;
}
// What happens on every new candle?
strat.update = function(candle) {
// your code!
}
// For debugging purposes.
strat.log = function() {
// your code!
}
// Based on the newly calculated
// information, check if we should
// update or not.
strat.check = function(candle) {
// buy when it hits buy price
if(candle.close <= this.buyPrice) {
this.advice("long");
// do some output
console.log("buying BTC @", candle.close);
return;
}
// sell when it hits sell price
if(candle.close >= this.sellPrice) {
this.advice("short");
// do some output
console.log("selling BTC @", candle.close);
console.log("Profit:", (candle.close-this.buyPrice));
return;
}
}
module.exports = strat;
策略规则
- 您可以通过在加载的配置中设置
config.tradingAdvisor.strategy
为custom
(或者您在里面命名的文件gekko/strategies
)来激活自己的策略。 - Gekko将执行
update
每个新蜡烛的功能。蜡烛是config.tradingAdvisor.candleSize
在加载的配置中以分钟为单位配置的大小。 - 建议将历史记录设置
config.tradingAdvisor.historySize
为所需的历史记录,因为Gekko将使用此属性创建一批初始蜡烛。 - 从不依赖系统时间,因为每种方法都可以在实时市场以及回溯测试中运行。你可以看看蜡烛开始时间的
candle.start
属性moment
。