Type/to search
3
Follow
1507
Followers
Chiến lược cân bằng vĩnh cửu để mua ở đáy của thị trường giá xuống
Discussions
Created 2022-06-02 10:00:04  Updated 2024-12-02 21:36:36
 7
 6494

img

Trước đây, FMZ đã chính thức phát hành chiến lược lưới vĩnh viễn, được người dùng khá ưa chuộng và giao dịch TRX theo thời gian thực đã thu được rất nhiều lợi nhuận trong năm qua với rủi ro có thể kiểm soát được. Chiến lược lưới điện bền vững duy nhất cũng có một số vấn đề:

  1. Cần phải thiết lập các thông số như giá ban đầu, khoảng cách lưới, giá trị lưới, chế độ dài và ngắn, v.v. Các thiết lập khá phức tạp, có tác động lớn hơn đến lợi nhuận và khó thiết lập đối với người mới bắt đầu.
  2. Rủi ro bán khống của chiến lược lưới vĩnh cửu rất cao, trong khi rủi ro bán dài hạn tương đối thấp. Ngay cả khi giá trị lưới được đặt rất nhỏ, tác động đến giá thanh lý bán khống cũng không đáng kể.
  3. Lưới hợp đồng vĩnh viễn có thể chọn chỉ mua vào để tránh rủi ro bán khống, điều này có vẻ ổn ở thời điểm hiện tại. Tuy nhiên, có một vấn đề là giá hiện tại vượt quá giá ban đầu, dẫn đến vị thế trống và giá ban đầu cần phải được thiết lập lại.

Tôi đã từng viết một bài viết về các nguyên tắc của chiến lược cân bằng và so sánh nó với chiến lược lưới, bạn vẫn có thể tham khảo tại đây: https://www.fmz.com/digest-topic/5930. Chiến lược cân bằng luôn giữ một vị thế với tỷ lệ giá trị hoặc giá trị cố định. Nó bán một số khi giá tăng và mua một số khi giá giảm. Nó có thể dễ dàng thiết lập và chạy. Ngay cả khi giá tiền tệ tăng nhiều, vẫn không có nguy cơ bị lỗ. Vấn đề với chiến lược cân bằng giao ngay là mức sử dụng vốn thấp và không có cách dễ dàng nào để tăng đòn bẩy. Hợp đồng vĩnh viễn có thể giải quyết được vấn đề. Nếu tổng số vốn là 1.000, bạn có thể giữ 2.000 với số tiền cố định, vượt quá số vốn ban đầu và cải thiện tỷ lệ sử dụng vốn. Ngoài ra còn có một tham số để điều chỉnh tỷ lệ, điều khiển mức tăng hoặc giảm vị thế khi giá tăng hoặc giảm. Ví dụ, nếu đặt thành 0,01, nghĩa là giảm vị thế một lần khi giá tăng 1%, và tăng vị thế một lần khi giá giảm 1%.

Đối với người mới bắt đầu, chiến lược cân bằng được khuyến khích mạnh mẽ. Chiến lược này dễ vận hành và chỉ yêu cầu bạn đặt tham số tỷ lệ nắm giữ hoặc giá trị nắm giữ, và bạn có thể chạy mà không lo giá tăng. Những người có một lượng kinh nghiệm nhất định có thể chọn chiến lược lưới điện, quyết định giới hạn trên và dưới của biến động cũng như nguồn vốn cho mỗi lưới điện, cải thiện việc sử dụng vốn và tìm kiếm lợi nhuận tối đa.

Để tạo điều kiện thuận lợi cho việc kiểm tra ngược nhiều cặp giao dịch hơn, tài liệu này sẽ trình bày toàn bộ quy trình kiểm tra ngược và người dùng có thể điều chỉnh các thông số và cặp giao dịch khác nhau để so sánh. (Phiên bản này là Python3 và cần có tác nhân để tải xuống thị trường. Người dùng có thể tự tải xuống Anancoda3 hoặc chạy nó thông qua colab của Google)

