
Chiến lược này sử dụng các chỉ số chiết khấu để tự động thiết lập giá dừng và dừng để thực hiện giao dịch với giá giới hạn dừng di động. Nó có thể thu được nhiều lợi nhuận hơn trong tình huống xu hướng, đồng thời cũng có thể giảm tổn thất trong tình huống xung đột.
Chiến lược này chủ yếu dựa trên chỉ số chiết khấu để đặt giá. Chỉ số chiết khấu có thể phản ánh sự hỗ trợ và kháng cự tiềm năng của thị trường. Chiến lược này sử dụng các cấp độ khác nhau của chỉ số chiết khấu như giá dừng và dừng.
Cụ thể, chiến lược sẽ theo dõi các điểm cao và thấp, tính toán khoảng giá 10 bước. Sau đó, tùy theo cấu hình, chọn một mức giá như là chiến lược nhập cảnh. Khi giá vượt qua mức giá đó, nó sẽ thực hiện nhiều lệnh theo mức độ đòn bẩy được cấu hình. Đồng thời, nó cũng sẽ thiết lập một giá dừng, bằng với giá nhập cảnh trung bình cộng với phần trăm dừng của cấu hình.
Sau khi đặt hàng, chiến lược tiếp tục theo dõi giá giao dịch mới nhất. Khi giao dịch thấp hơn, chiến lược sẽ hủy bỏ giao dịch ban đầu, đặt lại và thực hiện dừng chân di động.
Ưu điểm lớn nhất của chiến lược này là có thể điều chỉnh động giá dừng và dừng, đặc biệt là cho các tình huống xu hướng. Nó có các tính năng sau:
Có thể có được lợi nhuận cao hơn trong các hoạt động xu hướng. Thiết lập dừng dựa trên giá nhập cảnh trung bình, có thể tham gia tối đa vào các hoạt động xu hướng và thu được lợi nhuận cao hơn.
Có thể giảm lỗ trong tình huống chấn động. Khi giá chạm lại mức giá thấp hơn, nó sẽ dừng lỗ kịp thời, tránh bị mắc kẹt trong chấn động.
Hỗ trợ tăng vị thế. Thiết lập tăng vị thế, tăng vị trí khi giá giảm xuống một mức độ nhất định, giảm chi phí giữ vị thế trung bình.
Hoạt động rất đơn giản. Chỉ cần thiết lập tỷ lệ cột và cột, toàn bộ giao dịch được thực hiện tự động, không cần thao tác bằng tay.
Chiến lược này cũng có một số rủi ro, chủ yếu tập trung vào những điểm sau:
Có thể bị dừng lại nhiều lần trong quá trình thu hồi chấn động. Khi xảy ra tình huống ngang hoặc chấn động, giá có thể lên xuống nhiều lần để kích hoạt dừng lỗ, tăng tần suất giao dịch và chi phí xử lý.
Không có thiết lập dừng lỗ. Để theo đuổi lợi nhuận cao hơn, chiến lược không có thiết lập dừng lỗ. Nếu có sự đảo ngược lớn, có thể phải đối mặt với tổn thất lớn.
Không có giới hạn về số lần và số tiền đặt hàng. Việc đặt hàng nhiều lần có thể dẫn đến tổn thất mở rộng hơn nữa.
Giải pháp tương ứng:
Chiến lược này cũng có rất nhiều khả năng tối ưu hóa, chủ yếu từ các khía cạnh sau:
Sử dụng các chỉ số khác để xác nhận nhập học. Bạn có thể thêm xác nhận các chỉ số như EMA, MACD vào điều kiện nhập học, tránh bị mắc kẹt trong tình huống chấn động.
Tham gia vào cơ chế dừng lỗ. Thiết lập dừng cố định hoặc theo dõi dừng lỗ, có thể tránh thiệt hại lớn trong trường hợp cực đoan.
Tối ưu hóa logic đặt hàng. Bạn có thể tối ưu hóa phạm vi giá và số lần đặt hàng tùy thuộc vào tình hình thị trường cụ thể.
Kết hợp các thuật toán học máy. Ví dụ, sử dụng các thuật toán như LSTM để dự đoán các động thái có thể của giá và kháng cự hỗ trợ.
Chiến lược này nói chung phù hợp để theo dõi xu hướng. Nó có thể thu được lợi nhuận từ việc điều chỉnh động giá dừng lỗ. Ngoài ra, có một số rủi ro cần được tối ưu hóa và cải tiến kết hợp với các cơ chế khác để có thể thích ứng với môi trường thị trường phức tạp 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)