
この戦略は,動量平滑移動平均 (ALMA) と2つの異なるパラメータ設定のインデックス移動平均 (EMA) の交差を用い,取引信号を生成する.同時に,戦略は,ランダムなインデックス平滑移動平均 (Stochastic RSI) を組み合わせて,過度に買い売りを避ける.
戦略は,価格の動向を判断する主要な指標としてALMAを使用する.ALMAは,価格のランダムな波動をフィルターする価格の平滑化の機能を持っています.ALMAの周期,偏移値,シグマパラメータを調整することで,より敏感または安定させることができます.価格が上昇すると,ALMAは緑に表示され,価格が低下すると赤に表示されます.
戦略は,長さの異なる2つのEMA線を使用する. 速いEMA線が上向きに遅いEMA線を横切るときは,買いの信号を生じ; 速いEMA線が下向きに遅いEMA線を横切るときは,売りの信号を生じ. 交差するEMAは,比較的に良いトレンド判断能力を有する. 速いEMAの周期は,異なる取引品種と周期に対応するためにパラメータで調整することができます.
ストキャスティックRSIの役割は,超買い超売り領域で取引信号を発信することを避けるためのものです.それは,RSIとストキャスティック2つの指標の優位性を組み合わせて,ピークと低谷領域をよりよく判断することができます.ストキャスティックRSIの超買いまたは超売りの場合,この戦略は,元の多頭または空頭注文をキャンセルします.
戦略は,価格トレンドの方向を判定するEMAの交差の優位性を最大限に活用し,ALMA指標と連携して,主要な多頭と空頭の機会を特定し,順位取引を実現します.
EMA周期,ALMAパラメータなどには調整可能なスペースが提供されており,ユーザーは自分のニーズに応じてパラメータを最適化して,戦略を異なる市場環境により良く適応させることができます.
戦略には止損停止設定が組み込まれている.浮動止損を使用すると,止損が追放される確率を減らすことができます.利潤を得るために設定は,利潤をロックして,利潤を吐き出すのを避けることができます.
複雑な状況では,EMAとALMA線が誤信号を発する可能性がある.このとき,損失を制御するために停止損失に依存しなければならない.
パラメータが正しく設定されていない場合,EMAとALMA線が正しく機能せず,取引リスクが増加する.最適なパラメータの組み合わせを選択するためにテストと最適化が必要である.
テストはEMAとALMAのパラメータ設定を最適化し,最適なパラメータを選択します.
他の指標のフィルタリング信号と組み合わせて,誤信号が損失を招かないようにする.例えばMACD,KDJなど.
リスクと利益のバランスをとって ストップ・ロスの幅を最適化します
異なる品種と周期のパラメータをテストし,より多くの市場に戦略を適用します.
この戦略は,全体として,シンプルで実用的なトレンド追跡戦略である. それは,トレンドの方向を決定するEMAの交差を利用し,ALMA指標のポジション加仓ポイント,Stochastic 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)