Эта стратегия применяет принципы скрещивания быстрых и медленных движущихся средних для определения направления рыночных тенденций и подачи сигналов о покупке и продаже. Стратегия проста в понимании, легко реализуется и применяется для торговли на короткой средней линии.
Стратегия использует две движущиеся средние, одну быструю и одну медленную. Параметры быстрой линии составляют 3-дневную ЭМА, а медленной - 15-дневную ЭМА.
Стратегия также устанавливает более быстрый параметр 3-дневной ЭМА в качестве линии быстрого выхода. Когда цена падает ниже этой линии быстрого выхода, она определяет обратную тенденцию и выходит из первоначальной многоочередной позиции. Точно так же, когда цена снова прорывает эту линию выхода, она снова переходит в позицию, и, следовательно, сигнализирует о возобновлении.
Конкретные параметры сигналов управления следующие:
Быстрая линия спускается вверх, пробивая медленную, делая больше.
Быстрая линия спускается вверх, а медленная линия - вниз.
Цены упали за пределы линии быстрого выхода, а позиции пошли вниз.
Цены вновь пробиваются через линию быстрого выхода и делают больше.
Простая в использовании, требует только параметров с двумя подвижными средними, очень легко реализовать
Обратные данные достаточно, используются более распространенные показатели, которые позволяют оценить эффективность стратегии
Более конфигурируемые параметры, можно оптимизировать политику путем корректировки параметров
Стойка убытков с помощью быстрого вывода средней величины позволяет лучше контролировать риск
Я думаю, что это будет очень полезно, потому что это будет способствовать тому, что мы сможем достичь успеха.
Ограничьте частоту операций, избегайте слишком частых сделок
В качестве стратегии отслеживания тенденций, когда тенденции не заметны, создается больше ложных сигналов.
Сам по себе движущийся средний имеет отсталость и может пропустить поворотный момент.
Фиксированная параметровая настройка не может адаптироваться к изменениям рынка и должна сочетаться с оптимизированным использованием параметров
Параметры остановки могут быть слишком слабыми, чтобы вовремя остановить убыток
Сигналы о стратегии часто встречаются и могут быть более высокими.
Торговые сигналы могут отклоняться и должны быть подтверждены в сочетании с другими показателями
Оптимизация параметров, подтверждение с помощью других показателей, адекватная смягчение стандартов сдерживания убытков, своевременное обновление параметров и другие способы управления рисками.
Можно проверить оптимизацию параметров скользящих средних, чтобы они соответствовали текущим рыночным характеристикам.
Можно ввести больше показателей для их комбинирования в более мощную систему стратегий.
Можно установить адаптивные параметры настройки, в зависимости от рынка в режиме реального времени корректировки параметров
Внедрение алгоритмов машинного обучения для оптимизации стратегий более интеллектуального характера.
Можно установить динамическую остановку, отслеживать остановку для лучшего контроля риска
Можно комбинировать показатели количественной энергии, чтобы избежать отклонений, приводящих к неисправности.
Эта стратегия в целом является более простой двойной пересекающейся средней стратегией. Она использует пересекающиеся отношения между быстрой средней и медленной средней линией для определения рыночных тенденций и времени покупки и продажи. Преимущества стратегии заключаются в четкости мысли, простоте внедрения и возможности адаптации к различным рынкам путем оптимизации параметров.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 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/
// © ehaarjee, ECHKAY, JackBauer007
//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)
len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)
len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)
len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)
src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)
src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)
src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)
src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)
enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)
out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)
bull = fastMA > slowMALEn
bear = fastMA < slowMASEn
c = bull ? color.green : bear ? color.red : color.white
bgcolor(c)
exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")
bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))
bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))
bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)
bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1])))
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))
bull_reenter = (bull_r) and not(enter_long)
bear_reenter = (bear_r) and not(enter_short)
plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)
plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)
run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 2000)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2100, title = "Thru Year", type = input.integer, minval = 2000)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
var long_position_open = false
var short_position_open = false
if (enter_long and not(bull_exit) and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=4)
long_position_open := true
if (short_position_open)
// strategy.close("SO")
short_position_open := false
if (bull_reenter and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=1)
long_position_open := true
if (bull_exit and long_position_open)
// strategy.close("LO")
long_position_open := false
if (enter_short and not(bear_exit) and not(short_position_open))
// strategy.entry("SO", strategy.short, qty=4)
short_position_open := true
if(long_position_open)
// strategy.close("LO")
long_position_open := false
if (bear_reenter and not(short_position_open))
// strategy.entry("SO", strategy.long, qty=1)
long_position_open := true
if (bear_exit and short_position_open)
// strategy.close("SO")
short_position_open := false
if(run_strategy)
strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
strategy.close("LO", when=(window() and bull_exit and long_position_open))
strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
strategy.close("SO", when=(window() and bear_exit and short_position_open))