Chiến lược này sử dụng các mức khôi phục Fibonacci để tự động thiết lập dừng lỗ và lấy giá lợi nhuận để quản lý vị trí. Nó cho phép lái xu hướng để có lợi nhuận lớn hơn trong khi giảm thiểu tổn thất trong quá trình hợp nhất.
Cốt lõi của chiến lược này dựa trên chỉ số hồi quy Fibonacci để xác định các mức hỗ trợ và kháng cự chính. Nó theo dõi mức cao và thấp gần đây để vẽ 10 vùng giá Fibonacci. Dựa trên cấu hình, một trong các mức Fibonacci được chọn làm kích hoạt nhập cảnh. Khi giá vượt qua mức đó, một lệnh dài sẽ được đặt dựa trên đòn bẩy được cấu hình. Đồng thời, giá lấy lợi nhuận được đặt ở một tỷ lệ phần trăm nhất định trên giá nhập cảnh.
Sau khi nhập vào, chiến lược tiếp tục theo dõi các mức Fibonacci được cập nhật. Nếu một mức Fib thấp hơn xuất hiện, cho thấy khả năng đảo ngược, chiến lược sẽ hủy các lệnh hiện có và đặt lại các lệnh ở mức giá thấp hơn như một cơ chế dừng lỗ. Khi giá cuối cùng vượt quá giá lấy lợi nhuận, vị trí sẽ được đóng lại để kiếm lợi nhuận.
Ưu điểm lớn nhất của chiến lược này là khả năng điều chỉnh stop loss và lấy giá lợi nhuận cho các thị trường xu hướng.
Lấy lợi nhuận lớn hơn trong điều kiện xu hướng bằng cách dừng lại dựa trên giá nhập cảnh.
Giảm thiểu tổn thất trong việc củng cố bằng cách dừng lại ở mức Fib thấp hơn.
Cho phép kim tự tháp bằng cách thêm vào vị trí khi giá giảm một tỷ lệ nhất định từ giá nhập khẩu cuối cùng.
Dễ dàng vận hành với đặt hàng tự động một khi được cấu hình chính xác.
Vẫn có một số rủi ro cần lưu ý:
Có xu hướng dừng lại lặp đi lặp lại trong các thị trường bên, tăng phí.
Không có cơ chế dừng lỗ cố định, có nguy cơ rút tiền lớn.
Việc xây dựng kim tự tháp không giới hạn có thể làm trầm trọng thêm tổn thất.
Các giải pháp tương ứng:
Ngưng giao dịch khi giá dao động trong phạm vi.
Quản lý thị trường và đóng các vị trí nếu cần thiết.
Đặt giới hạn cho các mệnh lệnh kim tự tháp.
Vẫn còn nhiều chỗ để tối ưu hóa:
Thêm các chỉ số bổ sung như EMA, MACD để xác nhận nhập thêm để tránh đột phá sai.
Kết hợp các cơ chế dừng lỗ cố định / kéo theo để hạn chế tổn thất trong điều kiện cực đoan.
Cải thiện logic kim tự tháp dựa trên các chế độ thị trường để ngăn chặn đòn bẩy quá mức.
Sử dụng các mô hình học máy như LSTM để dự đoán giá và xác định tốt hơn việc nhập / ra.
Tóm lại, chiến lược này phù hợp với các kịch bản xu hướng phai mờ. Bằng cách điều chỉnh liên tục dừng lại nó cho phép đi xe xu hướng hiệu quả. Tối ưu hóa thích hợp và đường ray bảo vệ cần thiết để xử lý các điều kiện thị trường khó khăn hơn.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m 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/ // © CryptoRox //@version=4 //Paste the line below in your alerts to run the built-in commands. //{{strategy.order.alert_message}} strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04) //Settings testing = input(false, "Live") //Use epochconverter or something similar to get the current timestamp. starttime = input(1600976975, "Start Timestamp") * 1000 //Wait XX seconds from that timestamp before the strategy starts looking for an entry. seconds = input(60, "Start Delay") * 1000 testPeriod = true leverage = input(1, "Leverage") tp = input(1.0, "Take Profit %") / leverage dca = input(-1.0, "DCA when < %") / leverage *-1 fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //Strategy Calls equity = strategy.equity avg = strategy.position_avg_price symbol = syminfo.tickerid openTrades = strategy.opentrades closedTrades = strategy.closedtrades size = strategy.position_size //Fibs lentt = input(60, "Pivot Length") h = highest(lentt) h1 = dev(h, lentt) ? na : h hpivot = fixnan(h1) l = lowest(lentt) l1 = dev(l, lentt) ? na : l lpivot = fixnan(l1) z = 400 p_offset= 2 transp = 60 a=(lowest(z)+highest(z))/2 b=lowest(z) c=highest(z) fib0 = (((hpivot - lpivot)) + lpivot) fib1 = (((hpivot - lpivot)*.21) + lpivot) fib2 = (((hpivot - lpivot)*.3) + lpivot) fib3 = (((hpivot - lpivot)*.5) + lpivot) fib4 = (((hpivot - lpivot)*.62) + lpivot) fib5 = (((hpivot - lpivot)*.7) + lpivot) fib6 = (((hpivot - lpivot)* 1.00) + lpivot) fib7 = (((hpivot - lpivot)* 1.27) + lpivot) fib8 = (((hpivot - lpivot)* 2) + lpivot) fib9 = (((hpivot - lpivot)* -.27) + lpivot) fib10 = (((hpivot - lpivot)* -1) + lpivot) notna = nz(fib10[60]) entry = 0.0 if fibEntry == "1" entry := fib10 if fibEntry == "2" entry := fib9 if fibEntry == "3" entry := fib0 if fibEntry == "4" entry := fib1 if fibEntry == "5" entry := fib2 if fibEntry == "6" entry := fib3 if fibEntry == "7" entry := fib4 if fibEntry == "8" entry := fib5 if fibEntry == "9" entry := fib6 if fibEntry == "10" entry := fib7 profit = avg+avg*(tp/100) pause = 0 pause := nz(pause[1]) paused = time < pause fill = 0.0 fill := nz(fill[1]) count = 0.0 count := nz(fill[1]) filled = count > 0 ? entry > fill-fill/100*dca : 0 signal = testPeriod and notna and not paused and not filled ? 1 : 0 neworder = crossover(signal, signal[1]) moveorder = entry != entry[1] and signal and not neworder ? true : false cancelorder = crossunder(signal, signal[1]) and not paused filledorder = crossunder(low[1], entry[1]) and signal[1] last_profit = 0.0 last_profit := nz(last_profit[1]) if neworder and signal strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if moveorder strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if filledorder and size < 1 fill := entry count := count+1 pause := time + 60000 p = close+close*(tp/100) strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p)) if filledorder and size >= 1 fill := entry count := count+1 pause := time + 60000 strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit)) if cancelorder and not filledorder pause := time + 60000 strategy.order("Cancel", 1, 0.0001, alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order') if filledorder last_profit := profit closeit = crossover(high, profit) and size >= 1 if closeit strategy.entry("Close ALL", 0, 0, alert_message='Profit') count := 0 fill := 0.0 last_profit := 0.0 //Plots bottom = signal ? color.green : filled ? color.red : color.white plot(entry, "Entry", bottom)