2018/05/03

pythonでbitcoin取引するときのNOTE

bitmexとかで仮想通貨取り引きbotを作るのが流行ってるみたい.
作り方はググれば出てくるのであまりネットになくて困ったことを書いてくよー
あといろんな指標の実装

独学なので汚い書き方だったり間違えてたりするかもなので勘弁.
あと,変数名でいろいろ察してくれ



・bitflyerが4:00-4:10メンテなのでその時間は停止させる
now = datetime.now()+ dt.timedelta(hours=9)
if(now.hour==3 and now.minute > 55):
 hoge
elif(now.hour==4 and now.minute < 15):
   fuga
else:
   piyo
みたいに

・bitbankは現時点でccxtに含まれていない

・zaifはサーバ弱すぎて現状つらい→アビトラで使うならzaifで注文してエラーが返ってこないならほかの注文の順

・phantomJSはサポート終了してるから動かないJavaScriptがある.
そんな時は以下を参考にcloud9でもヘッドレスのgoogle chromeを動かせる
https://qiita.com/onorioriori/items/4fa271daa3621e8f6fd9

・bitmex(ccxt)でトレイリングストップ(売りはTrail値とamountが負,買いは正)
bitmex.private_post_order({'symbol':'XBTUSD','orderQty':amount,'ordType':'Stop','pegPriceType':'TrailingStopPeg','pegOffsetValue':Trailchi,'execInst':'LastPrice,Close'})

以下いろんな指標
変数名は空気読んでくれ.

・EMAの書き方(pricesは文字列/tは期間/pdはpandas)
def ema(prices,t):
    result = pd.ewma(prices,t)
    return result

・SMAの書き方
def sma(prices,t):
    result = pd.rolling_mean(prices,t)
    return result

・ストキャスティクス
def Stochastics(close,low,high,K,D,SLOWD):
    C=pd.rolling_max(close,K,1)
    LK = pd.rolling_min(low,K)
    HK = pd.rolling_max(high,K)
    ansK = ((C - LK) / (HK - LK))*100
 
    bunshi_D = pd.rolling_mean(C-LK,D)
    bunbo_D = pd.rolling_mean(HK - LK,D)
    ansD = bunshi_D/bunbo_D
 
    ansSlowD = pd.rolling_mean(ansD,SLOWD)

    return ansK,ansD,ansSlowD

・MACD
def MACD(X,Y,Z):
    emaX = np.array(ema(close,X))
    emaY = np.array(ema(close,Y))
    macd = emaX - emaY
    signal = np.array(ema(macd,Z))
    return macd,signal

・RSI 
def RSI(kikan):
    up = close - openp
    down = openp - close
    up[up[:] < 0] = 0
    down[down[:]<0] = 0
    rsi = pd.rolling_mean(up,kikan)/(pd.rolling_mean(up,kikan)+pd.rolling_mean(down,kikan))
    return rsi

・RSIストキャスティクス
def RSIStochastics(K,HI,RSInoNAGASA,StochasticsKikan): 
    rsi = RSI(RSInoNAGASA)
    C= rsi
    LK = pd.rolling_min(rsi,StochasticsKikan)
    HK = pd.rolling_max(rsi,StochasticsKikan)
    ansK = (C - LK) / (HK - LK)
 
    bunshi_D = pd.rolling_mean(C-LK,StochasticsKikan)
    bunbo_D = pd.rolling_mean(HK - LK,StochasticsKikan)
    ansD = bunshi_D/bunbo_D
 
    return ansK,ansD

・ボリンジャーバンド
def BB(prices,window):
    data = pd.DataFrame(prices)
    ma=data.rolling(window=win).mean()
    std=data.rolling(window=win).std()
    band1_upper = np.array((ma + std)values.flatten())
    band1_lower = np.array((ma - std)values.flatten())
    band2_upper = np.array((ma + 2*std)values.flatten())
    band2_lower = np.array((ma - 2*std)values.flatten())
    band3_upper = np.array((ma + 2*std)values.flatten())
    band3_lower = np.array((ma - 2*std)values.flatten())
    return band1_upper,band1_lower,band2_upper,band2_lower,band3_upper,band3_lower

間違ってたらすまんの
それではまた

自動取引やってみたいと思ったら以下からヨロ
https://www.bitmex.com/register/0uJkW1


0 件のコメント:

コメントを投稿