仮想通貨と自動売買bot(python)

プログラミング初心者です。いろんなアドバイスもらいたいのでぜひコメントください。

テクノファンダさんの「クロコダイル」のpineスクリプトを翻訳

pineが書けないので自分用に翻訳として書きます。

が、間違ってたら教えてくれたらうれしいです。

up = rma(max(change(hlc3), 0), 6)
down = rma(-min(change(hlc3), 0), 6)
hlc3  #(高値+安値+終値)/3  平均値
 
change(hlc3) 現在の足の平均値と前回の足の平均値の差
max( x,y )  # xとyで大きい方を返す max(平均上り幅,0)
rma(x,y) # upの場合 過去(6期間の)平均値上がり幅を指数移動平均を使って出す
(※自分で作る場合6期間前の値上がり幅を求めるために7期間前の足まで取得する必要があるかも ここらへんいまいちわからない・・・)
  
udCal = up_down_calculate

udCal(up, down) =>

      if down == 0

          100

n期間上がりっぱなしだったら100%

  if up == 0

    0
n期間下がりっぱなしだったら0%
else
 100 - (100 / (1 + up / down))  
 
例)過去6期間の平均値上がり幅60 平均値下がり幅30 
 =100-(100/(1+60/30))
=100-33=67  
67%

 

fastrsi = udCal(up, down) #平均値を使ったRSI完成

エントリー条件

Buy_IN = close<open and abs(close - open) > ema(abs(close - open), 5)*1.1 and sma(fastrsi,4)<20

 

 

close<open

①(最新の確定足の)終値始値より低い

abs(close - open) > ema(abs(close - open), 5)*1.1

②(最新の確定足の)値幅が期間5の指数移動平均値幅(高値-安値)の1.1倍より大きい

sma(fastrsi,4)<20

③直近4足分のRSIの平均値が20%より低い

(※直近の確定足から3つ前の足まで)

(※3つ前のRSIを求めるには過去10足必要)

 

決済条件

( positionsize>0 and fastRSI>20 ) or ( positionsize<0 and fastRSI<80 )
position_size は買いを持っていたら正の値に、売りを持っていたら負の値になる

上のコードだと ←が買いポジションのとき →が売りポジションのときです。

条件は「RSIが20より上がったら(買いポジションを)売る。

    RSIが80より下がったら(売りポジションを)買い戻す。」

 

要約すると

「直近4本の「ローソク足の平均値を使ったRSI」の平均が20以下で買い(80以上で売り)、20以上(80以下)になったら決済する」手法のようです。

 

独自のRSIの出し方と直近のRSIの平均を使うというアプローチが参考になります。

 

自分で再現したかったので、ひとによってはコードを見ればわかることだと思いますがpineを調べながら文字に起こしてみました。

初歩的なことかもしれませんが参考になれば幸いです、

また間違いとかあったら是非コメントで教えてください

 

追記

pythonで実装してみたんですが、なんかものすごく結果が悪かったです 

どこかしら間違ってると思われます。。。

 

追記

RSI正常に実装するのに3日掛かりました。

 

あと記事内で修正移動平均と解釈してましたが正しくはRSIを計算するときに使う指数平滑平均をpineだとrmaと表記してるだけだと思います(記事修正済み) よってEMAで自分は計算しました。

 

 再々追記

RSIの計算に使う指数移動平均のα=1/期間です。

詳しくは下の記事で書いてます。

bitcoinbot.hatenablog.com