SMA 多头交易:一种非常简单但高回报的策略

SMA 和 ΔSMA 分析

加密交易策略可能会变得复杂。非常复杂。很容易被令人兴奋的新方法分心,而忘记有时最简单的代码实际上可以产生最好的结果。

SMA 多头交易:一种非常简单但高回报的策略
周期 20(黄色)、50(粉红色)和 100(红色)的 SMA
  • 如果 ΔSMA 为,则 SMA下降,价格处于看跌阶段。
/**
* GetDeltaSMA – return the delta-SMA of a close price array
* @param {number[]} prices Close prices
* @param {number} period SMA period
* @returns {number} Delta-SMA
*/
const getDeltaSma = (prices, period) => {
const sma = prices.slice(period).reduce((a, b) => a + b, 0) / period
const prevSma = prices.slice(period1, 1).reduce((a, b) => a + b, 0) / period
return sma / prevSma 1
}

执行

为了断言我们基于 ΔSMA 的策略的质量,我们将对 Binance 上的一些大容量XXX/USDT加密货币对进行简单的历史分析,例如BTC/USDTETH/USDT。该分析的主要目标不仅是断言它们在不同时间范围内的可出租性,而且还要比较 ΔSMA 策略与同期持币策略的收入。

// WARNING : FOR EDUCATIVE USE ONLY – DO NOT RUN IN PRODUCTION
const Binance = require(‘binance-api-node’).default
const binance = Binance()
// PARAMS – to alter at will
const PERIOD = 30
const SYMBOL = ‘BTCUSDT’
const INTERVAL = ‘1d’
const LENGTH = 100 // amount of [interval]
const SMA_LAG = 0.0001 // Min/max value of delta-SMA to consider
// NOTE : be careful when putting low values here – your bot might buy & sell everyday in horizontal markets !
// getDeltaSma function from before
const getDeltaSma = (prices, period) => {
const sma = prices.slice(period).reduce((a, b) => a + b, 0) / period
const prevSma = prices.slice(period 1, 1).reduce((a, b) => a + b, 0) / period
return sma / prevSma 1
}
const main = async () => {
// 1 – PRICE ACQUISITION
let prices = await binance.candles({
symbol: SYMBOL,
interval: INTERVAL,
limit: 1000,
})
prices = prices.slice(LENGTH PERIOD 1)
// 2 – Run a simulation on all prices
console.log(`start simulation on ${new Date(prices[PERIOD + 1].closeTime).toUTCString()}`)
let wallet = {
usdt: 100, // start with 100 usdt
asset: 0,
}
for (
let i = PERIOD + 1; // we start at PERIOD+1 to skip the ones without a reliable delta-SMA
i < prices.length;
i++
) {
// Those are all “past” prices
const subPrices = prices.slice(0, i + 1)
// 3 – Strategy
const lastPrice = subPrices[subPrices.length 1]
const deltaSma = getDeltaSma(subPrices.map(price => +price.close), PERIOD)
const shouldBuy = deltaSma > 0 + SMA_LAG
const shouldSell = deltaSma < 0 SMA_LAG
|| i == prices.length 1 // force sell on last price for simulation
// 4 – Simulate actions
if (!wallet.asset && shouldBuy) {
console.log(`BUY @${lastPrice.close}${new Date(prices[i].closeTime).toUTCString()}`)
wallet = {
usdt: 0,
asset: wallet.usdt / lastPrice.close
* (1 0.00075), // trading fees
}
} else if (wallet.asset && shouldSell) {
console.log(`SELL @${lastPrice.close}${new Date(prices[i].closeTime).toUTCString()}`)
wallet = {
usdt: wallet.asset * lastPrice.close
* (1 0.00075), // trading fees
asset: 0,
}
}
}
console.log(`End of simulation on ${new Date(prices[prices.length 1].closeTime).toUTCString()}`)
// compare to HOLD (in percentage)
const holdGain = prices[prices.length 1].close / prices[PERIOD+1].close 1
console.table({
symbol: SYMBOL,
period: PERIOD,
length: LENGTH,
deltaSmaGain: (wallet.usdt 100).toFixed(2) + ‘ %’,
holdGain: (100 * holdGain).toFixed(2) + ‘ %’,
})
}
main()
start simulation on Mon, 13 Jun 2022 23:59:59 GMT
BUY @21195.60000000 – Sat, 16 Jul 2022 23:59:59 GMT
SELL @21310.90000000 – Mon, 25 Jul 2022 23:59:59 GMT
BUY @21254.67000000 – Tue, 26 Jul 2022 23:59:59 GMT
SELL @23191.20000000 – Thu, 18 Aug 2022 23:59:59 GMT
BUY @21559.04000000 – Thu, 25 Aug 2022 23:59:59 GMT
SELL @20241.05000000 – Fri, 26 Aug 2022 23:59:59 GMT
End of simulation on Tue, 20 Sep 2022 23:59:59 GMT
┌──────────────┬────────────┐
│ (index) │ Values │
├──────────────┼────────────┤
│ symbol │ ‘BTCUSDT’ │
│ period │ 30 │
│ length │ 100 │
│ deltaSmaGain │ ‘2.54 %’ │
│ holdGain │ ‘-15.87 %’ │
└──────────────┴────────────┘
SMA 多头交易:一种非常简单但高回报的策略
BINANCE:BTC/USDT:1d — 2022 年 7 月 16 日至 8 月 26 日
  • 第三个条目说明了一个误报。由于周期或滞后时间太短,机器人陷入了陷阱。不过一进门就卖了。
  • 在这个截图之外,BTC/USDT大多看跌,SMA 正在下降,机器人没有进行任何交易。让我们免于下跌 15%。
SMA 多头交易:一种非常简单但高回报的策略
BINANCE:BTC/USDT:1d — 2022 年 6 月 13 日至 9 月 20 日

这种 ΔSMA 策略到底有多好?

虽然并不完美,但我们的 ΔSMA 策略似乎会跳入看涨趋势并跳出看跌趋势。现在,让我们通过比较它在许多长度和不同符号上的表现来尝试断言它是否能够始终如一地战胜市场。我们将保持其他参数稳定(周期,滞后,…)

SMA 多头交易:一种非常简单但高回报的策略
  • 在牛市中表现强劲。它的性能会比保持稍差,但会在合理的信号下自动跳入和跳出。
  • 看跌市场中性。它将弥补其损失,而且大多根本不持仓。在未来市场上,该算法可以与反向算法累积,当 ΔSMA 为负时,该算法将做空股票(稍后文章中会详细介绍?)

给TA打赏
共{{data.count}}人
人已打赏
加密交易策略

无上交易策略大公开,加减仓技巧最佳技巧-滚动仓位

2022-9-17 14:53:19

加密交易策略

使用 3 EMA 策略进行股票和加密货币交易

2022-11-10 15:33:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索