
完全に自動取引を行うプログラムを作成するトレーダーが増えていますが、依然として手動トレーダーが大部分を占めています。実際、手動の主観的トレーダーは、主観的な取引を支援するためにいくつかの小さなツールを作成することもできます。たとえば、適切なエントリー ポジションを見つけて、初期ポジションに固定のストップ ロスとトレーリング テイク プロフィットを設定する計画を立てる場合があります。そうすれば、その後の市場の監視などのエネルギーを消費するタスクを回避できます。確立したストップロスとテイクプロフィットの計画に従うだけで、プログラムがあなたに代わって市場を監視できます。賭けに負けた場合は損失を止め、勝った場合は利益目標を追跡して手動取引を支援します。
Pine 言語を使用してこのような要件を設計する戦略は非常にシンプルです。要件に応じて機能を実装するには、次のパラメータを設計する必要があります。
/*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 つの価格ジャンプ)で表され、オフセット追跡テイクプロフィットオフセットもポイント(1 つの価格ジャンプ)で表されていることに注意してください。 targetOffset は、利益確定トリガーラインのオフセットを追跡し、価格距離で表現されます (たとえば、30 に設定すると、30 元の距離を意味します)。価格ジャンプが1の場合、30ジャンプは30元の距離を意味します。
この委託戦略は、初期のロングポジションだけでなく、初期のショートポジションも可能にするように設計されています。その後、ストップロスとトレーリングプロフィットは空売りの方向に応じて処理されます。
設計によって実装された機能を実演してみましょう。
1. この戦略が実行されたら、すぐにベースポジションを開き、パラメータに従ってストップロスとトレーリングテイクプロフィットを設定します。

方向はロングに設定され、制限パラメータは0に設定されています。これは、戦略が実行されるとすぐに市場に参入してロングになることを意味します。また、金額は1に設定されており、戦略は1のポジションを開きます。契約。

2. 制限パラメータとエントリー価格を指定する
他のパラメータ設定は変更されず、制限パラメータ価格を次のように指定します: 1276

3. デフォルトの制限パラメータは -1 です。これは、誤ってポジションが開かれるのを防ぐために、操作が実行されないことを意味します。

Pine 言語戦略を使用する場合は、価格ジャンプ データに特に注意してください。システムの具体的な価格上昇は、パラメータの「価格設定通貨精度」に関連しています。

「価格設定通貨精度」パラメータは 0 に設定されており、これは価格データの値が 1 桁まで正確であることを意味します (つまり、小数点以下の桁数は 0 です)。その場合、価格変更の最小単位は 1 になります。いくつかのパラメータは特定の価格上昇に関連しているため、この点には特別な注意を払う必要があります。
さて、上記はこの半自動委託戦略の完全な設計内容ですが、実際の取引でも使用しています。ただし、このようなツールは自分の取引習慣に応じて理解して使用する必要があり、自分で変更して最適化することもできます。ここでの戦略コードは、設計方法とロジックの公開共有、コミュニケーション、学習のみを目的としています。
Pine 言語は非常に使いやすく、便利で、学習しやすいことがわかります。 Pine 言語を使用すると、複雑なプログラム設計を気にすることなく、必要なツールをすばやく設計できます。FMZ Quantitative で Pine 言語を使用すると、定量取引がより簡単かつシンプルになります。