Menulis alat perdagangan semi-otomatis dengan menggunakan bahasa Pine

Penulis:Lydia, Dibuat: 2022-11-08 09:56:48, Diperbarui: 2023-09-15 20:52:26

img

Meskipun ada semakin banyak pedagang yang menulis program untuk perdagangan sepenuhnya otomatis, kelompok pedagang yang lebih besar masih pedagang manual. Bahkan, pedagang subjektif manual juga dapat menulis alat kecil untuk membantu mereka dalam perdagangan subjektif mereka. Misalnya, kadang-kadang Anda menemukan posisi masuk yang baik dan berencana untuk mengatur stop loss tetap dan trailing profit pada posisi awal. Kemudian buanglah hal-hal yang lebih padat energi seperti pemantauan pasar berikutnya, ikuti rencana stop loss dan take profit Anda sendiri dengan tepat, dan biarkan program melakukan pemantauan pasar untuk Anda. Stop loss untuk kehilangan taruhan, trailing profit untuk menang untuk membantu perdagangan manual.

Desain parameter

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

  1. offset: Ketika stop profit trailing dipicu, jarak offset untuk offset harga tertinggi dan harga terendah untuk membatasi garis stop profit.
  2. batas: Parameter yang digunakan untuk mengontrol - A. Posisi dasar awal untuk membeli langsung, B. Harga tertentu untuk menunggu untuk membeli, C. Jangan lakukan apa-apa.
  3. Jumlah: Jumlah pesanan yang ditempatkan saat posisi dasar dibuka.
  4. kerugian: titik stop loss.
  5. targetOffset: Perbedaan harga yang mengimbangi harga pembukaan ketika stop profit trailing dipicu.
  6. minTick: Satuan minimum fluktuasi harga.
  7. arah: arah pembukaan posisi dasar.

Desain Strategi

/*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("Tracking loss and profit stopping entrustment", 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", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("All order processes executed, position is 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("The price per point is:", syminfo.mintick, ", current 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 trigger line")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")

Desain strategi tidak rumit, tetapi perlu diatur sebagai model harga real-time, karena harga harus dipantau setiap saat.

img

Perhatikan bahwa stop loss dinyatakan dalam poin (minTick) dan offset juga dinyatakan dalam poin (minTick). offset dari targetOffset trailing stop profit trigger line dinyatakan dalam hal jarak harga (misalnya, ditetapkan menjadi 30, yang adalah RMB30 untuk jarak).

Strategi komisi ini dirancang untuk memungkinkan tidak hanya posisi dasar awal untuk pergi panjang, tetapi juga posisi dasar awal untuk pergi pendek.

Mari kita menunjukkan implementasi desain sebagai berikut:

1. Ketika strategi berjalan, posisi dasar akan dibuka dan dimasukkan segera, dan kemudian stop loss dan tracking stop profit akan ditetapkan sesuai dengan parameter.

img

arah ditetapkan menjadi panjang, parameter batas ditetapkan menjadi 0, yaitu, biarkan strategi masuk dan pergi panjang segera ketika berjalan, jumlah ditetapkan menjadi 1, yaitu, strategi membuka posisi 1 kontrak.

img

2. tentukan parameter batas, tentukan harga masuk

Pengaturan parameter lainnya tetap tidak berubah kecuali bahwa harga parameter batas yang ditentukan adalah: 1276

img

Parameter batas default adalah -1, yang tidak mengoperasikan apa pun dan mencegah pembukaan posisi secara tidak sengaja

img

Ujungnya.

Ketika menggunakan strategi bahasa Pine, penting untuk memperhatikan data minTick. Jumlah tepat harga minTick dalam sistem terkait dengan keakuratan mata uang dalam parameter.

img

Parameter Pricing Currency Accuracy ditetapkan menjadi 0, yang berarti bahwa nilai data harga akurat satu digit (yaitu, 0 tempat desimal). Kemudian unit perubahan harga minimum adalah 1. Karena beberapa parameter terkait dengan jumlah tepat minTicks, ini membutuhkan perhatian ekstra.

OK, di atas adalah seluruh desain strategi komisi semi otomatis ini, meskipun saya juga menggunakannya untuk perdagangan bot nyata. tetapi alat tersebut juga harus digunakan sesuai dengan kebiasaan trading Anda sendiri untuk memahami, modifikasi spesifik, optimasi dapat dilakukan sendiri. di sini kode strategi hanya untuk berbagi publik, desain pembelajaran pertukaran dan logika.

Seperti yang dapat kita lihat, bahasa Pine sangat mudah digunakan, dan mudah dan mudah dipelajari. kita dapat menggunakan bahasa Pine untuk merancang alat yang kita inginkan dengan cepat, tanpa perlu khawatir tentang pemrograman yang rumit, dan menggunakan bahasa Pine untuk membuat perdagangan kuantitatif lebih mudah di FMZ Quantitative Trading Platform.


Berkaitan

Lebih banyak