
この戦略は,ランダムな振動指数 ((Stochastic Oscillator) と移動平均 ((Moving Average) を組み合わせて,ランダムな指数の超買超売状況と移動平均の傾向を観察して取引信号を生成する. ランダムな指数が超買区で移動平均線を下に空き信号を生成し,超売り区で移動平均線上方に空き信号を生成する. 同時に,この戦略は,ランダムな指数フィルターに導入し,ランダムな指数K線が50以下で一定数のK線を維持した後,D線と交差すると,相応の取引信号を生成することもできる. この戦略は,リスクを制御するためにストップロスを設定する.
ランダムな振動指標を計算し,K線とD線が得られる.パラメータは,ランダムな指標周期,K値平滑,D値平滑,超買区と超売り区を含む調整可能である.
移動平均を計算し,デフォルトは閉盘価格を使用し,周期は調整できます.
計算ランダム指数フィルター。K線が50以下で一定K線を維持すると,フィルター信号が生成。周期は調整できる。
多頭シグナルを生成する条件は,乱指数が超売区で交差して上方または乱指数がフィルター信号で移動平均線上方である.
空頭シグナルを生成する条件:乱指数は超買区で交差して下向き,または乱指数はフィルターシグナルで,移動平均線は下向きである.
多頭平仓条件:ランダムなK線で移動平均を横断し,平均線は下向きに転じます.
空頭平仓条件:ランダムなK線下を移動平均と平均線を上向きに回転する.
ポジション管理は固定資金比率を使用し,デフォルトは10%である.同時に,ストップ損失を設定し,デフォルトは2%である.
超買超売とトレンドの特徴を組み合わせて,トレンドの中で落を止めることができる.
ランダム指数フィルターは,震動の状況で頻繁に取引を避ける.
止損設定は,撤退を制御するのに役立ちます.
コード構造は明確で,パラメータは調整可能で,さらなる最適化に適しています.
ランダムな指標は遅滞があり,ベストバイズ・ボーズ・ポイントを逃す可能性があります.
トレンドの転換点では,紙張の精度が悪いので,ストップ・ロスの頻度は高い可能性があります.
固定比率の資金管理は,連続的な損失の場合には撤回が大きい.
価格行動や他の補助指標などのフィルタリング条件を導入し,信号の正確性を向上させました.
信号を強弱に分割し,強烈な信号が発生したときにポジションを拡大する.
傾向の転換点に関する判断を最適化して,より多くの状況を把握します.
ポジション管理を最適化するために,浮動的負債比ポジション調整などを考えることができます.
異なるパラメータの組み合わせを試し,最適なパラメータを探します.
この戦略は,ランダムな振動指数に基づいて,移動平均と組み合わせてトレンドを判断し,同時にランダムな指数自体のフィルタリング機能を適用し,比較的信頼性の高い取引信号を生成する.戦略の全体的な考え方は明確で,トレンドの状況で使用するのに適しています.しかし,ランダムな指数の遅滞性があるため,トレンドの転換点でのパフォーマンスは不良であり,全体的な適応性および強性はさらなる検討後に待っています.フィルタリング条件,ポジション管理パラメータ,数値最適化などから戦略を完善することができます.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Pablo_2uc
//@version=5
strategy("Estrategia Estocástico + MA con Stop Loss y Filtro Estocástico", overlay=true)
// Parámetros del Estocástico
length = input.int(14, title="Longitud Estocástico")
smoothK = input.int(3, title="Suavizado K")
smoothD = input.int(3, title="Suavizado D")
oversold = input.int(20, title="Sobreventa")
overbought = input.int(80, title="Sobrecompra")
// Parámetros de la Media Móvil
maLength = input.int(9, title="Longitud MA")
maSource = input(close, title="Fuente MA")
// Capital inicial
capital = 5000
// Tamaño de posición (10% del capital)
positionSize = capital * 0.10
// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100
// Número de ruedas para el filtro estocástico
filterPeriods = input.int(12, title="Ruedas de Filtro Estocástico")
// Cálculo del Estocástico
k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)
// Cálculo de la Media Móvil
ma = ta.sma(maSource, maLength)
// Filtro estocástico
stochasticFilter = ta.sma(k > 50 ? 1 : 0, filterPeriods)
// Condiciones de entrada en largo y corto
longCondition = (ta.crossunder(k, oversold) or ta.crossover(stochasticFilter, 1)) and ma > ma[1]
shortCondition = (ta.crossover(k, overbought) or ta.crossover(stochasticFilter, 1)) and ma < ma[1]
// Condiciones de salida
exitLongCondition = ta.crossover(k, ma) and ma < ma[1]
exitShortCondition = ta.crossunder(k, ma) and ma > ma[1]
// Estrategia
if (longCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Exit Long", "Long", stop=close * (1 - stopLossPercent))
if (shortCondition)
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Exit Short", "Short", stop=close * (1 + stopLossPercent))
// Cierre de posiciones
if (exitLongCondition)
strategy.close("Long")
if (exitShortCondition)
strategy.close("Short")