Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 95

 
hoz:

Oui. Les variables avec i_ sont des variables d'entrée (du mot intut, qui peut être modifié par l'utilisateur...), et pt est aussi une variable globale, qui est visible partout...

Non, le lot n'a pas été normalisé. Je ne l'ai jamais rencontré dans le testeur... Et qu'est-ce que Lot a à voir avec l'objet (erreur 4200) ?

Qu'est-ce que le lot a à voir avec ça ? Si le lot n'est pas valide, la fonction de gestion des erreurs est appelée, ce qui entraîne la construction d'objets.

Si le lot est faux, il y aura une erreur dans le testeur. Vous dites que vous ne construisez pas d'objets, mais dans la fonction

void pr (string txt)

construit toujours des objets :

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

C'est probablement là que le bug est enterré. Vous devrez peut-être faire quelque chose là-bas. Commentez la sortie du graphique dans cette fonction. Si l'erreur a disparu, vous cherchez la raison de cette erreur dans la fonction.

void pr (string txt)
 
vovak_85:

Bonjour, je suis nouveau dans la programmation mql. J'ai un problème, j'ai un indicateur personnalisé, pas écrit par moi, il génère des signaux d'achat et de vente sous la forme de flèches, à cette fin il ya deux tampons dans l'indicateur, le problème est que je ne peux pas lire correctement les signaux de l'indicateur à l'Expert Advisor pour faire un achat ou une vente.

Le code de l'indicateur :

...

Pour coller le code correctement dans le forum, cliquez sur le SRC et ensuite copiez le code.

 

Bonjour, je suis nouveau dans la programmation mql. J'ai un problème, j'ai un indicateur personnalisé, pas écrit par moi, il génère des signaux d'achat et de vente sous la forme de flèches, à cette fin il ya deux tampons dans l'indicateur, le problème est que je ne peux pas lire correctement les signaux de l'indicateur à l'Expert Advisor pour faire un achat ou une vente.

Code indicateur :

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
Je le saurai, merci ! Le réparer ?
Correct dans votre message précédent.
 
vovak_85:
Je le saurai, merci ! Le réparer ?
Bien sûr ! En supprimant un trouble-fête inutile !
 
hoz:

pr est une fonction d'impression. Et l'erreur, c'est déjà une constante standard. Logiquement, ce n'est pas du tout acceptable. Si vous soupçonnez encore la fonction pr, la voici :


Eh bien, remplacez-la par l'empreinte habituelle et regardez le journal.

l'objet est créé, le nom de l'objet n'est pas unique, c'est pourquoi il y a une erreur lors de la création d'un objet.

 
artmedia70:

Qu'est-ce que ça a à voir avec le lot ? Si beaucoup de choses sont fausses, la fonction de gestion des erreurs est appelée et elle provoque des objets de construction.

Si le lot est erroné, il y aura également une erreur dans le testeur. Vous dites que vous ne construisez pas d'objets, mais dans la fonction

les objets sont en cours de construction :

C'est probablement là que réside le problème. Vous devrez peut-être faire quelque chose là-bas. Commentez la sortie du graphique dans cette fonction. Si l'erreur a disparu, vous cherchez la cause de l'erreur dans la fonction



J'y avais déjà pensé moi-même, et votre réponse m'a frappé au même endroit. Le problème a disparu en commentant les endroits avec cette fonction. Apparemment, lorsque vous l'utilisez, vous devez supprimer tous les objets de l'entrée en une seule fois, n'est-ce pas ? C'est-à-dire au tout début de la fonction pr, je veux dire.
 
hoz:

J'y ai déjà pensé moi-même, et votre réponse vient de toucher le même point. Le problème a disparu en commentant les endroits avec cette fonction. Apparemment, lorsqu'on l'utilise, il faut supprimer tous les objets de l'entrée en même temps, non ? C'est à dire au tout début de la fonction pr, je veux dire...

Honnêtement, je ne connais pas la logique de votre fonction. Je ne sais pas si elle doit supprimer les objets ou les construire. Dites-moi ce que vous voulez qu'il fasse et on verra où la logique est mauvaise. Toutefois, si la fonction tente de construire un objet graphique mais échoue, cela signifie qu'il existe déjà. Et ensuite, selon la logique de votre programme ? Vous pouvez construire un nouvel objet avec un nom différent (par exemple, ajoutez l'heure actuelle au nom de l'objet (TimeToStr(TimeCurrent())))) ou, si vous avez déjà un objet mais que vous devez modifier ses propriétés, ne le construisez pas à nouveau, mais modifiez simplement ses propriétés. Ensuite, l'erreur ne se reproduira plus.

C'est aussi simple que cela. L'essentiel est de savoir ce que vous voulez. :)

 
vovak_85:

Bonjour, je suis nouveau dans la programmation mql. J'ai un problème, j'ai un indicateur personnalisé, pas écrit par moi, il génère des signaux d'achat et de vente sous la forme de flèches, à cette fin il ya deux tampons dans l'indicateur, le problème est que je ne peux pas lire correctement les signaux de l'indicateur à l'Expert Advisor pour faire un achat ou une vente.

Code indicateur :


Etes-vous sûr d'avoir mis toutes les accolades en place. Ils sont manquants à certains endroits. C'est pourquoi votre logique est erronée. Et il est fort probable que le résultat ne soit pas celui que vous attendiez.