SMA RSI & 갑작스러운 구매 판매 전략

저자:차오장, 날짜: 2023-12-20 17:33:04
태그:

img

전반적인 설명

이 전략은 주로 RSI의 평균 값과 갑작스러운 가격 변화를 사용하여 시장 추세와 반전 지점을 식별합니다. 핵심 아이디어는 RSI가 과소매 또는 과소매 될 때 포지션을 설정하고 갑작스러운 가격 변화가 발생할 때 반전 기회를 찾는 것입니다. EMA는 필터로도 사용됩니다.

원칙

  1. RSI의 SMA를 계산합니다. RSI SMA가 60을 넘거나 40을 넘으면 과잉 구매 또는 과잉 판매로 간주되며 역행 지위가 고려됩니다.

  2. RSI의 변동이 특정 값을 초과하면 갑작스러운 변화로 간주됩니다. 실제 클로즈 가격 검증과 결합하면 역행 위치를 설정하는 신호로 사용됩니다.

  3. 필터링을 위해 여러 EMA를 사용하십시오. 가격이 짧은 기간 EMA를 넘을 때만, 긴 포지션은 고려됩니다. 가격이 짧은 기간 EMA를 넘을 때만, 짧은 포지션은 고려됩니다.

  4. RSI 평균, 갑작스러운 변화 및 EMA 필터링을 결합함으로써 더 나은 입구 지점을 식별 할 수 있습니다.

이점 분석

  1. RSI 평균을 이용하면 과잉 구매 및 과잉 판매 조건을 정확하게 판단할 수 있으며 이는 반전 기회를 포착하는 데 도움이 됩니다.

  2. 갑작스러운 변화는 종종 가격 추세와 방향의 변화를 의미하며, 이 신호를 사용하면 입력의 타이밍을 향상시킬 수 있습니다.

  3. 다단계 EMA 필터링은 잘못된 신호를 더욱 피하고 불필요한 손실을 줄일 수 있습니다.

  4. 여러 매개 변수를 결정 기준으로 결합하면 전략의 안정성과 신뢰성을 높일 수 있습니다.

위험 및 완화

  1. RSI 성능은 불안정하고 SMA 타격률은 낮을 수 있습니다. RSI 매개 변수는 최적화되거나 다른 지표가 대체 될 수 있습니다.

  2. 갑작스러운 변화는 진정한 역전보다는 단기적인 변동일 수 있습니다. 판단의 정확성을 높이기 위해 감지 주기의 길이를 늘려요.

  3. EMA 방향 필터링에 지연이 있습니다. 감수성을 향상시키기 위해 짧은 기간 EMA를 테스트하십시오.

  4. 일반적으로 이 전략은 매개 변수 조정에 매우 민감하다. 최적의 매개 변수 조합을 찾기 위해 신중한 테스트가 필요하다. 위험을 제어하기 위해 스톱 로스를 사용한다.

최적화 제안

  1. ADX, MACD와 RSI를 결합한 다른 지표를 테스트하여 더 나은 입점점을 찾습니다.

  2. 머신러닝 알고리즘을 강화하여 갑작스러운 구매/판매 신호의 진위와 안정성을 판단합니다.

  3. 다른 기간의 EMA의 복합 판단을 사용하는 것과 같은 EMA 방향 필터링을 더욱 강화합니다.

  4. 시장 변동성에 따라 동적으로 중지 손실 범위를 조정하기 위해 적응 스톱 손실 전략을 추가합니다.

  5. 최적의 매개 변수 조합을 찾기 위해 매개 변수 최적화를 계속하십시오. 평가 기준은 샤프 비율 등이 될 수 있습니다.

결론

이 전략은 우선 RSI 평균을 사용하여 과반 구매/ 과반 판매 조건을 결정합니다. 갑작스러운 변화가 발생하면 역행 지위가 설정됩니다. EMA는 보조 필터로도 사용됩니다. 적절한 매개 변수 설정으로이 전략은 시장 트렌드 변화를 효과적으로 결정할 수 있습니다. 전반적으로, 안정성과 실용적 가치가 좋습니다. 지속적인 테스트와 최적화를 필요로하는 추가 개선의 여지가 있습니다.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
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/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

더 많은