Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 638

 

Ma question s'adresse à un débutant :

J'ai récemment découvert que MetaEditor ne s'ouvre pas dans le terminal, et que la commande "change" ne fonctionne pas dans les Expert Advisors et les indicateurs .............. Veuillez m'aider à ce sujet. Veuillez m'aider à le découvrir.

 
gnawingmarket:

Ma question s'adresse à un débutant :

J'ai récemment découvert que MetaEditor ne s'ouvre pas dans le terminal, et que la commande "modifier" ne fonctionne pas dans les EA et les indicateurs .............. Veuillez m'aider à ce sujet. Merci.


Je vais essayer de répondre à cette question.

Il n'est plus possible de corriger les anciens codes de travail.

 
Mais vous avez un prince couronné.
 
tara:
Au moins, tu as un prince à couronner.


Tu sais tout ! Aujourd'hui, je n'ai pas pu attraper qui m'a mis Administrateur, et je n'ai pas eu le mot de passe, et je n'ai pas pensé à demander ! Je l'aurai demain ! Qu'est-ce que tu fais debout ?

Merci Tara pour ta participation ! Mon voisin du quartier m'a tout restitué ! Expert en informatique !

 
Top2n:

Oui, je comprends qu'il y a beaucoup de questions stupides. Honnêtement, j'ai essayé toute la journée, mais sans résultat.

J'écris les valeurs de prix de plusieurs lignes de tendance sur la barre actuelle dans un tableau.

Comment puis-je supprimer une valeur du tableau s'il n'y a pas d'objet ?

artmedia70:

Si nous parcourons les valeurs des prix des lignes de tendance à chaque tick, que nous initialisons le tableau et que nous augmentons sa dimension lorsque nous trouvons le prochain prix nécessaire de la ligne de tendance nécessaire, alors il ne sera pas nécessaire de supprimer les valeurs des lignes de tendance supprimées du tableau. Le tableau sera dynamique, et à chaque fois à chaque tick, il ne contiendra que les valeurs des objets existants.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

J'essaie de créer un oscillateur autour de 0 à partir du prix de clôture dans une fenêtre séparée, mais je n'y arrive pas. Peut-être que quelqu'un l'a déjà fait, pourriez-vous me donner la formule ?

C'est-à-dire que nous avons le prix Close[i], j'ai besoin que ce prix passe au-dessus/au-dessous de zéro comme dans MACD/CCI, dans une fenêtre séparée, mais j'ai beau essayer, je ne peux pas le faire sans valeurs supplémentaires comme MA : maintenant j'obtiens quelque chose de similaire si je soustrais iClose-iMA, mais peut-être y a-t-il des variantes sans lissage ?

Ou dans l'intervalle 0.0...1.0 s'il n'y a pas moyen de contourner le zéro...

 
Top2n:

La méthode de recherche dans celle qui suit est légèrement différente :

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

Ajoutez deux lignes de tendance blanches avec les noms correspondants au graphique et vous l'avez :

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

N'écrivez pas des fonctions d'un kilomètre de long, découpez le programme en courtes "phrases" - "briques". Les petites "briques" en font de plus grandes, et les plus grandes en font d'encore plus grandes. Vous voyez, c'est possible.

Transmettre toutes les données aux fonctions uniquement via les paramètres.

Veillez à gérer les erreurs si la fonction appelée échoue. Si l'erreur est ignorée, la suite des opérations aura de graves conséquences. La grande majorité des plantages de programmes (en général) se produisent parce que la gestion des erreurs n'est programmée d'aucune façon.

Par exemple, si ArrayResize(), appelé pour agrandir la taille du tableau, renvoie une erreur, et que le programmeur ne l'a pas vérifié et se réfère au tableau supposé agrandi, une erreur se produit qui fait que le programme MQL4 ne fonctionne plus par la suite. Le conseiller expert, par exemple, arrête les transactions en laissant des positions ouvertes. N'est-ce pas génial ?

Essayez d'insérer "array[0] = 0 ;" avant la boucle de la fonction MassTrendNumber(), et assurez-vous que le script se termine après l'erreur de dépassement de tableau.

 
evillive:

J'essaie de créer un oscillateur autour de 0 à partir du prix de clôture dans une fenêtre séparée, mais je n'y arrive pas. Peut-être que quelqu'un l'a déjà fait, pourriez-vous m'indiquer la formule ?

C'est-à-dire que nous avons le prix Close[i], j'ai besoin que ce prix passe au-dessus/au-dessous de zéro comme dans MACD/CCI, dans une fenêtre séparée, mais j'ai beau essayer, je ne peux pas le faire sans valeurs supplémentaires comme MA : maintenant j'obtiens quelque chose de similaire si je soustrais iClose-iMA, mais peut-être y a-t-il des variantes sans lissage ?

Ou dans l'intervalle 0.0...1.0 s'il n'y a pas moyen de contourner le zéro...


https://www.mql5.com/ru/code/9340
 

Oh, c'est à peu près ça. Rien n'est nouveau dans ce monde ;)))
 
simpleton:

La méthode de recherche ci-dessous est légèrement différente :

Ajoutez au graphique deux lignes de tendance blanches avec les noms correspondants et le tour est joué :

N'écrivez pas des fonctions d'un kilomètre de long, découpez le programme en courtes "phrases" - "briques". Les petites "briques" en font de plus grandes, et les plus grandes en font d'encore plus grandes. Vous voyez, c'est possible.

Transmettez uniquement toutes les données aux fonctions via les paramètres.

Veillez à gérer les erreurs si la fonction appelée échoue, et l'action ultérieure si l'erreur est ignorée aura de graves conséquences. La grande majorité des plantages de programmes (en général) se produisent parce que la gestion des erreurs n'est programmée d'aucune façon.

Par exemple, si ArrayResize(), appelé pour agrandir la taille du tableau, renvoie une erreur, et que le programmeur ne l'a pas vérifié et se réfère au tableau supposé agrandi, une erreur se produit qui fait que le programme MQL4 ne fonctionne plus par la suite. Le conseiller expert, par exemple, arrête les transactions en laissant des positions ouvertes. N'est-ce pas génial ?

Essayez d'insérer "array[0] = 0 ;" avant la boucle dans MassTrendNumber() et assurez-vous que le script se termine après l'erreur de dépassement de tableau.


Oui, merci beaucoup, vous êtes au-delà des mots, tellement utile, tellement clair ! Awesomeooo !!!