定量的な突破アップトレンド基準戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-21 10:58:01
タグ:

img

概要

この戦略は,単純な移動平均線でトレンド方向を決定し,抵抗線とサポート線で突破信号を形成する,長期的なホールディング戦略である.価格ピボットハイとピボットローポイントを計算し,抵抗線とサポートラインをプロットし,価格がレジスタンスラインを突破するとロングになり,価格がサポートラインを突破するとポジションを閉じる.この戦略は明らかなトレンドを持つ株式に適しており,良いリスク・リターン比率を得ることができます.

戦略原則

  1. 傾向を決定するためのベースラインとして20日間の単純な移動平均線を計算する.
  2. ユーザ入力パラメータに基づいてピボット高値とピボット低値を計算する
  3. ピホット・ハイとピホット・ローのポイントに基づいて抵抗とサポートラインをグラフ化します
  4. 閉じる価格がレジスタンスラインより高くなったときにロングに行く.
  5. サポートラインがレジスタンスラインを下回るとポジションを閉じる

この戦略は,全体的なトレンド方向を決定するために単純な移動平均を使用し,その後,キーポイントブレークアウトを使用して取引信号を生成します.これは典型的なブレークアウト戦略です.キーポイントとトレンドを判断することで,偽のブレークアウトを効果的にフィルタリングすることができます.

利点分析

  1. この戦略には十分な機会があり,高い変動率の株に適しており,傾向を容易に把握できます
  2. ロングポジションの良質なリスク管理,高いリスク・リターン比
  3. 誤った突破のリスクを避けるために突破信号を使用
  4. パラメータをカスタマイズし,高度な適応性

リスク分析

  1. パラメータ最適化に依存します,不適切なパラメータは,偽のブレイクの可能性を増加します
  2. 突破信号の遅延,いくつかの機会を逃す可能性があります
  3. 変動する市場では 簡単に止められる
  4. サポートラインを間に合うように調整しない場合,損失が発生する可能性があります.

リスクは,ライブ取引を通じてパラメータを最適化し,ストップ・ロスト/テイク・プロフィート戦略を組み込むことで軽減できます.

オプティマイゼーションの方向性

  1. 移動平均期間のパラメータを最適化
  2. 抵抗とサポートラインのパラメータを最適化
  3. ストップ・ロスト/得益戦略を追加する
  4. 突破の確認メカニズムの強化
  5. 取引量と他の指標をフィルターする信号

概要

この戦略は,トレンドトレーダーに適したパラメータ最適化と流動性に基づいた典型的なブレイクアウト戦略である.基準枠として,ストップ・ロスト/テイク・プロフィート,リスク削減と安定性の向上のためのシグナルフィルタリングなどのメカニズムを追加することによって,実際のニーズに応じて拡張することができる.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CheatCode1

//@version=5
strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity)


length = input.int(20, minval=1)
src = input(close, title="Source")
basis = ta.sma(src, length)
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)

inp1 = input.int(46, 'LookbackLeft')
inp2 = input.int(32, 'LookbackRight')

l1 = ta.pivothigh(close, inp1, inp2)
S1 = ta.pivotlow(close, inp1, inp2)

// plot(l1, 'Pivothigh', color.red, 1)
// // plot(S1, 'Pivot Low', color.red)

l1V = ta.valuewhen(l1, close, 0)
S1V = ta.valuewhen(S1, close, 0)

Plotl1 = not na(l1) ? l1V : na
PlotS1 = not na(S1) ? S1V : na

plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true)
plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true)

Priceforlong = close > l1V ? true : na
Priceforshort = close < S1V ? true : na

plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small)
plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small)

vol = volume
volma = ta.sma(vol, 20)

Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0)
PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0)
//Strategy Execution
volc = volume > volma 

Lc1 = Priceforlong 

Sc1 = Priceforshort

sL = Plotl1 < PlotS1 ? close : na
sS = PlotS1 > Plotl1 ? close : na


if Lc1 
    strategy.entry('Long', strategy.long)
// if Sc1 and C2
//     strategy.entry('Short', strategy.short)

if Priceforshort
    strategy.cancel('Long')
if Priceforlong   
    strategy.cancel('Short')


// Stp1 = ta.crossover(k, d)
// Ltp1 = ta.crossunder(k, d)
// Ltp = d > 70  ? Ltp1 : na
// Stp = d < 30  ? Stp1 : na


if strategy.openprofit >= 0 and sL
    strategy.close('Long')
if strategy.openprofit >= 0 and sS
    strategy.close('Short')
takeP = input.float(2, title='Take Profit') / 100
stopL = input.float(1.75, title='Stop Loss') / 100


// // Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
// sL = Plotl1 < PlotS1 ? close : na
// sS = PlotS1 < Plotl1 ? close : na
     
// //Post Excecution
if strategy.position_size > 0 and not (Lc1)
    strategy.exit("Close Long", stop = Stop_L, limit = Take_L)

if strategy.position_size < 0 and not (Sc1)
    strategy.exit("Close Short", stop = Stop_S, limit = Take_S)

もっと