Stratégies haussières et baissières des crypto-monnaies basées sur l'indicateur Wall Street Mouse Halo


Date de création: 2023-11-01 11:27:20 Dernière modification: 2023-11-01 11:27:20
Copier: 0 Nombre de clics: 681
1
Suivre
1617
Abonnés

Stratégies haussières et baissières des crypto-monnaies basées sur l’indicateur Wall Street Mouse Halo

Aperçu

La stratégie est basée sur l’indicateur Wall Street Capture the Loop, une stratégie de trading automatique permettant de suivre les transactions sur plusieurs crypto-monnaies en fonction des paramètres de l’indicateur de support de différentes crypto-monnaies.

Principe de stratégie

  1. Calculez la moyenne de la courbe de Wall Street pour la crypto-monnaie de référence avec une longueur de moyenne de 200 cycles.

  2. Pour déterminer si la moyenne est à la hausse ou à la baisse: lorsque la moyenne est à la hausse, la stratégie utilise une opération bullish; lorsque la moyenne est à la baisse, la stratégie utilise une opération bearish.

  3. Stratégie permettant d’ouvrir automatiquement des positions et de les résilier en fonction de la moyenne et de la baisse de la moyenne, ainsi que de la situation actuelle de la position:

    • La stratégie consiste à ouvrir automatiquement une position plus élevée lorsque la moyenne est élevée et qu’il n’y a pas de position en cours.

    • Le cours de la stratégie est automatiquement mis à découvert lorsque la moyenne est en baisse et qu’il n’y a pas de position en cours;

    • Le prix de la stratégie est automatiquement compensé lorsque le profit de la position sur plusieurs positions atteint le seuil de stop-loss défini;

    • le cours de la stratégie est automatiquement annulé lorsque le profit de la position en cours atteint le seuil de stop-loss;

    • Le cours de la stratégie se calme automatiquement lorsque les pertes de la position sur plus atteignent le seuil de stop-loss défini;

    • Lorsque les pertes de la position en cours atteignent le seuil de stop-loss défini, le cours de la stratégie est automatiquement compensé par la position en cours.

  4. La stratégie consiste à mettre à jour en temps réel le prix stop-loss en fonction de l’évolution de la crypto-monnaie de référence.

Analyse des avantages

  1. La stratégie est très adaptable, avec différents paramètres pour différentes crypto-monnaies, permettant de suivre les transactions sur plusieurs crypto-monnaies.

  2. L’indicateur Wall Street Mouse Trap Gloss Indicateur est utilisé pour évaluer les tendances du marché et éviter les erreurs de négociation causées par le bruit. L’indicateur a une certaine retardation sur les ruptures de haut en bas et peut réduire les pertes causées par de fausses ruptures.

  3. La stratégie comprend un mécanisme d’arrêt de la perte, permettant de suivre la tendance et de contrôler les pertes individuelles.

  4. La stratégie est entièrement automatisée, sans intervention humaine, et fonctionne 24 heures sur 24.

Analyse des risques

  1. Il est possible que certains prix de crypto-monnaie soient déconnectés des crypto-monnaies de référence, ce qui entraîne un risque de non-commercialisation de la stratégie. Le coefficient de corrélation peut être optimisé en utilisant plusieurs crypto-monnaies de référence pour calculer le coefficient de corrélation et en choisissant la crypto-monnaie de référence la plus corrélée.

  2. Il existe un risque de rupture du stop loss en raison d’une fluctuation anormale du marché. Le stop loss ratio peut être ajusté de manière appropriée ou ajouté au stop loss tracking.

  3. Il y a un risque que le paramètre de stop ratio soit trop petit et que vous ne puissiez pas capturer suffisamment de gains de tendance. Vous pouvez ajouter un suivi de tendance ou un stop dynamique.

  4. Il existe un risque de fausse rupture entraînant un arrêt de la position. Il est possible d’ajuster les paramètres de l’indicateur, les paramètres d’identification ou d’ajouter un mécanisme de réadmission.

