Cette stratégie prédit les tendances en jugeant la barre significative des lignes K, et génère des signaux de trading combinés avec des signaux de rupture.
Jugez la longueur de corps de l'entité de la ligne K actuelle. Si elle est supérieure à 3 fois la valeur moyenne du corps des 6 lignes K précédentes, elle est considérée comme une barre significative.
S'il y a 3 barres consécutives avec des corps longs, il est jugé comme un signal long.
Lors du jugement du signal, si le prix franchit le point le plus élevé ou le plus bas précédent, des signaux de trading supplémentaires seront également générés.
Utilisez la SMA comme filtre. Ouvrez des positions uniquement lorsque le prix franchit la SMA.
Après avoir pris une position, si le prix franchit à nouveau le point d'entrée ou la SMA, fermez la position.
L'utilisation de "barres significatives" pour juger des tendances peut filtrer les interférences inutiles et donner des signaux plus clairs.
La combinaison de signaux de tendance et de signaux de rupture améliore la qualité du signal et réduit les faux signaux.
Les filtres SMA évitent d'acheter haut et de vendre bas.
La fixation des conditions de prise de profit et de stop loss facilite le contrôle des risques en temps opportun.
Cette stratégie agressive évalue les signaux à partir de seulement 3 barres et peut interpréter à tort les fluctuations à court terme comme des renversements de tendance.
Les résultats peuvent varier selon les produits et les délais.
Pas de contrôle de position sur la nuit, avec risque de détention sur la nuit.
Optimiser davantage les paramètres pour
Testez les impacts de différents délais pour trouver les paramètres optimaux.
Ajouter un stop loss basé sur l'ATR au contrôle des risques.
Envisagez d'ajouter un contrôle de position de nuit.
Cette stratégie utilise un filtrage de barres significatif et un jugement de tendance pour générer des signaux de trading combinés à des ruptures. Elle filtre efficacement les fluctuations mineures inutiles pour des signaux plus clairs et plus fiables. Cependant, en raison de cycles de jugement courts, certains risques de mauvais jugement existent. D'autres améliorations peuvent être apportées grâce à l'optimisation des paramètres et au contrôle des risques.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //AlexInc //2018 // закрытие - вычислить и в течение скольки-то баров его добиваться // если нет, то по первому противоположному // по стоп-лоссу в любом случае - стоп вычислить //@version=2 strategy(title = "AlexInc's Bar v1.2", shorttitle = "AlexInc Bar 1.2", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") tryprofitbars = input(6, defval = 6, minval = 1, maxval = 100, title = "Number of candles to take profit anyway") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") useSMAfilter = input(false, defval = true, title = "Use SMA filter") SMAlimit = input(10, defval = 10, minval = 1, maxval = 30, title = "SMA filter limit") bodysizeMlt = input(3, defval = 3, minval = 1, maxval = 10, title = "Body Size Multiplier") meanfulbardiv = input(3, title = "Meanful Bar size Divider") showarr = input(false, defval = false, title = "Show Arrows") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //SMA # index = 0 index := barstate.isfirst ==true ? 0 : nz(index[1])+1 buyindex = 0 buyindex := barstate.isfirst ==true ? 0 : buyindex[1] sellindex = 0 sellindex := barstate.isfirst ==true ? 0 : sellindex[1] //predictprofit = barstate.isfirst ==true ? 0 : predictprofit[1] smafilter = sma(close, SMAlimit) //Body body = abs(close - open) range = abs(high - low) abody = sma(body, 6) max3 = 0 if body >= body[1] and body >= body[2] max3 := body else if body[1] >= body and body[1] >= body[2] max3 := body[1] else if body[2] >= body and body[2] >= body[1] max3 := body[2] prevmax3 = 0 prevmax3 := nz(max3[1]) bar = close > open ? 1 : close < open ? -1 : 0 firstbullishopen = 0 firstbullishopen := bar == 1 and bar[1] != 1 ? open : nz(firstbullishopen[1]) firstbearishopen = 0 firstbearishopen := bar == -1 and bar[1] != -1 ? open : nz(firstbearishopen[1]) meanfulbar = body > abody / meanfulbardiv meanfulbearish = 0 meanfulbearish := nz(meanfulbearish[1]) meanfulbullish = 0 meanfulbullish := nz(meanfulbullish[1]) if meanfulbar if bar == 1 meanfulbullish := 1 + meanfulbullish meanfulbearish := 0 else if bar == -1 meanfulbearish := 1 + meanfulbearish meanfulbullish := 0 plot(min(low, high)-10, style=circles, color = meanfulbar ? yellow:black, linewidth=3) //Signals up1 = (meanfulbearish >= 3) and (close < firstbullishopen or 1) and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter) if up1 == true predictprofit = sma(body, 3) up2 = sma(bar, 1) == -1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter) if up2 == true predictprofit = body * 0.5 plot(min(low, high), style=circles, color = up1?blue:up2?green:gray, linewidth=3) dn1 = (meanfulbullish >= 3) and (close > firstbearishopen or 1) and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter) if dn1 ==true predictprofit = sma(body, 3) dn2 = sma(bar, 1) == 1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter) if dn2 ==true predictprofit = body * 0.5 plot(max(low, high), style=circles, color = dn1?blue:dn2?green:gray, linewidth=3) exit = (((strategy.position_size > 0 and bar == 1 ) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 ) // or index >= buyindex (or sellindex) + tryprofitbars //Arrows col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na needup = up1 or up2 needdn = dn1 or dn2 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 or up2 if strategy.position_size < 0 strategy.close_all() buyindex = index sellindex = index if strategy.position_size == 0 buyindex = index strategy.entry("Long", strategy.long, needlong == false ? 0 : lot ) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() buyindex = index sellindex = index if strategy.position_size == 0 sellindex = index strategy.entry("Short", strategy.short, needshort == false ? 0 : lot ) if exit strategy.close_all()