La estrategia Martin es una estrategia de negociación frecuente que combina cruces de promedio móvil y señales de retroceso para generar señales de entrada y salida. La estrategia utiliza el cruce y la divergencia de promedios móviles simples de 3 días y 8 días para capturar tendencias a corto plazo, y adopta paradas y tomar ganancias para controlar los riesgos.
La estrategia utiliza promedios móviles simples de 3 días y 8 días y sus señales de cruce. Una señal larga se genera cuando el MA de 3 días cruza por encima del MA de 8 días, y una señal corta se genera cuando el MA de 3 días cruza por debajo del MA de 8 días. Las señales largas desencadenarán una entrada larga y las señales cortas desencadenarán una entrada corta.
Si no hay posición, la estrategia determinará la entrada en función de las señales de cruce. Después de la entrada, el precio de stop loss y el precio de take profit se calcularán en función del último precio de cierre, el porcentaje de stop loss y el porcentaje de take profit. Por ejemplo, cuando se mantiene una posición larga, el precio de stop loss es el último precio de cierre menos el porcentaje de stop loss multiplicado por el MA de 8 días; el precio de take profit es el último precio de cierre más el porcentaje de take profit multiplicado por el MA de 8 días.
Si hay una posición larga existente, cuando el precio desencadena el take profit o stop loss, si se produce una señal de retroceso del MA de 8 días, la posición se cerrará.
La estrategia también traza puntos de entrada y salida en el gráfico. Por ejemplo, una entrada larga se traza como un triángulo ascendente y una salida larga como un triángulo descendente. Esto ayuda a juzgar visualmente entradas y salidas.
Las ventajas de esta estrategia son:
Los principales riesgos de esta estrategia son:
Los riesgos pueden reducirse aumentando razonablemente el porcentaje de stop loss, optimizando los parámetros de MA, introduciendo condiciones de filtro adicionales, etc. También es importante evaluar correctamente la tolerancia personal y evitar el exceso de operaciones.
Esta estrategia se puede optimizar a partir de los siguientes aspectos:
La estrategia Martin es una estrategia de trading a corto plazo. Captura las tendencias a corto plazo formadas por cruces de promedios móviles, y gestiona los riesgos con paradas y ganancias adecuadas. La naturaleza frecuente del trading le da oportunidades de ganancias, así como riesgos. Al optimizar los parámetros, filtrar las señales y controlar los riesgos, esta estrategia se puede mejorar aún más para mayor fiabilidad.
/*backtest start: 2022-11-17 00:00:00 end: 2023-11-23 00:00:00 period: 1d basePeriod: 1h 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/ // © blackcat1402 //@version=5 strategy('[blackcat] L1 MartinGale Scalping Strategy', overlay=true, pyramiding = 5) // Define input variables takeProfit = input(1.03, title='Take Profit') stopLoss = input(0.95, title='Stop Loss') inputTradingMode = input.string(defval='Long', options=['Long', 'Short', 'BiDir'], title='Trading Mode') //The purpose of this rule is to forbid short entries, only long etries will be placed. The rule affects the following function: 'entry'. strategy.risk.allow_entry_in(inputTradingMode == 'Long' ? strategy.direction.long : inputTradingMode == 'Short' ? strategy.direction.short : strategy.direction.all) // Define strategy logic entryPrice = 0.0 stopPrice = 0.0 takeProfitPrice = 0.0 stopLossPrice = 0.0 // Define SMA crossover and crossunder signals sma3 = ta.sma(close, 3) sma8 = ta.sma(close, 8) plot(sma3, color=color.yellow) plot(sma8, color=color.fuchsia) crossoverSignal = ta.crossover(sma3, sma8) crossunderSignal = ta.crossunder(sma3, sma8) crossoverState = sma3 > sma8 crossunderState = sma3 < sma8 if strategy.position_size == 0 if crossoverState strategy.entry('Buy', strategy.long) entryPrice := close stopPrice := close - stopLoss * sma8[1] takeProfitPrice := close + takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if crossunderState strategy.entry('Sell', strategy.short) entryPrice := close stopPrice := close + stopLoss * sma8[1] takeProfitPrice := close - takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if strategy.position_size > 0 if (close > takeProfitPrice or close < stopLossPrice) and crossunderState strategy.close('Buy') entryPrice := 0.0 stopPrice := 0.0 takeProfitPrice := 0.0 stopLossPrice := 0.0 stopLossPrice else strategy.entry('Buy', strategy.long) entryPrice := close stopPrice := close - stopLoss * sma8[1] takeProfitPrice := close + takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if strategy.position_size < 0 if (close > takeProfitPrice or close < stopLossPrice) and crossoverState strategy.close('Sell') entryPrice := 0.0 stopPrice := 0.0 takeProfitPrice := 0.0 stopLossPrice := 0.0 stopLossPrice else strategy.entry('Sell', strategy.short) entryPrice := close stopPrice := close + stopLoss * sma8[1] takeProfitPrice := close - takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice // Plot entry and exit points plotshape(strategy.position_size > 0 and crossoverSignal, 'Buy Entry', shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.small) plotshape(strategy.position_size > 0 and (close >= takeProfitPrice or close <= stopLossPrice), 'Buy Exit', shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small) plotshape(strategy.position_size < 0 and crossunderSignal, 'Sell Entry', shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small) plotshape(strategy.position_size < 0 and (close >= takeProfitPrice or close <= stopLossPrice), 'Sell Exit', shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.small)