
Phương pháp dừng lỗ di động của Fisherman là một chiến lược giao dịch định lượng kết hợp các chỉ số Fisherman và các cơ chế dừng lỗ di động. Chiến lược này sử dụng các chỉ số Fisherman để tạo ra tín hiệu mua và bán, đồng thời thiết lập theo dõi dừng lỗ để khóa lợi nhuận và kiếm lợi nhuận lớn hơn trong khi bảo vệ lợi nhuận.
Các tham số có thể được tối ưu hóa bằng cách điều chỉnh tỷ lệ dừng lỗ, thử nghiệm các kết hợp các tham số khác nhau; kết hợp với các chỉ số khác để lọc tín hiệu; thiết lập các quy tắc quản lý vị trí để kiểm soát rủi ro đơn lẻ.
Chiến lược dừng lỗ di động của chỉ số ngư dân tích hợp phán đoán xu hướng và quản lý dừng lỗ, có thể phù hợp với hầu hết các giống thông qua tối ưu hóa tham số, kết hợp chỉ số và cải thiện phương pháp dừng lỗ, để có được lợi nhuận tốt hơn trong trường hợp ngăn chặn thiệt hại vượt quá khả năng chịu đựng, đáng để khám phá và thực hành.
/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)
// Date Ranges
from_month = input(defval = 1, title = "From Month")
from_day = input(defval = 1, title = "From Day")
from_year = input(defval = 2021, title = "From Year")
to_month = input(defval = 1, title = "To Month")
to_day = input(defval = 1, title = "To Day")
to_year = input(defval = 9999, title = "To Year")
start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59) // backtest finish window
window = true
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)
var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na
price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)
Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])
up = Fish >= 0
ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish
var float entryPrice = na
var float stopPrice = na
if (ExtBuffer1 > ExtBuffer1[1])
entryPrice := close*dusus
stopPrice := close * cost
if (ExtBuffer2 < ExtBuffer2[1])
entryPrice := close
stopPrice := close * cost
// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)