
La stratégie de négociation de l’inversion de la bi-médianité consiste à calculer une moyenne mobile simple pour deux périodes distinctes, à court et à long terme, et à générer un signal de négociation en fonction de la relation entre le prix et la moyenne mobile. Lorsque vous traversez la moyenne à court terme, faites plus; lorsque vous traversez la moyenne à long terme en dessous de la moyenne à court terme, faites moins.
La stratégie utilise des paramètres d’entrée pour définir des moyennes mobiles simples de deux longueurs de cycle différentes. Les courts cycles sont appelés les lignes rapides et les longs cycles sont appelés les lignes lentes. Les lignes rapides répondent aux variations de prix plus rapidement, capturant les tendances à court terme.
Plus précisément, la stratégie calcule deux moyennes via la fonction sma () et attribue le résultat de calcul à xSMA () et à la ligne rapide. La stratégie utilise le prix de clôture pour calculer la moyenne. Lorsque le prix de clôture est au-dessus de xSMA, faites plus; lorsque le prix de clôture est en dessous de xSMA, faites moins. La stratégie définit également une limite de plage de temps de négociation, qui n’émet un signal de négociation que dans la plage de temps indiquée.
Pour chaque transaction, un point d’arrêt-perte est défini, et l’arrêt-perte est immédiatement effectué lorsque le point d’arrêt-perte est atteint. En même temps, la stratégie affiche la relation du prix à la ligne lente sur la ligne K avec la fonction barcolor: la ligne K est verte lorsque vous faites une position plus élevée; la ligne K est rouge lorsque vous faites une position vide; la ligne K est bleue lorsque vous êtes en position nulle.
Il est possible de réduire le risque en ajustant les paramètres de la moyenne, en optimisant les stratégies de stop-loss, en supprimant les contraintes de temps ou en définissant des périodes de négociation plus raisonnables. Il est également possible d’envisager la combinaison d’autres indicateurs comme conditions de filtrage pour éviter trop de faux signaux.
L’optimisation des paramètres, l’introduction d’indicateurs auxiliaires, etc., peuvent être améliorées pour rendre la stratégie plus stable et fiable. Si elle est utilisée, la stratégie peut générer des marges de profit stables et doit être entièrement testée et optimisée.
/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
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/
// © HPotter
// Simple SMA strategy
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0
strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0)
strategy.close_all()
if (UseTPSL)
strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)