Mặc dù ngày càng có nhiều nhà giao dịch viết chương trình để giao dịch hoàn toàn tự động, nhưng một nhóm lớn hơn vẫn là các nhà giao dịch thủ công. Trong thực tế, các nhà giao dịch chủ thể thủ công cũng có thể hỗ trợ giao dịch chủ thể của mình bằng cách viết một số công cụ nhỏ. Ví dụ, đôi khi tìm thấy một vị trí đầu vào tốt, lập kế hoạch đặt lỗ cố định, theo dõi lỗ dừng.
Chiến lược thiết kế các nhu cầu như vậy bằng ngôn ngữ Pine rất đơn giản, tùy thuộc vào nhu cầu thực hiện chức năng cần thiết kế một vài tham số sau:
1, Offset: Khi kích hoạt theo dõi dừng giá, di chuyển giá cao nhất, giá thấp nhất để xác định khoảng cách di chuyển của đường dừng giá. 2, giới hạn: Các tham số được sử dụng để kiểm soát A. Mua trực tiếp; B. Đặt giá chờ mua; C. Không làm gì cả. 3, số lượng: số lượng đơn đặt hàng khi bắt đầu giao dịch. 4, Loss: Số điểm dừng lỗ. 5, TargetOffset: Sự chênh lệch giá của giá mở vị trí khi kích hoạt theo dõi dừng giá. 6 minTick: Giá tăng. 7, direction: hướng đặt chân và mở chân.
/*backtest
start: 2022-09-24 00:00:00
end: 2022-09-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["v_input_1",20],["v_input_2",0],["v_input_4",50],["v_input_5",20],["RunMode",1,358374],["ZPrecision",0,358374],["XPrecision",3,358374]]
*/
strategy("跟踪止损止盈委托", overlay = true)
varip targetPrice = na
varip high_lowPrice = na
varip isTrade = false
varip isAlert = false
varip isAlertMinTick = false
varip isAlertFinished = false
varip offset = input(30, "offset", "跟踪止损止盈偏移")
varip limit = input(-1, "limit", "初始开仓价格,-1为不开仓,0为立即开仓,其它具体数值为限价价格")
varip amount = input(1, "amount", "开仓量")
varip loss = input(30, "loss", "止损")
varip targetOffset = input(30, "targetOffset", "触发跟踪止盈止损偏移量")
varip minTick = input(1, "minTick", "价格一跳")
tradeType = input.string("long", "direction", tooltip="下单方向,long做多,short做空", options=["long", "short"])
if not barstate.ishistory and not isAlertMinTick
runtime.log("检查syminfo.mintick是否正确!syminfo.mintick:", syminfo.mintick, "#FF0000")
if syminfo.mintick < minTick
runtime.error("系统syminfo.mintick < minTick参数", "#FF0000")
isAlertMinTick := true
if not barstate.ishistory and limit == -1 and not isAlert
runtime.log("没有设置开仓价格,当前limit为-1(防止误开仓,初始默认limit为-1),禁止开仓", "#FF0000")
isAlert := true
if isTrade and strategy.position_size == 0 and not isAlertFinished
runtime.log("所有委托流程执行完毕,仓位为0", "#FF0000")
isAlertFinished := true
if not barstate.ishistory and not isTrade and limit != -1
if limit == 0
strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount)
else if limit > 0
strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount, limit=limit)
if tradeType == "long"
targetPrice := (limit == 0 ? close : limit) + targetOffset
else
targetPrice := (limit == 0 ? close : limit) - targetOffset
strategy.exit("exit", "open", amount, loss=loss, trail_price=targetPrice, trail_offset=offset)
runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close)
isTrade := true
if ((close > targetPrice and strategy.position_size > 0) or (close < targetPrice and strategy.position_size < 0)) and not barstate.ishistory
high_lowPrice := na(high_lowPrice) ? close : high_lowPrice
if strategy.position_size > 0
high_lowPrice := close > high_lowPrice ? close : high_lowPrice
else
high_lowPrice := close < high_lowPrice ? close : high_lowPrice
plot(targetPrice, "trail_price 触发线")
plot(strategy.position_size!=0 ? high_lowPrice : na, "当前最高价/最低价")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "移动止损触发线")
Thiết kế chiến lược cũng không phức tạp, và khi sử dụng, thường cần thiết lập "mô hình giá thực tế" vì bạn phải phát hiện giá mọi lúc.
Lưu ý rằng trong tham số stop loss được biểu thị bằng dấu chấm (trước khi giá nhảy), offset theo dõi trục trục trục trục trục cũng được biểu thị bằng dấu chấm (trước khi giá nhảy). targetOffset theo dõi trục trục trục trục trục trục trục trục trục trục trần được biểu thị bằng khoảng cách giá (ví dụ: đặt 30, đó là khoảng cách 30 đô la).
Chính sách ủy thác này được thiết kế để không chỉ làm nhiều hơn thế nhưng cũng làm trống các tầng đáy ban đầu. Sau đó, dừng lỗ và theo dõi ngăn chặn đà được xử lý theo hướng làm trống.
Dưới đây là một ví dụ về các tính năng thực hiện thiết kế:
1, để cho chiến lược này chạy ngay lập tức, sau đó theo các tham số thiết lập dừng lỗ, theo dõi dừng tăng.
direction được đặt là long, limit được đặt là 0, cho phép chiến lược chạy ngay lập tức nhập nhiều, amount được đặt là 1, chiến lược mở 1 hợp đồng.
2, Đặt tham số giới hạn, Đặt giá vào
Các tham số khác không thay đổi, chỉ cần chỉ định giá của tham số limit là: 1276
3, tùy chọn giới hạn mặc định là -1, không điều hành bất cứ điều gì để ngăn chặn việc bắt đầu sai
Khi sử dụng chiến lược ngôn ngữ Pine, hãy đặc biệt chú ý đến dữ liệu giá một lần. Giá một lần của hệ thống liên quan đến "chính xác tiền định giá" trong tham số.
Các tham số "định giá tiền tệ chính xác" được thiết lập là 0, nghĩa là số liệu giá chính xác đến một vị trí (tức là số nhỏ là 0). Vì vậy, đơn vị biến động nhỏ nhất của giá là 1.
OK, trên đây là tất cả các thiết kế của chính sách giao dịch bán tự động này, mặc dù tôi cũng sử dụng trên máy tính thực. Nhưng các công cụ như vậy cũng cần phải hiểu được cách sử dụng theo thói quen giao dịch của mình và có thể tự sửa đổi, tối ưu hóa. Mã chính sách này chỉ là chia sẻ công khai, trao đổi, học thiết kế, logic.
Có thể thấy rằng ngôn ngữ Pine rất dễ sử dụng, dễ sử dụng và dễ học. Chúng ta có thể sử dụng ngôn ngữ Pine để nhanh chóng thiết kế các công cụ mà chúng ta muốn mà không cần phải bận tâm đến việc thiết kế chương trình phức tạp.