これはE-mini S&P500先物 (ES) の3分間のショートのみのエキスパートアドバイザー戦略です.これは指数的な移動平均値の連続を計算し,特定のパターン条件を組み合わせることで取引信号を生成します.
この戦略のコア指標はT3平均線である.T3は,最初にユーザー定義T3パラメータに基づいてXE1~XE6の指数的な移動平均値のセットを計算する.その後,最終T3平均線として特定の係数を使用してこれらのEMAの重み平均値を計算する.
ストラテジーは,T3平均線を下回る時,購入信号を生成する.T3平均線上下回る時,売却信号を生成する.また,戦略は,特定のキャンドルスタイクパターンを補足エントリー条件として判断する.パターンの条件とT3信号の両方が同時に出現するときにのみ取引オーダーが送信される.
この戦略の最大の強みは,マルチフィルター設計とパラメータ最適化にある.一方,価格アクションとチャートパターンのフィルターを組み合わせることでノイズトレードを減らすことができる.一方,T3やパターン判断ルールなどのキーパラメータは,異なる市場に適応し,エントリー精度を向上させるために最適化することができる.
簡単な移動平均値と比較して,T3指標の三重スムージングメカニズムは,市場のノイズをフィルタリングし,トレンド逆転点を特定するのに有効です. 3分間のタイムフレームは,短期的な機会を把握するために迅速なオーダー実行を可能にします.
この戦略の主なリスクは,不適切なパラメータ調節と過剰な保持期間から生じる.T3パラメータが大きすぎると,指標は市場に遅れ,小さすぎるとノイズ取引の確率が高まる.さらに,3分間の取引は,間に合わないストップ損失で大きな損失に直面する可能性があります.
リスクを制御するには,まずは,異なる商品の最適なパラメータ範囲を決定するために繰り返しバックテストを行うこと.次に,取引ごとに受け入れられる損失パーセントを持つ出口ポジションに厳格なストップロスの戦略を実行する必要があります.
戦略の改善にはいくつかの方向性があります.
異なる取引手段のための最適な範囲を見つけるためにT3パラメータを最適化
パターン認識の精度を高めるためのパターン判断ロジックの改善
トレイリング・ストップ・ロスのような より高度なストップ・ロスのメカニズムを追加します
収益因数または最大引き上げに基づいてマネーマネジメントモジュールを追加
機械学習支援入力モジュールを追加する
これらの改善により 戦略の安定性と収益性が 段階的に向上できる.
短期的な日中取引戦略として,この戦略は巨大な最適化空間,複数のフィルター,迅速なオーダー実行などの利点があります.パラメータチューニング,ストップ損失最適化,マネーマネジメントなどの一連の最適化方法により,高周波取引に適した効果的な戦略に調節することができます.
/*backtest start: 2023-11-16 00:00:00 end: 2023-11-23 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ES 3m Short Only (Triple RED)", overlay=true) // Alert Message '{{strategy.order.alert_message}}' //3min T3 = input(150)//to 600 xPrice3 = close xe1 = ta.ema(xPrice3, T3) xe2 = ta.ema(xe1, T3) xe3 = ta.ema(xe2, T3) xe4 = ta.ema(xe3, T3) xe5 = ta.ema(xe4, T3) xe6 = ta.ema(xe5, T3) b3 = 0.7 c1 = -b3*b3*b3 c2 = 3*b3*b3+3*b3*b3*b3 c3 = -6*b3*b3-3*b3-3*b3*b3*b3 c4 = 1+3*b3+b3*b3*b3+3*b3*b3 nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3 // Buy Signal - Price is below T3 Average buySignal3 = xPrice3 < nT3Average sellSignal3 = xPrice3 > nT3Average //NinjaTrader Settings. acct = "Sim101" ticker = "ES 12-23" qty = 1 takeProfitTicks = 4 stopLossTicks = 16 tickSize = 0.25 takeProfitShort = close - takeProfitTicks * tickSize stopLossShort = close + stopLossTicks * tickSize OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }' CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }' IsUp = close > open IsDown = close < open PatternPlot = IsDown[2] and IsDown[1] and IsDown and close[1] <= high[0] and close[1] > close[0] and low[1] > low[0] and high[2] > high[1] and low[2] <= low[1] if (PatternPlot and sellSignal3) strategy.entry('Short', strategy.short, alert_message=OCOMarketShort) strategy.exit('Close Short', 'Short', profit=takeProfitTicks, loss=stopLossTicks, alert_message=CloseAll) //plotshape(PatternPlot, title="Custom Pattern", style=shape.circle, location=location.abovebar, color=color.red, size=size.small)