Эта стратегия прогнозирует тенденции, оценивая
Судите о длине тела объекта текущей K-линии. Если она больше чем в 3 раза среднее значение тела предыдущих 6 K-линий, она считается
Если есть 3 последовательных
При оценке сигнала, если цена прорвется через предыдущую высокую или низкую точку, также будут генерироваться дополнительные торговые сигналы.
Откройте позиции только тогда, когда цена прорвется через SMA.
После принятия позиции, если цена снова пройдет через точку входа или SMA, закрыть позицию.
Использование "значимых строк" для оценки тенденций может отфильтровать ненужные помехи и дать более четкие сигналы.
Сочетание сигналов тренда и сигналов прорыва улучшает качество сигнала и уменьшает ложные сигналы.
Продажи с высокой цены и низкой цены не допускаются при использовании фильтров SMA.
Установление условий получения прибыли и прекращения убытков облегчает своевременный контроль рисков.
Эта агрессивная стратегия оценивает сигналы только с трех баров и может ошибочно оценивать краткосрочные колебания как перевороты тренда.
Недостаточные данные обратного тестирования.Результаты могут варьироваться в зависимости от продукта и от сроков.
Нет контроля позиций на ночь, с риском на ночь.
Далее оптимизировать параметры для
Испытать воздействие различных временных рамок для поиска оптимальных параметров.
Добавьте к управлению рисками стоп-лосс на основе ATR.
Подумайте о том, чтобы добавить контроль над ночным положением.
Эта стратегия использует "смысленную" фильтрацию и суждение о тренде для генерации торговых сигналов в сочетании с прорывами. Она эффективно отфильтровывает ненужные незначительные колебания для более ясных и надежных сигналов. Однако из-за коротких циклов суждения существуют определенные риски ошибочного суждения.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //AlexInc //2018 // закрытие - вычислить и в течение скольки-то баров его добиваться // если нет, то по первому противоположному // по стоп-лоссу в любом случае - стоп вычислить //@version=2 strategy(title = "AlexInc's Bar v1.2", shorttitle = "AlexInc Bar 1.2", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") tryprofitbars = input(6, defval = 6, minval = 1, maxval = 100, title = "Number of candles to take profit anyway") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") useSMAfilter = input(false, defval = true, title = "Use SMA filter") SMAlimit = input(10, defval = 10, minval = 1, maxval = 30, title = "SMA filter limit") bodysizeMlt = input(3, defval = 3, minval = 1, maxval = 10, title = "Body Size Multiplier") meanfulbardiv = input(3, title = "Meanful Bar size Divider") showarr = input(false, defval = false, title = "Show Arrows") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //SMA # index = 0 index := barstate.isfirst ==true ? 0 : nz(index[1])+1 buyindex = 0 buyindex := barstate.isfirst ==true ? 0 : buyindex[1] sellindex = 0 sellindex := barstate.isfirst ==true ? 0 : sellindex[1] //predictprofit = barstate.isfirst ==true ? 0 : predictprofit[1] smafilter = sma(close, SMAlimit) //Body body = abs(close - open) range = abs(high - low) abody = sma(body, 6) max3 = 0 if body >= body[1] and body >= body[2] max3 := body else if body[1] >= body and body[1] >= body[2] max3 := body[1] else if body[2] >= body and body[2] >= body[1] max3 := body[2] prevmax3 = 0 prevmax3 := nz(max3[1]) bar = close > open ? 1 : close < open ? -1 : 0 firstbullishopen = 0 firstbullishopen := bar == 1 and bar[1] != 1 ? open : nz(firstbullishopen[1]) firstbearishopen = 0 firstbearishopen := bar == -1 and bar[1] != -1 ? open : nz(firstbearishopen[1]) meanfulbar = body > abody / meanfulbardiv meanfulbearish = 0 meanfulbearish := nz(meanfulbearish[1]) meanfulbullish = 0 meanfulbullish := nz(meanfulbullish[1]) if meanfulbar if bar == 1 meanfulbullish := 1 + meanfulbullish meanfulbearish := 0 else if bar == -1 meanfulbearish := 1 + meanfulbearish meanfulbullish := 0 plot(min(low, high)-10, style=circles, color = meanfulbar ? yellow:black, linewidth=3) //Signals up1 = (meanfulbearish >= 3) and (close < firstbullishopen or 1) and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter) if up1 == true predictprofit = sma(body, 3) up2 = sma(bar, 1) == -1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter) if up2 == true predictprofit = body * 0.5 plot(min(low, high), style=circles, color = up1?blue:up2?green:gray, linewidth=3) dn1 = (meanfulbullish >= 3) and (close > firstbearishopen or 1) and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter) if dn1 ==true predictprofit = sma(body, 3) dn2 = sma(bar, 1) == 1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter) if dn2 ==true predictprofit = body * 0.5 plot(max(low, high), style=circles, color = dn1?blue:dn2?green:gray, linewidth=3) exit = (((strategy.position_size > 0 and bar == 1 ) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 ) // or index >= buyindex (or sellindex) + tryprofitbars //Arrows col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na needup = up1 or up2 needdn = dn1 or dn2 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 or up2 if strategy.position_size < 0 strategy.close_all() buyindex = index sellindex = index if strategy.position_size == 0 buyindex = index strategy.entry("Long", strategy.long, needlong == false ? 0 : lot ) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() buyindex = index sellindex = index if strategy.position_size == 0 sellindex = index strategy.entry("Short", strategy.short, needshort == false ? 0 : lot ) if exit strategy.close_all()