Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 605

 
Alexander Antoshkin:

Hallo Vladimir.

Ich habe meine Frage wohl falsch formuliert.

Ich brauche kein Unterfenster, der Indikator sollte im Preisdiagramm wie ein Standarddiagramm platziert werden.

Ich betrachte es als ein Beispiel und versuche zu verstehen.

Ich möchte, dass der Indikator im Diagramm eine eigene Nummer hat, so dass die erforderliche Anzahl von Kopien im Diagramm über die Schaltfläche "Hinzufügen" erstellt werden kann ..... Ich möchte eine mit der Schaltfläche "Kreuz" ........ (ich möchte sie noch nicht beschreiben) ausgewählte Datei löschen.)

Wann ein Indikator zum Hauptdiagrammfenster hinzugefügt werden soll

Unterfenster

[in] Nummer des Diagrammunterfensters.0 bedeutet Hauptdiagrammfenster. Um einen Indikator zu einem neuen Fenster hinzuzufügen, muss der Parameter um eins größer sein als der Index des letzten vorhandenen Fensters, d.h. gleichCHART_WINDOWS_TOTAL. Wenn der ParameterwertCHART_WINDOWS_TOTAL übersteigt, wird kein neues Fenster erstellt, der Indikator wird nicht hinzugefügt.

Sie können den Indikator nicht zu OnInit() hinzufügen, da der Experte zu diesem Zeitpunkt noch nicht gebildet wurde. Aber die Funktion OnTick() ist ein Zeichen für das vollständige Funktionieren des Expert Advisors.

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- variables
int MA_handle=INVALID_HANDLE;
bool first_start=false;
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
   Print(__FUNCTION__,", first_start = ",first_start);
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
   if(MA_handle==INVALID_HANDLE)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      if(AddIndicator()) //попробуем добавить индикатор на график 
         first_start=true;
     }
  }
//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator()
  {
//--- сбросим код ошибки 
   ResetLastError();
//--- накладываем индикатор на график   
   int subwindow=0;
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,MA_handle))
     {
      PrintFormat("Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d",
                  subwindow,GetLastError());
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
Und schreiben Sie die Funktion AddIndicator() so um, dass sie bei einem fehlgeschlagenen Versuch, einen Indikator hinzuzufügen, false zurückgibt.
 
Alexander Antoshkin:

Hallo Vladimir.

Ich habe meine Frage wohl falsch formuliert.

Ich brauche kein Unterfenster, der Indikator sollte im Preisdiagramm wie ein Standarddiagramm platziert werden.

Ich betrachte es als ein Beispiel und versuche zu verstehen.

Ich möchte, dass der Indikator im Diagramm eine eigene Nummer hat, so dass die erforderliche Anzahl von Kopien im Diagramm über die Schaltfläche "Hinzufügen" erstellt werden kann ..... Ich möchte eine, die mit der Schaltfläche "Kreuz" ausgewählt wurde, löschen ........ (es gibt viele Fantasien und ich möchte sie noch nicht beschreiben))

Ein Indikator kann einen Namen haben, wenn Sie Zahlen mögen, dann lassen Sie es eine Zahl sein. Es handelt sich jedoch nicht um eine Nummer, sondern um einen Text. Möchten Sie ein benutzerdefiniertes Bedienfeld, das es Ihnen ermöglicht, eine beliebige Indikatorennummer aus einer oder mehreren hinzuzufügen?
 
Können Sie mir sagen, wie ich in einem Monat nach der Tagesnummer und separat nach der Wochennummer filtern kann? Innerhalb des Tages habe ich dies getan:


bool TimeStart=false;

int hour=12;


//--Фильтр по ремени открытия бара внутри дня

if (TimeStart==true)

{      

      datetime  Open_timePos=iTime(_Symbol,0,0);

      MqlDateTime str1; 

      TimeToStruct(Open_timePos,str1);

      str1.hour=hour;

      str1.min=0;

      str1.sec=0;


      datetime start_time=StructToTime(str1);

      if (start_time>iTime(_Symbol,0,0))

      {

            BuyPrIMA=false;

            SellPrIMA=false;      

      

      } 

 

 

 
-Aleks-:
Können Sie mir sagen, wie ich in einem Monat nach der Tagesnummer und separat nach der Wochennummer filtern kann? Innerhalb des Tages habe ich dies getan:

int НомерДНЯвМесяце=TimeDay(iTime(_Symbol,0,0));

int НомерДняНедели=TimeDayOfWeek(iTime(_Symbol,0,0)); int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);

 
new-rena:
Er fragt nach der Woche des Monats
 
pako:
Er fragt nach der Woche des Monats

Ich habe dort alle drei Optionen gemacht. Können Sie mir sagen, welche er als Basis verwenden möchte?

Das hier?

int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);
 
new-rena:
Ich habe dort alle drei Optionen gewählt. Bitte angeben.

Es gibt fünf bis sechs Wochen im Monat, heute ist die vierte Woche des Monats

str.day Tag des Monats

str.tag_der_Woche Tag

 
new-rena:
Ich danke Ihnen.
 
pako:
Es gibt vier fünf Wochen im Monat, heute ist die vierte Woche des Monats
Verstehe, er möchte also solche Wochen am 29. des Vormonats (z. B. Montag) und bis zum 31. des laufenden Monats (ebenfalls Montag) abrechnen. Es ist mehr als ein Monat. Es ist unlogisch, solche Wochen zu zählen. Wenn das nicht der Fall ist, dann ist die Woche keine ganze Woche. Nein, kein Punkt....
 
new-rena:

Ich habe dort alle drei Optionen gemacht. Welche will er als Basis verwenden, bitte?

Das hier?

Das reicht nicht aus.
Grund der Beschwerde: