ボリューム価格トレンド逆転 ステップEMAに基づく外為取引戦略

作者: リン・ハーンチャオチャン, 日付: 2023年11月7日17時03分57秒
タグ:

img

概要

これは短期 (1-5分) フォレックス取引戦略で,主に潮流理論におけるボリューム価格関係と複数のステップEMAを使用して,短期トレンド追跡取引のためのトレンド逆転点を予測します.この戦略は高周波取引に適しています.

原則

この戦略の取引信号は2つの部分から生まれます

  1. ボリューム平均価格に基づくボリューム価格関係判断.具体的には,戦略は,バリーッシュとベアシストレンドの変化を判断するために,異なる期間のボリューム平均価格のEMA (設定可能) を計算する.短期間EMAが長期間EMAを超越した場合,それはバリーッシュ信号とみなされる.短期間EMAが長期間EMAを下回ると,それはベアシス信号とみなされる.

  2. ステップEMAによって判断されるトレンド逆転シグナル.ステップEMAは,10日,20日,50日など,異なるパラメータを持つ複数のEMAを設定することを指します.トレンド逆転をそれらの順序に従って判断します.短期のEMAが長期のEMAを先行した場合,トレンドが逆転していることを意味します.

この戦略は,これらの2つの信号を組み合わせてエントリーを決定する.特に,ボリューム価格関係が上昇傾向であると判断され,STAIRSTEP EMAが複数のEMAが上昇傾向になっていることを示した場合,ロングポジションが取られる.逆に,ボリューム価格関係が下落傾向であると判断され,STAIRSTEP EMAが複数のEMAが下落傾向になっていることを示した場合,ショートポジションが取られる.

利点

この戦略は,音量平均価格と複数のEMAの利点を組み合わせ,信号の正確性と安定性を向上させることができます.

  1. 平均価格をベースに物価関係を判断することは,価格EMAの判断よりも正確であり,価格変動が強くなると誤導されるのを避ける.

  2. 階段 EMA は,異なるパラメータ EMA の順序で判断の次元を増加させ,単一の EMA の騒音を回避することができます.

  3. この2つの信号の組み合わせにより,相互検証が可能になり,誤った信号は減少します.

  4. 高周波の短期取引に適しており,範囲内の小さな逆転機会を迅速に捉えることができます.

  5. 戦略パラメータは,さまざまな種類と周波数に最適化するために柔軟に設定できます.

リスク

この戦略にはいくつかのリスクもあります:

  1. 過剰に技術指標に依存しているため,不安定な市場状況によって誤導される可能性があります.

  2. 短期取引は取引コストに比較的敏感で,スリップと手数料は十分に管理する必要がある.

  3. 短期EMAパラメータは頻繁に最適化する必要がある.そうでなければ無効になるかもしれない.

  4. 価格差は必ずしも逆転を招かないが,判断が誤る危険性がある.

  5. 複数のEMAの順序は完全に信頼性がないし,判断に誤りがある可能性があります.

対策:

  1. もっと基本的な判断の要素を組み合わせます

  2. ポジションを調整し,単一の取引での損失が大きすぎないようにします.

  3. パラメータを定期的に再テストして最適化します

  4. 成功率を上げるため,主要なサポート/レジスタンスレベルに近い取引を行う.

  5. 多次元検証のための他の指標と併用する.

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

この戦略は,次の側面でも最適化できます.

  1. より安定したパラメータを見つけるために,物量価格関係計算の異なる方法をテストする.

  2. 階段のEMA指標のレベルをさらに高めること

  3. RSI,MACDなどのフィルタリングのための他の指標信号を組み合わせる.

  4. ストップ・ロスの移動,待機中のオーダーなど,ストップ・ロスのメカニズムを最適化します.

  5. 適切なパラメータセットを開発するために,異なる取引手段の特徴に基づいてパラメータを最適化します.

  6. マシン学習アルゴリズムを導入し ビッグデータを使って判断モデルを訓練する

  7. 決まった出口,トレンド追跡出口など,さまざまな出口戦略を探求します.

  8. 市場変化に基づいてパラメータを自動的に調整するための適応性パラメータメカニズムを導入する.

概要

この戦略は,短期トレンド追跡取引のためのボリューム平均価格とスチールステップEMAの利点を組み合わせます.この戦略は高い安定性と精度を持っていますが,リスク管理とパラメータ最適化に注意する必要があります.他の技術指標と組み合わせた継続的な最適化とテストにより,効率的な短期取引戦略になり得ます.


/*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  )


もっと