La stratégie utilise une combinaison de moyennes mobiles sur un cadre temporel, identifie les rotations de tendances sur les graphiques horaires à moyen terme et permet un suivi des tendances à faible risque. La stratégie présente des avantages de configuration flexible, de simplicité et d'efficacité financière élevée, adaptée aux traders qui ont des positions à long terme.
La stratégie utilise trois moyennes mobiles de 5, 20 et 40 jours pour déterminer les combinaisons de tendances sous différents cadres horaires.
Plus précisément, une ligne rapide de 5 jours traversant la ligne médiane de 20 jours est considérée comme un signal de hausse de la ligne courte, et une ligne lente de 20 jours traversant la ligne médiane de 40 jours est considérée comme un signal de hausse de la ligne médiane. Lorsque la ligne rapide de 3 jours est en ordre (< 5 jours > 20 jours > 40 jours), elle est jugée comme un cycle à plusieurs têtes; lorsque la ligne lente de 3 jours est en inversion (< 5 jours < 20 jours < 40 jours), elle est jugée comme un cycle à tête vide.
Ainsi, en fonction de la direction de la tendance du grand cycle, puis en combinaison avec la force du petit cycle, la détection d'une entrée spécifique; c'est-à-dire que l'ouverture d'une position uniquement lorsque la tendance est homogène et que le petit cycle est fort, peut filtrer efficacement les fausses percées d'inversion pour réaliser des opérations à taux de victoire élevé.
En outre, la stratégie utilise l'ATR pour contrôler le risque d'une seule transaction et augmenter encore le taux de rentabilité.
Configuration flexible, les paramètres de la moyenne mobile peuvent être ajustés par les utilisateurs pour s'adapter aux différentes variétés et préférences de négociation
La mise en œuvre est simple et facile pour les débutants.
L'efficacité de l'utilisation des fonds et le plein effet de levier
Les risques sont maîtrisés et les mécanismes d'arrêt des pertes sont efficaces pour éviter les pertes importantes
Une forte capacité à suivre la tendance et une rentabilité soutenue après la détermination de la direction du grand cycle
Les taux de réussite sont plus élevés, la qualité du signal de transaction est meilleure et les erreurs de trajectoire sont moins nombreuses.
Les jugements de grande cyclicité dépendent de l'arrangement de la ligne moyenne de décalage, ce qui présente un risque d'erreur de jugement tardif.
Détection de l'intensité de micro-cycles avec un seul fil K, peut être déclenchée à l'avance et peut être correctement relaxée
L'amplitude du freinage est fixe et peut être optimisée en freinage dynamique.
Des conditions de filtrage supplémentaires peuvent être envisagées, telles que l'énergie du volume de transaction.
Vous pouvez essayer différentes combinaisons de paramètres de la moyenne mobile pour optimiser votre stratégie.
Cette stratégie intègre l'analyse de plusieurs cadres temporels et la gestion des arrêts, ce qui permet de réaliser des transactions de suivi de tendances à faible risque. Elle peut être appliquée à différentes variétés en ajustant les paramètres pour répondre aux besoins des suiveurs de tendances. Sa décision de transaction est plus solide et son signal plus efficace par rapport aux systèmes traditionnels à un seul cadre temporel.
Cette stratégie utilise une combinaison de moyennes mobiles à travers les délais pour identifier les rotations de tendance sur les graphiques horaires, quotidiens et hebdomadaires.
La stratégie utilise des moyennes mobiles de 5, 20 et 40 jours pour déterminer l'alignement des tendances sur différentes périodes.
Plus précisément, le franchissement d'un MA rapide de 5 jours au-dessus d'un MA moyen de 20 jours indique une tendance à la hausse à court terme. Le franchissement d'un MA moyen de 20 jours au-dessus d'un MA lent de 40 jours indique une tendance à la hausse à moyen terme. Lorsque les MA rapides, moyens et lents sont alignés positivement (5 jours > 20 jours > 40 jours), c'est un cycle haussier. Lorsqu'ils sont alignés négativement (5 jours < 20 jours < 40 jours), c'est un cycle baissier.
En déterminant la direction des cycles plus importants et en confirmant la force sur les cycles plus petits, cette stratégie n'ouvre des positions que lorsque la tendance majeure et l'élan mineur s'alignent.
La stratégie utilise également des arrêts de trail ATR pour contrôler les risques commerciaux uniques et améliorer davantage la rentabilité.
Configurations flexibles adaptées aux différents instruments et styles de négociation
Simple à mettre en œuvre même pour les traders débutants
Efficacité élevée du capital pour maximiser l'effet de levier
Contrôle efficace des risques pour éviter des pertes importantes
Forte tendance à la suite de la capacité à réaliser des bénéfices soutenus
Taux de victoire élevé en raison de signaux solides et de moins de coups de fouet
Les croisements MA peuvent être retardés et entraîner une détection tardive de la tendance
La détection de la force d'une seule bougie pourrait déclencher une entrée prématurée, une condition de relaxation.
Perte d'arrêt ATR fixe, optimisé pour des arrêts dynamiques
Pensez à ajouter des filtres supplémentaires comme le volume
Explorez les différents paramètres MA pour l'optimisation
Cette stratégie intègre l'analyse de plusieurs délais et la gestion des risques pour une tendance à faible risque après le trading. En ajustant les paramètres, elle peut être adaptée à différents instruments pour convenir aux traders de tendance. Par rapport aux systèmes à délais uniques, elle prend des décisions commerciales plus robustes et génère des signaux d'efficacité plus élevés. En conclusion, cette stratégie a une bonne adaptabilité du marché et un potentiel de développement.
/*backtest start: 2023-10-17 00:00:00 end: 2023-11-16 00:00:00 period: 1h 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/ // © kgynofomo //@version=5 strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000) ema_short = ta.ema(close,5) ema_middle = ta.ema(close,20) ema_long = ta.ema(close,40) cycle_1 = ema_short>ema_middle and ema_middle>ema_long cycle_2 = ema_middle>ema_short and ema_short>ema_long cycle_3 = ema_middle>ema_long and ema_long>ema_short cycle_4 = ema_long>ema_middle and ema_middle>ema_short cycle_5 = ema_long>ema_short and ema_short>ema_middle cycle_6 = ema_short>ema_long and ema_long>ema_middle bull_cycle = cycle_1 or cycle_2 or cycle_3 bear_cycle = cycle_4 or cycle_5 or cycle_6 // label.new("cycle_1") // bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na) // bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na) // bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na) // bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na) // bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na) // bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na) // Inputs a = input(2, title='Key Vaule. \'This changes the sensitivity\'') c = input(7, title='ATR Period') h = false xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close xATRTrailingStop = 0.0 iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1 xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATRTrailingStop) below = ta.crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop atr = ta.atr(14) atr_length = input.int(25) atr_rsi = ta.rsi(atr,atr_length) atr_valid = atr_rsi>50 long_condition = buy and bull_cycle and atr_valid short_condition = sell and bear_cycle and atr_valid Exit_long_condition = short_condition Exit_short_condition = long_condition if long_condition strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here") if Exit_long_condition strategy.close("Andy Buy",comment="Andy Buy Out") // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here") // strategy.close("Andy fandan Buy",comment="Andy short Out") if short_condition strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here") // strategy.exit("STR","Long",stop=longstoploss) if Exit_short_condition strategy.close("Andy Short",comment="Andy short Out") // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here") // strategy.close("Andy fandan Short",comment="Andy Buy Out") inLongTrade = strategy.position_size > 0 inLongTradecolor = #58D68D notInTrade = strategy.position_size == 0 inShortTrade = strategy.position_size < 0 // bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //atr > close *0.01* parameter // MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad // ************************************************************************************************************************************************************************************************************************************************************************* show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad') prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad') if show_performance new_month = month(time) != month(time[1]) new_year = year(time) != year(time[1]) eq = strategy.equity bar_pnl = eq / eq[1] - 1 cur_month_pnl = 0.0 cur_year_pnl = 0.0 // Current Monthly P&L cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 // Current Yearly P&L cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1 // Arrays to store Yearly and Monthly P&Ls var month_pnl = array.new_float(0) var month_time = array.new_int(0) var year_pnl = array.new_float(0) var year_time = array.new_int(0) last_computed = false if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(month_pnl) array.pop(month_time) array.push(month_pnl , cur_month_pnl[1]) array.push(month_time, time[1]) if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(year_pnl) array.pop(year_time) array.push(year_pnl , cur_year_pnl[1]) array.push(year_time, time[1]) last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1]) // Monthly P&L Table var monthly_table = table(na) if (barstate.islastconfirmedhistory) monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1) table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc) table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc) table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc) table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc) table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc) table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc) table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc) table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc) table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc) table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc) table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc) table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc) table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc) table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999) for yi = 0 to array.size(year_pnl) - 1 table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc) y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0)) for mi = 0 to array.size(month_time) - 1 m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1 m_col = month(array.get(month_time, mi)) m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))