[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 159

 
1Rakso >> :

1) Et comment le rendre invalide, par des variables externes ?

2) Puis-je le paramétrer de telle sorte que le premier ordre ouvert soit fermé à l'ouverture, et que les ordres suivants 2, 3, etc. ne soient pas fermés ? Supposons que j'ouvre un ordre d'achat - c'est le premier ordre, puis un autre ordre d'achat - le deuxième, etc. et que, dans cette série d'ordres, seul le premier ordre soit fermé par СorderClose ?

Consultez les pages d'adresses sur https://www.mql5.com/ru/forum/105913

1) A peu près comme ceci -

extern bool      AutoClose = True;
.......................................


//********* Закрытие позиций ****************************************
if ( AutoClose) {  
//----переменные для закрытия позиций ----
double Stochast_0 =iStochastic(NULL,0, Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0);
double Stochast_1 =iStochastic(NULL,0, Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1);
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if( Stochast_1>75 && Stochast_0<75)     {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if( Stochast_1<25 && Stochast_0>25)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_

2)

Retirez le verrou ( // ) avant

// return(0) ; // exit

et alors seule la première (ou la dernière) position serait fermée.

 
PyMbIH >> :

Bonjour, tout le monde ))))

Aide.

Je viens de commencer à programmer mql4.

Rédaction d'un conseiller expert.

Comment dois-je m'y prendre ?

Je veux que mon conseiller expert ne fonctionne que le lundi.

//Открытие и закрытие  позиций только в понедельник  
      if (TimeDayOfWeek(TimeCurrent()) == 1)
         return (0);  
 
rid писал(а) >>

>> Merci !

 
Vinin >> :

Merci, Vinin =)

 
rid >> :

Regardez dans les "Positions de clôture". Le signal de l'indicateur est activé.

1) A peu près comme ceci -

2)

Supprimez le blocage ( // ) avant

// return(0) ; // exit

et alors seules les premières positions seront fermées.

Merci, rid!

Vous m'avez beaucoup aidé, il y a encore des gens gentils)

J'ai tout compris, je vais aller lire les maths, j'espère que je n'ai pas trop abusé de votre temps ;)

 

Aidez-moi, s'il vous plaît.

Si pendant le test visuel de l'EA 1.mq4 (ci-joint) je mets sur un graphique l'indicateur 3-cci-h3 (ci-joint), alors, comme il semblerait, avec exactement les mêmes paramètres des signaux cci calculés de l'indicateur et le cci réel (texte de l'objet dans le coin supérieur droit) ne coïncident pas.

POURQUOI ?

Pourquoi les alertes ne fonctionnent-elles pas dans cet indicateur ?

Code du conseiller expert :

double lasthigh, lastlow, lasthigh2=200000, lastlow2=0, lastpos=0, t[2];

int start()
{Comment("");
lasthigh=High[1]; lastlow=Low[1];
if( lasthigh< lasthigh2) lasthigh2= lasthigh;
if( lastlow> lastlow2) lastlow2= lastlow;
t[0]= lasthigh2;
t[1]= lastlow2;  
string s1="lasthigh2 *** "+DoubleToStr( t[0],5);
string s2="lastlow2 *** "+DoubleToStr( t[1],5);
string str[2];
str[0]= s1;
str[1]= s2;
color col=Lime;
     for(int y=0; y<2; y++)
     {ObjectCreate("textSignal"+ y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+ y, OBJPROP_CORNER,1);
      ObjectSet("textSignal"+ y, OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+ y, OBJPROP_YDISTANCE, y*(20)+20+8);
      ObjectSetText("textSignal"+ y, str[ y],15,"Tahoma", col);
     }
  
  if( lastpos==0){if( lastlow2> lasthigh){
  Comment("PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!",
  "PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   "); lasthigh2=2000000; lastlow2=0; lastpos=1;}}
  else {if( lasthigh2< lastlow){Comment("POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!",
  "   POKUPKA!!!   POKUPKA!!!   POKEPKA!!!   POKEPKA!!!   POKEPKA!!!"); lasthigh2=2000000; lastlow2=0; lastpos=0;}}

}


Code indicateur :

//+------------------------------------------------------------------+
//|                                                     i-3CCI-h.mq4 |
//|                                               johnfantom & KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  02.01.2006  CCI с 3-х ТФ в одном флаконе.                       |
//+------------------------------------------------------------------+
#property copyright "johnfantom & KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_maximum 1.4
#property indicator_level1  0
#property indicator_minimum -1.2

//------- Внешние параметры индикатора -------------------------------
extern int CCI_Period_0 = 14;     // Период CCI для текущего ТФ
extern int Level_0      = 100;    // Уровень CCI для текущего ТФ
extern int TF_1         = 60;     // Количество минут первого ТФ
extern int CCI_Period_1 = 14;     // Период CCI для первого ТФ
extern int Level_1      = 100;    // Уровень CCI для первого ТФ
extern int TF_2         = 240;    // Количество минут второго ТФ
extern int CCI_Period_2 = 14;     // Период CCI для второго ТФ
extern int Level_2      = 100;    // Уровень CCI для второго ТФ
extern int NumberOfBars = 1000;  // Количество баров обсчёта (0-все)
extern int ExtBars=3; 
int per;


