Die Ressourcen sind geladen. Beförderung...

Ahr999 Strategie für das Steuern

Schriftsteller:ChaoZhang, Datum: 2021-07-19
Tags:Handelsunterstützt

Die AHR999 Mean Reversion Strategy AHR999, AHR999X, Abgleichsmittel, Algorithmenpreis, Nettowert

####Übersicht Diese Strategie basiert auf den Indikatoren AHR999 und AHR999X. Durch den Vergleich des aktuellen Preises mit dem harmonischen Durchschnittspreis und dem logarithmischen Preis bestimmt sie, ob Bitcoin überkauft oder überverkauft ist, und führt entsprechend feste Investitions- und Bottom-Fishing-Operationen durch.

Das Strategieprinzip

  1. Berechnen Sie den harmonischen Mittelwert der historischen Preise von Bitcoin als Referenz für den langfristigen Gleichgewichtspreis.
  2. Berechnen Sie den entsprechenden logarithmischen Preis anhand der Anzahl der Tage seit der Geburt von Bitcoin als Referenz für den langfristigen Trendpreis.
  3. Berechnen Sie den aktuellen Indikator AHR999, der das Produkt des Verhältnisses des aktuellen Preises zum harmonischen Durchschnittspreis und des logarithmischen Preises ist.
  4. Berechnen Sie den aktuellen Indikator AHR999X, der das 3-fache des Verhältnisses des harmonischen Durchschnittspreises zum aktuellen Preis multipliziert mit dem Verhältnis des logarithmischen Preises zum aktuellen Preis entspricht.
  5. Auf der Grundlage des Wertes des Indikators AHR999 ist zu bestimmen, ob feste Investitionen oder Grundfischerei durchgeführt werden sollen.
  6. Wenn der Wert des AHR999X-Indikators unter einem festgelegten Schwellenwert liegt, verkaufen Sie einen bestimmten Anteil der Position.

###Vorteilsanalyse

  1. Die Strategie basiert auf dem langfristigen Gleichgewichtspreis und dem Trendpreis von Bitcoin mit einer bestimmten theoretischen Grundlage und Interpretation.
  2. Die Einführung des harmonischen Mittelwerts verringert die Auswirkungen von kurzfristigen Schwankungen und macht das Urteil robuster.
  3. Durch die Kombination der Indikatoren AHR999 und AHR999X kann der überkaufte und überverkaufte Status von Bitcoin sowie der Zeitpunkt der Gewinnentnahme besser erfasst werden.
  4. Die Festanlagen und die Grundfischerei werden kombiniert, um nach und nach Positionen aufzubauen, wenn die Preise relativ unterbewertet sind, was zu relativ niedrigen Kosten führt.
  5. Die Gewinntransaktion soll bei relativ überbewerteten Preisen eine gewisse Rendite erzielen, wobei die meisten Positionen für die langfristige Aufwertung beibehalten werden.

###Risikoanalyse

  1. Die Strategie stützt sich auf die Indikatoren AHR999 und AHR999X. Wenn sich die zukünftige Preisbewegung von Bitcoin signifikant ändert und diese beiden Indikatoren scheitern, kann die Strategie größeren Risiken ausgesetzt sein.
  2. Der harmonische Mittelwert ist anfällig für die Länge der historischen Preise.
  3. Die Berechnung des logarithmischen Preises basiert auf der Anzahl der Tage seit der Geburt von Bitcoin.
  4. Die Strategie kann mit dem Risiko konfrontiert sein, dass bei relativ hohen Preisen nicht genügend Mittel für die Grundfischerei zur Verfügung stehen, was dazu führt, dass die Positionen nicht rechtzeitig aufgebaut werden können.
  5. Die Gewinnaufnahme kann dazu führen, dass die Strategie einige Gewinne verpasst, wenn die Preise weiter steigen.

#### Optimierung Richtung

  1. Optimierung der Schwellenwerte der Indikatoren AHR999 und AHR999X, um die am besten geeigneten Intervalle für feste Investitionen, Bodenfischerei und Gewinngewinnung zu finden.
  2. Einführung weiterer Indikatoren, wie Handelsvolumen und Volatilität, um Trends und Überkauf/Überverkauf zu beurteilen.
  3. Optimierung der Berechnungsmethode des harmonischen Durchschnitts, z. B. angemessene Anpassung der Gewichte historischer Preise, um die Abhängigkeit von entfernten historischen Preisen zu reduzieren.
  4. Dynamische Anpassung des Betrags der Anlageinvestitionen und der Grundfischerei, wobei bei niedrigeren Preisen die Investitionen erhöht und bei höheren Preisen die Investitionen verringert werden.
  5. Optimierung der Gewinntransaktion, z. B. dynamische Anpassung an Preisentwicklung und Positionskosten, um Renditen und Risiken auszugleichen.

Zusammenfassung Die AHR999 Mean Reversion Strategy bestimmt den Überkauf- und Überverkaufstatus von Bitcoin, indem sie den aktuellen Preis mit dem historischen Gleichgewichtspreis und dem Trendpreis vergleicht und feste Investitionen, Bottom-Fishing und Take-Profit-Operationen durchführt. Diese Strategie hat eine gewisse theoretische Grundlage und Interpretationsfähigkeit. Durch die Kombination zweier Indikatoren kann sie die Preisschwankungsmuster von Bitcoin besser erfassen. Die Strategie ist jedoch auch mit Risiken in Bezug auf Indikatorversagen, Parameterwahl und Fondsmanagement konfrontiert, was eine kontinuierliche Optimierung und Verbesserung in der Praxis erfordert.


/*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);
	}
}


Verwandt

Mehr