
Mục đích của chiến lược này là để kiểm tra xem liệu các biến đầu vào khác nhau như màu K, khối lượng giao dịch và phương pháp ngẫu nhiên có thể dự đoán sự thay đổi giá bằng cách sử dụng sóng âm hay không. Chiến lược chuyển đổi các biến này thành dạng sóng âm và đưa ra quyết định mua hoặc bán khi đỉnh hoặc thung lũng đạt đến số lần được đặt.
Chiến lược được chia thành ba phần, phần đầu tiên là phát hiện sự thay đổi màu sắc của K-line. Khi một số K-line cùng màu, có màu khác nhau, sóng chính sẽ chuyển hướng. Phần thứ hai là phát hiện khối lượng giao dịch có cao hơn hoặc thấp hơn trung bình hay không, và khi vượt qua trung bình, sóng chuyển hướng.
Mã điều khiển hoạt động của sóng bằng cách theo dõi hướng hiện tại của ba sóng, số đỉnh sóng và tình trạng của một dòng K trên. Khi số đỉnh sóng đạt đến tham số được đặt, thay đổi hướng hoạt động. Mô phỏng hoạt động của sóng dương với vòng lặp này.
Lý thuyết sóng âm này có vẻ hợp lý, các hình sóng mô phỏng cũng có liên quan đến thị trường thực tế. Tuy nhiên, thông qua kiểm tra chiến lược này, có thể thấy rằng chúng thực sự là kết quả ngẫu nhiên.
Vì vậy, một trong những lợi thế của chiến lược này là bác bỏ quan niệm sai lầm rằng thị trường vàng có thể dự đoán được giá vàng. Các biến số trong thị trường có thể ảnh hưởng đến giá cả, nhưng không thể dự đoán được, và các quyết định ngẫu nhiên cũng có thể đạt được kết quả tương đối gần.
Rủi ro lớn nhất của chiến lược này là khó xác định lợi nhuận trong giao dịch ngẫu nhiên. Kết quả cũng khó dự đoán theo các tham số khác nhau và không thể xác định trước được có lợi nhuận hay không.
Ngoài ra, lý thuyết dự đoán sóng âm tự nó là sai. Sự thay đổi của thị trường quá phức tạp và không thể được mô phỏng theo chu kỳ đơn giản. Vì vậy, chiến lược này không thể thực sự được áp dụng cho giao dịch thực.
Để giảm rủi ro, cần phân tích thêm các kết quả ngẫu nhiên để xác định phạm vi tham số; hoặc kết hợp với các phương pháp phân tích khác để xác minh tín hiệu giao dịch.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Chiến lược này cho thấy bản chất của thị trường không thể dự đoán được bằng cách thử nghiệm các sóng âm khác nhau. Đồng thời, nó cũng bác bỏ lý thuyết sai lầm về việc dự đoán bằng cách sử dụng chu kỳ sóng.
Bước tiếp theo, có thể nâng cao khả năng sử dụng thực tế của chiến lược bằng cách thêm các biến, kết hợp các hình sóng, thiết lập các tham số dừng lỗ và tối ưu hóa. Nhưng điều quan trọng là phải hiểu rằng sự thay đổi của thị trường rất phức tạp và không dễ dàng dự đoán.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Gentleman-Goat
//@version=5
strategy("Sine Wave Theory",overlay=false, precision = 2, initial_capital = 1000,shorttitle = "SINE_W_T")
var bar_change_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Bar Change")
bar_change_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Bar Change")
bar_change_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Bar Change")
bar_change_trade = input.bool(defval=true,title="Trade",group="Bar Change")
var volume_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Volume")
avg_volume_length = input.int(7,title="Lookback Length",group="Volume")
volume_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Volume")
volume_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Volume")
volume_trade = input.bool(defval=false,title="Trade",group="Volume")
var coin_flip_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Coin Flip")
coin_flip_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Coin Flip")
coin_flip_seed = input.int(defval=1,title="Seed #",group="Coin Flip")
coin_flip_trade = input.bool(defval=false,title="Trade",group="Coin Flip")
avg_volume = ta.sma(volume,avg_volume_length)
//Green or Red Candle
bar_color = close>open ? color.green : color.red
bar_color_time_adj = request.security(syminfo.tickerid, bar_change_sine_wave_res, bar_color)
//Above or Below Average
volume_state = (volume>avg_volume) ? color.blue : color.purple
volume_state_time_adj = request.security(syminfo.tickerid, volume_sine_wave_res, volume_state)
//Coinflip
coin_flip = math.random(0,100,coin_flip_seed)>=50 ? color.teal : color.yellow
var bar_change_wave_count = 0
var volume_wave_count = 0
var coin_flip_wave_count = 0
//Wave Counters
if(volume_state_time_adj[1] != volume_state_time_adj)
volume_wave_count := volume_wave_count + volume_wave_direction
if(bar_color_time_adj[1] != bar_color_time_adj)
bar_change_wave_count := bar_change_wave_count + bar_change_wave_direction
if(coin_flip[1] != coin_flip)
coin_flip_wave_count := coin_flip_wave_count + coin_flip_wave_direction
//Direction changers
if(math.abs(bar_change_wave_count) == bar_change_sine_wave_number and bar_color_time_adj[1] != bar_color_time_adj)
bar_change_wave_direction := bar_change_wave_direction * -1
if(math.abs(volume_wave_count) == volume_sine_wave_number and volume_state_time_adj[1] != volume_state_time_adj)
volume_wave_direction := volume_wave_direction * -1
if(math.abs(coin_flip_wave_count) == coin_flip_sine_wave_number and coin_flip[1] != coin_flip)
coin_flip_wave_direction := coin_flip_wave_direction * -1
//Entry positions
if(bar_change_wave_count==bar_change_sine_wave_number and bar_change_trade==true)
strategy.entry(id="short",direction=strategy.short)
if(bar_change_wave_count==bar_change_sine_wave_number*-1 and bar_change_trade==true)
strategy.entry(id="long",direction=strategy.long)
if(volume_wave_count==volume_sine_wave_number and volume_trade==true)
strategy.entry(id="short-volume",direction=strategy.short)
if(volume_wave_count==volume_sine_wave_number*-1 and volume_trade==true)
strategy.entry(id="long-volume",direction=strategy.long)
if(coin_flip_wave_count==coin_flip_sine_wave_number and coin_flip_trade==true)
strategy.entry(id="short-coinflip",direction=strategy.short)
if(coin_flip_wave_count==coin_flip_sine_wave_number*-1 and coin_flip_trade==true)
strategy.entry(id="long-coinflip",direction=strategy.long)
hline(0, title='Center', color=color.white, linestyle=hline.style_dashed, linewidth=1)
plot(bar_change_wave_count,title="Bar Change", color=bar_color, linewidth=2)
plot(volume_wave_count,title="Volume Average Change", color=volume_state, linewidth=2)
plot(coin_flip_wave_count,title="Coin Flip Change", color=coin_flip, linewidth=2)