Menulis alat dagangan separa automatik menggunakan bahasa Pine

Penulis:Mimpi kecil, Dicipta: 2022-09-29 14:36:32, Dikemas kini: 2023-09-15 20:53:45

img

Menulis alat dagangan separa automatik menggunakan bahasa Pine

Walaupun semakin ramai peniaga yang menulis program untuk berdagang sepenuhnya secara automatik, kumpulan yang lebih besar masih menjadi peniaga manual. Malah, peniaga subjektif manual juga boleh membantu perdagangan subjektif mereka sendiri dengan menulis beberapa alat kecil. Sebagai contoh, kadang-kadang mencari kedudukan masuk yang baik, merancang untuk menetapkan stop loss tetap, jejak stop stop. Kemudian mengelakkan perkara yang agak memakan tenaga seperti rak berikutnya, sepenuhnya mengikut rancangan stop loss yang ditetapkan, dan membiarkan program untuk membantu rak sendiri.

Reka bentuk parameter

Strategi untuk merancang keperluan seperti ini menggunakan bahasa Pine adalah sangat mudah, dengan beberapa parameter yang diperlukan untuk merancang fungsi yang dilaksanakan mengikut keperluan:

1, ofset: apabila memicu penghalang penghalang, memindahkan harga tertinggi, harga terendah untuk menentukan jarak pemindahan garis penghalang. 2, limit: parameter yang digunakan untuk mengawal A. Pendapatan asas awal dibeli secara langsung; B. Harga tertentu menunggu pembelian; C. Tidak melakukan apa-apa. 3., jumlah: jumlah pesanan yang diturunkan pada permulaan dagangan. 4, loss: bilangan titik stop loss. 5. targetOffset: perbezaan harga untuk memindahkan harga bukaan apabila memicu penyekatan penyekatan. 6 min Tick: Harga melonjak. 7, direction: Arah penempatan bawah dan penempatan terbuka.

Strategi Reka Bentuk

/*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, "移动止损触发线")

Rancangan strategi juga tidak rumit dan biasanya perlu disiapkan sebagai "model harga masa nyata" ketika digunakan, kerana ia perlu mengesan harga setiap masa.

img

Perhatikan bahawa parameter stop loss dilambangkan dengan titik (satu lompatan harga) dan offset mengikuti penyesuaian stop-loss juga dengan titik (satu lompatan harga). Target Offset mengikuti penyesuaian stop-loss dilambangkan dengan jarak harga (contohnya menetapkan 30, iaitu jarak 30 yuan). Apabila harga melompat adalah 1 maka 30 lompatan adalah jarak 30 yuan.

Kaedah penghantaran ini direka untuk tidak hanya melakukan lebih banyak dari dasar awal, tetapi juga untuk mengosongkan dasar awal; maka stop loss dan tracking stop loss akan diuruskan mengikut arah yang kosong.

Di bawah ini, mari kita tunjukkan ciri-ciri pelaksanaan reka bentuk:

1. Buat strategi ini berjalan dengan segera, kemudian set stop loss, track stop up sesuai dengan parameter.

img

direction ditetapkan sebagai long, parameter limit ditetapkan sebagai 0, iaitu untuk membuat lebih banyak entri segera semasa strategi dijalankan, jumlah ditetapkan sebagai 1, strategi dibuka sebagai 1 kontrak.

img

2, tentukan parameter had, tentukan harga masuk

Seting parameter lain tidak berubah, hanya menetapkan harga parameter limit: 1276

img

3, parameter had lalai adalah -1, tiada apa yang dikendalikan, untuk mengelakkan permulaan yang salah

img

HABISAN

Apabila menggunakan strategi bahasa Pine, perhatikan data harga sekali lompatan ini. Berapa banyak harga sekali lompatan sistem berkaitan dengan "kesesuaian mata wang harga" dalam parameter.

img

Parameter "Kecekapan Mata Wang Berharga" ditetapkan kepada 0, yang bermaksud data harga adalah tepat kepada satu digit (iaitu digit kecil adalah 0); maka unit pergerakan harga minimum adalah 1. Oleh kerana beberapa parameter berkaitan dengan berapa banyak harga yang melompat, tempat ini memerlukan perhatian khusus.

OK, di atas adalah semua reka bentuk untuk strategi penghantaran separa automatik ini, walaupun saya juga menggunakan ia untuk penggunaan sebenar. Tetapi alat seperti ini juga perlu difahami untuk digunakan mengikut tabiat perdagangan anda sendiri, dan boleh diubahsuai dan dioptimumkan sendiri. Kod strategi ini hanya untuk perkongsian terbuka, pertukaran pembelajaran reka bentuk, logik.

Seperti yang dapat dilihat, bahasa Pine sangat baik untuk digunakan, mudah, dan mudah dipelajari. Kita boleh menggunakan bahasa Pine untuk merancang alat yang kita mahukan dengan cepat tanpa perlu terganggu dengan reka bentuk program yang rumit. Menggunakan bahasa Pine untuk membuat transaksi kuantitatif lebih mudah dan mudah di FMZ.


Berkaitan

Lebih lanjut