Pour les utilisateurs de la plateforme cTrader (je l'utilise personnellement pour mon compte démo avant de passer en réel sur ProRealTime), vous avez dû remarquer que l'indicateur Ichimoku Kinko Hyo fourni par la plateforme ne permet pas de modifier la couleur du Kumo (nuage) indépendamment de la SSA et SSB. Effectivement si vous choisissez par exemple la couleur Orange dans les paramètres de votre SSA, le Kumo "Haussier" sera Orange transparent, bleu ce sera bleu transparent etc..
Un peu frustré de ne pas pouvoir changer les couleurs du nuage indépendamment des lignes (comme sur l'excellent ProRealTime..), je me suis penché sur le code source de l'indicateur, et ai "bidouillé" un truc, mais qui fonctionne très bien!
Avec ce code, vous pourrez donc changer tous les paramètres habituels, les périodes, les couleurs et épaisseur de chaque ligne etc.. mais aussi maintenant celles du nuage indépendament (et l’opacité également !).
Dans les paramètres, j’ai appeler le nuage haussier : « KumoUp » et le nuage baissier : « KumoDown »)
La « bidouille » que j’ai faite dans le code pour y arriver, c’est de dupliquer la SSA et SSB et de les afficher devant le nuage Kumo initital. Ce qui fait que la couleur des SSA et SSB nouvellement créées viennent se superposer devant celles d’origine et couvrir leur couleur… Oui c’est de la bidouille, mais à ma connaissance il n’y avait pas d’autre solution sur cTrader ! (d'ailleurs vous pourrez remarquer cette superposition, si vous jouez avec les épaisseurs de lignes)
Vous pourrez désormais paramétrer votre Ichimoku sur cTrader pour avoir, par exemple, un nuage gris, une SSA Orange et une SSB Bleu (Comme le fait Patrick par exemple!
En bas de ce post, j'ai joins des captures d’écran ou on peut voir qu’avec ce code, il est possible de modifier maintenant à volonté toutes les couleurs séparément.
N’hésitez pas à me dire si ça vous est utile, si vous avez des suggestions, des remarques ou des améliorations que vous verriez à apporter.
Merci à tous et très bonne journée !
PS: Je ne peux pas joindre le fichier de cet indicateur ".algo" à ce post, il vous faudra donc créer l'indicateur (n'hésitez pas à me demander si vous ne savez pas comment faire, ou envoyez un MP pour avoir le fichier .algo)
Voici le code:
- Code: Tout sélectionner
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Cloud("KumoUp", "KumoDown")]
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class IchimokuKinkoHyoCustom : Indicator
{
[Parameter(DefaultValue = 9)]
public int periodFast { get; set; }
[Parameter(DefaultValue = 26)]
public int periodMedium { get; set; }
[Parameter(DefaultValue = 52)]
public int periodSlow { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementChikou { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementCloud { get; set; }
[Output("TenkanSen", Color = Colors.Red)]
public IndicatorDataSeries TenkanSen { get; set; }
[Output("Kijunsen", Color = Colors.Blue)]
public IndicatorDataSeries KijunSen { get; set; }
[Output("ChikouSpan", Color = Colors.Black)]
public IndicatorDataSeries ChikouSpan { get; set; }
[Output("KumoUp", LineColor = "7CA9A9A9")]
public IndicatorDataSeries KumoUp { get; set; }
[Output("KumoDown", LineColor = "B3000000")]
public IndicatorDataSeries KumoDown { get; set; }
[Output("SenkouSpanA", LineColor = "FFFFA500")]
public IndicatorDataSeries SenkouSpanA { get; set; }
[Output("SenkouSpanB", LineColor = "FF62BADB")]
public IndicatorDataSeries SenkouSpanB { get; set; }
double maxfast, minfast, maxmedium, minmedium, maxslow, minslow;
public override void Calculate(int index)
{
if ((index < periodFast) || (index < periodSlow))
{
return;
}
maxfast = MarketSeries.High[index];
minfast = MarketSeries.Low[index];
maxmedium = MarketSeries.High[index];
minmedium = MarketSeries.Low[index];
maxslow = MarketSeries.High[index];
minslow = MarketSeries.Low[index];
for (int i = 0; i < periodFast; i++)
{
if (maxfast < MarketSeries.High[index - i])
{
maxfast = MarketSeries.High[index - i];
}
if (minfast > MarketSeries.Low[index - i])
{
minfast = MarketSeries.Low[index - i];
}
}
for (int i = 0; i < periodMedium; i++)
{
if (maxmedium < MarketSeries.High[index - i])
{
maxmedium = MarketSeries.High[index - i];
}
if (minmedium > MarketSeries.Low[index - i])
{
minmedium = MarketSeries.Low[index - i];
}
}
for (int i = 0; i < periodSlow; i++)
{
if (maxslow < MarketSeries.High[index - i])
{
maxslow = MarketSeries.High[index - i];
}
if (minslow > MarketSeries.Low[index - i])
{
minslow = MarketSeries.Low[index - i];
}
}
TenkanSen[index] = (maxfast + minfast) / 2;
KijunSen[index] = (maxmedium + minmedium) / 2;
ChikouSpan[index - DisplacementChikou] = MarketSeries.Close[index];
SenkouSpanA[index + DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2;
SenkouSpanB[index + DisplacementCloud] = (maxslow + minslow) / 2;
KumoUp[index + DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2;
KumoDown[index + DisplacementCloud] = (maxslow + minslow) / 2;
}
}
}



