Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 933

 
Yevhenii Levchenko:
Como definir um filtro de tempo (por hora) para a EA trading? A seguinte opção funcionará:

VOCÊ google (limitação de tempo dos EAs - por exemplo) - pode haver características especiais, por exemplo, licitação das 22:00 hr às 04:00 hr. Nas fontes de Kim: Somente fontes úteis de Kim - dê uma olhada.

Aqui está uma opção:

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:

VOCÊ pesquisa-lo no Google - pode haver características especiais, por exemplo, licitação das 22:00 hrs às 04:00 hrs. No tópico f.i.v. de Kim: Somente f.i.v. úteis de Kim - dê uma olhada.

Aqui está uma opção:

Uau que tema tão legal! Obrigado!


E o que eu fiz não vai funcionar?
 
Yevhenii Levchenko:

Uau que tema tão legal! Obrigado!


E o que eu fiz não vai funcionar?

Sim, não sei - prepare-o e use-o, descubra o que está certo. Bicicletas foram todas inventadas, IMHO.

 
Yevhenii Levchenko:
Como eu configuro o filtro de tempo (por horas) para o comércio EA? A seguinte opção funcionaria:

Discutimos isso há algum tempo, aqui está um tópico, meus exemplos funcionam, eu o uso, tudo funciona no MT4https://www.mql5.com/ru/forum/317351


Yevhenii Levchenko:

Quais são as especificidades do uso de Symbol() e _Symbol ?

O seguinte código funcionaria corretamente para verificar a presença de pedidos para o símbolo atual?

Não, Symbol() é uma forma antiga de obter nome de símbolo, as últimas construções para compatibilidade MQL4 - MQL5 adicionaram _Symbol

Se você escrever o código do zero, use _Symbol, se você quiser portar o código para a MQL5, você terá menos para editá-lo.

 
Igor Makanu:

Discutimos isso há algum tempo, aqui está um tópico, meus exemplos funcionam, eu o uso, tudo funciona no MT4https://www.mql5.com/ru/forum/317351


Não, Symbol() é uma forma antiga de obter nome de símbolo, as últimas construções para compatibilidade MQL4 - MQL5 adicionaram _Symbol

Se você escrever o código do zero, use _Symbol, se você quiser portar o código para a MQL5, você terá menos para editá-lo.

Obrigado!

O código, é claro, é muito maior do que o que eu tentei prescrever. :) Terão de se sentar e descobrir...
 
Igor Makanu:

Discutimos isso há algum tempo, aqui está um tópico, meus exemplos funcionam, eu o uso, tudo funciona no MT4https://www.mql5.com/ru/forum/317351


Não, Symbol() é uma forma antiga de obter nome de símbolo, as últimas construções para compatibilidade MQL4 - MQL5 adicionaram _Symbol

Se você escrever o código do zero, use _Symbol, se você quiser portar o código para a MQL5, você terá menos para editá-lo.

A diferença é diferente. _Symbol é uma variável predefinida e Symbol() é uma função.

Ambos trabalham lá e lá. Tudo é exatamente o mesmo. Mas uma vez, um dos desenvolvedores (não me lembro qual) disse que era preferível usar uma função.

 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

O que é diferente entre Símbolo() e _Símbolo

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:

A diferença é diferente. _Symbol é uma variável predefinida e Symbol() é uma função.

Ambas funcionam nos dois sentidos. Tudo é absolutamente idêntico. Mas há algum tempo um dos desenvolvedores (não se lembra exatamente quem) disse que era preferível usar uma função.

Acho que a melhor maneira de usá-la, procurei na ajuda, não há nenhuma recomendação definitiva por parte dos desenvolvedores

Na prática, em algumas bibliotecas os desenvolvedores substituem Symbol() nos métodos de classe, em MQL5 eu também substituo Symbol() pelo método TF personalizado na minha classe .... Se for conveniente, eu o uso dessa forma, não vejo nenhuma ofensa pelos axiomas do livro ))))

SZZ: Acho que esta é uma religião... A função iClose() não deve ser usada - "é falsa"! (С)

então aqui está uma nova tendência _Symbol is worse than Symbol() ...measured the speed just in case, no difference at all, same work

#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: Símbolo(): loops=1000000000 ms=66203

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

2019.08.09 00:53:14.432 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65515

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

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

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

2019.08.09 00:51:03.301 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65890

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

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

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

2019.08.09 00:48:51.850 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65750

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

 
Igor Makanu:

Acho que você deve usar o que for mais conveniente. Eu olhei através da referência, não há recomendações definidas por parte dos desenvolvedores

Na prática, em algumas bibliotecas os desenvolvedores substituem Symbol() nos métodos de classe, eu também substituo Symbol() pelo método de TF personalizado em MQL5 .... Se for conveniente, eu o uso dessa forma, não vejo nenhuma ofensa pelos axiomas do livro ))))

SZZ: Acho que esta é uma religião... A função iClose() não deve ser usada - "é falsa"! (С)

então aqui está uma nova tendência _Symbol is worse than Symbol() ...measured the speed just in case, no difference at all, same work

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

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

2019.08.09 00:53:14.432 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65515

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

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

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

2019.08.09 00:51:03.301 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65890

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

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

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

2019.08.09 00:48:51.850 tst EURUSD,H1: _Símbolo: loops=1000000000 ms=65750

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

Como diz o ditado - pelo que você compra, você vende. A recomendação não estava na documentação, mas de boca em boca no fórum.

 
Igor Makanu:

Por que é a última linha sem uma barra, e é possível devolver um valor de uma 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;} 
Razão: