資源の読み込みに... 荷物...

ahr999 決済戦略

作者: リン・ハーンチャオチャン, 日時: 2021-07-19 00:05:35
タグ:貿易支援

AHR999 メインリバーション戦略 AHR999,AHR999X,調節平均数,対数値価格,純額

#### 概要 この戦略は,AHR999およびAHR999X指標に基づいています.現在の価格を調和平均価格とロガリズム価格と比較することによって,ビットコインが過買いまたは過売れているかどうかを決定し,それに応じて固定投資と底釣り操作を行います.一方,AHR999X指標が一定の限界を下回ったときに部分的に売却する利益を得る条件も設定します.

###戦略の原則

  1. 長期均衡価格の基準として Bitcoinの過去価格の調和平均を計算する.
  2. 長期トレンド価格の基準として Bitcoinの誕生から数日の数に基づいて対応する対数値値値を計算します
  3. 現在のAHR999指標を計算する.これは,現在の価格とハーモニック平均価格とロガリズム価格の比率の倍数である.
  4. 現在のAHR999X指標を計算します.これは,現在の価格に対するハーモニック平均価格の比率の3倍,現在の価格に対するロガリズム価格の比率に掛けるものです.
  5. AHR999指標の値に基づいて,固定投資か底部漁業を行うかどうかを決定します.AHR999が設定された範囲内にあり,底部漁業が下限を下回るときに固定投資が行われます.
  6. AHR999X指標の値に基づいて,利益を得るか否かを決定します.AHR999Xが設定された限界値を下回ると,ポジションの一定割合を売却します.

### 優位性分析

  1. この戦略は,ビットコインの長期均衡価格とトレンド価格を基礎とし,一定の理論的基礎と解釈性を有しています.
  2. ハーモニック平均値の導入により,短期変動の影響が軽減され,判断がより堅牢になります.
  3. AHR999とAHR999Xの指標を組み合わせることで,Bitcoinの過買い・過売り状況と利益のタイミングをより正確に把握できます.
  4. 固定投資と底部漁業が組み合わせられ,価格が比較的低估されたときに徐々にポジションを構築し,比較的低コストを生み出します.
  5. 価格が比較的過大評価された場合,利益を得るために行う取引は,長期的に価値向上するポジションの大半を保持しながら一定の利益を得ます.

### リスク分析

  1. この戦略は,AHR999とAHR999X指標に依存している.ビットコインの将来の価格動きが大きく変化し,この2つの指標が失敗した場合,戦略はより大きなリスクに直面する可能性があります.
  2. ハーモニック・メアンは,過去価格の長さに敏感である.選択した過去価格間隔が十分に合理的でない場合,戦略のパフォーマンスに影響を与える可能性があります.
  3. ロガリズム価格の計算は,ビットコインの誕生から数日の数に基づいて行われます.ビットコインの長期成長傾向が変化した場合,ロガリズム価格は参照の重要性を失う可能性があります.
  4. この戦略は,価格が比較的高い場合,底部漁業に資金が不足するリスクに直面し,タイミングでポジションを構築できない可能性があります.
  5. 価格が上昇し続けると 戦略が利益を失ってしまう可能性があります

###最適化方向

  1. AHR999 と AHR999X 指標の値を最適化して,固定投資,底部漁業,利益を得るのに最も適した間隔を見つけます.
  2. 取引量や波動性などの指標を増やして,傾向や過買い/過売り状態を判断する.
  3. ハーモニック平均値の計算方法を最適化すること.例えば,遠隔の歴史的価格への依存を減らすために,過去の価格の重さを適切に調整すること.
  4. 固定投資と底部漁業の額を動的に調整し,価格が低いときに投資を増やし,価格が高いときに投資を削減します.
  5. 収益を上げることを最適化し,価格動向とポジションコストに基づいて動的に調整し,収益とリスクを均衡させる.

#### 概要 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);
	}
}


関連性

もっと