2021 क्रिप्टोकरेंसी टैक समीक्षा और 10 गुना वृद्धि की सबसे सरल चूक रणनीति

लेखक:निनाबादास, बनाया गयाः 2022-04-07 11:36:32, अद्यतन किया गयाः 2022-04-13 09:25:23

2021 क्रिप्टोकरेंसी टैक समीक्षा और 10 गुना वृद्धि की सबसे सरल चूक रणनीति

2021 का निष्कर्ष और भविष्य की रणनीति.ipynb

2021 खत्म हो रहा है, और डीईएफआई से गेमफी तक एक के बाद एक हॉट स्पॉट उभर रहे हैं, और समग्र बाजार अभी भी एक बुल मार्केट में है। अब पीछे मुड़कर देखें, आपने 2021 में कितना कमाया है? क्या अवसर चूक गया है? क्या कोई सफल निवेश हैं? हाल ही में, मैंने पिछले वर्ष के इतिहास बाजार उद्धरणों को खींचा और एक अप्रत्याशित रूप से सरल मुनाफे की रणनीति पाई, लेकिन यह एक बहु-मुद्रा सूचकांक है।

प्लेटफार्मों में सूचीबद्ध बहुत सारे मुद्रा प्रतीक हैं, और कई अज्ञात होने के लिए नियत हैं और यहां तक कि व्यापार से भी वापस ले लिए जा सकते हैं। यहां हम उन मुद्रा प्रतीकों का चयन करते हैं जो बिनेंस परपीट्यूअल स्वैप पर सूचीबद्ध हैं। वे आम तौर पर परीक्षण किए गए हैं और मुख्यधारा की मुद्राओं के रूप में मान्यता प्राप्त हैं, जो अपेक्षाकृत सुरक्षित हैं। एक साधारण स्क्रीनिंग के बाद, कुछ सूचकांक मुद्राओं को हटा दिया गया था, और 134 मुद्राएं अंततः जीवित रहीं।

[1] मेंः आयात अनुरोध दिनांक-समय से आयात की तारीख, दिनांक-समय आयात का समय पीडी के रूप में आयात पांडा एनपी के रूप में आयात करें matplotlib.pyplot को plt के रूप में आयात करें % matplotlib इनलाइन

[144] मेंः ##वर्तमान व्यापारिक जोड़ी जानकारी = अनुरोध. प्राप्त करें"https://fapi.binance.com/fapi/v1/exchangeInfo’) symbols = [s[symbol] Info.json में s के लिए (()) [symbols]]

[154] मेंः symbols_f = list(set(filter(lambda x: x[-4:] == USDT, [s.split(_) [0] प्रतीकों में s के लिए]))- सेट (([1000SHIBUSDT,1000XECUSDT,BTCDOMUSDT,DEFIUSDT,BTCSTUSDT])) + [SHIBUSDT,XECUSDT] print ((symbols_f)

[155] मेंः print(len(symbols_f))

पिछले वर्ष का बाजार

फिर, हम पिछले वर्ष में अपने दैनिक बंद कीमतों मिलता है, और हम नोटिस है कि कुछ मुद्रा प्रतीक केवल एक छोटी अवधि के लिए बाजार पर थे, तो डेटा की जरूरत है unitization प्रसंस्करण. डेटा unitizing द्वारा, सूचकांक की गणना की जा सकती है.

अंतिम सूचकांक लाभ लगभग 12 गुना है, अर्थात, यदि आप 1 जनवरी, 2021 को औसतन इन 134 मुद्रा प्रतीकों को खरीदते हैं, तो कुछ भी नहीं करने का अंतिम लाभ 12 गुना है, और यह अनुमान लगाया जाता है कि 90% से अधिक लोग औसत सूचकांक से बेहतर प्रदर्शन नहीं करते हैं। उनमें से, सबसे बड़ी गिरावट वाले मुद्रा प्रतीकः आईसीपी 93%, डोडो 85% गिर गया, और लिना 75% गिर गया। लगभग सौ गुना की वृद्धिः सोल, एफटीएम, लुना, मैटिक, सैंड, एक्सएस। उनमें से, एक्सएस में 168 गुना की वृद्धि हुई है और सबसे बड़ा डार्क हॉर्स है। मध्यवर्ती 3 गुना बढ़ गया है। यह कहा जा सकता है कि सूचकांक मुख्य रूप से सार्वजनिक श्रृंखलाओं और खेलों द्वारा संचालित है। अवधि के दौरान नए सूचीबद्ध मुद्रा प्रतीकों को छोड़कर, अस्तित्व पूर्वाग्रह को रोकने के लिए, इसने लगभग 11 गुना लाभ भी हासिल किया। यह बस बीटीसी का 7 गुना है।

यह एक निराशाजनक लाभ अनुपात है। मैंने कड़ी मेहनत की है और सभी प्रकार की रणनीतियों की कोशिश की है, और मैंने एक वर्ष के रूप में उतना लाभ नहीं कमाया है जब मैंने कोई अतिरिक्त प्रयास नहीं किया था। हालांकि, यह ध्यान दिया जाना चाहिए कि अनुपात में कई वृद्धि बहुत बड़ी है, और स्पष्ट रूप से सूचकांक से विचलित होती है। यदि इन मुद्रा प्रतीकों को वर्ष की शुरुआत में चयनित नहीं किया जाता है, तो लाभ मध्य के करीब होगा, जो बहुत कम प्रमुख है।

[157] मेंः किसी भी अवधि में के-लाइन प्राप्त करने के लिए #कार्य def GetKlines ((प्रतीक=BTCUSDT,start=2020-8-10,end=2021-8-10,period=1h,base=fapi,v = v1): क्लाईन्स = [] start_time = int(time.mktime(datetime.strptime(start, %Y-%m-%d).timetuple()))1000 + 860601000 end_time = int(time.mktime(datetime.strptime(end, %Y-%m-%d).timetuple()))1000 + 860601000 intervel_map = {m:601000,h:60601000,d:2460601000} जबकि start_time < end_time: mid_time = min(start_time+1000*int(period[:-1])intervel_map[अवधि[-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) res = अनुरोध.get (url) res_list = res.json() यदि type ((res_list) == list और len ((res_list) > 0: start_time = res_list[-1][0] क्लाईन्स += res_list elif type ((res_list) == सूचीः start_time = start_time+1000int(अवधि[:-1])*अंतराल_मैप[अवधि[-1]] अन्य: विराम

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')
profit df

[164] मेंः df_all_s = pd.DataFrame(index=pd.date_range(start=2021-1-1, end=2021-12-28, freq=1d), स्तंभ=symbols_s) श्रेणी में i के लिए ((len ((प्रतीक_f)): #print ((प्रतीक_s[i]) symbol_s = symbols_f[i] df_s = GetKlines ((symbol=symbol_s,start=2021-1-1,end=2021-12-28,period=1d,base=api,v=v3) df_all_s[symbol_s] = df_s[~df_s.index.duplicated(keep=first) ]close

[165] मेंः df_all_s.tail() #डेटा संरचना बाहर[1]:

[174] मेंः df_all = df_all_s.fillna(method=bfill) #पूरा डेटा df_norm = df_all/df_all.iloc[0] #unitization df_norm.mean ((अक्ष=1).plot(figsize=(12,4),grid=True); #अंतिम सूचकांक लाभ का चार्ट बाहर[1]:img

[175] मेंः #मध्यम वृद्धि df_norm.median ((अक्ष=1).plot(figsize=(12,4),grid=True); बाहर[1]:img

[168] मेंः #उदय और पतन क्रमबद्ध करना print ((df_norm.iloc[-1].round(2).sort_values().to_dict())

[317] मेंः पिछले वर्ष के उच्चतम मूल्य की तुलना में वर्तमान मूल्य का अधिकतम निकासी print (((1-df_norm.iloc[-1]/df_norm.max()).round(2).sort_values().to_dict())

[177] मेंः df_all_f = pd.DataFrame(index=pd.date_range(start=2021-1-1, end=2021-12-28, freq=1d), स्तंभ=प्रतीक_s) श्रेणी में i के लिए ((len ((प्रतीक_f)): #print ((प्रतीक_s[i]) symbol_f = symbols_f[i] df_f = GetKlines(symbol=symbol_f,start=2021-1-1,end=2021-12-28,period=1d,base=fapi,v=v1) df_all_f[symbol_f] = df_f[~df_f.index.duplicated(keep=first) ]close

[208] मेंः #नए प्रतीकों को शामिल नहीं df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ] df = df.fillna ((विधि=bfill) df = df/df.iloc[0] df.mean ((axis=1).plot ((figsize=(12,4),grid=True); बाहर[208]:img

[212] मेंः #बीटीसी की तुलना में (df.mean(axis=1)/df.BTCUSDT).plot(figsize=(12,4),grid=True); बाहर[1]:img

[213] मेंः # पुराने बैकटेस्ट इंजन का उपयोग करें वर्ग विनिमयः

def __init__(self, trade_symbols, fee=0.0004, initial_balance=10000):
    self.initial_balance = initial_balance #initial asset  
    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 #deduct service fee
    self.account['USDT']['fee'] += price*amount*self.fee
    self.account[symbol]['fee'] += price*amount*self.fee

    if cover_amount > 0: #close first 
        self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount  #profit
        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): #update asset
    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)

[418] मेंः #अधिक सटीक बैकटेस्ट के लिए, 1 घंटे के-लाइन क्रॉल करें df_all_s = pd.DataFrame(index=pd.date_range(start=2021-1-1, end=2021-12-28, freq=1h), स्तंभ=प्रतीक_s) श्रेणी में i के लिए ((len(प्रतीक_f)): #print ((प्रतीक_s[i]) symbol_s = symbols_f[i] df_s = GetKlines(symbol=symbol_s,start=2021-1-1,end=2021-12-28,period=1h,base=api,v=v3) df_all_s[symbol_s] = df_s[~df_s.index.duplicated(keep=first) ]close

[419] मेंः df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ] df = df.fillna ((विधि=bfill) df = df/df.iloc[0] df.mean ((axis=1).plot ((figsize=(12,4),grid=True); बाहर[419]:img

संतुलित रणनीति प्रदर्शन

बैकटेस्ट ने 1 जनवरी, 2021 को बिनेंस परपेचुअल कॉन्ट्रैक्ट्स पर सूचीबद्ध सभी मुद्रा प्रतीकों का चयन किया। K-लाइन अवधि 1h है, और पैरामीटर यह है कि जब स्थिति राशि औसत का 5% से कम हो और 5% से अधिक होने पर बेचना शुरू करें। जब बैकटेस्ट सभी मुद्रा प्रतीकों का है, तो अंतिम रणनीति लाभ 7.7 गुना है। 13 गुना के औसत लाभ से काफी खराब है। यह भी मेरी उम्मीद में है। आखिरकार, जो मुद्रा प्रतीकों में सौ गुना वृद्धि हुई है, वे बहुत विशेष हैं, और संतुलित रणनीति उन्हें सभी बेच देगी।

यदि बैकटेस्ट सबसे अधिक वृद्धि वाले 10 मुद्रा प्रतीकों को हटाने का विकल्प चुनता है, और केवल अपेक्षाकृत औसत मुद्रा प्रतीकों की जांच करता है, तो अंतिम लाभ 4.8 गुना है, जो 3.4 गुना के औसत प्रदर्शन से बहुत अधिक है।

यदि केवल उच्चतम वृद्धि वाले 3 मुद्रा प्रतीकों को घुमाया जाता है, तो अंतिम लाभ 373 गुना है, जो 160 गुना के औसत प्रदर्शन से बहुत अधिक है। यह दर्शाता है कि यदि चयनित घुमाए गए मुद्रा प्रतीक का रुझान और वृद्धि सुसंगत होती है, तो घूर्णन का परिणाम गैर-घुमाव से बहुत बेहतर होगा।

[494] मेंः सभी प्रतीकों के #backtest symbols = list(df.iloc[-1].sort_values() [:].index) e = विनिमय ((प्रतीक, शुल्क=0.001, प्रारंभिक_शेष=10000) res_list = [] avg_pct = 1/len (प्रतीक) df[प्रतीक].iterrows में पंक्ति के लिएः कीमतें = पंक्ति[1] कुल = ई.खाता[USDT][कुल] e.अद्यतन (मूल्य) प्रतीकों में प्रतीक के लिएः pct = e.account[symbol][value]/कुल यदि pct < 0.95*avg_pct: e.Buy ((प्रतीक,मूल्य[प्रतीक],(avg_pct-pct)कुल/मूल्य[प्रतीक]) यदि pct > 1.05avg_pct: e.Sell ((प्रतीक,मूल्य[प्रतीक],(pct-avg_pct) *कुल/मूल्य[प्रतीक]) res_list.append (([e.account[symbol][value] प्रतीक में प्रतीक के लिए] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, columns=symbols+[total],index = df.index)

[495] मेंः ई.खाता[USDT] बाहर[1]:

[496] मेंः #बैकटेस्ट सभी प्रतीकों का प्रदर्शन (res.total/10000).plot(figsize=(12,4), ग्रिड = सच); df[प्रतीक].mean(axis=1).plot(figsize=(12,4),grid=True); बाहर[1]:img

[498] मेंः #अत्यधिक वृद्धि के साथ प्रतीकों को कम करें symbols = list(df.iloc[-1].sort_values()[:-10].index) e = विनिमय ((प्रतीक, शुल्क=0.001, प्रारंभिक_शेष=10000) res_list = [] avg_pct = 1/len (प्रतीक) df[प्रतीक].iterrows में पंक्ति के लिएः कीमतें = पंक्ति[1] कुल = ई.खाता[USDT][कुल] e.अद्यतन (मूल्य) प्रतीकों में प्रतीक के लिएः pct = e.account[symbol][value]/कुल यदि pct < 0.95*avg_pct: e.Buy ((प्रतीक,मूल्य[प्रतीक],(avg_pct-pct)कुल/मूल्य[प्रतीक]) यदि pct > 1.05avg_pct: e.Sell ((प्रतीक,मूल्य[प्रतीक],(pct-avg_pct) *कुल/मूल्य[प्रतीक]) res_list.append (([e.account[symbol][value] प्रतीक में प्रतीक के लिए] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, columns=symbols+[total],index = df.index)

[501] मेंः ई.खाता[USDT] बाहर[501]:

[499 में]: (res.total/10000).plot(figsize=(12,4), ग्रिड = सच); df[प्रतीक].mean(axis=1).plot(figsize=(12,4),grid=True); बाहर [499]:img

[503] मेंः #केवल उच्चतम वृद्धि के साथ प्रतीकों का परीक्षण symbols = list(df.iloc[-1].sort_values()[-3:].index) e = विनिमय ((प्रतीक, शुल्क=0.001, प्रारंभिक_शेष=10000) res_list = [] avg_pct = 1/len (प्रतीक) df[प्रतीक].iterrows में पंक्ति के लिएः कीमतें = पंक्ति[1] कुल = ई.खाता[USDT][कुल] e.अद्यतन (मूल्य) प्रतीकों में प्रतीक के लिएः pct = e.account[symbol][value]/कुल यदि pct < 0.95*avg_pct: e.Buy ((प्रतीक,मूल्य[प्रतीक],(avg_pct-pct)कुल/मूल्य[प्रतीक]) यदि pct > 1.05avg_pct: e.Sell ((प्रतीक,मूल्य[प्रतीक],(pct-avg_pct) *कुल/मूल्य[प्रतीक]) res_list.append (([e.account[symbol][value] प्रतीक में प्रतीक के लिए] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, columns=symbols+[total],index = df.index)

[504] मेंः ई.खाता[USDT] बाहर[504]:

[505] मेंः (res.total/10000).plot(figsize=(12,4), ग्रिड = सच); df[प्रतीक].mean(axis=1).plot(figsize=(12,4),grid=True); बाहर[505]:img

निष्कर्ष

सामान्य तौर पर, 2021 कॉपी करेंसी के लिए एक बड़ा बुल मार्केट और बीटीसी के लिए एक सुनसान वर्ष था। बीटीसी का बाजार मूल्य वर्ष की शुरुआत में 70% से गिरकर 40% हो गया है, जो पहले से ही इतिहास में सबसे कम स्तर है। इसलिए, कॉपी करेंसी के प्रतीकों को खरीदने और उन्हें रखने का औसत लाभ पिछले वर्ष बीटीसी रखने की तुलना में बहुत अधिक था। 2022 की ओर देखते हुए, यदि आप सोचते हैं कि भविष्य में वर्तमान बाजार में अभी भी कई सौ गुना मुद्राएं पैदा हुई हैं, तो आप साहसपूर्वक अपने द्वारा आयोजित किए जा रहे मुद्रा प्रतीकों को विविधता दे सकते हैं और धैर्यपूर्वक प्रतीक्षा कर सकते हैं। यदि आप कुछ मुद्रा प्रतीकों या औसत बाजार के बारे में विशेष रूप से आशावादी हैं, तो आप बिना सोचे-समझे अतिरिक्त लाभ प्राप्त करने के लिए रोटेशन रणनीति का उपयोग कर सकते हैं। यदि आप सहमत हैं कि जब वे चरम हो जाते हैं तो चीजें विपरीत दिशा में विकसित होंगी, तो आप बेहतर मुनाफे और सुरक्षा के लिए बीटीसी के नीचे मछली पकड़ सकते हैं।


अधिक