(Résolu - Bug C_Ilchimoku) Erreur fréquemment rencontrée : 4806
J'utilise Ichimoku sur une seule TF (daily dans le cas présent), sur les autres TF j'utilise d'autres indicateurs - aucun problème de ce côté.
Si je change la TF Ichimoku pour passer en weekly ou 4h, plus d'anomalie ...
J'ai trouvé un post sans réponse, ou l'utilisateur semble avoir le même problème que moi :
- 2021.04.22
- www.mql5.com
Bon, du coup j'ai refait une classe en me basant notamment sur ton travail :)
En revanche c'est loin d'être parfait, mais à priori utilisable en l'état et je n'ai pas eu l'erreur à nouveau.
Si vous avez envie de tester faites vous plaisir !
//+------------------------------------------------------------------+ //| C_Ichimoku.mqh | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" class C_Ichimoku { private: int C_Handle; double C_TenkanSen[]; double C_KijunSen[]; double C_SenkouSpanA[]; double C_SenkouSpanB[]; double C_ChikouSpan[]; public: double TenkanSen(int i) { return this.C_TenkanSen[i]; } double KijunSen(int i) { return this.C_KijunSen[i]; } double SenkouSpanA(int i) { return this.C_SenkouSpanA[i]; } double SenkouSpanB(int i) { return this.C_SenkouSpanB[i]; } double ChikouSpan(int i) { return this.C_ChikouSpan[i]; } int Init(string CS_Symbol, ENUM_TIMEFRAMES CS_Timeframe, int CS_TenkanSen, int CS_KijunSen, int CS_SenkouSpanB); bool Refresh(); C_Ichimoku(); ~C_Ichimoku(); }; //+------------------------------------------------------------------+ //| Init Ichimoku | //+------------------------------------------------------------------+ int C_Ichimoku::Init(string CS_Symbol, ENUM_TIMEFRAMES CS_Timeframe, int CS_TenkanSen, int CS_KijunSen, int CS_SenkouSpanB) { ArraySetAsSeries(this.C_TenkanSen, true); ArraySetAsSeries(this.C_KijunSen, true); ArraySetAsSeries(this.C_SenkouSpanA, true); ArraySetAsSeries(this.C_SenkouSpanB, true); ArraySetAsSeries(this.C_ChikouSpan, true); /*--- Transforms the array into display buffer */ SetIndexBuffer( 0, this.C_TenkanSen, INDICATOR_DATA); SetIndexBuffer( 1, this.C_KijunSen, INDICATOR_DATA); SetIndexBuffer( 2, this.C_SenkouSpanA, INDICATOR_DATA); SetIndexBuffer( 3, this.C_SenkouSpanB, INDICATOR_DATA); SetIndexBuffer( 4, this.C_ChikouSpan, INDICATOR_DATA); PlotIndexSetInteger(2, PLOT_SHIFT, CS_KijunSen); this.C_Handle = iIchimoku(CS_Symbol, CS_Timeframe, CS_TenkanSen, CS_KijunSen, CS_SenkouSpanB); if( this.C_Handle == INVALID_HANDLE) { Print("Erreur lors de la création de Ichimoku : ", GetLastError()); return INIT_FAILED; } return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Refresh Values Ichimoku | //+------------------------------------------------------------------+ bool C_Ichimoku::Refresh(void) { if (CopyBuffer(this.C_Handle, 0, 0, 27, this.C_TenkanSen) < 0) { return false; } if (CopyBuffer(this.C_Handle, 1, 0, 27, this.C_KijunSen) < 0) { return false; } if (CopyBuffer(this.C_Handle, 2, 0, 27, this.C_SenkouSpanA) < 0) { return false; } if (CopyBuffer(this.C_Handle, 3, 0, 27, this.C_SenkouSpanB) < 0) { return false; } if (CopyBuffer(this.C_Handle, 4, 0, 27, this.C_ChikouSpan) < 0) { return false; } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ C_Ichimoku::C_Ichimoku() { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ C_Ichimoku::~C_Ichimoku() { } //+------------------------------------------------------------------+
Exemple d'utilisation :
//+------------------------------------------------------------------+ //| Create Ichimoku & MACD & ATR | //+------------------------------------------------------------------+ C_Ichimoku*m_Ichimoku; //+------------------------------------------------------------------+ //| Define 3 timeframes for analyze | //+------------------------------------------------------------------+ ENUM_TIMEFRAMES HighestTF = PERIOD_W1; ENUM_TIMEFRAMES MiddleTF = PERIOD_D1; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Start Ichimoku m_Ichimoku = new C_Ichimoku(); m_Ichimoku.Init(_Symbol,MiddleTF, 9, 26, 52); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { ResetLastError(); //--- Ichimoku refresh values m_Ichimoku.Refresh(); Comment( "TenkanSen : ", m_Ichimoku.TenkanSen(0), "\n" "KijunSen : ", m_Ichimoku.KijunSen(0), "\n" "SenkuSpanA : ", m_Ichimoku.SenkouSpanA(0), "\n" "SenkuSpanB : ", m_Ichimoku.SenkouSpanB(0), "\n" "ChikouSpan : ", m_Ichimoku.ChikouSpan(26), "\n" ); // Print last error if(GetLastError() > 0) { Print("error : ", GetLastError()); } }
Bon, du coup j'ai refait une classe en me basant notamment sur ton travail :)
En revanche c'est loin d'être parfait, mais à priori utilisable en l'état et je n'ai pas eu l'erreur à nouveau.
Si vous avez envie de tester faites vous plaisir !
Exemple d'utilisation :
Vous n'avez rien résolu. Juste masqué l'erreur.
Votre classe est buguée car elle peut donner des résultats non synchronisé pour les différents buffers (l'un étant mis à jour et l'autre pas).
- Applications de trading gratuites
- VPS Forex gratuit pendant 24 heures
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonjour à tous,
Je tiens à dire que j'ai passé ma journée à faire des recherches avant de poster, mais je n'ai pas encore compris comment corriger ce problème.
Contexte : stratégie basée sur Ichimoku.
Problématique : Si TF H4 tout va bien, si TF D1 je récupère une 4806 (je suis donc sur 2 TF)
Voici le code nettoyé, que j'utilise pour cibler l'erreur
J'ai donc retrouvé la classe CiIchimoku (native), et regardé la méthode :
Et là j'avoue je bloque, je ne sais pas comment gérer cette situation :s
Auriez vous une piste à me transmettre ?
Je vous remercie d'avance de votre aide :)