パイン言語で半自動取引ツールを書く

作者: リン・ハーン小さな夢, 作成日:2022-09-29 14:36:32, 更新日:2023-09-15 20:53:45

img

パイン言語で半自動取引ツールを書く

プログラム作成で完全に自動取引を行うトレーダーは増えているが,さらに大きなグループが手動トレーダーである. 実際,手動主体トレーダーは,いくつかの小道具を書き,自分の主体取引を支援することもできる.例えば,時には良いエントリーポジションを見つけ,最初のポジションの固定ストップ損失を設定し,ストップ追跡を計画し,その後,次のデスクのような比喩的な費やすことを省いて,自分の既定のストップ損失抑制計画に従って,プログラムが自分のデスクを助けるようにします.

パラメータ設計

パイン言語でこのようなニーズを設計する戦略は,非常にシンプルで,ニーズに応じて機能を実現するために,以下のパラメータを設計する必要があります:

1,オフセット:追跡停止線を触発するときに,停止線の偏差距離を定義するために,最高価格,最低価格を偏移します. 2,limit: 参数 A. 初期底盤を直接購入する. B. 価格を指定して購入を待機する. C. 何もしない. 3、amount: 取引開始時に下位株の単位の量、 4、loss:停止ポイント数. 5. targetOffset: トラック停止を誘発するときに,開場価格の差が偏移します. 6 minTick: 価格が急上昇した. 7、direction: 底辺の位置から開いている位置へ.

デザイン戦略

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

戦略設計も複雑ではありませんが,使用時に"リアルタイム価格モデル"を設定する必要があります.

img

注意する参数では,ストップロスは点 (=価格一跳) で表示され,オフセット追跡停止離は点 (=価格一跳) で表示される.ターゲットオフセット追跡停止離線の偏移は価格距離 (例えば,30を設定すると,30元距離) で表示される.価格一跳が1である場合,30は30元距離である.

この委託戦略は,初期底置を多めに行うだけでなく,初期底置を空にするように設計されている.その後,停止損失と追跡停止は空置方向に処理される.

デザインの実現の機能について,以下のように説明します.

1. この戦略を実行すると,すぐに底盤をオープンし,その後,パラメータに従って停止損失,追跡停止を設定します.

img

direction は long に設定され,limit パラメータは 0 に設定され,戦略が実行される時に即座に入場する,amount は 1 に設定され,戦略は 1 つの契約を開設する.

img

2 制限パラメータを指定し,入場価格を指定する

他のパラメータは変更されません.ただ限度パラメータの価格を:1276で指定します.

img

3,デフォルトのlimitパラメータは-1,何も動作しない,誤った取引を防止する

img

終わり

パイン言語の戦略を使用する際には,このデータに対して特に注意を払う必要がある. システムにおける価格の"回転"は,パラメータ内の"価格設定通貨精度"に関連している.

img

"定価通貨精度"というパラメータは0に設定されているので,価格データの数値が1位まで正確である (小数位は0である).この場合,価格の最小変動単位は1である.いくつかのパラメータが価格の一躍の具体的程度に関連しているため,この場所は特に注意する必要がある.

OK,上記は,この半自動委託策略の設計内容のすべてですが,実用版でも使っています. しかし,このようなツールは,自分の取引習慣によって理解して使用し,自分で修正したり最適化したりすることができます. この策略コードは,単に公開共有であり,デザインや論理を学ぶ交流です.

パイン言語は使いやすくて簡単で,学習も簡単です. パイン言語を使って,複雑なプログラム設計を気にせずに,必要なツールを素早く設計することができます. FMZの量化では,量化取引を簡単にしてしまう.


関連性

もっと