Эта стратегия генерирует торговые сигналы путем расчета перекрестка между двумя линиями EMA разных периодов для определения рыночных тенденций. Она будет открывать длинные позиции, когда более короткий период EMA пересекает более длинный период EMA, указывая на восходящий тренд, и она будет закрывать позиции, когда более короткий период EMA пересекает ниже более длинного периода EMA, указывая на нисходящий тренд.
Стратегия в основном применяет теорию "золотого креста" и "смертного креста" двойных линий EMA. Двойные линии EMA состоят из длинной EMA и короткой EMA. Краткий параметр EMA установлен на 10 дней, а длинный параметр EMA установлен на 21 день.
Когда короткая EMA пересекает длинную EMA, генерируется сигнал покупки. Когда короткая EMA пересекает длинную EMA, генерируется сигнал продажи. Стратегия также устанавливает пороги темпов роста, открывая длинные позиции только тогда, когда рост превышает положительный порог, и закрывая позиции только тогда, когда падение превышает отрицательный порог.
В частности, условием покупки является то, когда короткая EMA выше длинной EMA, а темпы роста акций превышают положительный порог.
Общая стратегия относительно проста и надежна, используя двойные перекрестки EMA для определения ценовых тенденций и установления порогов темпов роста для генерации торговых сигналов. По сравнению с перекрестками одной линии, она может отфильтровать некоторые ложные сигналы.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2) useTimeLimit = input(defval = false, title = "Use Start Time Limiter?") startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => true lenght0 = input(10) lenght1 = input(21) source = close EmaShort = ema(ema(source, lenght0), lenght0) EmaLong = ema(ema(source, lenght1),lenght1) plot(EmaShort, color=red) plot(EmaLong, color=purple) growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2) thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01) thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001) if( startTimeOk() ) buy_condition = EmaShort > EmaLong and growth > thresholdUp buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown strategy.entry("buy", strategy.long, comment="buy", when=buy_condition) strategy.close(id='buy', when=buy_exit_condition)