
この策略は,複数のストップ・ポイント・エクシットを設定する機能を実現する. 策略は,まず,長短条件を判断し,入場を多空にする. そして,カスタマイズされたpercentAsPoints関数によって,パーセントを価格ポイントに変換する. プログラムが設定した1%,2%,3%および4%のストップ・パーセンテージに従って,4つのエクシットを設定し,同時に一般的な2%のストップ・エクシットを設定する. このようにして,複数のストップ・パーセンテージの効果が実現される.
この戦略は,主にsma平均線の多空交差によって入場を判断する.具体的には,速線sma(14) 上を慢線sma(28) を通過すると入場が多くなる.速線sma(14) 下を慢線sma(28) を通過すると入場が空になる.
では,どのように%を exit にするのでしょうか? %をPricePoints に変換する, パーセンタージ・アス・ポイントの関数を使用します.
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
この関数は,持仓量が0でない場合,百分比を乗算して持仓平均価格を,最小価格跳躍で割って,価格点数を得る.持仓量が0であれば,naを返します.
この関数で,簡単にパーセントを 変換できます. そして,プログラムが設定した1%,2%,3%と4%のストップで, 4つのexit を設定します.
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
また,すべての出口は,一般的な2%のストップロスを使用している.これは,数パーセントのストップロスの効果を実現している.
この戦略の利点は以下の通りです.
部署によって勤務停止をすることがあり,より大きな利益を得る機会を逃さないことができます. 一般的に,遅滞が大きいほど,リスクも大きいです.この戦略は,リスクと利益のバランスをとることができます.
分批の停止は本金返還してリスクを低減する.例えば25%の批量を設定し,利益が1%に達したときに本金1/4を回収し,その後のポジションは利益操作である.
異常な状況の停止を防ぐため,2%の停止は,極端な状況による巨額の損失を防ぐことができます.
コードがシンプルで明快で,分かりやすく,変更や最適化に便利である. パーセンテージをポイントに変換するカスタム関数があり,数行のコードに複数のストップを設定できます.
この戦略にはいくつかのリスクがあります.
パーセントストップは横軸の振動を容易にし,ストップ価格の近くで反転する.この場合,ストップストップの損失が頻繁に引き起こされ,取引頻度と手数料の負担が増加する.
配当停止は取引回数を増加させ,手数料の負担も増加させる.手数料が高くなった場合,その代わりに部分停止の利益が抵当される.
止境点の設定が不適切である場合も,利回りに影響する. 設定があまりにも保守的であれば,満足のいく利回りを得ることは困難であり,設定があまりにも過激であれば,リスクはあまりにも大きい.
固定パーセントのストップは,市場の変動率と傾向性を考慮しない. 震動状況ではストップ幅を低くし,傾向状況ではストップ幅を大きくする.
リスクを考えると,以下のような面で最適化が進める:
市場波動率とトレンドに応じて自動的に調整できるようにストップストップ戦略を最適化します.例えば,ATRストップを追加し,震動時にストップストップを締め,トレンド中にストップストップを緩めます.
リスク・リターンの最適な組み合わせを実現するために,分批停止の比率と幅を最適化します.パラメータ最適化機能を追加して,最適なパラメータを見つけます.
ストップの回数を減らして,あまりにも頻繁に取引を避ける.例えば,価格のバッファローンを設定し,一定の幅を超えるとのみストップする.
手数料の要素を考慮し,手数料より低い予想の止損利益が止まる時よりも止まる.または手数料に応じて止損幅を最適化する.
帳簿のストップを用いること.深度優先のストップ.深度優先のストップ.価格優先のオファーを用いること.ストップの価格を動かすのを避ける.
この戦略は,数パーセントのストップ効果を実現し,1%,2%,3%および4%のストップエクジットを4つ設定し,シフトごとにストップを停止させ,2%のストップで異常な状況で巨額の損失を防ぐことができます.この戦略は,リスクの利益をバランスさせ,より大きな利益を得る機会を逃さないようにします.しかし,横軸の振動が容易になり,取引頻度が増加するなど,一定のリスクもあります.これらの勧告は,戦略を最適化して,より多くの市場で安定して動作できるように考慮する価値があります.
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov
//@version=4
strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10)
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
profitPercent(price) =>
posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
(price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100
p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound")
p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound")
fill(p1, p2, color = color.red)