avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Dicipta dalam: 2022-09-29 14:36:32, dikemas kini pada: 2024-11-29 19:01:54
comments   0
hits   2561

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Walaupun semakin ramai pedagang sedang menulis program untuk melakukan perdagangan automatik sepenuhnya, kumpulan yang lebih besar masih menjadi peniaga manual. Malah, peniaga subjektif manual juga boleh menulis beberapa alat kecil untuk membantu dagangan subjektif mereka. Sebagai contoh, kadangkala anda menemui kedudukan kemasukan yang baik dan merancang untuk menetapkan stop loss tetap dan trailing take profit untuk kedudukan awal. Kemudian anda boleh mengelakkan tugas yang memakan tenaga seperti pemantauan pasaran yang berikutnya Hanya ikuti pelan henti rugi dan ambil untung anda dan biarkan program memantau pasaran untuk anda. Jika anda kalah pertaruhan, hentikan kerugian jika anda menang, jejak sasaran keuntungan untuk membantu perdagangan manual.

Reka bentuk parameter

Strategi untuk mereka bentuk keperluan tersebut menggunakan bahasa Pine adalah sangat mudah Parameter berikut perlu direka untuk melaksanakan fungsi mengikut keperluan:

  1. Offset: Apabila trailing take profit dicetuskan, harga tertinggi dan harga terendah diimbangi untuk menentukan jarak offset garis take profit.
  2. had: Parameter digunakan untuk mengawal - A. Beli terus pada kedudukan asas awal, B. Tunggu pembelian pada harga yang ditetapkan, C. Jangan lakukan apa-apa.
  3. Jumlah: Kuantiti pesanan apabila gudang asas dibuka.
  4. Kehilangan: stop loss mata.
  5. targetOffset: Perbezaan harga yang mengimbangi harga pembukaan apabila mencetuskan trailing take profit.
  6. minTick: satu lonjakan harga.
  7. Arah: arah membuka kedudukan asas.

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

Reka bentuk strategi tidak rumit Apabila menggunakannya, ia biasanya perlu ditetapkan kepada “model harga masa nyata” kerana harga perlu diperiksa setiap saat.

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Ambil perhatian bahawa stop loss dalam parameter dinyatakan dalam mata (satu lonjakan harga), dan offset tracking take profit offset juga dinyatakan dalam mata (satu lonjakan harga). targetOffset menjejaki offset garis pencetus ambil untung dan dinyatakan dalam jarak harga (contohnya, jika anda menetapkannya kepada 30, ini bermakna jarak 30 yuan). Apabila lonjakan harga ialah 1, 30 lompatan bermakna jarak 30 yuan.

Strategi pengamanahan ini direka bukan sahaja untuk membolehkan kedudukan panjang awal, tetapi juga untuk membolehkan kedudukan pendek awal. Kemudian stop loss dan trailing profit akan dikendalikan mengikut arah short selling.

Mari tunjukkan fungsi yang dilaksanakan oleh reka bentuk:

1. Apabila strategi ini berjalan, buka kedudukan asas dengan segera dan kemudian tetapkan stop loss dan trailing take profit mengikut parameter.

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Arah ditetapkan kepada panjang, parameter had ditetapkan kepada 0, yang bermaksud bahawa strategi akan memasuki pasaran dan pergi panjang serta-merta apabila ia dijalankan, dan jumlah ditetapkan kepada 1, dan strategi akan membuka kedudukan 1 kontrak.

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

2. Nyatakan parameter had dan harga kemasukan

Tetapan parameter lain kekal tidak berubah, cuma nyatakan harga parameter had sebagai: 1276

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

3. Parameter had lalai ialah -1, yang bermaksud tiada operasi dilakukan untuk mengelakkan pembukaan posisi secara tidak sengaja.

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

THE END

Apabila menggunakan strategi bahasa Pine, beri perhatian khusus kepada data lonjakan harga. Lonjakan harga khusus sistem berkaitan dengan “ketepatan mata wang harga” dalam parameter.

Tulis alat perdagangan separa automatik menggunakan bahasa Pine

Parameter “Ketepatan Mata Wang Harga” ditetapkan kepada 0, yang bermaksud bahawa nilai data harga adalah tepat kepada digit unit (iaitu, bilangan tempat perpuluhan ialah 0). Maka unit minimum perubahan harga ialah 1. Oleh kerana beberapa parameter berkaitan dengan lonjakan harga tertentu, perhatian khusus harus diberikan pada tahap ini.

OK, di atas adalah kandungan reka bentuk lengkap bagi strategi pengamanahan separa automatik ini, walaupun saya juga menggunakannya dalam perdagangan sebenar. Walau bagaimanapun, alat sedemikian mesti difahami dan digunakan mengikut tabiat perdagangan anda sendiri, dan anda boleh mengubah suai dan mengoptimumkannya sendiri. Kod strategi di sini hanya untuk perkongsian awam, komunikasi dan pembelajaran kaedah reka bentuk dan logik.

Ia dapat dilihat bahawa bahasa Pine sangat mudah digunakan, mudah, dan mudah dipelajari. Kami boleh menggunakan bahasa Pine untuk mereka bentuk alat yang kami inginkan dengan cepat tanpa perlu risau tentang reka bentuk program yang rumit Menggunakan bahasa Pine dalam FMZ Kuantitatif menjadikan dagangan kuantitatif lebih mudah dan ringkas.