Alertas de TradingView para MT4 MT5 + variables dinámicas NO-REPAINTING

El autor:¿ Qué pasa?, Fecha: 24 de mayo de 2022 16:59:00
Las etiquetas:La SMAMT4MT5 de acuerdo con la legislación

Por casualidad, estoy compartiendo estrategia de Forex rentable de código abierto. Por casualidad, porque este fue destinado a ser un material puramente educativo. Hace unos días TradingView lanzó una característica muy poderosa de valores dinámicos de PineScript que ahora se permite pasar en Alertas. Y gracias a TradingConnector, podrían ejecutarse instantáneamente en la plataforma MT4 o MT5 de cualquier corredor del mundo. Así que sí - TradingConnector también funciona con índices y productos básicos.

La lógica de esta estrategia EURUSD 6h es muy simple - se basa en cruces estocásticos con stop-loss establecido bajo el punto de pivote más reciente. Establecer stop-loss con precisión quirúrgica es posible exactamente gracias a la admisión de valores dinámicos en las alertas. TradingConnector también se ha actualizado para aprovechar estos valores dinámicos y ahora permite ejecutar operaciones con stop-loss, take-profit, así como órdenes de stop y limit.

Otra característica nueva de TradingConnector, es el cierre de posiciones sólo parcialmente - siempre que el corredor lo permita, por supuesto. Una posición necesita tener trade_id especificado en la entrada, se refiere en alertas adicionales con cierre parcial. Las especificaciones detalladas de la sintaxis de alertas y funcionalidades se pueden encontrar en el sitio web de TradingConnector.

La estrategia también tiene en cuenta la comisión.

El deslizamiento se deja intencionalmente en 0. Debido a que el tiempo de entrega de TradingConnector es menor a 1 segundo, el deslizamiento es prácticamente inexistente. Esto se puede lograr especialmente si está utilizando un servidor VPS, alojado en el mismo centro de datos que los servidores de sus corredores. Estoy usando tal configuración, es factible.

Esta estrategia es NO-REPAINTING y NO utiliza TRAILING-STOP o cualquier otra característica conocida por ser defectuosa en el backtester TradingView. ¿Hace que esta estrategia sea a prueba de balas y 100% garantizada de éxito?

Para convertir este guión en estudio para que las alertas puedan ser producidas, hacer 2 cosas:

  1. comentario línea de estrategia al principio y no comentario línea de estudio
  2. Las líneas de comentarios 54-59 y las líneas de no comentarios 62-65. Luego añadir el guión a la tabla y configurar alertas.

Este guión fue creado para propósitos educativos solamente.

Ciertamente no se trata de un consejo financiero. Cualquiera que utilice este script o cualquiera de sus partes de alguna manera, debe ser consciente de los altos riesgos asociados con el comercio.

Gracias @LucF y @a.tesla2018 por ayudarme con las correcciones de código :)

Prueba posterior

img


/*backtest
start: 2022-04-23 00:00:00
end: 2022-05-22 23:59:00
period: 15m
basePeriod: 5m
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/
// © Peter_O

//@version=5
strategy(title='TradingView Alerts to MT4 MT5 Strategy example', commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=false, default_qty_value=100000, initial_capital=1000)
//study(title="TradingView Alerts to MT4 MT5 Strategy example")  //uncomment this line and comment previous one to make it a study producing alerts
//
// This script was created for educational purposes only.
// It is showing how to use dynamic variables in TradingView alerts.
// And how to execute them in Forex, indices and commodities markets

TakeProfitDistance = input(400)
TakePartialProfitDistance = input(150)

// **** Entries logic **** {
periodK = input.int(13, title='K', minval=1)
periodD = input.int(3, title='D', minval=1)
smoothK = input.int(4, title='Smooth', minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
plot(k, title='%K', color=color.new(color.blue, 0))
plot(d, title='%D', color=color.new(color.orange, 0))
h0 = hline(80)
h1 = hline(20)
fill(h0, h1, color=color.new(color.purple, 75))

GoLong = ta.crossover(k, d) and k < 80
GoShort = ta.crossunder(k, d) and k > 20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = ta.pivothigh(high, 1, 1)
piv_low = ta.pivotlow(low, 1, 1)
var float stoploss_long = low
var float stoploss_short = high

pl = ta.valuewhen(piv_low, piv_low, 0)
ph = ta.valuewhen(piv_high, piv_high, 0)

if GoLong
    stoploss_long := low < pl ? low : pl
    stoploss_long
if GoShort
    stoploss_short := high > ph ? high : ph
    stoploss_short
// } End of Pivot-points and stop-loss logic

strategy.entry('Long', strategy.long, when=GoLong)
strategy.exit('XPartLong', from_entry='Long', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XLong', from_entry='Long', stop=stoploss_long, profit=TakeProfitDistance)
strategy.entry('Short', strategy.short, when=GoShort)
strategy.exit('XPartShort', from_entry='Short', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XShort', from_entry='Short', stop=stoploss_short, profit=TakeProfitDistance)

if GoLong
    alertsyntax_golong = 'long slprice=' + str.tostring(stoploss_long) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort = 'short slprice=' + str.tostring(stoploss_short) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)


if GoLong
    strategy.entry("Enter Long", strategy.long)
else if GoShort
    strategy.entry("Enter Short", strategy.short)

Relacionados

Más.