ブレークアウトを作ってみます。
2023年1月4日追記:
この記事は半年前の内容です。ストラテジーはスキャルピングみたいなものでスプレッド耐性が低いです。2022年の後半このストラテジーを使ったEAが流行して日足の高値安値は滑りやすいそうです。
2022年12月31日に新しく1時間足の「レンジブレイクアウト」を検証しました。
レンジ相場のみブレイクアウトした瞬間を狙い撃ちします。
Table of Contents
ストラテジーの作成手順
自動化させるルール探します。
以前noteでアルマダ先生が公開していたブレークアウトを参考にして作ってみたいと思います。
高値更新でロング、安値更新でショートです。
決済はトレーリングストップです。
・エントリー
・決済
の2個のルールが必要
まずは処理を日本語で書いていきましょう。
あとはググりながら実装すれば完了です。
そいじゃやってきましょう。
管理人からのお願い
ブログ半年ぐらいやってますが、現在大赤字です。ブログ存続のためTradingViewの紹介リンクから申し込みしてくれると非常に助かります。
自動化させるロジックを確認
noteでは詳しく書いてあったような記憶があるのですが、忘れてしまいましたw
うろおぼえで思い出しながらつくります。まんま丸パクリだと怒られそうなので、簡易版である程度オリジナル要素を含みます。
- 1分足
- 前日高値と当日高値を比較して高いほうを指定
- 終値が高値に到達
- ロングでエントリー
- 短めのスパンでトレーリングストップ
まずはN期間の高値を計算します。1分足でローソク足の本数を1440分(1日分のローソク足本数に指定)
TradingViewでは指定した期間の高値をとりだす関数が用意されていますので使います。
ta.highest(1440)
これで今足から1440本遡った高値を取得することができました。
変数に計算結果を保存して、チャートに描画してみます。
toujitu_takane = ta.highest(1440)
チャート描画はplot関数です。
plot(toujitu_takane)
ta.highest(1440)の結果を 変数toujitu_takane に代入しています。
plot( ) のカッコの中は引数とよびます。カッコの中にいれたらデータをplotに渡せます。これで高値をplotに渡して、チャート画面に描画させます。
チャートに表示させると、
青い線が1440本中で一番高い数字です。
この線にタッチしたらロングなので、条件は
toujitu_takane <= high
当日高値 ≦ 現在のローソク足の高値
です。
1 2 3 |
longCondition = toujitu_takane <= high if (longCondition) strategy.entry("Buy", strategy.long) |
これで高値ブレイクアウトでロングするまで完成です。
varip変数を使う
真打登場 varip を使って値を保存します。
varip entry_price = 0.0
エントリーしたらエントリーの価格を保存しておくように変数を用意しました。
・ローソク足ごとに計算されて値がリセットされるのが「無印」
・ローソク足ごとに計算されて値がリセットされないのが「var」
・値動きごとに計算されて値がリセットされないのが「varip」
- ロング条件が達成
- ポジション数が0
でロングエントリーと、エントリー価格の保存をします。closeは終値です。
1 2 3 4 |
longCondition = toujitu_takane<=high if longCondition and strategy.position_size == 0 strategy.entry("Buy", strategy.long) entry_price := close |
無印に値を代入するには「=」でよかったけど、varipは「:=」で代入します。
TradingViewでは内部的にポジション数を記憶しているので、ポジション数が0の場合はエントリーします。
逆にポジション数が0より大きいとロングポジションを保有状態、0より小さいとショートポジションを保有している状態です。
損切決済をつくる
10Pipsで損切にします。
なので、
・エントリー価格 – 100Point > 現在のローソク足の安値
entry_price - 100 * syminfo.mintick > low
この中の
syminfo.mintick
は現在のシンボルの最小ティック値です。ドル円は0.1Pipsですので100を掛けると10Pipsです。
・もしも、ポジション数が0を超えている and エントリープライス – 100 Point > ローソク足の安値なら
・全決済
1 2 |
if strategy.position_size > 0 and entry_price - 100 * syminfo.mintick > low strategy.close_all() |
トレーリングストップをつくる
TradingViewにもトレーリングストップがあるのですが、使い方がいまいちよくわからないので自作します。
トレーリングストップの値を保存する変数を用意。
varip trail_price = 0.0
エントリーしたらリセットさせる。
・longConditionに「当日高値 <= 現在のローソク足の高値」の真偽値(true or false)を代入
・もしも、longConditionがtrue かつ ポジション数が0なら
・エントリー
・エントリー価格を保存
・トレーリングストップを0でリセット
1 2 3 4 5 |
longCondition = toujitu_takane <= high if longCondition and strategy.position_size == 0 strategy.entry("Buy", strategy.long) entry_price := close trail_price := 0.0 |
エントリーからプラス10Pipsでトレーリングストップ発動。
トレーリングストップ変数trail_priceに終値 – 3Pipsを保存する。
・もしも、トレーリングプライスが0 and エントリープライス + 100 Point < ローソク足の高値なら
・トレーリングプライスにローソク足の高値 – 30Pointの値を代入する
1 2 |
if trail_price == 0.0 and entry_price + 100 * syminfo.mintick < high trail_price := high - 30 * syminfo.mintick |
利益がのびたら決済値をずらす
・もしも、トレーリングプライスが0ではない and トレーリングプライス + 30 Point < ローソク足の高値なら
・トレーリングプライスにローソク足の高値 – 30Pointの値を代入する
1 2 |
if trail_price != 0.0 and trail_price + 30 * syminfo.mintick < high trail_price := high - 30 * syminfo.mintick |
そして以下の条件で決済
- ポジション数が0を超えている(ロングポジションを保有)
- trail_priceが0.0じゃない(トレーリングストップ発動している)
- 終値がtrail_priceを下回った(ストップ発動)
・もしも、トレーリングプライスが0を超えている and トレーリングプライスが0ではない and トレーリングプライスがローソク足の安値以上
・全決済
1 2 |
if strategy.position_size > 0 and trail_price != 0.0 and trail_price >= low strategy.close_all() |
ブレイクアウトストラテジーが完成!!!
コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © hosono_p //@version=5 strategy("Break Out Teriyaki", overlay=true, slippage = 6,calc_on_every_tick = true) day_high = ta.highest(1440) plot(day_high) varip entry_price = 0.0 varip trail_price = 0.0 longCondition = day_high <= high if longCondition and strategy.position_size == 0 strategy.entry("Buy", strategy.long) entry_price := close trail_price := 0.0 if strategy.position_size > 0 and entry_price - 100 * syminfo.mintick > low strategy.close_all() if trail_price == 0.0 and entry_price + 100 * syminfo.mintick < high trail_price := high - 30 * syminfo.mintick if trail_price != 0.0 and trail_price + 30 * syminfo.mintick < high trail_price := high - 30 * syminfo.mintick if strategy.position_size > 0 and trail_price != 0.0 and trail_price >= low strategy.close_all() day_low = ta.lowest(1440) plot(day_low) shortCondition = day_low >= low if shortCondition and strategy.position_size == 0 strategy.entry("Sell", strategy.short) entry_price := close trail_price := 0.0 if strategy.position_size < 0 and entry_price + 100 * syminfo.mintick < high strategy.close_all() if trail_price == 0.0 and entry_price - 100 * syminfo.mintick > low trail_price := low + 30 * syminfo.mintick if trail_price != 0.0 and trail_price - 30 * syminfo.mintick > low trail_price := low + 30 * syminfo.mintick if strategy.position_size < 0 and trail_price != 0.0 and trail_price <= high strategy.close_all() |
ブレイクアウト by hosono_p on TradingView.com
コードのリンクはこちらから
追記:TradingViewでは遅延や通知無しが多発
エラーが多発しまして、ちょっとTradingViewでは使えないみたいです。
今日通知ONでTradingViewで稼働させてみたんですが、
通知されないことが多発
しました。
スキャルピング用のロジックはダメみたいです。
今度はMT4でリベンジします。
TradingViewのストラテジーが完成!
お疲れ様でした。
これでストラテジーが完成です。
まとめとおさらい
エントリーと決済ルールが必要。
・簡単にストラテジーが作成できる
・有料アカウントが必須
・バックテストが簡易的でしょぼい
このブログは広告で運営費を捻出しています。
なので広告収入がないとそのうち消滅します。
なので紹介リンクから口座開設の協力をお願いいたします。
夏はビールがうまい!
BybitがGoogleのIPアドレス規制をしているためです。国内のVPSなら使…
自分のbotで使ってるAPIキーを使用しているんですが、 You have br…
pybit 最新版にコードを変更しました。コードとrequirements.tx…
お返事ありがとうございます。はい。pybit==2.3.0になっております。
コードはあっていると思います。rewuirements.txtは「pybit==…