2021年暗号通貨のTAQレビュー&10倍増の最もシンプルな見逃した戦略

作者: リン・ハーンニナバダス作成日: 2022-04-07 11:36:32,更新日: 2022-04-13 09:25:23

2021年暗号通貨のTAQレビュー&10倍増の最もシンプルな見逃した戦略

2021年の結論と将来の戦略

2021年は終わりに近づいており,DEFIからGAMEFIまでのホットスポットが次々と出現し,市場全体はまだ牛市状態にあります.今振り返ると,2021年にどのくらい稼いだでしょうか?どんな機会を逃しましたか?成功した投資はありますか?最近,私は過去年の歴史市場 cotizationsを引っ張って,意外とシンプルな利潤戦略を発見しました.しかしそれはマルチ通貨指数です.

プラットフォームにリストされている通貨シンボルはあまりにも多く,多くは未知になり,取引から撤回されることもあります. ここでは,Binance Perpetual Swapにリストされている通貨シンボルを選択します.それらは一般的にテストされ,比較的安全な主流通貨として認識されています.簡単なスクリーニングの後,いくつかのインデックス通貨は削除され,134の通貨が最終的に生き残りました.

[1] において 輸入申請 日時 輸入日,日時 輸入時間 パンダをPDとして輸入する Np として輸入する matplotlib.pyplot を plt としてインポートする %matplotlibインライン

[144]: ##現在の取引対 インフォ = リクエスト.get"https://fapi.binance.com/fapi/v1/exchangeInfo’) シンボル = [s[symbol] for s in Info.json() [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))

過去年の市場

数字は短期間のみ市場に出回っていたので,データ処理をユニタイズする必要があります.データをユニタイズすることで,インデックスを計算できます.

最終インデックス利益は約12倍,つまり2021年1月1日に平均してこれらの134の通貨シンボルを購入すると,何もしない最終利益は12倍であり,90%以上の人々が平均インデックスを上回らないと推定されています.その中でも,最も減少した通貨シンボルは:ICPは93%減,DODOは85%減,LINAは75%減少しました.約百倍増加:SOL,FTM,LUNA,MATIC,SAND,AXS.それらの中でも,AXSは168倍増加し,最大のダークホースです.中位値は3倍増加しました.インデックスは主に公有チェーンやゲームによって動いていると言えます.この期間中に新規にリストされている通貨シンボルを除く生存偏見を防ぐために,また11倍近くの利益を達成しました.それは単にBTCの保有です.

これは絶望的な利益比です.私は一生懸命働き,あらゆる種類の戦略を試しました.私は余分な努力をしていない1年間ほど利益を得ることができませんでした.しかし,比率が増加する数件があまりにも巨大で,インデックスから明らかに逸脱していることに注意してください.これらの通貨シンボルが年の初めに選択されていない場合,利益はミディアンの近くになります.これははるかに顕著ではありません.

[157]: #任意の周期でK線を得る関数 def GetKlines ((symbol=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).時間倍数()))1000 + 860601000 ドル end_time = int ((time.mktime ((datetime.strptime ((end, %Y-%m-%d).時間倍数1000 + 860601000 ドル intervel_map = {m:60]1000,h:60601000,d2460601000 start_time < end_time: start_time < end_time: start_time < end_time: start_time < end_time: start_time < end_time: start_time < end_time > end_time > end_time > end_time > end_time > end_time > end_time > end_time mid_time = min(start_time+1000*int(period[:-1]) についてintervel_map[period[-1],end_time] について url = https://+base+.binance.com/+base+/+v+/klines?シンボル=%s&interval=%s&startTime=%s&endTime=%s&limit=1000%(シンボル,period,start_time,mid_time) res = request.get (URL) res_list = res.json() if type ((res_list) == list と len ((res_list) > 0: start_time = res_list[-1][0] クラインズ += res_list elif type ((res_list) ==リスト: start_time = start_time+1000 スタート_タイム + 1000int(period[:-1])*intervel_map[period[-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),列=シンボル_s) i の範囲 ((len ((symbols_f)): #print ((シンボル_s[i]) symbol_s = symbols_f[i] df_s = GetKlines ((シンボル=シンボル_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 ((方法=bfill) #データを満たす df_norm = df_all/df_all.iloc[0] #ユニティゼーション df_norm.mean ((軸=1).プロット ((図面サイズ=(12,4),グリッド=True); #最終インデックス利益のグラフ アウト[1]:img

[175]: #中位増加 df_norm.median ((軸=1).プロット ((図面サイズ=(12,4),グリッド=True); アウト[1]:img

[168]: #上昇と落ち込みの分類 print ((df_norm.iloc[-1].round ((2).sort_values (().to_dict()) について

[317]: #過去1年の最高価格と比較して現在の価格の最大引き上げ 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 ((symbols_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 ((軸=1).plot ((figsize=(12,4),グリッド=True); 終了[208]:img

[212]: #BTCと比較して (df.mean(axis=1)/df.BTCUSDT).plot ((figsize=(12,4),グリッド=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時間のk線をクロール df_all_s = pd.DataFrame ((index=pd.date_range ((start=2021-1-1, end=2021-12-28, freq=1h),列=シンボル_s) i の範囲 ((len ((symbols_f)): #print ((シンボル_s[i]) symbol_s = symbols_f[i] df_s = GetKlines ((シンボル=シンボル_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 ((軸=1).plot ((figsize=(12,4),グリッド=True); 外出[419]:img

バランスのとれた戦略の業績

バックテストは2021年1月1日にバイナンスパーペチュアル・コントラクトにリストされているすべての通貨シンボルを選択した.Kライン期間は1hであり,パラメータはポジション金額が平均の5%未満で購入を開始し,5%を超えると販売を開始することです.バックテストはすべての通貨シンボルの場合,最終戦略利益は7.7倍です.平均利益13倍よりも著しく悪い.それは私の期待でもあります.結局のところ,"00倍増加した通貨シンボルはあまりにも特別で,バランスのとれた戦略はそれらをすべて売ります.

バックテストで 10つの通貨シンボルを削除し,比較的中等な通貨シンボルをみてもらうと 最終利益は4.8倍になり,平均の3.4倍をはるかに上回ります.

最も上昇した3つの通貨シンボルのみが回転した場合,最終利益は373倍で,平均パフォーマンス160倍をはるかに上回ります.これは,選択された回転した通貨シンボルのトレンドと増加が一貫している傾向がある場合,回転の結果は回転しないものよりもはるかに優れていることを示しています.

[494]: #すべてのシンボルのバックテスト symbols = list ((df.iloc[-1].sort_values (() [:].index) e = 交換 (符号,手数料=0.001,初期_残高=10000) res_list = [] avg_pct = 1/len (シンボル) df[符号].iterrows (df[符号].iterrows (df) ]の行について 価格 = 行[1] 合計 = e.アカウント[USDT][合計] e.価格更新 符号の中の符号については: pct = e.アカウント[シンボル][]/合計 pct < 0.95*avg_pct: e.買って (符号,価格 (符号),平均値)合計/価格[シンボル]) pct > 1.05 となった場合avg_pct: は e.売る (符号,価格 (符号),平均値 (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]: e.アカウント[USDT] 外出[495]:

[496]: #すべてのシンボルのバックテストパフォーマンス (res.total/10000).plot ((figsize=(12,4),グリッド = True) df[シンボル].mean ((軸=1).plot ((figsize=(12,4),グリッド=True); 外出[496]:img

[498]: #大きな増加で符号を減らす symbols = list ((df.iloc[-1].sort_values (() [:-10].index) e = 交換 (符号,手数料=0.001,初期_残高=10000) res_list = [] avg_pct = 1/len (シンボル) df[符号].iterrows (df[符号].iterrows (df) ]の行について 価格 = 行[1] 合計 = e.アカウント[USDT][合計] e.価格更新 符号の中の符号については: pct = e.アカウント[シンボル][]/合計 pct < 0.95*avg_pct: e.買って (符号,価格 (符号),平均値)合計/価格[シンボル]) pct > 1.05 となった場合avg_pct: は e.売る (符号,価格 (符号),平均値 (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]では: e.アカウント[USDT] 出場[501]:

[499]: (res.total/10000).plot ((figsize=(12,4),グリッド = True) df[シンボル].mean ((軸=1).plot ((figsize=(12,4),グリッド=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 (df[符号].iterrows (df) ]の行について 価格 = 行[1] 合計 = e.アカウント[USDT][合計] e.価格更新 符号の中の符号については: pct = e.アカウント[シンボル][]/合計 pct < 0.95*avg_pct: e.買って (符号,価格 (符号),平均値)合計/価格[シンボル]) pct > 1.05 となった場合avg_pct: は e.売る (符号,価格 (符号),平均値 (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]: e.アカウント[USDT] 終了[504]:

[505]: (res.total/10000).plot ((figsize=(12,4),グリッド = True) df[シンボル].mean ((軸=1).plot ((figsize=(12,4),グリッド=True); 外出[505]:img

結論

一般的に2021年はコピー通貨にとって大きな牛市であり,BTCにとって荒れ果てた1年でした.BTCの市場価値は,今年初めの70%から現在40%に低下し,すでに史上最低水準です.したがって,コピー通貨シンボルを購入し,それらを保有する平均利益は,過去1年間でBTCを保有する平均利益よりもはるかに高かった.2022年に向けて,現在市場にはまだ数百倍もの通貨が生まれると考えれば,あなたが保有している通貨シンボルを大胆に多様化し,忍耐強く待つことができます.あなたが特にいくつかの通貨シンボルまたは平均市場について楽観的であれば,あなたは考えずに余剰利益を得るために回転戦略を使用することができます. BTCが極端になると,物事が反対方向に発展すると同意すれば,より良い利益とセキュリティのために底を釣ることができます.


もっと