FXで有名なアノマリーストラテジーを作ってみたいんだ!
参考資料
Table of Contents
ストラテジーの作成手順
自動化させるルール探します。
今回は5,10のつく日はある程度値動きが予想できるというドル円のゴトー日アノマリーをやります。
日本時間の2時からロング、9時55分にショートして15時に手じまい。
・エントリー
・決済
の2個のルールが必要
まずは処理を日本語で書いていきましょう。
あとはググりながら実装すれば完了です。
そいじゃやってきましょう。
管理人からのお願い
ブログ半年ぐらいやってますが、現在大赤字です。ブログ存続のためTradingViewの紹介リンクから申し込みしてくれると非常に助かります。
自動化させるロジックを確認
シンプルに作るのが好きなので、まずは2時から9時55分、9時55分から15時までを色分けします。
PineScriptで書いていきましょう。
1 |
time("1", "0200-0955","Asia/Tokyo") |
TradingView組み込み関数のtime()関数を使うとUNIXミリ秒が返ってきます。
よくわからないんでコピペでやってみるとチャート画面の背景が変化します。
1 2 3 4 5 6 7 |
//@version=5 indicator("ゴトー日", overlay=true) buy_time = time("1", "0200-0955","Asia/Tokyo") bgcolor(buy_time ? color.new(color.green, 90) : na) sell_time = time("1", "0955-1500","Asia/Tokyo") bgcolor(sell_time ? color.new(color.red, 90) : na) |
これで日本時間の2時から9時55分までと9時55分から15時までの時間がわかりやすくなりました。
次は5日のみ、10日のみのフィルターをかけます。
1 2 |
hiduke= dayofmonth(time("1"), "Asia/Tokyo") is_gotobi= hiduke % 5==0 or hiduke % 10==0 |
5で割り切れる日と10で割り切れる日をだします。
ここでちょっと問題を発見。
これを修正するには、
変更前
1 |
time("1", "0200-0955","Asia/Tokyo") |
変更後
1 |
time("1", "0200-0955:23456","Asia/Tokyo") |
セッションのところに「:23456」をつけ加えました。
これで月曜日から金曜日まで指定、かつ5と10の日にフィルターをかけました。
次は土日がゴトー日の場合は金曜日がゴトー日になるのでそれをつけ加えます。
言語化すると、
金曜日かつ土曜日が5または10
または
金曜日かつ日曜日が5または10
PineScriptで書いてみると、
1 2 3 4 |
doyoubi = dayofmonth(time("1")+ 1000*60*60*24 , "Asia/Tokyo") nitiyoubi = dayofmonth(time("1")+ 1000*60*60*48, "Asia/Tokyo") kinyoubi = dayofweek(time("1"), "Asia/Tokyo") == 6 kinyou_gotobi = (kinyoubi and doyoubi % 5==0 or kinyoubi and doyoubi % 10==0) or (kinyoubi and nitiyoubi % 5==0 or kinyoubi and nitiyoubi % 10==0) |
時間指定を変更します。
1 |
buy_time = time("1", "0200-0955:23456","Asia/Tokyo") and is_gotobi or time("1", "0200-0955:23456","Asia/Tokyo") and kinyou_gotobi |
これでゴトー日に背景を変化させるインジケーターが完成したのでストラテジーを作っていきます。
indicator(“ゴトー日”, overlay=true)
を
strategy(“ゴトー日”, overlay=true)
に書き換えればストラテジーにできます。
1 2 3 4 5 6 7 8 9 10 11 12 |
if strategy.position_size > 0 if not buy_time strategy.close_all() if strategy.position_size < 0 if not sell_time strategy.close_all() if strategy.position_size == 0 if buy_time strategy.entry("buy",strategy.long) if sell_time strategy.entry("sell",strategy.short) |
あとはこれでおわりです。
TradingViewでは内部的にポジション数を記憶しているので、ポジション数が0の場合はエントリーします。
逆にポジション数が0より大きいとロングポジションを保有状態、0より小さいとショートポジションを保有している状態です。
ゴトー日ストラテジーが完成!!!
まじで強いねこれ。
コード全文
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 |
// © hosono_p //@version=5 strategy("ゴトー日", overlay=true) hiduke= dayofmonth(time("1"), "Asia/Tokyo") doyoubi = dayofmonth(time("1")+ 1000*60*60*24 , "Asia/Tokyo") nitiyoubi = dayofmonth(time("1")+ 1000*60*60*48, "Asia/Tokyo") is_gotobi= hiduke % 5==0 or hiduke % 10==0 kinyoubi = dayofweek(time("1"), "Asia/Tokyo") == 6 kinyou_gotobi = (kinyoubi and doyoubi % 5==0 or kinyoubi and doyoubi % 10==0) or (kinyoubi and nitiyoubi % 5==0 or kinyoubi and nitiyoubi % 10==0) buy_time = time("1", "0200-0955:23456","Asia/Tokyo") and is_gotobi or time("1", "0200-0955:23456","Asia/Tokyo") and kinyou_gotobi bgcolor(buy_time ? color.new(color.green, 90) : na) sell_time = time("1", "0955-1500:23456","Asia/Tokyo") and is_gotobi or time("1", "0955-1500:23456","Asia/Tokyo") and kinyou_gotobi bgcolor(sell_time ? color.new(color.red, 90) : na) if strategy.position_size > 0 if not buy_time strategy.close_all() if strategy.position_size < 0 if not sell_time strategy.close_all() if strategy.position_size == 0 if buy_time strategy.entry("buy",strategy.long) if sell_time strategy.entry("sell",strategy.short) |
ゴトー日 by hosono_p on TradingView.com
コードのリンクはこちらから
TradingViewのストラテジーが完成!
お疲れ様でした。
これでストラテジーが完成です。
まとめとおさらい
エントリーと決済ルールが必要。
・簡単にストラテジーが作成できる
・有料アカウントが必須
・バックテストが簡易的でしょぼい
このブログは広告で運営費を捻出しています。
なので広告収入がないとそのうち消滅します。
なので紹介リンクから口座開設の協力をお願いいたします。
夏はビールがうまい!
BybitがGoogleのIPアドレス規制をしているためです。国内のVPSなら使…
自分のbotで使ってるAPIキーを使用しているんですが、 You have br…
pybit 最新版にコードを変更しました。コードとrequirements.tx…
お返事ありがとうございます。はい。pybit==2.3.0になっております。
コードはあっていると思います。rewuirements.txtは「pybit==…