python
import requests from datetime import date,datetime import time import pandas as pd import numpy as np import matplotlib.pyplot as plt import requests, zipfile, io %matplotlib inline
python
## 当前交易对 Info = requests.get('https://fapi.binance.com/fapi/v1/exchangeInfo') symbols = [s['symbol'] for s in Info.json()['symbols']] symbols = list(set(filter(lambda x: x[-4:] == 'USDT', [s.split('_')[0] for s in symbols]))- set(['1000SHIBUSDT','1000XECUSDT','BTCDOMUSDT','DEFIUSDT','BTCSTUSDT'])) + ['SHIBUSDT','XECUSDT'] print(symbols)
['FLMUSDT', 'ICPUSDT', 'CHZUSDT', 'APEUSDT', 'DARUSDT', 'TLMUSDT', 'ETHUSDT', 'STMXUSDT', 'ENJUSDT', 'LINKUSDT', 'OGNUSDT', 'RSRUSDT', 'QTUMUSDT', 'UNIUSDT', 'BNBUSDT', 'XLMUSDT', 'ATOMUSDT', 'LPTUSDT', 'UNFIUSDT', 'DASHUSDT', 'BTCUSDT', 'NEOUSDT', 'AAVEUSDT', 'DUSKUSDT', 'XRPUSDT', 'IOTXUSDT', 'CVCUSDT', 'SANDUSDT', 'XTZUSDT', 'IOTAUSDT', 'BELUSDT', 'MANAUSDT', 'IOSTUSDT', 'IMXUSDT', 'THETAUSDT', 'SCUSDT', 'DOGEUSDT', 'CELOUSDT', 'BNXUSDT', 'SNXUSDT', 'ZRXUSDT', 'HBARUSDT', 'DOTUSDT', 'ANKRUSDT', 'CELRUSDT', 'BAKEUSDT', 'GALUSDT', 'ICXUSDT', 'LRCUSDT', 'AVAXUSDT', 'C98USDT', 'MTLUSDT', 'FTTUSDT', 'MASKUSDT', 'RLCUSDT', 'MATICUSDT', 'COMPUSDT', 'BLZUSDT', 'CRVUSDT', 'ZECUSDT', 'RUNEUSDT', 'LITUSDT', 'ONEUSDT', 'ADAUSDT', 'NKNUSDT', 'LTCUSDT', 'ATAUSDT', 'GALAUSDT', 'BALUSDT', 'ROSEUSDT', 'EOSUSDT', 'YFIUSDT', 'SKLUSDT', 'BANDUSDT', 'ALGOUSDT', 'NEARUSDT', 'AXSUSDT', 'KSMUSDT', 'AUDIOUSDT', 'SRMUSDT', 'HNTUSDT', 'MKRUSDT', 'KLAYUSDT', 'FLOWUSDT', 'STORJUSDT', 'BCHUSDT', 'DYDXUSDT', 'ARUSDT', 'GMTUSDT', 'CHRUSDT', 'API3USDT', 'VETUSDT', 'KAVAUSDT', 'WAVESUSDT', 'EGLDUSDT', 'SFPUSDT', 'RENUSDT', 'SUSHIUSDT', 'SOLUSDT', 'RVNUSDT', 'ONTUSDT', 'BTSUSDT', 'ZILUSDT', 'GTCUSDT', 'ZENUSDT', 'ALICEUSDT', 'ETCUSDT', 'TRXUSDT', 'TOMOUSDT', 'FILUSDT', 'ARPAUSDT', 'CTKUSDT', 'BATUSDT', 'SXPUSDT', '1INCHUSDT', 'HOTUSDT', 'WOOUSDT', 'LINAUSDT', 'REEFUSDT', 'GRTUSDT', 'RAYUSDT', 'COTIUSDT', 'XMRUSDT', 'PEOPLEUSDT', 'OCEANUSDT', 'JASMYUSDT', 'TRBUSDT', 'ANTUSDT', 'XEMUSDT', 'DGBUSDT', 'ENSUSDT', 'OMGUSDT', 'ALPHAUSDT', 'FTMUSDT', 'DENTUSDT', 'KNCUSDT', 'CTSIUSDT', 'SHIBUSDT', 'XECUSDT']
python
#获取任意周期K线的函数 def GetKlines(symbol='BTCUSDT',start='2020-8-10',end='2021-8-10',period='1h',base='fapi',v = 'v1'): Klines = [] start_time = int(time.mktime(datetime.strptime(start, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000 end_time = min(int(time.mktime(datetime.strptime(end, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000,time.time()*1000) intervel_map = {'m':60*1000,'h':60*60*1000,'d':24*60*60*1000} while start_time < end_time: mid_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]] url = 'https://'+base+'.binance.com/'+base+'/'+v+'/klines?symbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000'%(symbol,period,start_time,mid_time) #print(url) res = requests.get(url) res_list = res.json() if type(res_list) == list and len(res_list) > 0: start_time = res_list[-1][0]+int(period[:-1])*intervel_map[period[-1]] Klines += res_list if type(res_list) == list and len(res_list) == 0: start_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]] if mid_time >= end_time: break df = pd.DataFrame(Klines,columns=['time','open','high','low','close','amount','end_time','volume','count','buy_amount','buy_volume','null']).astype('float') df.index = pd.to_datetime(df.time,unit='ms') return df

Bằng cách tải xuống giá đóng cửa của tất cả các cặp giao dịch từ năm 2021 đến nay, chúng ta có thể quan sát những thay đổi trong chỉ số thị trường chung: năm 2021 đến năm 2022 chắc chắn là một thị trường tăng giá và chỉ số đã tăng 14 lần tại một thời điểm. Có thể nói rằng Vàng có ở khắp mọi nơi. Giá trị của một số đồng tiền đã tăng lên hàng trăm lần. Tuy nhiên, vào năm 2022, một thị trường giá xuống đã bắt đầu kéo dài trong nửa năm. Chỉ số đã từng giảm mạnh 80% và hàng chục đồng tiền đã giảm hơn 90%. Sự tăng giảm đột ngột như vậy phản ánh những rủi ro rất lớn của các chiến lược lưới điện.

Chỉ số hiện tại ở mức khoảng 3, vẫn tăng 200% so với đầu năm 2021. Xét theo diễn biến của thị trường thì hiện tại đây có thể coi là đáy tương đối.

Giá tiền tệ cao nhất đã tăng hơn 10 lần so với đầu năm:

'MKRUSDT': 10.294, 'CRVUSDT': 10.513, 'STORJUSDT': 10.674, 'SKLUSDT': 11.009, 'CVCUSDT': 11.026, 'SRMUSDT': 11.031, 'QTUMUSDT': 12.066, 'ALPHAUSDT': 12.103, 'ZENUSDT': 12.631, 'VETUSDT': 13.296, 'ROSEUSDT': 13.429, 'FTTUSDT': 13.705, 'IOSTUSDT': 13.786, 'COTIUSDT': 13.958, 'NEARUSDT': 14.855, 'HBARUSDT': 15.312, 'RLCUSDT': 15.432, 'SCUSDT': 15.6, 'GALAUSDT': 15.722, 'RUNEUSDT': 15.795, 'ADAUSDT': 16.94, 'MTLUSDT': 17.18, 'BNBUSDT': 17.899, 'RVNUSDT': 18.169, 'EGLDUSDT': 18.879, 'LRCUSDT': 19.499, 'ANKRUSDT': 21.398, 'ETCUSDT': 23.51, 'DUSKUSDT': 23.55, 'AUDIOUSDT': 25.306, 'OGNUSDT': 25.524, 'GMTUSDT': 28.83, 'ENJUSDT': 33.073, 'STMXUSDT': 33.18, 'IOTXUSDT': 35.866, 'AVAXUSDT': 36.946, 'CHZUSDT': 37.128, 'CELRUSDT': 37.273, 'HNTUSDT': 38.779, 'CTSIUSDT': 41.108, 'HOTUSDT': 46.466, 'CHRUSDT': 61.091, 'MANAUSDT': 62.143, 'NKNUSDT': 70.636, 'ONEUSDT': 84.132, 'DENTUSDT': 99.973, 'DOGEUSDT': 121.447, 'SOLUSDT': 140.296, 'MATICUSDT': 161.846, 'FTMUSDT': 192.507, 'SANDUSDT': 203.219, 'AXSUSDT': 270.41

Mức thoái lui hiện tại lớn hơn 80% so với điểm cao nhất:

ICPUSDT': 0.022, 'FILUSDT': 0.043, 'BAKEUSDT': 0.046, 'TLMUSDT': 0.05, 'LITUSDT': 0.053, 'LINAUSDT': 0.054, 'JASMYUSDT': 0.056, 'ALPHAUSDT': 0.062, 'RAYUSDT': 0.062, 'GRTUSDT': 0.067, 'DENTUSDT': 0.068, 'RSRUSDT': 0.068, 'XEMUSDT': 0.068, 'UNFIUSDT': 0.072, 'DYDXUSDT': 0.074, 'SUSHIUSDT': 0.074, 'OGNUSDT': 0.074, 'COMPUSDT': 0.074, 'NKNUSDT': 0.078, 'SKLUSDT': 0.08, 'DGBUSDT': 0.081, 'RLCUSDT': 0.085, 'REEFUSDT': 0.086, 'BANDUSDT': 0.086, 'HOTUSDT': 0.092, 'SRMUSDT': 0.092, 'RENUSDT': 0.092, 'BTSUSDT': 0.093, 'THETAUSDT': 0.094, 'FLMUSDT': 0.094, 'EOSUSDT': 0.095, 'TRBUSDT': 0.095, 'SXPUSDT': 0.095, 'ATAUSDT': 0.096, 'NEOUSDT': 0.096, 'FLOWUSDT': 0.097, 'YFIUSDT': 0.101, 'BALUSDT': 0.106, 'MASKUSDT': 0.106, 'ONTUSDT': 0.108, 'CELRUSDT': 0.108, 'AUDIOUSDT': 0.108, 'SCUSDT': 0.11, 'GALAUSDT': 0.113, 'GTCUSDT': 0.117, 'CTSIUSDT': 0.117, 'STMXUSDT': 0.118, 'DARUSDT': 0.118, 'ALICEUSDT': 0.119, 'SNXUSDT': 0.124, 'FTMUSDT': 0.126, 'BCHUSDT': 0.127, 'SFPUSDT': 0.127, 'ROSEUSDT': 0.128, 'DOGEUSDT': 0.128, 'RVNUSDT': 0.129, 'OCEANUSDT': 0.129, 'VETUSDT': 0.13, 'KSMUSDT': 0.131, 'ICXUSDT': 0.131, 'UNIUSDT': 0.131, 'ONEUSDT': 0.131, '1INCHUSDT': 0.134, 'IOTAUSDT': 0.139, 'C98USDT': 0.139, 'WAVESUSDT': 0.14, 'DUSKUSDT': 0.141, 'LINKUSDT': 0.143, 'DASHUSDT': 0.143, 'OMGUSDT': 0.143, 'PEOPLEUSDT': 0.143, 'AXSUSDT': 0.15, 'ENJUSDT': 0.15, 'QTUMUSDT': 0.152, 'SHIBUSDT': 0.154, 'ZENUSDT': 0.154, 'BLZUSDT': 0.154, 'ANTUSDT': 0.155, 'XECUSDT': 0.155, 'CHZUSDT': 0.158, 'RUNEUSDT': 0.163, 'ENSUSDT': 0.165, 'LRCUSDT': 0.167, 'CHRUSDT': 0.168, 'IOTXUSDT': 0.174, 'TOMOUSDT': 0.176, 'ALGOUSDT': 0.177, 'EGLDUSDT': 0.177, 'ARUSDT': 0.178, 'LTCUSDT': 0.178, 'HNTUSDT': 0.18, 'LPTUSDT': 0.181, 'SOLUSDT': 0.183, 'ARPAUSDT': 0.184, 'BELUSDT': 0.184, 'ETCUSDT': 0.186, 'ZRXUSDT': 0.187, 'AAVEUSDT': 0.187, 'CVCUSDT': 0.188, 'STORJUSDT': 0.189, 'COTIUSDT': 0.19, 'CELOUSDT': 0.191, 'SANDUSDT': 0.191, 'ADAUSDT': 0.192, 'HBARUSDT': 0.194, 'DOTUSDT': 0.195, 'XLMUSDT': 0.195

