Esta estratégia visa implementar a gestão de lucros em vários prazos. A estratégia utiliza tanto a percentagem de lucros como os níveis principais de lucros com base em prazos mais longos, para alcançar uma gestão de lucros mais precisa e eficaz.
A estratégia entra em longo quando o indicador de tendência da onda cruza.
Para a gestão do lucro, a estratégia utiliza dois tipos de lucro:
Percentagem de lucro obtido: definir preços de lucro obtido múltiplos com base em certas percentagens do preço de entrada.
Multi-frame de tempo tirar lucro: Desenhar médias móveis nos gráficos diários e de 4 horas, e usar seus preços como preços de tirar lucro.
Para percentagem de lucro, a estratégia define 4 preços de lucro com percentagens diferentes.
Para a obtenção de lucros em vários prazos, a estratégia desenha 100MA e 200MA em gráficos diários e de 4 horas.
Além disso, um preço de stop loss é definido. Quando o preço estiver abaixo do preço de stop loss, todas as posições serão fechadas.
Toda a estratégia combina lucro percentual e lucro multi-temporário para alcançar uma gestão de lucro mais abrangente e sofisticada.
Adotar percentagem de lucro para evitar lucros prematuros ou insuficientes com base em percentagens fixas.
Utilizar a análise de vários prazos para definir preços de lucro mais precisos com melhores níveis.
O take profit em várias camadas permite o fechamento parcial de posições e reduz os riscos.
A fixação do preço de stop loss controla eficazmente os riscos descendentes.
A combinação de lucro percentual e lucro multiframe torna o lucro mais abrangente e refinado.
A percentagem de lucro depende das configurações dos parâmetros, uma configuração inadequada pode levar a um lucro prematuro ou tardio.
A análise de vários prazos depende de médias móveis, que apresentam algum atraso.
A colocação incorreta de um stop loss pode causar um stop loss desnecessário.
Os parâmetros precisam ser otimizados para a melhor correspondência entre a percentagem de lucro e o lucro de vários prazos.
Teste mais médias móveis para encontrar as melhores como os principais preços de lucro.
Tente métodos de previsão de modelos para prever níveis de preços-chave como preços de lucro.
Introduzir mais regras de lucro, como a taxa de lucro esperado, o trailing take profit, etc., para tornar o take profit mais abrangente.
Teste os parâmetros de lucro percentual óptimo em diferentes períodos de detenção.
Otimizar os parâmetros de lucro através de backtesting para melhores rácios de risco-recompensa geral.
Esta estratégia realiza uma gestão flexível e precisa do lucro através da combinação de lucro percentual e lucro multi-tempo. A estratégia tem vantagens como melhor seleção de preço de lucro e lucro mais abrangente. Também tem problemas como configuração de parâmetros e colocação de stop loss. Melhorias de acompanhamento podem ser feitas ao otimizar os parâmetros de lucro, adicionar mais regras de lucro, etc., para tornar o sistema de lucro mais robusto.
/*backtest start: 2023-10-22 00:00:00 end: 2023-10-29 00:00:00 period: 5m 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/ // © TrendCrypto2022 //@version=5 // strategy("Take profit Multi timeframe", overlay=true, margin_long=100, margin_short=100) takepercent = input.bool(title="Take profit %", defval=true ,group="Set up take profit") takemtf = input.bool(title="Take profit Multi timeframe", defval=false ,group="Set up take profit") //Paste your strategy at here. This is example strategy. I use WaveTrend indicator //WaveTrend indicator n1 = input(10, "Channel Length") n2 = input(21, "Average Length") oblv1 = input(60, "Over Bought Lv 1") oblv2 = input(53, "Over Bought Lv 2") oslv1 = input(-60, "Over Sold Lv 1") oslv2 = input(-53, "Over Sold Lv 2") ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1,4) //Strategy buy = ta.crossover(wt1, wt2) and wt1 < -40 if (buy) strategy.entry("Long", strategy.long) //Resistant in time D and 4H ema_len1 = input.int(title='Ema1', defval=100, group='Take profit Mtf') ema_len2 = input.int(title='Ema2', defval=200, group='Take profit Mtf') src = input.source(title='Source', defval=close, group='Take profit Mtf') tf1 = input.timeframe(title='Time frame 1', defval='240', group='Take profit Mtf') tf2 = input.timeframe(title='Time frame 2', defval='D', group='Take profit Mtf') htf_ma1 = ta.ema(src, ema_len1) htf_ma2 = ta.ema(src, ema_len2) ema1 = request.security(syminfo.tickerid, tf1, htf_ma1) ema2 = request.security(syminfo.tickerid, tf1, htf_ma2) ema3 = request.security(syminfo.tickerid, tf2, htf_ma1) ema4 = request.security(syminfo.tickerid, tf2, htf_ma2) //Plot plotema1 = plot(ema1, color=color.new(color.silver, 0), style=plot.style_line, linewidth=1, offset=0, title='Ema100 4h', display=display.none) plotema2 = plot(ema2, color=color.new(color.silver, 0), style=plot.style_line, linewidth=1, offset=0, title='Ema200 4h', display=display.none) plotema3 = plot(ema3, color=color.new(color.orange, 20), style=plot.style_line, linewidth=1, offset=0, title='Ema100 D', display=display.none) plotema4 = plot(ema4, color=color.new(color.orange, 20), style=plot.style_line, linewidth=1, offset=0, title='Ema200 D', display=display.none) //Label take profit multitime frame var label labelema1 = na label.delete(labelema1) labelema1 := label.new(x=time + 120, y=ema1, text='\n*****Ema100 4H: ' + str.tostring(math.round(ema1,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labelema2 = na label.delete(labelema2) labelema2 := label.new(x=time + 120, y=ema2, text='\n*****Ema200 4H: ' + str.tostring(math.round(ema2,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labelema3 = na label.delete(labelema3) labelema3 := label.new(x=time + 120, y=ema3, text='\n*****Ema100 1D: ' + str.tostring(math.round(ema3,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labelema4 = na label.delete(labelema4) labelema4 := label.new(x=time + 120, y=ema4, text='\n*****Ema200 1D: ' + str.tostring(math.round(ema4,4)) + '', color=color.new(#000000, 100), textcolor = color.yellow, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) //Set up take profit % percent(pcnt) => strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) TP1=input.float(3, title="TP1 %", step=0.1, group="Take profit %") TP2=input.float(5, title="TP2 %", step=1, group="Take profit %") TP3=input.float(6, title="TP3 %", step=1, group="Take profit %") TP4=input.float(8, title="TP4 %", step=1, group="Take profit %") SL=input.float(5, title="Stop Loss %", step=1, group="Take profit %") qty1=input.float(5, title="% Close At TP1", step=1, group="Take profit %") qty2=input.float(5, title="% Close At TP2", step=1, group="Take profit %") qty3=input.float(5, title="% Close At TP3", step=1, group="Take profit %") qty4=input.float(5, title="% Close At TP4", step=1, group="Take profit %") lossPnt_L = percent(SL) //Set up take profit multi timeframe a = array.from((ema1), (ema2), (ema3), (ema4)) tpmtf1 = array.min(a) tpmtf2 = array.min(a, 2) tpmtf3 = array.min(a, 3) tpmtf4 = array.min(a, 4) //Set up exit long_sl_level = strategy.position_avg_price - lossPnt_L*syminfo.mintick if takepercent == true strategy.exit("TP1%", "Long", qty_percent = qty1, profit = percent(TP1), loss = lossPnt_L) strategy.exit("TP2%", "Long", qty_percent = qty2, profit = percent(TP2), loss = lossPnt_L) strategy.exit("TP3%", "Long", qty_percent = qty3, profit = percent(TP3), loss = lossPnt_L) strategy.exit("TP4%", "Long", qty_percent = qty4, profit = percent(TP3), loss = lossPnt_L) strategy.close_all(when= ta.crossunder(wt1, wt2) and wt1 > 0, comment="Close All") if takemtf == true and array.max(a, 1) > strategy.position_avg_price strategy.exit("TP1Mtf", "Long", qty_percent = qty1, limit = tpmtf1, stop = long_sl_level) strategy.exit("TP2Mtf", "Long", qty_percent = qty2, limit = tpmtf2, stop = long_sl_level) strategy.exit("TP3Mtf", "Long", qty_percent = qty3, limit = tpmtf3, stop = long_sl_level) strategy.close_all(when= ta.crossunder(wt1, wt2) and wt1 > 0, comment="Close All") // Plot TP & SL long_tp1_level = strategy.position_avg_price + percent(TP1)*syminfo.mintick long_tp2_level = strategy.position_avg_price + percent(TP2)*syminfo.mintick long_tp3_level = strategy.position_avg_price + percent(TP3)*syminfo.mintick long_tp4_level = strategy.position_avg_price + percent(TP4)*syminfo.mintick plot(strategy.position_size > 0 ? long_sl_level : na, color=color.red, style=plot.style_linebr, title="SL Long") plot(strategy.position_size > 0 ? long_tp1_level : na, color=color.lime, style=plot.style_linebr, title="Long TP1%") plot(strategy.position_size > 0 ? long_tp2_level : na, color=color.lime, style=plot.style_linebr, title="Long TP2%") plot(strategy.position_size > 0 ? long_tp3_level : na, color=color.lime, style=plot.style_linebr, title="Long TP3%") plot(strategy.position_size > 0 ? long_tp4_level : na, color=color.lime, style=plot.style_linebr, title="Long TP4%") plot(strategy.position_size > 0 ? tpmtf1 : na, color=color.orange, style=plot.style_linebr, title="Long TP1Mtf", display = display.none) plot(strategy.position_size > 0 ? tpmtf2 : na, color=color.orange, style=plot.style_linebr, title="Long TP2Mtf", display = display.none) plot(strategy.position_size > 0 ? tpmtf3 : na, color=color.orange, style=plot.style_linebr, title="Long TP3Mtf", display = display.none) //Label TP if strategy.position_size > 0 var label labellongtp1 = na label.delete(labellongtp1) labellongtp1 := label.new(x=time + 120, y=long_tp1_level, text='\nTP1: ' + str.tostring(math.round(long_tp1_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labellongtp2 = na label.delete(labellongtp2) labellongtp2 := label.new(x=time + 120, y=long_tp2_level, text='\nTP2: ' + str.tostring(math.round(long_tp2_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labellongtp3 = na label.delete(labellongtp3) labellongtp3 := label.new(x=time + 120, y=long_tp3_level, text='\nTP3: ' + str.tostring(math.round(long_tp3_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price) var label labellongtp4 = na label.delete(labellongtp4) labellongtp4 := label.new(x=time + 120, y=long_tp4_level, text='\nTP4: ' + str.tostring(math.round(long_tp4_level,2)) + '', color=color.new(#000000, 100), textcolor = color.lime, size=size.small, style=label.style_label_left, xloc=xloc.bar_time, yloc=yloc.price)