Par hasard, je partage une stratégie Forex rentable open-source. Par hasard, parce que cela visait à être un matériel purement éducatif. Il y a quelques jours, TradingView a publié une fonctionnalité très puissante de valeurs dynamiques de PineScript qui est maintenant autorisée à être transmise dans les alertes. Et grâce à TradingConnector, elles pourraient être instantanément exécutées dans la plate-forme MT4 ou MT5 de n'importe quel courtier dans le monde. Donc oui - TradingConnector fonctionne avec des indices et des matières premières aussi.
La logique de cette stratégie EURUSD 6h est très simple - elle est basée sur des croisements stochastiques avec un stop-loss défini sous le point de pivot le plus récent. Le paramétrage du stop-loss avec une précision chirurgicale est possible précisément grâce à l'allocation de valeurs dynamiques dans les alertes. TradingConnector a également été mis à niveau pour tirer parti de ces valeurs dynamiques et il permet désormais d'exécuter des transactions avec des ordres stop-loss, take-profit, ainsi que des ordres stop et limités précalculés.
Une autre nouvelle fonctionnalité de TradingConnector, est la fermeture partielle des positions - à condition que le courtier le permette, bien sûr. Une position doit avoir trade_id spécifié à l'entrée, mentionné dans les alertes ultérieures avec fermeture partielle. Des spécifications détaillées de la syntaxe et des fonctionnalités des alertes peuvent être trouvées sur le site Web de TradingConnector.
La stratégie tient également compte des commissions.
Le slippage est intentionnellement laissé à 0. En raison du temps de livraison de TradingConnector inférieur à 1 seconde, le slippage est pratiquement inexistant. Cela peut être réalisé surtout si vous utilisez un serveur VPS, hébergé dans le même centre de données que les serveurs de vos courtiers. J'utilise une telle configuration, c'est faisable.
Cette stratégie est NON-REPAINTING et utilise NO TRAILING-STOP ou toute autre fonctionnalité connue pour être défectueuse dans le backtester TradingView. Est-ce que cela rend cette stratégie à l'épreuve des balles et 100% garantie de succès?
Pour transformer ce script en étude afin que des alertes puissent être produites, faites 2 choses:
Ce script a été créé à des fins éducatives uniquement.
Il ne s'agit certainement pas d'un conseil financier. Toute personne utilisant ce script ou l'une quelconque de ses parties de quelque manière que ce soit, doit être consciente des risques élevés liés au trading.
Merci @LucF et @a.tesla2018 de m'avoir aidé avec les corrections de code :)
test de retour
/*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)