資源の読み込みに... 荷物...

発明者によるPINE言語の定量化入門教科書

作者: リン・ハーン発明者 量化 - 微かな夢作成日:2022-05-30 16:23:43,更新日:2022-09-28 17:10:21 更新日:2022-09-28 更新日:2022-09-28 17:10:21 更新日:2022-09-28 更新日:2022-09-28 17:10:21 更新日:2022-09-28 更新日:2022-09-28 17:10:21 更新日:2022-09-28 17:10:21 更新日:2022-09-28 更新日:2020-09-28 17:10:21 更新日:2020-09-28 更新日:2020-09-28 更新日:2020-09-28 17:10:21 更新日:2020-09-28 更新日:2020-09-28 更新日:2020-09-29 更新日:2021-09-21 更新日:2021-09-21 更新日:2021-09-21

置く) 。 2 そしてtrail_offsetパラメータ:追跡停止損損停止停止動作を実行した後,配置された平衡单の距離は,最高価格 (多時) または最低価格 (空時) である. 3つ目はtrail_pointsパラメータ:trail_price参数では,単にの優位数で指定された位置である.

学習を理解するには,あるシナリオを復習する戦略を用いましょう.

/*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

実行開始時に即座に複数入力し,次に即座に実行しますstrategy.exit出口オーダー (ストップ損失停止引パラメータが指定されている) は,市場変動価格がtrail_priceトリガーラインを超えると,追跡停止引論理を実行し,停止引線 (ブルー) は,最高価格動態調整に従うことを開始し,ブルーラインの位置は停止引引平衡の価格であり,最終的に市場変動価格がブルーラインを突破すると平衡を誘発します.この組み合わせで,グラフに描かれた線は理解が容易ではありません.

超トレンド戦略を最適化するためにこの機能を使います.strategy.exit予定表には,この追跡停止障害停止機能が追加されます.

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

戦略のコードはこちら

/*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)

もっと