
Эта стратегия используется в основном для автоматизации долгосрочных инвестиций в BTC. Для определения направления тренда с помощью пересечения двойных EMA и LSMA, а также для расчета динамических стоп-лостов с использованием индикатора ATR для эффективного отслеживания многообеменных трендов в BTC.
С помощью 25-дневных ЭМА и 100-дневных ЛСМА образуется двойная средняя линия, их пересечение используется для определения тенденций на рынке.
Когда быстрая EMA вверх по медленной LSMA считается в плюсовом тренде, тогда она делает больше; наоборот, когда быстрая EMA вниз по медленной LSMA считается входящей в пустоту, тогда она плавно позиционирует.
После входа в позицию, динамический стоп, рассчитанный с использованием ATR, постоянно корректируется, чтобы эффективно отслеживать тенденцию к росту BTC. В частности, начальная точка стоп-линии - цена входа, после чего каждая корректировка будет скользить вверх по фиксированной пропорции ATR.
Стоп-линия позволяет эффективно блокировать колебания, вызванные ростом цен на BTC, и предотвращает частое блокирование, вызванное слишком близким к последней цене. Кроме того, стратегия также устанавливает два различных пропорциональных движущихся стопа для блокирования большей прибыли.
Использование двойной равнолинейной оценки тенденций более надежно, что эффективно предотвращает появление ложных сигналов.
ATR динамически отслеживает остановки, позволяя закрепить большую часть прибыли, а также избежать частых небольших остановок.
Независимо от того, закончилась ли многоголовая торговля, по мере того, как будет выпущен сигнал выхода из равной линии, убыток будет остановлен, и риск будет контролироваться.
Высокий уровень автоматизации, без вмешательства человека, способствует длительному функционированию диска.
В то же время, поскольку мы не знаем, что произойдет в ближайшее время, мы должны следить за важными новостями, чтобы избежать крупных потерь.
Несмотря на то, что сочетание двух равномерных линий позволяет уменьшить количество ложных сигналов, их сложно полностью избежать в случае возникновения толчков.
Неправильная настройка параметров ATR также может повлиять на эффекты сдерживания убытков, что требует корректировки в зависимости от разновидности.
Нерациональный цикл средней линии или несвоевременное обновление могут привести к задержке сигнала.
Обеспечение стабильности серверов и предотвращение аномальных сбоев, приводящих к автоматическому прерыванию торгов.
Можно попробовать добавить больше показателей для определения тенденций, например, Брин-пояса. Или использовать модели машинного обучения для прогнозирования цен.
Методы расчета динамического остановки ATR также могут быть скорректированы и оптимизированы, чтобы сделать остановку более плавной.
Для предотвращения крупных новостей можно добавить сигнализацию, основанную на количестве сделок, ежедневных поворотах FEATURE.
Различные валюты имеют разные параметры, поэтому можно использовать больше исторических данных для обучения персонализированным параметрам.
В целом, эта стратегия является очень практичной программой автоматического инвестирования в BTC. Использование двойных EMA для определения больших тенденций очень надежно, а также сопровождение остановочных потерь ATR позволяет получать хорошую прибыль, а также длительный срок действия.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading
//@version=4
strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.1)
//////////// Functions
Atr(p) =>
atr = 0.
Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
atr := nz(atr[1] + (Tr - atr[1])/p,Tr)
//TEMA
TEMA(series, length) =>
if (length > 0)
ema1 = ema(series, length)
ema2 = ema(ema1, length)
ema3 = ema(ema2, length)
(3 * ema1) - (3 * ema2) + ema3
else
na
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])
///////////////////////////////////////////////////
/// INDICATORS
source=close
/// TREND
trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type1_length=input(25, "Length of the First Trend Line")
trend_type2_length=input(100, "Length of the Second Trend Line")
leadLine1 = if trend_type1=="LSMA"
linreg(close, trend_type1_length, 0)
else if trend_type1=="TEMA"
TEMA(close,trend_type1_length)
else if trend_type1 =="EMA"
ema(close,trend_type1_length)
else
sma(close,trend_type1_length)
leadLine2 = if trend_type2=="LSMA"
linreg(close, trend_type2_length, 0)
else if trend_type2=="TEMA"
TEMA(close,trend_type2_length)
else if trend_type2 =="EMA"
ema(close,trend_type2_length)
else
sma(close,trend_type2_length)
p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)
//Upward Trend
UT=crossover(leadLine1,leadLine2)
DT=crossunder(leadLine1,leadLine2)
// TP/ SL/ FOR LONG
// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1)
long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(20, title="Long Take Profit 2 Qty", step=1)
long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)
long_sl_input = input(5, title='stop loss in %', step=0.1)/100
long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input)
// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(8,"ATR period", minval=1, step=1)
// Strategy
//LONG STRATEGY CONDITION
SC = input(close, "Source", input.source)
SL1 = multiplier * Atr(ATR_period) // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))
Trail1_high=highest(Trail1,50)
// iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1),
entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close
exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level
///// BACKTEST PERIOD ///////
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
if testPeriod()
if tradeType=="LONG" or tradeType=="BOTH"
if strategy.position_size == 0 or strategy.position_size > 0
strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long)
strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1)
strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2)
strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" )
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")