Chiến lược bổ sung vị trí hai chiều động

Tác giả:ChaoZhang, Ngày: 2023-11-27 11:33:11
Tags:

img

Tổng quan

Đây là một chiến lược lấy vị trí theo cả hai hướng bằng cách sử dụng các tín hiệu đột phá mạnh ở cả hai hướng. Nó sẽ chọn một hướng để mở vị trí sau khi hai ngọn nến mạnh liên tiếp xuất hiện theo cùng một hướng, sau đó đặt dừng lợi nhuận và dừng lỗ để quản lý rủi ro.

Nguyên tắc chiến lược

Chiến lược này đánh giá hướng thị trường dựa trên các tín hiệu của hai ngọn nến mạnh liên tiếp. Cụ thể, nó tính tỷ lệ phần trăm tăng / giảm của mỗi ngọn nến. Khi tỷ lệ phần trăm tăng / giảm của hai ngọn nến liên tiếp cả hai vượt quá ngưỡng được thiết lập bởi người dùng (chẳng hạn như 6%), nó xác định rằng hướng là mạnh, và mở vị trí dài / ngắn trong ngọn nến thứ ba.

Điều kiện dài: Giá đóng của hai cây nến liên tiếp tăng hơn 6% so với giá đóng trước đó

Điều kiện ngắn: Giá đóng của hai cây nến liên tiếp giảm hơn 6% so với giá đóng trước đó

Sau khi mở các vị trí, nó sẽ thiết lập khoảng cách dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro. Khoảng cách dừng lợi nhuận được nhập bởi người dùng, và khoảng cách dừng lỗ là số nhân (chẳng hạn như 8 lần) giá mở.

Chiến lược này cũng có một số chức năng phụ để kiểm soát rủi ro, chẳng hạn như chỉ cho phép mở các vị trí trong khoảng thời gian cụ thể, đặt số tiền lỗ tối đa, v.v.

Phân tích lợi thế

Đây là một chiến lược giao dịch hai hướng tương đối ổn định và đáng tin cậy.

  1. Giao dịch hai hướng có thể thu được lợi nhuận khi thị trường tăng và giảm, cải thiện sự ổn định.

  2. Việc đánh giá xu hướng dựa trên hai tín hiệu mạnh có thể lọc hiệu quả tiếng ồn và cải thiện chất lượng các vị trí mở.

  3. Các thiết lập dừng lợi nhuận và dừng lỗ là hợp lý, có lợi cho việc kiểm soát rủi ro và giới hạn lỗ.

  4. Các chức năng phụ trợ là toàn diện, chẳng hạn như kiểm soát thời gian, kiểm soát tổn thất tối đa, v.v. Chúng có thể kiểm soát rủi ro rất tốt.

  5. Thật dễ dàng để backtest và tối ưu hóa chiến lược này vì logic là đơn giản và rõ ràng.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Chúng tôi có thể điều chỉnh đúng tham số của tín hiệu đầu tiên để đảm bảo chất lượng tín hiệu.

  2. Khả năng có ba ngọn nến siêu mạnh liên tiếp là tương đối nhỏ, điều này có thể dẫn đến ít cơ hội để mở các vị trí.

  3. Hành vi không hợp lý gây ra bởi các sự kiện đột ngột có thể dẫn đến tổn thất lớn vượt quá khoảng cách dừng lỗ. Chúng ta cần thiết lập số tiền tổn thất tối đa để giải quyết vấn đề này.

  4. Đối với việc thực hiện giao dịch hai hướng, chúng ta cần phải chú ý đến các vấn đề phân bổ quỹ, nếu không nó có thể dẫn đến việc kiếm lợi nhuận mà không dừng lỗ.

Hướng dẫn tối ưu hóa

Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Tối ưu hóa logic của đánh giá tín hiệu đầu tiên để cải thiện chất lượng tín hiệu. Nhiều yếu tố khác có thể được xem xét như thay đổi khối lượng giao dịch, tỷ lệ biến động vv

  2. Tối ưu hóa các tiêu chuẩn dừng lợi nhuận và dừng lỗ. Điều chỉnh các tham số dựa trên các thị trường khác nhau để làm cho tỷ lệ rủi ro-lợi nhuận hợp lý hơn. Khoảng cách dừng lỗ cũng có thể được thiết lập là dừng lỗ năng động.

  3. Thêm thêm các mô-đun kiểm soát rủi ro. Ví dụ: lỗ hàng ngày tối đa, lỗ liên tiếp tối đa vv Để đảm bảo sử dụng tiền hiệu quả và an toàn.

  4. Tối ưu hóa tỷ lệ phân bổ quỹ, để làm cho phân bổ vốn của giao dịch hai hướng hợp lý hơn, ngăn chặn việc kiếm lợi nhuận mà không dừng lỗ.

  5. Thiết lập các kết hợp tham số khác nhau để tối ưu hóa backtesting đối với các loại giao dịch khác nhau, để cải thiện khả năng thích nghi.

Tóm lại

Chiến lược này là một chiến lược vị trí bổ sung hai hướng tương đối mạnh mẽ. Nó có chất lượng tín hiệu cao và khả năng kiểm soát rủi ro nhất định. Nó cũng có nhiều chỗ để tối ưu hóa để cải thiện hơn nữa sự ổn định lợi nhuận. Chiến lược này phù hợp với các thị trường xu hướng trung dài hạn, và nó cũng có thể nắm bắt các cơ hội trong quá trình hợp nhất thị trường.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="GAVAD", shorttitle="GAVAD", overlay=false, initial_capital=36000)

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                     GAVAD %                        //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
Sinal = input(6, title="Sinal", type=input.integer, minval=1, maxval=150)
//Objetivo = input(6, title="Objetivo", type=input.integer, minval=1, maxval=100)
Multip = input(10000, title="Sinal", type=input.integer, minval=1, maxval=100000)



