資源の読み込みに... 荷物...

日中のパターンの認識を備えたSMAベースのインテリジェント・トレリング・ストップ戦略

作者: リン・ハーンチャオチャン開催日:2025年1月17日 16:04:09
タグ:SMAMA18ATR

 SMA-Based Intelligent Trailing Stop Strategy with Intraday Pattern Recognition

概要

この戦略は18日間のシンプル・ムービング・平均値 (SMA18) に基づいており,イントラデイ・パターンの認識とインテリジェント・トレーリング・ストップ・メカニズムを組み合わせている.この戦略は主に,最適なタイミングでロングエントリを実行するために,イントラデイ・ハイ・ロー・ポジションとともに,SMA18との価格関係を観察している.柔軟なストップ・ロスのアプローチを採用し,固定ストップ・ロスのポイントと2日間のロースト・ストップオプションの両方を提供している.

戦略の原則

基本的な論理にはいくつかの重要な要素が含まれます. 1. 入場条件は,ブレイクアウトまたは上線入場オプションを含む18日移動平均値に対する価格ポジションに基づく. 2. 入力精度を向上させるために,特にインサイドバーパターンに焦点を当てて,日中のキャンドルスタックパターンの分析 3. 週日特性に基づく選択的取引 4. 入場価格の設定は,充填確率を向上させるため,低値から小幅上向きのオフセットによる制限注文を使用する. 5. ダブルストップ・ロスのメカニズム:エントリー価格に基づく固定ストップまたは2日間の低値に基づくトレーリングストップ

戦略 の 利点

  1. より信頼性の高いエントリー信号のために技術指標と価格パターンを組み合わせます
  2. 市場特有の最適化のための柔軟な取引時間選択メカニズム
  3. 利潤を保護し,適切な価格動きを可能にするインテリジェントストップロスのシステム
  4. 異なる市場環境に対応する高度な調整可能なパラメータ
  5. インサイドバーパターンフィルタリングによる誤信号の有効な減少

戦略リスク

  1. 固定ストップは不安定な市場での早期離脱を引き起こす可能性があります
  2. トレーリングストップは,急速な逆転時に最小限の利益をロックすることができます.
  3. 統合中の頻繁なインサイドバーは,過剰取引につながる可能性があります. 緩和措置
  • 市場変動に基づくストップ・ロスの動的調整
  • 傾向確認指標の追加
  • 低品質の取引をフィルタリングするための最低利益目標の実施

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

  1. 動的ストップ・ロース調整のための波動性指標 (ATRなど) を含む
  2. 信号信頼性を向上させるため,音量分析の次元を追加
  3. 過去のパフォーマンスに基づいて,よりスマートな日付選択アルゴリズムを開発する
  4. 傾向強度フィルタを導入し,弱い傾向で取引を避ける
  5. 改善されたパターン識別のためのインサイドバー認識アルゴリズムを強化する

概要

この戦略は,複数の分析的次元を組み合わせて包括的な取引システムを構築する.その核心の強みは柔軟なパラメータ設定とインテリジェントストップロスのメカニズムにあり,さまざまな市場環境に適応することを可能にします.継続的な最適化と改善を通じて,この戦略は,異なる市場条件で安定したパフォーマンスを維持する約束を示しています.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')




関連性

もっと