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

 
STARIJ:
Voici ce qu'il en est :

É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

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

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()

 
Alexey Viktorov: Je n'ai pas regardé le miracle moi-même.

Merci.

 
Pouvez-vous me dire comment trouver les valeurs maximales et minimales de l'ATR actuel ?
Dossiers :
q6a0hh.PNG  12 kb
 

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

')' - tous les chemins de contrôle ne renvoient pas une valeur Stohastic-Signals-33.mq4 210 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 --



Dossiers :
 
RomanRott: Pouvez-vous me dire comment trouver les valeurs maximale et minimale de l'ATP actuelle ?
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
Pour d'autres indicateurs, de même
 
Skander: Bonjour à tous.j'ai fait un expert simple basé sur Stochstic (en haut pic vend, en bas achète), et le compilateur donne une erreur sur un point plat.
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

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

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 Code 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.

 
STARIJ:

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.