移動平均値に基づく単面入場戦略

作者: リン・ハーンチャオチャン開催日:2023年12月25日 (月) 14:09:49
タグ:

img

概要

この戦略は,価格のトレンド方向を決定し,単面エントリを実装するために,異なる種類の移動平均を計算します.価格が移動平均を突破したとき,ロングまたはショートポジションを開きます.

戦略原則

この戦略は,単純な移動平均 (SMA),指数的な移動平均 (EMA),ボリューム重量移動平均 (VWMA),二重指数的な移動平均 (DEMA),三重指数的な移動平均 (TEMA),カフマンの適応移動平均 (KAMA),価格チャネルミッドラインを含む7種類の異なる移動平均から選択することを可能にします.選択された移動平均と閉値との関係に基づいて価格トレンド方向を判断します.

閉じる価格が移動平均線を上向きに突破すると,上向きのトレンドとして判断され,ロングポジションが開かれます.閉じる価格が移動平均線を下向きに突破すると,下向きのトレンドとして判断され,ショートポジションが開かれます.これは価格トレンドのターニングポイントを捉え,単面エントリーを達成することができます.

利点分析

この戦略の利点は次のとおりです.

  1. 柔軟性により,異なる製品とサイクルに合わせて,様々な種類の移動平均を選択できます.

  2. 単面入力でリスクを効果的に制御できます

  3. トレンド方向への入場は利益を得ることは簡単です.

  4. 分かりやすく 実行できます

リスク分析

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

  1. 価格が移動平均線の周りに振動すると,複数の誤った信号と逆エントリーポジションが発生します.リスクを制御するために適切なストップロスを設定する必要があります.

  2. 急速な上下価格変動によるリスクは完全に回避できない.他の指標を組み合わせてトレンドシグナルを決定する必要があります.

  3. 分析者は適切な移動平均パラメータを選択する必要があります.不適切なパラメータは,簡単に取引信号の遅れにつながる可能性があります.

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

戦略は以下の側面から最適化できます.

  1. MACD,RSIなどの他の技術指標と組み合わせてトレンド信号を判断し,取引組合せを形成します.

  2. ストップ・ロスのロジックを追加します.例えば,ストップ・ロスの後続またはストップ・ロスの待機命令.

  3. 適正なパラメータの組み合わせを見つけるために 移動平均期,移動平均型などのパラメータをテストし最適化します

  4. MarketIfTouchedのオーダータイプを入力して,トレンドをフォローすることを検討してください.

概要

この戦略は,移動平均値に基づいて価格動向方向を決定し,単面エントリを実装する. 使いやすくて実装し,リスクを効果的に制御することができます. しかし,誤った信号や逆エントリのリスクもあります. 他の信号指標を組み合わせ,パラメータを最適化し,ストップロスを追加することで継続的に改善し,戦略をより安定して信頼できます.


/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Tests v1.1", shorttitle = "MAs tests 1.1", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

needlong = input(true, "long")
needshort = input(true, "short")
len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")
anti = input(true, defval = true, title = "Antipila")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
    
    
    

もっと