Sumber dimuat naik... memuat...

Pencipta Kuantitatif Tutorial Pengenalan Bahasa PINE

Penulis:Pencipta Kuantiti - Impian Kecil, Dicipta: 2022-05-30 16:23:43, Dikemas kini: 2022-09-28 17:10:21

Pergilah ke sini. 2.trail_offsetParameter: Selepas melakukan tindakan stop loss tracking, jarak kedudukan yang diletakkan adalah jarak antara harga tertinggi (jika terlalu banyak) atau harga terendah (jika tidak banyak). 3.trail_pointsParameter: sepertitrail_priceParameter, hanya untuk menentukan kedudukan dengan bilangan kelebihan dan kekurangan.

Tidak mengapa! Mari kita gunakan strategi untuk memahami pembelajaran dengan melihat semula situasi, yang sebenarnya sangat mudah.

/*backtest
start: 2022-09-23 00:00:00
end: 2022-09-23 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

strategy("test", overlay = true)

varip a = na
varip highPrice = na
varip isTrade = false 
varip offset = 30

if not barstate.ishistory and not isTrade
    strategy.entry("test 1", strategy.long, 1)
    strategy.exit("exit 1", "test 1", 1, trail_price=close+offset, trail_offset=offset)
    a := close + offset
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close)
    isTrade := true 

if close > a and not barstate.ishistory
    highPrice := na(highPrice) ? close : highPrice
    highPrice := close > highPrice ? close : highPrice

plot(a, "trail_price 触发线")    
plot(strategy.position_size>0 ? highPrice : na, "当前最高价")
plot(strategy.position_size>0 ? highPrice-syminfo.mintick*offset : na, "移动止损触发线")

img

img

img

Memasuki pelbagai kepala sebaik sahaja strategi bermula, dan segera masuk ke dalam yang seterusnyastrategy.exitPerintah keluar (menentukan parameter stop-loss trigger), apabila harga pergerakan pasaran naik melebihi garis pencetus trail_price, mula menjalankan logik stop loss trigger, stop loss trigger (biru) mula mengikuti penyesuaian dinamik harga tertinggi, kedudukan garis biru adalah harga stop loss trigger, dan akhirnya apabila harga pergerakan pasaran melangkaui garis biru; jika garis yang digambar di carta ini digabungkan, tidak mudah difahami.

Jadi kita gunakan fungsi ini untuk mengoptimumkan strategi supertrend, kita hanya memberi satu pesanan masuk kepada strategi.strategy.exitPeranti ini boleh ditambahkan ke dalam senarai jadual keluar untuk memantau dan menghentikan kerosakan.

if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close, ",trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index

Kode strategi penuh:

/*backtest
start: 2022-05-01 00:00:00
end: 2022-09-27 00:00:00
period: 1d
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

varip trail_price = na
varip offset = input(50, "offset")
varip tradeBarIndex = 0
// 0 : idle , 1 current_open , 2 current_close
varip state = 0  

findOrderIdx(idx) =>
    ret = -1 
    if strategy.opentrades == 0 
        ret
    else 
        for i = 0 to strategy.opentrades - 1 
            if strategy.opentrades.entry_id(i) == idx
                ret := i 
                break
        ret

if strategy.position_size == 0 
    trail_price := na 
    state := 0

[superTrendPrice, dir] = ta.supertrend(input(2, "atr系数"), input(20, "atr周期"))

if ((dir[1] < 0 and dir[2] > 0) or (superTrendPrice[1] > superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.long, 1)
    state := 1
else if ((dir[1] > 0 and dir[2] < 0) or (superTrendPrice[1] < superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.short, 1)
    state := 1


// 反向信号,全平
if strategy.position_size > 0 and dir[2] < 0 and dir[1] > 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("趋势反转,多头全平")
else if strategy.position_size < 0 and dir[2] > 0 and dir[1] < 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("趋势反转,空头全平")


if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close, ",trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index


plot(superTrendPrice, "superTrendPrice", color=dir>0 ? color.red : color.green, overlay=true)

Lebih lanjut