Chiến lược đảo ngược tín hiệu P


Ngày tạo: 2024-01-29 14:44:56 sửa đổi lần cuối: 2024-01-29 14:44:56
sao chép: 0 Số nhấp chuột: 663
1
tập trung vào
1617
Người theo dõi

Chiến lược đảo ngược tín hiệu P

Tổng quan

Chiến lược đảo ngược tín hiệu P là một chiến lược giao dịch định lượng các tín hiệu không gian xác suất được xây dựng dựa trên các tham số thống kê và hàm sai sót. Nó lấy tín hiệu giao dịch động để nắm bắt các điểm đảo ngược thị trường bằng cách theo dõi các tham số phân bố cực đại của một loạt các đường K.

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

Chỉ số trung tâm của chiến lược này là tín hiệu P, kết hợp các tham số thống kê của trung bình di chuyển và chênh lệch chuẩn, được lập bản đồ từ -1 đến 1 bằng hàm sai số Gaussian, tạo thành chỉ số phán đoán định lượng. Khi tín hiệu P bị hỏng khi quay ngược từ tích cực sang âm, và làm nhiều khi quay ngược từ âm sang tích cực, tạo thành logic của chiến lược quay ngược.

Các tham số chiến lược bao gồm Cardinality, ΔErf và thời gian quan sát. Cardinality kiểm soát số lượng mẫu, ΔErf kiểm soát vùng chết của hàm lỗi, giảm tần suất giao dịch. Thời gian quan sát kiểm soát thời gian bắt đầu chiến lược.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược đảo ngược tín hiệu P là nó dựa trên sự phân bố xác suất của các tham số thống kê, có thể đánh giá hiệu quả các đặc điểm của thị trường và nắm bắt cơ hội đảo ngược. So với chỉ số kỹ thuật đơn lẻ, nó kết hợp nhiều thông tin thị trường hơn, phán đoán toàn diện và đáng tin cậy hơn.

Ngoài ra, các quy định thiết kế tham số hóa của chiến lược, người dùng có thể điều chỉnh không gian tham số theo nhu cầu của mình để tìm kiếm sự kết hợp tốt nhất. Điều này đảm bảo khả năng thích ứng và linh hoạt của chiến lược.

Phân tích rủi ro

Rủi ro chính của chiến lược đảo ngược tín hiệu P là nó phụ thuộc quá nhiều vào các tham số phân bố xác suất, dễ bị ảnh hưởng bởi dữ liệu bất thường và gây ra sai lầm. Ngoài ra, tỷ lệ thua lỗ của chiến lược đảo ngược thường thấp và lợi nhuận đơn lẻ hạn chế.

Có thể giảm tác động của sự bất thường dữ liệu bằng cách tăng số lượng mẫu bằng cách tăng tham số Cardinality. Lớn ΔErf một cách thích hợp và giảm tần suất giao dịch để kiểm soát rủi ro.

Hướng tối ưu hóa

Chiến lược đảo ngược tín hiệu P có thể được tối ưu hóa theo các khía cạnh sau:

  1. Kết hợp với các chỉ số khác để lọc các tín hiệu bất thường, chẳng hạn như các đặc điểm như tăng giao dịch.

  2. Các tín hiệu được xác minh trong nhiều khung thời gian, tăng cường tính ổn định của phán đoán.

  3. Tăng chiến lược dừng lỗ và giảm tổn thất đơn lẻ.

  4. Các tham số tối ưu hóa tìm kiếm sự kết hợp tốt nhất để tăng tỷ lệ lợi nhuận.

  5. Động thái điều chỉnh tham số phán đoán kết hợp với học máy.

Tóm tắt

P-Signal Reversal Strategy xây dựng cơ sở giao dịch định lượng, thiết kế tham số linh hoạt, thân thiện với người dùng. Nó đánh giá hiệu quả các đặc điểm thống kê của thị trường, nắm bắt cơ hội đảo ngược. Chiến lược này có thể tăng cường sự ổn định và lợi nhuận hơn nữa thông qua các phương tiện như xác minh đa chỉ số, tối ưu hóa dừng lỗ.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.exp(-x * x - 1.26551223 + 
     nT * (1.00002368 + nT * (0.37409196 + nT * (0.09678418 + 
     nT * (-0.18628806 + nT * (0.27886807 + nT * (-1.13520398 + 
     nT * (1.48851587 + nT * (-0.82215223 + nT * 0.17087277)))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) =>
    nStDev = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.