この戦略は18日間のシンプル・ムービング・平均値 (SMA18) に基づいており,イントラデイ・パターンの認識とインテリジェント・トレーリング・ストップ・メカニズムを組み合わせている.この戦略は主に,最適なタイミングでロングエントリを実行するために,イントラデイ・ハイ・ロー・ポジションとともに,SMA18との価格関係を観察している.柔軟なストップ・ロスのアプローチを採用し,固定ストップ・ロスのポイントと2日間のロースト・ストップオプションの両方を提供している.
基本的な論理にはいくつかの重要な要素が含まれます. 1. 入場条件は,ブレイクアウトまたは上線入場オプションを含む18日移動平均値に対する価格ポジションに基づく. 2. 入力精度を向上させるために,特にインサイドバーパターンに焦点を当てて,日中のキャンドルスタックパターンの分析 3. 週日特性に基づく選択的取引 4. 入場価格の設定は,充填確率を向上させるため,低値から小幅上向きのオフセットによる制限注文を使用する. 5. ダブルストップ・ロスのメカニズム:エントリー価格に基づく固定ストップまたは2日間の低値に基づくトレーリングストップ
この戦略は,複数の分析的次元を組み合わせて包括的な取引システムを構築する.その核心の強みは柔軟なパラメータ設定とインテリジェントストップロスのメカニズムにあり,さまざまな市場環境に適応することを可能にします.継続的な最適化と改善を通じて,この戦略は,異なる市場条件で安定したパフォーマンスを維持する約束を示しています.
/*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')