
La estrategia se utiliza principalmente para automatizar la inversión de líneas largas en BTC. La dirección de la tendencia se determina mediante el cruce de dos EMA y LSMA, y el indicador ATR se utiliza para calcular el stop loss dinámico, lo que permite un seguimiento eficaz de la tendencia de BTC.
El EMA de 25 días y el LSMA de 100 días forman dos líneas medias, cuyos cruces se utilizan para determinar la tendencia del mercado. El EMA responde rápidamente a los cambios en los precios, el LSMA filtra falsos breaks.
Cuando el EMA rápido atraviesa el LSMA lento y se considera que sigue en una tendencia alcista, se hace más; por el contrario, cuando el EMA rápido atraviesa el LSMA lento y se considera que entra en una posición vacante, se hace un equilibrio.
Después de entrar en el mercado, el stop loss dinámico calculado con el indicador ATR se ajusta constantemente para lograr un seguimiento efectivo de la tendencia alcista de BTC. En concreto, la línea de stop loss comienza con el precio de entrada, y luego cada ajuste se desplaza hacia arriba en la amplitud ATR de proporción fija.
La línea de parada es capaz de bloquear eficazmente las fluctuaciones causadas por la subida de BTC, al tiempo que evita que los puntos de parada estén demasiado cerca del precio más reciente y causen paros frecuentes. Además, la estrategia también establece dos paradas móviles en diferentes proporciones para bloquear más ganancias.
El uso de dos líneas equilibradas para determinar tendencias es más fiable y puede prevenir la generación de señales falsas.
ATR traza los stop loss dinámicamente, lo que permite bloquear la mayor parte de las ganancias y evitar los pequeños y frecuentes stop loss.
Independientemente de si la operación de múltiples cabezas ha terminado o no, la pérdida del nudo se detendrá cuando se emita la señal de salida de la línea media, y el riesgo estará controlado.
El alto grado de automatización, sin necesidad de intervención humana, facilita el funcionamiento del disco duro durante mucho tiempo.
La gente sigue atenta a las noticias importantes, para evitar grandes pérdidas de puntos.
Aunque la combinación de dos líneas equiláteras reduce la posibilidad de falsos señales, es difícil evitarlas por completo en situaciones de temblor.
La configuración incorrecta de los parámetros de ATR también puede afectar el efecto de deterioro, que debe ajustarse según la variedad.
La falta de un ciclo de medición razonable o la falta de actualización a tiempo también puede causar un retraso en la señal.
Garantizar la estabilidad del servidor y evitar que las fallas anormales causen interrupciones automáticas de las transacciones.
Se puede intentar agregar más indicadores para juzgar tendencias, como las bandas de Brin. O usar modelos de aprendizaje automático para predecir precios.
El método de cálculo de la pérdida dinámica de ATR también se puede ajustar y optimizar para hacer que la pérdida se detenga más suavemente.
Se puede agregar un mecanismo de alerta basado en el volumen de transacciones y el movimiento diario de FEATURE para evitar impactos de noticias importantes.
Los parámetros de las diferentes monedas son diferentes y se pueden entrenar parámetros personalizados con más datos históricos.
En general, esta estrategia es un programa de inversión automática de BTC muy práctico. El uso de dos EMA para determinar la gran tendencia es muy confiable, complementado con el seguimiento de ATR para detener los pérdidas, puede obtener una buena ganancia y una duración muy larga.
// 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")