
これは,短周期 (~5分) の外為金取引戦略で,主に潮流理論の量価関係と多重なSTAIRSTEP EMAを利用して,トレンドの逆転点を予測し,短周期のトレンド追跡取引を行う.この戦略は,高周波取引に適している.
この戦略の取引シグナルは2つの部分から生まれます.
取引量平均価格による量価格関係判断.具体的には,戦略は,異なる周期の取引量平均価格EMAを計算することによって,多空トレンドの変化を判断する.短期間のEMAに長期間のEMAが穿越した場合,看板信号とみなす.短期間のEMAに長期間のEMAが穿越した場合,看板信号とみなす.
Stairstep EMA判断に基づく反転信号。Stairstep EMAは,10日線,20日線,50日線など,異なるパラメータを設定した複数のEMA平均線を指し,それらの並列順序に基づいてトレンド反転を判断する。短期のEMAが長期のEMAの逆転に先行する場合は,トレンドが反転していることを示している。
策略は,この2つの信号を組み合わせて入場を決定する.具体的には,量関数が看板であると判断され,そしてStairstep EMAが多重EMAがすべて看板に転向したことを示す場合,入場は多めに行われます.逆に,量関数が看板であると判断され,そしてStairstep EMAが多重EMAがすべて看板に転向したことを示す場合,入場は空になります.
この戦略は,取引量平均値と複数のEMAの優位性を組み合わせて,信号の正確性と安定性を向上させる:
取引量平均価格による量価格関係判断は,単なる価格EMA判断よりより正確であり,強化された価格振動によって誤導されないようにする.
Stairstep EMAは,異なるパラメータのEMAの並列順序によって判断の次元を増やし,単一のEMAがもたらすノイズを回避します.
この2つの信号の組み合わせにより,相互検証が可能になり,偽信号が減少する.
高周波の短周期取引に適しており,小範囲の反転機会を迅速に捉えることができる.
戦略のパラメータは,異なる品種と周期の最適化に対応して柔軟に配置できます.
この戦略にはいくつかのリスクがあります.
専門的な指標に過度に依存し,非活動的な行動によって誤導される可能性もあります.
短周期操作は取引コストに敏感であり,滑り点と手数料を制御する必要があります.
短周期EMAパラメータは頻繁に最適化する必要があるので,無効になる可能性があります.
価格の偏差は必ずしも反転をもたらすわけではないので,誤判の危険性がある.
複数のEMAの順序の判断は完全には信頼できないし,誤判も可能である.
対策として
基本的な要素を考慮して判断する.
ポジションの調整は,単一のストップが過大にならないようにする.
パラメータを定期的に再テストし,最適化します.
重要なサポート・レジスタンス領域の近くで取引する成功率を向上させる
他の指標と併用して,多次元検証を行う.
この戦略は,以下の点で最適化できます.
異なる量価関係計算方法をテストし,より安定したパラメータを探します.
Stairstep EMAの判断をさらに一層強化する.
RSI,MACDなどの他の指標信号と組み合わせたフィルタリング.
移動止損,吊り止損などの止損メカニズムを最適化
品種特性に合わせてパラメータを最適化し,その品種に適したパラメータセットを作成する.
機械学習アルゴリズムを追加し,ビッグデータから判断モデルを訓練する.
固定退出,トレンドトラッキング退出など,様々な退出戦略を模索する.
市場変化に応じてパラメータを自動的に調整する自己適応パラメータメカニズムを導入する.
この戦略は,取引量平均価格とStairstep EMAの2つの指標の優位性を総合的に利用して短期トレンド追跡取引を行う.この戦略は,高い安定性と正確性を持っていますが,リスク管理とパラメータ最適化にも注意する必要があります.テストを継続的に最適化し,他の技術指標の使用と併用すれば,高効率の短期取引戦略になることができます.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © exlux99
//@version=5
strategy("Forex Fractal EMA Scalper", overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input.int(title="Period Fractals", defval=2, minval=2, group="Optimization Parameters")
src = input(hl2, title="Source for EMA's", group="Optimization Parameters")
len1 = input.int(10, minval=1, title="Length EMA 1", group="Optimization Parameters")
out1 = ta.ema(src, len1)
len2 = input.int(20, minval=1, title="Length EMA 2", group="Optimization Parameters")
out2 = ta.ema(src, len2)
len3 = input.int(100, minval=1, title="Length EMA 3", group="Optimization Parameters")
out3 = ta.ema(src, len3)
// UpFractal
bool upflagDownFrontier = true
bool upflagUpFrontier0 = true
bool upflagUpFrontier1 = true
bool upflagUpFrontier2 = true
bool upflagUpFrontier3 = true
bool upflagUpFrontier4 = true
for i = 1 to n
upflagDownFrontier := upflagDownFrontier and (high[n-i] < high[n])
upflagUpFrontier0 := upflagUpFrontier0 and (high[n+i] < high[n])
upflagUpFrontier1 := upflagUpFrontier1 and (high[n+1] <= high[n] and high[n+i + 1] < high[n])
upflagUpFrontier2 := upflagUpFrontier2 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+i + 2] < high[n])
upflagUpFrontier3 := upflagUpFrontier3 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+i + 3] < high[n])
upflagUpFrontier4 := upflagUpFrontier4 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+4] <= high[n] and high[n+i + 4] < high[n])
flagUpFrontier = upflagUpFrontier0 or upflagUpFrontier1 or upflagUpFrontier2 or upflagUpFrontier3 or upflagUpFrontier4
upFractal = (upflagDownFrontier and flagUpFrontier)
// downFractal
bool downflagDownFrontier = true
bool downflagUpFrontier0 = true
bool downflagUpFrontier1 = true
bool downflagUpFrontier2 = true
bool downflagUpFrontier3 = true
bool downflagUpFrontier4 = true
for i = 1 to n
downflagDownFrontier := downflagDownFrontier and (low[n-i] > low[n])
downflagUpFrontier0 := downflagUpFrontier0 and (low[n+i] > low[n])
downflagUpFrontier1 := downflagUpFrontier1 and (low[n+1] >= low[n] and low[n+i + 1] > low[n])
downflagUpFrontier2 := downflagUpFrontier2 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+i + 2] > low[n])
downflagUpFrontier3 := downflagUpFrontier3 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+i + 3] > low[n])
downflagUpFrontier4 := downflagUpFrontier4 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+4] >= low[n] and low[n+i + 4] > low[n])
flagDownFrontier = downflagUpFrontier0 or downflagUpFrontier1 or downflagUpFrontier2 or downflagUpFrontier3 or downflagUpFrontier4
downFractal = (downflagDownFrontier and flagDownFrontier)
// plotshape(downFractal, style=shape.triangledown, location=location.belowbar, offset=-n, color=#F44336, size = size.small)
// plotshape(upFractal, style=shape.triangleup, location=location.abovebar, offset=-n, color=#009688, size = size.small)
long= out1 > out2 and out2>out3 and upFractal
short= out1 < out2 and out2<out3 and downFractal
strategy.entry("long",strategy.long,when= short)
strategy.entry("short",strategy.short,when=long)
tp=input(25, title="TP in PIPS", group="Risk Management")*10
sl=input(25, title="SL in PIPS", group="Risk Management")*10
strategy.exit("X_long", "long", profit=tp, loss=sl )
strategy.exit("x_short", "short",profit=tp, loss=sl )