Основная идея этой стратегии состоит в том, чтобы объединить индикатор KST и линии EMA для выявления и отслеживания тенденций. Он генерирует сигналы покупки, когда индикатор KST пересекает выше 0 и закрывается выше линии EMA, и сигналы продажи, когда он пересекает ниже 0 и закрывается ниже линии EMA. Эта простая и практичная стратегия может автоматически отслеживать тенденции и подходит для средне- и долгосрочных владений.
Расчет показателя KST: Вычислить ROC 10, 15, 20 и 30 периодов, взять взвешенную сумму и сгладить ее с 9-периодным SMA для получения показателя KST.
Вычислить линию EMA: вычислить линию EMA на 50 периодов.
Сгенерировать сигнал покупки: когда быстрая линия KST пересекает медленную линию KST (золотой крест) и находится ниже 0, а закрытие находится выше линии EMA, запускается сигнал покупки.
Появление сигнала продажи: когда быстрая линия KST пересекается ниже медленной линии KST (мертвый крест) и находится выше 0, а закрытие находится ниже линии EMA, запускается сигнал продажи.
Установка последующего стоп-лосса: стоп-лосс отслеживает 1% от стоимости счета для автоматической реализации стоп-лосса.
KST определяет изменения тренда, EMA подтверждает направление.
Использование быстрых/медленных перекресток и нулевой линии позволяет избежать ненужных сделок.
EMA как поддержка/сопротивление далее фильтрует ложные сигналы.
Автоматическое отслеживание стоп-лосса контролирует риск и позволяет получать прибыль.
Простые параметры облегчают реализацию и оптимизацию.
KST отстает в обнаружении изменений тренда, может упустить некоторые шансы.
EMA отстает от реверсий тренда.
Слишком широкая стоп-потеря увеличивает потери, слишком плотная задерживается шипами.
Частые сигналы могут увеличивать транзакционные расходы, могут ужесточать правила входа, чтобы сократить торговлю.
Оптимизировать периоды KST для чувствительности к конкретным инструментам.
Проверьте другие скользящие средние, такие как MA, WMA, чтобы увидеть, какой лучше всего сочетается с KST.
Экспериментируйте с динамическими остановками, основанными на показателях волатильности, таких как ATR.
Добавьте фильтры, такие как пики громкости, чтобы избежать ловушек.
Подумайте о сочетании с такими индикаторами, как RSI, MACD для большего количества измерений.
Испытывать параметры по всем инструментам для оптимизации для каждого.
Эта стратегия имеет четкую, надежную логику, которую легко реализовать. 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')