
自適性多信号均線動的ポジション加码戦略は,暗号通貨市場のために特別に設計された量化取引戦略であり,技術分析指標と動的ポジション管理システムを組み合わせている.核心的な考え方は,急速と遅い移動平均の交差信号とランダムに比較的強い弱指数 (ストキャスティックRSI) を利用して,市場トレンドの方向と入場タイミングを決定し,価格の逆調に反応するピラミッド式加仓方法を採用することである.この戦略は,予期された価格下落区間内で自動的にセキュリティオーダーを実行し,各セキュリティオーダーのサイズは予期された比率に従って徐々に増加し,その結果,下落過程で平均ポジション保有コストを低下させ,価格が目標の利潤レベルまで上昇すると,一度のポジション平準利益を得る.
この戦略は,以下のいくつかのコア技術構成要素に基づいています.
移動平均の二重システム戦略は,2つの移動平均線 ((速いと遅い) の交差を主要な入場信号として使用する.ユーザーは,単純移動平均線 ((SMA),指数移動平均線 ((EMA) またはヘル移動平均線 ((HMA) を選択することができ,市場状況に応じて平均線を横切って上りまたは下りで入場することができます.
ランダムな相対的に強い指標 (ストキャスティックRSI)補助入場条件として,ストキャスティックRSIのK線で5のレベルを穿い,同時に急速移動平均が上昇傾向にあるとき (連続5サイクル上昇) に買い信号を触発します.
ダイナミック・セキュリティ・オーダー・システム: 初期入場後,戦略は,既定価格レベルより下にある複数のセキュリティオーダーを設定する. これらの価格レベルは,価格偏差パラメータとステップ長縮小因子に基づいて計算される.
ポジション規模の動的調整: セキュリティオーダーのスケールのスケールファクタに応じて,各セキュリティオーダーの規模が徐々に増加し,増加式加倉構造を形成する.
目標利益平準化準備制度: 戦略は,平均保有価格に基づく目標利益レベルを設定し,価格がそのレベルに上昇すると,すべてのポジションは平仓されます.
戦略の実行プロセスは以下の通りです.
多次元入場信号: トレンド指数 ((移動平均) と動量指数 ((ストキャスティックRSI) を組み合わせて,入場精度を高め,偽信号を減らす.
適応性が高い: 戦略パラメータは高度にカスタマイズ可能で,ユーザーは異なる市場環境と個人のリスク好みに応じて移動平均のタイプ,周期,交差方向,価格偏差比率などのパラメータを調整できます.
コスト平均効果: 既定の安全注文システムにより,価格が下がった時に自動的にポジションを上げ,平均保有コストを効果的に削減し,最終的な利益の確率を向上させる.
資金効率の最適化安全注文のスケールアップデザインにより,資金配分がより効率的で,より多くの資金がより低い価格の注文に配分され,価値投資の理念に合致します.
自動実行: 設定が完了すると,戦略は完全に自動で動作し,人間の介入を必要とせず,感情的な取引決定を減らすことができます.
柔軟な市場適応力: 移動平均を交差方向に調整することで,戦略は異なる市場環境に適応できます.
リスクはゼロです: 戦略設計には明らかに止損メカニズムが設定されていないため,継続的な下落の状況では大きな損失を引き起こす可能性があります. 資産価格の暴落またはゼロ化などの極端な市場条件では,深刻な資金損失を引き起こす可能性があります.
資金の需要は高い戦略は,複数のセキュリティオーダーに資金を預ける必要があり,各オーダーの規模が増加するので,実際に必要な資金は,初期投入をはるかに超える可能性があります.
偏見があること:現在の戦略は多方向性を支持するだけで,長期の下落傾向では効果が悪い.この戦略は,全体的に好評な資産に適用することが推奨されている.
パラメータ感度: 戦略のパフォーマンスはパラメータの設定に大きく依存し,不適切なパラメータは,安全注文を早めに誘発したり,過剰に貯蔵したりする可能性があります.
平均コストの罠戦略は平均コストを減らしつつ,資産価値が下がり続け,回復できない場合,後退現象と資金収束を引き起こす可能性があります.
リスクを軽減する方法は,この戦略を全体的に好評な資産に適用し,安全命令に対応するために十分な資金を準備し,戦略のパラメータが市場環境と一致しているかどうかを定期的にチェックし,最大安全命令の数に制限を設定し,戦略に全局的な停止メカニズムを追加することを検討する.
損失防止の強化戦略の最も明らかな欠点は,ストップ・ロスのメカニズムがないことです. 全局的なストップ・ロスのパラメータを追加することを提案し,損失が一定比率に達すると,すべてのポジションを強制的に平仓させ,資金の安全性を保護します.
市場トレンドのフィルターに加入: 長期移動平均やADX指標のようなより長い周期のトレンド判断指標を追加し,主動トレンドの方向が一致している場合にのみ戦略を実行し,明らかな熊市で不要な加減を避ける.
セキュリティ命令のトリガー論理を最適化する:現在のセキュリティ注文は価格偏差のトリガーのみに基づいています. 取引量,変動率,または他の技術指標を組み合わせて,セキュリティ注文のトリガーをより賢くするために考慮することができます.
動的調整目標利益: 市場の変動や入場後の価格行動の動向に応じて目標利益レベルを調整することができ,高変動の市場環境でより高い目標利益を設定します.
空白機能を追加する: 拡張策は空調方向を支えるので,下降傾向でも同様に有効であり,策の全市場適応性を向上させる.
リトレースメントコントロールを追加:最大撤退制限を設定し,戦略的撤退が値を超えると取引を一時停止またはパラメータをリセットし,不利な市場条件下での継続的な損失を防止する.
周期性パラメータ最適化: 自動パラメータ最適化機能を追加し,近年の市場データに基づいてパラメータを定期的に調整し,市場特性の変化に戦略を適応させる.
これらの最適化方向は,戦略のリスク管理能力,市場適応性,長期的な安定性を向上させ,さまざまな市場環境で比較的安定したパフォーマンスを得ることを目的としています.
適応型マルチシグナル均線ダイナミックポジション加码策は,移動平均とランダムに比較的強い指標の入場信号を組み合わせて,ダイナミック・セキュア・オーダー・システムと連携して,暗号通貨市場に体系化された取引方法を提供している.その核心優点は,価格の回復時に徐々にポジションを自動的に加え,平均ポジションのコストを低下させ,価格が上昇すると利益を得るという点にある.
しかし,この戦略には明らかなリスクもあります.特に,停止メカニズムが欠如し,継続的な下落の状況で資金の損失が引き起こされる可能性があります.投資家は,この戦略を使用する際に,そのリスク特性を十分に理解し,十分な資金準備を確保し,追加のリスク管理措置を加えることを考慮する必要があります.
合理的なパラメータ設定と推奨される最適化方向によって,この戦略は,暗号通貨の長期投資家の強力なツールになり得る.特に,特定の暗号資産の長期価値を信じているが,入場コストを最適化したい投資家に適しています.実用化においては,最初にシミュレーション環境で十分にテストし,実際の市場パフォーマンスに応じて戦略パラメータを継続的に調整して最適化することをお勧めします.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=6
strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)
Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close
Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')
// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0
/////////// Moving_Averages
Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na
Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na
long_line(i) =>
close[1] - close[1] * step(i)
////////// Savety order Triger
Safe_order_line(i) =>
i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 = Safe_order_line(1)
l2 = Safe_order_line(2)
l3 = Safe_order_line(3)
l4 = Safe_order_line(4)
l5 = Safe_order_line(5)
l6 = Safe_order_line(6)
l7 = Safe_order_line(7)
l8 = Safe_order_line(8)
l9 = Safe_order_line(9)
l10 = Safe_order_line(10)
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)
///plots
plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1 ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2 ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3 ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4 ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5 ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6 ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7 ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8 ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ? l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)
///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r
//Stradegy mod
if Base_order_Condition or buy
if (Base_order_Condition or buy ) and strategy.opentrades == 0
strategy.entry('Base order', strategy.long, qty = Base_order_size )
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if status_none
strategy.cancel('Safety order' + i_s)
strategy.exit('TP/SL', 'Base order', limit = TP_line)
strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)
//