Menulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Penulis:Mimpi kecil, Dibuat: 2022-09-29 14:36:32, Diperbarui: 2023-09-15 20:53:45

img

Menulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Meskipun semakin banyak pedagang yang menulis program untuk melakukan perdagangan secara otomatis, namun kelompok yang lebih besar masih menjadi pedagang manual. Bahkan, pedagang subjektif manual juga dapat membantu perdagangan subjektif mereka sendiri dengan menulis beberapa alat kecil. Misalnya, kadang-kadang menemukan posisi masuk yang bagus, merencanakan untuk mengatur stop loss awal, stop tracking. Kemudian menghindari hal-hal yang sangat memakan energi seperti setoran berikutnya, dan membiarkan program untuk membantu setoran mereka sendiri sesuai dengan rencana stop loss mereka sendiri.

Desain Parameter

Strategi untuk mendesain kebutuhan seperti ini dengan bahasa Pine sangat sederhana, dengan beberapa parameter yang dibutuhkan untuk mendesain fungsi untuk memenuhi kebutuhan:

1, offset: saat memicu tracking stop loss, harga tertinggi, harga terendah untuk menentukan jarak dari stop loss. 2, limit: parameter yang digunakan untuk mengontrol A. Pembelian langsung dari posisi dasar awal; B. Harga tertentu menunggu pembelian; C. Tidak melakukan apa-apa. 3, jumlah: jumlah yang akan diturunkan pada saat posisi terendah dibuka. 4, loss: jumlah titik stop loss. 5, targetOffset: perbedaan harga pada posisi terbuka yang dialihkan saat memicu stopwatch. 6 min Tick: Harga naik. 7, direction: arah posisi bawah dan posisi terbuka.

Strategi Desain

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

Desain strategi juga tidak rumit dan biasanya harus diatur sebagai "model harga real-time" saat digunakan, karena harus mendeteksi harga setiap saat.

img

Perhatikan bahwa stop loss dalam parameter ini diindikasikan dengan titik (satu lompatan harga) dan offset track stop loss deviation (satu lompatan harga). Target offset track stop loss deviation diindikasikan dengan jarak harga (misalnya setting 30, yaitu jarak 30 yuan).

Kebijakan ini dirancang agar tidak hanya dapat melakukan lebih banyak dari posisi dasar awal, tetapi juga untuk mengosongkan posisi dasar awal. Kemudian stop loss dan tracking stop loss ditangani sesuai dengan arah yang kosong.

Di bawah ini kami akan menunjukkan fungsionalitas implementasi desain:

1 ⇒ Buat strategi ini berjalan segera setelah posisi awal dibuka, kemudian atur stop loss, track stop stop sesuai dengan parameter.

img

direction diatur menjadi long, parameter limit ditetapkan menjadi 0, yaitu untuk membuat strategi berjalan segera masuk lebih banyak, jumlah diatur menjadi 1, strategi terbuka menjadi 1 kontrak.

img

2, menentukan parameter limit, menentukan harga masuk

Parameter lainnya tidak berubah, hanya menentukan harga parameter limit: 1276

img

3, parameter limit default adalah -1, tidak ada yang beroperasi, mencegah posisi yang salah

img

Ujungnya.

Ketika menggunakan strategi bahasa Pine, perhatian khusus harus diberikan pada data harga per lompatan ini. Berapa banyak harga per lompatan sistem yang terkait dengan "keakuratan mata uang harga" dalam parameter tersebut.

img

Parameter "precision of currency pricing" ditetapkan menjadi 0, yang berarti bahwa data harga akurat satu digit (misalnya digit kecil adalah 0). Kemudian satuan pergerakan minimum harga adalah 1. Karena beberapa parameter terkait dengan berapa banyak harga melompat secara spesifik, tempat ini membutuhkan perhatian khusus.

OK, di atas adalah semua desain dari strategi penugasan semi-otomatis ini, meskipun saya juga mengambilnya untuk penggunaan real-time. Tetapi alat semacam itu juga harus dipahami untuk digunakan sesuai dengan kebiasaan trading Anda sendiri, dan dapat dimodifikasi dan dioptimalkan sendiri.

Anda dapat melihat bahwa bahasa Pine sangat baik untuk digunakan, mudah, dan mudah dipelajari. Kita dapat menggunakan bahasa Pine untuk mendesain alat yang kita inginkan dengan cepat tanpa harus repot-repot merancang program yang rumit.


Berkaitan

Lebih banyak