Verifier la proximité de prix avec des niveaux clefs

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #226214 quote
    Jerome888
    Participant
    Average

    Bonjour,

    Comment vous y prendriez-vous pour verifier rapidement le niveau clef le plus proche dans un rayon de 50 points par exemple parmis une liste de niveaux clefs comme les niveaux symboliques (1000, 250…) ? Le but final est de “ne pas indiquer de signal” dans le cas où nous somme trop proche du prochain niveau.

    Si j’exécute le code ci-dessous en backtests tick par tick, son exécution est extrêment longue… je suppose alors que c’est l’utilisation du tableau qui en est la cause ? Dans cet exemple, il y a les niveaux clefs syboliques mais aussi la place (en indices 2 et3) pour les niveaux MM200 et VWAP.

    Auriez-vous en tête une autre approche (qu’un tableau ?) afin d’optimiser les temps de calcul (ici insoutenables en back test 100 kUnités)) ?

    Merci

     

    DEFPARAM DRAWONLASTBARONLY = false
    
    if intradaybarindex=0 then
    // par niveau d'importance
    $KeyLevels[0] = 1000
    $KeyLevels[1] = 250
    $KeyLevels[2] = 0
    $KeyLevels[3] = 0
    $KeyLevels[4] = 100
    $KeyLevels[5] = 50
    //$KeyLevels[6] = 25
    endif
    
    
    $KeyLevels[2]=pSMA200
    $KeyLevels[3]=pVWAP
    
    nearestLevel = -1
    nearestLevelIndex=-1
    minDiff = 50
    
    FOR i = 0 TO LastSet($KeyLevels) DO
    level = $KeyLevels[i]
    if i=2 or i=3  then
    calculatedLevel=$KeyLevels[i]
    else
    calculatedLevel = floor(pQuote / level)*level + level
    endif
    diff = calculatedLevel - pQuote
    IF diff >= 0 AND diff <= minDiff THEN
    minDiff=diff
    nearestLevel = calculatedLevel
    nearestLevelIndex=i
    BREAK
    ENDIF
    NEXT
    return nearestLevel, nearestLevelIndex
    
    #226983 quote
    Nicolas
    Keymaster
    Master

    Pour optimiser ton code et réduire le temps d’exécution lors des backtests, voici quelques astuces :

    1. Utiliser des Variables Simples Plutôt qu’un Tableau : Si les niveaux clés ne changent pas fréquemment, tu peux les définir comme des variables individuelles plutôt que de les stocker dans un tableau. Cela peut réduire le temps de calcul, car l’accès aux éléments d’un tableau est généralement plus lent que l’accès à des variables simples.
    2. Optimiser la Boucle FOR : Ta boucle FOR parcourt tous les éléments du tableau à chaque tick. Si tu peux déterminer à l’avance quels niveaux sont susceptibles d’être les plus proches, tu peux réduire le nombre d’itérations de la boucle.
    3. Utiliser des Instructions Conditionnelles Efficaces : Si tu as des conditions qui peuvent éliminer rapidement des cas non pertinents, place-les au début de ta boucle pour éviter des calculs inutiles.

    Voici une version optimisée de ton code : (non testé)

     

    DEFPARAM DRAWONLASTBARONLY = false
    
    // Définir les niveaux clés en tant que variables
    keyLevel1 = 1000
    keyLevel2 = 250
    // Les niveaux dynamiques sont mis à jour à chaque barre
    keyLevel3 = pSMA200
    keyLevel4 = pVWAP
    keyLevel5 = 100
    keyLevel6 = 50
    
    nearestLevel = -1
    nearestLevelIndex = -1
    minDiff = 50
    
    // Boucle optimisée pour vérifier les niveaux clés
    FOR i = 1 TO 6 DO
        level = -1
        IF i = 1 THEN
            level = keyLevel1
        ELSIF i = 2 THEN
            level = keyLevel2
        ELSIF i = 3 THEN
            level = keyLevel3
        ELSIF i = 4 THEN
            level = keyLevel4
        ELSIF i = 5 THEN
            level = keyLevel5
        ELSIF i = 6 THEN
            level = keyLevel6
        ENDIF
    
        diff = level - pQuote
        IF diff >= 0 AND diff <= minDiff THEN
            minDiff = diff
            nearestLevel = level
            nearestLevelIndex = i
            BREAK
        ENDIF
    NEXT
    
    return nearestLevel, nearestLevelIndex
    
    Jerome888 thanked this post
    #227057 quote
    Jerome888
    Participant
    Average

    Merci Nicolas.

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.

Verifier la proximité de prix avec des niveaux clefs


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Jerome888 @jerome888 Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by Jerome888
2 years ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 01/11/2024
Status: Active
Attachments: No files
Logo Logo
Loading...