python
#下载所有交易对的收盘价 start_date = '2021-1-1' end_date = '2022-05-30' period = '1d' df_all = pd.DataFrame(index=pd.date_range(start=start_date, end=end_date, freq=period),columns=symbols) for i in range(len(symbols)): #print(symbols[i]) symbol = symbols[i] df_s = GetKlines(symbol=symbol,start=start_date,end=end_date,period=period,base='api',v='v3') df_all[symbol] = df_s[~df_s.index.duplicated(keep='first')].close
python
#指数变化 df_norm = df_all/df_all.fillna(method='bfill').iloc[0] #归一化 df_norm.mean(axis=1).plot(figsize=(15,6),grid=True);

png

python
#比年初的最高涨幅 max_up = df_all.max()/df_all.fillna(method='bfill').iloc[0] print(max_up.map(lambda x:round(x,3)).sort_values().to_dict())
{'JASMYUSDT': 1.0, 'ICPUSDT': 1.0, 'LINAUSDT': 1.0, 'WOOUSDT': 1.0, 'GALUSDT': 1.0, 'PEOPLEUSDT': 1.0, 'XECUSDT': 1.026, 'ENSUSDT': 1.032, 'TLMUSDT': 1.039, 'IMXUSDT': 1.099, 'FLOWUSDT': 1.155, 'ATAUSDT': 1.216, 'DARUSDT': 1.261, 'ALICEUSDT': 1.312, 'BNXUSDT': 1.522, 'API3USDT': 1.732, 'GTCUSDT': 1.833, 'KLAYUSDT': 1.891, 'BAKEUSDT': 1.892, 'DYDXUSDT': 2.062, 'SHIBUSDT': 2.281, 'BTCUSDT': 2.302, 'MASKUSDT': 2.396, 'SFPUSDT': 2.74, 'LPTUSDT': 2.75, 'APEUSDT': 2.783, 'ARUSDT': 2.928, 'CELOUSDT': 2.951, 'ZILUSDT': 2.999, 'LTCUSDT': 3.072, 'SNXUSDT': 3.266, 'XEMUSDT': 3.555, 'XMRUSDT': 3.564, 'YFIUSDT': 3.794, 'BANDUSDT': 3.812, 'RAYUSDT': 3.924, 'REEFUSDT': 4.184, 'ANTUSDT': 4.205, 'XTZUSDT': 4.339, 'CTKUSDT': 4.352, 'LITUSDT': 4.38, 'RSRUSDT': 4.407, 'LINKUSDT': 4.412, 'BCHUSDT': 4.527, 'DASHUSDT': 5.037, 'BALUSDT': 5.172, 'OCEANUSDT': 5.277, 'EOSUSDT': 5.503, 'RENUSDT': 5.538, 'XLMUSDT': 5.563, 'TOMOUSDT': 5.567, 'ZECUSDT': 5.654, 'COMPUSDT': 5.87, 'DGBUSDT': 5.948, 'ALGOUSDT': 5.981, 'ONTUSDT': 5.997, 'BELUSDT': 6.101, 'TRXUSDT': 6.116, 'ZRXUSDT': 6.135, 'GRTUSDT': 6.45, '1INCHUSDT': 6.479, 'DOTUSDT': 6.502, 'ETHUSDT': 6.596, 'KAVAUSDT': 6.687, 'ICXUSDT': 6.74, 'SUSHIUSDT': 6.848, 'AAVEUSDT': 6.931, 'BTSUSDT': 6.961, 'KNCUSDT': 6.966, 'C98USDT': 7.091, 'THETAUSDT': 7.222, 'ATOMUSDT': 7.553, 'OMGUSDT': 7.556, 'SXPUSDT': 7.681, 'UNFIUSDT': 7.696, 'XRPUSDT': 7.726, 'TRBUSDT': 8.241, 'BLZUSDT': 8.434, 'NEOUSDT': 8.491, 'FLMUSDT': 8.506, 'KSMUSDT': 8.571, 'FILUSDT': 8.591, 'IOTAUSDT': 8.616, 'BATUSDT': 8.647, 'ARPAUSDT': 9.055, 'UNIUSDT': 9.104, 'WAVESUSDT': 9.106, 'MKRUSDT': 10.294, 'CRVUSDT': 10.513, 'STORJUSDT': 10.674, 'SKLUSDT': 11.009, 'CVCUSDT': 11.026, 'SRMUSDT': 11.031, 'QTUMUSDT': 12.066, 'ALPHAUSDT': 12.103, 'ZENUSDT': 12.631, 'VETUSDT': 13.296, 'ROSEUSDT': 13.429, 'FTTUSDT': 13.705, 'IOSTUSDT': 13.786, 'COTIUSDT': 13.958, 'NEARUSDT': 14.855, 'HBARUSDT': 15.312, 'RLCUSDT': 15.432, 'SCUSDT': 15.6, 'GALAUSDT': 15.722, 'RUNEUSDT': 15.795, 'ADAUSDT': 16.94, 'MTLUSDT': 17.18, 'BNBUSDT': 17.899, 'RVNUSDT': 18.169, 'EGLDUSDT': 18.879, 'LRCUSDT': 19.499, 'ANKRUSDT': 21.398, 'ETCUSDT': 23.51, 'DUSKUSDT': 23.55, 'AUDIOUSDT': 25.306, 'OGNUSDT': 25.524, 'GMTUSDT': 28.83, 'ENJUSDT': 33.073, 'STMXUSDT': 33.18, 'IOTXUSDT': 35.866, 'AVAXUSDT': 36.946, 'CHZUSDT': 37.128, 'CELRUSDT': 37.273, 'HNTUSDT': 38.779, 'CTSIUSDT': 41.108, 'HOTUSDT': 46.466, 'CHRUSDT': 61.091, 'MANAUSDT': 62.143, 'NKNUSDT': 70.636, 'ONEUSDT': 84.132, 'DENTUSDT': 99.973, 'DOGEUSDT': 121.447, 'SOLUSDT': 140.296, 'MATICUSDT': 161.846, 'FTMUSDT': 192.507, 'SANDUSDT': 203.219, 'AXSUSDT': 270.41}
python
#当前最大回测 draw_down = df_all.iloc[-1]/df_all.max() print(draw_down.map(lambda x:round(x,3)).sort_values().to_dict())
{'ICPUSDT': 0.022, 'FILUSDT': 0.043, 'BAKEUSDT': 0.046, 'TLMUSDT': 0.05, 'LITUSDT': 0.053, 'LINAUSDT': 0.054, 'JASMYUSDT': 0.056, 'ALPHAUSDT': 0.062, 'RAYUSDT': 0.062, 'GRTUSDT': 0.067, 'DENTUSDT': 0.068, 'RSRUSDT': 0.068, 'XEMUSDT': 0.068, 'UNFIUSDT': 0.072, 'DYDXUSDT': 0.074, 'SUSHIUSDT': 0.074, 'OGNUSDT': 0.074, 'COMPUSDT': 0.074, 'NKNUSDT': 0.078, 'SKLUSDT': 0.08, 'DGBUSDT': 0.081, 'RLCUSDT': 0.085, 'REEFUSDT': 0.086, 'BANDUSDT': 0.086, 'HOTUSDT': 0.092, 'SRMUSDT': 0.092, 'RENUSDT': 0.092, 'BTSUSDT': 0.093, 'THETAUSDT': 0.094, 'FLMUSDT': 0.094, 'EOSUSDT': 0.095, 'TRBUSDT': 0.095, 'SXPUSDT': 0.095, 'ATAUSDT': 0.096, 'NEOUSDT': 0.096, 'FLOWUSDT': 0.097, 'YFIUSDT': 0.101, 'BALUSDT': 0.106, 'MASKUSDT': 0.106, 'ONTUSDT': 0.108, 'CELRUSDT': 0.108, 'AUDIOUSDT': 0.108, 'SCUSDT': 0.11, 'GALAUSDT': 0.113, 'GTCUSDT': 0.117, 'CTSIUSDT': 0.117, 'STMXUSDT': 0.118, 'DARUSDT': 0.118, 'ALICEUSDT': 0.119, 'SNXUSDT': 0.124, 'FTMUSDT': 0.126, 'BCHUSDT': 0.127, 'SFPUSDT': 0.127, 'ROSEUSDT': 0.128, 'DOGEUSDT': 0.128, 'RVNUSDT': 0.129, 'OCEANUSDT': 0.129, 'VETUSDT': 0.13, 'KSMUSDT': 0.131, 'ICXUSDT': 0.131, 'UNIUSDT': 0.131, 'ONEUSDT': 0.131, '1INCHUSDT': 0.134, 'IOTAUSDT': 0.139, 'C98USDT': 0.139, 'WAVESUSDT': 0.14, 'DUSKUSDT': 0.141, 'LINKUSDT': 0.143, 'DASHUSDT': 0.143, 'OMGUSDT': 0.143, 'PEOPLEUSDT': 0.143, 'AXSUSDT': 0.15, 'ENJUSDT': 0.15, 'QTUMUSDT': 0.152, 'SHIBUSDT': 0.154, 'ZENUSDT': 0.154, 'BLZUSDT': 0.154, 'ANTUSDT': 0.155, 'XECUSDT': 0.155, 'CHZUSDT': 0.158, 'RUNEUSDT': 0.163, 'ENSUSDT': 0.165, 'LRCUSDT': 0.167, 'CHRUSDT': 0.168, 'IOTXUSDT': 0.174, 'TOMOUSDT': 0.176, 'ALGOUSDT': 0.177, 'EGLDUSDT': 0.177, 'ARUSDT': 0.178, 'LTCUSDT': 0.178, 'HNTUSDT': 0.18, 'LPTUSDT': 0.181, 'SOLUSDT': 0.183, 'ARPAUSDT': 0.184, 'BELUSDT': 0.184, 'ETCUSDT': 0.186, 'ZRXUSDT': 0.187, 'AAVEUSDT': 0.187, 'CVCUSDT': 0.188, 'STORJUSDT': 0.189, 'COTIUSDT': 0.19, 'CELOUSDT': 0.191, 'SANDUSDT': 0.191, 'ADAUSDT': 0.192, 'HBARUSDT': 0.194, 'DOTUSDT': 0.195, 'XLMUSDT': 0.195, 'AVAXUSDT': 0.206, 'ANKRUSDT': 0.207, 'MTLUSDT': 0.208, 'MANAUSDT': 0.209, 'CRVUSDT': 0.213, 'API3USDT': 0.221, 'IOSTUSDT': 0.227, 'XRPUSDT': 0.228, 'BATUSDT': 0.228, 'MKRUSDT': 0.229, 'MATICUSDT': 0.229, 'CTKUSDT': 0.233, 'ZILUSDT': 0.233, 'WOOUSDT': 0.234, 'ATOMUSDT': 0.237, 'KLAYUSDT': 0.239, 'XTZUSDT': 0.245, 'IMXUSDT': 0.278, 'NEARUSDT': 0.285, 'GALUSDT': 0.299, 'APEUSDT': 0.305, 'ZECUSDT': 0.309, 'KAVAUSDT': 0.31, 'GMTUSDT': 0.327, 'FTTUSDT': 0.366, 'KNCUSDT': 0.401, 'ETHUSDT': 0.416, 'XMRUSDT': 0.422, 'BTCUSDT': 0.47, 'BNBUSDT': 0.476, 'TRXUSDT': 0.507, 'BNXUSDT': 0.64}

