avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Dibuat di: 2022-09-29 14:36:32, diperbarui pada: 2024-11-29 19:01:54
comments   0
hits   2561

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Meskipun semakin banyak pedagang yang menulis program untuk melakukan perdagangan sepenuhnya otomatis, kelompok yang lebih besar masih merupakan pedagang manual. Faktanya, pedagang subjektif manual juga dapat menulis beberapa alat kecil untuk membantu perdagangan subjektif mereka. Misalnya, terkadang Anda menemukan posisi masuk yang bagus dan berencana untuk menetapkan stop loss tetap dan take profit trailing untuk posisi awal. Dengan demikian, Anda dapat menghindari tugas-tugas yang menghabiskan energi seperti pemantauan pasar berikutnya. Cukup ikuti rencana stop-loss dan take-profit yang telah ditetapkan dan biarkan program memantau pasar untuk Anda. Jika Anda kalah taruhan, hentikan kerugian; jika Anda menang, lacak target keuntungan untuk membantu perdagangan manual.

Desain parameter

Strategi untuk merancang persyaratan tersebut menggunakan bahasa Pine sangat sederhana. Parameter berikut perlu dirancang untuk mengimplementasikan fungsi sesuai dengan persyaratan:

  1. Offset: Saat trailing take profit dipicu, harga tertinggi dan harga terendah diimbangi untuk menentukan jarak offset garis take profit.
  2. limit: Parameter ini digunakan untuk mengontrol - A. Beli langsung pada posisi dasar awal, B. Tunggu pembelian pada harga tertentu, C. Tidak melakukan apa pun.
  3. Jumlah: Jumlah pesanan saat gudang dasar dibuka.
  4. Kerugian: titik stop loss.
  5. targetOffset: Perbedaan harga yang mengimbangi harga pembukaan saat memicu trailing take profit.
  6. minTick: satu lonjakan harga.
  7. Arah: arah pembukaan posisi dasar.

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 strateginya tidak rumit. Saat menggunakannya, biasanya perlu diatur ke “model harga waktu nyata” karena harga perlu diperiksa setiap saat.

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Perhatikan bahwa stop loss dalam parameter dinyatakan dalam poin (satu lonjakan harga), dan offset pelacakan take profit juga dinyatakan dalam poin (satu lonjakan harga). targetOffset melacak offset garis pemicu take-profit dan dinyatakan dalam jarak harga (misalnya, jika Anda menetapkannya ke 30, artinya jaraknya 30 yuan). Ketika lonjakan harga 1, 30 lonjakan berarti jarak 30 yuan.

Strategi perwalian ini dirancang tidak hanya untuk memungkinkan posisi panjang awal, tetapi juga untuk memungkinkan posisi pendek awal. Kemudian stop loss dan trailing profit akan ditangani sesuai arah short selling.

Mari kita tunjukkan fungsi yang diterapkan oleh desain:

1. Saat strategi ini berjalan, segera buka posisi dasar lalu tetapkan stop loss dan trailing take profit sesuai parameter.

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Arahnya diatur panjang, parameter batas diatur ke 0, yang berarti bahwa strategi akan memasuki pasar dan langsung menjadi panjang saat dijalankan, dan jumlahnya diatur ke 1, dan strategi akan membuka posisi 1 kontrak.

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

2. Tentukan parameter batas dan harga masuk

Pengaturan parameter lainnya tetap tidak berubah, cukup tentukan harga parameter batas sebagai: 1276

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

3. Parameter batas default adalah -1, yang berarti tidak ada operasi yang dilakukan untuk mencegah pembukaan posisi yang tidak disengaja.

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

THE END

Saat menggunakan strategi bahasa Pine, berikan perhatian khusus pada data lonjakan harga. Lonjakan harga spesifik sistem ini terkait dengan “ketepatan mata uang penetapan harga” dalam parameter.

Tulis alat perdagangan semi-otomatis menggunakan bahasa Pine

Parameter “Ketepatan Mata Uang Penetapan Harga” ditetapkan ke 0, yang berarti bahwa nilai data harga akurat hingga digit satuan (dengan kata lain, jumlah tempat desimalnya adalah 0). Maka satuan perubahan harga minimum adalah 1. Karena beberapa parameter terkait dengan lonjakan harga tertentu, perhatian khusus harus diberikan pada poin ini.

Oke, di atas adalah konten desain lengkap dari strategi kepercayaan semi-otomatis ini, meskipun saya juga menggunakannya dalam perdagangan nyata. Namun, alat-alat tersebut harus dipahami dan digunakan sesuai dengan kebiasaan perdagangan Anda sendiri, dan Anda dapat memodifikasi dan mengoptimalkannya sendiri. Kode strategi di sini hanya untuk berbagi publik, komunikasi, dan pembelajaran metode dan logika desain.

Dapat dilihat bahwa bahasa Pine sangat mudah digunakan, nyaman, dan mudah dipelajari. Kita dapat menggunakan bahasa Pine untuk merancang alat yang kita inginkan dengan cepat tanpa harus khawatir tentang desain program yang rumit. Penggunaan bahasa Pine di FMZ Quantitative membuat perdagangan kuantitatif menjadi lebih mudah dan sederhana.