プログラム作成で完全に自動取引を行うトレーダーは増えているが,さらに大きなグループが手動トレーダーである. 実際,手動主体トレーダーは,いくつかの小道具を書き,自分の主体取引を支援することもできる.例えば,時には良いエントリーポジションを見つけ,最初のポジションの固定ストップ損失を設定し,ストップ追跡を計画し,その後,次のデスクのような比喩的な費やすことを省いて,自分の既定のストップ損失抑制計画に従って,プログラムが自分のデスクを助けるようにします.
パイン言語でこのようなニーズを設計する戦略は,非常にシンプルで,ニーズに応じて機能を実現するために,以下のパラメータを設計する必要があります:
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, "移动止损触发线")
戦略設計も複雑ではありませんが,使用時に"リアルタイム価格モデル"を設定する必要があります.
注意する参数では,ストップロスは点 (=価格一跳) で表示され,オフセット追跡停止
この委託戦略は,初期底置を多めに行うだけでなく,初期底置を空にするように設計されている.その後,停止損失と追跡停止は空置方向に処理される.
デザインの実現の機能について,以下のように説明します.
1. この戦略を実行すると,すぐに底盤をオープンし,その後,パラメータに従って停止損失,追跡停止を設定します.
direction は long に設定され,limit パラメータは 0 に設定され,戦略が実行される時に即座に入場する,amount は 1 に設定され,戦略は 1 つの契約を開設する.
2 制限パラメータを指定し,入場価格を指定する
他のパラメータは変更されません.ただ限度パラメータの価格を:1276で指定します.
3,デフォルトのlimitパラメータは-1,何も動作しない,誤った取引を防止する
パイン言語の戦略を使用する際には,このデータに対して特に注意を払う必要がある. システムにおける価格の"回転"は,パラメータ内の"価格設定通貨精度"に関連している.
"定価通貨精度"というパラメータは0に設定されているので,価格データの数値が1位まで正確である (小数位は0である).この場合,価格の最小変動単位は1である.いくつかのパラメータが価格の一躍の具体的程度に関連しているため,この場所は特に注意する必要がある.
OK,上記は,この半自動委託策略の設計内容のすべてですが,実用版でも使っています. しかし,このようなツールは,自分の取引習慣によって理解して使用し,自分で修正したり最適化したりすることができます. この策略コードは,単に公開共有であり,デザインや論理を学ぶ交流です.
パイン言語は使いやすくて簡単で,学習も簡単です. パイン言語を使って,複雑なプログラム設計を気にせずに,必要なツールを素早く設計することができます. FMZの量化では,量化取引を簡単にしてしまう.