Chiến lược trượt ngẫu nhiên là một chiến lược giao dịch tự động dựa trên việc tạo ra số ngẫu nhiên. Chiến lược này sử dụng máy tạo dư thừa tuyến tính để tạo ra số ngẫu nhiên từ hạt giống tùy thuộc vào cài đặt, số lớn hơn khi thả giá và nhỏ hơn khi thả giá, để thực hiện ngẫu nhiên vào nhiều vị trí thả giá.
Chiến lược này chủ yếu thực hiện các giao dịch ngẫu nhiên thông qua các phần sau:
Thiết lập các tham số a, c và mômen m được tạo ra bởi số ngẫu nhiên, và hạt giống ban đầu.
Định nghĩa hàm tạo số ngẫu nhiên GetRandom, sử dụng thuật toán đồng vị tuyến tính để tạo số ngẫu nhiên từ 0 - m.
Trong mỗi dòng K, nếu không có vị trí hiện tại, số ngẫu nhiên được tạo ra sẽ lớn hơn m / 2, nếu không thì trống.
Thiết lập điều kiện dừng lỗ, thiết lập tỷ lệ dừng lỗ và dừng lỗ theo tỷ lệ phần trăm.
Thiết lập chu kỳ phản hồi theo khoảng thời gian.
Thông qua các bước trên, chiến lược này thực hiện các hoạt động tháo gỡ đa dạng hoàn toàn ngẫu nhiên. Khi số ngẫu nhiên lớn hơn m / 2, mở lệnh đa dạng, nếu không, mở lệnh trống, sau đó thiết lập Stop Loss Stop Stop để thoát khỏi vị trí.
Lập luận của chiến lược đơn giản, rõ ràng và dễ hiểu.
Giao dịch ngẫu nhiên có thể ngăn chặn tác động của cảm xúc và giảm sai lầm chủ quan.
Các tham số của thuật toán tạo số ngẫu nhiên có thể được tùy chỉnh, điều chỉnh tính ngẫu nhiên.
Có thể thiết lập các điều kiện dừng lỗ linh hoạt, kiểm soát lỗ đơn.
Hỗ trợ tối ưu hóa tham số phản hồi để dễ dàng kiểm tra tác động của các tham số khác nhau đối với thu nhập tổng thể.
Các giao dịch ngẫu nhiên có thể không có xu hướng rõ ràng trong thời gian dài và lợi nhuận không chắc chắn.
Không thể điều chỉnh vị trí theo tình hình thị trường, có thể bỏ lỡ cơ hội xu hướng.
Lợi nhuận cá nhân hạn chế, rủi ro rút tiền cao.
Cần thiết lập tỷ lệ dừng lỗ hợp lý để tránh tổn thất quá lớn.
Tính ngẫu nhiên có thể dẫn đến việc mở các vị trí thấp thường xuyên, làm tăng chi phí giao dịch.
Cần kiểm tra lại đầy đủ các tham số xác minh để thiết lập tính hợp lý, không thể sử dụng một cách mù quáng.
Có thể giảm rủi ro bằng cách thêm các chức năng như đánh giá xu hướng, giảm số lần mở vị trí ngẫu nhiên, tối ưu hóa cơ chế dừng lỗ và kiểm soát chặt chẽ lỗ đơn.
Tăng khả năng đánh giá xu hướng, tránh đặt cược ngược.
Tham gia quản lý vị trí, điều chỉnh kích thước vị trí theo sự thay đổi của quỹ.
Tối ưu hóa các thuật toán tạo số ngẫu nhiên, tăng tính ngẫu nhiên.
Động thái điều chỉnh mức độ dừng lỗ.
Thêm giới hạn tần suất mở cửa.
Phản hồi kết hợp đa tham số để tìm tham số tối ưu.
Chiến lược đi bộ ngẫu nhiên thực hiện giao dịch máy móc bằng cách kiểm soát số ngẫu nhiên. Chiến lược này là ngẫu nhiên, không bị ảnh hưởng bởi cảm xúc cá nhân, tránh rủi ro của hành động sai chủ quan. Tuy nhiên, việc mở vị trí ngẫu nhiên cũng có thể bỏ lỡ cơ hội xu hướng, thu nhập đơn lẻ hạn chế, cần tối ưu hóa cơ chế kiểm soát rủi ro.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
a = 16
c = 10
m = 1000
GetRandom(prev) =>
GetRandom = (a * prev + c) % m
seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")
curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
if (curRandom >= m / 2)
strategy.entry("Enter", strategy.long)
else
strategy.entry("Enter", strategy.short)
strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)
// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()