
A estratégia é um sistema de negociação dinâmico baseado no indicador CCI (Commodity Channel Indicator) para capturar oportunidades de negociação em áreas de superalimento do mercado, monitorando o grau de desvio do preço do valor médio. A estratégia usa 12 ciclos como período de retorno, fazendo uma entrada de mais quando o indicador CCI cai abaixo de -90 e fechando a posição quando o preço de liquidação ultrapassa o ponto mais alto do período anterior, e equipado com um mecanismo de parada de perda e ganho opcionais.
O núcleo da estratégia é o uso do CCI para medir o grau de desvio entre o preço e seu valor médio. O processo de cálculo do CCI inclui: primeiro, calcular o preço típico (… o valor médio aritmético dos preços mais altos, mais baixos e de encerramento), depois calcular a média móvel simples do preço típico (… o SMA), e finalmente, subtrair o SMA do preço típico e dividir por um desvio médio multiplicado por 0,015 para obter o valor final do CCI.
A estratégia capta oportunidades de superação de mercado através de indicadores CCI, com mecanismos de parada e de encerramento de lucros, para alcançar um sistema de negociação completo. A lógica da estratégia é clara, fácil de executar e tem uma boa capacidade de controle de risco.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("CCI Threshold Strategy", overlay=false, initial_capital=50000, pyramiding=0, commission_type=strategy.commission.cash_per_contract, commission_value=0.05, slippage=1)
// --- Input Parameters ---
// Lookback period for CCI calculation
lookbackPeriod = input.int(12, minval=1, title="CCI Lookback Period")
// Buy threshold for CCI; typically represents an oversold condition
buyThreshold = input.int(-90, title="CCI Buy Threshold")
// Stop loss and take profit settings
stopLoss = input.float(100.0, minval=0.0, title="Stop Loss in Points")
takeProfit = input.float(150.0, minval=0.0, title="Take Profit in Points")
// Checkboxes to enable/disable SL and TP
useStopLoss = input.bool(false, title="Enable Stop Loss")
useTakeProfit = input.bool(false, title="Enable Take Profit")
// --- Calculate CCI ---
// CCI (Commodity Channel Index) is used as a momentum indicator to identify oversold and overbought conditions
cci = ta.cci(close, length=lookbackPeriod)
// --- Define Buy and Sell Conditions ---
// Buy condition: CCI drops below -90, indicating potential oversold levels
longCondition = cci < buyThreshold
// Sell condition: Close price crosses above the previous day's high, signaling potential exit
sellCondition = close > ta.highest(close[1], 1)
// --- Strategy Execution ---
// Buy entry based on the long condition
if (longCondition)
strategy.entry("Buy", strategy.long)
// Close the long position based on the sell condition
if (sellCondition)
strategy.close("Buy")
// Optional: Add stop loss and take profit for risk management
if (longCondition)
strategy.exit("Sell", from_entry="Buy", loss=useStopLoss ? stopLoss : na, profit=useTakeProfit ? takeProfit : na)
// --- Plotting for Visualization ---
// Plot CCI with threshold levels for better visualization
plot(cci, title="CCI", color=color.blue)
hline(buyThreshold, "Buy Threshold", color=color.red, linestyle=hline.style_dotted)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)