AHR999 メインリバーション戦略 AHR999,AHR999X,調節平均数,対数値価格,純額
#### 概要 この戦略は,AHR999およびAHR999X指標に基づいています.現在の価格を調和平均価格とロガリズム価格と比較することによって,ビットコインが過買いまたは過売れているかどうかを決定し,それに応じて固定投資と底釣り操作を行います.一方,AHR999X指標が一定の限界を下回ったときに部分的に売却する利益を得る条件も設定します.
###戦略の原則
### 優位性分析
### リスク分析
###最適化方向
#### 概要 AHR999 平均逆転戦略は,現在の価格を歴史的な均衡価格とトレンド価格と比較してビットコインの過剰購入および過剰販売状態を決定し,固定投資,底釣り,利益引き取りの操作を実施する.この戦略には一定の理論的基盤と解釈可能性がある.二つの指標を組み合わせることで,ビットコインの価格変動パターンをよりよく把握することができる.しかし,この戦略は,指標の失敗,パラメータ選択,および資金管理の観点からもリスクに直面し,実践で継続的な最適化と改善を必要とする.全体的に,AHR999 平均逆転戦略は,ビットコインの長期価値投資のための実行可能なアイデアを提供します.
/*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); } }