資源の読み込みに... 荷物...

バイナンス・フューチャーズ・マルチ通貨・ヘッジ戦略に関する研究 第1部

作者: リン・ハーン優しさ, 作成日:2020-05-09 11:14:50, 更新日:2023-11-04 19:49:01

img

バイナンス・フューチャーズ・マルチ通貨・ヘッジ戦略に関する研究 第1部

ダッシュボードのページ上の検索ボタンをクリックし,次に入力する矢印をクリックします.アップロードした.pynb 後項ファイルを開いて,shift + enter を押して行ごとに実行します.検索環境のユーザーヘルプには基本的なチュートリアルがあります.

img

戦略上の理由

バイナンスでは,多くのアルトコインを現場でリストアップしています.短期変動は不確実ですが,長期間毎日の線を見ると,基本的には90%以上低下しており,一部は最高価格の割数しか持っていないことがわかります.しかし,現場で普遍的なショートセール方法はありません.また,アルトコインに触らないことを除いて特別な推奨はありません.過去2ヶ月間,バイナンス・フューチャーズは20以上の永続契約を開始しました.その多くは主流通貨であり,一部は不明です.これは,これらのアルトコインの組み合わせをショートする手段を提供します.アルトコインとBTCの間の相関係数を有効な分析方法として使用し,二つの戦略を設計することができます.

戦略の原則

最初の戦略は,選択したアルトコインのバスケットを分散的等価で短売りし,同時にリスクと変動を軽減するために,同じ量のポジションBTCをヘッジするために長売りする.価格が変動するにつれて,ショートポジション値を恒定にしてロングポジションに等しく保つために常にポジションを調整する.本質的には,アルトコイン-ビットコイン価格指数を短売りする操作です.

2つ目の戦略は altcoin-bitcoin 価格指数よりも高い価格の通貨をショートにして,指数より低い通貨を待ち望むこと. 偏差が大きいほどポジションが大きい. 同時に,BTC (またはない) でヘッジされていないポジションをヘッジする.

# Libraries to import
import pandas as pd
import requests
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

必要な通貨をスクリーン

現在,BinanceのAPIインターフェースを使用して入手できる通貨は23個 (BTCを除く) です.

#Info = requests.get('https://fapi.binance.com/fapi/v1/exchangeInfo')
#symbols = [symbol_info['baseAsset'] for symbol_info in Info.json()['symbols']]
symbols = ['ETH', 'BCH', 'XRP', 'EOS', 'LTC', 'TRX', 'ETC', 'LINK', 'XLM', 'ADA', 'XMR', 'DASH', 'ZEC', 'XTZ', 'BNB', 'ATOM', 'ONT', 'IOTA', 'BAT', 'VET', 'NEO', 'QTUM', 'IOST']

先に,過去1年のアルトコインとビットコインの価格動向を調べてみましょう. 私はデータを事前にダウンロードし,研究環境で直接引用できるフォーラムに投稿しました.

price_btc = pd.read_csv('https://www.fmz.com/upload/asset/1ef1af8ec28a75a2dcb.csv', index_col = 0)
price_btc.index = pd.to_datetime(price_btc.index,unit='ms') #Index date
price_btc.tail()

結果:

img img

5行 × 23列

まず,これらの通貨の価格を描き,傾向を見ることができます. 数据は正常化する必要があります. 4つの通貨を除いて,他の通貨の価格傾向は基本的に同じであり,下落傾向を示しています.

price_btc_norm = price_btc/price_btc.fillna(method='bfill').iloc[0,]
price_btc_norm.plot(figsize=(16,6),grid = True,legend=False);

img

最近の価格変動をソートすることで,明らかに異なるいくつかのコイン,すなわち LINK,XTZ,BCH,ETHを見つけることができます.それらはしばしば独自のトレンドを実行することができ,それらをショートすることはリスクが高く,戦略から除外する必要があることを説明します.

残りの通貨の相関係数の熱マップを描き,ETCとATOMのトレンドも比較的特殊で排除できる.

