Ma question est : comment, à partir d'un EA ou de Icustom, je peux choisir, sélectionner, lire ou récupérer une donnée présente dans l'indicateur ? Ne me réponds pas.
CopyBuffer
Dans le code ci-dessous, il n'y a que des zéros. Disons plutôt que je suis à la recherche d'un exemple.
voidOnTick()
{
int InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);
if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend"); // Récupération d'un pointeurint qt=BarsCalculated(InpInd_Handle); //Calcul de la qt de donnéePrint("qt de donnee "+ (string)qt);
//Lecture de toutes les données différente de zérosdouble 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
}
La seule chose que j'arrive à faire, c'est récupérer un int celui de la fonction ci dessous présent dans l'indicateur.
Bonjour Ecoute, c'est pas très compliqué, mais il faut que tu laisses tomber ce que tu penses savoir car sinon y a pas la place pour ce que j'ai à t'expliquer.
après la partie oninit et pas ailleurs et certainement pas tous les ticks !!!!
intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
ResetLastError();
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
MA_Period,
MA_Shift,
MA_Method,
PRICE_CLOSE// calculons selon les prix de la clôture
);
Print("MA_handle = ",MA_handle," error = ",GetLastError());
//---return(INIT_SUCCEEDED);
}
comme tu peux le voir le icustom est fait là
et seulement après dans oncalculate le copybuffer
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- copions les valeurs de l'indicateur Custom Moving Average à notre tampon d'indicateurint copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
Print("copy = ",copy," rates_total = ",rates_total);
//--- si la tentative est ratée - signalez-leif(copy<=0)
Print("La tentative ratée de recevoir les valeurs de l'indicateur Custom Moving Average");
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
Voilà c'est tout
Pas de besoin de ce que tu fais à tous les passages de créer l'handle
voidOnTick()
{
int InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);
if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend"); // Récupération d'un pointeur
Pas de besoin de faire une variable pour avoir une nombre de barres tu as tout ce qu'il faut comme constantes dans oncalculate
int qt=BarsCalculated(InpInd_Handle); //Calcul de la qt de donnéePrint("qt de donnee "+ (string)qt);
et avec les constantes oncalculate pas besoin de faire de boucle non plus
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];
}
Le but du jeu est de récupérer un tableau présent dans l'indicateur pour l'utiliser dans le robot.
Donc si je te comprends bien, dans l'indicateur, je remplis la variable que je souhaite partager. oui/non
//ici je suis dans l'indicateur
double Buffer[]; variable global
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int copy=CopyBuffer(MA_handle,0,0,rates_total,Buffer); // Ici, Buffer est initialisé dans l'indicateur pour être lu par le robot de trading.
// Ma_Handle ces un equivalent "this" ????
...
//ici je suis dans le robot
int inpInd; //variable global
int OnInit()
{
InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4); //init
return(INIT_SUCCEEDED);
}
voidOnTick()
{
// Donc maintenant, comment je récupère le tableau à partir de InpInd_Handle initialisé dans OnInit
}
int InpInd_Handle;
double DnValue[1],UpValue[1];
bool updown;
int OnInit()
{
InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4);
if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend"); // récupération d'un pointeur
return 0;
}
void OnTick()
{
if(CopyBuffer(InpInd_Handle,0,1,1,DnValue)<=0) {Print("ko");return;}
if(CopyBuffer(InpInd_Handle,1,1,1,UpValue)<=0) {Print("ko"); return;}
if(UpValue[0]!=0){updown=true;}
if(DnValue[0]!=0){updown=false;}
if(updown){Print("Marcher orienté a la hausse");}
else{Print("Marcher orienté a la baisse");}
}
Je suis incapable de dire quelle variable je récupère dans astrend, mais cela fonction.
Inutile de me dire que c'est la première et la deuxième . Ce que je souhaite peut-être un jour comprend, c'est quelle variable et associer à quel index.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Tu m'excuses, mais là, je n'ai rien compris.
Ma question est : comment, à partir d'un EA ou de Icustom, je peux choisir, sélectionner, lire ou récupérer une donnée présente dans l'indicateur ? Ne me réponds pas.
CopyBufferDans le code ci-dessous, il n'y a que des zéros. Disons plutôt que je suis à la recherche d'un exemple.
La seule chose que j'arrive à faire, c'est récupérer un int celui de la fonction ci dessous présent dans l'indicateur.
merci pour tout retour
cdl remy
Bonjour
Ecoute, c'est pas très compliqué, mais il faut que tu laisses tomber ce que tu penses savoir car sinon y a pas la place pour ce que j'ai à t'expliquer.
Prends l'exemple de la doc
iCustom - Indicateurs Techniques - Référence MQL5 - Référence sur le langage de trading algorithmique/automatisé pour MetaTrader 5
y'a la première partie => RAB
après la partie oninit et pas ailleurs et certainement pas tous les ticks !!!!
comme tu peux le voir le icustom est fait là
et seulement après dans oncalculate le copybuffer
Voilà c'est tout
Pas de besoin de ce que tu fais à tous les passages de créer l'handle
Pas de besoin de faire une variable pour avoir une nombre de barres tu as tout ce qu'il faut comme constantes dans oncalculate
et avec les constantes oncalculate pas besoin de faire de boucle non plus
Donc si je te comprends bien, dans l'indicateur, je remplis la variable que je souhaite partager. oui/non
//ici je suis dans le robot int inpInd; //variable global int OnInit() { InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4); //init return(INIT_SUCCEEDED); } void OnTick() { // Donc maintenant, comment je récupère le tableau à partir de InpInd_Handle initialisé dans OnInit }Copybuffer
Fait attention à ton as_serie false ou true ca va changer les param de ton copybuffer
ArraySetAsSeries - Fonctions sur les Tableaux - Référence MQL5 - Référence sur le langage de trading algorithmique/automatisé pour MetaTrader 5
OK, si j'y arrive, je posterai une solution. En attendant, je vais me contenter de celui qui fonctionner bien, même s'il est limité à un entier.
voir https://www.mql5.com/fr/forum/454762#comment_49642104
Avec l'initialisation faite ailleurs, bien sûr, mais là n'est pas le sujet.
l'indicateur en entier et sans aucune modif https://www.mql5.com/en/code/viewcode/15186/126462/asctrend.mq5
le robot en entier
int InpInd_Handle; double DnValue[1],UpValue[1]; bool updown; int OnInit() { InpInd_Handle=iCustom(Symbol(),_Period,"ASCtrend",4); if(InpInd_Handle==INVALID_HANDLE) Print("aucun pointeur sur ASCtrend"); // récupération d'un pointeur return 0; } void OnTick() { if(CopyBuffer(InpInd_Handle,0,1,1,DnValue)<=0) {Print("ko");return;} if(CopyBuffer(InpInd_Handle,1,1,1,UpValue)<=0) {Print("ko"); return;} if(UpValue[0]!=0){updown=true;} if(DnValue[0]!=0){updown=false;} if(updown){Print("Marcher orienté a la hausse");} else{Print("Marcher orienté a la baisse");} }Je suis incapable de dire quelle variable je récupère dans astrend , mais cela fonction.
Inutile de me dire que c'est la première et la deuxième . Ce que je souhaite peut-être un jour comprend, c'est quelle variable et associer à quel index.
Ou comme je peux choisir ma variable .