Sumber dimuat naik... memuat...

ahr999 strategi pelaburan tetap

Penulis:ChaoZhang, Tarikh: 2021-07-19 00:05:35
Tag:Dibantu Perdagangan

AHR999 Strategi Pembalikan Maksud AHR999, AHR999X, purata penyesuaian, harga logaritma, nilai bersih

####Pengamatan Strategi ini berdasarkan kepada penunjuk AHR999 dan AHR999X. Dengan membandingkan harga semasa dengan harga purata harmonik dan harga logaritma, ia menentukan sama ada Bitcoin terlalu banyak dibeli atau terlalu banyak dijual, dan dengan itu menjalankan pelaburan tetap dan operasi memancing bawah. Sementara itu, strategi ini juga menetapkan syarat mengambil keuntungan untuk menjual sebahagiannya apabila penunjuk AHR999X berada di bawah ambang tertentu.

### Prinsip Strategi

  1. Mengira purata harmonik harga sejarah Bitcoin sebagai rujukan untuk harga keseimbangan jangka panjang.
  2. Hitung harga logaritma yang sepadan berdasarkan bilangan hari sejak kelahiran Bitcoin sebagai rujukan untuk harga trend jangka panjang.
  3. Mengira penunjuk AHR999 semasa, yang merupakan hasil daripada nisbah harga semasa kepada harga purata harmonik dan harga logaritma.
  4. Mengira penunjuk AHR999X semasa, yang 3 kali nisbah harga purata harmonik kepada harga semasa dikalikan dengan nisbah harga logaritma kepada harga semasa.
  5. Berdasarkan nilai penunjuk AHR999, tentukan sama ada untuk menjalankan pelaburan tetap atau perikanan bawah. Pelaburan tetap dibuat apabila AHR999 berada dalam julat yang ditetapkan, dan perikanan bawah dibuat apabila ia di bawah had bawah.
  6. Berdasarkan nilai penunjuk AHR999X, tentukan sama ada mengambil keuntungan. Apabila AHR999X di bawah ambang yang ditetapkan, jual sebahagian tertentu dari kedudukan.

### Analisis Kelebihan

  1. Strategi ini berdasarkan harga keseimbangan jangka panjang Bitcoin dan harga trend, dengan asas teori dan tafsiran tertentu.
  2. Pengenalan purata harmonik mengurangkan kesan turun naik jangka pendek, menjadikan penilaian lebih kukuh.
  3. Dengan menggabungkan penunjuk AHR999 dan AHR999X, ia dapat menangkap lebih baik status overbought dan oversold Bitcoin dan masa pengambilan keuntungan.
  4. Pelaburan tetap dan perikanan bawah digabungkan untuk membina kedudukan secara beransur-ansur apabila harga agak kurang bernilai, menghasilkan kos yang agak rendah.
  5. Operasi mengambil keuntungan ditetapkan untuk memperoleh pulangan tertentu apabila harga agak terlalu dinilai sambil mengekalkan kebanyakan kedudukan untuk peningkatan jangka panjang.

### Analisis Risiko

  1. Strategi ini bergantung pada penunjuk AHR999 dan AHR999X. Jika pergerakan harga masa depan Bitcoin berubah dengan ketara, menyebabkan kedua-dua penunjuk ini gagal, strategi mungkin menghadapi risiko yang lebih besar.
  2. Jika selang harga sejarah yang dipilih tidak cukup munasabah, ia boleh menjejaskan prestasi strategi.
  3. Pengiraan harga logaritma adalah berdasarkan bilangan hari sejak kelahiran Bitcoin. Jika trend pertumbuhan jangka panjang Bitcoin berubah, harga logaritma mungkin kehilangan kepentingan rujukan.
  4. Strategi ini mungkin menghadapi risiko dana yang tidak mencukupi untuk memancing bawah apabila harga agak tinggi, yang menyebabkan ketidakupayaan untuk membina kedudukan dengan tepat pada masanya.
  5. Operasi mengambil keuntungan boleh menyebabkan strategi kehilangan beberapa keuntungan jika harga terus meningkat.

#### Arah Pengoptimuman

  1. Mengoptimumkan ambang indikator AHR999 dan AHR999X untuk mencari selang yang paling sesuai untuk pelaburan tetap, perikanan bawah, dan mengambil keuntungan.
  2. Memperkenalkan lebih banyak penunjuk, seperti jumlah dagangan dan turun naik, untuk membantu menilai trend dan keadaan terlalu banyak dibeli / terlalu banyak dijual.
  3. Mengoptimumkan kaedah pengiraan purata harmonik, seperti menyesuaikan berat harga sejarah dengan betul untuk mengurangkan pergantungan pada harga sejarah yang jauh.
  4. Sesuaikan secara dinamik jumlah pelaburan tetap dan perikanan bawah, meningkatkan pelaburan apabila harga lebih rendah dan mengurangkan pelaburan apabila harga lebih tinggi.
  5. Mengoptimumkan operasi mengambil keuntungan, seperti penyesuaian dinamik berdasarkan trend harga dan kos kedudukan untuk mengimbangi pulangan dan risiko.

#### Ringkasan AHR999 Mean Reversion Strategy menentukan status overbought dan oversold Bitcoin dengan membandingkan harga semasa dengan harga keseimbangan sejarah dan harga trend, dan menjalankan operasi pelaburan tetap, memancing bawah, dan mengambil keuntungan. Strategi ini mempunyai asas teori dan tafsiran tertentu. Dengan menggabungkan dua penunjuk, ia dapat menangkap corak turun naik harga Bitcoin dengan lebih baik. Walau bagaimanapun, strategi ini juga menghadapi risiko dari segi kegagalan penunjuk, pemilihan parameter, dan pengurusan dana, yang memerlukan pengoptimuman dan penambahbaikan berterusan dalam amalan. Secara keseluruhan, AHR999 Mean Reversion Strategy memberikan idea yang layak untuk pelaburan nilai jangka panjang dalam 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);
	}
}


Berkaitan

Lebih lanjut