
Стратегия - это краткосрочная количественная торговая стратегия, основанная на простых движущихся средних (SMA), индикаторных движущихся средних (EMA), каналах Келтнера, MACD и случайных (Stochastic). Она объединяет многомерные сигналы канала Келтнера, MACD и Stochastic в зависимости от того, будет ли цена преодолевать SMA и EMA, чтобы автоматизировать вход и выход.
Эта стратегия использует 25-циклические SMA, 200-циклические EMA для построения двойного движущегося среднего показателя. При этом, когда цена пересекает двойную движущуюся среднюю снизу вверх, создается сигнал покупки. При этом, когда цена пересекает двойную движущуюся среднюю снизу вверх, создается сигнал продажи.
В то же время, стратегия использует 10 циклов для построения канала Келтнера, и в качестве вспомогательного сигнала также используются верхние и нижние треки ценового прорыва. MACD-индикатор создает сигнал покупки и продажи через быструю линию, медленную линию и MACD-пост.
В частности, когда цена закрытия выше SMA и EMA, и находится внутри канала Келтнера, MACD-пост имеет отрицательное значение, Stochastic% K-значение ниже 50 дает сигнал покупать, делать больше; когда цена закрытия ниже SMA и EMA, и находится внутри канала Келтнера, MACD-пост имеет положительное значение, Stochastic% K-значение выше 50, дает сигнал продавать, делать пустоту.
Эта стратегия объединяет четыре часто используемых технических показателя: скользящую среднюю, канальную, MACD и стохастическую. Определение многорыча по ценовым прорывам и непрорывам является типичной стратегией количественной торговли на короткой линии.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
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/
// © exlux99
//@version=5
strategy(title="Scalping Trading System Crypto and Stocks", overlay=true)
src = input(low, title="Source")
//sma and ema
len = input.int(25, minval=1, title="Length SMA" , group="Moving Averages")
len2 = input.int(200, minval=1, title="Length EMA", group="Moving Averages")
out = ta.sma(src, len)
out2 = ta.ema(src, len2)
//keltner
lengthk = input.int(10, minval=1, title="Length Keltner Channel",group="Keltner")
mult = input(2.0, "Multiplier",group="Keltner")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style",group="Keltner")
atrlength = input(14, "ATR Length",group="Keltner")
ma = ta.sma(src, lengthk)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, lengthk)
upper = ma + rangema * mult
lower = ma - rangema * mult
//stoch
periodK = input.int(10, title="%K Length", minval=1,group="Stochastic")
smoothK = input.int(1, title="%K Smoothing", minval=1,group="Stochastic")
periodD = input.int(1, title="%D Smoothing", minval=1,group="Stochastic")
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
//macd 1
fast_length = input(title="Fast Length MACD", defval=4,group="MACD Fast")
slow_length = input(title="Slow Length MACD", defval=34,group="MACD Fast")
signal_length = input.int(title="Signal Smoothing MACD", minval = 1, maxval = 50, defval = 5,group="MACD Fast")
sma_source = input.string(title="Oscillator MA Type MACD", defval="EMA", options=["SMA", "EMA"],group="MACD Fast")
sma_signal = input.string(title="Signal Line MA Type MACD", defval="EMA", options=["SMA", "EMA"],group="MACD Fast")
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
long= close > out and close < upper and close > lower and hist < 0 and k < 50 and close > out2
short= close < out and close < upper and close > lower and hist > 0 and k > 50 and close < out2
strategy.entry("long",strategy.long,when= long)
strategy.entry("short",strategy.short,when=short)