Эта стратегия сочетает в себе индикатор полосы Боллинджера и индикаторы объема, чтобы определить сильные возможности прорыва импульса выше верхней полосы Боллинджера при большом объеме торговли и вхождении в длинные позиции.
Эта стратегия в основном рассматривает три фактора: уровень цен, импульс и тенденцию. Когда цена выходит из верхней полосы Боллинджера в зону покупки, всплеск объема торговли указывает на сильный импульс и приток капитала. Это правильное время для входа в длинную позицию. Затем она использует скользящие средние для определения тенденции рынка, чтобы избежать удержания мертвых позиций. Объединяя ценовое действие, импульс и контроль рисков, она направлена на получение прибыли от сильных тенденций.
Сочетание фильтра объема, он покупает только на настоящий сильный импульс, уменьшая риск.
Способность сократить убытки во времени с помощью определения движущейся средней тенденции, уменьшая убытки от удержания.
Внедрение количественной стратегии, объединяющей несколько показателей для принятия решений.
Ясные кодовые структуры, легкие для чтения и обслуживания.
Боллингерские полосы могут потерпеть неудачу при экстремальных колебаниях цен, отсутствии сигналов или создании ложных сигналов.
Сигналы покупки могут быть нерентабельными без достаточного объема торговли.
Определение тренда скользящих средних также может потерпеть неудачу, не способный полностью обеспечить эффективный стоп-лосс.
Неправильная настройка параметров также влияет на прибыльность стратегии.
Добавить больше технических индикаторов для улучшения анализа тренда и поддержки/сопротивления, улучшения стоп-лосса, например, моделей свечей, каналов, ключевых уровней поддержки.
Добавьте модели машинного обучения для оценки реальных возможностей прорыва, уменьшая ложные сигналы. например, модели глубокого обучения LSTM.
Оптимизировать стратегии управления капиталом, такие как динамическое размещение позиций, отслеживание стоп-лосса, чтобы уменьшить влияние потерь на одну торговлю.
Тестируйте больше продуктов и временных рамок, корректируйте параметры, такие как полосы Боллинджера, окно объема, чтобы улучшить надежность стратегии.
Эта стратегия объединяет индикаторы полосы Боллинджера и объема торговли для выявления сильных импульсных покупательных возможностей, с скользящими средними, обеспечивающими эффективную стоп-лосс. По сравнению со стратегией с одним индикатором, она имеет более высокую точность и возможности контроля рисков. Благодаря модульной конструкции, фильтрам тренда и механизмам стоп-лосса, она формирует легко оптимизируемую импульсную торговую стратегию.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 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/ // © KAIST291 //@version=4 initial_capital=1000 strategy("prototype", overlay=true) length1=input(1) length3=input(3) length7=input(7) length9=input(9) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma9= sma(close,length9) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") mult4= input(2.5, minval=0.001, maxval=50, title="exp2") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 dev4= mult4 * stdev(src, length) upper2=basis + dev4 lower2=basis - dev4 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=( BV>SV and BV>Davgvol) bull2=(BV>SV and BV>Davgvol) bux =(close>Supper and close>Slower and volume<Davgvol) bear=(SV>BV and SV>Davgvol) con=(BV>Wavgvol and rsi>80) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>upper1 and close>Supper and high>upper and rsi<80) strategy.entry("Long",strategy.long) if (strategy.position_avg_price*1.02<close) strategy.close("Long") else if (low<ma9 and strategy.position_avg_price<close) strategy.close("Long") else if (ma20>close and strategy.position_avg_price<close ) strategy.close("Long") else if (rsi>80 and strategy.position_avg_price<close) strategy.close("Long") else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long") else if (high<upper and strategy.position_avg_price<close) strategy.close("Long") ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120)) if (close<strategy.position_avg_price*0.98) strategy.close("Short") else if (rsi<20) strategy.close("Short")