Đầu tiên, chúng tôi sử dụng mã đơn giản nhất để mô phỏng xu hướng giảm và xem giá thanh lý của các giá trị vị thế khác nhau. Vì chiến lược này luôn giữ vị thế mua nên không có rủi ro tăng giá. Vốn ban đầu là 1000, giá tiền tệ là 1 và tỷ lệ điều chỉnh là 0,01. Kết quả như sau. Có thể thấy rằng rủi ro của các vị thế dài bị thanh lý không hề thấp. Với đòn bẩy 1,5 lần, nó có thể chống lại mức giảm 50%. Với tình hình đáy hiện tại, đây là rủi ro có thể chấp nhận được.

Giá trị vị tríGiá thanh lý dài hạn
3000.035
5000.133
8000.285
10000.362
15000.51
20000.599
30000.711
50000.81
100000.904
python
for Hold_value in [300,500,800,1000,1500,2000,3000,5000,10000]: amount = Hold_value/1 hold_price = 1 margin = 1000 Pct = 0.01 i = 0 while margin > 0: i += 1 if i>500: break buy_price = (1-Pct)*Hold_value/amount buy_amount = Hold_value*Pct/buy_price hold_price = (amount * hold_price + buy_amount * buy_price) / (buy_amount + amount) amount += buy_amount margin = 1000 + amount * (buy_price - hold_price) print(Hold_value, round(buy_price,3))
300 0.035 500 0.133 800 0.285 1000 0.362 1500 0.51 2000 0.599 3000 0.711 5000 0.81 10000 0.904
python
#还是用原来的回测引擎 class Exchange: def __init__(self, trade_symbols, fee=0.0004, initial_balance=10000): self.initial_balance = initial_balance #初始的资产 self.fee = fee self.trade_symbols = trade_symbols self.account = {'USDT':{'realised_profit':0, 'unrealised_profit':0, 'total':initial_balance, 'fee':0}} for symbol in trade_symbols: self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0,'unrealised_profit':0,'fee':0} def Trade(self, symbol, direction, price, amount): cover_amount = 0 if direction*self.account[symbol]['amount'] >=0 else min(abs(self.account[symbol]['amount']), amount) open_amount = amount - cover_amount self.account['USDT']['realised_profit'] -= price*amount*self.fee #扣除手续费 self.account['USDT']['fee'] += price*amount*self.fee self.account[symbol]['fee'] += price*amount*self.fee if cover_amount > 0: #先平仓 self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount #利润 self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount self.account[symbol]['amount'] -= -direction*cover_amount self.account[symbol]['hold_price'] = 0 if self.account[symbol]['amount'] == 0 else self.account[symbol]['hold_price'] if open_amount > 0: total_cost = self.account[symbol]['hold_price']*direction*self.account[symbol]['amount'] + price*open_amount total_amount = direction*self.account[symbol]['amount']+open_amount self.account[symbol]['hold_price'] = total_cost/total_amount self.account[symbol]['amount'] += direction*open_amount def Buy(self, symbol, price, amount): self.Trade(symbol, 1, price, amount) def Sell(self, symbol, price, amount): self.Trade(symbol, -1, price, amount) def Update(self, close_price): #对资产进行更新 self.account['USDT']['unrealised_profit'] = 0 for symbol in self.trade_symbols: self.account[symbol]['unrealised_profit'] = (close_price[symbol] - self.account[symbol]['hold_price'])*self.account[symbol]['amount'] self.account[symbol]['price'] = close_price[symbol] self.account[symbol]['value'] = abs(self.account[symbol]['amount'])*close_price[symbol] self.account['USDT']['unrealised_profit'] += self.account[symbol]['unrealised_profit'] self.account['USDT']['total'] = round(self.account['USDT']['realised_profit'] + self.initial_balance + self.account['USDT']['unrealised_profit'],6)

