[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 188

 

Et une autre question.

Comment faire pour que (i=1 ; i<StartBar ; i++) StartBar soit la barre avec la courbure spécifiée (extern int b= 2)de l'ancien cadre temporel (extern int = ... ; //W1, MN1)

 
Trouvez l'heure du bar et recalculez-la en fonction du numéro de bar du TF senior.
 
FAQ:
Trouvez l'heure du bar et recalculez-la en fonction du numéro de bar du TF senior.


Pourquoi n'écrivez-vous pas le code ?

 
gince:


Comment faire en sorte que pour (i=1 ; i<StartBar ; i++) StartBar soit la barre avec le coude spécifié (extern int b= 2) de l'ancien cadre temporel (extern int = ... ; //W1, MN1)


Correction

Faire correspondre deux sommets d'une période donnée (disons hebdomadaire et mensuel).

 

Est-ce la bonne façon de procéder ?

Condition tf1 >tf2

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1, zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j, k2=iBars(sy, tf2);
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;}
    }
  }
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      t=iTime(sy, tf2, j);
      if(p1==p2)
      return(t);
    }
  }
  return(0);
}
 

La question est la suivante. Dans le livre MQL4, qui peut être trouvé à MQL4.community , dans le chapitre "GlobalVariables" dans la section "Properties of GV-Variables" il est dit : "Les variables GV ne peuvent avoir que le type double". Ci-dessous, dans la section "Fonction GlobalVariableDel()", on trouve un exemple d'expert globalvar.mq4 avec le contenu suivant :

//--------------------------------------------------------------------
// globalvar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int    Experts;                                 // Колич. экспертов
double Depo=10000.0,                            // Заданный депозит
       Persent=30,                              // Заданный процент     
       Money;                                   // Искомые средства
string Quantity="GV_Quantity";                  // Имя GV-переменной
//--------------------------------------------------------------------
int init()                                      // Спец. функция init
  {
   Experts=GlobalVariableGet(Quantity);         // Получим тек. знач.
   Experts=Experts+1;                           // Колич. экспертов
   GlobalVariableSet(Quantity, Experts);        // Новое значение
   Money=Depo*Persent/100/Experts;              // Средства для эксп.
   Alert("Для эксперта в окне ", Symbol()," выделено ",Money);
   return;                                      // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.
   if (Experts!=New_Experts)                    // Если изменилось
     {
      Experts=New_Experts;                      // Теперь текущ. такое
      Money=Depo*Persent/100/Experts;           // Новое знач. средств 
      Alert("Новое значение для эксперта ",Symbol(),": ",Money);
     }
   /*
   ...
   Здесь долен быть указан основной код эксперта,
   в котором используется значение переменной Money
   ...
   */
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
int deinit()                                    // Спец. ф-ия deinit
  {
   if (Experts ==1)                             // Если эксперт один..
      GlobalVariableDel(Quantity);              //..удаляем GV-перемен
   else                                         // А иначе..
      GlobalVariableSet(Quantity, Experts-1);   //..уменьшаем на 1
   Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузке
   return;                                      // Выход из deinit()
  }
//--------------------------------------------------------------------

Question : pourquoi dans cet exemple les variables GV Expert et New_Expert sont de type int, alors que, comme indiqué précédemment, ces variables devraient être de type double?

Merci d'avance pour la réponse

 
gince:

Est-ce la bonne façon de procéder ?

Condition tf1 >tf2


Quelque chose ne va pas.

Dans le premier cycle, j'essaie de trouver le prix du virage spécifié sur le TF haut. Je commence le deuxième cycle sur le TF bas où je cherche le prix de chaque virage sur les barres tant qu'il est sur le graphique et je le compare avec le prix trouvé dans le premier cycle. Si je trouve un tel prix, je renvoie le temps de la barre du virage donné dans ce TF.

Je l'ai démarré à partir de 2000.01.01 dans le testeur.

Ce qui se trouve dans le journal

2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15 : p1 1.4104

Il en était de même en 2000, c'est-à-dire au début de la période d'essai.

Où se trouve l'erreur. Je suis un faible programmeur. Je veux écrire un programme de test. J'ai du mal à le supporter. Je ne peux pas demander au programmeur de le faire, car cela se fait par étapes, en fonction des données que j'ai reçues.

J'ai besoin d'aide ici. J'ai également demandé de l'aide sur la page précédente pour écrire la fonction NewZZ().

Je serais reconnaissant si quelqu'un pouvait corriger les erreurs et les expliquer.

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1,  zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j;
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;datetime t1=iTime(sy,tf1,i);}
    }
    
  }
  Print("                                  p1   " ,p1);
  Print("                                  t1   ", TimeToStr(t1,  TIME_DATE|TIME_MINUTES));
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      Print("p2=   ",p2);
      t=iTime(sy, tf2, j);
      if(p1==p2)
      {
         Print("skaiciavimo pradzia nuo   ",TimeToStr(t, TIME_DATE|TIME_MINUTES));
         return(t);
      }
    }
  }
  return(0);
}
 
gince:


Quelque chose ne va pas.

Aidez les faibles.

 

Bon après-midi. J'ai trouvé une fonction traînante sur le site web :

for(i=0 ; i<OrdersTotal() ; i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continuer ;
si(OrderType()==OP_BUY)
{
si(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
{si(OrderStopLoss()<Bid-Point*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_,OrderTakeProfit(),0,Green) ;
retour(0) ;
}
}
}

si(OrderType()==OP_SELL)
{
si((OrderOpenPrice()-Ask)>(Point*TrailingStop_))
{
si((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_,OrderTakeProfit(),0,Red) ;
retour(0) ;
}
}
}
}

Lors du test de la stratégie, après l'ouverture du premier ordre, cette fonction fonctionne bien, c'est-à-dire que le suivi s'exécute et que l'ordre se ferme. Mais après avoir ouvert le deuxième ordre, une erreur de division par zéro se produit lors de la référence à la fonction de queue. Veuillez m'aider à faire fonctionner la fonction de suivi pour le deuxième ordre, le troisième ordre, etc.

 
Je ne peux pas parler pour tout le forum, mais personnellement j'ai l'obsession, quand je vois une source sans indentation, qu'il est inutile d'expliquer quoi que ce soit à l'auteur.