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

 
Roman Efimov:
En général, le problème est le suivant ! Je veux trawler le profit avec un autre EA mais cet EA ne me laisse pas tirer le stop loss pour le profit ! Quelqu'un peut-il le réparer ? L'auteur ne répond pas !

Mettez donc "0" dans les paramètres d'entrée et il n'y aura pas de trailing stops.

extern int TrailingStop = 0; // Trailing Stop, si 0, pas de Trailing Stop

 
Vitaly Muzichenko:
Comment est-il possible de supprimer un indicateur spécifique de tous les graphiques d'un seul coup ? L'application d'un nouveau modèle ne fonctionne pas. Peut-être un script ?

Vous devez toujours fermer le graphique pour supprimer l'indicateur.

Pourquoi le modèle ne s'adapte-t-il pas ? - Le Conseiller Expert y est accroché ? - Vous pouvez enregistrer le conseiller expert dans un modèle de graphique et appliquer le modèle dans le même EA - le conseiller expert sera supprimé et il fonctionnera à nouveau sur ce modèle.

 
Igor Makanu:

Vous devez toujours fermer le graphique pour supprimer l'indicateur.

Pourquoi le modèle ne s'adapte-t-il pas ? - Le Conseiller Expert y est accroché ? - J'ai vérifié, vous pouvez enregistrer le conseiller expert dans un modèle de graphique et appliquer le modèle à partir du même conseiller expert - le conseiller expert sera supprimé et ensuite relancé sur ce modèle.

Vous ne pouvez pas changer le modèle sur différentes dispositions de graphiques, etc.)

 
Vitaly Muzichenko:

Sur les différents tableaux de balisage et autres, vous ne pouvez pas remplacer le motif)

Googlé, il y a ChartIndicatorDelete().

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

Je ne l'ai jamais utilisé, je ne peux rien dire

ChartIndicatorDelete - Операции с графиками - Справочник MQL4
ChartIndicatorDelete - Операции с графиками - Справочник MQL4
  • docs.mql4.com
Удаляет с указанного окна графика индикатор с указанным именем. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError...
 
Igor Makanu:

Googlé, il y a ChartIndicatorDelete().

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

Je ne l'ai jamais utilisé, donc je ne peux rien dire.

Oui, merci, Alexey m'a déjà prévenu.

C'est fait comme ça, tout fonctionne sauf : Comment puis-je l'écrire comme par magie pour avoir le choix dans les paramètres d'entrée de celui à supprimer ?

#property version   "1.00"
#property strict
#property show_inputs

enum ind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input string ProgName = "Candles Signal";

long list_id[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
 int size=ChartGetIDList(list_id);
  //
  for(int i=size-1;i>=0;i--) {
   long id=list_id[i];
   for(int k=ChartIndicatorsTotal(id,0);k>=0;k--) {
    if(ChartIndicatorName(id,0,k)==ProgName) {
     Print(ChartSymbol(id),"=",ChartIndicatorName(id,0,k));
     ChartIndicatorDelete(id,0,ProgName);
    }
   }
  }
 }
//+------------------------------------------------------------------+
int ChartGetIDList(long &List[]) {
 int i=0;
 long chartID=ChartFirst();
 while(chartID!=-1) {
    i++;
     ArrayResize(List,i);
     List[i-1]=chartID;
   chartID=ChartNext(chartID);
  }
  return(ArraySize(List));
 }
 

Il existe un indicateur qui peut obtenir des valeurs d'une période supérieure, for(i=0;y=0;i<li_0;i++)

Comment faire une boucle pour (int i = li_0 ; i >= 0 ; i--)

   datetime TimeArray[];
   int    i,shift,y=0;
      int counted = IndicatorCounted();
   if (counted < 0) return (-1);
   if (counted > 0) counted--;
   int li_0 = Bars - counted;
    
   // Plot defined timeframe on to current timeframe   
   ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); 
   
   for(i=0,y=0;i<li_0;i++)
 //  for (int i = li_0; i >= 0; i--) //ДЛЯ ТАКОГО ЦИКЛА КАК СДЕЛАТЬ
     {
     if (Time[i]<TimeArray[y]) y++;
     stro_1=NormalizeDouble(iCustom(NULL, TimeFrame, "slow", 0, y+1), Digits);
     }
 
Vitaly Muzichenko:

Oui, merci, Alexei me l'a déjà fait savoir.

Je l'ai fait comme ça, tout fonctionne sauf : Comment puis-je le prescrire par magie pour qu'il y ait un choix dans les paramètres d'entrée pour savoir lequel supprimer ?

Voici un script pour vérifier

#property strict
#property show_inputs
enum Eind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input Eind param = ind_1;
//+------------------------------------------------------------------+
void OnStart()
  {
   Alert("Выбран :",param);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

Voici un script à tester

Je comprends que vous devez sélectionner via le commutateur, et là entrer les noms

Votre code imprime une valeur int, vous devez sélectionner string.


 
Vitaly Muzichenko:

J'ai cru comprendre que vous deviez sélectionner le commutateur et y entrer les noms.

Votre code imprime une valeur int, vous devez sélectionner string.


EnumToString() ne vous aiderait-il pas ? Le seul problème peut survenir s'il y a un espace ou un autre caractère non valide dans le nom de l'indicateur court. En dernier recours, vous pouvez créer un tableau de variables de type chaîne et y prendre l'indice de l'énumération. Ou bien il ne s'agit pas d'un usage individuel et il faudra plus de temps pour l'expliquer que pour écrire le code ?

 
Alexey Viktorov:

EnumToString() ne vous aiderait-il pas ? Le seul problème peut survenir s'il y a un espace ou un autre caractère non valide dans le nom de l'indicateur court. En dernier recours, vous pouvez créer un tableau de variables de type chaîne et y prendre l'indice de l'énumération. Ou bien il ne s'agit pas d'un usage individuel et il faudra plus de temps pour l'expliquer que pour écrire le code ?

Je vais essayer de le faire avec un interrupteur, mais plus tard. Il y a des espaces dans les noms.