完全に自動化された取引のためのプログラムを書くトレーダーはますます増えているが,より大きなトレーダーグループは依然として手動トレーダーである.実際,手動主観的なトレーダーは,主観的な取引を支援するために小さなツールも書くことができます.例えば,時には良いエントリーポジションを見つけ,初期ポジションに固定ストップ損失とトラッキング利益を設定する計画を立てます.その後,後の市場モニタリングなどのよりエネルギー密集型事項を省いて,独自の確立されたストップ損失とトラッキング利益プランを正確にフォローし,プログラムがあなたのために市場モニタリングを行うようにしてください.手動取引を支援するために,損失を止めるためにストップ損失,勝利を導くためにトラッキング利益.
パイン言語を用いてこのような要件を設計する戦略は非常にシンプルである.要件に従って機能を達成するために,次のパラメータを設計する必要があります.
/*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("Tracking loss and profit stopping entrustment", 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", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])
if not barstate.ishistory and not isAlertMinTick
runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
if syminfo.mintick < minTick
runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
isAlertMinTick := true
if not barstate.ishistory and limit == -1 and not isAlert
runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
isAlert := true
if isTrade and strategy.position_size == 0 and not isAlertFinished
runtime.log("All order processes executed, position is 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("The price per point is:", syminfo.mintick, ", current 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 trigger line")
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")
戦略の設計は複雑ではありませんが,価格を常に監視する必要があるため,リアルタイム価格モデルとして設定する必要があります.
ストップ・ロスはポイント (minTick) で表現され,オフセットもポイント (minTick) で表現されていることに注意してください.ターゲットのオフセット後続ストップ・プロフィートトリガーラインのオフセットは価格距離 (例えば,距離のためにRMB30とする30に設定) で表現されます.minTickが1,30である場合,距離のためにRMB30を意味します.
この佣金戦略は,初期ベースポジションがロングになるだけでなく,初期ベースポジションがショートになるようにするように設計されています.その後,ストップ損失とトラッキング利益はショート方向で処理されます.
設計の実施を次のように示しましょう.
1. 戦略が実行されているとき,ベースポジションはすぐに開かれ,入力され,その後,ストップ損失と追跡ストップ利益はパラメータに従って設定されます.
戦略が実行されるとすぐにロングに設定され,金額は1に設定され,つまり戦略は1つの契約のポジションを開きます.
2. 制限パラメータを指定し,エントリー価格を指定する
他のパラメータ設定は変更されませんが,指定されたパラメータの制限値は: 1276
3. デフォルトの制限パラメータは -1,何も動作せず,偶然のポジション開設を防ぐ
パイン言語戦略を使用する際には,minTickデータに特別な注意を払うことが重要です.システム内の価格minTickの正確な数はパラメータの"価格通貨精度"に関連しています.
パラメータ
OK,上記は,この半自動化佣金戦略の全体的なデザインです. 私はそれをリアルボット取引にも使用していますが. しかし,そのようなツールは,理解するためにあなたの独自の取引習慣に従って使用する必要があります. 特定の修正,最適化はあなた自身で行うことができます. ここで戦略コードは,公共の共有,交換学習設計と論理のためのみです.
パイン言語は使いやすくて,使いやすくて,学習が簡単です.複雑なプログラミングを心配することなく,必要なツールを迅速に設計し,FMZ定量取引プラットフォームで定量取引を容易にするのにパイン言語を使用できます.