Menulis alat perdagangan separa automatik dengan menggunakan bahasa Pine

Penulis:Lydia, Dicipta: 2022-11-08 09:56:48, Dikemas kini: 2023-09-15 20:52:26

img

Walaupun terdapat lebih banyak peniaga yang menulis program untuk perdagangan automatik sepenuhnya, kumpulan peniaga yang lebih besar masih peniaga manual. Malah, peniaga subjektif manual juga boleh menulis alat kecil untuk membantu mereka dalam perdagangan subjektif mereka. Sebagai contoh, kadang-kadang anda menemui kedudukan kemasukan yang baik dan merancang untuk menetapkan stop loss tetap dan keuntungan yang menarik pada kedudukan awal. Kemudian tidak menggunakan perkara yang lebih intensif seperti pemantauan pasaran berikutnya, ikuti pelan taruhan stop loss dan mengambil keuntungan yang anda sendiri tetapkan dengan tepat, dan biarkan program melakukan pemantauan pasaran untuk anda. Hentikan kerugian untuk kehilangan, menang keuntungan untuk menang untuk membantu taruhan perdagangan manual.

Reka bentuk parameter

Strategi untuk merancang keperluan sedemikian dengan menggunakan bahasa Pine adalah sangat mudah. Parameter berikut perlu direka untuk mencapai fungsi mengikut keperluan:

  1. offset: Apabila stop profit yang menghalang diaktifkan, jarak offset untuk mengimbangi harga tertinggi dan harga terendah untuk menentukan garis stop profit.
  2. had: Parameter yang digunakan untuk mengawal - A. Kedudukan asas awal untuk membeli secara langsung, B. Harga tertentu untuk menunggu untuk membeli, C. Jangan lakukan apa-apa.
  3. Jumlah: Jumlah pesanan yang diletakkan apabila kedudukan asas dibuka.
  4. kerugian: titik stop loss.
  5. targetOffset: Perbezaan harga yang mengimbangi harga pembukaan apabila stop profit yang menjurus.
  6. minTick: Unit turun naik harga minimum.
  7. Arah: Arah pembukaan kedudukan asas.

Reka bentuk 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")

Reka bentuk strategi tidak rumit, tetapi ia perlu ditubuhkan sebagai model harga masa nyata, kerana harga harus dipantau setiap saat.

img

Perhatikan bahawa stop loss dinyatakan dalam mata (minTick) dan offset juga dinyatakan dalam mata (minTick). offset dari targetOffset trailing stop profit trigger line dinyatakan dari segi jarak harga (contohnya, ditetapkan kepada 30, yang adalah RMB30 untuk jarak). Apabila minTick adalah 1, 30 bermaksud RMB30 untuk jarak.

Strategi komisen ini direka untuk membolehkan bukan sahaja kedudukan asas awal untuk pergi panjang, tetapi juga kedudukan asas awal untuk pergi pendek.

Mari kita menunjukkan pelaksanaan reka bentuk seperti berikut:

1. Apabila strategi berjalan, kedudukan asas akan dibuka dan dimasukkan dengan serta-merta, dan kemudian stop loss dan penjejakan stop profit akan ditetapkan mengikut parameter.

img

arah ditetapkan menjadi panjang, parameter had ditetapkan kepada 0, iaitu, biarkan strategi masuk dan pergi panjang dengan serta-merta apabila ia berjalan, jumlah ditetapkan kepada 1, iaitu, strategi membuka kedudukan 1 kontrak.

img

2. tentukan parameter had, tentukan harga kemasukan

Tetapan parameter lain kekal tidak berubah kecuali bahawa harga parameter had yang ditetapkan adalah: 1276

img

3. parameter had lalai adalah -1, yang tidak beroperasi apa-apa dan menghalang pembukaan secara tidak sengaja kedudukan

img

HABISAN

Apabila menggunakan strategi bahasa Pine, adalah penting untuk memberi perhatian khusus kepada data minTick. Jumlah tepat harga minTick dalam sistem berkaitan dengan kesesuaian mata wang dalam parameter.

img

Parameter Pricing Currency Accuracy ditetapkan kepada 0, yang bermaksud bahawa nilai data harga adalah tepat kepada satu digit (iaitu, 0 tempat perpuluhan). Kemudian unit perubahan harga minimum adalah 1. Oleh kerana beberapa parameter berkaitan dengan bilangan tepat minTicks, ini memerlukan perhatian tambahan.

OK, di atas adalah keseluruhan reka bentuk strategi komisen separa automatik ini, walaupun saya juga menggunakannya untuk perdagangan bot sebenar. tetapi alat tersebut juga mesti digunakan mengikut tabiat perdagangan anda sendiri untuk memahami, pengubahsuaian khusus, pengoptimuman boleh dilakukan oleh anda sendiri. di sini kod strategi hanya untuk perkongsian awam, reka bentuk pembelajaran pertukaran dan logik.

Seperti yang kita lihat, bahasa Pine sangat mudah digunakan, dan ia mudah dan mudah dipelajari. kita boleh menggunakan bahasa Pine untuk merancang alat yang kita mahukan dengan cepat, tanpa perlu risau tentang pengaturcaraan yang rumit, dan menggunakan bahasa Pine untuk membuat perdagangan kuantitatif lebih mudah di FMZ Quantitative Trading Platform.


Berkaitan

Lebih lanjut