В процессе загрузки ресурсов... загрузка...

ahr999 стратегию бронирования

Автор:Чао Чжан, Дата: 2021-07-19 00:05:35
Тэги:Помощь в торговле

AHR999 Mean Reversion Strategy (Стратегия реверсии значений) AHR999, AHR999X, согласование среднего числа, алгоритмическая цена, чистая стоимость

####Обзор Эта стратегия основана на индикаторах AHR999 и AHR999X. Сравнивая текущую цену с гармонической средней ценой и логарифмической ценой, она определяет, является ли биткоин перекупленным или перепроданным, и соответственно проводит фиксированные инвестиции и операции по поиску дна. Между тем, стратегия также устанавливает условие получения прибыли для частичной продажи, когда индикатор AHR999X находится ниже определенного порога.

Принцип стратегии

  1. Вычислить гармоническое среднее исторических цен биткойнов как ориентир для долгосрочной равновесной цены.
  2. Вычислить соответствующую логарифмическую цену на основе количества дней с момента рождения Биткоина как ориентир для долгосрочной цены тренда.
  3. Вычислить текущий показатель AHR999, который представляет собой произведение соотношения текущей цены к гармонической средней цене и логарифмической цене.
  4. Вычислить текущий показатель AHR999X, который равен 3-кратному соотношению средней гармонической цены к текущей цене умноженному на соотношение логарифмической цены к текущей цене.
  5. На основе значения показателя AHR999 определите, проводить ли фиксированные инвестиции или дновой промысел: фиксированные инвестиции осуществляются, когда AHR999 находится в пределах установленного диапазона, а дновой промысел осуществляется, когда он находится ниже нижнего предела.
  6. На основе значения индикатора AHR999X определите, следует ли получать прибыль.

#### Анализ преимуществ

  1. Стратегия основана на долгосрочной равновесной цене и трендовой цене биткоина, с определенной теоретической основой и интерпретацией.
  2. Введение гармонического среднего снижает влияние краткосрочных колебаний, что делает суждение более надежным.
  3. Объединив индикаторы AHR999 и AHR999X, он может лучше определить статус перекупленных и перепроданных биткойнов и сроки получения прибыли.
  4. Фиксированные инвестиции и рыболовство на дне сочетаются, чтобы постепенно наращивать позиции, когда цены относительно недооценены, что приводит к относительно низким затратам.
  5. Операция по получению прибыли имеет целью получить определенную доходность при относительной переоценке цен, сохраняя при этом большинство позиций для долгосрочного повышения.

### Анализ рисков

  1. Стратегия основана на индикаторах AHR999 и AHR999X. Если будущее движение цены Биткойна значительно изменится, в результате чего эти два индикатора потерпят неудачу, стратегия может столкнуться с большими рисками.
  2. Если выбранный исторический интервал цен недостаточно разумный, он может повлиять на эффективность стратегии.
  3. Расчет логарифмической цены основан на количестве дней с момента рождения Биткоина. Если долгосрочная тенденция роста Биткоина изменится, логарифмическая цена может потерять свое референтное значение.
  4. Стратегия может столкнуться с риском недостаточного финансирования для рыболовства дна, когда цены относительно высоки, что приводит к невозможности своевременно наращивать позиции.
  5. Операция по получению прибыли может привести к тому, что стратегия потеряет некоторые выгоды, если цены продолжат расти.

#### Оптимизация направления

  1. Оптимизировать пороги показателей AHR999 и AHR999X, чтобы найти наиболее подходящие интервалы для фиксированных инвестиций, долевого рыболовства и получения прибыли.
  2. Ввести больше показателей, таких как объем торговли и волатильность, чтобы помочь оценить тенденции и состояние перекупленности/перепроданности.
  3. Оптимизировать метод расчета гармонической средней величины, например, надлежащим образом скорректировать весы исторических цен, чтобы уменьшить зависимость от дальних исторических цен.
  4. Динамически корректировать объем фиксированных инвестиций и рыболовства на дне, увеличивая инвестиции при более низких ценах и сокращая инвестиции при более высоких ценах.
  5. Оптимизировать операцию по получению прибыли, например, динамическую корректировку на основе ценовых тенденций и затрат на позиции для сбалансирования доходности и рисков.

#### Резюме Стратегия AHR999 Mean Reversion определяет статус Bitcoin в условиях перекупки и перепродажи путем сравнения текущей цены с исторической ценой равновесия и ценой тренда, а также проводит фиксированные инвестиции, операции по снижению цены и получению прибыли. Эта стратегия имеет определенную теоретическую основу и интерпретируемость. Объединив два индикатора, она может лучше улавливать закономерности колебаний цены 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);
	}
}


Связанные

Больше