Đầu tiên, chúng tôi kiểm tra lại hiệu suất của chiến lược cân bằng TRX. Mức giảm tối đa của TRX trong đợt thị trường giá xuống này tương đối nhỏ, do đó nó có một số tính năng đặc biệt. Dữ liệu được chọn là dòng K 5 phút từ năm 2021 đến nay, với vốn ban đầu là 1000, tỷ lệ điều chỉnh là 0,01, giá trị nắm giữ là 2000 và phí xử lý là 0,0002.

Giá ban đầu của TRX là 0,02676U, và giá cao nhất trong giai đoạn này đạt 0,18U. Hiện tại là khoảng 0,08U, với biến động rất dữ dội. Nếu bạn áp dụng chiến lược lưới dài-ngắn ngay từ đầu, chắc chắn bạn sẽ phải thanh lý vị thế bán khống. Một chiến lược cân bằng không phải là vấn đề lớn.

Lợi nhuận cuối cùng của backtest là 4524U, rất gần với lợi nhuận của TRX ở mức 0,18. Đòn bẩy thấp hơn 2 lần lúc đầu và thấp hơn 0,4 lúc kết thúc. Khả năng thanh lý ngày càng thấp hơn. Trong trong thời gian này, giá trị nắm giữ có thể được tăng lên. Cơ hội. Nhưng thu nhập dưới 2000U vẫn không đổi. Đây cũng là một trong những nhược điểm của chiến lược cân bằng.

