
この策略は,価格チャネルに基づくの突破策略と名付けられており,その主な考えは,価格チャネルを使用して市場の傾向と方向を判断し,価格がチャネルを突破するときにポジションを確立することです.それは,まず価格のチャネル範囲を図り,次にK線が連続して2つの赤いまたは緑のK線が現れるかどうかを判断し,もし最後のK線がチャネルの半分以上を突破してチャネルの外に閉ざされれば,買入または売り出しシグナルを生成します.
この戦略は,過去一定期間の最高価格と最低価格を, highest ((() と lowest ((() の関数を使って計算し,価格チャネルの上下軌道を決定する.チャネルの中線は上下軌道の平均値として定義される.K線実体の大小を計算し,SMAを平滑化して,最後のK線実体が平均実体より半分大きいかどうかを判断する.また,最後の2つのK線が同方向であるかどうかを判断する.これらの条件が満たされると,つまり,買入/出入シグナルが生み出され,価格がチャネルの方向に戻るとき,ポジションを平坦にする.
これは,価格チャネルを活用してトレンドを判断する突破策であり,以下の利点があります.
価格チャネルは,全体的なトレンドの方向性を判断するために使用され,市場騒音を効果的にフィルターすることができます.
連続した2本のK線が同方向の突破通路を示し,動力が強く,突破成功率が高い.
K線実体が平均実体の半分以上であると判断すると,偽突破の欺瞞を避けることができる.
戦略の論理は単純で理解しやすく,実行しやすい.
経路周期,取引品種,取引時間などのカスタマイズ可能なパラメータは,適応性が高い.
この戦略にはいくつかの潜在的リスクがあります.
突破失敗の可能性は残っており,損害を招く可能性がある.
状況が激しく波動すると,通路判断は失効するかもしれない.
損失を抑制する仕組みがなく, 損失を効果的にコントロールできない.
取引のルールがシンプルで, 過剰適合の危険性があります.
市場環境がより複雑になるのに適応できない
対応方法は以下の通りです.
突破の成功率を向上させるためのパラメータを最適化する
波動性指数に加入し,震動を回避する.
モバイル・ストップ・レジを追加した.
複合性テストを行い,適合性を確認する.
機械学習のアルゴリズムを増やし,戦略の適応性を向上させる.
この戦略の最適化方向は以下の通りです.
止損メカニズムを増やし,リスクをよりよく制御する.価格の逆転止損を設定することも,ATRなどの指標を使用して移動止損を設定することもできます.
経路周期,突破幅度パラメータなどの最適化パラメータ.遺伝的アルゴリズム,格子検索などの方法によって最適なパラメータを検索することができる.
フィルタリング条件を追加し,突破の確実性を高めます.例えば,取引量と組み合わせて突破を確認できます.
機械学習モデルを追加し,より多くのデータを活用して,戦略の予測力と適応性を向上させる.LSTMなどの深層学習は,より複雑な状況パターンを捉えることができる.
組み合わせの最適化を行って,異なるタイプの突破策を組み合わせて正交配を実現し,類似性を減らす.
この戦略は,全体として,価格通路判断の傾向に基づいて,突破信号を発見する定量戦略である.それは,判断の傾向があり,突破を確認する利点があるが,ある程度の偽の突破のリスクも存在する.パラメータ最適化,ストップ損失設定,条件フィルターを追加するなどの方法によって戦略を改良して,リスクを減らすことができる.また,機械学習モデルの加入は,戦略の予測能力をさらに強化することができる.全体として,これは,深入な研究と改善に値する潜在的定量戦略の道である.
/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 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.0", shorttitle = "Price Channel str 1.0", 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")
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
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
//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
if exit
strategy.close_all()