एफएमजेड ने एक स्थायी ग्रिड रणनीति जारी की है, जो उपयोगकर्ताओं के लिए काफी लोकप्रिय है, और ट्रेडिंग टीआरएक्स के परिदृश्य ने पिछले एक साल में बहुत अधिक जोखिम नियंत्रण के साथ काफी लाभ प्राप्त किया है।
पहले एक संतुलन रणनीति के सिद्धांतों और ग्रिड रणनीति के साथ तुलना के बारे में लिखा गया था, लेकिन अब यह संदर्भित किया जा सकता हैःhttps://www.fmz.com/digest-topic/5930⇒ संतुलन रणनीति हमेशा एक निश्चित मूल्य अनुपात या मूल्य की स्थिति रखती है, कुछ बेचती है और कुछ खरीदती है, और सरल सेटिंग्स चल सकती हैं। ⇒ मुद्रा की कीमत में बहुत अधिक वृद्धि होने पर भी खाली पड़ने का जोखिम नहीं होता है। ⇒ नकदी संतुलन रणनीति की समस्या कम पूंजी उपयोगिता है, कोई आसान तरीका नहीं है। ⇒ जबकि स्थायी अनुबंध समस्या को हल कर सकते हैं। ⇒ कुल पूंजी 1000 है, 2000 को तय किया जा सकता है, मूल पूंजी से अधिक है, पूंजी उपयोगिता में वृद्धि हुई है। ⇒ एक पैरामीटर अनुपात को समायोजित करना है, यह नियंत्रित करना है कि मुद्रा में कितनी गिरावट आई है।
नए लोगों के लिए, संतुलन की रणनीति की सिफारिश की जाती है, ऑपरेशन सरल है, केवल एक हिस्सेदारी या स्टॉक मूल्य के पैरामीटर को सेट करने की आवश्यकता है, बिना किसी चिंता के चल सकता है, कीमतों में लगातार वृद्धि के बारे में चिंता किए बिना। कुछ अनुभवी लोग ग्रिड रणनीति का चयन कर सकते हैं, खुद को उतार-चढ़ाव की ऊपरी और निचली सीमा निर्धारित कर सकते हैं और प्रत्येक ग्रिड के लिए धन का उपयोग कर सकते हैं, धन की उपयोगिता को बढ़ा सकते हैं, अधिकतम लाभ प्राप्त कर सकते हैं।
अधिक लेन-देन जोड़ों के लिए पुनर्मूल्यांकन की सुविधा के लिए, यह दस्तावेज़ पूर्ण पुनर्मूल्यांकन प्रक्रिया दिखाएगा, उपयोगकर्ता स्वयं विभिन्न पैरामीटर और लेन-देन जोड़ों को विनिमय के रूप में समायोजित कर सकते हैं.
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
## 当前交易对
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']
#获取任意周期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
2021 से अब तक के सभी व्यापारिक जोड़े के बंद होने की कीमतों को डाउनलोड करके, हम कुल बाजार सूचकांक परिवर्तनों को देख सकते हैंः 2021 से 2022 के बीच, यह निस्संदेह एक बैल बाजार है, जिसमें सूचकांक 14 गुना बढ़ गया है, यह कहा जा सकता है कि यह सोने में है, और कई सिक्के सैकड़ों गुना बढ़ गए हैं। हालांकि, 2022 में, छह महीने से चल रहे भालू बाजार को खोलने के लिए, सूचकांक एक बार गिर गया 80%, और कई सिक्के 90% से अधिक वापस ले गए। इस तरह के एक तूफान गिरने से ग्रिड रणनीति का एक बड़ा जोखिम दिखाई देता है।
वर्तमान में सूचकांक 3 के आसपास है, जो 2021 की शुरुआत की तुलना में 200% बढ़ गया है, जो बाजार के विकास को देखते हुए वर्तमान में एक सापेक्ष निचला स्तर होना चाहिए।
सबसे अधिक कीमतों के साथ, मुद्राओं में वर्ष की शुरुआत में 10 गुना से अधिक की वृद्धि हुईः
वर्तमान में 80% से अधिक की गिरावट और उच्चतम बिंदु के साथ सिक्केः
#下载所有交易对的收盘价
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
#指数变化
df_norm = df_all/df_all.fillna(method='bfill').iloc[0] #归一化
df_norm.mean(axis=1).plot(figsize=(15,6),grid=True);
#比年初的最高涨幅
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}
#当前最大回测
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}
सबसे पहले, हम सबसे सरल कोड का उपयोग करते हुए अगले रास्ते में गिरावट की स्थिति का अनुकरण करते हैं, विभिन्न मूल्य के लिए उछाल की कीमतों को देखते हैं। क्योंकि रणनीति हमेशा कई पदों को रखती है, कोई जोखिम नहीं है। प्रारंभिक पूंजी 1000 है, मुद्रा मूल्य 1 है, अनुपात में 0.01 का समायोजन किया गया है। परिणाम इस प्रकार है। यह देखा जा सकता है कि कई पदों को करने का जोखिम भी कम नहीं है, 1.5 गुना लाभ के साथ, 50% की गिरावट का विरोध कर सकता है। वर्तमान सापेक्ष निचले स्तर पर, जोखिम वहन करने योग्य है।
रखरखाव मूल्य | एक बार फिर से धमाका |
---|---|
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 |
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
#还是用原来的回测引擎
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)
सबसे पहले हम TRX के संतुलन रणनीति के प्रदर्शन को वापस देखते हैं, TRX ने इस दौर में भालू बाजार में अधिकतम वापसी की है, इसलिए कुछ विशिष्टताएं हैं। डेटा का चयन 2021 तक 5minK लाइन, प्रारंभिक पूंजी 1000, समायोजन अनुपात 0.01, स्टॉक मूल्य 2000, प्रसंस्करण शुल्क 0.0002।
TRX की शुरुआती कीमत 0.02676U है, इस दौरान इसकी उच्चतम कीमत 0.18U तक पहुंच गई है, जो वर्तमान में 0.08U के आसपास है, और यह बहुत तेजी से उतार-चढ़ाव कर रहा है। यदि आप शुरू में अधिक खाली ग्रिड रणनीति चलाते हैं, तो बमबारी के परिणामों से बचने में मुश्किल होती है। संतुलन रणनीति बड़ी समस्या नहीं है।
अंतिम लाभ 4524U का पुनर्मूल्यांकन किया गया है, जो कि 0.18 पर TRX के लाभ के बहुत करीब है, शुरुआती से दो गुना से कम लेवलिंग और अंततः 0.4 से कम होने की संभावना कम हो रही है, जिसके दौरान होल्डिंग मूल्य में वृद्धि का अवसर हो सकता है। लेकिन 2000U से नीचे का लगातार स्थिर लाभ। यह संतुलन रणनीति का एक नुकसान भी है।
symbol = 'TRXUSDT'
df_trx = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
df_trx.close.plot(figsize=(15,6),grid=True);
#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
#收益
res_trx.profit.plot(figsize=(15,6),grid=True);
#实际占用杠杆
(res_trx.value/(res_trx.profit+1000)).plot(figsize=(15,6),grid=True);
हम WAVES को फिर से देखते हैं, यह सिक्का काफी अनोखा है, जो शुरू में 6U से बढ़कर 60U तक पहुंच गया, और अंत में 8U के आसपास गिर गया। अंत में 4945 की कमाई हुई, जो कि मुद्रा को रखने की कमाई से कहीं अधिक है।
symbol = 'WAVESUSDT'
df_waves = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
df_waves.close.plot(figsize=(15,6),grid=True);
#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
df_waves.profit.plot(figsize=(15,6),grid=True);
संयोग से, ग्रिड रणनीति के प्रदर्शन को वापस मापने के लिए, ग्रिड अंतर 0.01 है, और ग्रिड मूल्य 10 है। लगभग 10 गुना वृद्धि के मामले में, WAVES और TRX दोनों में भारी गिरावट आई है, जिसमें WAVES ने 5000U वापस ले लिया है, TRX ने 3000U से अधिक किया है, और यदि प्रारंभिक पूंजी कम है, तो यह मूल रूप से विस्फोट हो जाएगा।
#网格策略
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
res_waves_net.profit.plot(figsize=(15,6),grid=True);
#网格策略
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
res_trx_net.profit.plot(figsize=(15,6),grid=True);
इस बार के पुनरीक्षण विश्लेषण का उपयोग 5minK लाइन का है, मध्य में उतार-चढ़ाव पूरी तरह से अनुकरण नहीं किया गया है, इसलिए वास्तविक लाभ थोड़ा अधिक होना चाहिए। कुल मिलाकर, संतुलन रणनीति का जोखिम अपेक्षाकृत कम है, उथल-पुथल का डर नहीं है, पैरामीटर को समायोजित करने की आवश्यकता नहीं है, उपयोग करने के लिए अपेक्षाकृत सुविधाजनक है, नए उपयोगकर्ताओं के लिए उपयुक्त है। ग्रिड रणनीति प्रारंभिक मूल्य सेटिंग के लिए बहुत संवेदनशील है, बाजार की स्थिति के बारे में एक निश्चित निर्णय की आवश्यकता है, लंबे समय तक देखने के लिए, खाली करने का जोखिम बहुत अधिक है। वर्तमान में यह दौर भालू बाजार नीचे के सिक्कों में कुछ समय के लिए स्थिर रहा है, कई अभी भी उच्च बिंदुओं से 90% से अधिक गिर गए हैं, यदि आप कुछ सिक्कों के लिए आशावादी हैं, तो यह एक बेहतर समय है। इस मौद्रिक मुद्रा महायुद्ध में स्थायी संतुलन रणनीति का मुफ्त उपयोग किया जाएगा और सभी को इसका अनुभव करने के लिए आमंत्रित किया जाता है।
77924998क्या रणनीति का उपयोग करना निश्चित रूप से मुद्रा के साथ खड़े होने से बेहतर है?
सपनों की कीमत आठ अंकों में हैमैं आपके युद्ध में कैसे शामिल हो सकता हूं और आपकी रणनीति का उपयोग कैसे कर सकता हूं?
18539809925क्या यह सच है कि चीन के साथ युद्ध में शामिल होने के लिए कोई रणनीति नहीं है?
जॉनीडॉलर के बढ़ते ब्याज दरों के मद्देनजर, क्या क्रिप्टोकरेंसी बाजार कुछ समय के लिए भालू बाजार में रहेगा, और क्या पिछले छह महीनों में, TRX या ETH की तरह, ग्रिड रिटर्न में वृद्धि जारी रहेगी?
जैकमाइस लेख का दोष यह है कि धनराशि की गणना करने का कोई तरीका नहीं है, लंबे समय तक रखने के मामले में, धनराशि का प्रभाव बहुत बड़ा है! गाय का धनराशि आमतौर पर सकारात्मक होती है, यानी कई स्टॉक रखने से भुगतान होता है, और बहुत कुछ भुगतान करता है! जबकि भालू बाजार इसके विपरीत है।
जैकमाक्रूर
डेंगूप्रत्येक रणनीति एक विशिष्ट परिदृश्य में प्रभावी होती है, संतुलन रणनीति एक विपरीत प्रवृत्ति रणनीति है, मुद्रा को स्थिर रखने के बराबर है।