
Стратегия основана на Бувинко-индикаторе, разработанном для автоматического распознавания рыночных тенденций и создания свободных позиций. Она интегрирует технические индикаторы, такие как Бувинко-индикатор, движущиеся средние и горизонтальные линии поддержки, которые могут автоматически идентифицировать прорывные сигналы и создавать позиции.
Центральным показателем этой стратегии является показатель Бувинко, который определяет рыночные тенденции и важные уровни поддержки/сопротивления путем расчета коэффициентов разрыва цен на закрытие в разные торговые дни. Когда индикатор пересекает определенную горизонтальную линию, он делает больше, а когда он пересекает, он делает меньше.
Кроме того, стратегия включает в себя защитную ленту EMA, состоящую из нескольких движущихся средних, таких как 21, 55 и т. Д. В зависимости от упорядоченности этих равномерных отношений, в настоящее время рассматривается рынок с несколькими цепями, рынок с пустыми цепями или рынок с полным объемом, и соответственно ограничивается пробег или многооперация.
Используя индикатор Бувинко для идентификации торговых сигналов, движущаяся средняя определяет рыночную фазу, и в сочетании с этим можно избежать ненадлежащего построения позиций.
Самым большим преимуществом этой стратегии является то, что она позволяет автоматически идентифицировать тенденции на рынке, а показатель Бувенко очень чувствителен к разницам в ценах на два временных периода, что позволяет быстро определить ключевые сопротивления поддержки. В то же время, сортировка скользящих средних позволяет эффективно оценить текущую ситуацию, будь то лишний или заниженный.
Такая комбинация быстрых и трендовых индикаторов позволяет стратегии быстро находить точки купли-продажи, предотвращая неуместные покупки. Это является наибольшим преимуществом стратегии.
Риски этой стратегии исходят в основном из двух аспектов: первый - сам Бувенко очень чувствителен к ценовым изменениям и может создавать много ненужных торговых сигналов; второй - перемещающаяся средняя может сортировать хаос в горизонтальном положении, что приводит к созданию хаоса в позициях.
Для риска первой точки можно соответствующим образом скорректировать параметры показателя Бувенко, увеличить циклы подсчета показателя, уменьшить ненужные сделки; для риска второй точки можно добавить больше скользящих средних, чтобы сделать более точный прогноз тенденции.
Основным направлением оптимизации этой стратегии является корректировка параметров и увеличение условий фильтрации.
Для показателя Бувенко можно попробовать различные циклические параметры, чтобы найти оптимальную комбинацию параметров; для движущихся средних можно продолжать добавлять больше средних линий, чтобы сформировать более полную систему определения тенденций. Кроме того, можно добавить фильтрующие условия, такие как показатель волатильности, показатель объема торговли, чтобы уменьшить ложные сигналы.
С помощью комплексной корректировки параметров и условий можно еще больше повысить стабильность и рентабельность стратегии.
Эта адаптивная стратегия Бвинкодо успешно сочетает в себе быстрые и трендовые индикаторы, позволяя автоматически идентифицировать ключевые точки рынка и создавать правильные позиции. Ее преимущество заключается в способности быстро ориентироваться и предотвращать создание ненадлежащих позиций. Следующий шаг может быть оптимизирован с помощью параметров и условий, что еще больше повышает стабильность стратегии и уровень прибыльности.
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 1m
basePeriod: 1m
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/
// © boftei
//@version=5
strategy("Boftei's Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, margin_long = 100, margin_short = 100, slippage=0, commission_type=strategy.commission.percent, commission_value = 0, initial_capital = 40, precision = 6)
strat_dir_input = input.string("all", "strategy direction", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
//DATA
testStartYear = input(2005, "Backtest Start Year")
testStartMonth = input(7, "Backtest Start Month")
testStartDay = input(16, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////
sell = input.float(0.0065, "sell level")
buy = input.float(0, "buy level")
long1 = input.float(-0.493, "long retry - too low")
long2 = input.float(2, "long close up")
long3 = input.float(-1.5, "long close down")
short1 = input.float(1.26, "short retry - too high")
short2 = input.float(-5, "dead - close the short")
///< botvenko script
nn = input(60, "Histogram Period")
float x = 0
float z = 0
float k = 0
y = math.log(close[0]) - math.log(close[nn])
if y>0
x := y
else
k := y
//---------------------------------------------
plot(y > 0 ? x: 0, color = color.green, linewidth = 4)
plot(y <= 0 ? k: 0, color = color.maroon, linewidth = 4)
plot(y, color = color.yellow, linewidth = 1)
co = ta.crossover(y, buy)
cu = ta.crossunder(y, sell)
retry_long = ta.crossunder(y, long1)
deadline_long_up = ta.crossover(y, long2)
deadline_long_down = ta.crossunder(y, long3)
retry_short = ta.crossover(y, short1)
deadline_short = ta.crossunder(y, short2)
hline(buy, title='buy', color=color.green, linestyle=hline.style_dotted, linewidth=2)
hline(0, title='zero', color=color.white, linestyle=hline.style_dotted, linewidth=1)
hline(sell, title='sell', color=color.red, linestyle=hline.style_dotted, linewidth=2)
hline(long1, title='long retry', color=color.blue, linestyle=hline.style_dotted, linewidth=2)
hline(long2, title='overbought', color=color.teal, linestyle=hline.style_dotted, linewidth=2)
hline(long3, title='oversold', color=color.maroon, linestyle=hline.style_dotted, linewidth=2)
hline(short1, title='short retry', color=color.purple, linestyle=hline.style_dotted, linewidth=2)
hline(short2, title='too low to short - an asset may die', color=color.navy, linestyle=hline.style_dotted, linewidth=2)
////////////////////////////////////////////////////////////EMAprotectionBLOCK
ema_21 = ta.ema(close, 21)
ema_55 = ta.ema(close, 55)
ema_89 = ta.ema(close, 89)
ema_144 = ta.ema(close, 144)
//ema_233 = ta.ema(close, 233)
// ema_377 = ta.ema(close, 377)
long_st = ema_21>ema_55 and ema_55>ema_89 and ema_89>ema_144 //and ema_144>ema_233 and ema_233>ema_377
short_st = ema_21<ema_55 and ema_55<ema_89 and ema_89<ema_144 //and ema_144<ema_233 and ema_233<ema_377
g_v = long_st == true?3:0
r_v = short_st == true?-2:0
y_v = long_st != true and short_st != true?2:0
plot(math.log(ema_21), color = color.new(#ffaf5e, 50))
plot(math.log(ema_55), color = color.new(#b9ff5e, 50))
plot(math.log(ema_89), color = color.new(#5eff81, 50))
plot(math.log(ema_144), color = color.new(#5effe4, 50))
//plot(math.log(ema_233), color = color.new(#5e9fff, 50))
//plot(math.log(ema_377), color = color.new(#af5eff, 50))
plot(long_st == true?3:0, color = color.new(color.green, 65), linewidth = 5)
plot(short_st == true?-2:0, color = color.new(color.red, 65), linewidth = 5)
plot(long_st != true and short_st != true?2:0, color = color.new(color.yellow, 65), linewidth = 5)
////////////////////////////////////////////////////////////EMAprotectionBLOCK
if (co and testPeriod() and (g_v == 3 or y_v == 2))
strategy.close("OH BRO", comment = "EXIT-SHORT")
strategy.close("OH DUDE", comment = "EXIT-SHORT")
strategy.entry("OH DAMN", strategy.long, comment="ENTER-LONG 'co'")
if (retry_long and testPeriod() and (g_v == 3 or y_v == 2))
strategy.close("OH DAMN", comment = "EXIT-LONG")
strategy.entry("OH BRUH", strategy.long, comment="ENTER-LONG 'retry_long'")
if (cu and testPeriod() and (r_v == -2 or y_v == 2))
strategy.close("OH DAMN", comment = "EXIT-LONG")
strategy.close("OH BRUH", comment = "EXIT-LONG")
strategy.entry("OH BRO", strategy.short, comment="ENTER-SHORT 'cu'")
if (retry_short and testPeriod() and (r_v == -2 or y_v == 2))
strategy.close("OH BRO", comment = "EXIT-SHORT")
strategy.entry("OH DUDE", strategy.short, comment="ENTER-SHORT 'retry_short'")
if (deadline_long_up and testPeriod() or r_v == -2 and testPeriod())
strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_up'")
if (deadline_long_down and testPeriod())
strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_down'")
if (deadline_short and testPeriod() or g_v == 3 and testPeriod())
strategy.close("OH BRO", comment = "EXIT-SHORT 'deadline_short'")
// (you can use strategy.close_all(comment = "close all entries") here)