Стратегия использует комбинацию движущихся средних в разных временных рамках, чтобы идентифицировать трендовые циклы на часовой графике и достичь низкого риска. Стратегия обладает гибкой конфигурацией, реализует простые, высокие преимущества финансовой эффективности и подходит для трейдеров, которые хотят держать длинные и средние линии.
Стратегия использует три движущихся средних на 5, 20 и 40 дней, чтобы определить комбинацию последовательностей тенденций в разных временных рамках.
В частности, 5-дневная быстрая линия через 20-дневную среднюю линию рассматривается как сигнал короткой линии. 20-дневная медленная линия через 40-дневную среднюю линию рассматривается как сигнал средней линии. Когда быстрая средняя медленная 3-дневная линия правильна ((5-дневная> 20-дневная> 40-дневная), она рассматривается как многоглавный цикл; когда быстрая средняя медленная 3-дневная линия перевернута ((5-дневная < 20-дневная < 40-дневная), она рассматривается как пустой цикл.
Таким образом, в зависимости от направления тенденции большого цикла, а затем в сочетании с малым циклом силы обнаружения конкретного входа. То есть только в случае, когда большие тенденции однонаправленные и малый цикл сильный, можно открыть позиции, чтобы эффективно отфильтровать обратный ложный прорыв, чтобы достичь высокой выигрышной операции.
Кроме того, стратегия также использует ATR-стоп-лосс для контроля риска одиночных ставок и дальнейшего повышения прибыльности.
Конфигурация гибкая, пользователи могут самостоятельно настраивать параметры движущейся средней для различных сортов и предпочтений торговли
Простая реализация, и для новичков это легко.
Высокая эффективность использования капитала, чтобы использовать его как можно больше.
Контролируемые риски и эффективные механизмы предотвращения крупных потерь
Сильная способность следовать за трендом, продолжительная прибыль после того, как большой цикл определит направление
Высокие шансы на победу, хорошее качество сигналов, меньше ошибок в работе трассы
Большое циклическое суждение зависит от смещения средних линий, существует риск задержки ошибочного суждения.
Небольшой цикл интенсивности обнаружения с помощью только одной линии K, может быть задействован раньше, а также может быть соответствующим образом расслаблен
Фиксированная величина торможения, оптимизируемая для динамического торможения
Можно рассмотреть возможность добавления дополнительных условий фильтрации, таких как энергия объема торговли и т.д.
Можно попробовать различные комбинации параметров движущейся средней и оптимизировать стратегию
Эта стратегия, интегрирующая анализ многочасовых рамок и управление остановками, обеспечивает низкий риск для трендовых трейдинговых сделок. Благодаря адаптации параметров, она может быть применена для различных сортов, чтобы удовлетворить потребности последователей тренда. Она обеспечивает более прочные торговые решения и более эффективные сигналы по сравнению с традиционными едиными временными системами. В целом эта стратегия имеет хорошую рыночную адаптацию и перспективы развития.
Эта стратегия использует комбинацию скользящих средних по временным рамкам для выявления ротации тренда на часовых, ежедневных и еженедельных графиках. Она позволяет вести торговлю с низким риском. Стратегия гибкая, проста в реализации, эффективна с капиталом и подходит для средне-долгосрочных трейдеров.
Стратегия использует 5-, 20- и 40-дневные скользящие средние для определения выравнивания тенденций в разные временные рамки.
В частности, пересечение 5-дневного быстрого MA выше 20-дневного среднего MA указывает на восходящий тренд в краткосрочной перспективе. Пересечение 20-дневного среднего MA выше 40-дневного медленного MA сигнализирует о восходящем тренде в среднесрочной перспективе. Когда быстрые, средние и медленные MA положительно выравниваются (5-дневные > 20-дневные > 40-дневные), это бычий цикл. Когда они отрицательно выравниваются (5-дневные < 20-дневные < 40-дневные), это медвежий цикл.
Определяя направление от более крупных циклов и подтверждая силу на более мелких циклах, эта стратегия открывает позиции только тогда, когда основной тренд и незначительный импульс выравниваются.
Стратегия также использует остановки ATR, чтобы контролировать риски единой торговли и еще больше повысить рентабельность.
Гибкая конфигурация для различных инструментов и стилей торговли
Просто внедрить даже для начинающих трейдеров
Высокая эффективность капитала для максимального использования заемных средств
Эффективное управление рисками для предотвращения значительных потерь
Сильная тенденция после устойчивой способности к прибыли
Высокий уровень победы благодаря сильным сигналам и меньшему количеству ударов
Кроссоверы MA могут задерживаться и приводить к позднему обнаружению тренда
Определение силы одной свечи может вызвать преждевременный вход, расслабление состояния.
Фиксированная потеря остановки ATR, оптимизация на динамические остановки
Подумайте о добавлении дополнительных фильтров, таких как объем
Исследуйте различные параметры MA для оптимизации
Эта стратегия объединяет многократный анализ временных рамок и управление рисками для снижения риска тренда после торговли. Благодаря корректировке параметров она может быть адаптирована к различным инструментам в соответствии с трендовыми трейдерами. По сравнению с едиными временными системами она принимает более надежные торговые решения и генерирует более эффективные сигналы. В заключение, эта стратегия имеет хорошую адаптивность рынка и потенциал развития.
/*backtest start: 2023-10-17 00:00:00 end: 2023-11-16 00:00:00 period: 1h basePeriod: 15m 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/ // © kgynofomo //@version=5 strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000) ema_short = ta.ema(close,5) ema_middle = ta.ema(close,20) ema_long = ta.ema(close,40) cycle_1 = ema_short>ema_middle and ema_middle>ema_long cycle_2 = ema_middle>ema_short and ema_short>ema_long cycle_3 = ema_middle>ema_long and ema_long>ema_short cycle_4 = ema_long>ema_middle and ema_middle>ema_short cycle_5 = ema_long>ema_short and ema_short>ema_middle cycle_6 = ema_short>ema_long and ema_long>ema_middle bull_cycle = cycle_1 or cycle_2 or cycle_3 bear_cycle = cycle_4 or cycle_5 or cycle_6 // label.new("cycle_1") // bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na) // bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na) // bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na) // bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na) // bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na) // bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na) // Inputs a = input(2, title='Key Vaule. \'This changes the sensitivity\'') c = input(7, title='ATR Period') h = false xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close xATRTrailingStop = 0.0 iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1 xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATRTrailingStop) below = ta.crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop atr = ta.atr(14) atr_length = input.int(25) atr_rsi = ta.rsi(atr,atr_length) atr_valid = atr_rsi>50 long_condition = buy and bull_cycle and atr_valid short_condition = sell and bear_cycle and atr_valid Exit_long_condition = short_condition Exit_short_condition = long_condition if long_condition strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here") if Exit_long_condition strategy.close("Andy Buy",comment="Andy Buy Out") // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here") // strategy.close("Andy fandan Buy",comment="Andy short Out") if short_condition strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here") // strategy.exit("STR","Long",stop=longstoploss) if Exit_short_condition strategy.close("Andy Short",comment="Andy short Out") // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here") // strategy.close("Andy fandan Short",comment="Andy Buy Out") inLongTrade = strategy.position_size > 0 inLongTradecolor = #58D68D notInTrade = strategy.position_size == 0 inShortTrade = strategy.position_size < 0 // bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //atr > close *0.01* parameter // MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad // ************************************************************************************************************************************************************************************************************************************************************************* show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad') prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad') if show_performance new_month = month(time) != month(time[1]) new_year = year(time) != year(time[1]) eq = strategy.equity bar_pnl = eq / eq[1] - 1 cur_month_pnl = 0.0 cur_year_pnl = 0.0 // Current Monthly P&L cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 // Current Yearly P&L cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1 // Arrays to store Yearly and Monthly P&Ls var month_pnl = array.new_float(0) var month_time = array.new_int(0) var year_pnl = array.new_float(0) var year_time = array.new_int(0) last_computed = false if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(month_pnl) array.pop(month_time) array.push(month_pnl , cur_month_pnl[1]) array.push(month_time, time[1]) if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(year_pnl) array.pop(year_time) array.push(year_pnl , cur_year_pnl[1]) array.push(year_time, time[1]) last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1]) // Monthly P&L Table var monthly_table = table(na) if (barstate.islastconfirmedhistory) monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1) table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc) table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc) table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc) table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc) table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc) table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc) table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc) table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc) table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc) table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc) table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc) table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc) table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc) table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999) for yi = 0 to array.size(year_pnl) - 1 table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc) y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0)) for mi = 0 to array.size(month_time) - 1 m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1 m_col = month(array.get(month_time, mi)) m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))