python
symbol = 'TRXUSDT' df_trx = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
python
df_trx.close.plot(figsize=(15,6),grid=True);

png

python
#TRX平衡策略回测 hold_value = 2000 pct = 0.01 e = Exchange([symbol], fee=0.0002, initial_balance=1000) init_price = df_trx.iloc[0].open res_list = [] #用于储存中间结果 e.Buy(symbol,init_price,hold_value/init_price) e.Update({symbol:init_price}) for row in df_trx.itertuples(): buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] while row.low < buy_price: e.Buy(symbol,buy_price,pct*hold_value/buy_price) e.Update({symbol:row.close}) buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] while row.high > sell_price: e.Sell(symbol,sell_price,pct*hold_value/sell_price) e.Update({symbol:row.close}) buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] if int(row.time)%(60*60*1000) == 0: e.Update({symbol:row.close}) res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance]) res_trx = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit']) res_trx.index = pd.to_datetime(res_trx.time,unit='ms') print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 4524.226998288555 91.0
python
#收益 res_trx.profit.plot(figsize=(15,6),grid=True);

png

python
#实际占用杠杆 (res_trx.value/(res_trx.profit+1000)).plot(figsize=(15,6),grid=True);

png

Hãy kiểm tra lại WAVES. Đồng tiền này khá đặc biệt. Nó tăng từ 6U lúc đầu lên mức cao nhất là 60U, và cuối cùng giảm xuống mức hiện tại là 8U. Lợi nhuận cuối cùng là 4945, cao hơn nhiều so với lợi nhuận khi giữ tiền xu.

python
symbol = 'WAVESUSDT' df_waves = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
python
df_waves.close.plot(figsize=(15,6),grid=True);

png

