Les ressources ont été chargées... Je charge...

Ahr999 stratégie de placement

Auteur:ChaoZhang est là., Date: 19 juillet 2021
Les étiquettes:Aides au commerce

AHR999 est une stratégie de réversion moyenne. AHR999, AHR999X, moyenne de réconciliation, prix d'algorithme, valeur nette

#### Vue d'ensemble Cette stratégie est basée sur les indicateurs AHR999 et AHR999X. En comparant le prix actuel avec le prix moyen harmonique et le prix logarithmique, elle détermine si Bitcoin est suracheté ou survendu, et en conséquence, elle effectue des opérations d'investissement fixe et de pêche au fond.

Le principe de la stratégie

  1. Calculer la moyenne harmonique des prix historiques du Bitcoin comme référence pour le prix d'équilibre à long terme.
  2. Calculez le prix logarithmique correspondant basé sur le nombre de jours depuis la naissance de Bitcoin comme référence pour le prix de tendance à long terme.
  3. Calculer l'indicateur actuel AHR999, qui est le produit du rapport entre le prix actuel et le prix moyen harmonique et le prix logarithmique.
  4. Calculer l'indicateur actuel AHR999X, qui est 3 fois le rapport entre le prix moyen harmonique et le prix courant multiplié par le rapport entre le prix logarithmique et le prix courant.
  5. Sur la base de la valeur de l'indicateur AHR999, déterminer s'il convient de procéder à un investissement fixe ou à une pêche de fond.
  6. En fonction de la valeur de l'indicateur AHR999X, déterminer si vous devez réaliser un profit.

L'analyse des avantages

  1. La stratégie est basée sur le prix d'équilibre à long terme et le prix de tendance de Bitcoin, avec une certaine base théorique et une certaine interprétabilité.
  2. L'introduction de la moyenne harmonique réduit l'impact des fluctuations à court terme, rendant le jugement plus robuste.
  3. En combinant les indicateurs AHR999 et AHR999X, il peut mieux capturer l'état de surachat et de survente de Bitcoin et le moment de la prise de profit.
  4. L'investissement fixe et la pêche de fond sont combinés pour construire progressivement des positions lorsque les prix sont relativement sous-évalués, ce qui se traduit par des coûts relativement faibles.
  5. L'opération de prise de bénéfice est destinée à obtenir certains rendements lorsque les prix sont relativement surévalués tout en conservant la plupart des positions d'appréciation à long terme.

#### Analyse des risques

  1. La stratégie repose sur les indicateurs AHR999 et AHR999X. Si le mouvement futur du prix du Bitcoin change de manière significative, provoquant l'échec de ces deux indicateurs, la stratégie peut faire face à des risques plus importants.
  2. La moyenne harmonique est sensible à la durée des prix historiques.
  3. Le calcul du prix logarithmique est basé sur le nombre de jours depuis la naissance de Bitcoin. Si la tendance de croissance à long terme du Bitcoin change, le prix logarithmique peut perdre sa signification de référence.
  4. La stratégie risque d'être confrontée à un manque de fonds pour la pêche de fond lorsque les prix sont relativement élevés, ce qui entraîne l'incapacité de créer des positions en temps opportun.
  5. L'opération de prise de bénéfice peut entraîner la perte de certains gains si les prix continuent à augmenter.

Direction de l'optimisation

  1. Optimiser les seuils des indicateurs AHR999 et AHR999X pour trouver les intervalles les plus appropriés pour les investissements fixes, la pêche au fond et la réalisation de bénéfices.
  2. Introduire davantage d'indicateurs, tels que le volume des transactions et la volatilité, pour aider à évaluer les tendances et les états de surachat/survente.
  3. Optimiser la méthode de calcul de la moyenne harmonique, par exemple en ajustant de manière appropriée les pondérations des prix historiques afin de réduire la dépendance des prix historiques distants.
  4. Adaptez dynamiquement le montant des investissements fixes et de la pêche de fond, en augmentant les investissements lorsque les prix sont plus bas et en réduisant les investissements lorsque les prix sont plus élevés.
  5. Optimiser l'opération de prise de profit, par exemple en ajustant dynamiquement les prix en fonction des tendances et des coûts de position pour équilibrer les rendements et les risques.

### Résumé La stratégie de réversion moyenne AHR999 détermine le statut de surachat et de survente de Bitcoin en comparant le prix actuel avec le prix d'équilibre historique et le prix de tendance, et mène des opérations d'investissement fixe, de bottom-fishing et de take-profit. Cette stratégie a une certaine base théorique et une certaine interprétabilité. En combinant deux indicateurs, elle peut mieux capturer les schémas de fluctuation des prix de Bitcoin. Cependant, la stratégie est également confrontée à des risques en termes d'échec des indicateurs, de sélection de paramètres et de gestion de fonds, nécessitant une optimisation et une amélioration continues dans la pratique.


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


Relationnée

Plus de