Stratégie de signaux de trading quadratiques


Date de création: 2023-09-23 15:40:57 Dernière modification: 2023-09-23 15:40:57
Copier: 2 Nombre de clics: 453
1
Suivre
1237
Abonnés

Aperçu

Cette stratégie utilise une courbe secondaire correspondant aux hauts et aux bas de la ligne K pour former un signal de transaction. Lorsque le prix réel franchit la courbe correspondante, un signal d’achat et de vente est généré. La stratégie tente d’identifier les principaux supports et résistances avec un modèle mathématique pour effectuer des transactions de rupture.

Principe de stratégie

Les principaux éléments et règles de la stratégie sont les suivants:

  1. Adaptation des hauts et des bas: utilisez la courbe secondaire pour adapter les hauts et les bas de la ligne K.

  2. Signaux d’achat: un signal d’achat est généré lorsque le prix de clôture de la ligne K franchit la courbe de la courbe supérieure.

  3. Signal de vente: produit lorsque le prix de clôture de la ligne K franchit la courbe descendante.

  4. Vérification en N cycles: la nécessité d’une rupture en N cycles pour qu’elle prenne effet, afin d’éviter une fausse rupture.

  5. Signal de plage: il n’y a pas de signal de plage clair, le temps de détention est déterminé par l’optimisation de la rétroaction.

Cette stratégie tente d’identifier les prix critiques par des modèles mathématiques et de s’inscrire à la rupture, ce qui est typique d’un système de rupture.

Analyse des avantages

Les principaux avantages de cette stratégie par rapport à d’autres systèmes de percée sont:

  1. Les modèles mathématiques sont utilisés pour faire des ajustements plus objectifs que les jugements subjectifs.

  2. La méthodologie est innovante, avec une combinaison de techniques de négociation et de modèles statistiques.

  3. La mise en place d’une vérification à cycles multiples permet de filtrer les fausses percées.

  4. L’optimisation de la rétroaction permet de trouver le meilleur moment pour conserver une position.

  5. La réalisation n’est pas difficile et peut être adaptée avec souplesse.

  6. Les modèles sont mis à jour automatiquement et ne nécessitent aucune maintenance.

  7. Les paramètres de robustesse peuvent être vérifiés pour différentes variétés et cycles.

  8. L’apprentissage automatique peut être introduit pour optimiser et valider davantage.

  9. Dans l’ensemble, il y a beaucoup de nouveautés à explorer.

Analyse des risques

Mais cette stratégie comporte aussi les risques suivants:

  1. L’effet d’adaptation dépend de la sélection des paramètres et peut être sur-optimisé.

  2. La courbe d’ajustement est en retard et les pertes ne peuvent pas être complètement évitées.

  3. Il existe un risque de couverture sans tenir compte du volume des transactions.

  4. L’arbitrage statistique est difficile à maintenir à long terme.

  5. Le cycle de rétroaction est court et la robustesse du modèle doit être vérifiée.

  6. L’adaptation environnementale de plusieurs variétés est en cours de test.

  7. Les positions fixes ne peuvent pas être modifiées dynamiquement.

  8. Le taux de rétractation des gains doit être strictement évalué.

Direction d’optimisation

D’après l’analyse ci-dessus, la stratégie pourrait être améliorée dans les domaines suivants:

  1. Test de la robustesse des paramètres dans différents environnements de marché.

  2. L’indicateur de vérification du volume des transactions a été ajouté.

  3. Optimisation de la logique d’entrée et de sortie et amélioration de la qualité du signal.

  4. Créer un modèle de gestion dynamique des positions.

  5. Introduction d’une stratégie de stop-loss pour limiter les pertes.

  6. Optimiser les stratégies de gestion des fonds.

  7. Le défilement de la fenêtre de rétroaction a été validé.

  8. Évaluation de la stabilité des rendements de plusieurs variétés.

  9. L’optimisation des modèles par l’apprentissage automatique.

Résumer

L’ensemble de la stratégie a une certaine valeur d’innovation et d’expérimentation. Cependant, la stabilité des bénéfices à long terme de Statistical Arbitrage reste à l’épreuve.

Code source de la stratégie
/*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)