AHR999 Mean Reversion Strategy AHR999, AHR999X, Trung bình điều chỉnh, Giá số, Giá trị ròng
####Tầm nhìn chung Chiến lược này dựa trên các chỉ số AHR999 và AHR999X. Bằng cách so sánh giá hiện tại với giá trung bình hài hòa và giá logarithmic, nó xác định xem Bitcoin có bị mua quá nhiều hay bán quá nhiều hay không, và theo đó tiến hành các hoạt động đầu tư cố định và đánh bắt đáy. Trong khi đó, chiến lược cũng đặt ra điều kiện kiếm lợi nhuận để bán một phần khi chỉ số AHR999X nằm dưới một ngưỡng nhất định.
### Nguyên tắc chiến lược
### Phân tích lợi thế
### Phân tích rủi ro
###Hướng tối ưu hóa
###Tóm lại Chiến lược đảo ngược trung bình AHR999 xác định tình trạng mua quá mức và bán quá mức của Bitcoin bằng cách so sánh giá hiện tại với giá cân bằng lịch sử và giá xu hướng, và tiến hành các hoạt động đầu tư cố định, đánh bắt đáy và thu lợi nhuận. Chiến lược này có một cơ sở lý thuyết và có thể giải thích được. Bằng cách kết hợp hai chỉ số, nó có thể nắm bắt tốt hơn các mô hình biến động giá của Bitcoin. Tuy nhiên, chiến lược cũng phải đối mặt với rủi ro về sự thất bại của chỉ số, lựa chọn tham số và quản lý quỹ, đòi hỏi tối ưu hóa và cải thiện liên tục trong thực tế. Nhìn chung, Chiến lược đảo ngược trung bình AHR999 cung cấp một ý tưởng khả thi cho đầu tư giá trị dài hạn trong Bitcoin.
/*backtest start: 2018-04-14 00:00:00 end: 2021-07-18 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":1000000,"stocks":0}] */ /* * @Project: * @Version: * @Author: RedSword <coo@fmz.com> * @Description: * @Date: 2021-07-19 11:02:43 * @LastEditors: RedSword * @LastEditTime: 2021-07-19 15:55:16 * @Copyright:: Copyright © 2020 FMZ Quant * 感谢ahr999大神,后续完善可以加入一些理财,币和钱都闲着,收益会低一点,也可以放到bitfinex放借贷,年化也有十几的收益,还可以放大资金,买了币以后,就去交割合约做多,暂时想到这么多,希望大家多多交流 * 参考: * https://github.com/who3m1/ahr999-mixin * https://btctom.com/ahr999 * https://btctom.com/ahr999x */ function harmonicMean(x) { if (x.length === 0) { return undefined; } var reciprocalSum = 0; for (var i = 0; i < x.length; i++) { if (x[i] <= 0) { return undefined; } reciprocalSum += 1 / x[i]; } return x.length / reciprocalSum; } function GetNowPrice() { var ticker = exchange.GetTicker(); return ticker.Last; } function GetPrices() { var records = exchange.GetRecords(PERIOD_D1); var prices = []; for (let i = 0; i < records.length; i++) { const record = records[i]; // Log(record); prices.push(record.Close); } return prices; } function CalcAHR999() { var now = parseInt(Unix()); var prices = GetPrices(); var avgPrice = harmonicMean(prices); var nowPrice = GetNowPrice(); var birthday = (now - 1230940800) / (24 * 60 * 60); var logPrice = Math.pow(10, 5.84 * Math.log10(parseInt(birthday)) - 17.01); //2020-4-16 13:16 以后使用新的指标 //https://weibo.com/5034063086/IDzPWyN8Z?from=page_1005055034063086_profile&wvr=6&mod=weibotime if (now > 1587014160) { logPrice = Math.pow(10, 5.8 * Math.log10(parseInt(birthday)) - 16.88); } var ahr999 = Math.round((nowPrice / avgPrice) * (nowPrice / logPrice) * 1000) / 1000; var ahr999x = Math.round((avgPrice / nowPrice) * (logPrice / nowPrice) * 3 * 1000) / 1000; return { ahr999: ahr999, ahr999x: ahr999x, }; } function init() { exchange.SetMaxBarLen(200); if (exchange.GetCurrency().indexOf("BTC_USD") == -1) { throw "只支持BTC交易对"; } } function UpdateStatus(account, nowPrice) { var table = { type: "table", title: "持仓信息", cols: ["定投币种", "初始净值", "当前净值", "定投次数", "持仓数量", "持仓均价", "当前价格", "累计定投", "可用资金", "盈利率%"], rows: [], }; var netValue = account.Balance + account.Stocks * nowPrice; table.rows.push([ exchange.GetCurrency(), InitMoney, _N(netValue, 2), Global.number, _N(account.Stocks, 6), _N((InitMoney - account.Balance) / account.Stocks, 2), nowPrice, _N(Global.number * Money, 2), _N(account.Balance, 2), _N((netValue / InitMoney) * 100), ]); LogStatus("`" + JSON.stringify(table) + "`"); } var Global = { upTime: 0, //循环间隔 number: 0, //定投次数 multipleNumber: 0, //抄底次数 }; function main() { while (true) { var now = parseInt(Unix()); if (now > Global.upTime) { var price = GetNowPrice(); var account = exchange.GetAccount(); var ahr999 = CalcAHR999(); Global.upTime = now + 3600 * Interval; if (ahr999.ahr999 >= Bottom && ahr999.ahr999 < Top) { if (Money > account.Balance) continue; Log("开始定投"); exchange.Buy(-1, Money); Global.number++; } else if (ahr999.ahr999 < Bottom) { if (Money * Multiple > account.Balance) continue; Log("开始抄底"); exchange.Buy(-1, Money * Multiple); Global.number += Multiple; } if (TakeProfit & (ahr999.ahr999x < TakeProfitLine)) { Log("开始顶逃"); var sell = Global.number * TakeProfitRate * Money; var coinNumber = sell / price; exchange.Sell(-1, coinNumber); } UpdateStatus(account, price); } Sleep(1000); } }