Screener Détection Figure Tasse et Anse
Forums › ProRealTime forum Français › Support ProScreener › Screener Détection Figure Tasse et Anse
- This topic has 66 replies, 8 voices, and was last updated 3 years ago by deletedaccount210122.
Tagged: Cup, Cup & Handle, Handle
-
-
06/26/2018 at 9:56 PM #7446206/27/2018 at 7:39 PM #74563
Après quelques recherches, l’article (en anglais, sorry !) à l’origine de la programmation de Nicolas est téléchargeable après incription (gratuite) sur : http://technical.traders.com/archive/volume-2014.asp?yr=2011#Apr (Identifying Cup Formations Early)
La lecture de l’article permet de mieux comprendre l’approche de la ‘semi-tasse’.
06/29/2018 at 4:06 PM #74830Bonjour Nicolas,
Pensez-vous pouvoir finir ce super screener et si oui avez-vous une idée de quand cela sera disponible ?
Merci d’avance ;
07/01/2018 at 11:29 AM #74993Je trouve ce code pas mal du tout !
Il donne de nombreuse possibilité de formation de tasse avec hanse sur le plan visuel.
Mais il serai encore mieux si il pouvait les trier les valeurs avec un fort momentum ( tendance haussière) sur les 18 mois précédente la formation de la hanse.
Formation tasse1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950Parameter = 2C = closeFilC = ( log( C ) )eps = 0.0000000001for i = 1 to barindex doif c[i]>c*parameter thenBarsSince=barindex-barindex[i]breakendifnextsemicupperiod = Max( BarsSince, 1 ) + 1Ptop = highest[Semicupperiod](FilC)Pbot = lowest[Semicupperiod](FilC)boxheight = abs( Ptop - Pbot ) / 5boxlength = Max( round( semicupperiod / 5 ), 1 )bar = max(1,barindex)b0 = bar - semicupperiod + 1b5 = barb1 = Min( b0 + boxlength, b5 )b2 = Min( b1 + boxlength, b5 )b3 = Min( b2 + boxlength, b5 )b4 = Min( b3 + boxlength, b5 )L2 = Pbot + 2 * boxheightL3 = Pbot + 3 * boxheightDiff = FilC - FilC[1]UpSum2 = Summation[2*boxlength]( Max( Diff, 0 ) )DnSum2 = Summation[2*boxlength]( Max( -Diff, 0 ) )DSX1 = abs( UpSum2 - DnSum2 ) / ( eps + UpSum2 + DnSum2 ) * 100UpSum3 = Summation[3*boxlength]( Max( Diff, 0 ) )DnSum3 = Summation[3*boxlength]( Max( -Diff, 0 ) )DSX2 = abs( UpSum3 - DnSum3 ) / ( eps + UpSum3 + DnSum3 ) * 100if(bar>b2) thentest1=summation[bar-b2](FilC>L3)=0endifif(bar>b4) thentest2=summation[bar-b4](FilC>L2)=0endifisSemicup = ( semicupperiod >= 20 ) AND ( DSX1[ b5 - b2] > 25 ) AND ( DSX2 < 25 ) AND test1 and test2LIS = isSemicupscreener[lis]ayant très peu de notion en programmation est ce que quelqu’un pourrai m’aider a aboutir mon idée ?
Merci d’avance
07/01/2018 at 3:18 PM #75006Je trouve ce code pas mal du tout !
Il donne de nombreuse possibilité de formation de tasse avec hanse sur le plan visuel.
Mais il serai encore mieux si il pouvait les trier les valeurs avec un fort momentum ( tendance haussière) sur les 18 mois précédente la formation de la hanse.
Formation tasse1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950Parameter = 2C = closeFilC = ( log( C ) )eps = 0.0000000001for i = 1 to barindex doif c[i]>c*parameter thenBarsSince=barindex–barindex[i]breakendifnextsemicupperiod = Max( BarsSince, 1 ) + 1Ptop = highest[Semicupperiod](FilC)Pbot = lowest[Semicupperiod](FilC)boxheight = abs( Ptop – Pbot ) / 5boxlength = Max( round( semicupperiod / 5 ), 1 )bar = max(1,barindex)b0 = bar – semicupperiod + 1b5 = barb1 = Min( b0 + boxlength, b5 )b2 = Min( b1 + boxlength, b5 )b3 = Min( b2 + boxlength, b5 )b4 = Min( b3 + boxlength, b5 )L2 = Pbot + 2 * boxheightL3 = Pbot + 3 * boxheightDiff = FilC – FilC[1]UpSum2 = Summation[2*boxlength]( Max( Diff, 0 ) )DnSum2 = Summation[2*boxlength]( Max( –Diff, 0 ) )DSX1 = abs( UpSum2 – DnSum2 ) / ( eps + UpSum2 + DnSum2 ) * 100UpSum3 = Summation[3*boxlength]( Max( Diff, 0 ) )DnSum3 = Summation[3*boxlength]( Max( –Diff, 0 ) )DSX2 = abs( UpSum3 – DnSum3 ) / ( eps + UpSum3 + DnSum3 ) * 100if(bar>b2) thentest1=summation[bar–b2](FilC>L3)=0endifif(bar>b4) thentest2=summation[bar–b4](FilC>L2)=0endifisSemicup = ( semicupperiod >= 20 ) AND ( DSX1[ b5 – b2] > 25 ) AND ( DSX2 < 25 ) AND test1 and test2LIS = isSemicupscreener[lis]ayant très peu de notion en programmation est ce que quelqu’un pourrai m’aider a aboutir mon idée ?
Merci d’avance
Je trouve ce code pas mal du tout !
Il donne de nombreuse possibilité de formation de tasse avec hanse sur le plan visuel.
Mais il serai encore mieux si il pouvait les trier les valeurs avec un fort momentum ( tendance haussière) sur les 18 mois précédente la formation de la hanse.
Formation tasse1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950Parameter = 2C = closeFilC = ( log( C ) )eps = 0.0000000001for i = 1 to barindex doif c[i]>c*parameter thenBarsSince=barindex–barindex[i]breakendifnextsemicupperiod = Max( BarsSince, 1 ) + 1Ptop = highest[Semicupperiod](FilC)Pbot = lowest[Semicupperiod](FilC)boxheight = abs( Ptop – Pbot ) / 5boxlength = Max( round( semicupperiod / 5 ), 1 )bar = max(1,barindex)b0 = bar – semicupperiod + 1b5 = barb1 = Min( b0 + boxlength, b5 )b2 = Min( b1 + boxlength, b5 )b3 = Min( b2 + boxlength, b5 )b4 = Min( b3 + boxlength, b5 )L2 = Pbot + 2 * boxheightL3 = Pbot + 3 * boxheightDiff = FilC – FilC[1]UpSum2 = Summation[2*boxlength]( Max( Diff, 0 ) )DnSum2 = Summation[2*boxlength]( Max( –Diff, 0 ) )DSX1 = abs( UpSum2 – DnSum2 ) / ( eps + UpSum2 + DnSum2 ) * 100UpSum3 = Summation[3*boxlength]( Max( Diff, 0 ) )DnSum3 = Summation[3*boxlength]( Max( –Diff, 0 ) )DSX2 = abs( UpSum3 – DnSum3 ) / ( eps + UpSum3 + DnSum3 ) * 100if(bar>b2) thentest1=summation[bar–b2](FilC>L3)=0endifif(bar>b4) thentest2=summation[bar–b4](FilC>L2)=0endifisSemicup = ( semicupperiod >= 20 ) AND ( DSX1[ b5 – b2] > 25 ) AND ( DSX2 < 25 ) AND test1 and test2LIS = isSemicupscreener[lis]ayant très peu de notion en programmation est ce que quelqu’un pourrai m’aider a aboutir mon idée ?
Merci d’avance
J’ai rajouté ceci au code, c1 = 2 MM 50 et 20 avec 20 sup a 50
c2 compression du prix a 10 % a la anse ( a la anse peut être)
Pas d’erreurs de syntaxe mais aucun résultat,surement normale vu la rareté des figures?
formation tasse en hebdo avec momumtum sur 70p et compression du prix a la anse12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758mm50 = average[50] (close)mm20 = average[20] (close)c1 = summation[70](mm20>mm50)=70Parameter = 2C = closeFilC = ( log( C ) )eps = 0.0000000001for i = 1 to barindex doif c[i]>c*parameter thenBarsSince=barindex-barindex[i]breakendifnextsemicupperiod = Max( BarsSince, 1 ) + 1Ptop = highest[Semicupperiod](FilC)Pbot = lowest[Semicupperiod](FilC)boxheight = abs( Ptop - Pbot ) / 5boxlength = Max( round( semicupperiod / 5 ), 1 )bar = max(1,barindex)b0 = bar - semicupperiod + 1b5 = barb1 = Min( b0 + boxlength, b5 )b2 = Min( b1 + boxlength, b5 )b3 = Min( b2 + boxlength, b5 )b4 = Min( b3 + boxlength, b5 )L2 = Pbot + 2 * boxheightL3 = Pbot + 3 * boxheightDiff = FilC - FilC[1]UpSum2 = Summation[2*boxlength]( Max( Diff, 0 ) )DnSum2 = Summation[2*boxlength]( Max( -Diff, 0 ) )DSX1 = abs( UpSum2 - DnSum2 ) / ( eps + UpSum2 + DnSum2 ) * 100UpSum3 = Summation[3*boxlength]( Max( Diff, 0 ) )DnSum3 = Summation[3*boxlength]( Max( -Diff, 0 ) )DSX2 = abs( UpSum3 - DnSum3 ) / ( eps + UpSum3 + DnSum3 ) * 100if(bar>b2) thentest1=summation[bar-b2](FilC>L3)=0endifif(bar>b4) thentest2=summation[bar-b4](FilC>L2)=0endifisSemicup = ( semicupperiod >= 20 ) AND ( DSX1[ b5 - b2] > 25 ) AND ( DSX2 < 25 ) AND test1 and test2LIS = isSemicupc2 = (highest [20] (high)-lowest[20](low))<=close*0.10screener[lis and c1 and c2]Suis-je dans le vrai ?
Merci
1 user thanked author for this post.
07/02/2018 at 10:07 AM #75075Merci Mika pour cette contribution ; je la teste de ce pas ;
de mon côté j’ai trouvé au bout de la nuit et au fin fond du web, ce code Amibroker qu’il nous faudrait “PRTiser” ;
On y est presque !!
Merci encore Nicolas pour votre aide ;
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899_SECTION_BEGIN("Cup and Handle exploration");// Cup and Handle exploration written by Jerry Tyliczka// visit us at: http://portals.wallstreettape.com//// This code written per specifications found at// http://www.haikulabs.com/mh.htm// Version 1.0//// This code calculates the Alpha, Delta, Beta and Gamma values// but they are not used in the filter criteria as specified// by the article which this code was based on.//// Look for additional changes as I tweak the below code.// I will also include Scan feature and Backtesting in future release.//// Comments, please write to admin@wallstreettape.comMinPrice=0.1;MinVolume=10000;//Left side of Handle formation can occur anywhere from 2-25days - look at the last 25 bars AND get the number of bars since condition met.LH=HHV(Close,25); // Highest close past 25 days.BLH=HHVBars(Close,25); // Tells us # of bars that have past since high reached. Used to determine Lowest bar.BH=LLV(Close,BLH); // Lowest close since the highest value was reached/BBH=LLVBars(Close,BLH); // number of bars that have past since lowest value.NBLH=BLH-BBH; // this is the number of bars in the formation of the left side handle. NBLH must be atleast 2 to be a valid handle formation.// Now lets get the cup formation. Cup formation can occur anywhere from 23 to 145 days. The left side of the cup can be from 20-120 days AND the right side can be anywhere from 3-25 days.// get the right side of the cup(low).BC=LLV(Close,BLH+25); // look at 25 bars since the left side of handle.BBC=LLVBars(Close,BLH+25);// get the left side of the cup.LC=Ref(HHV(Close,120),BBC*-1);BLC=Ref(HHVBars(Close,120),BBC*-1);// Get highest value before left side of cup started to form.KC=Ref(HHV(Close,30),BLC*-1);BKC=Ref(HHVBars(Close,120),BLC*-1);Delta= LC/KC;//Calculate the up/down relative price value during time frame RC (Right Cup Formation)URPV=DRPV=0;i=EndValue(BLH);j=EndValue(BBC);do{URPV =IIf(Ref(Close,i*-1)>Ref(Close,(i+1)*-1),Ref(Volume,(i*-1))*Ref(Close,(i*-1))-Ref(Close,(i+1)*-1),URPV);DRPV =IIf(Ref(Close,i*-1)<Ref(Close,(i+1)*-1),Ref(Volume,(i*-1))*Ref(Close,(i+1)*-1)-Ref(Close,(i*-1)),DRPV);i++;} while (i<j);Alpha = URPV/DRPV; // Should be >1// Calculate BetaDRPV=0;i=EndValue(BBH);j=EndValue(BLH);do{DRPV =IIf(Ref(Close,i*-1)<Ref(Close,(i+1)*-1),Ref(Volume,(i*-1))*Ref(Close,(i+1)*-1)-Ref(Close,(i*-1)),DRPV);i++;} while (i<j);Beta = URPV/DRPV;Gamma = log(Alpha) + log(Beta) + delta;AddColumn(LH,"Left Handle");AddColumn(BH,"Bottom Handle");AddColumn(BC,"Bottom Cup");AddColumn(LC,"Left Cup");AddColumn(ALPHA,"Alpha");AddColumn(DELTA,"Delta");AddColumn(BETA,"BETA");AddColumn(GAMMA,"Gamma");// Filter Criteria as follows:// 1. Right side of handle must be at least 2 bars. NBHL>2// 2. Bottom of the cup must be lower than the left top of the cup.// 3. Left handle must be lower than or equal to the lect cup formation.// 4. Bottom of the cup must be less than the left handle.// 5. Bottom of the handle must be > 80% of the left handle + 20% of the bottom cup.// 6. Start of cup/handle formation must be greater than precedding chart value. LC>LC// 7. Minimum price and volume you can set any way you like.Filter= NBLH>2 AND Close>BH AND BC<LC AND LH<=LC AND BC<LH AND BH<LH AND BH>.8*LH+.2*BC AND KC<LC AND Close>MinPrice AND MA(Volume,30) > MinVolume;_SECTION_END();07/02/2018 at 10:55 AM #75077Mika, il s’agit plutôt d’un détecteur de demi tasse non ?
Je ne vois pas de tasse et hanse évidents de détectés dans le proscreener ; j’ai testé sur NASDAQ Daily ;
Sur quelle unité de temps le regardez-vous ?
07/02/2018 at 11:50 AM #75084Il s’agit d’une transposition (Amibroker semble-t-il) de l’approche de Rick Martinelli & Barry Hyman (forcément, vu la référence au HaihuLabs).
Elle concerne bien la tasse avec hanse.
Cependant Giorgios Siligardos a une autre approche dont le principe est appliqué dans le code de Nicolas, ce dernier ayant repris quelques figures plus avant dans le post l’illustrant /expliquant.
Pour rappel, j’ai indiqué :
“S’agissant de la ‘tasse’ avec ou sans hanse comme l’écrivait Giorgios Siligardos, ce dernier avait préconisé une approche de détection résumée dans un article payant (3$95…) uniquement disponible sur Traders.com, 026SILI.pdf. J’ai mentionné plus haut le lien vers une résumé (pdf de ppt) de son approche (‘matrice’).”
L’article contient un code Metastock, mais est sujet à droits d’auteurs ; je ne puis donc pas le copier sans autorisation.
07/03/2018 at 8:17 PM #75183De ce que je sais en bourse il n’y a pas de certitude mais une forte/moyenne/faible probabilité.
On ne va pas vous mettre l’argent dans la poches comme tomber du ciel.
Ce n’est pas un détecteur de 1/2 tasse. c’est un code qui a une forte/moyenne/faible probabilité de trier les figures représentant une figure chariste (tasse avec anse).
Il a l’aire d’aller dans se sens.
1 user thanked author for this post.
07/03/2018 at 9:01 PM #75185J’ai commencé à travailler le code fourni par Kris75, pas simple pour le moment. On doit enchaîner les boucles pour simuler les instructions de Amibroker. J’espère pouvoir m’y remettre avant la fin de semaine.
1 user thanked author for this post.
07/04/2018 at 4:09 PM #75224Merci Nicolas.
Ce n’est pas le premier cas qui nous confronte aux limites de la plateforme PRT, en ce qui concerne la pénalisation résultant de programmes utilisant des boucles, tant en temps de traitement, qu’en complexité des ‘work-arounds’.
Je réfléchis actuellement à une approche qui combinerait les deux directions prises dans les articles cités plus haut, à savoir les contraintes de taille de la figure (temps et prix), et la corrélation (simplifiée) basée sur les ‘boites’ temps/prix.
Je teste…mais certainement sans commune mesure avec la maîtrise de Nicolas !
On avance !
1 user thanked author for this post.
07/17/2018 at 6:43 PM #76174Bonjour à tous,
Bon j’ai avancé sur le code avec mon expertise très relative mais j’ai une erreur
“Ce ProScreener n’a pas pu être exécuté : l’une des instructions contient un offset négatif ou trop élevée (ex : low[-1] ou low[300]).
Les valeurs d’offset doivent être des entiers entre 0 et 254. ”Je n’arrive pas à voir d’où cela vient ; quelqu’un aurait-il un idée ??(PI Nicolas est en vacances)
Merci
Chris
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133// Cup and Handle exploration written by Jerry Tyliczka// visit us at: http://portals.wallstreettape.com//// This code written per specifications found at// http://www.haikulabs.com/mh.htm// Version 1.0//// This code calculates the Alpha, Delta, Beta and Gamma values// but they are not used in the filter criteria as specified// by the article which this code was based on.//// Look for additional changes as I tweak the below code.// I will also include Scan feature and Backtesting in future release.//// Comments, please write to admin@wallstreettape.comMinPrice=2.5MinVolume=10000//Left side of Handle formation can occur anywhere from 2-25days - look at the last 25 bars AND get the number of bars since condition met.LH=highest[25](Close) // Highest close past 25 days.BLH=barindex[LH] // Tells us # of bars that have past since high reached. Used to determine Lowest bar.BH=lowest[BLH](Close) // Lowest close since the highest value was reached/BBH=barindex[BH] // number of bars that have past since lowest value.NBLH=BLH-BBH // this is the number of bars in the formation of the left side handle. NBLH must be atleast 2 to be a valid handle formation.// Now lets get the cup formation. Cup formation can occur anywhere from 23 to 145 days. The left side of the cup can be from 20-120 days AND the right side can be anywhere from 3-25 days.// get the right side of the cup(low).BC=lowest[BLH+25](close) // look at 25 bars since the left side of handle.BBC=barindex[BC]// get the left side of the cup.//once LC = 0once BLC =0For index1 = 145 downto BBC doif high[index1]> high[index1-1] thenLC=high[index1]BLC=barindex[LC]elseLC=LCendifNext////// Get highest value before left side of cup started to form.//once KC = 0//once BKC =0For index2 = 205 downto BLC doif high[index2]> high[index2-1] thenKC=high[index2]//BKC=barindex[KC]elseKC=KCendifNext//Delta= LC/KC//////Calculate the up/down relative price value during time frame RC (Right Cup Formation)DRPV=0URPV=DRPVi=BLHj=BBCwhile i<j doIf Close[i] > Close[i+1] thenURPV = Volume[i]*Close[i]- Close[i+1]elseUPRV=UPRVendifIf Close[i] < Close[i+1] thenDRPV = Volume[i]*(Close[i+1]-Close[i])elseDRPV = DRPVendifwendAlpha = URPV/DRPV // Should be >1// Calculate BetaDRPV=0j=BLHk=BBHwhile k<j doIf Close[j]< Close[j+1] thenDRPV = Volume[i]*(Close[i+1]-Close[i])elseDRPV=DRPVendifwendBeta = URPV/DRPVGamma = log(Alpha) + log(Beta) + delta////AddColumn(LH,"Left Handle")//AddColumn(BH,"Bottom Handle")//AddColumn(BC,"Bottom Cup")//AddColumn(LC,"Left Cup")//AddColumn(ALPHA,"Alpha")//AddColumn(DELTA,"Delta")//AddColumn(BETA,"BETA")//AddColumn(GAMMA,"Gamma")// Filter Criteria as follows:// 1. Right side of handle must be at least 2 bars. NBHL>2// 2. Bottom of the cup must be lower than the left top of the cup.// 3. Left handle must be lower than or equal to the lect cup formation.// 4. Bottom of the cup must be less than the left handle.// 5. Bottom of the handle must be > 80% of the left handle + 20% of the bottom cup.// 6. Start of cup/handle formation must be greater than precedding chart value. LC>LC// 7. Minimum price and volume you can set any way you like.Screener [ NBLH>2 AND Close>BH AND BC<LC AND LH<=LC AND BC<LH AND BH<LH AND (BH>0.8*LH+0.2*BC) AND KC<LC AND Close>MinPrice AND average[30](Volume) > MinVolume and alpha > 1 and beta> 1](Gamma as "gamma")07/17/2018 at 7:30 PM #76179Sur les lignes 44 et 59, index1 et index2 arrivent à -1, lorsque la limite zéro est atteinte.
Vous ne pouvez pas faire référence à une bougie <0 ou> 254.1 user thanked author for this post.
07/17/2018 at 11:37 PM #76191Merci Roberto mais que feriez-vous ?
j’ai fait ces changements mais ca ne marche pas non plus ;
123456if high[index1+1]> high[index1] thenLC=high[index1+1]if high[index2+1]> high[index2] thenKC=high[index2+1]J’avoue ne pas comprendre car a priori BBC et BLC lignes 43 et 58 ne sont = 0 !
Merci de vos lumières !!
07/18/2018 at 12:18 AM #76192Une erreur est certainement à la ligne 23, parce que si vous êtes sur le Dax LH aura une valeur autour de 12600 et à la ligne 23, BLH aura une valeur de …. qui sait?!
Et puisque BLH est utilisé plusieurs fois plus tard, l’erreur se propage au reste du code.
Je n’ai pas entré la logique du code, mais je crois que la traduction n’est pas correcte.
À mon avis, il est conseillé d’attendre que Nicolas le remplisse, après quoi il peut être personnalisé.
Pour le traduire correctement (Nicolas a déjà dit que ce n’est pas facile), il faut savoir très bien le langage de programmation original et celui de ProRealTime!Attendez que Nicolas revienne de vacances, alors son esprit sera en pleine forme!
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on