Aide au codage - page 337

 
alpha24:
Bonjour Monsieur Mladen,

Après une longue période, je vous demande de coder la bande de Bollinger sur MA. Comme la MA sur l'indicateur MA. dans une fenêtre séparée. Il n'est pas nécessaire de visualiser la moyenne mobile dans la fenêtre de l'indicateur. BB avec déviation décimale (0.01), forme EMA ou SMA. Pouvez-vous faire comme d'habitude ?

Merci d'avance

alpha24

Vous n'avez pas besoin d'un nouvel indicateur pour cela

Utilisez n'importe quel indicateur qui se trouve déjà dans une fenêtre séparée, puis faites simplement glisser les bandes de bollinger vers cette sous-fenêtre et choisissez les données de l'indicateur précédent comme champ de prix.

 
mladen:
alpha24

Vous n'avez pas besoin d'un nouvel indicateur pour cela

Utilisez n'importe quel ma ...

Oui monsieur, mais le problème est qu'il n'y a pas d'option pour la déviation en décimales et un autre est que si j'ai essayé d'utiliser plusieurs indicateurs dans la même fenêtre, il y a une confusion dans les données précédentes et les premières données. Donc, s'il vous plaît

 

Bonjour,

Je ne suis pas sûr que le maillink.dll fonctionne avec un build > 600.

J'ai essayé le maillink.dll avec gmx et googlemail et j'obtiens toujours "-2".

de la fonction MailInit(string,int,string,string) ; :-(

J'ai aussi essayé le xpMail.dll de codersguru qui fait planter mon compte metatrader, est-ce que quelqu'un connaît une autre possibilité d'envoyer un mail d'un EA à deux adresses mail différentes ? !?

 
sunshineh:
Bonjour,

Je ne suis pas sûr que le maillink.dll fonctionne avec un build > 600.

J'ai essayé le maillink.dll avec gmx et googlemail et j'obtiens toujours "-2".

de la fonction MailInit(string,int,string,string) ; retour :-(

J'ai aussi essayé le xpMail.dll de codersguru qui fait planter mon compte metatrader, est-ce que quelqu'un connaît une autre possibilité d'envoyer un mail d'un EA à deux adresses mail différentes ? !?

Les parties de la chaîne sont le problème.

L'ancien metatrader 4 utilisait des chaînes ANSI. Ils ont changé cela en chaînes Unicode. Les chaînes Unicode utilisent 2 octets par caractère, alors que ANSI utilise seulement 1 octet par caractère. C'est pourquoi vous avez des problèmes - les dlls reçoivent des chaînes de caractères qui ne sont pas lisibles pour eux.

 

S'il vous plaît corriger l'indicateur vous devez mettre la flèche à la place des carrés.

Dossiers :
.........png  141 kb
.......png  30 kb
tro_bias_ez.ex4  12 kb
 
DMNIK:
S'il vous plaît corriger l'indicateur vous devez mettre la flèche à la place des carrés.

DMNIK

Le fichier ex4 ne peut pas être édité et modifié

 

Merci pour cette explication claire !

Cela devrait donc fonctionner si je change chaque chaîne de caractères en unicode, avant d'appeler les fonctions de la dll ?

Existe-t-il déjà des fonctions pour changer ANSI en unicode et unicode en ANSI ?

 

Ou bien cela ne fonctionne pas parce que la chaîne Unicode est dans un tableau ? !?

Une autre question :

Comment puis-je lire plusieurs fichiers

PlaySound-wav différents en ligne ?

J'ai essayé avec Sleep() entre les deux, mais ça ne marche pas :-(

 
sunshineh:
Ou bien cela ne fonctionne pas parce que la chaîne Unicode est dans un tableau ? !?

Une autre question :

Comment puis-je lire plusieurs fichiers

PlaySound-wav différents en ligne ?

J'ai essayé avec Sleep() entre, mais cela ne fonctionne pas :-(

sunshineh

Logiquement, ce sont les mêmes : des tableaux de caractères. Sauf que le caractère ANSI prend 1 octet alors que le caractère Unicode prend 2 octets. Cela a été fait pour inclure toutes les différentes langues du monde (lorsque Unicode a été inventé - rien à voir avec metatrader). Maintenant, si la dll attend une chaîne ANSI et reçoit une chaîne Unicode, elle l'interprétera mal (et vice versa). Si votre dll utilise des dll, vous devez convertir les nouvelles chaînes en un tableau explicite de caractères non signés (en utilisant StringToShortArray() afin de le rendre accessible à la dll ANSI) et le retour doit être converti en une chaîne en utilisant CharArrayToString() (afin de le rendre accessible à metatrader)

________________________

En ce qui concerne sleep : la fonction Sleep() est désactivée dans les indicateurs, elle ne fonctionne que dans les EAs. Il en a toujours été ainsi (ce n'est pas une nouveauté d'un nouveau metatrader).

De plus, metatrader exécute les ordres dans une paix de code de manière séquentielle. Cela signifie que vous ne pouvez pas commencer à jouer un fichier son et ensuite, sans être terminé, continuer à en jouer un autre. De plus, pour autant que je sache, ils limitent la durée du fichier son (afin d'éviter le gel du terminal - comme vous l'avez probablement remarqué, des choses comme les alertes et les sons sont centralisées - voyez quand différents graphiques émettent une alerte en même temps - c'est une seule fenêtre que vous voyez).

Je pourrais continuer encore et encore, mais le problème de Metatrader est qu'ils n'ont pas résolu correctement l'exécution des routines asynchrones (il n'en a en fait aucune idée) et cela entraîne de nombreuses limitations.

 

Vérifier si les derniers ordres fermés étaient rentables

Bonjour,

Je voudrais vérifier si mes trois derniers ordres de vente ou d'achat fermés ont été rentables, et changer une valeur de chaîne en fonction de cela.

J'ai ce code (MT4) :

for(int i=(OrdersHistoryTotal()-1);i>=0;i--);

{

OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==BUY)

{

//for buy order

if(OrderType()==OP_BUY && OrderProfit()>0) last=1;

if(OrderType()==OP_BUY && OrderProfit()<0) last=0;

}

}

for(int j=(OrdersHistoryTotal()-1);j>=0;j--);

{

OrderSelect(j, SELECT_BY_POS,MODE_HISTORY);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==SELL)

{

//for sell order

if(OrderType()==OP_SELL && OrderProfit()>0) last2=1;

if(OrderType()==OP_SELL && OrderProfit()<0) last2=0;

}

}

Mais il ne fonctionne pas pour moi.

Comment dois-je le modifier ?

Merci pour votre aide.

Raison: