Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 605

 
Alexander Antoshkin:

Ciao Vladimir.

Devo aver formulato male la mia domanda.

Non ho bisogno di una sottofinestra, l'indicatore dovrebbe essere posizionato sul grafico dei prezzi come un grafico standard

Lo considero un esempio e cerco di capire.

Voglio che l'indicatore montato sul grafico abbia il suo numero, in modo che il numero necessario di copie possa essere creato sul grafico usando il pulsante "Add" ..... Voglio cancellarne uno selezionato dal pulsante "croce" ........ (non voglio ancora descriverli))

Quando un indicatore dovrebbe essere aggiunto alla finestra principale del grafico

sottofinestra

[0 significa la finestra principale del grafico. Per aggiungere un indicatore a una nuova finestra, il parametro deve essere uno in più dell'indice dell'ultima finestra esistente, cioè uguale aCHART_WINDOWS_TOTAL. Se il valore del parametro superaCHART_WINDOWS_TOTAL, una nuova finestra non sarà creata, l'indicatore non sarà aggiunto.

Non potete aggiungere l'indicatore a OnInit() - poiché l'esperto non è ancora stato formato in questa fase. Ma la funzione - OnTick() è un segno di funzionamento completo dell'Expert Advisor.

//+------------------------------------------------------------------+
//|                                                         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)
  {
//---

  }
//+------------------------------------------------------------------+
E riscrivete la funzione AddIndicator() in modo che restituisca false al tentativo fallito di aggiungere un indicatore.
 
Alexander Antoshkin:

Ciao Vladimir.

Devo aver formulato male la mia domanda.

Non ho bisogno di una sottofinestra, l'indicatore dovrebbe essere posizionato sul grafico dei prezzi come un grafico standard

Lo considero un esempio e cerco di capire.

Voglio che l'indicatore montato sul grafico abbia il suo numero, in modo che il numero necessario di copie possa essere creato sul grafico utilizzando il pulsante "Add" ..... Voglio cancellarne uno selezionato con il pulsante "croce" ........ (non voglio ancora descriverli))

L'indicatore può avere un nome, se ti piacciono i numeri, che sia un numero. Tuttavia, il numero non sarà un numero ma un testo. Volete un pannello di controllo personalizzato che vi permetta di aggiungere qualsiasi numero di indicatore da uno o più?
 
Potete dirmi come filtrare per numero di giorno e separatamente per numero di settimana in un mese? All'interno del giorno ho fatto questo:


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-:
Potete dirmi come filtrare per numero di giorno e separatamente per numero di settimana in un mese? All'interno del giorno ho fatto questo:

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

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

 
new-rena:
Chiede la settimana del mese
 
pako:
Sta chiedendo della settimana del mese

Ho fatto tutte e tre le opzioni lì. Può dirmi quale vuole usare come base?

Questo?

int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);
 
new-rena:
Ho fatto tutte e tre le opzioni lì. Si prega di specificare.

Ci sono cinque o sei settimane nel mese, oggi è la quarta settimana del mese

str.day giorno del mese

str.day_of_week day

 
new-rena:
Grazie.
 
pako:
Ci sono quattro cinque settimane in un mese, oggi è la quarta settimana del mese
Capisco. Quindi vuole contabilizzare le settimane di questo tipo il 29 del mese precedente (lunedì, per esempio) e fino al 31 del mese corrente (anche lunedì, per esempio). È più di un mese. Non è logico contare tali settimane. Se non lo è, allora la settimana non sarà una settimana intera. No, nessun punto....
 
new-rena:

Ho fatto tutte e tre le opzioni lì. Quale vuole usare come base, per favore?

Questo?

Questo non va bene.
Motivazione: