Pine講座㊽ バックテスト|[STRATEGY][RS]MicuRobert EMA cross V2 の解説・LazyBearさんの反応の早いMAのクロスによるエントリー
・トレイリングストップ
上記を組み合わせたストラテジーですね。
トレンドが多くてノイズが少ない銘柄&足種で有効だと思います。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
strategy(title=' MicuRobert EMA cross V2 の解説', overlay=true, pyramiding=0, initial_capital=100000)
//
// 設定
////
// セッションタイムを区切るかどうか
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
// トレーリングストップを使うか
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
// セッションの時間を指定
// 設定を元にセッションの判断と背景色の指定
trade_session = input(title='Trade Session:', type=string, defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
// 取引量の指定
trade_size = input(title='Trade Size:', type=float, defval=10000.00)
// 利確幅と損切り幅
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10)
// 平均線の計算値
ma_length00 = input(title='EMA length:', type=integer, defval=5)
ma_length01 = input(title='DEMA length:', type=integer, defval=34)
// 計算の元とする価格
price = input(title='Price source:', type=source, defval=open)
//
// ストラテジーに必要なデータの算出と記録、描画まで
////
// LazyBearさんによる反応が早い移動平均線の計算式
// ||--- NO LAG EMA, Credit LazyBear: ---||
f_LB_zlema(_src, _length)=>
_ema1=ema(_src, _length)
_ema2=ema(_ema1, _length)
_d=_ema1-_ema2
_zlema=_ema1+_d
// ||-------------------------------------||
// 平均線の算出と描画
ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)
// エントリーしたかどうかの判別
isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0
// 新たなエントリー → 価格を記録 → ポジションがあるときだけチャートに描画
buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
// 新たなエントリー → 高値・安値を記録 → ポジションがあるときだけ描画
// トレーリングストップに使う
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
// トレーリングストップの価格を算出 → ポジションがあるときだけ描画
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)
//
// トレーディング
////
// エントリーの条件1:移動平均線のGC
buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
// エントリーの条件2:価格と移動平均線のGC
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
// ①か②を満たしたところでエントリーとする
buy_entry = buy_cond1 or buy_cond0
// トレーリングストップがONの場合:安値がストップを下回ったところ、もしくは利確幅を超えたら決済
// OFFの場合:固定のストップを下回るか、利確幅を超えたら決済
buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or
// 売りは上記の逆
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or
// すべて成行注文
strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)
=====
テクニカル分析以外
Pine講座㊼ バックテスト|20 years old Turtles strategy still work!! の解説trm0さんによるストラテジーです。
20年前のタートルズのストラテジーが今でも通用する!
というインジケーター名ですね。
バージョン2のコードなので、随分と古いようです。
今ならもっと違う書き方ができそうな気がします。
タートルズはドンチャンチャネルを複数組み合わせていました。
タートルズの手法は、
・もみあいが少ない
・トレンドが大きい
このあたりがクリアできる銘柄でないと
トータル利益を実現するのが難しいですね。
単一銘柄では難しいですが、
流動性がある20銘柄くらいでの分散投資を
長期で回すとうまくいくイメージを持っています。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
//coded by tmr0
//original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007) CURTIS FAITH
strategy("20 years old Turtles strategy by tmr0 の解説", shorttitle = "Turtles", overlay=true, pyramiding=5, default_qty_type= strategy.cash, default_qty_value = 1000)
//計算用の数値を設定
//早いエントリーの基準
enter_fast = input(20, minval=1)
//早いエントリーの決済
exit_fast = input(10, minval=1)
//遅いエントリーの基準
enter_slow = input(55, minval=1)
//遅いエントリーの決済
exit_slow = input(20, minval=1)
//計算
fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)
slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)
//エントリーと決済の判断
enterL1 = high > fastL[1]
exitL1 = low <= fastLC[1]
enterS1 = low < fastS[1]
exitS1 = high >= fastSC[1]
enterL2 = high > slowL[1]
exitL2 = low <= slowLC[1]
enterS2 = low < slowS[1]
exitS2 = high >= slowSC[1]
strategy.entry("fast L", strategy.long, when = enterL1)
strategy.entry("fast S", strategy.short, when = enterS1)
strategy.close("fast L", when = exitL1)
strategy.close("fast S", when = exitS1)
strategy.entry("slow L", strategy.long, when = enterL2)
strategy.entry("slow S", strategy.short, when = enterS2)
strategy.close("slow L", when = exitL2)
strategy.close("slow S", when = exitS2)
//確認用で描画
plot( fastL )
plot( fastS )
plot( fastLC )
plot( fastSC )
plot( slowL ,color=red )
plot( slowLC ,color=red )
=====
Pine講座㊻ バックテスト|GetTrendStrategy(win% 88、RR 4)今日からユーザーが作成したストラテジーを
解説していきたいと思います。
今回は、GetTrendStrategy。
ストラテジーの中では珍しく5342いいねをつけています。
試してみたところ、
勝率:88%
RR:4
と信じられないくらい
優秀でビックリしましたが、
コードを見てみると、
Pineスクリプトの抜け穴を利用しただけのストラテジーでした。
残念。
=====
//@version=2
strategy("GetTrendStrategy の解説", overlay=true)
//securityで取得する時間軸
tim=input('160')
//security関数で160分足のopen/closeを取得
out1 = security(tickerid, tim, open)
out2 = security(tickerid, tim, close)
//確認用で描画
plot(out1,color=red)
plot(out2,color=green)
//160分足が陰線 → 陽線で買いエントリー
longCondition = crossover(security(tickerid, tim, close),security(tickerid, tim, open))
if (longCondition)
strategy.entry("long", strategy.long)
//陽線 → 陰線で売り
shortCondition = crossunder(security(tickerid, tim, close),security(tickerid, tim, open))
if (shortCondition)
strategy.entry("short", strategy.short)
=====
このストラテジーは、
security関数で答えがわかってる状態で売買をしています。
勝てて当然ですね。
むしろ、勝率が100%でないことが不思議です。
Pine講座㊺ バックテスト|Consecutive Up/Down Strategy の解説連続陽線・連続陰線で途転売買していくストラテジーです。
これで、内蔵のストラテジーはすべて完了です!
次回以降は、サードパーティのものを確認して、
Pine講座もそろそろお終いですね。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "Consecutive Up/Down Strategy の解説", overlay=false )
//連続の数を設定
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
price = close
//連続上昇をカウント
ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0
//連続下降をカウント
dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0
//連続上昇が設定値以上のとき
if (ups >= consecutiveBarsUp)
//買いエントリー
strategy.entry("ConsUpLE", strategy.long, comment="ConsUpLE")
//連続下降が設定値以上のとき
if (dns >= consecutiveBarsDown)
//売りエントリー
strategy.entry("ConsDnSE", strategy.short, comment="ConsDnSE")
plot( ups ,color=color.red )
plot( dns ,color=color.blue )
=====
Pine講座㊹ バックテスト|Volty Expan Close Strategy の解説勢いがある値動きが出てきたときに、
その方向に順張りするロジックです。
自動売買は、一般的なテクニカル指標よりも、
実際の値動きに近い判断をするスキームの方が
良い結果がでる印象があります。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy("Volty Expan Close Strategy の解説", overlay=true)
//計算用の数値の設定
length = input(5)
numATRs = input(0.75)
// ATR × N の算出
atrs = sma(tr, length)*numATRs
//算出に足る期間があることを確認
if (not na(close[length]))
//バンドの上に買いの逆指値、下に売りの逆指値を設置
strategy.entry("VltClsLE", strategy.long, stop=close+atrs, comment = "VltClsLE")
strategy.entry("VltClsSE", strategy.short, stop=close-atrs, comment = "VltClsSE")
//確認用で描画
plot( close + atrs )
plot( close - atrs )
=====
Pine講座㊸ バックテスト|Pivot Extension Startegy の解説Pivot high、Pivot lowを検出して
順張りしていくStrategyです。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "Pivot Extension Strategy の解説" ,overlay=true )
//計算用の設定値
leftBars = input(4)
rightBars = input(2)
//pivot high、pivot lowの算出
ph = pivothigh(leftBars, rightBars)
pl = pivotlow(leftBars, rightBars)
//pivot lowに該当する数値がある
if (not na(pl))
//成行で買いエントリー
strategy.entry("PivExtLE", strategy.long, comment="PivExtLE")
//pivot highに該当する数値がある
if (not na(ph))
//成行で売りエントリー
strategy.entry("PivExtSE", strategy.short, comment="PivExtSE")
//確認用で描画
plot( ph ,style=plot.style_circles ,color=color.red ,linewidth=3 )
plot( pl ,style=plot.style_circles ,color=color.red ,linewidth=3 )
=====
Pine講座㊹ バックテスト|Pivot Reversal Strategy の解説pivot high、pivot lowのブレイクによる途転売買ですね。
割と成績が良さそうです。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "Pivot Reversal Strategy の解説", overlay=true )
//計算用の数値の設定
leftBars = input(4)
rightBars = input(2)
//pivot high と pivot low の算出
//検出すると値が入り、ないときはna
swh = pivothigh( leftBars, rightBars )
swl = pivotlow( leftBars, rightBars )
//swhの値の有無を確認
swh_cond = not na(swh)
//最新のswh価格を格納しておく
hprice = 0.0
hprice := swh_cond ? swh : hprice
//Long Entry の判断
//pivot high が検出されたら発火
le = false
le := swh_cond ? true : (le and high > hprice ? false : le )
if (le)
//pivot high の1ティック上で逆指値
strategy.entry("PivRevLE", strategy.long, comment="PivRevLE", stop=hprice + syminfo.mintick)
//以下、買いエントリーの逆
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice
se = false
se := swl_cond ? true : (se and low < lprice ? false : se )
if (se)
strategy.entry("PivRevSE", strategy.short, comment="PivRevSE", stop=lprice - syminfo.mintick)
//確認用で描画
plot( swh ,offset=-2 ,style=plot.style_circles ,linewidth=3 ,color=color.red )
plot( swl ,offset=-2 ,style=plot.style_circles ,linewidth=3 ,color=color.red )
plot( hprice )
plot( lprice )
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
=====
Pine講座㊸ バックテスト|Price Channel Strategy(チャネルブレイクアウトで途転)エントリーのロジックは
タートルズが用いていた手法と同じものです。
ひたすら途転していきます。
トレンドがないと勝てない戦略ですね。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy("Price Channel Strategy の解説", overlay=true)
length = input(20)
//期間の最高値を算出
hh = highest( high, length )
//期間の最安値を算出
ll = lowest( low, length )
//設定期間以上、ローソク足が生成されていることを確認
if ( not na( close[length] ) )
//常にレンジの上限・下限に逆指値注文を入れておく
strategy.entry( "PChLE", strategy.long, comment="PChLE", stop=hh )
strategy.entry( "PChSE", strategy.short, comment="PChSE", stop=ll )
//確認用で描画
plot( hh ,offset=1 )
plot( ll ,offset=1 )
=====
世界の金利の比較チャート ~投資家は絶対に見なければいけない~世界の金利チャート 週足
世界中で政策金利の引き下げ合戦が行われています。
株式投資家もFX投資家も世界の金利に対して動きをチェックする必要があります。
今回は下記の金利を比較しています。
US10Y(米国10年債)
CN10Y(中国10年債)
IT10Y(イタリア10年債)
CA10Y(カナダ10年債)
AU10Y(オーストラリア10年債)
GB10Y(英国10年債)
JP10Y(日本10年債)
DE10Y(ドイツ10年債)
比較チャートは簡単に表示することができます。
まず米国債を出してそれをローソク足からラインチャートに替えます。
そして、「⊕比較」をクリックしてそれぞれの銘柄を入力するだけなので簡単ですね。
これらを比較した時に、世界中の金利が下がっているのが分かります。
最近は金利が下がり続けているので聞かれることが少なくなりましたが、
「金利は経済の体温」といわれているので、絶対に注目しなければいけません。
しかし、残念ながら金利を見ている投資家が少ないのが現状です。
今、金利は大きな分岐点に差し掛かっていると考えます。
どういった分岐点かというと、金利が大きく上昇する世界へと向かうか、
それとも、世界中の金利が更に大きく下がるか・・
ここからの動きは非常に重要です。
歴史が繰り返されるのか、それとも、未知の世界に向かうのか。
大注目ですね。
クリプトトレードマスター#15 XRPUSD リップルドル「リップルは別モノ。基本的にはテクニカル分析は不可能。」こんにちは。
いつもお伝えしているとおり、リップルは仮想通貨の中でも別モノであり
基本的にはテクニカル分析はできません。
「基本的には」。
短期的な逆張り手法、デイトレ、スキャルピングは可能ですし、
中長期的な反転があれば、
リップル社が上限と考えているライン付近までは、アップトレンドが継続するであろうと仮定して買っていけるでしょう。
リップルは、マイニングができません。
リップル社が一社独占しており、彼らが売り出すか市場に流通している分しかありません。
※他の仮想通貨はマイニングをしている人たち(マイナー)が掘り起こした分も流通に乗ってきますね。
国際間の送金手段としてリップルを安定させたいと考えており、
情報会社からの市場における取引流通量のデータをもとに、
断続的にプログラム売買を行っております。
6月までは流通量のデータに水増しがあり慎重な放出をしてきた(価格上昇を招いた)わけですが、
それ以降はCryptoCompare社のデータに切り替え、断続的に放出し価格が下落していたところです。
そろそろ一定のレベルに価格が落ち着き、
彼らのプログラム売りも反転上昇ポイントに差し掛かったようです。
Pine講座㊷ バックテスト|OutSide Bar Strategy の解説(つつみ足の途転戦略)今回はつつみ足の戦略です。
テクニカル指標を算出する必要がないので、
コードも非常にシンプルですね。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
==========
//@version=4
strategy("OutSide Bar Strategy の解説", overlay=true)
//つつみ足を検出したら
if (high > high[1] and low < low[1])
//陽線の場合
if (close > open)
//成行の買い注文
strategy.entry("OutBarLE", strategy.long, comment="OutBarLE")
//陰線の場合
if (close < open)
//成行の売り注文
strategy.entry("OutBarSE", strategy.short, comment="OutBarSE")
==========
損切りと利食いとリスクリワードと時々おとん。先日ツイッター上でアンケートをとったのですが皆様が悩まれていることは以下の2点でした。
⑴損切り
⑵利食い
さて、この2点ですが人それぞれ特異な形や手法や時間軸も違うため 「これをしろ」 と明確に申し上げることができず根底からの解決は難しいと思います。ですが皆様がこの2点で悩んでいる以上何かのヒントになれるよう。本質的な部分に関して記述はできるのではないかな?と考え現在ペンをとっている次第でございます。
さてでは本質的な部分とは何か?
それは リスクリワード です。
皆様は「トレードするとき」「エントリーするとき」どのようなことを考えエントリーしていますでしょうか?
「この相場は上がりそう」「この相場は下がりそう」
この感覚はしっかりとした裏付けと根拠があれば立派な経験則だと思うので大切にして下さい。ただそれだけで上手く行くほどトレードというものは単純なものではありません。
ここに 「リスクリワードを掛け合わせること」 これが最も大切になってきます。
厳しいことをいうならリスクリワードを考えないトレードはただのギャンブルなので
「失敗しても何度でもやり直すことのできる資金管理」を前提とした上で 今回のエントリーが失敗するとして「リスクは△pips」で成功するとして「リワードは◯pips」
この時 「リスク<リワード」 となることを必ず意識して下さい。そしてさらに言うならこれが1:10くらいとなると損切り幅を同一のものと仮定するなら10回の負けは1回で取り返すことができます。仮にあなたの勝率が10%と仮定しても理論的にあなたの資産は現在より少なくなることは理論的に無くなります。
さて少し余計な話をしてしましましたので話を戻します。
①資金管理を意識する
②リスクリワードを考える
③リスクリワードの比率が良い時のみエントリー
ここまで話してきた内容をまとめるとこんな感じです。
さてではトレードの何が難しいのか?
ここも少し考えて見ましょう。
①どこではね返えるのか
②どこまで行くのか
これが全て分かっていればあなたは1ヶ月以内に億万長者になれるでしょう。
そう分からないんです。
ですが この分からないことの中で期待値の高い規則性 を見出したもの それが手法です。
リスクリワードを前提に期待値の高いトレードをすること=手法です。
なのでこのどちらか一方が欠けた時点であなたの資産は伸びることはありません。
なぜか。それは「あなたが現在扱っているものは手法ではないから」です。
手法とはリスクリワードを前提に実際に資産が伸びたと言うデータと
数多くのバックテストと検証の結果であり
①検証と改善②リスクリワードを考えていないものはいつか損失の荒波に淘汰される。
と言うことを覚えておくことをおすすめ致します。
と偉そうなことを言ってみましたが
僕も本当にまだまだです。失敗することもたくさんあります。ですが皆様と一緒に成長できたらなと考えております。こんな僕の戯言にここまで目を通していただきありがとうございます。
【まとめ】
⑴リスクリワード編
①資金管理を意識する
②リスクリワードを考える
③リスクリワードの比率が良い
④ここで初めてエントリー
⑤ストップとターゲットを必ず置く
☆エントリー前にリスクリワードを考える
↑かなり大切。
⑵手法編
①リスクリワードを前提とする
②トレードをする
③検証と改善を繰り返す
④これらをバックテストの後証明する
⑤総合でみたときに勝ちに収束するもの
⑥これを「手法」と呼ぶ
Pine講座㊶ バックテスト|Stochastics Slow Strategy の解説(ストキャスの途転戦略)逆張りの途転戦略ほど
怖いものはありません。
この戦略は、
ガッツリトレンドが出たときに
もれなく大負けしてしまいますね。
損切りを設定する必要があります。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
=====
//@version=4
strategy("Stochastic Slow Strategy の解説", overlay=false)
//ストキャスの設定諸々
length = input(14, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3
//ストキャスの算出
k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
//ストキャスの値があることを確認
if (not na(k) and not na(d))
//%Kが20よりも下で%Dを上抜けしたとき
if (crossover(k,d) and k < OverSold)
//成行買い(売りがある場合は途転買い)
strategy.entry("StochLE", strategy.long, comment="StochLE")
//%Kが80よりも上で%Dを下抜けしたとき
if (crossunder(k,d) and k > OverBought)
//成行売り(買いがある場合は途転売り)
strategy.entry("StochSE", strategy.short, comment="StochSE")
//確認用で描画
plot(k)
plot(d,color=color.red)
hline(OverSold)
hline(OverBought)
=====
Pine講座㊵ バックテスト|InSide Bar Strategy の解説(はらみ足による途転売買)自分の勉強も兼ねて
TradingView内蔵のストラテジーを解説していますが、
シンプルなストラテジーが多いですね。
事例集みたいな形でしょうか。
はらみ足でエントリーしても、
逆方向のはらみ足まで保有はまずありえないと思います。
色んな事例を組み合わせて
自分のストラテジーをつくってね
ってことですね。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
strategy("InSide Bar Strategy の解説", overlay=true)
//高値と安値がどちらも前日より内側にある
//→ はらみ足
if (high < high[1] and low > low[1])
//陽線
if (close > open)
strategy.entry("InsBarLE", strategy.long, comment="InsBarLE")
//陰線
if (close < open)
strategy.entry("InsBarSE", strategy.short, comment="InsBarSE")
=====
Pine講座㊴ バックテスト|BarUpDn Strategy の解説(ローソク足の上下による途転戦略)TradingView内蔵のストラテジー
「BarUpDn Strategy」の解説です。
「陰線か陽線」と「前日終値と始値の位置関係」だけでトレードする、
非常にシンプルなストラテジーです。
ノイズの多い銘柄には向かない印象です。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
//default_qty_type = strategy.percent_of_equity, default_qty_value = 10 で
//「1エントリーのサイズを資金の10%にする」という設定を行っています
strategy("BarUpDn Strategy の解説", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
//1日の中の損失限度を資金に対する%で設定します
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)
//陽線&始値>前日終値
if (close > open and open > close[1])
//買いエントリー
strategy.entry("BarUp", strategy.long)
//陰線&始値<前日終値
if (close < open and open < close[1])
//売りエントリー
strategy.entry("BarDn", strategy.short)
=====
Pine講座㊳ バックテスト|Greedy Strategy の解説(GAP順張り&ピラミッティングの戦略)今回は Greedy Strategy の解説です。
直訳すると「欲張り戦略」
ピラミッティングをすることから
この名称なのかなと思います。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
strategy("Greedy Strategy の解説", pyramiding = 100, calc_on_order_fills=false, overlay=true)
//take profit(利確)のティック
tp = input(10)
//stop loss(損切り)のティック
sl = input(10)
//1日のオーダー数の上限
maxidf = input(title="Max Intraday Filled Orders", defval=5)
strategy.risk.max_intraday_filled_orders(maxidf)
//窓の確認
upGap = open > high[1]
dnGap = open < low[1]
//売り保有&当日陰線
dn = strategy.position_size < 0 and open > close
//買い保有&当日陽線
up = strategy.position_size > 0 and open < close
//窓を空けて上昇 → 買いエントリー
strategy.entry("GapUp", strategy.long, stop = high[1], when = upGap)
//売り保有&陰線 → 売りエントリー
strategy.entry("Dn", strategy.short, stop = close, when = dn)
//窓を空けて下落 → 売りエントリー
strategy.entry("GapDn", strategy.short, stop = low[1], when = dnGap)
//買い保有&陽線 → 買いエントリー
strategy.entry("Up", strategy.long, stop = close, when = up)
//それぞれ条件を満たさなくなったら注文をキャンセル
strategy.cancel("GapUp", not upGap)
strategy.cancel("GapDn", not dnGap)
strategy.cancel("Up", not up)
strategy.cancel("Dn", not dn)
//保有ポジション数を確認
XQty = strategy.position_size < 0 ? -strategy.position_size : strategy.position_size
//買いか売りかを確認
dir = strategy.position_size < 0 ? -1 : 1
//limit price(利確する価格)の算出
lmP = strategy.position_avg_price + dir*tp*syminfo.mintick
//stoploss price(損切りする価格)の算出
slP = strategy.position_avg_price - dir*sl*syminfo.mintick
//データなし
float nav = na
//逆方向の窓の有無
revCond = strategy.position_size > 0 ? dnGap : (strategy.position_size < 0 ? upGap : false)
//strategy.order(id, long, qty, limit, stop, oca_name, oca_type, comment, when)
//long → trueで買い注文、falseで売り注文
//保有ポジションあり+逆方向の窓が出てない → 損切りの注文
strategy.order("TP", strategy.position_size < 0, XQty, lmP, nav, "TPSL", strategy.oca.reduce, "TPSL", when= not revCond and XQty > 0)
//保有ポジションあり+逆方向の窓が出てない → 利確の注文
strategy.order("SL", strategy.position_size < 0, XQty, nav, slP, "TPSL", strategy.oca.reduce, "TPSL", when= not revCond and XQty > 0)
//保有ポジションなし か 逆方向の窓で注文をチャンセル
strategy.cancel("TP", XQty == 0 or revCond)
strategy.cancel("SL", XQty == 0 or revCond)
=====
Pine講座㊲ バックテスト|MACD Strategy の解説(MACDのGC・DCによる途転戦略)TradingView内蔵のストラテジーはみんな同じような感じですね。
今回は、MACDのGC・DCによる途転売買です。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
=====
//@version=4
strategy( "MACD Strategy の解説" )
//設定項目と初期値の指定
fastLength = input( 12 )
slowLength = input( 26 )
MACDLength = input( 9 )
//MACDの算出
MACD = ema( close, fastLength ) - ema( close, slowLength )
//MACDのEMAを算出
aMACD = ema( MACD, MACDLength )
//MACDとMACDのEMAの差を算出
delta = MACD - aMACD
//MACDが平均値を上抜けた
if ( crossover( delta ,0 ) )
//成行で買い
strategy.entry( "MacdLE", strategy.long, comment="MacdLE" )
//MACDが平均値を下抜けた
if ( crossunder( delta ,0 ) )
//成行で売り
strategy.entry( "MacdSE", strategy.short, comment="MacdSE" )
//確認用で描画
plot( MACD )
plot( aMACD )
plot( delta ,style=plot.style_histogram )
=====
Pine講座㊱ バックテスト|RSI Strategyの解説(RSIによる途転売買)今回は「RSI Strategy」のコードを解説します!
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
このストラテジーは、エントリーしたあと、
じわじわ逆方向に動くと大変です。
あまり良いスキームではありませんね。
(ハマる値動きはあると思います)
=====
//@version=4
strategy( "RSI Strategy の解説" )
//設定の項目と初期値の指定
//RSIを計算する期間
length = input( 14 )
//買いエントリーの基準となるライン
overSold = input( 30 )
//売りエントリーの基準となるライン
overBought = input( 70 )
//計算に使う価格
price = close
//RSIの計算
vrsi = rsi(price, length)
//RSIの計算値がある
if (not na(vrsi))
//基準のライン(初期値:30)を上抜けたら
if (crossover(vrsi, overSold))
//買いエントリー
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
//基準のライン(初期値:70)を下抜けたら
if (crossunder(vrsi, overBought))
//売りエントリー
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
//確認用で描画
plot( vrsi )
hline( overSold )
hline( overBought )
=====
Pine講座㉟ バックテスト|Prabolic SAR Strategyの解説(パラボリックのブレイクで途転売買)今回はパラボリックのストラテジーです。
わりとシンプルです。
TradingViewの良いところは、
こういうバックテストを
・色んな銘柄
・色んな時間軸
で即座に検証できるところですね。
ぜひ、ためしてみてください^^
=====
//@version=4
strategy("Parabolic SAR Strategy", overlay=true)
//パラボリックの計算値の指定
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
//パラボリックの算出
psar = sar(start, increment, maximum)
//パラボリックが高値より上
if (psar >= high)
//パラボリックの価格に買いの逆指値
//パラボリックを上抜けたら買いに途転
strategy.entry("ParLE", strategy.long, stop=psar, comment="ParLE")
//条件をみたさない
else
//注文をキャンセル
strategy.cancel("ParLE")
//パラボリックが安値より下
if (psar <= low)
//パラボリックの価格に売りの逆指値
strategy.entry("ParSE", strategy.short, stop=psar, comment="ParSE")
//条件を満たさなくなったら注文をキャンセル
else
strategy.cancel("ParSE")
//確認用でパラボリックをプロット
plot( psar ,style=plot.style_circles ,color=color.red ,linewidth=2 )
=====
Pine講座㉞ バックテスト|Momentum Strategy の解説(相場の勢いをもとに途転売買)相場の勢いをみるモメンタムをもとにした
TradingView内蔵のストラテジーの解説です。
モメンタムといっても仕組みは大変シンプルで、
「終値を一定期間さかのぼって比較するだけ」です。
このストラテジーは、モメンタムの確認を2段階で行っていました。
解説はコードの中に記載しています。
=====
//@version=4
strategy( "Momentum Strategy の解説" )
length = input( 12 )
price = close
//モメンタム(勢い)を算出する関数を作成
//seria(数値)とlength分さかのぼった seria を比較
momentum( seria, length ) => seria - seria
//終値をlength分さかのぼって比較
mom0 = momentum( price, length )
//mom0を1本さかのぼって比較
mom1 = momentum( mom0, 1 )
//mom0 と mom1 がプラスのとき
if ( mom0 > 0 and mom1 > 0 )
//高値+1ティックで逆指値を発注
strategy.entry( "MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE" )
//上の条件を満たさないとき
else
//上の逆指値注文をキャンセル
strategy.cancel( "MomLE" )
//mom0 と mom1 がマイナスのとき
if ( mom0 < 0 and mom1 < 0 )
//安値-1ティックで逆指値を発注
strategy.entry( "MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE" )
//条件を満たさないときは逆指値注文をキャンセル
else
strategy.cancel( "MomSE" )
//確認用で描画
plot( mom0 ,color=color.red )
plot( mom1 )
=====
Pine講座㉝ バックテスト|Keltner Channel Strategy の解説(チャネルブレイクの途転戦略)TradingViewに内蔵されている
Keltner Channel Strategy の解説です!
今回のKeltner Channelは、以下で構成されています。
・20本の単純移動平均(MA)
・MA + True Range × 1(Upper)
・MA - True Range × 1(Lower)
Upperの上抜けで買い、
Lowerの下抜けで売りの途転戦略になっていました。
詳細は、以下のコードの中で解説していきます!
=====
//@version=4
strategy("Keltner Channel Strategy の解説", overlay=true)
source = close
useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)
//単純移動平均の算出
ma = sma(source, length)
//値幅の指定と平均値の算出
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
//設定した比率でバンドを算出
upper = ma + rangema * mult
lower = ma - rangema * mult
//バンド上抜けと下抜けの検知
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
//買い値の設定
//高値より1ティック上
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice )
//売り値の設定
//安値より1ティック下
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice )
//crossBcond → cross buy condition の略かな?
//一度 crossUpper すると、その後はずっと true ですね
//何のためにあるんだろう
crossBcond = false
crossBcond := crossUpper ? true
: na(crossBcond ) ? false : crossBcond
//crossScond → cross sell condition だと思われる
//同じく、何のためにあるか意図がつかめず
//(なくても全く変わらないのでは?)
crossScond = false
crossScond := crossLower ? true
: na(crossScond ) ? false : crossScond
//crossBcond は常にtrue
//source(初期値:close)がMAを下回る
//もしくは買い値よりもhighが大きい
//でtrueに
cancelBcond = crossBcond and (source < ma or high >= bprice )
//source(初期値:close)がMAが上回る
//もしくは売り値よりもlowが小さい
//でtrueに
cancelScond = crossScond and (source > ma or low <= sprice )
//cancelBcondの状態になったら
//過去の買い注文をキャンセル
if (cancelBcond)
strategy.cancel("KltChLE")
//crossUpperの状態で
//bprice(買い値)で逆指値の買い注文
if (crossUpper)
strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
//cancelScondの状態になったら
//過去の売り注文をキャンセル
if (cancelScond)
strategy.cancel("KltChSE")
//crossLowerの状態で
//sprice(売り値)で逆指値の売り注文
if (crossLower)
strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")
//確認用でチャートに出力
plot( ma )
plot( upper )
plot( lower )
=====
Pine講座㉑ ラインを表示するPineスクリプトのversion4では、
簡単にラインを表示することもできるようになりました。
=====
//@version=4
study( "ラインを表示する", overlay=true )
var line l = na
line.delete( l )
l := line.new( x1=bar_index ,y1=high ,x2=bar_index ,y2=high , extend=extend.right )
=====
基本的な使い方は、label.new( ) とほとんど同じなので
気になる方は前回のアイデアを確認してみてください!
次回は、label と line を使ってインジケーターを作成してみたいと思います!
Pine講座㉓ 終値から ±2-ATR にラインを描画するlabel と line を応用して、
簡単なインジケーターを作成してみます。
今回つくるのは、最新の終値から
上下に2-ATRのところにラインを引くインジケーターです。
※ 以下のコードは、[]を半角の「 」に書き換える必要があります
=====
//@version=4
study( "終値から ±2-ATR にラインを描画する" ,overlay=true )
//ローソク足 1本分の時間を取得
dt = time - time[1]
//ATRを算出
atr20 = ema( tr ,20 )
//終値から±2-ATRの値を算出
c_p_2atr = close + atr20[1] * 2
c_m_2atr = close - atr20[1] * 2
// line を描画
var line upper = na
var line lower = na
line.delete( upper )
line.delete( lower )
upper := line.new( time-10*dt ,c_p_2atr ,time+30*dt ,c_p_2atr ,xloc.bar_time ,color=color.red )
lower := line.new( time-10*dt ,c_m_2atr ,time+30*dt ,c_m_2atr ,xloc.bar_time ,color=color.red )
// label を描画
var label label_top = na
var label label_bottom = na
label.delete( label_top )
label.delete( label_bottom )
label_top := label.new( time-10*dt ,c_p_2atr ,xloc=xloc.bar_time ,text="+2ATR" ,style=label.style_none )
label_bottom := label.new( time-10*dt ,c_m_2atr ,xloc=xloc.bar_time ,text="-2ATR" ,style=label.style_none )
=====