Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 854

 
yiduwi:

Aiuto, come faccio a trovare la prima coordinata temporale della linea di tendenza?

long  ObjectGetInteger( 
   long     chart_id,         // идентификатор графика 
   string   object_name,      // имя объекта 
   int      prop_id,          // идентификатор свойства 
   int      prop_modifier=0   // модификатор свойства, если требуется 
   );
 

Perché non posso fare quanto segue: dichiaro globalmente una variabile e un array e voglio assegnare immediatamente il valore della variabile all'array.

int yo=6;
int masss[4]={0,0,yo,0};

E lo stesso problema con le funzioni se si assegna una variabile a un argomento, fallisce

void Fulr(int ty=yo){}
 
Seric29:

Perché non posso fare quanto segue: dichiaro globalmente una variabile e un array e voglio assegnare immediatamente il valore della variabile all'array.

E lo stesso problema con le funzioni se si assegna una variabile a un argomento, fallisce

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные экспертные системы, предназначенные для...
 
Alekseu Fedotov:

Grazie.

 
Artyom Trishkin:

A quanto pare, è impossibile dirlo normalmente. In C++ è possibile farlo, penso che sia perché mql4 lavora attraverso un descrittore, cioè non ha accesso diretto alla memoria, perché ogni valore ha un indirizzo e se si accede a quell'indirizzo si può scoprire cosa c'è, questo rende mql4 eccessivamente statico e limita molte possibilità, specialmente lavorando con gli array.

 

È possibile fare due timer nell'EA? Per qualche ragione pensavo che OnTimer() fosse chiamato in un thread separato. Ma ho provato ad aggiungere un ciclo infinito in OnInit() e impostare il timer prima di esso, solo il ciclo ha funzionato, OnTimer() non è stato chiamato.

Ho bisogno di due azioni indipendenti da eseguire costantemente su un timer. Ognuno con il suo intervallo. Come può essere implementato, lo sai?

 
leonerd:

È possibile fare due timer nell'EA? Per qualche ragione pensavo che OnTimer() fosse chiamato in un thread separato. Ma ho provato ad aggiungere un ciclo infinito in OnInit() e impostare il timer prima di esso, solo il ciclo ha funzionato, OnTimer() non è stato chiamato.

Ho bisogno di due azioni indipendenti da eseguire costantemente su un timer. Ognuno con il suo intervallo. Come può essere implementato, lo sai?

Per esempio: contare fino a cento ed eseguire il primo codice, contare fino a 150 ed eseguire il secondo codice. Ma in senso buono, si dovrebbe fare una classe multitimer.
 
Artyom Trishkin:

In questo thread voglio iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo blog sarà un buon posto per discutere di compiti, algoritmi della loro soluzione e qualsiasi altra domanda riguardante la programmazione MT in un modo o nell'altro.

Spero che altri membri esperti del nostro forum si uniscano alla discussione e che il ramo sia interessante per tutti.

Buon pomeriggio. Sto scrivendo un Expert Advisor di prova per l'autoapprendimento e l'esperienza pratica. Ora può ricevere un segnale dall'indicatore e ha la funzione di apertura di posizioni BUY e SELL ( Open_BUY_SELL() ). Ho fatto questa funzione da alcuni script pubblicati in CodeBase.

DOMANDA - posso chiedere a una persona esperta in questo thread di controllare questo codice per la macchinosità? ???

Ho dubbi e paure particolari in questi luoghi:

    m_trade         = new CTrade();
    m_symbol        = new CSymbolInfo();   
    m_position_info = new CPositionInfo();   
    m_account       = new CAccountInfo();
    
    m_symbol.Name(Symbol());
    m_symbol.RefreshRates();

È appropriato scrivere questo all'interno di una funzione? Vale la pena spostarlo in OnInit()? Ho fatto la funzione da due script, file appuntati al post

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 
CAccountInfo   *m_account;

Questo posto è anche confuso, se ho capito bene - gli oggetti delle stesse classi si duplicano a vicenda. Ho appena lasciato alcune dichiarazioni dal lavoro con l'indicatore e altre dal rifacimento degli script in una funzione.


Non ho ancora collegato la funzione con il segnale, voglio prima capire e pulire il codice. Capisco che ho fatto un errore da qualche parte, ma mi manca ancora la conoscenza e l'esperienza per capire esattamente dove e come rimediare.

Si prega di sostenere.

 

File allegati - EA, due script e indicatore.

Il compilatore non bestemmia, non ci sono errori da cercare, solo alcune considerazioni strategiche/tattiche, se è giusto farlo e se è sbagliato, come avrebbe dovuto essere fatto.

Per favore.

 
Artyom Trishkin:
Ma in un buon modo - la classe multitimer bisogno di fare.

non si possono complicare compiti semplici! ... disse Me, che avvolse pigramente la nuova funzione di definizione della barra in una classe ))))

al punto:

leonerd:

È possibile fare due timer in un EA? Per qualche ragione, pensavo che OnTimer() fosse chiamato in un thread separato. Ma ho provato ad aggiungere un ciclo infinito in OnInit() e impostare il timer prima di esso, solo il ciclo ha funzionato, OnTimer() non è stato chiamato.

Ho bisogno di due azioni indipendenti da eseguire costantemente su un timer. Ognuno con il suo intervallo. Come questo può essere implementato, lo sai?


#property strict
//--- input parameters
input int      Timer1=13;
input int      Timer2=21;
static int timer1=0,timer2=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if((timer1++)>Timer1) { timer1 = 0; Print("Timer №1"); }
   if((timer2++)>Timer2) { timer2 = 0; Print("Timer №2"); }
  }
//+------------------------------------------------------------------+