Direction d’optimisation

  1. Choisir plusieurs crypto-monnaies de référence en utilisant l’analyse de la corrélation, combiner les indicateurs de calcul et réduire le risque d’une seule crypto-monnaie de référence

  2. Ajout d’un mécanisme de suivi de la tendance et ajustement des stop-loss en fonction de la dynamique de la volatilité.

  3. Augmenter le niveau de dommages pour empêcher que les dommages d’extrême nature ne soient dépassés.

  4. L’augmentation des mécanismes de réadmission, afin d’éviter que les pertes ne soient compensées par des pertes supplémentaires.

  5. Optimiser les paramètres de l’indicateur, les paramètres d’identification et améliorer l’efficacité de l’indicateur.

  6. Optimisation des paramètres pour les différentes crypto-monnaies afin d’améliorer l’adaptabilité des stratégies.

  7. Optimisation de la gestion des positions, adaptation dynamique des positions en fonction de la taille des fonds.

Résumer

L’idée centrale est de déterminer la direction de la tendance de la crypto-monnaie de référence en fonction de l’indicateur de Wall Street Mouse Ring afin de déterminer la direction des transactions de la crypto-monnaie cible. La stratégie présente certains avantages, mais il existe également des risques à prendre en compte. La stabilité et le rendement de la stratégie peuvent être encore améliorés par l’optimisation continue des paramètres et l’augmentation des mécanismes de suivi des tendances et de contrôle des risques.

Code source de la stratégie
/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
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/
// © levieux

//@version=5
strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

supportLength = input.int(200, minval=1, title='Support Length')
supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol')
supportSource = input(hlc3, title='Price Source')
takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01)
takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01)
stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01)
stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01)
start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time")
end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time")

supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off)  //input(close, title="Source")
supportLine = ta.wma(supportTicker, supportLength)

window() => true

if not window()
    strategy.cancel_all()

supportLongPrice = close
supportShortPrice = close

if strategy.position_size > 0
    supportLongPrice := supportLongPrice[1]
if strategy.position_size < 0
    supportShortPrice := supportShortPrice[1]

longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0
shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0
takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong)
stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong)
takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort)
stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort)

if longCondition
    strategy.entry('Long', strategy.long)
    supportLongPrice := supportTicker

if shortCondition
    strategy.entry('Short', strategy.short)
    supportShortPrice := supportTicker

if takeprofitLongCondition
    strategy.close('Long')
if stoplossLongCondition
    strategy.close('Long')
if takeprofitShortCondition
    strategy.close('Short')
if stoplossShortCondition
    strategy.close('Short')

///////////////////
// MONTHLY TABLE //

new_month = month(time) != month(time[1])
new_year  = year(time)  != year(time[1])

eq = strategy.equity

bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]

cur_month_pnl = 0.0
cur_year_pnl  = 0.0
cur_month_bh = 0.0
cur_year_bh  = 0.0

// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 : 
                 (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
cur_month_bh := new_month ? 0.0 : 
                 (1 + cur_month_bh[1]) * (1 + bar_bh) - 1

// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 : 
                 (1 + cur_year_bh[1]) * (1 + bar_bh) - 1

// Arrays to store Yearly and Monthly P&Ls
var month_pnl  = array.new_float(0)
var month_time = array.new_int(0)
var month_bh  = array.new_float(0)

var year_pnl  = array.new_float(0)
var year_time = array.new_int(0)
var year_bh  = array.new_float(0)

end_time = false

end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory

if (not na(cur_month_pnl[1]) and (new_month or end_time))
    if (end_time[1])
        array.pop(month_pnl)
        array.pop(month_time)
        
    array.push(month_pnl , cur_month_pnl[1])
    array.push(month_time, time[1])
    array.push(month_bh , cur_month_bh[1])

if (not na(cur_year_pnl[1]) and (new_year or end_time))
    if (end_time[1])
        array.pop(year_pnl)
        array.pop(year_time)
        
    array.push(year_pnl , cur_year_pnl[1])
    array.push(year_time, time[1])
    array.push(year_bh , cur_year_bh[1])

// Monthly P&L Table    
var monthly_table = table(na)

getCellColor(pnl, bh)  => 
    if pnl > 0
        if bh < 0 or pnl > 2 * bh
            color.new(color.green, transp = 20)
        else if pnl > bh
            color.new(color.green, transp = 50)
        else
            color.new(color.green, transp = 80)
    else
        if bh > 0 or pnl < 2 * bh
            color.new(color.red, transp = 20)
        else if pnl < bh
            color.new(color.red, transp = 50)
        else
            color.new(color.red, transp = 80)

if end_time
    monthly_table := table.new(position.bottom_right, 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 = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
        table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
        
    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 = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
        
        table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)