この戦略は,1分MACD指数とRSI指数の設計に基づくショートラインブレイク戦略である.これは,MACD指数のトレンド判断とブレイクポイントの発見,およびRSI指数の超買い超売り判断の能力を組み合わせて,ショートラインブレイク機会を探し,長短に振動する.
この戦略はまず,1分間の時間枠でMACD指標の散布線を計算し,ブリン帯で散布線を判断する突破を図に描きます.同時にRSI指標を計算して多空力道を判断します.ブリン帯,MACDおよびRSI指標が同時に条件を満たしている場合にのみ取引シグナルを発信します.
具体的には,1分間のMACD集散線が下位線より低く,RSIが51以上であるときに多行し,MACD集散線が上位線より高く,RSIが49以下であるときに空行する.また,不利なトレンド逆転操作を防ぐために,9日,50日,および200日平均線の順序を並べて取引することを要求する.
固定ストップ・ストップ・ロス Exit 利潤が0.5%に達した場合または損失が0.3%に達した場合の平仓.
この戦略は,トレンド判断とオーバーバイオーバーセールの判断を組み合わせて,偽の突破を効果的にフィルターすることができる.固定ストップ・ストップ・ロスは,各単一利益に一定の期待管理を与える.
利点としては,
MACDはトレンドの方向を判断し,RSIは多空力道を判断し,逆転操作を効果的に回避することができる.
ブリン帯通路と結合して突破信号を判断し,偽突破をフィルターすることができる.
固定ストップ・ストップ・ロスを採用し,単一の利益には一定の期待があり,単一の損失を制御することができる.
取引頻度が高く,ショートライン操作に適している.
この戦略にはいくつかのリスクがあります.
固定ストップ・ストップ・ロスは,市場の変化に合わせて調整できないため,ストップ・ロスが小さすぎるとストップ・ロスが大きすぎるとなる可能性があります.
複数のフィルタリング信号がインデケーターに依存し,整合領域で複数の止損トリガーが発生する.
高周波取引の手数料は重く負担されます.
MACDとRSIのパラメータは最適化が必要で,現在のパラメータは最適化されていない可能性があります.
更に改善すべき点は以下の通りです.
動的なストップ・ストップ・ロスを採用し,ATRなどの指標に基づいてストップ・ストップ・ロスの比率を調整する.
ブリン帯のパラメータを拡大すると,通路を縮小し,発射頻度を低下させる.
MACDとRSIのパラメータを最適化して,最適なパラメータの組み合わせを見つけます.
大周期的なトレンドの方向にフィルタリングして逆転取引を避ける.
この戦略は,全体として典型的なショートライン突破システムであり,トレンド,オーバーバイ,オーバーセール判断を融合させ,ショートラインの機会を効果的に発見することができる.しかし,一定のリスクがあり,さらなるテストとパラメータの最適化が必要であり,リスクの低減と利益率の向上が必要である.パラメータが適切に調整された場合,この戦略は,高効率のショートライン戦略の1つになることができる.
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
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/
// © pluckyCraft54926
//@version=5
strategy("5 Minute Scalp", overlay=true, margin_long=100, margin_short=100)
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
hist_1m = request.security(syminfo.tickerid,"1",hist [barstate.isrealtime ? 1 : 0])
hline(0, "Zero Line", color=color.new(#787B86, 50))
////////////////////////////////////////////////////
//plotting emas on the chart
len1 = input.int(9, minval=1, title="Length")
src1 = input(close, title="Source")
offset1 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out1 = ta.ema(src1, len1)
plot(out1, title="EMA9", color=color.blue, offset=offset1)
len2 = input.int(50, minval=1, title="Length")
src2 = input(close, title="Source")
offset2 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out2 = ta.ema(src2, len2)
plot(out2, title="EMA50", color=color.yellow, offset=offset2)
len3 = input.int(200, minval=1, title="Length")
src3 = input(close, title="Source")
offset3 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out3 = ta.ema(src3, len3)
plot(out3, title="EMA200", color=color.white, offset=offset3)
//////////////////////////////////////////////////////////////////
//Setting up the BB
/////////////////////////////////////////////////////////////
srcBB = hist_1m
lengthBBLong = input.int(94,title = "LengthBB Long", minval=1)
lengthBBShort = input.int(83,title = "LengthBB Short", minval=1)
multBB = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basisBBLong = ta.sma(srcBB, lengthBBLong)
basisBBShort = ta.sma(srcBB, lengthBBShort)
devBBLong = multBB * ta.stdev(srcBB, lengthBBLong)
devBBShort = multBB * ta.stdev(srcBB, lengthBBShort)
upperBB = basisBBShort + devBBShort
lowerBB = basisBBLong - devBBLong
offsetBB = input.int(0, "Offset", minval = -500, maxval = 500)
/////////////////////////////////////////
//aetting up rsi
///////////////////////////////////////////
rsilengthlong = input.int(defval = 11, title = "Rsi Length Long", minval = 1)
rlong=ta.rsi(close,rsilengthlong)
rsilengthshort = input.int(defval = 29, title = "Rsi Length Short", minval = 1)
rshort=ta.rsi(close,rsilengthshort)
///////////////////////////
//Only taking long and shorts, if RSI is above 51 or bellow 49
rsilong = rlong >= 51
rsishort = rshort <= 49
//////////////////////////////////////
//only taking trades if all 3 emas are in the correct order
long = out1 > out2 and out2 > out3
short = out1 < out2 and out2 < out3
/////////////////////////////////////
///////////////////////////////////////////
//setting up TP and SL
TP = input.float(defval = 0.5, title = "Take Profit %",step = 0.1) / 100
SL = input.float(defval = 0.3, title = "Stop Loss %", step = 0.1) / 100
longCondition = hist_1m <= lowerBB
longhight = input(defval=-10,title = "MacdTick Low")
if (longCondition and long and rsilong and hist_1m <= longhight)
strategy.entry("Long", strategy.long)
if (strategy.position_size>0)
longstop = strategy.position_avg_price * (1-SL)
longprofit = strategy.position_avg_price * (1+TP)
strategy.exit(id ="close long",from_entry="Long",stop=longstop,limit=longprofit)
shortCondition = hist_1m >= upperBB
shorthight = input(defval=35,title = "MacdTick High")
if (shortCondition and short and rsishort and hist_1m >= shorthight)
strategy.entry("short ", strategy.short)
shortstop = strategy.position_avg_price * (1+SL)
shortprofit = strategy.position_avg_price * (1-TP)
if (strategy.position_size<0)
strategy.exit(id ="close short",stop=shortstop,limit=shortprofit)