//GavadEntrada1 = (close - low [1])/close[1]
//plot(GavadEntrada1, style=plot.style_line, linewidth=3, color=color.yellow)

//sombra
//DownOL = (low - open ) / open * -10000
//plot(DownOL, style=plot.style_area, linewidth=3, color=color.silver)


// imprime o GAVAD
GavadEntrada = (close - close [1])/close[1] * Multip
plot(GavadEntrada, style=plot.style_histogram, linewidth=3, color=color.purple)

//linha do Sinal
plot(Sinal, style=plot.style_line, linewidth=1, color=color.yellow)
//linha do Objetivo
//plot(Objetivo, style=plot.style_line, linewidth=1, color=color.white)

Fura1 = GavadEntrada [0] >= Sinal
Fura2 = GavadEntrada [1] >= Sinal

Alert = Fura1
plotshape(Alert, style=shape.circle,  location = location.top, color= color.yellow)

SinalON = Fura1 and Fura2
plotshape(SinalON, style=shape.circle,  location = location.bottom, color= color.green)



////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//              CONDIÇÕES DE OPERACAO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////



Sell_Forte2 = SinalON
//plotshape(Sell_Forte2, style=shape.xcross, color=color.yellow, location=location.bottom)

//Call_Forte2 = SinalON
//plotshape(Call_Forte2, style=shape.xcross, color=color.yellow, location=location.top)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    CALENDARIO                      //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//052)
// trading view solicita que se ja informado data para gerar backtest a partir de tal data
//começa backtest do trading sistem em qual data ?

ano = input(2021, minval=1, title="Ano")
mes = input(1, minval=1, maxval=12, title="Mes")
dia = input(1, minval=1, maxval=30, title="Dia")
hora = input(0, minval=1, maxval=23, title="hora")
minuto = input(0, minval=1, maxval=59, title="minuto")
horaabertura = input(10, minval=1, maxval=23, title="hora Inicio Operacao Robo")
minutoabertura = input(40, minval=1, maxval=59, title="Minuto Encerra Tudo")
horaencerra = input(17, minval=1, maxval=23, title="hora Fechamento")
minutoencerra = input(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes")
minutofinaliza = input(50, minval=1, maxval=59, title="Minuto Encerra Tudo")


//valida se o dia de hoje é posterior ao dia informado acima
Validadia = year >= ano and month >= mes and dayofmonth >= dia


//cria horario de abertura de negociaçao, considerar default 10 hs, pois os indicadores ja estarão corrigidos
abreloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaabertura
//and minute >= minutoabertura)


//cria horario de fechamento de todas as negociaçoes, considerar default 17:00 hs
//nenhuma ordem pode ser aberta depois dessa data e as abertas devem ser fechadas
fechaloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutoencerra)

fechaloja2 = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutofinaliza)


//valida horario de negociação, pra liberar as operacoes.
lojaaberta = abreloja == true and fechaloja == false and fechaloja2 == false


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//             GERENCIAMENTO DE RISCO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//seta meta mensal
meta = input(150000, "Meta de Lucro")
Contratos= input(5, "Contratos")

//seta tamanho do lote (ordem inicial-unica)
tamanhodolote = Contratos

//seta stop gain final em pontos (metade da barra anterior)
//gaintotal = input(30, "Gain")
gaintotal = input(3, "Gain")

//seta stop loss final em pontos
lossmaximo = input(8, "Loss")
//lossmaximo = (open- close)*100

////////////////////////////////////////////////////////
//                                                    //
//                     Checkbox                       //
//                                                    //
////////////////////////////////////////////////////////

//ativacomprasretorno = input(title="Ativar Compras Retorno", type=input.bool , defval=true)
//ativavendasretorno = input(title="Ativar Vendas Retorno", type=input.bool , defval=true)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                  COMPRA E VENDA                    //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

Tradenumber = strategy.closedtrades + 1
Batemeta = strategy.netprofit < meta

//COMPRA RETORNO
//longcondition2 = Validadia and Call_Forte2 and Batemeta


//strategy.entry("Comprar", strategy.long, tamanhodolote, when=longcondition2, comment="[Oper=" + tostring(Tradenumber) + "]win=" + tostring(strategy.wintrades) + " | Loss=" + tostring(strategy.losstrades))
//strategy.exit("Saida Compra", "Comprar", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaCallGG)
    //strategy.close(id="Comprar")
//if (EscapeFechaCall)
  // strategy.close(id="Comprar")   
   
    
//plotchar(longcondition2, char="C", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Comprar", "Compra Rápida!")

//VENDA RETORNO
Shortcondition2 = Validadia and Sell_Forte2 and Batemeta

strategy.entry("Vender", strategy.short, tamanhodolote, when=Shortcondition2)
strategy.exit("Fecha Venda", "Vender", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaSellGG)
   // strategy.close(id="Vender")
//if (EscapeFechaSell)
   // strategy.close(id="Comprar")  
//plotchar(CruzamentoFechaSellGG, char="Y", location=location.top, color=color.lime, transp=0) 

//plotchar(longcondition2, char="S", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Vender", "Venda Rápida!")

//fim do codigo

Thêm nữa