Cette stratégie adapte une courbe quadratique aux points hauts / bas des barres pour générer des signaux de trading lorsque le prix franchit les lignes ajustées.
Les principales composantes et règles sont les suivantes:
Adaptation de la courbe sur les points hauts/bas en utilisant la régression quadratique.
Achetez le signal lorsque le rapprochement dépasse la bande supérieure.
Vendez le signal lorsque la proximité dépasse la bande inférieure.
N périodes de vérification pour éviter les fausses ruptures.
Pas de règles de sortie fixes, optimiser les sorties par le backtesting.
La stratégie tente d'identifier les prix clés mathématiquement et de négocier les écarts, un système d'écarts typique.
Comparé à d'autres systèmes de fuite, les principaux avantages sont les suivants:
L'adaptation mathématique est plus objective que le jugement subjectif.
Approche novatrice combinant analyse technique et modèles statistiques.
La vérification à plusieurs périodes permet d'éviter les fausses ruptures.
Le backtesting permet d'optimiser les sorties et la période de rétention.
Facile à mettre en œuvre avec des ajustements flexibles.
Mise à jour automatique du modèle sans intervention manuelle.
Peut tester la robustesse des paramètres sur les produits et les délais.
Potentiel d'optimisation supplémentaire avec l'apprentissage automatique.
Approche totalement nouvelle avec une valeur exploratoire.
Cependant, les risques sont les suivants:
Les performances de montage dépendent du réglage des paramètres, le risque de surmontage.
Les lignes montées retardent, ne peuvent pas éviter complètement les pertes.
Aucune confirmation de volume, risque d'être piégé.
L'arbitrage statistique est un défi pour l'alpha persistant.
Période limitée de test de retour, besoin de vérifier la robustesse.
L'adaptabilité à plusieurs marchés nécessite une validation.
La taille fixe manque d'ajustement dynamique.
Il faut une évaluation stricte des rapports bénéfice/risque.
Sur la base de l'analyse, les améliorations peuvent inclure:
Test de la robustesse des paramètres dans tous les régimes du marché.
Ajouter des indicateurs de confirmation de volume.
Optimiser la logique d'entrée/sortie pour des signaux de meilleure qualité.
Construire des modèles de dimensionnement de position dynamique.
Incorporer des arrêts pour limiter les pertes.
Optimiser les stratégies de gestion des risques.
Validation du test de retour de la fenêtre tournante.
Évaluer la stabilité des marchés multiples.
Utiliser l'apprentissage automatique pour optimiser les modèles.
En résumé, cette stratégie a une certaine valeur innovante et mérite d'expérimentation. Mais la viabilité à long terme de l'arbitrage statistique reste non prouvée.
/*backtest start: 2023-08-23 00:00:00 end: 2023-09-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // strategy(title = " Strategy Quadratic Semaphore ", shorttitle = "SQS", overlay = true, precision = 8, calc_on_order_fills = true, calc_on_every_tick = true, backtest_fill_limits_assumption = 0, default_qty_type = strategy.fixed, default_qty_value = 2, initial_capital = 10000, pyramiding=5, currency = currency.USD, linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Month", minval = 1) FromDay = input(defval = 1, title = "Day", minval = 1) FromYear = input(defval = 2019, title = "Year", minval = 2014) backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Month", minval = 1) ToDay = input(defval = 12, title = "Day", minval = 1) ToYear = input(defval = 9999, title = "Year", minval = 2014) Config = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool) p = input(6) length = input(30) // backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // x1 = bar_index x2 = sqrt(x1) y = high // S11 = sum(x2,length) - sqrt(sum(x1,length)) / length S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length // max1 = sma(x1,length) max2 = sma(x2,length) may = sma(y,length) b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12)) b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12)) b1 = may - b2*max1 - b3*max2 qr = b1 + b2*x1 + b3*x2 // yl = low // Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length // mayl = sma(yl,length) b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12)) b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12)) b1l = mayl - b2l*max1 - b3l*max2 qrl = b1l + b2l*x1 + b3l*x2 // period = round(p/2)+1 hh = qr[period] ll = qrl[period] countH = 0 countL = 0 buy=0 sell=0 // for i = 1 to period-1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 for i = period+1 to p+1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 if countH==p pivotH = high[period] buy := 1 if countL==p pivotL = low[period] sell := 1 // plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto) plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto) // if (backTestPeriod()) strategy.entry("long", true, 1, when = buy == 1) strategy.entry("short", false, 1, when = sell == 1)