croisement mme
Forums › ProRealTime forum Français › Support ProBuilder › croisement mme
- This topic has 18 replies, 2 voices, and was last updated 3 years ago by JC_Bywan.
-
-
09/12/2021 at 9:00 AM #177273
ok, pour avoir toutes les permutations possibles si on ne veut pas un état permanent tant qu’on a 4 fois A> 4 autres, il aurait fallu faire 3 fois > et une fois cross over, mais en attribuant le cross over tour à tour à chacune des 4mme, et avec un or pour les les 4 groupes de4 conditions. Mais c’est un peu lourd en écriture, une possibilité plus légère pour tenir compte de tous les cas est la suivante:
1234567891011121314151617181920212223242526272829303132333435A=exponentialaverage[20]B=exponentialaverage[50]C=exponentialaverage[100]D=exponentialaverage[200]E=exponentialaverage[300]action=0// croisement à la hausse 20 avec toute les mm expcondition1=A > Bcondition2=A > Ccondition3=A > Dcondition4=A > E//croisement à la baisse 20 toute les moyennes mobiles expcondition7=A < Bcondition8=A < Dcondition9=A < Ccondition10=A < Ecrit1=condition1 and condition2 and condition3 and condition4crit2=condition7 and condition8 and condition9 and condition10if crit1 and not crit1[1] thenaction=1if action=1 thendrawarrowup( barindex,2*low–high) coloured(0,191,255)endifelsif crit2 and not crit2[1] thenaction=–1if action=–1 thendrawarrowdown(barindex,2*high–low) coloured(255,69,0)endifendifreturn//return actionJ’y ai au passage positionné les flèches au même x = barindex bien sûr, mais avec une ordonnée y compatible avec n’importe quel actif (alors que y=+/-action va mettre la flèche à hauteur +/-1 ce qui est un peu bas sur un graphe CAC40 ou DAX30 par exemple.
Si on veut les flèches sur le graphe, il ne faut plus faire un “return action” mais juste un “return”, et ajouter l’indicateur à la fenêtre du prix (via la petite clé à molette immédiatement à droite du titre “prix” au coin supérieur gauche de la fenêtre) plutôt qu’en fenêtre séparée sous le prix.
Si par contre on préfère garder l’indicateur sous le prix en fenêtre séparée pour voir “action” à +/-1, alors il faut garder la ligne “return action” et supprimer le “return” seul. Mais on ne peut pas simultanément avoir un indicateur en fenêtre séparée qui sait mettre la flèche sur le prix, c’est ou l’un ou l’autre (ou alors il faut faire tourner 2 versions de l’indicateur, à la fois une en fenêtre séparée avec “return action” sans flèche, et une sur la fenêtre prix avec “return” et les flèches)
Bonjour et merci pour vos indications qui simplifient le code de ces permutations.
Dans un registre similaire, je cherche à coder en langage PRT l’algorithme de Heap sur les permutations (n parmi n) en numérotant les conditions de départ (dans votre code ci-dessus A,B,C,D,E) dans un tableau ($COND) ce qui permettrait aisément de les faire varier. Ainsi, l’ensemble des permutations se retrouverait dans un nouveau tableau sous forme d’un nombre “concaténant” les chiffres résultant de chaque permutation, exemple : chiffres 1,2,3,4,5 -> 12345, etc…
Le langage à priori qui me semble le plus proche de PRT serait : “Microsoft Small Basic” trouvé ici :
https://rosettacode.org/wiki/Permutations#Microsoft_Small_BasicEst-ce transposable facilement en langage PRT ?
Merci d’avance pour votre réponse
Philippe————————————-
‘Permutations – sb
n=4
printem = “True”
For i = 1 To n
p[i] = i
EndFor
count = 0
Last = “False”
While Last = “False”
If printem Then
For t = 1 To n
TextWindow.Write(p[t])
EndFor
TextWindow.WriteLine(“”)
EndIf
count = count + 1
Last = “True”
i = n – 1
While i > 0
If p[i] < p[i + 1] Then
Last = “False”
Goto exitwhile
EndIf
i = i – 1
EndWhile
exitwhile:
j = i + 1
k = n
While j < k
t = p[j]
p[j] = p[k]
p[k] = t
j = j + 1
k = k – 1
EndWhile
j = n
While p[j] > p[i]
j = j – 1
EndWhile
j = j + 109/12/2021 at 10:33 AM #177277Voici le code que j’ai traduit vers le langage PRT, il ne fonctionne pas, j’ai du manquer quelque chose…
Des suggestions ?
Merci d’avanceHeap Permutation test1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162Defparam drawonlastbaronly=truen=4printem = 1For i = 1 To n$p[i] = iNextcount = 0Last = 0While Last = 0If printem ThenFor t = 1 To n//TextWindow.Write(p[t])Imprim = $p[t]drawtext("#Imprim#",barindex,t)Next // For t = 1 To n//TextWindow.WriteLine("")drawtext(":",barindex,t)EndIf // If printem Thencount = count + 1Last = 1i = n - 1While i > 0If $p[i] < $p[i + 1] ThenLast = 0i = 0// rajout par MOIBreak // Goto exitwhileEndIf // If $p[i] < $p[i + 1]i = i - 1Wend // While i > 0Last = -1 // Rajout par MOIBreak // exitwhile:j = i + 1k = nWhile j < kt = $p[j]$p[j] = $p[k]$p[k] = tj = j + 1k = k - 1Wend // While j < kj = nWhile $p[j] > $p[i]j = j - 1Wend // While $p[j] > $p[i]j = j + 1t = $p[i]$p[i] = $p[j]$p[j] = tWend//TextWindow.WriteLine("Number of permutations: "+count)drawtext("Count = #count#",barindex,-1)Return 0,2509/12/2021 at 1:42 PM #1773082e essai à partir du Free Basic du même site = résultat boucle sans fin ….
Les suggestions sont bienvenues 🙂Heap v21234567891011121314151617181920212223242526272829303132333435363738394041424344454647Defparam drawonlastbaronly=trueif barindex = 2 thencount = 1n=3For j = 0 To n -1$a[j] = J+1$c[j] = 0Calc = $a[j]drawtext("#Calc#",barindex,Calc)Nextdrawtext("--",barindex,-1)i = 0While i < nIf $c[i] < i ThenIf i = 0 Then//(i And 1) = 0 Thentemp = $a[0]$a[0] = $a[i]$a[i] = tempElsealpha = $c[i]temp = $a[alpha]$a[alpha] = $a[i]$a[i] = tempEndIfFor j = 0 To n -1Calc = $a[j]drawtext("#Calc#",barindex,Calc)Nextcount = count + 1If count = 12 Then //A VOIR SELON N et N!drawtext("Count = #count#",barindex,-1)count = 0ElseCalc = $c[i]drawtext("---#",barindex,Calc)EndIf$c[i] = $c[i] = 1i = 0Else$c[i] = 0i = i + 1EndIfWendEndif//if barindex = 1Return 0,1209/14/2021 at 2:32 PM #177556Bonjour,
algorithme de Heap pour PRT:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768Defparam drawonlastbaronly=trueif islastbarupdate then // juste pour éviter de refaire plusieurs fois le calcul sur chaque bougie de l'historique,n=4printem = 1For i = 1 To n$p[i] = iNextcount = 0Last = 0While Last = 0If printem ThenFor t = 1 To n//TextWindow.Write(p[t])Imprim = $p[t]drawtext("#Imprim#",barindex+t,count+1) // modifié pour afficher horizontalement chaque permutation comme dans le lien du site rosettacodeNext // For t = 1 To n//TextWindow.WriteLine("")//drawtext(":",barindex,t)EndIf // If printem Thencount = count + 1Last = 1i = n - 1While i > 0If $p[i] < $p[i + 1] ThenLast = 0//i = 0// rajout par MOI // enlevéBreak // Goto exitwhileEndIf // If $p[i] < $p[i + 1]i = i - 1Wend // While i > 0//Last = -1 // Rajout par MOI // enlevé//Break // exitwhile: // enlevéj = i + 1k = nWhile j < kt = $p[j]$p[j] = $p[k]$p[k] = tj = j + 1k = k - 1Wend // While j < kj = nWhile $p[j] > $p[i]j = j - 1Wend // While $p[j] > $p[i]j = j + 1t = $p[i]$p[i] = $p[j]$p[j] = tWend //While Last = 0//TextWindow.WriteLine("Number of permutations: "+count)drawtext("Count = #count#",barindex,-1)endif//modifReturn 0,251 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on