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.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
チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります