モメント スムーズ移動平均線と移動平均線クロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月27日 17:35:09
タグ:

img

概要

この戦略は,トレードシグナルを生成するために,モメントスムーズムービング・平均線 (ALMA) と異なるパラメータ設定を持つ2つの指数指数移動平均線 (EMA) のクロスオーバーを使用します.同時に,戦略は過剰な買い売りを避けるためにストカスティックRSIも組み込みます.

戦略原則

モメントALMAライン

この戦略は,価格動向を判断するための主な指標としてALMAを使用している.ALMAは価格データをスムーズ化する機能を持ち,価格のランダムな変動をフィルタリングすることができます.ALMAの期間,オフセット値,シグマパラメータを調整することで,より敏感または安定化することができます.価格が上昇するとALMAは緑色で,価格が下がるとALMAは赤色で表示されます.

スピード・ロング・EMA・クロスオーバー

この戦略は,異なる長さの2つのEMAラインを使用する. 速いEMAラインがスローEMAラインの上を横切ると,購入信号が生成される. 速いEMAラインがスローEMA以下を横切ると,販売信号が生成される. EMAクロスオーバーには良いトレンド判断能力がある. 速いEMAと遅いEMAの期間は,異なる取引品種とサイクルに適応するためにパラメータを通じて調整することができます.

ストカスティックRSI

ストコストティックRSI指標の役割は,過剰購入および過剰販売の領域で取引信号を発行することを避けることである.それは,RSIおよびストコストティック指標の両方の利点を組み合わせ,ピークおよび低位領域をよりよく決定することができる.ストコストティックRSI指標が過剰購入または過剰販売された場合,戦略は既存のロングまたはショートオーダーをキャンセルする.

利点分析

傾向に沿って取引する

この戦略は,価格動向の方向性を決定するためにEMAクロスオーバーを完全に利用し,トレンド取引を実施するための主要な長期および短期間の機会を特定するためにALMA指標と組み合わせています.

調整可能なパラメータ

EMAとALMAパラメータの期間は調整可能な空間を提供します.ユーザーは,戦略を異なる市場環境により良く適応させるために,ニーズに応じてパラメータを最適化することができます.

ストップ・ロスト・アンド・テイク・プロフィート・メカニズム

この戦略にはストップ・ロストとテイク・プロフィートの設定が組み込まれています.浮動ストップ・ロストを使用すると,ストップ・ロストを追いかける可能性が低下し,プロフィート・テイク・プロフィートの設定により利益が固定され,利益が吐き出されないようにすることができます.

リスク分析

誤った傾向判断

複雑な市場では,EMAとALMA線が誤った信号を発信する可能性があります.損失を制御するためにストップ損失に依存します.

パラメータ設定が不適切

パラメータが正しく設定されていない場合,EMAとALMA線が正しく機能できず,取引リスクが増加します.最適なパラメータ組み合わせを選択するためにテストと最適化が必要です.

戦略の最適化

  1. EMAとALMAのパラメータ設定をテストし最適化して最適なパラメータを選択します.

  2. 他の指標を組み込み,シグナルをフィルタリングし,間違ったシグナルによる損失を回避します.MACD,KDJなど.

  3. ストップ・ロスの大きさを最適化して リスク管理と収益性のバランスをとります

  4. 戦略をより多くの市場に適用するために,異なる品種とサイクルパラメータをテストします.

概要

一般的に,これはシンプルで実用的なトレンド追跡戦略である.トレンド方向を決定するためにEMAクロスオーバー,アドオンポイントを特定するためにALMA指標,過剰購入および過剰販売のリスクを避けるためにストーカスティックRSIを使用し,リスクを制御するためにストップロストと利益を取ることを設定する.パラメータ調整と指標最適化によって,この戦略は良い結果を達成することができます.理解し使用しやすく,また一定の適応性があります.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

////Arranged by @ClassicScott
//Strategy Created by @CheatCode1


strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true )



////Source Selection & ALMA Variables

//Dominant Momentum ALMA
dsource = input.source(close, title='Source', group='Dominant ALMA')
dperiod = input.int(title='Period', defval=130, group='Dominant ALMA')
doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA')
dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA')

dalma = ta.alma(dsource, dperiod, doffset, dsigma)

dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1')
dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1')
dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color

////ALMA Plots
plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA')



//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true)

//Variable Declerations/Plot Assingments

inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true)
inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true)
inp3 = int(200)
sma1 = ta.sma(close, inp3)
ema1 = ta.ema(close, inp1)
ema2 = ta.ema(close, inp2)

eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1,  plot.style_linebr)
eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1,  plot.style_linebr)
splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none)

cross1 = ta.crossover(ema1, ema2)
cross2 = ta.crossunder(ema1, ema2)

plotchar(cross1, '', '↑', location.belowbar,  close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false)
plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false)
bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na)

valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0)
valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0)

//Entries

if cross1 and close[2] > dalma[2] and close[1] > dalma[1]
    strategy.entry('Long', strategy.long)
if cross2 and close[2] < dalma[2] and close[1] < dalma[1]
    strategy.entry('Short', strategy.short)
    
//StochRsi
    
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(15, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(8, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//Cancellations

if k > 75
    strategy.cancel('Long')
if k < 25
    strategy.cancel('Short')
    
//Closures

if ta.crossunder(k, d) and k > 92
    strategy.close('Long')
if ta.crossover(k,d) and k < 8
    strategy.close('Short')

//Exit Percents

takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100
stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100
// Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
     
//Post Excecution
if strategy.position_size > 0
    strategy.exit("Flat", limit=Take_L, stop = Stop_L)

if strategy.position_size < 0
    strategy.exit("Flat", limit=Take_S, stop = Stop_S)


もっと