ひとつのインジケーターで複数表示!pineスクリプト自前なら何でもできる!後編

8回目では前回の複数MAを利用してストラテジーを組んでいきます。それに伴って、いくつかの構文を覚えていきましょう

まずは復習

前回の複数MAのコードを確認します。

//@version=5
indicator("マルチMA", overlay = true)
sma1 = ta.sma(close,10)
sma2 = ta.sma(close,25)
sma3 = ta.sma(close,75)
plot(sma1,color = color.new(color.red,0))
plot(sma2,color = color.new(color.yellow,0))
plot(sma3,color = color.new(color.lime,0))

こうでしたね。

さて、今はindicatorになっているので、これをstrategyに変えていきます。

今回使う関数等を見ていきましょう

ta.crossover(),ta.cossunder()関数

v5のpineではテクニカル的関数は接頭語としてta.がつきます。ta.crossover()は下から上にクロスすることを意味し、反対にta.crossunder()は上から下にクロスすることを意味します。

言い換えるならゴールデンクロスとデッドクロスを指します。引数は(クロスする側、される側)です。

if~ else~ else if~ 文

条件を指定するのに使います。

ifの後にはスペースを1つ入れて条件を書きます。その条件がbool値でtrueの場合、改行後のコードが実行されます。改行後、コードを書く際はtabを1回押すか、スペースを4つ入れる必要があります。falseの場合には実行されません。

elseはif文でfalseだった時に作用します。さらに、else ifを使うことで、1つ目の条件がfalseのときかつ、新たな条件を設定することが可能です。

ここら辺は慣れないとわかりにくいと思います。コードを書いていくうちに使えるようになってくると思います。

strategy.関数

エントリーに関する関数はstrategy.~~()で定義されます。

strategy.関数

strategy.entry() : エントリーする

strategy.exit() :保有ポジションを決済するための条件を指定する

strategy.close() :成行決済をする

strategy.cancel() :発注を取り消す

様々なものがあります。

実は、これ以外にもstrategy.関数は多数ありますが、今回は発注に関与しそうな代表的なものを提示しています。

strategy.entry()

発注します。引数は(”エントリーID",ロング・ショート,発注量,指値,逆指値,その他)

その他の項目はいくつかあるのですが、プログラム初心者には混乱を招きかねないので割愛。

エントリーに名前を付けて、ロング、またはショートの指定した方向のポジションを持ちます。その際の、発注量や、指値、逆指値の注文も可能です。

strategy.exit()

指定したIDの決済に関する関数。引数は(”決済ID",”エントリーID“,量(%可),利益(pips),目標価格,損切,損切価格,発注条件,その他)

今回も、その他項目には様々な引数がありますが、割愛。

エントリーIDが同じポジションを指定した量(または全部)を決済。その際の条件を損益にしたりすることが出来る。

strategy.close()

成行決済。引数は(”エントリーID",決済条件,コメント,量,その他)

その他は割愛します。エントリーIDを指定して、決済条件になった時に、指定した量(または全部)を決済します。

strategy.cancel()

注文をキャンセルします。引数は(”ID",条件)です。

entry、exitの発注で設定した”ID”を参照して、条件がtrueになったときに、注文を取り消します。

strategyを使ってみよう!

それでは、実際にトレード条件を設定してみましょう。ここでは私がチャートに入れている、SMA25-75-200を利用して、SMAの並びが75MA>200MAの時に、25MAが75MAをゴールデンクロス、75MA<200MAの時に、25MAが75MAをデッドクロスしたらエントリーするような条件にしてみます。

また、目標利益、損失も設定で変更できるようにしてみます。

// © FP嶋

//@version=5
strategy("マルチMA", overlay=true, margin_long=100, margin_short=100)
len1 = input.int(25,"sma1")
len2 = input.int(75,"sma2")
len3 = input.int(200,"sma3")
pro = input.int(200,"profit",minval = 1)
sl = input.int(200,"stop loss",minval =1)
sma1 = ta.sma(close,len1)
sma2 = ta.sma(close,len2)
sma3 = ta.sma(close,len3)
POL = sma2 > sma3
POS = sma2 < sma3

plot(sma1,color = color.new(color.red,0))
plot(sma2,color = color.new(color.yellow,0))
plot(sma3,color = color.new(color.lime,0))

longCondition = ta.crossover(sma1, sma2)
if POL
    if (longCondition)
        strategy.entry("My Long Entry Id", strategy.long)
        strategy.exit("exit Long","My Long Entry Id",profit = pro, loss = sl )
shortCondition = ta.crossunder(sma1, sma2)
if POS
    if (shortCondition)
        strategy.entry("My Short Entry Id", strategy.short)
        strategy.exit("exit Short","My Short Entry Id",profit = pro, loss = sl )

少し長くなっています。pro、slで損益の値を外部で入力可能にしています。

また、POL,POS(パーフェクトオーダー、ロングとショートのつもり)という条件を付けました。この条件がtrueのときのゴールデンクロス、またはデッドクロスが発注条件です。

発注の条件は変数として定義してあります。それぞれ、longCondition、shortConditionとなっています。こちらは空のストラテジーに入っているものを流用しました。

エントリー条件は、sma1がsma2をゴールデンクロス、またはデッドクロスした時です。(ta.crossover(sma1,sma2)・ta.crossunder(sma1,sma2))

エントリーは条件を満たした時に成行で、決済は、反対方向のエントリーが行われるか、profit= またはloss=が条件を満たした時に行われます。それぞれ、pro、slで定義しています。

この値は0.1pip単位で設定されますが、int(整数)扱いなので、20pipsは200と書く必要があります。

さて、チャートに追加してみましょう。

MAと損益の値を設定することが可能です。とりあえずこのままドル円5分足の結果を見てみます。

なんとこのままでも問題なく黒字になっちゃいました。PF1.244とそんなに悪くありません。ただ、勝率は51.81なので、スプレッド次第ではそう簡単には勝てなさそうです。

外部で設定をいじることが出来ますので、SMAの期間を変えてみたり、利益、損失のpipsを変えてみてください。あなたの良くトレードする通貨ペアでもきっと良いストラテジーが出来ると思います。ただ、それはあくまでも過去のデータでの話ですので、将来的に必ず利益が保証されるわけではありません。

しかしながら、過去で利益が出るのであれば、将来も利益を生む可能性は高いと言えるでしょう。

今回はこのへんで!

おすすめFXアイテム

過去検証や分析はMT4かFT4、Trading viewがおすすめです。

無料が良い人はMT4で、MT4を使わせてくれる口座を使用すると良いです。おすすめはFXTF

ガチで過去検証をやりたい人はFT4、

チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります

Twitterでフォローしよう

おすすめの記事