Ý tưởng chính của chiến lược này là phát hiện sự củng cố ngắn hạn rõ ràng trong biến động giá cổ phiếu, và sau đó đánh giá hướng tiếp theo có khả năng dựa trên mô hình củng cố hình thành trong giai đoạn
Chiến lược này sử dụng chỉ số dao động Stochastic để xác định xem giá cổ phiếu đã đi vào sự củng cố hay không.
Khi dao động Stochastic dao động, thay đổi hướng nến được sử dụng để phát hiện các điểm đảo ngược xu hướng. Một nến thay đổi từ màu đen sang màu trắng tín hiệu hợp nhất kết thúc và đi dài. Một thay đổi từ màu trắng sang màu đen tín hiệu hợp nhất kết thúc và đi ngắn.
Mục tiêu lợi nhuận và dừng lỗ sau khi nhập được thiết lập năng động dựa trên giá nhập bằng cách sử dụng các điểm dừng.
Chiến lược hỗ trợ cả giao dịch toàn bộ và một phần vị trí.
Các giờ giao dịch cũng được cấu hình trong chiến lược.
Trình dao động chứng khoán xác định chính xác sự củng cố giá ngắn hạn.
Giao dịch tại các điểm đảo ngược sau khi hợp nhất cải thiện độ chính xác.
Việc dừng lại sẽ giữ lợi nhuận khi giá di chuyển thuận lợi.
Hỗ trợ giao dịch toàn bộ và một phần dựa trên ưu tiên rủi ro.
Thời gian giao dịch tránh giao dịch sai trong thời gian biến động.
Trình dao động ngẫu nhiên dễ bị tín hiệu sai, không có mục hoặc đưa ra mục sớm.
Sự đảo ngược nến có thể không chính xác để phát hiện sự thay đổi xu hướng.
Chặn sau bị ảnh hưởng bởi giá thổi.
Rủi ro cao hơn với giao dịch vị trí một phần, tổn thất có thể tăng lên khi đảo ngược.
Các thông số dừng lỗ và dừng kéo theo cần phải được điều chỉnh cho các thiết bị khác nhau.
Các sự kiện lớn có thể ảnh hưởng đến hiệu suất chiến lược.
Tối ưu hóa các thông số dao động Stochastic để phát hiện hợp nhất tốt hơn.
Thêm bộ lọc để xác nhận tín hiệu nến, cải thiện độ chính xác.
Cải thiện các thuật toán dừng theo dõi để theo dõi tốt hơn.
Thêm các quy tắc kích thước vị trí để hạn chế tổn thất trong các cổ phiếu đơn lẻ.
Tránh biến động do sự kiện lớn bằng cách kết hợp lịch trình sự kiện.
Cải thiện mô hình vị trí một phần để nắm bắt tốt hơn xu hướng.
Chiến lược chuyển đổi sau khi hợp nhất xác định hợp nhất ngắn hạn bằng cách sử dụng dao động Stochastic và giao dịch tại các điểm đảo ngược xu hướng sau giai đoạn hợp nhất. Nó có tỷ lệ thắng tốt và cho phép khóa lợi nhuận phân khúc trong xu hướng. Tuy nhiên, Stochastic dễ bị tín hiệu sai. Độ chính xác có thể được cải thiện bằng cách tối ưu hóa các thông số, thêm bộ lọc vv. Ngoài ra, tối ưu hóa các điểm dừng, kiểm soát kích thước vị trí và tránh rủi ro sự kiện là những lĩnh vực cần tập trung. Nhìn chung, chiến lược này cung cấp một mô hình tham chiếu nhưng cần điều chỉnh và kiểm soát rủi ro cho giao dịch trực tiếp dựa trên phong cách giao dịch cá nhân.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Cross', overlay=true, initial_capital=1000 ) // Creditos : Cleber.martinelli //////////////////////////////////////////////////////// // // // // // 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.int(2022, minval=1, title="Ano") mes = input.int(1, minval=1, maxval=12, title="Mes") dia = input.int(1, minval=1, maxval=31, title="Dia") hora = input.int(1, minval=1, maxval=23, title="hora") minuto = input.int(0, minval=0, maxval=59, title="minuto") horaabertura = input.int(10, minval=1, maxval=23, title="hora Inicio Operacao Robo") minutoabertura = input.int(40, minval=1, maxval=59, title="Minuto Encerra Tudo") horaencerra = input.int(17, minval=1, maxval=23, title="hora Fechamento") minutoencerra = input.int(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes") minutofinaliza = input.int(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 //////////////////////////////////////////////////////// // // // // // Codigo Operacional // // // // // //////////////////////////////////////////////////////// // Inputs da Estratégia pmax = input.int(90, minval=0, maxval=100, title="Estocastico Alvo - Para Short") pmin = input.int(10, minval=0, maxval=100, title="Estocastico Alvo - Para Buy ") parcial = input(title="Parcial ? ", defval=true) p_gain = input.int(150, minval=0, maxval=1000, title="Pontos para Gain ") p_loss = input.int(150, minval=0, maxval=1000, title="Pontos para Loss") p_parcial = input.int(50, minval=0, maxval=100, title="Pontos para Parcial ") // puxando os indicadores que usaremos estoc = ta.stoch(close,high,low,5) if (estoc >=pmax and close < open) strategy.entry("Vende", strategy.short ,qty = 2) if (estoc <=pmax and close > open) strategy.entry("Compra", strategy.long ,qty = 2 ) pm_ativo = strategy.opentrades.entry_price(0) if strategy.position_size > 0 and parcial// Posicionado na compra if strategy.position_size == 2 // Mão cheia if close < pm_ativo - 100 strategy.exit("Fecha Compra", "Compra", loss=p_loss , qty = 2 ) if close > pm_ativo + 50 strategy.exit("Fecha Compra", "Compra", profit=p_gain , qty = 1 ) if strategy.position_size == 1// Mão cheia if close < pm_ativo strategy.exit("Fecha Compra", "Compra", loss=0 , qty = 1 ) if close > pm_ativo + 100 strategy.exit("Fecha Compra", "Compra", profit= p_gain * 1.5 , qty = 1 ) if strategy.position_size < 0 and parcial // Posicionado na Venda if strategy.position_size == -2 // Mão cheia if close > pm_ativo - 100 strategy.exit("Fecha Venda", "Vende", loss=p_loss , qty = 2 ) if close < pm_ativo + 50 strategy.exit("Fecha Venda", "Vende", profit=p_gain , qty = 1 ) if strategy.position_size == -1// Mão cheia if close > pm_ativo strategy.exit("Fecha Venda", "Vende", loss=0 , qty = 1 ) if close < pm_ativo + 100 strategy.exit("Fecha Venda", "Vende", profit=p_gain*1.5 , qty = 1 ) if strategy.position_size > 0 and parcial == false // Sem Parcial strategy.exit("Fecha Compra", "Compra", loss=p_loss , profit = p_gain , qty = 2 ) if strategy.position_size < 0 and parcial == false // Sem Parcial strategy.exit("Fecha Venda", "Vende", loss=p_loss , profit = p_gain , qty = 2 )