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

 
yaaarik777:

Bonsoir !

Aidez-moi à écrire le code, je ne me sens pas capable de le faire moi-même, voici l'essentiel :


L'essentiel est le suivant : nous sommes ici dans ce fil pour aider ceux qui souffrent et ceux qui cherchent.
Si vous avez besoin de le faire pour vous - c'est un freelance. Et pour vous aider à dire ce que vous voulez obtenir, montrez ce que vous avez fait et décrivez ce qui a échoué.
 
Maxim Kuznetsov:
Le but est le suivant : nous sommes ici dans ce fil pour aider ceux qui souffrent et ceux qui cherchent.
Si vous avez besoin de le faire pour vous - c'est dans le freelance. Et pour obtenir de l'aide, vous devez dire ce que vous voulez obtenir, montrer ce que vous faites et décrire ce qui a échoué.


Le problème est que je ne comprends pas comment faire pour que l'EA analyse uniquement les ordres d'une paire particulière et non les ordres de toutes les paires dans le terminal.

Si vous le pouvez, veuillez me donner une idée ou un exemple de code, car les manuels décrivent séparément ce qui fonctionne et comment cela fonctionne, mais il n'y a pas beaucoup d'exemples concrets.

Je vous serais reconnaissant de bien vouloir m'aider.

Merci.

 
Bonjour.
Ça fait longtemps que je n'ai pas joué aux dames, et quand je l'ai fait, il s'est avéré que

Je ne sais pas comment jouer.
Je demande de l'aide.
Il existe un bon vieil EA qui utilise l'indicateur ZigZag de Rosh.
Et il fonctionne comme une horloge suisse.
Il a joint le code pour ne pas télécharger le conseiller expert donné en bas du texte.

L'idée de l'EA était que les commandes soient ouvertes et fermées au moment de l'exécution de la commande.

coïncidence de différents ZigZags.
Maintenant je dois remplacer l'indicateur Rosh par un autre

également l'une des premières versions de ZigZag à l'époque de MT3.
Mais cet indicateur a un algorithme différent de dessin en zigzag.

Son nom est High_Low v2 (ZigZag), (dans la pièce jointe, pour une raison quelconque, le nom a glissé).

Par la méthode de l'intuition, qui a parfois fonctionné, j'ai simplement changé les conditions...
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) ;
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) ;
sur
double zz1 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0) ;

double zz2 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0) ;

C'est-à-dire que j'ai remplacé le nom d'un indicateur personnalisé et de son

Dans le cas des fractales, par exemple, cela a fonctionné pour moi.

.
Les paramètres sont les mêmes, car deux Zigzags n'ont pas besoin d'être identiques.

Je n'ai pas besoin de la coïncidence des Zigzags, j'ai seulement besoin du fait de sa variation.
J'ai remplacé le numéro 60 par 0 pour travailler dans toutes les TF.

Après le remplacement, l'EA a compilé sans erreur, mais il refuse fortement de fonctionner lorsqu'il est attaché à

De plus, il refuse de fonctionner dans le testeur de stratégie.

ne veut pas travailler.

La question est : qu'est-ce qui ne va pas ?
Et une autre question, quelle est la bonne façon de faire ?
Merci, désolé pour le gros texte.


//+------------------------------------------------------------------+
//| ZZ.mq4 |
//| Droits d'auteur © 2011, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"

#include <stdlib.mqh>

#define MAGIC 20110220

extern double TakeProfit = 50 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Calculer les positions ouvertes |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int pos=0 ;
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
si(OrderType()==OP_BUY || OrderType()==OP_SELL) pos++ ;
}
}
//---- volume des commandes de retour
if(pos>0) return(pos)
}
//+------------------------------------------------------------------+
//| Vérifier les conditions d'un ordre ouvert |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res ;

//---- obtenir ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) ;
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) ;
//---- conditions d'achat
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])
{

res=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,Ask+TakeProfit*Point,"",MAGIC,0,Bl

ue) ;
retour ;
}
//---- conditions de vente
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])
{

res=OrderSend(Symbol(),OP_SELL,1,Bid,3,0,Bid-TakeProfit*Point,"",MAGIC,0,Re

d) ;
retour ;
}

//----
}
//+------------------------------------------------------------------+
//| Vérifier les conditions d'ordre de fermeture |
//+------------------------------------------------------------------+
void CheckForClose()
{
//---- obtenir ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) ;
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) ;
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continuer ;
//---- type d'ordre de contrôle
si(OrderType()==OP_BUY)
{
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])

OrderClose(OrderTicket(),OrderLots(),Bid,3) ;
pause ;
}
si(OrderType()==OP_SELL)
{
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])

OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
pause ;
}
}
//----
}
//+------------------------------------------------------------------+
//| Démarrer la fonction |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et le commerce
si(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole actuel
si(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
sinon CheckForClose() ;
//----
}
//+------------------------------------------------------------------+













MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 - это бесплатный инструмент трейдера, позволяющий торговать на форексе и фондовых биржах.
Dossiers :
 
yaaarik777:


Le problème est que je ne comprends pas comment faire pour que l'EA ne compte que les ordres d'une paire particulière, et non le total de toutes les paires dans le terminal.

Je ne comprends pas comment faire pour qu'un EA ne calcule que les ordres d'une paire particulière, et non la somme de toutes les paires dans le terminal.

Je vous serais très reconnaissant de m'aider.

Je vous en serais reconnaissant.

N'hésitez pas à consulter le CodeBase - chaque EA a une boucle d'ordre :-)

Par exemple https://www.mql5.com/ru/code/16588 (le premier sur lequel je suis tombé)

  for(int index = orders-1; index >= 0; index--)
      {
      if(OrderSelect(index,SELECT_BY_POS,MODE_HISTORY)==false)
         {
         Print("Error in history!");
         break;
         }
      if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)
         {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
            {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0) losses++;
            }
         }
      }

La condition"if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)" est exactement ce qui sélectionne les ordres par un symbole spécifique et avec un MAGIC spécifique.

PS/ dans le copier-coller ci-dessus, la rupture de code en cas d'erreur OrderSelect n'est pas tout à fait correcte, utilisez plutôt continue (quelle que soit la raison pour laquelle l'ordre n'est pas choisi, il y a peut-être un problème avec un mécanisme interne de MetaTrader, mais l'ordre suivant ne sera pas sauté).

Middle Moving Average
Middle Moving Average
  • votes : 6
  • 2016.10.18
  • Dmitriy Kudryashov
  • www.mql5.com
Вариант советника, основанного на среднем значении цены для расчета Moving Average.
 
Maxim Kuznetsov:

N'hésitez pas à consulter le CodeBase - chaque EA a une boucle d' ordre :-)

Par exemple https://www.mql5.com/ru/code/16588 (le premier sur lequel je suis tombé)

Non seulement il est dans CodeBase, mais il est dans l'un des deux fils de discussion sur le forum, l'important est de commencer à chercher et il y en aura plus d'une centaine dans différentes interprétations.
 
Merci, je vais visiter
 

Bonjour les gars ! !! Aidez-moi à écrire une fonction qui renverrait un signal d'achat ou de vente. Je ne sais pas encore comment travailler avec les barres dans MQL (bien que je ne sache pas beaucoup de choses !).

La condition est la suivante : la barre parentale est une barre à l'intérieur de laquelle, c'est-à-dire à l'intérieur du haut et du bas, se trouve une barre avec le prix de clôture (c'est important !!! exactement le prix de clôture.) Une fois qu'une barre perce la barre parentale et clôture au-dessus du haut ou en dessous du bas, elle devient maintenant la barre parentale !

Si le prix de clôture de la barre parent est supérieur au prix d'ouverture, nous renvoyons le signal d'achat.

Si le prix de clôture de la barre mère est inférieur au prix d'ouverture, nous renvoyons le signal de vente.

Il est très important de définir le délai dans la variable externe.

Mais voilà le problème, du moins pour moi, comment le Conseiller Expert peut-il trouver la dernière barre mate sur le graphique ? Oui, visuellement je la vois tout de suite ! ....

Il serait pratique pour moi de spécifier l'indice de la dernière barre MAT dans une variable externe, puis la fonction commencera à danser à partir de celle-ci ; ou une autre variante pour prendre une barre avec l'indice, par exemple, 50 et parcourir la boucle jusqu'à zéro.

Très s'il vous plaît aidez l'orphelin !!!

 

Bonjour !

Pouvez-vous me donner une idée ? Nous avons besoin d'un EA qui ne puisse pas ouvrir un ordre si un ordre a déjà été ouvert à ce prix. Comment mettre en œuvre le contrôle ?

 
Kot:

Bonjour !

Pouvez-vous me donner une idée ? Nous avons besoin d'un EA qui ne puisse pas ouvrir un ordre si un ordre a déjà été ouvert à ce prix. Comment mettre en œuvre le contrôle ?

Il s'agit d'une tâche difficile. En désespoir de cause, j'avais l'habitude d'assigner un ordre magique au prix/point souhaité compte tenu du slippage.

C'est beaucoup plus facile dans mql5 : il y a une position avec un prix qui ne correspond pas au prix demandé et un ordre avec le prix demandé.

 
Kot:

Bonjour !

Pouvez-vous me donner une idée ? Nous avons besoin d'un EA qui ne puisse pas ouvrir un ordre si un ordre a déjà été ouvert à ce prix. Comment mettre en œuvre le contrôle ?


Vous écrivez une boucle d'ordres, dans laquelle vous comparez le prix d'ouverture de chaque ordre avec la valeur de prix donnée, et s'il y a une correspondance, alors le drapeau d'un nouvel ordre n'est pas levé.
Raison: