Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 784

 
Roman Efimov:
Das Problem ist im Allgemeinen das folgende! Ich möchte Gewinn mit einem anderen EA zu schleppen, aber dieser EA lässt mich nicht ziehen Stop Loss für Gewinn! Kann das jemand reparieren? Der Autor antwortet nicht!

Geben Sie also "0" in die Eingabeparameter ein, und es werden keine Trailing-Stops verwendet.

extern int TrailingStop = 0; // Trailing Stop, wenn 0, kein Trailing Stop

 
Vitaly Muzichenko:
Wie ist es möglich, einen bestimmten Indikator aus allen Diagrammen mit einer Bewegung zu entfernen? Das Anwenden einer neuen Vorlage funktioniert nicht. Vielleicht ein Drehbuch?

Um den Indikator zu löschen, müssen Sie das Diagramm noch schließen.

Warum passt die Vorlage nicht? - hängt der Expert Advisor daran? - Sie können den Expert Advisor in einer Chartvorlage speichern und die Vorlage auf denselben EA anwenden - der Expert Advisor wird gelöscht und läuft dann wieder auf dieser Vorlage

 
Igor Makanu:

Um den Indikator zu löschen, müssen Sie das Diagramm noch schließen.

Warum passt die Vorlage nicht? - hängt der Expert Advisor daran? - Ich habe überprüft, dass Sie den Expert Advisor in einer Chartvorlage speichern und die Vorlage mit demselben Expert Advisor anwenden können - der Expert Advisor wird gelöscht und dann mit dieser Vorlage neu gestartet

Sie können die Vorlage nicht für verschiedene Diagrammlayouts usw. ändern).

 
Vitaly Muzichenko:

Bei verschiedenen Markup-Tabellen und so weiter kann man das Muster nicht ersetzen)

Gegoogelt, es gibt ChartIndicatorDelete()

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

habe es nie benutzt, kann also nichts dazu sagen

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

Gegoogelt, es gibt ChartIndicatorDelete()

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

Ich habe es nie benutzt, also kann ich nichts dazu sagen.

Ja, danke, Alexej hat uns bereits vorgewarnt.

Wenn man es so macht, funktioniert alles, außer: Wie kann ich es auf magische Weise so schreiben, dass ich in den Eingabeparametern die Wahl habe, welche zu löschen ist?

#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));
 }
 

Es gibt einen Indikator, der Werte aus einer älteren Periode erhalten kann, for(i=0;y=0;i<li_0;i++)

Wie man eine Schleife bildet for (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:

Ja, danke, Alexej hat mir schon Bescheid gesagt.

Wenn man es so macht, funktioniert alles, außer: Wie kann ich es auf magische Weise so vorschreiben, dass in den Eingabeparametern eine Auswahlmöglichkeit besteht, welche gelöscht werden soll?

Hier ist ein Skript zur Überprüfung

#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:

Hier ist ein Skript zum Testen

Ich habe verstanden, dass Sie über einen Schalter auswählen und dort die Namen eingeben müssen

Ihr Code gibt einen int-Wert aus, Sie müssen string auswählen


 
Vitaly Muzichenko:

Ich habe verstanden, dass Sie über einen Schalter auswählen und die Namen dort eingeben müssen.

Ihr Code gibt einen int-Wert aus, Sie müssen string auswählen


Würde Ihnen EnumToString() nicht helfen? Das einzige Problem kann auftreten, wenn der Name des Kurzindikators ein Leerzeichen oder ein anderes ungültiges Zeichen enthält. Als letzten Ausweg können Sie ein Array von String-Variablen erstellen und den Index der Aufzählung von dort übernehmen. Oder ist es nicht für den individuellen Gebrauch gedacht und es wird mehr Zeit kosten, es zu erklären, als den Code zu schreiben?

 
Alexey Viktorov:

Würde Ihnen EnumToString() nicht helfen? Das Problem kann auftreten, wenn ein Leerzeichen oder ein anderes ungültiges Zeichen im Namen des Kurzindikators vorhanden ist. Als letzten Ausweg können Sie ein Array von String-Variablen erstellen und daraus den Index der Aufzählung übernehmen. Oder ist es nicht für den individuellen Gebrauch gedacht und es wird mehr Zeit kosten, es zu erklären, als den Code zu schreiben?

Ich werde versuchen, es mit einem Schalter zu machen, aber später. Es gibt Leerzeichen in den Namen.