テクノファンダさんの「クロコダイル」のpineスクリプトを翻訳
pineが書けないので自分用に翻訳として書きます。
が、間違ってたら教えてくれたらうれしいです。
udCal(up, down) =>
if down == 0
100
n期間上がりっぱなしだったら100%
if up == 0
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/期間です。
詳しくは下の記事で書いてます。