Noro
この戦略は,まず,中値チャネルを構築するために,一定の期間における最高値と最低値の平均を計算する.価格が下からチャネルを突破すると,それは長い信号とみなされる.価格が上からチャネルを下に突破すると,それはショート信号とみなされる.
同時,戦略には,2つの補助規則が組み込まれている:速いRSIとキャンドルカラー.速いRSIが25%未満の場合,過剰販売状態を示し,価格がリバウンドする可能性がある.チャネル上のブレイクアウトとともに,これはより強いロング信号を生成する.対照的に,速いRSIが75%を超える場合,それは過剰購入状態を示し,価格が低下する可能性がある.チャネルの下の破綻とともに,これはより強いショート信号を生成する.さらに,戦略は最新の2つのキャンドルに対するキャンドルカラーの変化を追跡する. 2つの連続した赤いキャンドルがショート信号を強化し,2つの連続した緑色のキャンドルがロング信号を強化する.
これらの3つの信号指標を組み合わせることで,戦略は中長期のトレンドを効果的に特定し,それに応じてポジションを確立することができます.ポジションの方向が最新のキャンドルの色と衝突する場合,既存のポジションが閉鎖されるトレンド逆転とみなされます.
この戦略の最大の利点は,トレンド方向を決定し,短期間の市場変動による騒音を避けるために複数の指標を組み込むことです.特に:
価格チャネルは,トレンドの方向性と強さを明確に示しています.チャネル帯のブレイクは,強い信号を持つトレンドの新しい段階を表しています.
急速なRSIは,ターニングポイントでトレンドを追いかけるのを避けるために,過買い/過売り状態を判断します.過買い状態で購入し,過買い状態で販売することを提案します.
キャンドルカラー検証はさらにトレンド持続性を検証します.色が変わるとポジションは閉鎖されます.
戦略は2つの連続した同じ色のキャンドルでチャネルを壊し 短期振動からの誤った信号を避けるだけです
シンプルな平均ストップロスは,キャンドルの色が変わるとポジションを閉じ,損失を効果的に最小限に抑える.
この戦略には注意すべきリスクもあります.
価格チャネルパラメータの設定が正しくない場合,チャネルが幅も狭すぎたり,トレンド変化ポイントが欠落したり,誤った信号が過剰に発生したりすることがあります.
RSI パラメータの設定が正しくない場合,過剰購入/過剰販売状態を正確に特定できず,逆転の機会が失われる可能性があります.
簡単なストップ・ロスのメカニズムは,不安定なトレンドに敏感すぎ,過剰なポジション開閉を引き起こす可能性があります.
価格チャネルを突破した後の実際のトレンドの継続を予測できず,損失を拡大させる.
市場が急激に変化し 巨額の損失をもたらす ブラック・スワン事件に適応できないのです
戦略の強化のためのいくつかの主要な機会は以下のとおりです.
価格チャネルのパラメータを動的に調整し,異なる期間や市場における変動により良く適応します.
RSI パラメータを調整するための波動性測定を組み込むこと,波動性が高いときの敏感性を低下させ,波動性が低いときの敏感性を増加させる.
トレイルストップ・メカニズムとトレンド・ボラティリティに基づくストップ・レベルを追加し,過度に敏感なストップ・アウトを避ける.
誤ったブレイクを避けるため,ブレイク強さと下落/上昇差の識別を改善する.
歴史的なデータトレーニングモデルを組み込み,高い確率のトレンドターニングポイントを推定し,入力精度を向上させる.
ポジションサイズモデルを最適化し,リスク条件に基づいてアロケーションを動的に調整する.
Noro
/*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()