KST EMA 추진 동향 전략

저자:차오장, 날짜: 2023-11-07 16:36:21
태그:

img

전반적인 설명

이 전략의 핵심 아이디어는 KST 지표와 EMA 라인을 결합하여 트렌드를 식별하고 추적하는 것입니다. KST 지표가 0을 넘어서 EMA 라인을 넘어서면 구매 신호를 생성하고 0을 넘어서서 EMA 라인을 넘어서면 판매 신호를 생성합니다. 이 간단하고 실용적인 전략은 트렌드를 자동으로 추적 할 수 있으며 중장기 보유에 적합합니다.

전략 논리

  1. KST 지표를 계산합니다: 10, 15, 20 및 30 기간의 ROC를 계산하고 가중 합을 받아 9 기간 SMA로 평평화하여 KST 지표를 도출합니다.

  2. EMA 라인을 계산하세요: 50주기 EMA 라인을 계산하세요.

  3. 구매 신호를 생성합니다. 빠른 KST 라인이 느린 KST 라인 (황금 십자) 위를 넘어서 0 아래로 떨어지고 닫기가 EMA 라인 위에 있을 때 구매 신호가 발생합니다.

  4. 판매 신호를 생성합니다. 빠른 KST 라인이 느린 KST 라인 (죽은 십자가) 아래를 넘어서 0보다 높고 닫는 것이 EMA 라인 아래에있을 때 판매 신호가 발생합니다.

  5. 후속 스톱 손실을 설정합니다. 자동 스톱 손실을 실현하기 위해 계정 가치의 1%를 추적합니다.

장점

  1. KST는 트렌드 변화를 확인하고 EMA는 방향성을 확인합니다. 둘을 조합하면 진입 시기를 정확하게 감지합니다.

  2. 빠른 / 느린 크로스오버와 0 라인 사용은 불필요한 거래를 피합니다.

  3. EMA는 지지/저항으로 가짜 신호를 더 필터합니다. EMA 브레이크에서만 입력합니다.

  4. 자동 트레일링 스톱 로스는 위험을 조절하고 수익을 올릴 수 있습니다.

  5. 간단한 매개 변수는 구현과 최적화를 쉽게 합니다.

위험성

  1. KST는 트렌드 변화를 감지하는 데 지연이 있고, 몇 가지 기회를 놓칠 수 있습니다. 기간을 단축하거나 가중을 최적화 할 수 있습니다.

  2. EMA는 트렌드 반전에서 뒤처져 있습니다. 다른 지표 또는 MA 조합은 더 잘 작동 할 수 있습니다.

  3. 너무 넓은 스톱 손실은 손실을 증가시킵니다. 너무 긴 스펙에 의해 중단됩니다. 최적화를 위해 신중한 테스트가 필요합니다.

  4. 빈번한 신호는 거래 비용을 증가시킬 수 있습니다. 거래를 줄이기 위해 입시 규칙을 강화 할 수 있습니다.

최적화 방향

  1. 특정 도구에 대한 감수성을 위해 KST 기간을 최적화하십시오.

  2. MA, WMA와 같은 다른 이동 평균을 테스트하여 KST와 가장 잘 결합하는지 확인하십시오.

  3. ATR 같은 변동성 메트릭을 기반으로 동적 정지를 실험합니다.

  4. 함정을 피하기 위해 음량 스파이크 같은 필터를 추가합니다.

  5. RSI, MACD와 같은 지표와 결합해 더 많은 차원을 얻을 수 있습니다.

  6. 각기 최적화하기 위해 여러 기기에 걸쳐 매개 변수를 테스트합니다.

결론

이 전략은 실행하기 쉬운 명확하고 신뢰할 수있는 논리를 가지고 있습니다. KST는 트렌드 전환을 식별하고 EMA를 더 필터하고 위험을 제어합니다. 중장기 트렌드를 자동으로 추적합니다. 합리적인 매개 변수는 큰 최적화 공간을 제공합니다. 사용자는 다른 도구에 대해 조정할 수 있습니다. 초보자와 전문가에게 적용 할 수 있습니다. 추가 최적화로 강력한 트렌드 다음 시스템으로 유망합니다.


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

//@version=4
strategy(title="Know Sure Thing and EMA Strategy by JLX", shorttitle="KST EMA JLX", format=format.price, precision=4, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
roclen1 = input(10, minval=1, title = "ROC Length #1")
roclen2 = input(15, minval=1, title = "ROC Length #2")
roclen3 = input(20, minval=1, title = "ROC Length #3")
roclen4 = input(30, minval=1, title = "ROC Length #4")
smalen1 = input(10, minval=1, title = "SMA Length #1")
smalen2 = input(10, minval=1, title = "SMA Length #2")
smalen3 = input(10, minval=1, title = "SMA Length #3")
smalen4 = input(15, minval=1, title = "SMA Length #4")
siglen = input(9, minval=1, title = "Signal Line Length")
smaroc(roclen, smalen) => sma(roc(close, roclen), smalen)
kst = smaroc(roclen1, smalen1) + 2 * smaroc(roclen2, smalen2) + 3 * smaroc(roclen3, smalen3) + 4 * smaroc(roclen4, smalen4)
sig = sma(kst, siglen)
plot(kst, color=color.green, title="KST")
plot(sig, color=color.red, title="Signal")
hline(0, title="Zero")

len = input(50, minval=1, title="Length EMA")
src = input(close, title="Source EMA")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
fastEMA = ema(src, len)

delta = kst - sig

buySignal = crossover(delta, 0) and kst < 0 and close > fastEMA
sellSignal = crossunder(delta, 0) and kst > 0 and close < fastEMA

longTrailPerc = input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
shortTrailPerc = input(title="Trail Short Loss (%)",type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

// STEP 2:
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if (strategy.position_size < 0)
    stopValue = close * (1 + shortTrailPerc)
    min(stopValue, shortStopPrice[1])
else
    999999

// Submit entry orders
if (buySignal)
    strategy.entry(id="EL", long=true)

if (sellSignal)
    strategy.entry(id="ES", long=false)

// STEP 3:
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="XL TRL STP", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="XS TRL STP", stop=shortStopPrice)



alertcondition(crossover(delta, 0) and kst < 0 and close > fastEMA,'Long alert', 'You should buy')

alertcondition(crossunder(delta, 0) and kst > 0 and close < fastEMA, 'Short alert', 'You should sell')





더 많은