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

 
Yevhenii Levchenko:
Come impostare un filtro temporale (per ore) per il trading EA? La seguente opzione funzionerà:

YOU google (limitazione temporale degli EA - per esempio) - ci possono essere caratteristiche speciali, per esempio l'offerta dalle 22:00 alle 04:00. Nei font di Kim: solo font utili da Kim - dai un'occhiata.

Ecco un'opzione:

extern int HourStart=2;
// время начала работы советника в часах по времени терминала - может быть от 0 до 23
extern int HourEnd=22;
// время окончания работы советника в часах по времени терминала
// пример - советник начинает работать в 2 часа 0 минут, заканчивает работу в 22, то есть в 22 часа и после советник не выставляет новых ордеров и ждет рабочего времени - 2 часа
extern bool Use_Time=false;

...

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   bool time_trade=false;
   if(Use_Time==false) {time_trade=true;}
   if(Use_Time==true && Hour()>=HourStart && Hour()<HourEnd) {time_trade=true;}

...
   
 
Roman Shiredchenko:

VOI cercate su Google - ci possono essere caratteristiche speciali, per esempio offerte dalle 22:00 alle 04:00. Nell'argomento f.i.v. di Kim: Solo f.i.v. utili da Kim - date un'occhiata.

Ecco un'opzione:

Wow, che bel tema! Grazie!


E quello che ho fatto non funzionerà?
 
Yevhenii Levchenko:

Wow, che bel tema! Grazie!


E quello che ho fatto non funzionerà?

Sì, non so - prepararlo e usarlo, capire cosa è giusto. Le biciclette sono state tutte inventate, IMHO.

 
Yevhenii Levchenko:
Come si imposta il filtro temporale (per ore) per il trading EA? La seguente opzione potrebbe funzionare:

Ne abbiamo discusso tempo fa, ecco un argomento, i miei esempi funzionano tutti, lo uso, tutto funziona in MT4https://www.mql5.com/ru/forum/317351


Yevhenii Levchenko:

Quali sono le specifiche dell'uso di Symbol() e _Symbol?

Il seguente codice funzionerebbe correttamente per controllare la presenza di ordini per il simbolo corrente?

No, Symbol() è un vecchio modo per ottenere il nome del simbolo, le ultime build per la compatibilità MQL4 - MQL5 hanno aggiunto _Symbol

Se scrivete codice da zero, usate _Symbol, se volete portare il codice a MQL5, avrete meno da modificare.

 
Igor Makanu:

Ne abbiamo discusso tempo fa, ecco un argomento, i miei esempi funzionano tutti, lo uso, tutto funziona in MT4https://www.mql5.com/ru/forum/317351


No, Symbol() è un vecchio modo per ottenere il nome del simbolo, le ultime build per la compatibilità MQL4 - MQL5 hanno aggiunto _Symbol

Se scrivete codice da zero, usate _Symbol, se volete portare il codice a MQL5, avrete meno da modificare.

Grazie!

Il codice, naturalmente, è molto più grande di quello che ho cercato di prescrivere... :) Dovrà sedersi e capirlo...
 
Igor Makanu:

Ne abbiamo discusso tempo fa, ecco un argomento, i miei esempi funzionano tutti, lo uso, tutto funziona in MT4https://www.mql5.com/ru/forum/317351


No, Symbol() è un vecchio modo per ottenere il nome del simbolo, le ultime build per la compatibilità MQL4 - MQL5 hanno aggiunto _Symbol

Se scrivete codice da zero, usate _Symbol, se volete portare il codice a MQL5, avrete meno da modificare.

La differenza è diversa. _Symbol è una variabile predefinita e Symbol() è una funzione.

Entrambi lavorano lì e lì. Tutto è esattamente lo stesso. Ma una volta, uno degli sviluppatori (non ricordo quale) disse che era preferibile usare una funzione.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Qual è la differenza tra Symbol() e _Symbol

fxsaber, 2019.07.07 14:47

void Func( const string& ) {}

void OnStart()
{
  Func(Symbol()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func(_Symbol);  // OK   
}
 
Artyom Trishkin:

La differenza è diversa. _Symbol è una variabile predefinita e Symbol() è una funzione.

Entrambi funzionano in entrambi i sensi. Tutto è assolutamente identico. Ma qualche tempo fa uno degli sviluppatori (non ricordo chi esattamente) disse che era preferibile usare una funzione.

Penso che il modo migliore per usarlo, ho cercato nell'aiuto, non c'è una raccomandazione precisa da parte degli sviluppatori

In pratica, in alcune librerie gli sviluppatori sovrascrivono Symbol() nei metodi di classe, in MQL5 ho anche sovrascritto il metodo Symbol() per TF personalizzato nella mia classe .... Se è conveniente, lo uso così, non vedo nessuna offesa per gli assiomi del libro ))))

SZZ: Penso che questa sia una religione... La funzione iClose() non dovrebbe essere usata - "è un falso! (С)

allora ecco una nuova tendenza _Symbol è peggio di Symbol() ...ha misurato la velocità per sicurezza, nessuna differenza, stesso lavoro

#property strict
//+------------------------------------------------------------------+
#define    test(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
void OnStart()
  {
   Print("test 1:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 2:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 3:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 4:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 5:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 6:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
  }
//+------------------------------------------------------------------+

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

 
Igor Makanu:

Penso che si dovrebbe usare quello che è più conveniente. Ho guardato attraverso il riferimento, non c'è alcuna raccomandazione definitiva da parte degli sviluppatori

In pratica, in alcune librerie gli sviluppatori sovrascrivono Symbol() nei metodi di classe, ho anche sovrascritto il metodo Symbol() per i TF personalizzati in MQL5 .... Se è conveniente, lo uso così, non vedo nessuna offesa per gli assiomi del libro ))))

SZZ: Penso che questa sia una religione... La funzione iClose() non dovrebbe essere usata - "è un falso! (С)

allora ecco una nuova tendenza _Symbol è peggio di Symbol() ...ha misurato la velocità per sicurezza, nessuna differenza, stesso lavoro

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

Come dice il proverbio - ciò che si compra, si vende. La raccomandazione non era nella documentazione, ma dal passaparola sul forum.

 
Igor Makanu:

Perché l'ultima riga non ha una barra, ed è possibile restituire un valore da una macro

#define  FOR3(a,b,c,loop) for(int i=0; i<a; i++) \
for(int j=0; j<b; j++) \
for(int k=0; k<c; k++) \
{loop;}