ノロの価格チャネル戦略 v1.1

作者: リン・ハーンチャオチャン,日付: 2023年10月24日 10:59:38
タグ:

img

概要

Noroの価格チャネル戦略 (Price Channel Strategy) v1.1は,価格チャネルと価格方向の変化に基づいたトレンドトレーディング戦略である.この戦略は,チャネルからの価格ブレイクシグナルを識別するための価格チャネル指標と急速RSI指標を組み合わせ,ロング/ショートポジションを確立するための連続した赤/緑色のキャンドルカラー逆転信号とともに,この戦略は,短期間の市場変動からのノイズを回避しながら,中期から長期間のトレンドの方向性を把握することを目的としている.

戦略の論理

この戦略は,まず,中値チャネルを構築するために,一定の期間における最高値と最低値の平均を計算する.価格が下からチャネルを突破すると,それは長い信号とみなされる.価格が上からチャネルを下に突破すると,それはショート信号とみなされる.

同時,戦略には,2つの補助規則が組み込まれている:速いRSIとキャンドルカラー.速いRSIが25%未満の場合,過剰販売状態を示し,価格がリバウンドする可能性がある.チャネル上のブレイクアウトとともに,これはより強いロング信号を生成する.対照的に,速いRSIが75%を超える場合,それは過剰購入状態を示し,価格が低下する可能性がある.チャネルの下の破綻とともに,これはより強いショート信号を生成する.さらに,戦略は最新の2つのキャンドルに対するキャンドルカラーの変化を追跡する. 2つの連続した赤いキャンドルがショート信号を強化し,2つの連続した緑色のキャンドルがロング信号を強化する.

これらの3つの信号指標を組み合わせることで,戦略は中長期のトレンドを効果的に特定し,それに応じてポジションを確立することができます.ポジションの方向が最新のキャンドルの色と衝突する場合,既存のポジションが閉鎖されるトレンド逆転とみなされます.

利点

この戦略の最大の利点は,トレンド方向を決定し,短期間の市場変動による騒音を避けるために複数の指標を組み込むことです.特に:

  1. 価格チャネルは,トレンドの方向性と強さを明確に示しています.チャネル帯のブレイクは,強い信号を持つトレンドの新しい段階を表しています.

  2. 急速なRSIは,ターニングポイントでトレンドを追いかけるのを避けるために,過買い/過売り状態を判断します.過買い状態で購入し,過買い状態で販売することを提案します.

  3. キャンドルカラー検証はさらにトレンド持続性を検証します.色が変わるとポジションは閉鎖されます.

  4. 戦略は2つの連続した同じ色のキャンドルでチャネルを壊し 短期振動からの誤った信号を避けるだけです

  5. シンプルな平均ストップロスは,キャンドルの色が変わるとポジションを閉じ,損失を効果的に最小限に抑える.

リスク

この戦略には注意すべきリスクもあります.

  1. 価格チャネルパラメータの設定が正しくない場合,チャネルが幅も狭すぎたり,トレンド変化ポイントが欠落したり,誤った信号が過剰に発生したりすることがあります.

  2. RSI パラメータの設定が正しくない場合,過剰購入/過剰販売状態を正確に特定できず,逆転の機会が失われる可能性があります.

  3. 簡単なストップ・ロスのメカニズムは,不安定なトレンドに敏感すぎ,過剰なポジション開閉を引き起こす可能性があります.

  4. 価格チャネルを突破した後の実際のトレンドの継続を予測できず,損失を拡大させる.

  5. 市場が急激に変化し 巨額の損失をもたらす ブラック・スワン事件に適応できないのです

増進 の 機会

戦略の強化のためのいくつかの主要な機会は以下のとおりです.

  1. 価格チャネルのパラメータを動的に調整し,異なる期間や市場における変動により良く適応します.

  2. RSI パラメータを調整するための波動性測定を組み込むこと,波動性が高いときの敏感性を低下させ,波動性が低いときの敏感性を増加させる.

  3. トレイルストップ・メカニズムとトレンド・ボラティリティに基づくストップ・レベルを追加し,過度に敏感なストップ・アウトを避ける.

  4. 誤ったブレイクを避けるため,ブレイク強さと下落/上昇差の識別を改善する.

  5. 歴史的なデータトレーニングモデルを組み込み,高い確率のトレンドターニングポイントを推定し,入力精度を向上させる.

  6. ポジションサイズモデルを最適化し,リスク条件に基づいてアロケーションを動的に調整する.

結論

Noroの価格チャネル戦略 (Price Channel Strategy) v1.1は,単純で実践的なトレンドフォロー戦略である.中長期のトレンド方向性を特定するための複数の指標を組み込み,比較的慎重なエントリールールを確立している.ストップ損失メカニズムやダイナミックパラメータチューニングなどの分野ではさらなる強化の余地がある.しかし,全体的な論理はシンプルで明確で,特に初心者にとって定量取引に簡単に実装できる.パラメータチューニングとメカニズム最適化により,安定した信頼性の高い取引システムになることができます.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.1", shorttitle = "Price Channel str 1.1", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usecol = input(true, defval = true, title = "Use color strategy")
usersi = input(true, defval = true, title = "Use RSI strategy")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel")
showcl = input(true, defval = true, title = "Show center-line")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and usecol
dn1 = gbars and close < center and usecol
up2 = fastrsi < 25 and close > center and usersi
dn2 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.equity / close * lev

//Trading
if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

もっと