//------- Буферы индикатора ------------------------------------------
double buf0[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  IndicatorDigits(1);

  SetIndexBuffer(0, buf0);
  SetIndexLabel (0, "i-3CCI-h");
  SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
  SetIndexEmptyValue(0, 0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  Comment("");
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  double cci0, cci1, cci2;
  int    nb1, nb2, count;
  int    LoopBegin, sh;


 	if ( NumberOfBars==0) LoopBegin=Bars-1;
  else LoopBegin= NumberOfBars-1;
  LoopBegin=MathMin(Bars-1, LoopBegin);
  count=IndicatorCounted();
  for ( sh= count; sh>=0; sh--) {
    nb1=iBarShift(NULL, TF_1, Time[ sh+1], False);
    nb2=iBarShift(NULL, TF_2, Time[ sh+1], False);

    cci0=iCCI(NULL, 0   , CCI_Period_0, PRICE_CLOSE, sh+1);
    cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
    cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
    
   /* double cci[3];
    cci[0]=cci0;
    cci[1]=cci1;
    cci[2]=cci2;
    string s1="cci-0 *** "+DoubleToStr(cci[0],3);
    string s2="cci-1 *** "+DoubleToStr(cci[1],3);
    string s3="cci-2 *** "+DoubleToStr(cci[2],3);
    string str[3];
    str[0]=s1;
    str[1]=s2;
    str[2]=s3;
    color col=Lime;
     for(int y=0;y<3;y++)
     {ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+y,OBJPROP_CORNER,1);
      ObjectSet("textSignal"+y,OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
      if(cci[y]>=0)col=Lime;else col=Red;
      if(cci[y]>Level_0) col=Aqua;
      if(cci[y]<-Level_0) col=DarkViolet;
      ObjectSetText("textSignal"+y,str[y],15,"Tahoma",col);
     }
*/
    if ( cci0> Level_0 && cci1> Level_1 && cci2> Level_2) { buf0[ sh]=1;
    if ( per != Time[0]) { per = Time[0];
    if( sh<= ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[ sh]),".",
                              TimeDay(Time[ sh]),".",
                              TimeMonth(Time[ sh]),"; ",
                              TimeHour(Time[ sh]),":",
                              TimeMinute(Time[ sh])," ",
                              "Покупка");}}
    if ( cci0<- Level_0 && cci1<- Level_1 && cci2<- Level_2) { buf0[ sh]=-1;
    if ( per != Time[0]) { per = Time[0];
    if( sh<= ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[ sh]),".",
                              TimeDay(Time[ sh]),".",
                              TimeMonth(Time[ sh]),"; ",
                              TimeHour(Time[ sh]),":",
                              TimeMinute(Time[ sh])," ",
                              "Продажа");}}
  }
}
//+------------------------------------------------------------------+
 
sergeev >> :

comme ça pour bystop :




Et comment définir l'attente à partir de la position ouverte elle-même ?

 
ArtY0m >> :

Comment placer l'ordre en attente lui-même ?

Tout d'abord, vous devez déterminer le prix d'ouverture de la dernière position ouverte de manière programmatique.

Pour ce faire, vous pouvez utiliser une fonction prédéfinie, par ex.

Fonction PriceOpenLastPos().
Cette fonction renvoie le prix ouvert de la dernière position ouverte. La sélection des positions à prendre en compte est spécifiée par des paramètres externes :
sy - Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut - "" signifie tout instrument de marché. La valeur NULL signifie l'instrument actuel.
op - Opération commerciale, type de poste. Valeurs valides : OP_BUY, OP_SELL ou -1. La valeur par défaut -1 signifie une position quelconque.
mn - Identificateur de position, MagicNumber. La valeur par défaut de -1 signifie n'importe quel identifiant.
Fonctions utiles de KimIV

//-------

Insérez la fonction elle-même à la toute fin de votre code.

Et vous l'appelez dans la fonction START et définissez le prix d'ouverture de la dernière position dont vous avez besoin (achat ou vente), par exemple.

double OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

 
rid >> :

Tout d'abord, vous devez déterminer le prix de la dernière position ouverte de manière programmatique.

Pour ce faire, vous pouvez utiliser une fonction prédéfinie, par ex.

Fonction PriceOpenLastPos().
Cette fonction renvoie le prix d'ouverture de la dernière position ouverte. La sélection des postes à prendre en compte est définie par des paramètres externes :
sy - Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de cet instrument. La valeur par défaut - "" signifie tout instrument de marché. La valeur NULL signifie l'instrument actuel.
op - Opération commerciale, type de poste. Valeurs valides : OP_BUY, OP_SELL ou -1. La valeur par défaut -1 signifie une position quelconque.
mn - Identificateur de position, MagicNumber. La valeur par défaut de -1 signifie n'importe quel identifiant.

Fonctions utiles de KimIV

//-------

Insérez la fonction elle-même à la toute fin de votre code.

Dans la fonction START, vous l'appelez et définissez le prix d'ouverture de la dernière position que vous souhaitez (achat ou vente), par exemple

double OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

Merci beaucoup !))

 

Dans Indicator, si une condition est remplie, je veux saisir une ligne avec une note dans un fichier texte (peu importe quoi, disons la date et l'heure).

Le fichier est créé et la ligne est ajoutée, mais seulement en temps réel. Moi, par contre, je veux prendre des notes quand je travaille sur l'histoire. Quelqu'un sait-il comment faire ?

Merci !