Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 997

 

Saluti ai colleghi programmatori. Ho bisogno del vostro aiuto. L'Expert Advisor apre una sola operazione il primo giorno di trading di un mese. Può essere il primo o il secondo o il terzo o anche il quarto giorno. La mia condizione è come questa: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Voglio chiedere se c'è qualche funzione in MQL5 che "dica all'EA che oggi è il primo giorno di trading del mese"?

 
Kolya32:

Saluti ai colleghi programmatori. Ho bisogno del vostro aiuto. Il mio Expert Advisor apre un solo ordine il primo giorno di trading di un mese, e può essere il primo o il secondo, il terzo o anche il quarto giorno. La mia condizione è come questa: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Voglio chiedere se c'è qualche funzione in MQL5 che "dica all'EA che oggi è il primo giorno di trading del mese"?

Non riesci a trovare il primo giorno di trading o non riesci a controllare la data del giorno corrente con il primo giorno di trading del mese?

In questo modo si può conoscere con più precisione la data di apertura del mese nel TF corrente(PERIOD_CURRENT può naturalmente essere cambiato in qualsiasi giorno, per esempio).

 datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_MN1,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);

Ma è meglio controllare ogni funzioneiTime,Bars.

 
Kolya32:

Saluti ai colleghi programmatori. Ho bisogno del vostro aiuto. Il mio Expert Advisor apre una sola operazione il primo giorno di trading di un mese, ma può essere il primo o il secondo, il terzo o anche il quarto giorno. La mia condizione è come questa: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){trade is opened} Voglio chiedere se c'è qualche funzione in MQL5 che "dica al mio EA che oggi è il primo giorno di trading del mese"?

Trova dove si parla dell'apertura di una nuova barra e sostituisci il periodo PERIOD_MN1

L'apertura di una nuova barra sarà il primo giorno di trading del mese.

 
Aleksey Vyazmikin:

Non può identificare il primo giorno di trading o non può controllare la data del giorno corrente con il primo giorno di trading del mese?

Non posso determinare il primo giorno di trading del mese. Grazie per le vostre raccomandazioni che sperimenterò)

 
Alexey Viktorov:

Trova dove si parla dell'apertura di una nuova barra e sostituisce il periodo PERIOD_MN1

L'apertura del nuovo bar sarà il primo giorno di trading del mese.

Grazie. Sperimenterò anche in questa direzione)

 

Perché gli autori usano i due punti per scrivere? Il codice qui sotto è semplicemente pieno di punti. Anche se lo stesso::Sleep(5); può essere scritto senza due punti?

void CProgram::GetSymbols(void)
  {
   m_progress_bar.LabelText("Get symbols...");
   m_progress_bar.Update(1,2);
   ::Sleep(5);
//--- Освободить массив символов
   ::ArrayFree(m_symbols);
//--- Массив элементов строк
   string elements[];
//--- Фильтр названий символов
   if(m_symb_filter.IsPressed())
     {
      string text=m_symb_filter.GetValue();
      if(text!="")
        {
         ushort sep=::StringGetCharacter(",",0);
         ::StringSplit(text,sep,elements);
         //---
         int elements_total=::ArraySize(elements);
         for(int e=0; e<elements_total; e++)
           {
            //--- Чистка по краям
            ::StringTrimLeft(elements[e]);
            ::StringTrimRight(elements[e]);
           }
        }
     }
//--- Собираем массив форекс-символов
   int symbols_total=::SymbolsTotal(true);
   for(int i=0; i<symbols_total; i++)
     {
      //--- Получим имя символа
      string symbol_name=::SymbolName(i,false);
      //--- Скроем его в окне Обзор рынка
      ::SymbolSelect(symbol_name,false);
      //--- Если не форекс-символ, перейти к следующему
      if(::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_CALC_MODE)!=SYMBOL_CALC_MODE_FOREX)

         if(m_symb_filter.IsPressed())
           {
            bool check=false;
            int elements_total=::ArraySize(elements);
            for(int e=0; e<elements_total; e++)
              {
               //--- Ищем совпадение в названии символа
               if(::StringFind(symbol_name,elements[e])>-1)
                 {
                  check=true;
                  break;
                 }
              }
            //--- Перейти к следующему, если не пропускает фильтр
            if(!check)
               continue;
           }
      //--- Сохраним символ в массив
      int array_size=::ArraySize(m_symbols);
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=symbol_name;
     }
//--- Если массив пустой, установим текущий символ по умолчанию
   int array_size=::ArraySize(m_symbols);
   if(array_size<1)
     {
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=::Symbol();
     }
//--- Покажем в окне Обзор рынка
   int selected_symbols_total=::ArraySize(m_symbols);
   for(int i=0; i<selected_symbols_total; i++)
      ::SymbolSelect(m_symbols[i],true);
  }
 
BillionerClub:

Perché gli autori usano i due punti per scrivere? Il codice qui sotto è semplicemente pieno di punti. Ma possiamo scrivere lo stesso::Sleep(5); senza i due punti?

Risoluzione del contesto operativo ( :: )

Ogni funzione in mql5-program ha il suo contesto di esecuzione. Per esempio, la funzione di sistema Print() viene eseguita nel contesto globale. Le funzioni importate sono chiamate nel contesto dell'importazione corrispondente. Le funzioni-metodi delle classi hanno il contesto della classe corrispondente. La sintassi dell'operazione di risoluzione del contesto:

[nome_contesto]::nome_funzione(parametri)

Se non c'è un nome di contesto, è un riferimento esplicito all'uso di un contesto globale. Se non c'è un'operazione di risoluzione del contesto, la funzione viene cercata nel contesto più vicino. Se la funzione non è nel contesto locale, viene cercata nel contesto globale.

Inoltre, l'operazione di risoluzione del contesto è usata per determinare la funzione membro di una classe.

tipo Nome_classe::nome_funzione(descrizione_parametri)
{
// corpo della funzione
}

Se un programma usa o potrebbe usare in futuro diverse funzioni con lo stesso nome da diversi contesti di esecuzione, potrebbe verificarsi un'ambiguità. L'ordine in cui le funzioni sono chiamate senza specificare esplicitamente il contesto:

  1. Metodi di classe. Se la funzione con il nome dato non è specificata nella classe, la si cerca nel livello successivo.
  2. Funzioni MQL5. Se non c'è una tale funzione nella lingua, siamo al livello successivo.
  3. Funzioni globali definite dall'utente. Se non c'è una tale funzione, state guardando il livello successivo.
  4. Funzioni importate. Se la funzione non si trova tra quelle importate, il compilatore genera un errore.

Per eliminare l'ambiguità di una chiamata di funzione, specificate esplicitamente l'ambito usando l'operazione di risoluzione del contesto.

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49]. Вызов функции с аргументами x1, x2,..., xn Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа. Передаваемые аргументы разделяются запятыми и должны...
 
Artyom Trishkin:

Operazione di risoluzione del contesto ( ::: )

Immagino che l'autore stia accelerando l'elaborazione del codice. Ben fatto.

 

La storia del trading è disegnata sul grafico, come posso disabilitare questo disegno?


 
BillionerClub:

La storia del trading è disegnata sul grafico, come posso disabilitare questo disegno?


Servizio - Impostazioni - Trading - "Mostra le transazioni sul grafico in tempo reale".

Motivazione: