テクニカル分析以外
なんじゃこりゃ!トレビューでXRPJPYが使い物にならない悲劇を解決する方法。なんじゃこりゃ!とビックリしない人はいないはず。
これは、やばい。
XRPJPYにKRAKENしかないのは、ある意味悲劇ですね。
有料プランの方は、ティッカー検索BOXに、
XRPUSD/JPYUSD と入力するといいですよ!
(無料プランでもできるのかな? できた方は、コメントいただければ嬉しいです)
でも、ちゃんとしたのが欲しいですよね。
これは、要望出してるのですが、なかなか通らない。
何かいい方法はないでしょうかね(*^^*)
それでは、また!
====================
アクビお気に入り7つテクニカル道具
====================
①RSI・MACDダイバージェンス理論
②アクビ・ウォルフ波動
③フィボナッチエクスパンション
④一目均衡表
⑤移動平均線(EMA/GMMA)
⑥Cフォーク
⑦チャートパターン
他にも:ギャンスクエア・水平線/トレンドライン・他
====================
覚えておくと便利な仮想通貨用語
====================
仮想通貨
====================
“仮想通貨(かそうつうか、英語: virtual currency)は、一般的にはネットワーク上で電子的な決済の手段として広く流通しているが、法定通貨(法貨)との比較において強制通用力を持たない、または特定の国家による裏付けのないものをいう。ただし、定義や分類は必ずしも一様ではなく複数存在する。”
“600種類を超える仮想通貨が存在し、それらの推定時価総額は2016年4月時点で約80億ドルである。” また、仮想通貨は時価総額トップのビットコイン(BTC)以外をアルトコイン(その他のコイン)と呼ぶことが多い。また、法定通貨をフィアットと呼ぶこともある。
以下、代表的な仮想通貨
・ビットコイン(BTC)世界で最初の仮想通貨と呼ばれている
・リップル(XRP)海外送金のためのブリッジ通貨としてすでに利用されている。
・イーサリアム(ETH)契約行為を組み込めるため不動産や信託などに使われている。
・ライトコイン(LTC)ビットコインから派生した暗号通貨。
・モナコイン(MONA)ライトコインから派生した日本発祥の暗号通貨。
・ネム(XEM)・オミセゴー(OMG)・ビットコインキャッシュ(BTC/BCC)
====================
ブロックチェーン
====================
“ブロックチェーン(英語: Blockchain、ブロックチェインとも)とは、分散型台帳技術、または、分散型ネットワークである。ビットコインの中核技術(サトシ・ナカモトが開発)を原型とするデータベースである。ブロックと呼ばれる順序付けられたレコードの連続的に増加するリストを持つ。各ブロックには、タイムスタンプと前のブロックへのリンクが含まれている。理論上、一度記録すると、ブロック内のデータを遡及的に変更することはできない。ブロックチェーンデータベースは、Peer to Peerネットワークと分散型タイムスタンプサーバーの使用により、自律的に管理される。フィンテックに応用されるケースでは独占や資金洗浄の危険が指摘されることもある。
日本ブロックチェーン協会は、独自に技術としてのブロックチェーンを定義している。
ブロックチェーンは以下の諸点でビットコインよりも一般化された概念である。
・管理者を置けるし、取引履歴も非公開の形で運用できる。
・採掘者(マイナー)や、暗号通貨ないしトークンは設計次第で必ずしも要しない。
・企業などによって運用されている既存の決済・ポイントサービスなどのシステムを、記録が非公開で運用されるブロックチェーンのシステムに代替することにより運用コストが削減され、決済手数料等が抑えられると期待されている。
同団体による狭義のブロックチェーンとは、「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装」をさす。同団体による広義のブロックチェーンとは、「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術」をさす。”
====================
ビットコイン
====================
ビットコイン(英: bitcoin)は、公共トランザクションログを利用しているオープンソースプロトコルに基づくPeer to Peer型の決済網および暗号資産である。
ビットコインはサトシ・ナカモト(Satoshi Nakamoto) を名乗る人物によって投稿された論文に基づき、2009年に運用が開始された。
ビットコインシステムは、Peer to Peer型のコンピューターネットワークにより運営され、トランザクション(ビットコインの所有権移転: 取引)は仲介者なしでユーザ間で直接に行われる。このトランザクションはネットワークに参加しているノードによって検証され、ブロックチェーンと呼ばれる公開分散元帳に記録されていく。トランザクションでは通貨単位としてビットコイン が使用される。このシステムは中央格納サーバや単一の管理者を置かずに運営されるので、アメリカ合衆国財務省はビットコインを分散化された仮想通貨というカテゴリーに分類している。ビットコインは最初の暗号通貨とも言われるが、DigiCashやRippleといった先行システムが存在し、それを最初の分散化されたデジタル通貨として説明するのがより正確である。
ビットコインは、トランザクション処理作業に対する報酬という形で新規に発行され、ユーザ達が計算能力を提供することでトランザクションは検証され、公開元帳に記録される。このトランザクションの検証・記録作業はマイニング(採掘)と呼ばれ、マイナー(採掘者)はトランザクション手数料と新規発行ビットコインを報酬として受け取る。ビットコインはマイニングにより入手される一方で、他の通貨や商品・サービスの対価として受け取ったり、購入、交換ができる。ビットコインを送信するときに、ユーザはマイナーに任意の額のトランザクション手数料を払うことができる。
ビットコインは極めて低いコストでの決済(およびマイクロペイメント)を権力機関や特別な権限を持つ発行者無しで平均10分程度の待機によって可能にする。ノードから別のノードへの貨幣の移動は電子署名された取引で行われ、ピア・トゥー・ピア型ネットワーク内の全てのノードにブロードキャストされる。初期の通貨流通や、二重支払(英語版)の検知のためプルーフ・オブ・ワーク・システムが用いられている。
====================
イーサリアム
====================
イーサリアム(英: Ethereum)とは、分散型アプリケーション (DApps) やスマート・コントラクトを構築するためのプラットフォームの名称、及び関連するオープンソース・ソフトウェア・プロジェクトの総称である。イーサリアム・プロジェクトによって開発が進められている。
イーサリアムでは、イーサリアム・ネットワークと呼ばれるP2Pのネットワーク上でスマート・コントラクトの履行履歴をブロックチェーンに記録していく。またイーサリアムは、スマート・コントラクトを記述するチューリング完全なプログラミング言語を持ち、ネットワーク参加者はこのネットワーク上のブロックチェーンに任意のDAppsやスマート・コントラクトを記述しそれを実行することが可能になる。ネットワーク参加者が「Ether」と呼ばれるイーサリアム内部通貨の報酬を目当てに、採掘と呼ばれるブロックチェーンへのスマート・コントラクトの履行結果の記録を行うことで、その正統性を保証していく。このような仕組みにより特定の中央管理組織に依拠せず、P2P全体を実行環境としてプログラムの実行とその結果を共有することが可能になった。
====================
リップル
====================
XRPはリップル・ネットワークのネイティブな通貨である。XRPはドルやユーロとは違い、リップル内にのみ存在する生来の電子的な資産である。1000億XRPがリップル・レジャー内にプログラムされており、リップル・プロトコルのルールでそれ以上は発行されることがない。XRPはリップル内で唯一の資産となる通貨である。リップル内の他の全ての通貨は残高として存在しており、これはゲートウェイの負債であることを意味する。この資産と負債の違いが、数学に基づいた通貨の一つの革命的な性質である。なぜならXRPは負債ではなく資産であるため、ユーザーは第三者のカウンターパーティーリスクを負うことを承諾することなく、USD残高を送金する代わりにXRPで価値の交換を行うことができる。
ブリッジ通貨としてのXRP
XRPは、特定のタイミングで2通貨間の直接的な取引がない場合(例えば2つのマイナーな通貨ペアによる取引の際)に、ブリッジ通貨として機能する。ネットワーク内での両替において、XRPは他の通貨と自由に交換することができ、その市場価格はドル、ユーロ、円、ビットコインなどに対して変動する。他の通貨と異なるのは、XRPによる取引は銀行口座を必要とせず、サービス手数料もかからないという点である。取引先のリスクもなく、運用コストが増えることもない。リップルの設計の焦点は、代替通貨としてのXRPに重点を置くことではなく、両替と分散型即時グロス決済である。Ripple Inc. は、2015年4月にオートブリッジと呼ばれる新しい機能をリップルに追加した。これにより、マーケットメーカーはマイナーな通貨ペアの取引を、より簡単に行うことが可能になった。この機能は更にネットワークに流動性とより良いFXレートをもたらすことを目標としている。
(引用・参照はWikipedia)
【似たもの探し】ビットコイン 現在のチャートパターンと似たパターンはこれ。ビットコイン 現在のチャートパターンと比較的よく似たパターンが
2016年の8月に一つありましたので、ご紹介します( ´ ▽ ` )ノ
皆さんも、似たようなパターンがありましたら、是非ご紹介くださいね。
それでは、また!
====================
アクビお気に入り7つテクニカル道具
====================
①RSI・MACDダイバージェンス理論
②アクビ・ウォルフ波動
③フィボナッチエクスパンション
④一目均衡表
⑤移動平均線(EMA/GMMA)
⑥Cフォーク
⑦チャートパターン
他にも:ギャンスクエア・水平線/トレンドライン・他
====================
覚えておくと便利な仮想通貨用語
====================
仮想通貨
====================
“仮想通貨(かそうつうか、英語: virtual currency)は、一般的にはネットワーク上で電子的な決済の手段として広く流通しているが、法定通貨(法貨)との比較において強制通用力を持たない、または特定の国家による裏付けのないものをいう。ただし、定義や分類は必ずしも一様ではなく複数存在する。”
“600種類を超える仮想通貨が存在し、それらの推定時価総額は2016年4月時点で約80億ドルである。” また、仮想通貨は時価総額トップのビットコイン(BTC)以外をアルトコイン(その他のコイン)と呼ぶことが多い。また、法定通貨をフィアットと呼ぶこともある。
以下、代表的な仮想通貨
・ビットコイン(BTC)世界で最初の仮想通貨と呼ばれている
・リップル(XRP)海外送金のためのブリッジ通貨としてすでに利用されている。
・イーサリアム(ETH)契約行為を組み込めるため不動産や信託などに使われている。
・ライトコイン(LTC)ビットコインから派生した暗号通貨。
・モナコイン(MONA)ライトコインから派生した日本発祥の暗号通貨。
・ネム(XEM)・オミセゴー(OMG)・ビットコインキャッシュ(BTC/BCC)
====================
ブロックチェーン
====================
“ブロックチェーン(英語: Blockchain、ブロックチェインとも)とは、分散型台帳技術、または、分散型ネットワークである。ビットコインの中核技術(サトシ・ナカモトが開発)を原型とするデータベースである。ブロックと呼ばれる順序付けられたレコードの連続的に増加するリストを持つ。各ブロックには、タイムスタンプと前のブロックへのリンクが含まれている。理論上、一度記録すると、ブロック内のデータを遡及的に変更することはできない。ブロックチェーンデータベースは、Peer to Peerネットワークと分散型タイムスタンプサーバーの使用により、自律的に管理される。フィンテックに応用されるケースでは独占や資金洗浄の危険が指摘されることもある。
日本ブロックチェーン協会は、独自に技術としてのブロックチェーンを定義している。
ブロックチェーンは以下の諸点でビットコインよりも一般化された概念である。
・管理者を置けるし、取引履歴も非公開の形で運用できる。
・採掘者(マイナー)や、暗号通貨ないしトークンは設計次第で必ずしも要しない。
・企業などによって運用されている既存の決済・ポイントサービスなどのシステムを、記録が非公開で運用されるブロックチェーンのシステムに代替することにより運用コストが削減され、決済手数料等が抑えられると期待されている。
同団体による狭義のブロックチェーンとは、「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装」をさす。同団体による広義のブロックチェーンとは、「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術」をさす。”
====================
ビットコイン
====================
ビットコイン(英: bitcoin)は、公共トランザクションログを利用しているオープンソースプロトコルに基づくPeer to Peer型の決済網および暗号資産である。
ビットコインはサトシ・ナカモト(Satoshi Nakamoto) を名乗る人物によって投稿された論文に基づき、2009年に運用が開始された。
ビットコインシステムは、Peer to Peer型のコンピューターネットワークにより運営され、トランザクション(ビットコインの所有権移転: 取引)は仲介者なしでユーザ間で直接に行われる。このトランザクションはネットワークに参加しているノードによって検証され、ブロックチェーンと呼ばれる公開分散元帳に記録されていく。トランザクションでは通貨単位としてビットコイン が使用される。このシステムは中央格納サーバや単一の管理者を置かずに運営されるので、アメリカ合衆国財務省はビットコインを分散化された仮想通貨というカテゴリーに分類している。ビットコインは最初の暗号通貨とも言われるが、DigiCashやRippleといった先行システムが存在し、それを最初の分散化されたデジタル通貨として説明するのがより正確である。
ビットコインは、トランザクション処理作業に対する報酬という形で新規に発行され、ユーザ達が計算能力を提供することでトランザクションは検証され、公開元帳に記録される。このトランザクションの検証・記録作業はマイニング(採掘)と呼ばれ、マイナー(採掘者)はトランザクション手数料と新規発行ビットコインを報酬として受け取る。ビットコインはマイニングにより入手される一方で、他の通貨や商品・サービスの対価として受け取ったり、購入、交換ができる。ビットコインを送信するときに、ユーザはマイナーに任意の額のトランザクション手数料を払うことができる。
ビットコインは極めて低いコストでの決済(およびマイクロペイメント)を権力機関や特別な権限を持つ発行者無しで平均10分程度の待機によって可能にする。ノードから別のノードへの貨幣の移動は電子署名された取引で行われ、ピア・トゥー・ピア型ネットワーク内の全てのノードにブロードキャストされる。初期の通貨流通や、二重支払(英語版)の検知のためプルーフ・オブ・ワーク・システムが用いられている。
====================
イーサリアム
====================
イーサリアム(英: Ethereum)とは、分散型アプリケーション (DApps) やスマート・コントラクトを構築するためのプラットフォームの名称、及び関連するオープンソース・ソフトウェア・プロジェクトの総称である。イーサリアム・プロジェクトによって開発が進められている。
イーサリアムでは、イーサリアム・ネットワークと呼ばれるP2Pのネットワーク上でスマート・コントラクトの履行履歴をブロックチェーンに記録していく。またイーサリアムは、スマート・コントラクトを記述するチューリング完全なプログラミング言語を持ち、ネットワーク参加者はこのネットワーク上のブロックチェーンに任意のDAppsやスマート・コントラクトを記述しそれを実行することが可能になる。ネットワーク参加者が「Ether」と呼ばれるイーサリアム内部通貨の報酬を目当てに、採掘と呼ばれるブロックチェーンへのスマート・コントラクトの履行結果の記録を行うことで、その正統性を保証していく。このような仕組みにより特定の中央管理組織に依拠せず、P2P全体を実行環境としてプログラムの実行とその結果を共有することが可能になった。
====================
リップル
====================
XRPはリップル・ネットワークのネイティブな通貨である。XRPはドルやユーロとは違い、リップル内にのみ存在する生来の電子的な資産である。1000億XRPがリップル・レジャー内にプログラムされており、リップル・プロトコルのルールでそれ以上は発行されることがない。XRPはリップル内で唯一の資産となる通貨である。リップル内の他の全ての通貨は残高として存在しており、これはゲートウェイの負債であることを意味する。この資産と負債の違いが、数学に基づいた通貨の一つの革命的な性質である。なぜならXRPは負債ではなく資産であるため、ユーザーは第三者のカウンターパーティーリスクを負うことを承諾することなく、USD残高を送金する代わりにXRPで価値の交換を行うことができる。
ブリッジ通貨としてのXRP
XRPは、特定のタイミングで2通貨間の直接的な取引がない場合(例えば2つのマイナーな通貨ペアによる取引の際)に、ブリッジ通貨として機能する。ネットワーク内での両替において、XRPは他の通貨と自由に交換することができ、その市場価格はドル、ユーロ、円、ビットコインなどに対して変動する。他の通貨と異なるのは、XRPによる取引は銀行口座を必要とせず、サービス手数料もかからないという点である。取引先のリスクもなく、運用コストが増えることもない。リップルの設計の焦点は、代替通貨としてのXRPに重点を置くことではなく、両替と分散型即時グロス決済である。Ripple Inc. は、2015年4月にオートブリッジと呼ばれる新しい機能をリップルに追加した。これにより、マーケットメーカーはマイナーな通貨ペアの取引を、より簡単に行うことが可能になった。この機能は更にネットワークに流動性とより良いFXレートをもたらすことを目標としている。
(引用・参照はWikipedia)
Pine講座63 タートルズ流投資の魔術|ドンチャン・トレンドシステム「タートルズ流投資の魔術
カーティス・フェイス著」
で紹介されている手法の再現。
5つ目です。
これまでの手法に比べると
すこしスパンの短い手法。
取引回数が増えます。
この手法をこれまでの手法と比較すると
「取引回数の重要さ」が良く分かると思います。
(長期のトレンドフォロー
なので分散投資が必須です)
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=3
strategy("Strategy Turtle Donchian Trend System"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
len_dc_entry = input(20 ,minval=1 ,title="length of dc entry")
len_dc_exit = input(10 ,minval=1 ,title="length of dc exit")
len_ema_m = input(25 ,minval=1 ,title="length of middle ema")
len_ema_l = input(350 ,minval=1 ,title="length of long ema")
SO_bool = input(false,type=bool ,title="loss cut")
SO_len = input(20 ,type=integer ,minval=1 ,title="loss cut ATR length")
SO_N = input(2 ,type=float ,minval=0.5 ,title="loss cut ATR*N")
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(1 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
Tm_bool = input(false,type=bool ,title="timed exit")
Tm_len = input(80 ,type=integer ,minval=1 ,title="timed exit length")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
upper_en = highest(high ,len_dc_entry)
upper_ex = highest(high ,len_dc_exit)
lower_en = lowest(low ,len_dc_entry)
lower_ex = lowest(low ,len_dc_exit)
ema_m = ema(src ,len_ema_m)
ema_l = ema(src ,len_ema_l)
atr_SO_ = ema(tr ,SO_len)
atr_LO_ = ema(tr ,LO_len)
atr_SO = atr_SO_*SO_N
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1
entry2 := strategy.position_size==0 ? na : entry2
entry3 := strategy.position_size==0 ? na : entry3
entry4 := strategy.position_size==0 ? na : entry4
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2
lo3 := strategy.position_size==0 ? na : lo3
lo4 := strategy.position_size==0 ? na : lo4
L_EntrySig = strategy.position_size==0 and high >= upper_en and ema_m >= ema_l
S_EntrySig = strategy.position_size==0 and low <= lower_en and ema_m <= ema_l
lo_sig2 = strategy.position_size>0 ? lo2 < high : strategy.position_size<0 ? lo2 > low : na
lo_sig3 = strategy.position_size>0 ? lo3 < high : strategy.position_size<0 ? lo3 > low : na
lo_sig4 = strategy.position_size>0 ? lo4 < high : strategy.position_size<0 ? lo4 > low : na
losscut = close
losscut := SO_bool==false ? na
: L_EntrySig ? close - atr_SO
: S_EntrySig ? close + atr_SO
: strategy.position_size>0 and (lo_sig2 or lo_sig3 or lo_sig4) ? close - atr_SO
: strategy.position_size<0 and (lo_sig2 or lo_sig3 or lo_sig4) ? close + atr_SO
: strategy.position_size!=0 ? losscut
: na
ExitPrice = close
ExitPrice := L_EntrySig or strategy.position_size>0 ? SO_bool ? max(losscut ,lower_ex) : lower_ex
: S_EntrySig or strategy.position_size<0 ? SO_bool ? min(losscut ,upper_ex) : upper_ex
: na
if(strategy.position_size != 0)
L_ExitSig = (low <= lower_ex or S_EntrySig) and strategy.position_size > 0
S_ExitSig = (high >= upper_ex or L_EntrySig) and strategy.position_size < 0
TimedSig = countTradingDays > Tm_len and Tm_bool
strategy.close_all(when = L_ExitSig or S_ExitSig or TimedSig)
if(L_ExitSig or S_ExitSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
losscut := na
if(strategy.position_size > 0)
strategy.exit("L-Entry1" ,stop=ExitPrice)
if(entry2!=na)
strategy.exit("L-Entry2" ,stop=ExitPrice)
if(entry3!=na)
strategy.exit("L-Entry3" ,stop=ExitPrice)
if(entry4!=na)
strategy.exit("L-Entry4" ,stop=ExitPrice)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
if(SO_bool)
strategy.entry("L-Entry2" ,strategy.long ,stop=ExitPrice ,comment="L-Entry2")
strategy.exit("L-Entry1" ,stop=ExitPrice)
else
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
if(SO_bool)
strategy.entry("L-Entry3" ,strategy.long ,stop=ExitPrice ,comment="L-Entry3")
strategy.exit("L-Entry2" ,stop=ExitPrice)
strategy.exit("L-Entry1" ,stop=ExitPrice)
else
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
if(SO_bool)
strategy.entry("L-Entry4" ,strategy.long ,stop=ExitPrice ,comment="L-Entry4")
strategy.exit("L-Entry3" ,stop=ExitPrice)
strategy.exit("L-Entry2" ,stop=ExitPrice)
strategy.exit("L-Entry1" ,stop=ExitPrice)
else
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
if(strategy.position_size < 0)
strategy.exit("S-Entry1" ,stop=ExitPrice)
if(entry2!=na)
strategy.exit("S-Entry2" ,stop=ExitPrice)
if(entry3!=na)
strategy.exit("S-Entry3" ,stop=ExitPrice)
if(entry4!=na)
strategy.exit("S-Entry4" ,stop=ExitPrice)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
if(SO_bool)
strategy.entry("S-Entry2" ,strategy.short ,stop=ExitPrice ,comment="S-Entry2")
strategy.exit("S-Entry1" ,stop=ExitPrice)
else
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
if(SO_bool)
strategy.entry("S-Entry3" ,strategy.short ,stop=ExitPrice ,comment="S-Entry3")
strategy.exit("S-Entry2" ,stop=ExitPrice)
strategy.exit("S-Entry1" ,stop=ExitPrice)
else
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
if(SO_bool)
strategy.entry("S-Entry4" ,strategy.short ,stop=ExitPrice ,comment="S-Entry4")
strategy.exit("S-Entry3" ,stop=ExitPrice)
strategy.exit("S-Entry2" ,stop=ExitPrice)
strategy.exit("S-Entry1" ,stop=ExitPrice)
else
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
if((L_EntrySig or S_EntrySig) and isWork)
countTradingDays := 0
entry1 := close
if(L_EntrySig)
if(SO_bool)
strategy.entry("L-Entry1" ,strategy.long ,stop=ExitPrice ,comment="L-Entry1")
else
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
if(S_EntrySig)
if(SO_bool)
strategy.entry("S-Entry1" ,strategy.short ,stop=ExitPrice ,comment="S-Entry1")
else
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
plot(countTradingDays ,transp=0 ,title="取引日数")
plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(ExitPrice ,title="ExitPrice" ,color=red ,transp=0 ,style=linebr)
plot(atr_SO ,transp=0 ,title="ATR_SO")
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
p1 = plot(ema_m ,color=#303F9F ,title="ema_m" ,style=line ,linewidth=1, transp=0)
p2 = plot(ema_l ,color=#4CAF50 ,title="ema_l" ,style=line ,linewidth=1, transp=0)
fill(p1 ,p2 ,color=#2196F3 ,title="fill" ,transp=80)
p3 = plot(lower_en ,color=gray ,title="lower_entry" ,style=linebr ,linewidth=1 ,transp=40)
p4 = plot(upper_en ,color=gray ,title="upper_entry" ,style=linebr ,linewidth=1 ,transp=40)
fill(p3 ,p4 ,color=gray ,title="fill" ,transp=90)
plot(strategy.position_size>0 ? lower_ex : na ,color=red ,title="lower_exit" ,style=linebr ,linewidth=1 ,transp=30)
plot(strategy.position_size<0 ? upper_ex : na ,color=red ,title="upper_exit" ,style=linebr ,linewidth=1 ,transp=30)
=====
Pine講座64 タートルズ流投資の魔術|時限式ドンチアン・トレンド「タートルズ流投資の魔術
カーティス・フェイス著」
で紹介されている手法の再現。
6つ目、最後の手法です。
決済がかなり特殊なストラテジーです。
決済の条件は、
「エントリーから80日経過したときのみ」
というもの。
これでも利益が出ることに
本当に驚きました。
(長期のトレンドフォロー
なので分散投資が必須です)
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=3
strategy("Strategy Turtle Time Exit Donchian Trend"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
len_dc_entry = input(20 ,minval=1 ,title="length of dc entry")
len_ema_m = input(25 ,minval=1 ,title="length of middle ema")
len_ema_l = input(350 ,minval=1 ,title="length of long ema")
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(1 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
Tm_len = input(80 ,type=integer ,minval=1 ,title="timed exit length")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
upper_en = highest(high ,len_dc_entry)[1]
lower_en = lowest(low ,len_dc_entry)[1]
ema_m = ema(src ,len_ema_m)
ema_l = ema(src ,len_ema_l)
atr_LO_ = ema(tr ,LO_len)
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays[1] + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays[1] + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1[1]
entry2 := strategy.position_size==0 ? na : entry2[1]
entry3 := strategy.position_size==0 ? na : entry3[1]
entry4 := strategy.position_size==0 ? na : entry4[1]
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2[1]
lo3 := strategy.position_size==0 ? na : lo3[1]
lo4 := strategy.position_size==0 ? na : lo4[1]
L_EntrySig = strategy.position_size==0 and high >= upper_en and ema_m >= ema_l
S_EntrySig = strategy.position_size==0 and low <= lower_en and ema_m <= ema_l
lo_sig2 = strategy.position_size>0 ? lo2 < high : strategy.position_size<0 ? lo2 > low : na
lo_sig3 = strategy.position_size>0 ? lo3 < high : strategy.position_size<0 ? lo3 > low : na
lo_sig4 = strategy.position_size>0 ? lo4 < high : strategy.position_size<0 ? lo4 > low : na
if(strategy.position_size != 0)
TimedSig = countTradingDays >= Tm_len
strategy.close_all(when = TimedSig)
if(TimedSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
if(strategy.position_size > 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
if(strategy.position_size < 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
if((L_EntrySig or S_EntrySig) and isWork)
countTradingDays := 1
entry1 := close
if(L_EntrySig)
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
if(S_EntrySig)
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
plot(countTradingDays ,transp=0 ,title="取引日数")
plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
p1 = plot(ema_m ,color=#303F9F ,title="ema_m" ,style=line ,linewidth=1, transp=0)
p2 = plot(ema_l ,color=#4CAF50 ,title="ema_l" ,style=line ,linewidth=1, transp=0)
fill(p1 ,p2 ,color=#2196F3 ,title="fill" ,transp=80)
p3 = plot(lower_en ,color=gray ,title="lower_entry" ,style=linebr ,linewidth=1 ,transp=40)
p4 = plot(upper_en ,color=gray ,title="upper_entry" ,style=linebr ,linewidth=1 ,transp=40)
fill(p3 ,p4 ,color=gray ,title="fill" ,transp=90)
=====
Swellでの期待上げはあるのか?その場合の目標値は?11月に予定されているxrp関連イベントSwellに向けての期待上げの話がよく流れてきます。
今年はここ数年よりも1か月ほど遅い開催ということで、これから2017年、2018年と起きたいわゆるSwell期待上げがあるのではないかとTwitterなどでも流れてくるようになりました。
自分はその期待によってトレードをするようなことはありませんが、”可能性としては”十分にあると思ってます。
期待で買う人、そしてその値動きに便乗して買う人。
歴史は繰り返すという考えにたてば、トレードシナリオとして考慮しても良いものだと思います。
では実際に期待上げが起こった際にどこまで狙っていくか。
歴史は繰り返すで言えば、Swellの期待上げの後、価格が下がっていくということも起きているわけで出口は大事です。
2018年
2017年
ともに直近下落の高安0.618戻しというところが意識されたのかなという値動きになっています。
今年の値動きにあてはめればだいたい0.4$あたり。
仮にSwell期待上げが実際におきた場合には、このあたりまでは狙っても良いのかなという気はします。
もちろん市場環境も違いますし、あくまで歴史は繰り返すという仮定での話ですので参考程度に。
少なくとも自分はこれによってトレードをするということはありません。
Pine講座62 タートルズ流投資の魔術|ATRチャネル・ブレイクアウト「タートルズ流投資の魔術
カーティス・フェイス著」
で紹介されている手法の再現。
4つ目です。
この本に掲載されている手法は、
日足における長期の手法が多く
Botが流行っている昨今では
少し古めかしいものが多いです。
一方で、
「すべての手法において
現在でもトータル・プラス収益である」
この事実は
"とんでもないこと" だと思います。
(超長期のトレンドフォロー
なので分散投資が必須です)
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=3
strategy("Strategy Turtle ATR Chanel Break Out"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
len = input(350 ,minval=1 ,title="ma length")
atr_len = input(20 ,minval=1 ,title="band atr length")
up_n = input(7 ,minval=1 ,title="atr upper length")
low_n = input(3 ,minval=1 ,title="atr lower length")
SO_bool = input(false,type=bool ,title="loss cut")
SO_len = input(20 ,type=integer ,minval=1 ,title="loss cut ATR length")
SO_N = input(2 ,type=float ,minval=0.5 ,title="loss cut ATR*N")
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(10 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
Tm_bool = input(false,type=bool ,title="timed exit")
Tm_len = input(80 ,type=integer ,minval=1 ,title="timed exit length")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
EMA = ema(close ,len)
ATR = ema(tr ,atr_len)
UPPER = EMA + ATR * up_n
LOWER = EMA - ATR * low_n
atr_SO_ = ema(tr ,SO_len)
atr_LO_ = ema(tr ,LO_len)
atr_SO = atr_SO_*SO_N
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays[1] + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays[1] + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1[1]
entry2 := strategy.position_size==0 ? na : entry2[1]
entry3 := strategy.position_size==0 ? na : entry3[1]
entry4 := strategy.position_size==0 ? na : entry4[1]
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2[1]
lo3 := strategy.position_size==0 ? na : lo3[1]
lo4 := strategy.position_size==0 ? na : lo4[1]
losscut = close
losscut := strategy.position_size==0 or SO_bool==false ? na : losscut[1]
L_EntrySig = close >= UPPER and isWork
S_EntrySig = close <= LOWER and isWork
if(strategy.position_size != 0)
L_ExitSig = (close <= EMA or S_EntrySig) and strategy.position_size > 0
S_ExitSig = (close >= EMA or L_EntrySig) and strategy.position_size < 0
TimedSig = countTradingDays > Tm_len and Tm_bool
strategy.close_all(when = L_ExitSig or S_ExitSig or TimedSig or not isWork)
if(L_ExitSig or S_ExitSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
losscut := na
if(strategy.position_size > 0)
lo_sig2 = lo2 < high
lo_sig3 = lo3 < high
lo_sig4 = lo4 < high
if(lo_sig2 and MAX_N >= 2)
if(SO_bool)
strategy.entry("L-Entry2" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry2")
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
lo2 := na
losscut := SO_bool ? close - atr_SO : na
if(lo_sig3 and MAX_N >= 3)
if(SO_bool)
strategy.entry("L-Entry3" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry3")
strategy.exit("L-Entry2" ,stop=close-atr_SO)
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
lo3 := na
losscut := SO_bool ? close - atr_SO : na
if(lo_sig4 and MAX_N >= 4)
if(SO_bool)
strategy.entry("L-Entry4" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry4")
strategy.exit("L-Entry3" ,stop=close-atr_SO)
strategy.exit("L-Entry2" ,stop=close-atr_SO)
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
lo4 := na
losscut := SO_bool ? close - atr_SO : na
if(strategy.position_size < 0)
lo_sig2 = lo2 > low
lo_sig3 = lo3 > low
lo_sig4 = lo4 > low
if(lo_sig2 and MAX_N >= 2)
if(SO_bool)
strategy.entry("S-Entry2" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry2")
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
lo2 := na
losscut := SO_bool ? close + atr_SO : na
if(lo_sig3 and MAX_N >= 3)
if(SO_bool)
strategy.entry("S-Entry3" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry3")
strategy.exit("S-Entry2" ,stop=close+atr_SO)
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
lo3 := na
losscut := SO_bool ? close + atr_SO : na
if(lo_sig4 and MAX_N >= 4)
if(SO_bool)
strategy.entry("S-Entry4" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry4")
strategy.exit("S-Entry3" ,stop=close+atr_SO)
strategy.exit("S-Entry2" ,stop=close+atr_SO)
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
lo4 := na
losscut := SO_bool ? close + atr_SO : na
if((L_EntrySig or S_EntrySig) and strategy.position_size==0)
countTradingDays := 0
entry1 := close
if(L_EntrySig)
if(SO_bool)
strategy.entry("L-Entry1" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry1")
else
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
losscut := SO_bool ? close - atr_SO : na
if(S_EntrySig)
if(SO_bool)
strategy.entry("S-Entry1" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry1")
else
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
losscut := SO_bool ? close + atr_SO : na
// plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
// plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
// plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
// plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
// plot(countTradingDays ,transp=0 ,title="取引日数")
// plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(losscut ,title="losscut" ,color=red ,transp=0 ,style=linebr)
plot(atr_SO ,transp=0 ,title="ATR_SO")
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
p1 = plot(UPPER ,color=#303F9F ,title="UPPER" ,style=line ,linewidth=2, transp=0)
p2 = plot(LOWER ,color=#4CAF50 ,title="LOWER" ,style=line ,linewidth=2, transp=0)
plot(EMA ,color=red ,title="EMA" ,style=line ,linewidth=2 ,transp=0)
fill(p1 ,p2 ,color=#2196F3 ,title="fill" ,transp=60)
=====
Pine講座60 タートルズ流投資の魔術|トリプル移動平均「タートルズ流投資の魔術
カーティス・フェイス著」
で紹介されている手法の再現。
2つ目です。
意外なことに
超長期の時間軸においては、
3本の移動平均よりも
2本の方が優位であったりします。
ご興味がある方は、
ぜひ、色んな銘柄で比較してみてください。
※ 以前、作成したコードなので、
少し古い部分もあるかと思います
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=3
strategy("Strategy Turtle Triple EMA"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
S = input(150 ,minval=1 ,title="short_")
M = input(250 ,minval=1 ,title="middle_")
L = input(350 ,minval=1 ,title="long_")
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(1 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
S_ = ema(close ,S)
M_ = ema(close ,M)
L_ = ema(close ,L)
atr_LO_ = ema(tr ,LO_len)
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays[1] + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays[1] + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1[1]
entry2 := strategy.position_size==0 ? na : entry2[1]
entry3 := strategy.position_size==0 ? na : entry3[1]
entry4 := strategy.position_size==0 ? na : entry4[1]
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2[1]
lo3 := strategy.position_size==0 ? na : lo3[1]
lo4 := strategy.position_size==0 ? na : lo4[1]
L_EntrySig = S_ >= M_ and S_ >= L_ and M_ >= L_
S_EntrySig = S_ <= M_ and S_ <= L_ and S_ <= L_
lo_sig2 = strategy.position_size>0 ? lo2 < high : strategy.position_size<0 ? lo2 > low : na
lo_sig3 = strategy.position_size>0 ? lo3 < high : strategy.position_size<0 ? lo3 > low : na
lo_sig4 = strategy.position_size>0 ? lo4 < high : strategy.position_size<0 ? lo4 > low : na
if(strategy.position_size != 0)
L_ExitSig = S_ <= M_ and strategy.position_size > 0
S_ExitSig = S_ >= M_ and strategy.position_size < 0
strategy.close_all(when = L_ExitSig or S_ExitSig)
if(L_ExitSig or S_ExitSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
if(strategy.position_size > 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
if(strategy.position_size < 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
if((L_EntrySig or S_EntrySig) and isWork and strategy.position_size==0)
countTradingDays := 0
entry1 := close
if(L_EntrySig)
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
if(S_EntrySig)
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
// plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
// plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
// plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
// plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
// plot(countTradingDays ,transp=0 ,title="取引日数")
// plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
plot(L_ ,color=#303F9F ,title="長期EMA" ,style=line ,linewidth=2, transp=0)
plot(M_ ,color=#4CAF50 ,title="中期EMA" ,style=line ,linewidth=2, transp=0)
plot(S_ ,color=red ,title="短期EMA" ,style=line ,linewidth=2, transp=0)
=====
Pine講座59 タートルズ流投資の魔術|ダブル移動平均ここからは、
タートルズ流投資の魔術
カーティス・フェイス著
で紹介されている手法を
再現していきたいと思います。
1つ目の手法は、
長期のダブル移動平均です。
非常にシンプルな手法ですが、
長期にするだけで意外と勝てます。
※ 以前、作成したコードなので、
少し古い部分もあるかと思います
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=3
strategy("Strategy Turtle Double EMA"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
M = input(50 ,minval=1 ,title="middle_") // 900/6/25 = 6ヶ月
L = input(350 ,minval=1 ,title="long_") // 1800/6/25 = 12ヶ月
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(1 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
M_ = ema(close ,M)
L_ = ema(close ,L)
atr_LO_ = ema(tr ,LO_len)
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays[1] + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays[1] + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1[1]
entry2 := strategy.position_size==0 ? na : entry2[1]
entry3 := strategy.position_size==0 ? na : entry3[1]
entry4 := strategy.position_size==0 ? na : entry4[1]
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2[1]
lo3 := strategy.position_size==0 ? na : lo3[1]
lo4 := strategy.position_size==0 ? na : lo4[1]
L_EntrySig = M_ >= L_
S_EntrySig = M_ <= L_
lo_sig2 = strategy.position_size>0 ? lo2 < high : strategy.position_size<0 ? lo2 > low : na
lo_sig3 = strategy.position_size>0 ? lo3 < high : strategy.position_size<0 ? lo3 > low : na
lo_sig4 = strategy.position_size>0 ? lo4 < high : strategy.position_size<0 ? lo4 > low : na
if(strategy.position_size != 0)
L_ExitSig = S_EntrySig and strategy.position_size > 0
S_ExitSig = L_EntrySig and strategy.position_size < 0
strategy.close_all(when = L_ExitSig or S_ExitSig)
if(L_ExitSig or S_ExitSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
if(strategy.position_size > 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
if(strategy.position_size < 0)
if(lo_sig2 and MAX_N >= 2)
lo2 := na
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
if(lo_sig3 and MAX_N >= 3)
lo3 := na
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
if(lo_sig4 and MAX_N >= 4)
lo4 := na
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
if((L_EntrySig or S_EntrySig) and isWork and strategy.position_size==0)
countTradingDays := 0
entry1 := close
if(L_EntrySig)
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
if(S_EntrySig)
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
plot(countTradingDays ,transp=0 ,title="取引日数")
plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
plot(L_ ,color=#303F9F ,title="長期EMA" ,style=line ,linewidth=2, transp=0)
plot(M_ ,color=#4CAF50 ,title="中期EMA" ,style=line ,linewidth=2, transp=0)
=====
Pine講座58 バックテストにトレンドフィルターを追加するトレンドフィルターといっても、
エントリーの条件を増やすだけです。
今回は、タートルズのトレンドフィルターを参考に
エントリーの条件を追加してみました。
メインのロジックとの相性もありますが、
成績が大幅に向上することもあります。
・余分なトレードが減って損失が減る
・エッジの強化
上記のいずれかを満たすと
成績の向上につながると思います。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
strategy("HullMA Strategy の解説", overlay=true)
n=input(title="period",type=integer,defval=20)
// トレンドフィルターの計算値
_n=input(title="period",type=integer,defval=50)
__n=input(title="period",type=integer,defval=350)
n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))
n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?green:red
// トレンドフィルター用のHullMA①
_n2ma=2*wma(close,round(_n/2))
_nma=wma(close,_n)
_diff=_n2ma-_nma
_sqn=round(sqrt(_n))
_n2ma1=2*wma(close[1],round(_n/2))
_nma1=wma(close[1],_n)
_diff1=_n2ma1-_nma1
_n1=wma(_diff,_sqn)
_n2=wma(_diff1,_sqn)
_c=_n1>_n2?green:red
// トレンドフィルター用のHullMA②
__n2ma=2*wma(close,round(__n/2))
__nma=wma(close,__n)
__diff=__n2ma-__nma
__sqn=round(sqrt(__n))
__n2ma1=2*wma(close[1],round(__n/2))
__nma1=wma(close[1],__n)
__diff1=__n2ma1-__nma1
__n1=wma(__diff,__sqn)
__n2=wma(__diff1,__sqn)
__c=__n1>__n2?green:red
ma=plot(n1,color=c)
// トレンドフィルターも描画
_ma=plot(_n1,color=_c)
__ma=plot(__n1,color=__c)
// and でトレンドフィルターの条件を追加
longCondition = n1>n2 and _n1>__n1
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = n1<n2 and _n1<__n1
if (shortCondition)
strategy.entry("Short", strategy.short)
=====
Pine講座57 バックテスト|HullMA Strategyの解説HullMA は反応が良いのに線形はなめらか。
今まで勉強したことのないインジケーターですが、
ちょうどストラテジーをみつけたので解説してみようと思います。
次回はこのストラテジーに
トレンドフィルターを加えてみたいと思います。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
strategy("HullMA Strategy の解説", overlay=true)
// ハル移動平均の計算期間
n=input(title="period",type=integer,defval=20)
// ハル移動平均の算出
n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))
n2ma1=2*wma(close ,round(n/2))
nma1=wma(close ,n)
diff1=n2ma1-nma1
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?green:red
// ハル移動平均の描画
ma=plot(n1,color=c)
// 売買(シンプルな途転戦略)
longCondition = n1>n2
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = longCondition != true
if (shortCondition)
strategy.entry("Short", strategy.short)
=====
Pine講座56 バックテストで資金管理昨日のコードに
資金管理を追加してみます。
具体的には、
まず以下を設定し
・初期資金
・lot
・1エントリーの資金に対する割合
・複利と単利の別
以下から取引量を算出
・単利の場合、初期資金
・複利の場合、残高
・atr
そして、
エントリー時に取引量を反映
ということを行っています。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy(
title="Strategy Code Example"
,shorttitle="Strategy Code Example"
,overlay=true
,pyramiding=0
,initial_capital=1000000
,default_qty_type=strategy.fixed
,default_qty_value=1)
// Revision: 1
// Author: @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***
// 設定項目と初期値
////
// 移動平均
maFastSource = input(defval=open, title="Fast MA Source")
maFastLength = input(defval=14, title="Fast MA Period", minval=1)
maSlowSource = input(defval=open, title="Slow MA Source")
maSlowLength = input(defval=21, title="Slow MA Period", minval=1)
// リスク管理
tradeInvert = input(defval=false, title="Invert Trade Direction?")
inpTakeProfit = input(defval=1000, title="Take Profit", minval=0)
inpStopLoss = input(defval=200, title="Stop Loss", minval=0)
inpTrailStop = input(defval=200, title="Trailing Stop Loss", minval=0)
inpTrailOffset = input(defval=0, title="Trailing Stop Loss Offset", minval=0)
// 資金管理
lot = input( defval=1000 )
unit_val_pct = input( defval=0.01 )
interest_type = input( defval="compound" ,options= )
// リスク管理の値を整える(0→ na )
// 整えないと挙動がおかしくなる
//(0を渡すと「価格0で決済」みたいなことになる)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// 資金管理
atr = ema( tr ,20 )
unit_val_src = interest_type=="compound" ? strategy.initial_capital + strategy.netprofit : strategy.initial_capital
unit_val = unit_val_src * unit_val_pct
amount = round( unit_val / atr / lot ) * lot
// 移動平均の算出と描画
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)
fast = plot(maFast, title="Fast MA", color=color.green, linewidth=2, style=plot.style_line, transp=50)
slow = plot(maSlow, title="Slow MA", color=color.red, linewidth=2, style=plot.style_line, transp=50)
// エントリーのロジック
// tradeInertがtrueのときはロジックを反転
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
// 売買
// hogehoge()=> で関数化しているけど、挙動は変数とかわらない
enterLong() =>
not tradeDirection[1] and tradeDirection
exitLong() =>
tradeDirection[1] and not tradeDirection
strategy.entry(id="Long", qty=amount, long=true, when=enterLong())
strategy.close(id="Long", when=exitLong())
strategy.entry(id="Short", qty=amount, long=false, when=exitLong())
strategy.close(id="Short", when=enterLong())
// ここで
// 利益確定、ロスカット、トレーリングストップ
// を設定している
strategy.exit("Exit Long", from_entry="Long", profit=useTakeProfit, loss=useStopLoss, trail_points=useTrailStop, trail_offset=useTrailOffset)
strategy.exit("Exit Short", from_entry="Short", profit=useTakeProfit, loss=useStopLoss, trail_points=useTrailStop, trail_offset=useTrailOffset)
=====
Pine講座55 バックテスト|Strategy Code Example - Risk Management の解説JayRogersさんの
Strategy Code Example - Risk Management
の解説です。
前回、前々回に解説して
利益確定やロスカットを含む
リスク管理のサンプルですね。
トレーリングストップや
トレーリングストップのオフセットを
設定することもできます。
明日は、これに取引量を算出する
ロジックも付け足してみようと思います。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)
// Revision: 1
// Author: @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***
// 設定項目と初期値
////
// 移動平均
maFastSource = input(defval = open, title = "Fast MA Source")
maFastLength = input(defval = 14, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = open, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
// リスク管理
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// リスク管理の値を整える(0→ na )
// 整えないと挙動がおかしくなる
//(0を渡すと「価格0で決済」みたいなことになる)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// 移動平均の算出と描画
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)
// エントリーのロジック
// tradeInertがtrueのときはロジックを反転
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
// 売買
// hogehoge()=> で関数化しているけど、挙動は変数とかわらない
enterLong() => not tradeDirection[1] and tradeDirection
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong())
strategy.close(id = "Long", when = exitLong())
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())
// ここで
// 利益確定、ロスカット、トレーリングストップ
// を設定している
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
=====
Pine講座54 期間を区切ってバックテストを行う期間を区切って
バックテストを行うこともできます。
検証を比較する際に、
銘柄によって期間がまちまちだと
正確に行うことができません。
検証の各条件を揃えることで、
Pineスクリプトであってもしっかりと比較することができます。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "STOP LIMIT の解説" ,overlay=true )
is_test_datetime = timestamp(2019,9,5,0,0) <= time and time <= timestamp(2019,9,6,0,0)
bgcolor( is_test_datetime ? color.gray : color.white )
entry1 = close < open
float a = na
float b = na
float c = na
if( entry1 and is_test_datetime and strategy.position_size==0 )
a := high
b := a + tr * 3
c := a - tr * 3
strategy.entry( "Entry1" ,strategy.long ,1 ,stop=a )
strategy.exit( "Exit1" ,"Entry1" ,stop=c ,limit=b )
=====
逆イールド解消で米株に安心感TradingViewではスプレッド計算も簡単にできます。
例えば昨今注目されている米10年債利回りと2年債利回りの金利差。
通常長期債利回りの方が高いはずですが、
この8月、長期債利回りが短期債利回りを下回る逆イールドが発生したことが
米株市場の急落のトリガーとも指摘されました。
(チャート下段の水色のラインチャート)
足下では先週の雇用統計後のパウエルFRB議長の講演を受けて、9月18日FOMCでの利下げは
確実視されるも、利下げ幅が0.5%ではなく0.25%に留まるとの観測が大勢となり
金利低下に歯止めがかかったことで、逆イールドも解消。
これが米株の買戻しを誘っているようです。
このまま逆イールド解消に向かい、安定推移となれば意外とリスクオン相場へと発展、
ダウは史上最高値を更新する可能性もあるかもしれません。
このチャートの下段のように、10年債と2年債の金利差をチャート表示させたい場合は
「US10Y-US02Y」(長期債 引く 短期債)の計算式を入れるだけ。
簡単で便利ですね。
Pine講座52 バックテストで指値注文上位のストラテジーは古いものが多いので、
成行注文のものが多いですね。
version3、version4では
指値注文も使うことができます。
手法によっていは、
すこしだけ有利になるかもしれません。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "STOP LIMIT の解説" ,overlay=true )
entry1 = time[1] < timestamp(2019,9,4,6,00) and time >= timestamp(2019,9,4,6,00)
exit1 = time[1] < timestamp(2019,9,4,9,00) and time >= timestamp(2019,9,4,9,00)
entry2 = time[1] < timestamp(2019,9,4,12,00) and time >= timestamp(2019,9,4,12,00)
diff = time - time[1]
if( entry1 )
line.new( bar_index ,high+tr*5 ,bar_index ,low-tr*5 ,color=color.red )
strategy.entry( "Entry1" ,strategy.long ,1 ,when=entry1 )
if( exit1 )
line.new( bar_index ,high+tr*2 ,bar_index ,low-tr*2 ,color=color.red )
strategy.close( "Entry1" ,exit1 )
if( entry2 )
line.new( bar_index ,high+tr*5 ,bar_index ,low-tr*5 ,color=color.red )
strategy.entry( "Entry2" ,strategy.long ,1 )
line.new( time ,close-tr*3 ,time+diff*30 ,close-tr*3 ,xloc=xloc.bar_time ,color=color.red )
line.new( time ,close+tr*3 ,time+diff*30 ,close+tr*3 ,xloc=xloc.bar_time ,color=color.red )
strategy.exit( "Exit2" ,"Entry2" ,stop=close-tr*3 ,limit=close+tr*3 )
=====
Pine講座53 バックテストでエントリーも指値注文昨日の続きですが、
もちろんエントリーも指値(逆指値)で入ることができます。
・ブレイクアウト系
・逆張り系
・価格の明確な利益確定
・明確なロスカット
このあたりは、
ちゃんと指値注文を使ってあげると
少しだけ幸せになれるかもしれません。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=4
strategy( "STOP LIMIT の解説" ,overlay=true )
entry1 = time[1] < timestamp(2019,9,5,6,00) and time >= timestamp(2019,9,5,6,00)
diff = time - time[1]
float entry_price = na
float exit_limit = na
float exit_stop = na
if( entry1 )
entry_price := high
exit_limit := entry_price + tr * 3
exit_stop := entry_price - tr * 3
line.new( time ,entry_price ,time+diff*30 ,entry_price ,xloc=xloc.bar_time ,color=color.red )
line.new( time ,exit_limit ,time+diff*30 ,exit_limit ,xloc=xloc.bar_time ,color=color.red )
line.new( time ,exit_stop ,time+diff*30 ,exit_stop ,xloc=xloc.bar_time ,color=color.red )
strategy.entry( "Entry1" ,strategy.long ,1 ,stop=entry_price )
strategy.exit( "Exit1" ,"Entry1" ,stop=exit_stop ,limit=exit_limit )
=====
Pine講座㊿ バックテスト|ZigZag PA Strategy V4.1 の解説(パターンとフィボナッチによる売買)すごいストラテジーを見つけました。
1.ジグザグを算出
2.フィボナッチを算出
3.ジグザグでパターンを認識
4.パターンとフィボナッチの条件を満たせばエントリー
5.フィボナッチによる利確と損切り
これをひとつのストラテジーで実現しています。
これはめちゃくちゃ勉強になりました。
エリオット波動とかパターン分析の良いところは、
・すばやいエントリーと決済
・明確な値幅が算出できる
あたりだと考えています。
価格を加工すればするほど、
それをエントリーや決済の基準にするのは
難しくなるイメージです。
※ 解説はコードの中で
※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)
=====
//@version=2
// ストラテジーの宣言
// ピラミッティングなし、通貨:usd、元金10万ドル
strategy(title='[STRATEGY][RS]ZigZag PA Strategy V4.1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000, currency=currency.USD)
//
// 設定項目
////
// 平均足を使うか
useHA = input(false, title='Use Heikken Ashi Candles')
// 代わりの時間軸を使うか(Alt=altemate?)
useAltTF = input(true, title='Use Alt Timeframe')
tf = input('60', title='Alt Timeframe')
// チャートに表示するしない
showPatterns = input(true, title='Show Patterns')
showFib0000 = input(title='Display Fibonacci 0.000:', type=bool, defval=true)
showFib0236 = input(title='Display Fibonacci 0.236:', type=bool, defval=true)
showFib0382 = input(title='Display Fibonacci 0.382:', type=bool, defval=true)
showFib0500 = input(title='Display Fibonacci 0.500:', type=bool, defval=true)
showFib0618 = input(title='Display Fibonacci 0.618:', type=bool, defval=true)
showFib0764 = input(title='Display Fibonacci 0.764:', type=bool, defval=true)
showFib1000 = input(title='Display Fibonacci 1.000:', type=bool, defval=true)
// ジグザグを算出する関数を作成
// 頂点にあたるときのみ、その値を返す
// 頂点以外のときはnaを返す
// ロジック:反対の足が2本連続 → 転換とする
////
zigzag() =>
_isUp = close >= open
_isDown = close <= open
_direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
_zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
// ジグザグの算出と描画
// 平均足と時間軸の設定はここで反映
////
_ticker = useHA ? heikenashi(tickerid) : tickerid
sz = useAltTF ? (change(time(tf)) != 0 ? security(_ticker, tf, zigzag()) : na) : zigzag()
plot(sz, title='zigzag', color=black, linewidth=2)
//
// パターンを識別する
////
// ジグザグが発生したときのジグザグの値を取得
x = valuewhen(sz, sz, 4)
a = valuewhen(sz, sz, 3)
b = valuewhen(sz, sz, 2) //3つ前
c = valuewhen(sz, sz, 1) //前々回
d = valuewhen(sz, sz, 0) //前回
xab = (abs(b-a)/abs(x-a))
xad = (abs(a-d)/abs(x-a))
abc = (abs(b-c)/abs(a-b))
bcd = (abs(c-d)/abs(b-c))
// 5つの点の比率からパターンを判断する関数
isBat(_mode)=>
_xab = xab >= 0.382 and xab <= 0.5
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 1.618 and bcd <= 2.618
_xad = xad <= 0.618 and xad <= 1.000 // 0.886
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAntiBat(_mode)=>
_xab = xab >= 0.500 and xab <= 0.886 // 0.618
_abc = abc >= 1.000 and abc <= 2.618 // 1.13 --> 2.618
_bcd = bcd >= 1.618 and bcd <= 2.618 // 2.0 --> 2.618
_xad = xad >= 0.886 and xad <= 1.000 // 1.13
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAltBat(_mode)=>
_xab = xab <= 0.382
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 2.0 and bcd <= 3.618
_xad = xad <= 1.13
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isButterfly(_mode)=>
_xab = xab <= 0.786
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 1.618 and bcd <= 2.618
_xad = xad >= 1.27 and xad <= 1.618
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAntiButterfly(_mode)=>
_xab = xab >= 0.236 and xab <= 0.886 // 0.382 - 0.618
_abc = abc >= 1.130 and abc <= 2.618 // 1.130 - 2.618
_bcd = bcd >= 1.000 and bcd <= 1.382 // 1.27
_xad = xad >= 0.500 and xad <= 0.886 // 0.618 - 0.786
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isABCD(_mode)=>
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 1.13 and bcd <= 2.618
_abc and _bcd and (_mode == 1 ? d < c : d > c)
isGartley(_mode)=>
_xab = xab >= 0.5 and xab <= 0.618 // 0.618
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 1.13 and bcd <= 2.618
_xad = xad >= 0.75 and xad <= 0.875 // 0.786
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAntiGartley(_mode)=>
_xab = xab >= 0.500 and xab <= 0.886 // 0.618 -> 0.786
_abc = abc >= 1.000 and abc <= 2.618 // 1.130 -> 2.618
_bcd = bcd >= 1.500 and bcd <= 5.000 // 1.618
_xad = xad >= 1.000 and xad <= 5.000 // 1.272
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isCrab(_mode)=>
_xab = xab >= 0.500 and xab <= 0.875 // 0.886
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 2.000 and bcd <= 5.000 // 3.618
_xad = xad >= 1.382 and xad <= 5.000 // 1.618
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAntiCrab(_mode)=>
_xab = xab >= 0.250 and xab <= 0.500 // 0.276 -> 0.446
_abc = abc >= 1.130 and abc <= 2.618 // 1.130 -> 2.618
_bcd = bcd >= 1.618 and bcd <= 2.618 // 1.618 -> 2.618
_xad = xad >= 0.500 and xad <= 0.750 // 0.618
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isShark(_mode)=>
_xab = xab >= 0.500 and xab <= 0.875 // 0.5 --> 0.886
_abc = abc >= 1.130 and abc <= 1.618 //
_bcd = bcd >= 1.270 and bcd <= 2.240 //
_xad = xad >= 0.886 and xad <= 1.130 // 0.886 --> 1.13
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isAntiShark(_mode)=>
_xab = xab >= 0.382 and xab <= 0.875 // 0.446 --> 0.618
_abc = abc >= 0.500 and abc <= 1.000 // 0.618 --> 0.886
_bcd = bcd >= 1.250 and bcd <= 2.618 // 1.618 --> 2.618
_xad = xad >= 0.500 and xad <= 1.250 // 1.130 --> 1.130
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
is5o(_mode)=>
_xab = xab >= 1.13 and xab <= 1.618
_abc = abc >= 1.618 and abc <= 2.24
_bcd = bcd >= 0.5 and bcd <= 0.625 // 0.5
_xad = xad >= 0.0 and xad <= 0.236 // negative?
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isWolf(_mode)=>
_xab = xab >= 1.27 and xab <= 1.618
_abc = abc >= 0 and abc <= 5
_bcd = bcd >= 1.27 and bcd <= 1.618
_xad = xad >= 0.0 and xad <= 5
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isHnS(_mode)=>
_xab = xab >= 2.0 and xab <= 10
_abc = abc >= 0.90 and abc <= 1.1
_bcd = bcd >= 0.236 and bcd <= 0.88
_xad = xad >= 0.90 and xad <= 1.1
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isConTria(_mode)=>
_xab = xab >= 0.382 and xab <= 0.618
_abc = abc >= 0.382 and abc <= 0.618
_bcd = bcd >= 0.382 and bcd <= 0.618
_xad = xad >= 0.236 and xad <= 0.764
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
isExpTria(_mode)=>
_xab = xab >= 1.236 and xab <= 1.618
_abc = abc >= 1.000 and abc <= 1.618
_bcd = bcd >= 1.236 and bcd <= 2.000
_xad = xad >= 2.000 and xad <= 2.236
_xab and _abc and _bcd and _xad and (_mode == 1 ? d < c : d > c)
// 売りパターンが出現したところに印を表示
plotshape(not showPatterns ? na : isABCD(-1) and not isABCD(-1)[1], text=" AB=CD", title='Bear ABCD', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0, offset=-2)
plotshape(not showPatterns ? na : isBat(-1) and not isBat(-1)[1], text="Bat", title='Bear Bat', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0, offset=-2)
plotshape(not showPatterns ? na : isAntiBat(-1) and not isAntiBat(-1)[1], text="Anti Bat", title='Bear Anti Bat', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0, offset=-2)
plotshape(not showPatterns ? na : isAltBat(-1) and not isAltBat(-1)[1], text="Alt Bat", title='Bear Alt Bat', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isButterfly(-1) and not isButterfly(-1)[1], text="Butterfly", title='Bear Butterfly', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isAntiButterfly(-1) and not isAntiButterfly(-1)[1], text="Anti Butterfly", title='Bear Anti Butterfly', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isGartley(-1) and not isGartley(-1)[1], text="Gartley", title='Bear Gartley', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isAntiGartley(-1) and not isAntiGartley(-1)[1], text="Anti Gartley", title='Bear Anti Gartley', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isCrab(-1) and not isCrab(-1)[1], text="Crab", title='Bear Crab', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isAntiCrab(-1) and not isAntiCrab(-1)[1], text="Anti Crab", title='Bear Anti Crab', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isShark(-1) and not isShark(-1)[1], text="Shark", title='Bear Shark', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isAntiShark(-1) and not isAntiShark(-1)[1], text="Anti Shark", title='Bear Anti Shark', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : is5o(-1) and not is5o(-1)[1], text="5-O", title='Bear 5-O', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isWolf(-1) and not isWolf(-1)[1], text="Wolf Wave", title='Bear Wolf Wave', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isHnS(-1) and not isHnS(-1)[1], text="Head and Shoulders", title='Bear Head and Shoulders', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isConTria(-1) and not isConTria(-1)[1], text="Contracting Triangle", title='Bear Contracting triangle', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
plotshape(not showPatterns ? na : isExpTria(-1) and not isExpTria(-1)[1], text="Expanding Triangle", title='Bear Expanding Triangle', style=shape.labeldown, color=maroon, textcolor=white, location=location.top, transp=0)
// 買いパターンが出現したところに印を表示
plotshape(not showPatterns ? na : isABCD(1) and not isABCD(1)[1], text="AB=CD ", title='Bull ABCD', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isBat(1) and not isBat(1)[1], text="Bat", title='Bull Bat', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAntiBat(1) and not isAntiBat(1)[1], text="Anti Bat", title='Bull Anti Bat', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAltBat(1) and not isAltBat(1)[1], text="Alt Bat", title='Bull Alt Bat', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isButterfly(1) and not isButterfly(1)[1], text="Butterfly", title='Bull Butterfly', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAntiButterfly(1) and not isAntiButterfly(1)[1], text="Anti Butterfly", title='Bull Anti Butterfly', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isGartley(1) and not isGartley(1)[1], text="Gartley", title='Bull Gartley', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAntiGartley(1) and not isAntiGartley(1)[1], text="Anti Gartley", title='Bull Anti Gartley', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isCrab(1) and not isCrab(1)[1], text="Crab", title='Bull Crab', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAntiCrab(1) and not isAntiCrab(1)[1], text="Anti Crab", title='Bull Anti Crab', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isShark(1) and not isShark(1)[1], text="Shark", title='Bull Shark', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isAntiShark(1) and not isAntiShark(1)[1], text="Anti Shark", title='Bull Anti Shark', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : is5o(1) and not is5o(1)[1], text="5-O", title='Bull 5-O', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isWolf(1) and not isWolf(1)[1], text="Wolf Wave", title='Bull Wolf Wave', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isHnS(1) and not isHnS(1)[1], text="Head and Shoulders", title='Bull Head and Shoulders', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isConTria(1) and not isConTria(1)[1], text="Contracting Triangle", title='Bull Contracting Triangle', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
plotshape(not showPatterns ? na : isExpTria(1) and not isExpTria(1)[1], text="Expanding Triangle", title='Bull Expanding Triangle', style=shape.labelup, color=green, textcolor=white, location=location.bottom, transp=0)
//前回と前回のジグザグの値からフィボナッチを描画
fib_range = abs(d-c)
fib_0000 = not showFib0000 ? na : d > c ? d-(fib_range*0.000):d+(fib_range*0.000)
fib_0236 = not showFib0236 ? na : d > c ? d-(fib_range*0.236):d+(fib_range*0.236)
fib_0382 = not showFib0382 ? na : d > c ? d-(fib_range*0.382):d+(fib_range*0.382)
fib_0500 = not showFib0500 ? na : d > c ? d-(fib_range*0.500):d+(fib_range*0.500)
fib_0618 = not showFib0618 ? na : d > c ? d-(fib_range*0.618):d+(fib_range*0.618)
fib_0764 = not showFib0764 ? na : d > c ? d-(fib_range*0.764):d+(fib_range*0.764)
fib_1000 = not showFib1000 ? na : d > c ? d-(fib_range*1.000):d+(fib_range*1.000)
plot(title='Fib 0.000', series=fib_0000, color=fib_0000 != fib_0000[1] ? na : black)
plot(title='Fib 0.236', series=fib_0236, color=fib_0236 != fib_0236[1] ? na : red)
plot(title='Fib 0.382', series=fib_0382, color=fib_0382 != fib_0382[1] ? na : olive)
plot(title='Fib 0.500', series=fib_0500, color=fib_0500 != fib_0500[1] ? na : lime)
plot(title='Fib 0.618', series=fib_0618, color=fib_0618 != fib_0618[1] ? na : teal)
plot(title='Fib 0.764', series=fib_0764, color=fib_0764 != fib_0764[1] ? na : blue)
plot(title='Fib 1.000', series=fib_1000, color=fib_1000 != fib_1000[1] ? na : black)
// 代わりの時間軸を使っている場合、その足が更新されるタイミングで背景に黒を入れる
bgcolor(not useAltTF ? na : change(time(tf)) != 0 ? black : na)
//
// 売買のロジック
////
//「fib_rangeに対する指定された比率の幅」を返す関数
f_last_fib( _rate ) => d > c ? d - ( fib_range * _rate ) : d + ( fib_range * _rate )
// ターゲット1の設定項目と初期値
////
// 上から
// 取引量
// エントリーの基準(0.236を超えていない)
// 利益確定幅
// ロスカット幅
target01_trade_size = input(title='Target 1 - Trade size:', type=float, defval=10000.00)
target01_ew_rate = input(title='Target 1 - Fib. Rate to use for Entry Window:', type=float, defval=0.236)
target01_tp_rate = input(title='Target 1 - Fib. Rate to use for TP:', type=float, defval=0.618)
target01_sl_rate = input(title='Target 1 - Fib. Rate to use for SL:', type=float, defval=-0.236)
// ターゲット2の設定
////
target02_active = input(title='Target 2 - Active?', type=bool, defval=false)
target02_trade_size = input(title='Target 2 - Trade size:', type=float, defval=10000.00)
target02_ew_rate = input(title='Target 2 - Fib. Rate to use for Entry Window:', type=float, defval=0.236)
target02_tp_rate = input(title='Target 2 - Fib. Rate to use for TP:', type=float, defval=1.618)
target02_sl_rate = input(title='Target 2 - Fib. Rate to use for SL:', type=float, defval=-0.236)
// 買いのパターン
buy_patterns_00 = isABCD(1) or isBat(1) or isAltBat(1) or isButterfly(1) or isGartley(1) or isCrab(1) or isShark(1) or is5o(1) or isWolf(1) or isHnS(1) or isConTria(1) or isExpTria(1)
buy_patterns_01 = isAntiBat(1) or isAntiButterfly(1) or isAntiGartley(1) or isAntiCrab(1) or isAntiShark(1)
// 売りのパターン
sel_patterns_00 = isABCD(-1) or isBat(-1) or isAltBat(-1) or isButterfly(-1) or isGartley(-1) or isCrab(-1) or isShark(-1) or is5o(-1) or isWolf(-1) or isHnS(-1) or isConTria(-1) or isExpTria(-1)
sel_patterns_01 = isAntiBat(-1) or isAntiButterfly(-1) or isAntiGartley(-1) or isAntiCrab(-1) or isAntiShark(-1)
// ターゲット1の売買
////
// 買いのパターン & エントリーの基準を満たす → 買いエントリー
// 利確・損切りを超える → 買いの決済
target01_buy_entry = (buy_patterns_00 or buy_patterns_01) and close <= f_last_fib(target01_ew_rate)
target01_buy_close = high >= f_last_fib(target01_tp_rate) or low <= f_last_fib(target01_sl_rate)
strategy.entry('target01_buy', long=strategy.long, qty=target01_trade_size, comment='buy 01', when=target01_buy_entry)
strategy.close('target01_buy', when=target01_buy_close)
// 売りのパターン & エントリーの基準を満たす → 売りエントリー
// 利確・損切りを超える → 売りの決済
target01_sel_entry = (sel_patterns_00 or sel_patterns_01) and close >= f_last_fib(target01_ew_rate)
target01_sel_close = low <= f_last_fib(target01_tp_rate) or high >= f_last_fib(target01_sl_rate)
strategy.entry('target01_sell', long=strategy.short, qty=target01_trade_size, comment='sell 01', when=target01_sel_entry)
strategy.close('target01_sell', when=target01_sel_close)
// ターゲット2の売買
////
target02_buy_entry = target02_active and (buy_patterns_00 or buy_patterns_01) and close <= f_last_fib(target02_ew_rate)
target02_buy_close = target02_active and high >= f_last_fib(target02_tp_rate) or low <= f_last_fib(target02_sl_rate)
strategy.entry('target02_buy', long=strategy.long, qty=target02_trade_size, comment='buy 02', when=target02_buy_entry)
strategy.close('target02_buy', when=target02_buy_close)
target02_sel_entry = target02_active and (sel_patterns_00 or sel_patterns_01) and close >= f_last_fib(target02_ew_rate)
target02_sel_close = target02_active and low <= f_last_fib(target02_tp_rate) or high >= f_last_fib(target02_sl_rate)
strategy.entry('target02_sell', long=strategy.short, qty=target02_trade_size, comment='sell 02', when=target02_sel_entry)
strategy.close('target02_sell', when=target02_sel_close)
=====
Pine講座51 バックテストにおけるSecurity関数について昨日のストラテジーが、あまりにも真っ当で
それにも関わらず "すごそう" に見えるので
少し精査をしています。
・15分足の検証
・1時間足のジグザグをもとにフォーメーション分析
・フォーメーションによって売買
・フィボナッチで利確・損切り
・1時間足の価格を取得するのに Security( ) を使っている
この Security( ) が曲者でして、
Pineスクリプト上で、価格を先読みすることができてしまいます。
以下で紹介するコードの
lookahead=barmerge.lookahead_on
の部分ですね。
ここが「on」になっていると
先読みできてしまう状態です。
昨日のコードはonになってしまっている状態で、
offにするにはversion3以上の検証を行う必要があります。
しかし、あのコードはversion2までしか動かないのですね。
zigzagの箇所がやや複雑なので、
わりとガッツリ作り直す必要があります。
=====
//@version=4
study( "Security() の解説" ,overlay=true )
plot( security( syminfo.tickerid ,"240" ,high ,lookahead=barmerge.lookahead_off ) ,color=color.red )
plot( security( syminfo.tickerid ,"240" ,high ,lookahead=barmerge.lookahead_on ) ,color=color.blue )
plot( change(time("240")) != 0 ? security( syminfo.tickerid ,"240" ,high ,lookahead=barmerge.lookahead_off ) : na ,color=color.green ,style=plot.style_linebr ,linewidth=3 )
plot( change(time("240")) != 0 ? security( syminfo.tickerid ,"240" ,high ,lookahead=barmerge.lookahead_on ) : na ,color=color.purple ,style=plot.style_linebr ,linewidth=3 )
=====