python
#TWAVES平衡策略回测 hold_value = 2000 pct = 0.01 e = Exchange([symbol], fee=0.0002, initial_balance=1000) init_price = df_waves.iloc[0].open res_list = [] #用于储存中间结果 e.Buy(symbol,init_price,hold_value/init_price) e.Update({symbol:init_price}) for row in df_waves.itertuples(): buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] while row.low < buy_price: e.Buy(symbol,buy_price,pct*hold_value/buy_price) e.Update({symbol:row.close}) buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] while row.high > sell_price: e.Sell(symbol,sell_price,pct*hold_value/sell_price) e.Update({symbol:row.close}) buy_price = (1-pct)*hold_value/e.account[symbol]['amount'] sell_price = (1+pct)*hold_value/e.account[symbol]['amount'] if int(row.time)%(60*60*1000) == 0: e.Update({symbol:row.close}) res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance]) res_waves = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit']) res_waves.index = pd.to_datetime(res_waves.time,unit='ms') print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 4945.149323437233 178.0
python
df_waves.profit.plot(figsize=(15,6),grid=True);

png

Nhân tiện, hãy kiểm tra lại hiệu suất của chiến lược lưới. Khoảng cách lưới là 0,01 và giá trị lưới là 10. Với mức tăng gần gấp 10 lần, cả WAVES và TRX đều trải qua đợt thoái lui lớn, với WAVES thoái lui 5.000U và TRX thoái lui hơn 3.000U. Nếu vốn ban đầu nhỏ, về cơ bản vị thế sẽ bị thanh lý.

python
#网格策略 pct = 0.01 value = 10*pct/0.01 e = Exchange([symbol], fee=0.0002, initial_balance=1000) init_price = df_waves.iloc[0].open res_list = [] #用于储存中间结果 for row in df_waves.itertuples(): buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount']) while row.low < buy_price: e.Buy(symbol,buy_price,value/buy_price) e.Update({symbol:row.close}) buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) #买单价格,由于是挂单成交,也是最终的撮合价格= while row.high > sell_price: e.Sell(symbol,sell_price,value/sell_price) e.Update({symbol:row.close}) sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount']) if int(row.time)%(60*60*1000) == 0: e.Update({symbol:row.close}) res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance]) res_waves_net = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit']) res_waves_net.index = pd.to_datetime(res_waves_net.time,unit='ms') print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 1678.0516101975015 70.0
python
res_waves_net.profit.plot(figsize=(15,6),grid=True);

png

python
#网格策略 pct = 0.01 value = 10*pct/0.01 e = Exchange([symbol], fee=0.0002, initial_balance=1000) init_price = df_trx.iloc[0].open res_list = [] #用于储存中间结果 for row in df_trx.itertuples(): buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount']) while row.low < buy_price: e.Buy(symbol,buy_price,value/buy_price) e.Update({symbol:row.close}) buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) while row.high > sell_price: e.Sell(symbol,sell_price,value/sell_price) e.Update({symbol:row.close}) sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount']) if int(row.time)%(60*60*1000) == 0: e.Update({symbol:row.close}) res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance]) res_trx_net = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit']) res_trx_net.index = pd.to_datetime(res_trx_net.time,unit='ms') print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 -161.06952570521656 37.0
python
res_trx_net.profit.plot(figsize=(15,6),grid=True);

png

Tóm tắt

Phân tích kiểm tra ngược này sử dụng đường K 5 phút và các biến động ở giữa không được mô phỏng đầy đủ, do đó lợi nhuận thực tế sẽ cao hơn một chút. Nhìn chung, chiến lược cân bằng có rủi ro tương đối nhỏ, không sợ tăng vọt, không cần điều chỉnh thông số, tương đối thuận tiện khi sử dụng và phù hợp với người dùng mới. Chiến lược lưới rất nhạy cảm với việc thiết lập giá ban đầu và đòi hỏi phải có sự phán đoán nhất định về điều kiện thị trường. Về lâu dài, rủi ro bán khống là rất cao. Đợt thị trường giá xuống này đã ổn định ở mức đáy trong một thời gian. Nhiều đồng tiền đã giảm hơn 90% so với mức cao nhất của chúng. Nếu bạn lạc quan về một số đồng tiền, đây là thời điểm tốt để tham gia thị trường. Bạn có thể muốn bắt đầu một chiến lược cân bằng để mua ở mức đáy. Thêm một chút đòn bẩy để hưởng lợi từ sự biến động và tăng giá.
Chiến dịch Binance Thousand Group War này sẽ cung cấp miễn phí Chiến lược cân bằng vĩnh cửu và mọi người đều được chào đón trải nghiệm.

Related Recommendations
Comment
All comments (7)

    使用策略一定比持币不动更优吗?

    4 years ago

    每种策略都是在特定场景下有效,平衡策略是逆趋势策略,持币不动约等于不加仓不补仓杠杆为本金的顺趋势策略

    4 years ago

    怎么加入你们的千团大战?又如何使用你们的这个策略?

    4 years ago

    币安千团大战的策略在哪里呀?

    4 years ago

    美元加息缩表大背景下,加密货币市场还会处于熊市状态一段时间吧,这样的话最近半年内,像TRX、ETH这种是不是继续用网格收益率会高一些呢?

    4 years ago

    本文的缺点是没办法计算资费,长期持有的情况下,资费影响巨大!牛是资费通常为正,也就是说持有多仓会缴费,而且缴很多!而熊市反之。

    4 years ago

    牛逼

    4 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)