robot + indicateur ( modifier )

 

Bonjour

Je souhaite faire interagir un robot de trading automatique avec un indicateur de manière simple.

Comment un robot peut-il récupérer les informations de l'indicateur Astren https://www.mql5.com/en/code/491

sachant que ce sont des points bleus ou rouges ? De plus, le robot et l'indicateur ne sont pas sur la même période.

Dit déferrement avez vous un temlate ou  un bout de code qui permet d'interagir avec un indicateur maison et un robot tout aussi maison ?

merci pour tout retour

cdl remy

ASCtrend
ASCtrend
  • www.mql5.com
The indicator generates signals for entering the market.
 

Code Base

Exp_ASCtrend

Nikolay Kositsin, 2016.04.14 09:48

A trading system based on the signals of the ASCtrend indicator.

Code Base

AscTrend Expert Advisor

Alain Verleyen, 2013.05.21 07:05

Trading strategy based on ASCTrend indicator as main signal, filtered by NRTR indicator and/or by TrendStrength indicator.
 
Bonjour
Regarde la fonction icustom 
C'est la plus simple pour toi
iCustom - Indicateurs Techniques - Référence MQL5 - Référence sur le langage de trading algorithmique/automatisé pour MetaTrader 5

Elle te permettra de te connecter aux buffers de ton indicateur qui contiennent les données que tu cherches pour ton EA
Documentation sur MQL5: Indicateurs Techniques / iCustom
Documentation sur MQL5: Indicateurs Techniques / iCustom
  • www.mql5.com
iCustom - Indicateurs Techniques - Référence MQL5 - Référence sur le langage de trading algorithmique/automatisé pour MetaTrader 5
 

Oui, j'ai regardé le code. Il y a  bien cette ligne dans le fichier Exp_ASCtrend.mq5 


InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"ASCtrend",RISK);


Je vais essayer de récupérer un pointeur sur l' 'indicateur Astren https://www.mql5.com/en/code/491

ou d’accéder a une donnée de l'indicateur. Ce sont les données renvoyées par la fonction

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

où je peux accéder une variable globale avec une technique du style.

InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"ASCtrend",RISK);
tabRobot=InpInd_Handle.tabIndicateur;

  Dans tout les cas Merci pour les retours

cdl remy

ps: je regarde ce week-end

 

Super
Le icustom ne va te donner que le handle, pas les données
La copie des données ne va se faire que dans le copybuffe autant de fois qu'il y a de buffer à récupérer dans l'indicateur

 

ok

https://www.mql5.com/fr/docs/series/copybuffer


int  CopyBuffer(
   int       indicator_handle,     // handle de l'indicateur
   int       buffer_num,           // numéro du buffer de l'indicateur
   int       start_pos,            // position de départ
   int       count,                // quantité à copier
   double    buffer[]              // tableau de destination pour la copie
   );

numéro du buffer de l'indicateur ?????  .je sens que ce n'est pas gagné cette histoire.


A partir de https://www.mql5.com/en/code/viewcode/491/129436/asctrend.mq5 je souhaite récupère par exemple


//---- declaration of dynamic arrays that further
// will be used as indicator buffers
double SellBuffer[]; 

donc

InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"ASCtrend",RISK);
double tabLocal[];

CopyBuffer(InpInd_Handle,????,0,1,tabLocal);


remy

Documentation sur MQL5: Accès aux Séries de Données et aux Indicateurs / CopyBuffer
Documentation sur MQL5: Accès aux Séries de Données et aux Indicateurs / CopyBuffer
  • www.mql5.com
CopyBuffer - Accès aux Séries de Données et aux Indicateurs - Référence MQL5 - Référence sur le langage de trading algorithmique/automatisé pour MetaTrader 5
 
Re
Dans ton code a attacher les numéros de buffer sont ceux donnés dans les setindexbuffer

Dans ton cas, je ne le trompe pas

SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
Donc 0 pour le sellBuffer et 1 pour l'autre
 
Ok, je fais des tests ce week-end et l'on voit cela lundi.
 

Bonjour, j'ai fait des tests à partir du code de   Fernando Carreiro  merci pour ton code

Voici mon robot de test, le code est complet.

 void OnTick()
  {

   int InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);
   
   if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend");  // Récupération d'un pointeur


   int qt=BarsCalculated(InpInd_Handle);  //Calcul de la qt de donnée
   Print("qt de donnee "+ (string)qt);
   
   
   //Lecture de toutes les données différente de zéros
   double testLecture[1];
   string txt="donnee de ASCtrend";
   
   for (int i=0;i<qt;i++){
   CopyBuffer(InpInd_Handle,i,1,1,testLecture);
   if(testLecture[0]!=0) txt=txt+" i= "+i+" val="+(string)testLecture[0];
   }
   Print(txt);  // Affichage des données
   
   }
              
//+------------------------------------------------------------------+

A priori, je récupère bien un pointeur sur l'indicateur, mais je n'ai que des zéros, sauf de temps en temps. Comment je peux connaître les donnes et la valeur que je récupère ?

Par exemple, si j'ajoute le code suivant dans  l'indicateur, comment puis-je récupérer cette valeur  depuis le robot?


int valtest=123456789;


int OnCalculate(const int rates_total,....

valtest=-1;
}

Merci pour tout retour même partiel

cdl remy

Fernando Carreiro
Fernando Carreiro
  • 2023.04.19
  • www.mql5.com
Profil du trader
 

je me répond parque j'ai trouver un moyen de communication indicateur/robot 


modif ou ajout  dans  l'indicateur

int valtest=123456789;


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--


...

  valtest=-99999;
  return(valtest);
  }

ensuit le robot


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   int InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);
   
   if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend");  // récupération d'un pointeur
   int val =BarsCalculated(InpInd_Handle);  
   Print("donnee de ASCtrend "+ (string)val);
   
  
   }
              
//+------------------------------------------------------------------+



Donc l'on récupéré les données qui sont renvoie par la fonction

int OnCalculate(const int rates_tot ...


présent dans l'indicateur (sauf erreur de ma part bien sur)


Merci pour votre aide

cdl remy

 
À mon avis la solution que j ' ai proposée ne doit pas être très académie parcelle ne permet de récupérer qu ' un int il doit bien y avoir un moyen ou  un truc du style


int InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);

double Tab[]=getobjIndicateur (InpInd,"NomVariableIndicateur");


si vous connaissez un moyen je suis toujours la recherche d ' une solution standard ou classique MQL 5


cdl remy

Raison: