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

 
STARIJ:
écrire un script et après chaque instruction afficher l'information + GetLastError() avec Alert() - voir exemple de script ci-dessus
Comment faire si j'ai une erreur dans mon code ? Alert() ne m'aidera pas si le script ne fonctionne pas !
 
Lowech:
Comment puis-je faire cela si j'ai une erreur dans mon code ? Alert() ne m'aidera pas si le script ne fonctionne pas !

Jetez tout sauf la première ligne du script et ajoutez Alert. Puis ajoutez-la progressivement - apprenez à programmer et à déboguer.

 
LRA:
C'était rapide. Comment allez-vous chercher les bars ? Dans une boucle ou en utilisant la structure temporelle ?

EUR USD

//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//| если первая пятница месяца была бычьей, а             |
//| 2-й понедельник медвежий - открываем сделку на продажу|
//+-------------------------------------------------------+
#property strict
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;

// Если день начала месяца = 6, то число первой пятницы равно 7. Иначе 6 - день начала месяца
  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;

// Если день начала месяца < 2, то число второго понедельника равно 9 - день начала месяца. Иначе 16 - день начала месяца
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;
  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>=День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;   // Отключил до числа, следующего за вторым понедельником
  }

  int Продавать=0;
  for(int Бар=0;;Бар++)  //  Ищем на D1 номера баров для заданных чисел месяца
  {
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоВторогоПонедл)
    {
      if(iClose(NULL,PERIOD_D1,Бар)<iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
      break;
    }
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоПервойПятницы)
      if(iClose(NULL,PERIOD_D1,Бар)>iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
  }
  if(Продавать==2) bool x=OrderSend(_Symbol, OP_SELL, 0.1, Bid, 7, 0, 0);
}
 
LRA:

supprimez tout le script sauf la première ligne et ajoutez Alert, puis ajoutez-le progressivement - apprenez à programmer et à déboguer.

Cela n'a pas fonctionné( mais merci pour votre aide.
 
int 1 = OrdersHistoryTotal() ;
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon. J'ai besoin d'aide, je dois fermer un ordre de vente et ensuite l'ordre suivant ne peut être qu'un ordre d'achat ouvert, je veux utiliser l'historique des ordres pour trouver le dernier ordre fermé et connaître son type, mais je ne peux pas le faire (qui sait ce que je fais mal, dites-le moi) si je ne connais pas la réponse, qui m'aiderait à faire fonctionner le code, s'il vous plaît n'écrivez pas !
 
Lowech:
int 1 = OrdersHistoryTotal() ;
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon. J'ai besoin d'aide, je dois fermer un ordre de vente et ensuite l'ordre suivant ne peut être qu'un ordre d'achat ouvert, je veux utiliser l'historique des ordres pour trouver le dernier ordre fermé et connaître son type, mais je n'y arrive pas (qui sait ce que je fais mal, dites-le moi) si je ne connais pas la réponse, qui m'aiderait à faire fonctionner le code, s'il vous plaît n'écrivez pas !
Lorsque nous essayons de traduire - affiche un message d'erreur : '1' - nom attendu. Le nom de la variable est requis à la place du numéro 1
 

Bonsoir, ci-dessous le code, j'ai écrit un compteur de ticks, mon idée est que les ticks sont comptés sur chaque barre dans la boucle, sur chaque nouvelle barre le compteur est remis à zéro, quand je lance l'indicateur il dit dans les commentaires que sur la barre précédente 1 tick et les ticks actuels commencent à compter à partir de

Si j'essaie d'utiliser un sprite magique différent, je ne sais pas pourquoi j'ai essayé de l'utiliser mais je ne sais pas pourquoi j'ai essayé de l'utiliser. Peut-être que je l'ai mal écrit ?

#property indicator_chart_window
double old_price;
double count_plus=0,count_minus=0,sum=0,psum=0;
bool Fun_New_Bar=false;
datetime Prev_Time=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

  double price;
  int i=0;
  int limit; 
  double delta; 
limit=rates_total-prev_calculated;
if(prev_calculated<1) limit=rates_total-1;
for(i=limit; i>=0; i--)  
{
 if (Fun_New_Bar==false)                              
  {                                             
   
   if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];
      psum=sum;
      count_plus=0;
      count_minus=0;
      sum=0;                         
      Fun_New_Bar=false;                            
     }
    } 
  if(old_price==0) old_price=close[i];
   
    price = close[i];
    delta = price - old_price;
     
     //-- считаем "верхние" тики 
    if(delta>=0) {
      count_plus++;
               }
      
     //-- считаем "нижние" тики
    if(delta<0) {
      count_minus++;
        }
    sum=count_minus+count_plus;   
        //----
    old_price=price;
    
  Comment(StringFormat("Выводим цены\ncount_minus = %G\ncount_plus = %G\nsum = %G\npsum = %G",count_minus,count_plus,sum,psum));
}

   return(rates_total);
  }
 
PokrovMT5:

Bonsoir, ci-dessous le code, j'ai écrit un compteur de ticks, mon idée est que les ticks sont comptés sur chaque barre dans la boucle, sur chaque nouvelle barre le compteur est remis à zéro, quand je lance l'indicateur il dit dans les commentaires que sur la barre précédente 1 tick et les ticks actuels commencent à compter à partir de

Si j'essaie d'utiliser un sprite magique différent, je ne sais pas pourquoi j'ai essayé de l'utiliser mais je ne sais pas pourquoi j'ai essayé de l'utiliser. Peut-être que je l'ai mal écrit ?

Si je comprends bien le problème et la question, les ticks ne sont pas enregistrés dans l'historique. Jetez un coup d'œil à mon indicateur.

 
Alexey Viktorov:

Si j'ai bien compris le problème et la question, il n'enregistre pas les ticks dans l'historique. Voir mon indicateur.


Le lien ne fonctionne pas, il indique qu'il n'y a pas de page.

 
PokrovMT5:

Bonsoir, ci-dessous le code, j'ai écrit un compteur de ticks, mon idée est que les ticks sont comptés sur chaque barre dans la boucle, sur chaque nouvelle barre le compteur est remis à zéro, quand je lance l'indicateur il dit dans les commentaires que sur la barre précédente 1 tick et les ticks actuels commencent à compter à partir de

Si j'essaie d'utiliser un sprite magique différent, je ne sais pas pourquoi j'ai essayé de l'utiliser mais je ne sais pas pourquoi j'ai essayé de l'utiliser. Peut-être que je l'ai mal écrit ?

retourner rates_total-1 ou 0

Raison: