Esta estratégia opera com base no preço máximo do dia anterior de negociação e pertence ao tipo de estratégia de acompanhamento de tendências. Abrirá uma posição extra quando a posição ultrapassar o preço máximo do dia anterior de negociação e reabrirá a posição mesmo que haja várias quebras no dia.
Usar a função LucF para evitar a retroalimentação e ver a linha K mais recente.
Determine se o novo dia de negociação abriu. Registre o preço máximo do dia (max_today) e o preço mínimo do dia (min_today).
Comparar preços atuais de max_today e max_high, atualizar max_today
Comparar preços mínimos atuais low e min_today, atualizar min_today。
Descreva os preços mais altos e mais baixos do dia anterior.
O ponto de abertura de uma posição é definido como o momento em que a posição ultrapassa o preço máximo do dia anterior, podendo ser adicionado um certo GAP ao preço máximo para atrasar ou antecipar a entrada.
Configure a proporção de stop loss (sl) e a proporção de stop loss (tp).
A posição é aberta quando o preço ultrapassa o máximo do dia anterior.
Configure pontos de parada e de parada.
Pode-se escolher se o rastreamento de perda será ativado, definir os requisitos mínimos para iniciar o rastreamento de perda e a distância do rastreamento de perda.
Pode ser selecionado para determinar o estado da EMA durante o desligamento.
É uma estratégia de acompanhamento de tendências relativamente simples, com as seguintes vantagens:
Os sinais de estratégia são simples, claros e fáceis de implementar.
Os sinais de confirmação de tendências que se formam com a ruptura dos preços mais altos do dia de negociação anterior podem ser usados para filtrar o ruído dos mercados de turbulência.
A sensibilidade de entrada pode ser ajustada através de parâmetros GAP.
O risco global é controlado e o stop loss é claro.
Pode-se optar por usar o tracking stop para bloquear mais lucros.
A decisão da EMA pode ser combinada com a de evitar o uso de uma emboscada.
A estratégia também apresenta alguns riscos que devem ser lembrados:
O fracasso pode causar prejuízos e um preço de stop loss razoável deve ser estabelecido.
A eficácia da ruptura depende de que o mercado esteja em tendência e seja facilmente manipulado em mercados de turbulência.
O tracking stop loss pode ser muito sensível se não for configurado corretamente, sendo o stop loss ajustado por um pequeno valor.
A EMA também pode ser sensível ou lenta se os parâmetros não forem escolhidos corretamente.
Existem várias variáveis que requerem atenção e otimização, como o GAP, a amplitude de stop loss, a configuração de stop loss de rastreamento, etc.
A estratégia pode ser melhorada em alguns aspectos:
O stop loss é ajustado do valor fixo para o ATR ou para o stop loss dinâmico da tendência.
Aumentar a eficácia de uma ruptura através de um filtro de diferença padrão.
Aumentar as condições baseadas na volatilidade para evitar que os tremores não tenham efeito.
Optimizar os parâmetros do EMA para um julgamento mais estável e preciso.
Optimizar os parâmetros de rastreamento de perdas para que sejam mais adequados à amplitude das flutuações do mercado.
Teste de robustez de parâmetros de diferentes variedades.
Aumentar o mecanismo de ajuste dinâmico do tamanho da posição.
A estratégia em geral é mais simples e prática, pertence à típica estratégia de acompanhamento de tendências, a ruptura do preço máximo do dia de negociação anterior serve como sinal para acompanhar a tendência, o controle de risco depende principalmente do stop loss. Com a otimização de parâmetros razoáveis, a estratégia pode obter um melhor efeito em situações de tendência.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub
//@version=5
strategy("Yesterday's High", overlay=true, pyramiding = 1,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity, default_qty_value=10,
slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
commission_type=strategy.commission.percent, commission_value=0.075
)
// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------
// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)
roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")
closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100 > roc_threshold : true
// -----------------------------------------------------------------------------
// Trigger Point
// -----------------------------------------------------------------------------
open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60
bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")
first_bar = 0
if open_session
first_bar := bar_index
var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0
if first_bar
high_daily1 := max_today
low_daily1 := min_today
today_open := open
max_today := high
min_today := low
if high >= max_today
max_today := high
if low < min_today
min_today := low
same_day = today_open == today_open[1]
plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')
// -----------------------------------------------------------------------------
// Strategy settings
// -----------------------------------------------------------------------------
Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100
sl = input.float(3, "Stop-loss", step= 0.5, group = "Entry")
tp = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)
sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100
stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100
mess_buy = "buy"
mess_sell = "sell"
// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------
if close < high_daily1 and roc_filter
strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)
ts_n = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)
plot(ma1, title='EMA', color=color.new(color.yellow, 0))
if ts_n == true
strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)
if close_ema == true and ta.crossunder(close,ma1)
strategy.close("Entry",comment = "Close" , alert_message = mess_sell)