Comment ajouter une couleur verte rouge sur l'histogramme?
Résultats de 1 é 6 sur 6

Sujet : Comment ajouter une couleur verte rouge sur l'histogramme?

  1. #1
    1 Pi?ce (s) jointe (s) Bonjour les amis,

    Je ne suis pas un codeur expert et confonds sur la fa?on d'ajouter de la couleur verte pour l'histogramme positif et la couleur rouge pour l'histogramme n?gatif sur cet indieur.


    Le code de l'indieur:
    Code ins?r?/ --------------------------------------------- --------------------- /| CandleAverage_v1.mq4 |/| Copyright ? 2006, Forex-TSD.com |/| ??crit par IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/ ----------------------------------------------- ------------------- copyright #property Copyright ? 2006, Forex-TSD.com #property lien http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 1 #property indior_color1 DeepSkyBlue/---- param?tres d'entr?e extern int Longueur = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/---- buffers double CandleAvg # 91; # 93 ;; double BarValue # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Fonction d'initialisation d'indieur personnalis? |/ ----------------------------------------------- ------------------- int init () {//---- indieurs IndiorBuffers (2); SetIndexStyle (0, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvg); SetIndexBuffer (1, BarValue);/---- nom pour DataWindow et indieur subwindow label cha?ne nom_br?ve = CandleAverage ( Length ); IndiorShortName (nom abr?g?); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, Length);/---- return (0); }/ ---------------------------------------------- -------------------- /| Fonction d'it?ration d'indieur personnalis? |/ ----------------------------------------------- ------------------- int d?but () {int d?calage, limite, counted_bars = IndiorCounted (); double UpDel, DnDel, H, L, C;/---- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limite = Bars-Longueur-1;/---- la derni?re barre compt?e sera recompt?e si (counted_barsgt; 0) limit = Bars-counted_bars; limite--; pour (shift = limite; shiftgt; = 0; shift--) {H = iMA (NULL, 0, H_p?riode, 0, MODE_EMA, PRICE_HIGH, shift); L = iMA (NULL, 0, L_p?riode, 0, MODE_EMA, PRICE_LOW, shift); C = iMA (NULL, 0, C_p?riode, 0, MODE_EMA, PRICE_CLOSE, shift); UpDel = H - C; DnDel = C - L; si (UpDel lt; DnDel) BarValue # 91, d?calage # 93; = 1; if (UpDel gt; DnDel) BarValue # 91; d?calage # 93; = -1; if (UpDel == DnDel) BarValue # 91; d?calage # 93; = 0; } pour (shift = limite; shiftgt; = 0; shift--) {CandleAvg # 91; shift # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, d?calage); }/---- return (0); }/ ---------------------------------------------- -------------------- J'ai essay? de changer le code comme ci-dessous:

    Code ins?r? #property indior_separate_window #property indior_buffers 2 #property indior_color1 DeepSkyBlue #property indior_color2 Rouge Mais ne fonctionnait pas car la valeur de l'histogramme n'?tait stock?e que dans 1 tampon, CandleAvg.

    Comment s?parer la valeur positive et n?gative du tampon CandleAvg et ajouter une couleur verte rouge?

    Veuillez nous conseiller

    Merci pour l'aide.






  2. #2
    ajoutez deux tampons suppl?mentaires: CandleAvgPlus [] et CandleAvgMinus [] et d?finissez les deux sur vide. Utilisez ensuite une instruction if dans une boucle for pour remplir ces deux nouveaux tampons. If (CandleAvg [i] gt; = somenumber) CandleAvgPlus [i] = CandleAvg [i]; si (CandleAvg [i] lt; somenumber) CandleAvgMinus [i] = CandleAvg [i]; Maintenant, il suffit de tracer CandleAvgPlus et CandleAvgMinus au lieu de CandleAve ?videmment les d?clarer correctement et les initialiser correctement, mais c'est la technique pour les s?parer sans moi r?ellement ?crire le code pour vous ci-dessous. Sur une autre note, j'ai appris la plupart de mon code juste en regardant le code des autres. Dans ce cas, un fichier mq4 sur la couleur MACD montrerait le tout pour vous

  3. #3

    Citation Envoy? par ;
    ajoutez deux tampons suppl?mentaires: CandleAvgPlus [] et CandleAvgMinus [] et d?finissez les deux sur vide. Utilisez ensuite une instruction if dans une boucle for pour remplir ces deux nouveaux tampons. If (CandleAvg [i] gt; = somenumber) CandleAvgPlus [i] = CandleAvg [i]; si (CandleAvg [i] lt; somenumber) CandleAvgMinus [i] = CandleAvg [i]; Maintenant, il suffit de tracer CandleAvgPlus et CandleAvgMinus au lieu de CandleAve ?videmment les d?clarer correctement et les initialiser correctement, mais c'est la technique pour les s?parer sans moi r?ellement ?crire le code pour vous ci-dessous. Sur une autre note, j'ai appris le plus ...
    Merci pour l'aide flyer415. Merci aussi pour votre volont? de r??crire le code pour moi mais je pr?f?re r??crire tout seul et en tirer des le?ons. Je suis tr?s nouveau sur le codage MQL et j'ai encore besoin d'apprendre beaucoup. J'ai essay? de suivre votre conseil et de modifier le code mais cela n'a pas fonctionn?. J'ai essay? pendant des heures et je ne sais pas pourquoi ?a ne marche pas. Code ins?r?/ --------------------------------------------- --------------------- /| CandleAverage_v1.mq4 |/| Copyright ? 2006, Forex-TSD.com |/| ??crit par IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/ ----------------------------------------------- ------------------- copyright #property Copyright ? 2006, Forex-TSD.com #property lien http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 4 #property indior_color1 DeepSkyBlue #property indior_color3 Vert #property indior_color4 Rouge/---- param?tres d'entr?e extern int Longueur = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/---- buffers double CandleAvg # 91; # 93 ;; double BarValue # 91; # 93 ;; double CandleAvgPlus # 91; # 93 ;; double CandleAvgMinus # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Fonction d'initialisation d'indieur personnalis? |/ ----------------------------------------------- ------------------- int init () {//---- indieurs IndiorBuffers (4); SetIndexStyle (0, DRAW_NONE); SetIndexStyle (1, DRAW_NONE); SetIndexStyle (2, DRAW_HISTOGRAM); SetIndexStyle (3, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvg); SetIndexBuffer (1, BarValue); SetIndexBuffer (2, CandleAvgPlus); SetIndexBuffer (3, CandleAvgMinus);/---- nom pour DataWindow et indieur subwindow label cha?ne nom_br?ve = CandleAverage ( Length ); IndiorShortName (nom abr?g?); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, Length);/---- return (0); }/ ---------------------------------------------- -------------------- /| Fonction d'it?ration d'indieur personnalis? |/ ----------------------------------------------- ------------------- int d?but () {int d?calage, limite, counted_bars = IndiorCounted (); double UpDel, DnDel, H, L, C;/---- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limite = Bars-Longueur-1;/---- la derni?re barre compt?e sera recompt?e si (counted_barsgt; 0) limit = Bars-counted_bars; limite--; pour (shift = limite; shiftgt; = 0; shift--) {H = iMA (NULL, 0, H_p?riode, 0, MODE_EMA, PRICE_HIGH, shift); L = iMA (NULL, 0, L_p?riode, 0, MODE_EMA, PRICE_LOW, shift); C = iMA (NULL, 0, C_p?riode, 0, MODE_EMA, PRICE_CLOSE, shift); UpDel = H - C; DnDel = C - L; if (CandleAvg # 91; Maj # 93; gt; = UpDel) CandleAvgPlus # 91; Maj # 93; = CandleAvg # 91, shift # 93 ;;si (CandleAvg # 91; shift # 93; lt; DnDel) CandleAvgMinus # 91; Maj # 93; = CandleAvg # 91, shift # 93 ;; si (UpDel lt; DnDel) BarValue # 91, d?calage # 93; = 1; if (UpDel gt; DnDel) BarValue # 91; d?calage # 93; = -1; if (UpDel == DnDel) BarValue # 91; d?calage # 93; = 0; } pour (shift = limite; shiftgt; = 0; shift--) {CandleAvgPlus # 91; shift # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, d?calage); CandleAvgMinus # 91; Maj # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, d?calage); }/---- return (0); }/ ---------------------------------------------- -------------------- S'il vous pla?t aider.

  4. #4
    Revenez ? votre code d'origine. Vous devez permettre ? l'indieur de calculer le CandleAve [] comme d'habitude, puis vous s?parez les valeurs en positif et n?gatif. Donc votre premi?re boucle fait un tas de calcs puis votre seconde boucle remplit CandleAve []. Vous n'avez pas besoin de changer ces boucles du tout. Maintenant, nous devons cr?er un troisi?me pour la boucle juste avant l'instruction de retour. Ce troisi?me pour la boucle utilisera if statements. Fondamentalement si CandleAve [i] gt; = 0 alors CandleAvePlus [i] = CandleAve [i] autre CandleAveMinus [i] = CandleAve [i]. Fondamentalement, pour coder les couleurs, nous voulons fondamentalement cr?er les tampons d'indieurs selon la norme, puis juste avant la fonction de retour, nous les s?parons. Pour moi, le codage couleur est la derni?re ?tape d'un indieur. Juste un point mineur, mais comme vous tracez CandleAvePlus et CandleAveMinus, ils devraient ?tre indieursbuffers 0 et 1. C'est toujours mieux comme ?a sinon vous obtenez des num?ros m?lang?s etc. Et je remplis les deux nouveaux tampons avec des valeurs vides afin qu'ils tracent bien.

  5. #5
    [quote = wieb; 3232106] Enfin cela fonctionne parfaitement. Merci beaucoup pour votre gentillesse et votre patient qui m'a enseign?. D?sol? si je suis si b?te et lent ? apprendre le code MQL de vous. Encore une fois merci. pour (shift = limite; shiftgt; = 0; shift--) {CandleAvg [d?calage] = iMAOnArray (BarValue, 0, longueur, 0, MODE_SMA, shift);* vous pouvez mettre le code ici et enregistrer une boucle si (CandleAvg [shift] gt; = 0) CandleAvgPlus [shift] = CandleAvg [shift]; if (CandleAvg [d?calage] lt; 0) CandleAvgMinus [d?calage] = CandleAvg [d?calage]; *} J'ai appris des autres, pos? des questions et regard? le code. Vous pouvez vous en d?barrasser d'une boucle comme indiqu? dans le code en gras. Content que cela fonctionne. Maintenant vous pouvez faire n'importe quel indieur multicolore car c'est le m?me concept.

  6. #6

    Citation Envoy? par ;
    Revenez ? votre code d'origine ....
    Finalement cela fonctionne parfaitement. Merci beaucoup flyer415 pour votre gentillesse et votre patient qui m'a enseign?. D?sol? si je suis si b?te et lent ? apprendre le code MQL de vous. Encore une fois merci. Voici le code modifi?: Code ins?r?/ --------------------------------------- --------------------------- /| CandleAverage_v1.mq4 |/| Copyright ? 2006, Forex-TSD.com |/| ??crit par IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/ ----------------------------------------------- ------------------- copyright #property Copyright ? 2006, Forex-TSD.com #property lien http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 4 #property indior_color1 Vert #property indior_color2 Rouge/---- Param?tres d'entr?e extern int Longueur = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/---- buffers double CandleAvgPlus # 91; # 93 ;; double CandleAvgMinus # 91; # 93 ;; double CandleAvg # 91; # 93 ;; double BarValue # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Fonction d'initialisation d'indieur personnalis? |/ ----------------------------------------------- ------------------- int init () {//---- indieurs IndiorBuffers (4); SetIndexStyle (0, DRAW_HISTOGRAM); SetIndexStyle (1, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvgPlus); SetIndexBuffer (1, CandleAvgMinus); SetIndexBuffer (2, CandleAvg); SetIndexBuffer (3, BarValue);/---- nom pour DataWindow et indieur subwindow label cha?ne nom_br?ve = CandleAverage ( Length ); IndiorShortName (nom abr?g?); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, Length);/---- return (0); }/ ---------------------------------------------- -------------------- /| Fonction d'it?ration d'indieur personnalis? |/ ----------------------------------------------- ------------------- int d?but () {int d?calage, limite, counted_bars = IndiorCounted (); double UpDel, DnDel, H, L, C;/---- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limite = Bars-Longueur-1;/---- la derni?re barre compt?e sera recompt?e si (counted_barsgt; 0) limit = Bars-counted_bars; limite--; pour (shift = limite; shiftgt; = 0; shift--) {H = iMA (NULL, 0, H_p?riode, 0, MODE_EMA, PRICE_HIGH, shift); L = iMA (NULL, 0, L_p?riode, 0, MODE_EMA, PRICE_LOW, shift); C = iMA (NULL, 0, C_p?riode, 0, MODE_EMA, PRICE_CLOSE, shift); UpDel = H - C; DnDel = C - L; si (UpDel lt; DnDel) BarValue # 91, d?calage # 93; = 1; if (UpDel gt; DnDel) BarValue # 91; d?calage # 93; = -1; if (UpDel == DnDel) BarValue # 91; d?calage # 93; = 0; } pour (shift = limite; shiftgt; = 0; shift--) {CandleAvg # 91; shift # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, d?calage);} pour (shift = limite; shiftgt; = 0; shift--) {if (CandleAvg # 91; d?calage # 93; gt; = 0) CandleAvgPlus # 91; shift # 93; = CandleAvg # 91, shift # 93 ;; if (CandleAvg # 91; shift # 93; lt; 0) CandleAvgMinus # 91; Maj # 93; = CandleAvg # 91, shift # 93 ;; }/---- return (0); }/ ---------------------------------------------- --------------------

Régles des messages

  • Vous ne pouvez pas cr?er de sujets
  • Vous ne pouvez pas r?pondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas ?diter vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Désactivé
  • Le code HTML est Désactivé
Le site d'sundytrading utilise des cookies
Le site d'sundytrading utilise des cookies pour vous assurer la meilleure expérience sur notre site ; certains sont déjà effectifs. Vous pouvez consulter plus de détails sur leurs usages ici. Veuillez cliquer sur le bouton à droite pour accepter nos cookies. Si vous continuez à utiliser le site internet d???sundytrading, nous considérerons que vous acceptez nos cookies.