Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1266

 
Alexey Viktorov:

Je ne me souviens pas, je dois vérifier, mais je ne veux pas. Peut-être que dans mql4 quand on essayait de créer un objet avec le nom d'un objet existant, une erreur était retournée, et dans mql5 pas une erreur, mais la modification des paramètres si les coordonnées sont différentes.

Comme Artem l'a dit - vérifiez l'existence de l'objet.

Oui, c'est vrai.

 
Maxim Kuznetsov:

soudainement (comme d'habitude) ObjectGetInteger(0,objectName,OBJPROP_TYPE) fonctionne plus rapidement.

ObjectFind est une commande synchrone, c'est à dire qu'elle attend la mise à jour complète (et la disponibilité) des objets du graphique...L'utilisation est entachée de délais importants.

Si vous travaillez avec vos propres objets (c'est-à-dire créés dans votre propre stock), vous ne devriez pas utiliser ObjectFind - vous savez déjà dans quelle fenêtre l'objet a été créé et qu'il existe très probablement et qu'il est du bon type.
Le pire qui puisse arriver est que l'utilisateur supprime l'objet ou modifie la propriété.

Merci. C'est intéressant.

 

Bonne journée à vous tous.
Le livre de Kovalev indique que les index des tableaux peuvent être définis comme des valeurs entières en tant que constantes,variables ou expressions.
Lorsque je place l'index dans mql4 comme une variable, le compilateur me donne une seule erreur

Voici comment je règle l'indice
intW=1000;

double T_P[W]={0} ;

void OnTick()

{

code

}
S'il vous plaît, dites-moi ce que je fais mal.
Merci.

 
ANDREY:

Bonne journée à vous tous.
Le livre de Kovalev indique que les index des tableaux peuvent être définis comme des valeurs entières en tant que constantes,variables ou expressions.
Lorsque je place l'index dans mql4 comme une variable, le compilateur me donne une seule erreur

Voici comment je règle l'indice
intW=1000;

double T_P[W]={0} ;

void OnTick()

{

code

}
S'il vous plaît, dites-moi ce que je fais mal.
Merci.

L'index du tableau n'est pas la taille du tableau.
 
Alexey Viktorov:
L'index du tableau n'est pas la taille du tableau.

Je l'ai, merci. Existe-t-il un moyen de définir la taille du tableau à l'aide d'une variable ?

 
ANDREY:

Je l'ai, merci. Existe-t-il un moyen de définir la taille du tableau à l'aide d'une variable ?

Définit une nouvelle taille dans la première dimension du tableau

intArrayResize(
void&array[],// tableau transmis par la référence
intnew_size,// nouvelle taille du tableau
intreserve_size=0// valeur de la taille de réserve (redondante)
)

 
Aleksey Vyazmikin:

Définit la nouvelle taille dans la première dimension du tableau

intArrayResize(
void&array[],// tableau transmis par référence
intnew_size,// nouvelle taille du tableau
intreserve_size=0// valeur de reserve_size (redondant)
) ;

Merci pour ces informations précieuses.

 

Bonjour, veuillez m'aider avec un code simple.

Je m'occupe actuellement des mécanismes d'ouverture/fermeture des ordres et j'ai rencontré un problème avec la fermeture des positions ouvertes.

Le code est simple. L'idée de l'algorithme est de dessiner la MA (moyenne mobile) avec une période de 100 sur le graphique. Si la bougie précédente [1] s'est ouverte au-dessus de la MA, et a clôturé en dessous de la MA, alors la bougie suivante [0] ouvre un ordre de VENTEpour vendre.

//(Les conditions d'achat sont différentes, je ne les décrirai pas)

Pour la clôture de l'ordre, les conditions suivantes doivent être remplies : le prix actuel a dépassé le prix d'ouverture de l'ordre de la valeur fixée de points, par exemple 40.

Exemple : Un lot est ouvert à Bid= 1.20045, il devrait clôturer à Ask= 1.20005.

Le code d'ouverture et de fermeture est regroupé dans deux fonctions correspondantes - CheckForOpen() et CheckForClose() qui, à leur tour, sont appelées par la fonction OnTick(). En fait, le prix peut dépasser une certaine valeur de points (dépasser le niveau de fermeture) mais l'ordre ne sera pas fermé.

Je n'arrive pas à comprendre ce qui ne va pas.

p/s/ Captures d'écran et code joints.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
4elovechishe:

Bonjour, veuillez m'aider avec un code simple.

Je m'occupe actuellement des mécanismes d'ouverture/fermeture des ordres et j'ai rencontré un problème avec la fermeture des positions ouvertes.

Le code est simple. L'idée de l'algorithme est de dessiner la MA (moyenne mobile) avec une période de 100 sur le graphique. Si la bougie précédente [1] s'est ouverte au-dessus de la MA, et a clôturé en dessous de la MA, alors la bougie suivante [0] ouvre un ordre de VENTEpour vendre.

//(Les conditions d'achat sont différentes, je ne les décrirai pas)

Pour la clôture de l'ordre, les conditions suivantes doivent être remplies : le prix actuel a dépassé le prix d'ouverture de l'ordre de la valeur fixée de points, par exemple 40.

Exemple : Un lot est ouvert à Bid= 1.20045, il devrait clôturer à Ask= 1.20005.

Le code d'ouverture et de fermeture est regroupé dans deux fonctions correspondantes - CheckForOpen() et CheckForClose() qui, à leur tour, sont appelées par la fonction OnTick(). En fait, le prix peut dépasser une certaine valeur de points (dépasser le niveau de fermeture) mais l'ordre ne sera pas fermé.

Je n'arrive pas à comprendre ce qui ne va pas.

p/s/ Captures d'écran et code joints.

Le CheckForOpen() ne doit pas être appelé directement dans OnTick, mais dans un OnBar auto-écrit (qui doit être appelé dans OnTick) - à l'ouverture de la barre. Mais c'est une chose triviale

, au lieu de Open[1], Close[1] (la bougie précédente a franchi MA100) nous devrions regarder Open[1],Open[0] (la bougie précédente s'est ouverte d'un côté de MA, la bougie actuelle de l'autre côté). Sinon, un écart peu profond entre les chandeliers sera observé et la logique sera pardonnée.

La SMA de la Médiane change sur la 0ème barre, c'est-à-dire qu'elle n'est pas constante. Il ne peut y être comparé. Corrigez l'algorithme.

 
Aleksey Vyazmikin:

Définit la nouvelle taille dans la première dimension du tableau

intArrayResize(
void&array[],// tableau transmis par référence
intnew_size,// nouvelle taille du tableau
intreserve_size=0// valeur de reserve_size (redondant)
) ;

Merci encore pour votre conseil, mais..... dans l'aide il est écrit que cette fonction ne s'applique qu'aux tableaux dynamiques. Et mon code n'est PAS un tableau dynamique, mais un tableau habituel.

Je vous serais très reconnaissant de me dire (ou, mieux, de me montrer) comment modifier la taille d'un tableau régulier dans la première dimension.
Merci encore pour votre aide.