Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 402
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Événement de clic de souris sur un objet graphique
CHARTEVENT_OBJECT_CLICK
Coordonnée X
Coordonnée Y
Nom de l'objet graphique où l'événement s'est produit
Ugh, je pense que j'ai tout eu)
Merci pour votre aide !
Je ne sais pas comment lier le résultat "r" à un tampon pour l'afficher sur un graphique, merci de me conseiller.
Je n'arrive pas à comprendre les exemples dans les manuels, j'ai demandé aux gens
Ils écrivent : "Écrivez la valeur de "r" dans la mémoire tampon, et elle apparaîtra sur le graphique" et "Habituellement, vous écrivez dans la mémoire tampon à travers une boucle for. "
mais ça ne me dit rien du tout !
Un résultat est juste la lettre "r" et c'est tout, je ne peux pas le trouver n'importe où.
Et encore une chose
comment lisser le résultat "r" par exemple.
Merci de votre attention !Quelle est l'erreur ? Lors de l'exécution dans le testeur, la fonction supprime l'ordre en attente et parfois non. Pourquoi ? Le principe de fonctionnement est le suivant : lorsque l'ordre d'achat est clôturé par TP, la BuyLimit est supprimée. Veuillez me conseiller
Quelle est l'erreur ? Lors de l'exécution dans le testeur, la fonction supprime l'ordre en attente et parfois non. Pourquoi ? Le principe de fonctionnement est le suivant : lorsque l'ordre d'achat est clôturé par TP, la BuyLimit est supprimée. Veuillez me conseiller.
OrdersTotal() != OrdersHistoryTotal()
Merci.
Bonjour à tous.
J'ai créé un conseiller expert simple basé sur le Stochstick (vend sur le pic supérieur, achète sur le pic inférieur), et le compilateur donne une erreur sur le champ.
Quelqu'un peut-il me dire quelle est la raison et ce que signifie cette erreur ? Au début, je pensais avoir oublié de mettre une parenthèse quelque part.
Mais non, je l'ai vérifié plusieurs fois et tout semble être OK. Je vous serai très reconnaissant de m'aider.
Voici les erreurs que le compilateur génère : ')'. - tous les chemins de contrôle ne renvoient pas une valeur Stohastic-Signals-33.mq4 177 3
Voici le conseiller expert lui-même et un fichier mq4 joint également :
Veuillez indiquer comment joindre le conseiller expert à ce fichier (dans l'éditeur avec des lettres de couleur).
//+------------------------------------------------------------------+
//| Stohastic-Signals-33.mq4
//| Copyright 2017, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte
//+------------------------------------------------------------------+
bool New_Bar=false ; // indicateur d'une nouvelle barre.
extern double H_line=80 ; // Ligne stochastique supérieure (surachat)
extern double L_line=20 ; // Ligne inférieure (survente) du stochastique
extern inttern Slippage=2 ; // Slippage
extern int SL ; // SL de l'ordre en cours de définition
extern int TP ; // TP de l'ordre en cours de définition
extern double Lts ; //La taille du lot de l'ordre en cours de définition
bool B_Flag=false ; // drapeau de signal pour BUY
S_Flag=false, // Drapeau pour un signal de VENTE
ORD_Buy=false, // Drapeau d'ouverture de position d'achat
ORD_Sell=false ; // Le drapeau ouvre une position de vente.
bool Work=true ; // Drapeau qui permet à l'expert de travailler. true-no critical error, false-existent.
string Symb ; // Nom de l'instrument financier
int Crit_Error=11111111 ; // Nombre d'erreurs critiques
//+------------------------------------------------------------------+
//| fonction tick expert |
//+------------------------------------------------------------------+
void OnTick()
{
int
Total, // Nombre de commandes dans la fenêtre
Tip=-1, // Type de commande sélectionné (B=0,S=1)
Ticket ; // Numéro de commande
double
M_1, M_2, M_3, // Valeur MAIN sur 1, 2 et 3 mesures
Lot ; // Nombre de lots dans l'ordre sélectionné
bool Ans_Close ; // Drapeau de fermeture d'ordre réussie (1-fermé, 0-non fermé)
bool Ans_Open ; // Indique si l'ordre a été ouvert avec succès (1-fermé, 0-non ouvert).
//--------------------------------------------------------------- 1 --
// Vérifier la présence d'une erreur critique
if(Work==false) // Erreur critique
{
Alert("Erreur critique. Le conseiller expert ne fonctionne pas ;)
return ; // Sortie de start()
}
//--------------------------------------------------------------- 2 --
// Nouvelle barre
Fun_New_Bar() ; // Appel de la fonction
if (New_Bar==false) // Si la barre n'est pas nouvelle
return ; // ...puis sortie
//------------------------------------------------------------- 3 --
// Comptage des commandes
Symb=Symbol() ; // Nom de l'instrument financier.
Total=0 ; // Nombre de commandes
for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle de commande
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Si ce qui suit se produit
{ // Analyse de l'ordre :
if (OrderSymbol()!=Symb)continue ; // Pas notre instrument financier
Ticket=OrderTicket() ; // Numéro de commande sélectionné.
Tip =OrderType() ; // Type de la commande sélectionnée.
Lot=OrderLots() ; // Nombre de lots
}
sinon
{
Alert("OrderSelect() returned an error - ",GetLastError()) ; // Si la commande n'a pas pu être sélectionnée, alors .
return ; // Sortie
}
}
//------------------------------------------------------------- 4 --
// Critères commerciaux Analyse de la situation
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 barre
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 bar
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 bar
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // si la stohastique a franchi la ligne de surachat
{
if(M_3 <= M_2 && M_2 > M_1) // La stohastique a franchi la ligne de surachat {...
{
if(S_Flag==true) // Si la position de vente est ouverte, alors ...
return ; // Quitter start()
// Si la position de vente n'est pas ouverte, alors ...
S_Flag=true ; // nous mettons un drapeau indiquant que le signal de vente est apparu.
B_Flag=false ; // vérifie que le signal d'achat n'est pas apparu.
if(ORD_Buy==true) // Si un ordre d'achat a été ouvert,...
{
if(Tip!=0) // Vérification : l'ordre TYPE ne correspond pas à l'ordre ouvert...
{
Work=false ; //Le conseiller expert ne fonctionnera pas.
Alert("L'ordre TYPE ne correspond pas à l'ordre ouvert FLAG. Quitter le démarrage.") ; // Si la correspondance n'existe pas, le conseiller expert cesse de fonctionner.
return ; // Sortir du début
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip) ; // Ferme l'ordre d'achat ouvert
if(Ans_Close==false) // Si la fermeture a échoué, alors...
{
Alert("Impossible de clôturer l'ordre. Le conseiller expert cesse de fonctionner. Numéro d'erreur critique ", Crit_Error) ;
return ; // Sortie
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1) ; // POINTS D'OUVERTURE
if(Ans_Open==false) // si l'ouverture de Sell a échoué
{
Alert("Impossible d'ouvrir la commande. Le conseiller expert cesse de fonctionner. Numéro d'erreur critique ", Crit_Error) ;
return ; // Sortir du début
} // Si la vente a été ouverte avec succès
ORD_Sell=true ; // nous mettons un drapeau indiquant qu'une position SHORT a été ouverte.
ORD_Buy=false ; // Marquer la position LONG comme disparue.
}
return ; // Sortie du départ
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Si la stohastique a franchi la ligne de survente
{
if(M_3 >= M_2 && M_2 < M_1) // Le pic inférieur apparaît (BUY CALL)
{
if(B_Flag==true) // Si la position d'achat est ouverte
return ; // Quitter start()
// Si aucune position d'achat n'est ouverte, alors...
B_Flag=true ; // Drapeau positif pour l'ouverture d'une position d'achat.
S_Flag=false ; // vérifie qu'il n'y a pas de signal de VENTE.
if(ORD_Sell==true) // S'il y a un ordre de vente ouvert,...
{
if(Tip!=1) // Vérification : l'ordre TYPE ne correspond pas à l'ordre ouvert...
{
Work=false ; //Le conseiller expert ne fonctionnera pas.
Alert("L'ordre TYPE ne correspond pas à l'ordre ouvert FLAG. Quitter le démarrage.") ; // Si la correspondance n'existe pas, le conseiller expert cesse de fonctionner.
return ; // Sortir du début
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip) ; // Ferme l'ordre de vente ouvert
if(Ans_Close==false) // Si la fermeture a échoué
{
Alert("Impossible de clôturer l'ordre. Le conseiller expert cesse de fonctionner. Numéro d'erreur critique ", Crit_Error) ;
return ; // Sortie
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0) ; // OUVRIR UNE POSITION LONGUE
if(Ans_Open==false) // en cas d'échec de l'ouverture de l'Achat
{
Alert("Impossible d'ouvrir la commande. Le conseiller expert cesse de fonctionner. Numéro d'erreur critique ", Crit_Error) ;
return ; // Sortir du début
} // Si l'ordre d'achat a été ouvert avec succès
ORD_Sell=false ; // vérifie qu'il n'y a pas de position courte.
ORD_Buy=true ; // Drapeau d'ouverture de position LONG
}
return ; // Sortie du départ
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // La fie de détection .
{ // ... nouvelle barre.
static datetime New_Time=0 ; // heure de la barre actuelle
New_Bar=false ; // Pas de nouvelle barre.
if(New_Time!=Time[0]) // compare le temps
{
New_Time=Time[0] ; // L'heure actuelle est la suivante
New_Bar=true ; // La nouvelle barre est prise en compte.
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Fie de fermeture de commande
{
double Close_Price=0 ; // Prix de clôture de l'ordre
while(true)
{
RefreshRates() ; // Mise à jour des données
if(F_Tip==0) // Si l'ordre est d'acheter, ...
Close_Price=Bid ; // Prix de clôture Bid
Close_Price=Ask ; // Si l'ordre est de vendre, le prix de clôture sera Ask.
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage) ; // Clôture d'un achat ou d'une vente
if (Ans_Close==true) // Cela a marché :)
return(true) ; // Sortie de la fonction de fermeture.
Crit_Error=GetLastError() ; // Fixe le numéro d'erreur
if (Fun_Error(Crit_Error)==1) // Traitement des erreurs
continuer ; // réessayer ; // réessayer encore.
return(false) ; // Sortie de la fonction
}
}
//--------------------------------------------------------------- 9 --
//Commande ouverte
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Open_Price ; //prix d'ouverture
string Tip_Deal ; // Sens de la transaction(Achat ou Vente)
double f_sl ; // ordre de Stop Loss
double f_tp ; // Prise de profit
int Ticket ; // Ticket de l'ordre ouvert
while(true) // Commande la fermeture de la boucle.
{
RefreshRates() ; // Mise à jour des données
if(F_Tip==1) // Ouvrir VENTE...
{
Prix_ouvert=Enchère ;
Tip_Deal="OP_SELL" ;
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits) ;
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits) ;
}
//-------------------------------- Si vous voulez ouvrir BUY, alors...
Open_Price=Demander ;
Tip_Deal="OP_BUY" ;
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits) ;
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits) ;
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//ouvrir l'ORDRE
if (Ticket > 0) // ça a marché :)
return(true) ; //sortir de la fonction
Crit_Error=GetLastError() ; // numéro de l'erreur commise
if (Fun_Error(Crit_Error)==1) // Traitement des erreurs
continuer ; // réessayer ; // réessayer encore.
return(false) ; // Sortie de la fonction
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //Fonction gérant les erreurs
{
switch(Erreur)
{ // Des erreurs insurmontables.
cas 4 : Alert("Le serveur commercial est occupé. Essayez à nouveau...") ;
Sleep(3000) ; // Solution simple.
return(1) ; // Sortie de la fonction.
cas 135:Alert("Le prix a changé. Essayez à nouveau...") ;
RefreshRates() ; // Rafraîchit les données.
return(1) ; // Sortie de la fonction.
cas 136:Alert("Pas de prix. En attente d'un nouveau tick...") ;
while(RefreshRates()==false) // Till a new tick
Sleep(1) ; // Délai dans la boucle
return(1) ; // Sortie de la fonction
cas 137:Alert("Broker is busy. Try again...") ;
Sleep(3000) ; // Solution simple.
return(1) ; // Sortie de la fonction.
cas 146:Alert("Le sous-système de négociation est occupé. Essayez à nouveau...") ;
Sleep(500) ; // Décision simple
return(1) ; // Sortie de la fonction
// Erreurs critiques
cas 2 : Alert("Erreur générale ;)
return(0) ; // Sortie de la fonction.
cas 5 : Alert("Ancienne version du terminal.") ;
Work=false ; // Ne plus travailler
return(0) ; // Sortie de la fonction
cas 64 : Alert("Compte bloqué.") ;
Work=false ; // Ne plus travailler
return(0) ; // Sortie de la fonction
cas 133:Alert("Trading interdit.") ;
return(0) ; // Sortie de la fonction
cas 134:Alert("Pas assez d'argent pour exécuter la transaction.") ;
return(0) ; // Sortie de la fonction
default : Alert("An error has occurred ",Error) ; // Autres options
return(0) ; // Sortie de la fonction
}
}
//-------------------------------------------------------------- 11 --
Quelqu'un peut-il me dire quelle est la raison et ce que signifie cette erreur ? Au début, je pensais avoir oublié de mettre une parenthèse quelque part.
Mais non, je l'ai vérifié plusieurs fois et il semble que tout soit en ordre avec les parenthèses. Je vous serai très reconnaissant de m'aider.
Voici les erreurs que le compilateur génère : ')'. - tous les chemins de contrôle ne renvoient pas une valeur Stohastic-Signals-33.mq4 177 3
')' - tous les chemins de contrôle ne renvoient pas une valeur Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Fie de fermeture de commande
{
double Close_Price=0 ; // Prix de clôture de l'ordre
while(true)
{
RefreshRates() ;// Rafraîchir les données
si(F_Tip==0)// Si (ordre d'achat, ...
Close_Price=Bid ; // Prix de clôture Bid
Prix de clôture=Demande ;// Si ordre de vente, prix de clôture Demande
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage) ; // Clôture d'un achat ou d'une vente
si (Ans_Close==true)// Cela a marché :)
retour (vrai) ;// Sortie de la fonction de fermeture
Crit_Error=GetLastError() ;// numéro d'erreur de validation
if (Fun_Error(Crit_Error)==1) // Traitement des erreurs
continuer ;// réessayer
retour (faux) ;// Quitter la fonction
}
}
Appuyez sur le bouton Compiler dans MetaEditor et lisez le message d'erreur - il y a un numéro de ligne et de position
Insérez le code du programme avec le bouton SRC - les lecteurs locaux l'apprécient davantage de cette façon !!! et votre long radotage est BRRRR
Le bouton permet d'insérer le code source dans le texte du message. En cliquant dessus, une fenêtre vide apparaît dans laquelle vous devez coller le code, puis cliquer sur le bouton Insérer.
Appuyez sur le bouton Compiler dans MetaEditor et lisez le message d'erreur - il y a un numéro de ligne et de position
Insérez le code du programme avec le bouton SRC - les lecteurs locaux l'apprécient davantage de cette façon !!! et votre long discours est BRRRRRR
Ce bouton permet d'insérer le code source dans le texte du message. Lorsque vous cliquez dessus, une fenêtre vide apparaît dans laquelle vous devez coller le code, puis cliquer sur le bouton Insérer.
Merci.