price_btc_norm.iloc[-1,].sort_values()[-5:]

結果:

ETH     0.600417
ETC     0.661616
BCH     1.141961
XTZ     2.512195
LINK    2.764495
Name: 2020-03-25 00:00:00, dtype: float64
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
plt.subplots(figsize=(12, 12)) # Set the screen size
sns.heatmap(price_btc[trade_symbols].corr(), annot=True, vmax=1, square=True, cmap="Blues");

img

この研究では,LINK,XTZ,BCH,ETH,ETC,ATOM,BNB,EOS,LTCは,最初の戦略のショートに参加しなかったので,具体的な詳細は自分でバックテストすることができます.

現在のアルトコインインデックスは昨年最低点にあることに注意してください. これは短期的なチャンスではなく,長期的な購入チャンスです.あなたは自分で決めなければなりません.

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # You can set the remaining currencies, which you want to subtract.
1-price_btc_norm[trade_symbols].iloc[-1,].mean()

結果:

0.6714306758250285
price_btc_norm[trade_symbols].mean(axis=1).plot(figsize=(16,6),grid = True,legend=False);

img

バイナンス持続可能性データ

同様に,バイナンス持続可能性に関するデータも収集されています. 直接ノートブックに引用することもできます. 2020年1月28日から3月31日の 1h市場Kラインです.

price_usdt = pd.read_csv('https://www.fmz.com/upload/asset/20227de6c1d10cb9dd1.csv ', index_col = 0)
price_usdt.index = pd.to_datetime(price_usdt.index)
price_usdt.tail()

結果:

img img

まず,標準化データによる全体的な傾向を見てみましょう. 3月の急落で,2月上旬の価格と比較して,価格は一般的に下落し,永久契約のリスクも非常に高いことを示しています. この減少の波は戦略にとっても大きな挑戦のテストです.

price_usdt_norm = price_usdt/price_usdt.fillna(method='bfill').iloc[0,]
price_usdt_norm.plot(figsize=(16,6),grid = True,legend=False);

img

この曲線をショートにするのが戦略原則で 収益は基本的にこの曲線の逆です 曲線をショートする方法は

price_usdt_btc = price_usdt.divide(price_usdt['BTC'],axis=0)
price_usdt_btc_norm = price_usdt_btc/price_usdt_btc.fillna(method='bfill').iloc[0,]
price_usdt_btc_norm[trade_symbols].mean(axis=1).plot(figsize=(16,6),grid = True);
#price_usdt_btc_norm.mean(axis=1).plot(figsize=(16,6),grid = True,legend=False);

img

バックテストエンジン

FMZローカルバックテストはすべての通貨のデータを持っていないため,マルチ通貨バックテストをサポートしていないため,バックテストエンジンを再実装する必要があります.私は新しいバックテストエンジンを書き,それは比較的シンプルですが,基本的に十分です.取引手数料を考慮して,しかし基本的に資本率を無視し,マーージン資本を維持する状況を考慮しませんでした.総資本,占有マーージン,レバレッジは記録されました.この戦略はロングポジションがショートポジションに等しいという属性を持っているため,資本率の影響は重要ではありません.

バックテストでは価格変動状況を考慮しない. 取引手数料のシミュレーションを自分で増やすことができます. Binance メーカーの低取引手数料を考えると,人気のない通貨市場での価格格差差でさえ非常に小さいので,注文をするときに実際の市場で氷山手数料方法を使用することができます. その影響は重要ではありません.

交換オブジェクトを作成する際に,取引される通貨を指定する必要があります. 購入はロングであり,販売はショートです. 永続的な契約制限により,ポジションを開くとき,ロングとショートポジションは自動的に一緒に閉まります. ショートポジションと通貨の数がマイナスである場合,パラメータは以下のとおりです.

  • trade_symbols: 取引される通貨のリスト
  • レバレッジ:レバレッジ,影響率
  • 取引手数料,デフォルト 0.00005
  • initial_balance: 初期資産,USDTの評価
  • ログ: 取引記録を印刷するかどうか
class Exchange:
    
    def __init__(self, trade_symbols, leverage=20, commission=0.00005,  initial_balance=10000, log=False):
        self.initial_balance = initial_balance # Initial asset
        self.commission = commission
        self.leverage = leverage
        self.trade_symbols = trade_symbols
        self.date = ''
        self.log = log
        self.df = pd.DataFrame(columns=['margin','total','leverage','realised_profit','unrealised_profit'])
        self.account = {'USDT':{'realised_profit':0, 'margin':0, 'unrealised_profit':0, 'total':initial_balance, 'leverage':0}}
        for symbol in trade_symbols:
            self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0, 'margin':0, 'unrealised_profit':0}
            
    def Trade(self, symbol, direction, price, amount, msg=''):
        if self.date and self.log:
            print('%-20s%-5s%-5s%-10.8s%-8.6s %s'%(str(self.date), symbol, 'buy' if direction == 1 else 'sell', price, amount, msg))
            
        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.commission # Minus transaction fee
        
        if cover_amount > 0: # close position first
            self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount  # profit
            self.account['USDT']['margin'] -= cover_amount*self.account[symbol]['hold_price']/self.leverage # Free the margin
            
            self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount
            self.account[symbol]['amount'] -= -direction*cover_amount
            self.account[symbol]['margin'] -=  cover_amount*self.account[symbol]['hold_price']/self.leverage
            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['USDT']['margin'] +=  open_amount*price/self.leverage            
            self.account[symbol]['hold_price'] = total_cost/total_amount
            self.account[symbol]['amount'] += direction*open_amount
            self.account[symbol]['margin'] +=  open_amount*price/self.leverage
            
        self.account[symbol]['unrealised_profit'] = (price - self.account[symbol]['hold_price'])*self.account[symbol]['amount']
        self.account[symbol]['price'] = price
        self.account[symbol]['value'] = abs(self.account[symbol]['amount'])*price
        
        return True
    
    def Buy(self, symbol, price, amount, msg=''):
        self.Trade(symbol, 1, price, amount, msg)
        
    def Sell(self, symbol, price, amount, msg=''):
        self.Trade(symbol, -1, price, amount, msg)
        
    def Update(self, date, close_price): # Update assets
        self.date = date
        self.close = close_price
        self.account['USDT']['unrealised_profit'] = 0
        for symbol in self.trade_symbols:
            if np.isnan(close_price[symbol]):
                continue
            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']
            if self.date.hour in [0,8,16]:
                pass
                self.account['USDT']['realised_profit'] += -self.account[symbol]['amount']*close_price[symbol]*0.01/100
        
        self.account['USDT']['total'] = round(self.account['USDT']['realised_profit'] + self.initial_balance + self.account['USDT']['unrealised_profit'],6)
        self.account['USDT']['leverage'] = round(self.account['USDT']['margin']/self.account['USDT']['total'],4)*self.leverage
        self.df.loc[self.date] = [self.account['USDT']['margin'],self.account['USDT']['total'],self.account['USDT']['leverage'],self.account['USDT']['realised_profit'],self.account['USDT']['unrealised_profit']]
# First test the backtest engine
e = Exchange(['BTC','XRP'],initial_balance=10000,commission=0,log=True)

e.Buy('BTC',100, 5)
e.Sell('XRP',10, 50)

e.Sell('BTC',105,e.account['BTC']['amount'])
e.Buy('XRP',9,-e.account['XRP']['amount'])

round(e.account['USDT']['realised_profit'],4)
75.0

戦略のコード

戦略の論理

  • 通貨の価格をチェックしてください. nanでない場合は,あなたは取引することができます.
  • アルトコイン契約の値をチェックします.目標値 trade_valueよりも小さい場合,対応する差はショートセールされ,それ以上の場合,対応する金額はポジションを閉じるために購入されます.
  • すべてのアルトコインのショート値を足し BTCのポジションを調整してそれに対してヘッジします

ショートトレード_バリューポジションはポジションのサイズを決定します.設定ログ = True はトランザクションログを印刷します.

# Need to hedge with BTC
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # Remaining currencies
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 2000
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        if e.account[symbol]['value'] - trade_value  < -20 :
            e.Sell(symbol, price, round((trade_value-e.account[symbol]['value'])/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if e.account[symbol]['value'] - trade_value > 20 :
            e.Buy(symbol, price, round((e.account[symbol]['value']-trade_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        empty_value += e.account[symbol]['value']
    price = row[1]['BTC']
    if e.account['BTC']['value'] - empty_value < -20:
        e.Buy('BTC', price, round((empty_value-e.account['BTC']['value'])/price,6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
    if e.account['BTC']['value'] - empty_value > 20:
        e.Sell('BTC', price, round((e.account['BTC']['value']-empty_value)/price,6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_1 = e

各通貨の最終利益は以下のとおりです.

pd.DataFrame(stragey_1.account).T.apply(lambda x:round(x,3))

img

下の2つのグラフは,純資産曲線と利用されたレバレッジです.

純資産曲線の黄色は,アルトコイン指数をショートにする1倍レバレッジの影響です.戦略は基本的に指数の変動を拡大し,期待に沿っていることが見られます.最終2ヶ月のリターンは60%,最大リトラセインメントは20%で,最大レバレッジは約8倍です.ほとんどの場合,6倍未満です.それでも安全です.最も重要なことは,完全なヘジングにより,戦略は3月12日の沈没でほとんど損していません.

ショートセールで通貨価格が上昇し,契約価値が上昇すると,ポジションは減少し,利益を得るときはポジションが増加します.これは,急激な落下が限られた損失をもたらしても,契約の総価値を一定に保ちます.

しかし,リスクも前述されていました. Altcoinは,自分のトレンドを実行し,底から大きく上昇する可能性が高いです. それはそれをどのように使用するかによって異なります. Altcoinについて楽観的で,それが底に達したと考えれば,この指数を長引して購入する方向で動作することができます. または特定の通貨について楽観的である場合,それらをヘッジすることができます.

(stragey_1.df['total']/stragey_1.initial_balance).plot(figsize=(18,6),grid = True); # Net worth curve
#(2-price_usdt_btc_norm[trade_symbols].mean(axis=1)).plot(figsize=(18,6),grid = True);

img

# Strategy leverage
stragey_1.df['leverage'].plot(figsize=(18,6),grid = True);

img

さらに,USDTに対するアルトコインの価格も下がったため,極端なプランはヘッジされていません. 直接ショートセールですが,変動は非常に大きく,リトラセーションは高いです.

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # Remaining currencies
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 2000
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        if e.account[symbol]['value'] - trade_value  < -20 :
            e.Sell(symbol, price, round((trade_value-e.account[symbol]['value'])/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if e.account[symbol]['value'] - trade_value > 20 :
            pass
            #e.Buy(symbol, price, round((e.account[symbol]['value']-trade_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        empty_value += e.account[symbol]['value']
stragey_1b = e
(stragey_1b.df['total']/stragey_1.initial_balance).plot(figsize=(18,6),grid = True); # Net worth curve
(2-price_usdt_btc_norm[trade_symbols].mean(axis=1)).plot(figsize=(18,6),grid = True);

img

第二の戦略コード

戦略の論理

  • 価格があるか,取引する価格があるか確認します.
  • 通貨価格の指数からの偏差を確認する
  • 偏差の判断に基づいて,そして偏差のサイズに応じて位置を判断
  • BTC でヘッジされていないポジションを計算し,ヘッジする

Trade_value は,オープンポジションのサイズも制御します.また,diff/0.001 の変換因子を修正できます.

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
        aim_value = -trade_value*round(diff/0.01,0)
        now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
        empty_value += now_value
        if aim_value - now_value > 50:
            e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if aim_value - now_value < -50:
            e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
    price = row[1]['BTC']
    aim_value = -empty_value
    now_value = e.account['BTC']['value']*np.sign(e.account['BTC']['amount'])
    if aim_value - now_value > 50:
        e.Buy('BTC', price, round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
    if aim_value - now_value < -50:
        e.Sell('BTC', price, -round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_2 = e

2つ目の戦略のリターンは,最初の戦略よりもはるかに優れている.過去2ヶ月間,100%のリターンを持っているが,依然として20%のリトラセーションを持っている.過去1週間で,小さな市場変動のために,リターンは明らかではない.全体的なレバレッジはあまりありません.この戦略は試してみる価値があります.偏差の程度に応じて,最大で7800USDT以上のポジションが開かれました.

通貨が独立したトレンドを実行した場合,例えば指数に対して数倍上昇した場合,通貨に多くのショートポジションが蓄積され,同じ急激な減少は,最大開口ポジションを制限する長期購入戦略も作ると注意してください.

(stragey_2.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);

img

# Summary results by currency
pd.DataFrame(e.account).T.apply(lambda x:round(x,3))

img

e.df['leverage'].plot(figsize=(18,6),grid = True);

img

負債をカバーしない結果として 差はほとんどないのです なぜなら 長期と短期のポジションは基本的にはバランスが取られているからです

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols,initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
        aim_value = -trade_value*round(diff/0.01,1)
        now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
        empty_value += now_value
        if aim_value - now_value > 20:
            e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if aim_value - now_value < -20:
            e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
stragey_2b = e
(stragey_2b.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
#(stragey_2.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True); # Can be stacked together

img

USDTの価格回帰を参考にすると,その効果ははるかに悪いでしょう.

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH']))+['BTC'] #Remaining currencies
price_usdt_norm_mean = price_usdt_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols,initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols+['BTC']:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        diff = price_usdt_norm.loc[row[0],symbol] - price_usdt_norm_mean[row[0]]
        aim_value = -trade_value*round(diff/0.01,1)
        now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
        empty_value += now_value
        if aim_value - now_value > 20:
            e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if aim_value - now_value < -20:
            e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
stragey_2c = e
(stragey_2c.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
(stragey_2b.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);

img

性能が悪化する

trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) #Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
    e.Update(row[0], row[1])
    empty_value = 0
    for symbol in trade_symbols:
        price = row[1][symbol]
        if np.isnan(price):
            continue
        diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
        aim_value = -trade_value*round(diff/0.01,1)
        now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
        empty_value += now_value
        if aim_value - now_value > 20 and abs(aim_value)<3000:
            e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
        if aim_value - now_value < -20 and abs(aim_value)<3000:
            e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
    price = row[1]['BTC']
    aim_value = -empty_value
    now_value = e.account['BTC']['value']*np.sign(e.account['BTC']['amount'])
    if aim_value - now_value > 20:
        e.Buy('BTC', price, round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
    if aim_value - now_value < -20:
        e.Sell('BTC', price, -round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_2d = e
(stragey_2d.df['total']/stragey_2.initial_balance).plot(figsize=(17,6),grid = True);

img

概要 と リスク

最初の戦略は,アルトコインの全体的な価値がビットコインほど良くないという事実を利用します.あなたがロングビットコインを購入する場合は,この戦略に長い間固執したいかもしれません.ロングとショートポジションの等価性により,あなたは基本的に8hの資金提供率を恐れていません.長期的には,勝利率は比較的高いです.しかし,アルトコインが現在底辺にあり,上昇傾向から抜け出して,この戦略の損失を引き起こす可能性があります.

2つ目の戦略は,アルトコインの価格回帰特性を利用し,インデックスよりも上昇し,戻る可能性が高い.しかし,単一通貨であまりにも多くのポジションを蓄積することがあります.特定の通貨が本当に戻らない場合,大きな損失を引き起こします.

戦略の開始時間と 特定のパラメータが異なるため,この戦略を長期間使用する人の影響は大きくないはずです.

戦略に対する正しい態度のみであり,最終的にはリスクの理解と将来の判断に依存します.


関連性

もっと