
Chiến lược này kết hợp Stochastic Oscillator và Moving Average để đánh giá tình trạng quá mua và quá bán của thị trường và định hướng giao dịch dựa trên hướng xu hướng của đường trung bình di chuyển. Chiến lược mở nhiều vị trí đầu tư khi chỉ số dao động ngẫu nhiên vượt qua khu vực bán tháo và đường trung bình di chuyển có xu hướng tăng; chiến lược mở vị trí đầu tư trống khi chỉ số dao động ngẫu nhiên vượt qua khu vực mua và đường trung bình di chuyển có xu hướng giảm.
Chiến lược này được sử dụng để lọc các tín hiệu giao dịch bằng cách kết hợp các chỉ số dao động ngẫu nhiên và đường trung bình di chuyển, trong khi nắm bắt thị trường quá mua quá bán, và sử dụng hướng xu hướng của đường trung bình di chuyển để lọc tín hiệu giao dịch và thiết lập dừng để kiểm soát rủi ro. Ý tưởng của chiến lược rõ ràng, dễ hiểu và thực hiện. Tuy nhiên, chiến lược cũng có một số hạn chế, chẳng hạn như các chỉ số chậm trễ, giao dịch thường xuyên.
/*backtest
start: 2024-04-22 00:00:00
end: 2024-04-29 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_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 Stoch + MA c/ SL", 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 = 500
// Tamaño de posición (10% del capital)
positionSize = 1
// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100
// 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)
// Condiciones de entrada en largo y corto
longCondition = ta.crossunder(k, oversold) and ma > ma[1]
shortCondition = ta.crossover(k, overbought) 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")