資源の読み込みに... 荷物...

複数パーセントの利益の脱出戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 15:22:29
タグ:

img

概要

この戦略は,複数のパーセントの利益出口を設定する機能を実装する. 戦略は最初にポジションに入るための長と短条件を判断する. その後,パーソナライズされたパーセントAsPoints関数を用いて,パーセントを価格ティックに変換する. プログラムは,構成に基づいて1%,2%,3%および4%の利益出口を4つ設定し,一般的な2%ストップ損失出口を設定する. これにより,複数のパーセントの利益出口の効果を達成する.

戦略の論理

この戦略の核心論理は,SMAクロスオーバーを使用してエントリを決定することです.特に,高速SMA (14) が遅いSMA (28号) を越えたとき,それは長くなります.高速SMA (14) が遅いSMA (28号) を越えたとき,それは短くなります.

では,複数のパーセントの利益出口をどのように設定しますか? ここでは,パーセンテージAsPoints関数を使用して,パーセンテージを価格ティックに変換します.論理は:

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つの出口を設定します:

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% のストップ・ロスは使用されます.これは複数のパーセントの利益出口の効果を達成します.

利点分析

この多パーセント利益離脱戦略には以下の利点があります.

  1. 利潤を段階的に引き出すことが可能で,より大きな利益を逃すのを避ける.一般的に後期出口にはより大きな利益目標とより高いリスクがあり,この戦略はリスクと収益をバランスします.

  2. バッチで退出すると資本回収が可能になり,リスクは低下します.例えば, 25% のバッチサイズで,1% の利益は資本の 1/4 を返却することができ,後のポジションは全て純利益です.

  3. 2%のストップロスは 異常な市場の動きで 極端な損失を防ぐことができます

  4. 実装はシンプルでクリーンで,理解し,変更が簡単です.カスタムパーセント変換機能は,数行のコードで複数の出口を設定することができます.

リスク分析

この戦略にはいくつかのリスクもあります:

  1. 割合の出口は,出口価格の周りに価格が振動し,頻繁な出口を引き起こし,横向的な混乱を引き起こす可能性があります. これにより取引頻度と手数料コストが増加します.

  2. バッチアウトは取引数と手数料を増やします 高額な手数料は出口利益の一部を消す可能性があります

  3. 不適切な出口ポジショニングも収益に影響を与えます.過度に保守的な出口は十分な利益をもたらし,過度に積極的な出口はリスクが高い可能性があります.

  4. 固定パーセントの出口は,市場の変動と傾向を考慮しない.不安定な市場では,より小さな出口を使用し,傾向のある市場では,より大きな出口をターゲットにする必要があります.

オプティマイゼーションの方向性

上記のリスクを考えると,次の側面でさらなる最適化を行うことができます.

  1. 市場変動と強さの基準で適応するための出口を最適化します ATR出口のような方法を使います 不安定な市場ではより緊密な出口,強いトレンドではより広い出口です

  2. 最適なリスク・リターン組み合わせを見つけるためにバッチの割合と範囲を最適化します.最適なパラメータを見つけるためにパラメータ最適化を追加します.

  3. 過剰取引を避けるために出口数を減らす.例えば,価格バッファゾーンを設定し,特定の価格動きを超えた後にのみ出口する.

  4. コミッションを考慮して 予想された利益が コミッションコストよりも低い場合を避けるか コミッションに基づく割合を最適化します

  5. アクジット価格を移動するのではなく,深さに基づいてオーダーブック出口を使用します.深さ優先度に基づいて最高のオファー/オーク価格を使用して出口します.

概要

この戦略は,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)

もっと