Stratégie de marche aléatoire

Auteur:ChaoZhang est là., Date: 2023-10-09 16:10:24 Je suis désolé
Les étiquettes:

Résumé

La stratégie de marche aléatoire est une stratégie de trading automatisée basée sur la génération de nombres aléatoires. Elle utilise un générateur de congruences linéaires pour générer des nombres aléatoires basés sur un ensemble de graines.

La logique de la stratégie

Les principales parties de la mise en œuvre du trading aléatoire sont:

  1. Définir les paramètres a, c et le module m pour la génération de nombres aléatoires, ainsi que la graine initiale.

  2. Définissez la fonction de génération de nombres aléatoires GetRandom en utilisant l'algorithme de congruence linéaire pour générer des nombres aléatoires entre 0-m.

  3. Sur chaque chandelier, s'il n'y a pas de position, comparez la taille des nombres aléatoires générés, allez longs quand ils sont supérieurs à m/2, sinon allez courts.

  4. Définissez les conditions de stop loss et de profit en pourcentage.

  5. Définir la période de backtest par échéance.

Grâce aux étapes ci-dessus, la stratégie réalise des opérations longues / courtes totalement aléatoires. Lorsque le nombre aléatoire est supérieur à m / 2, elle ouvre une position longue, sinon elle ouvre une position courte, puis définit un stop loss et un profit pour les positions de sortie.

Analyse des avantages

  • Une logique stratégique simple et claire, facile à comprendre et à mettre en œuvre.

  • Le trading aléatoire évite efficacement les impacts émotionnels et réduit les erreurs subjectives.

  • Paramètres de génération de nombres aléatoires personnalisables pour ajuster le hasard.

  • Les paramètres de stop-loss et de prise de profit flexibles permettent de contrôler les profits/pertes uniques.

  • Prend en charge l'optimisation des paramètres par le backtesting de l'impact des différents paramètres sur le bénéfice total.

Analyse des risques

  • Les transactions aléatoires peuvent entraîner une tendance à long terme indéfinie et une rentabilité incertaine.

  • L'incapacité à ajuster les positions en fonction des conditions du marché pourrait faire perdre des opportunités de tendance.

  • Résultat unique limité, risque de retrait élevé.

  • Besoin d'un ratio stop loss/take profit raisonnable pour éviter des pertes importantes.

  • Les positions ouvertes/fermées fréquentes dues au hasard augmentent les coûts de négociation.

  • Des tests antérieurs suffisants sont nécessaires pour vérifier les paramètres raisonnables, ne pas utiliser à l'aveugle.

Les risques pourraient être réduits en ajoutant un jugement de tendance, en optimisant le mécanisme de stop-loss, en contrôlant strictement un seul profit/perte, etc.

Directions d'amélioration

  • Ajoutez le jugement de tendance pour éviter de négocier contre tendance.

  • Ajouter la taille des positions basée sur la variation du capital.

  • Optimisez l'algorithme de génération de nombres aléatoires pour une meilleure aléativité.

  • Pourcentage dynamique stop loss/take profit.

  • Limitez la fréquence des ordres.

  • Optimisation des tests de retour à plusieurs paramètres.

Résumé

La stratégie de marche aléatoire réalise le trading mécanique par le biais d'un long/short contrôlé par des nombres aléatoires. Elle a une forte aléativité et évite les impacts émotionnels et les dysfonctionnements subjectifs. Mais les entrées aléatoires peuvent également manquer des opportunités de tendance, un profit unique limité, nécessite des mécanismes de contrôle des risques optimisés. Dans l'ensemble, la stratégie convient à la vérification des idées de trading, à l'évaluation des impacts des paramètres, mais une évaluation minutieuse est nécessaire pour une utilisation pratique.


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

a = 16
c = 10
m = 1000
GetRandom(prev) =>
    GetRandom = (a * prev + c) % m

seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")


curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
    if (curRandom >= m / 2)
        strategy.entry("Enter", strategy.long)
    else
        strategy.entry("Enter", strategy.short)
        
    strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)            

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

Plus de