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

 

Igor Makanu: Fora do tópico, é claro. Aqui está uma pequena idéia a respeito de seu código. Se você usar uma matriz, você pode definir um número ilimitado de intervalos.

CWork *Work[];

int OnInit()
  {
   if(ArrayResize(Work,3) != 3)
      ExpertRemove();
   Work[0] = new CWorkTime(StartHour_0,StartMinute_0,StopHour_0,StopMinute_0);
   Work[1] = new CWorkTime(StartHour_1,StartMinute_1,StopHour_1,StopMinute_1);
   Work[2] = new CWorkTime(StartHour_2,StartMinute_2,StopHour_2,StopMinute_2);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
   for(int i=0; i<ArraySize(Work)); i++)
      if(Work[i] != NULL)
         delete Work[i];
   ZeroMemory(Work);
  }

void OnTick()
  {
   for(int i=0; i<ArraySize(Work)); i++)
      if(Work[i].Disable())
        {
         Comment("Не торговое время!!!");
         return;
        }
/* work */
  }
 
Konstantin Nikitin:

Igor Makanu: Fora do tópico, é claro. Aqui está uma pequena idéia a respeito de seu código. Se você usar uma matriz, você pode definir um número ilimitado de intervalos.

Por que está fora de tópico? - O tema é técnico, sempre apoiarei qualquer discussão sobre questões técnicas.


É claro que você pode usar um conjunto da ex-classe. Eu verifiquei minha classe algumas vezes - tudo parece funcionar corretamente, você pode definir um intervalo para cada minuto e negociar por qualquer TS ;)


A idéia de criar esta forma de analisar o tempo de troca para mim mais como string to datetime, e o significado do meu código - uma vez por dia para contar o início e o fim da troca como datatime, até um novo dia não faz sentido recalcular estes intervalos, veio um novo dia - recalcular tudo novamente em datatime, e comparação entre datatime, deve ocorrer muito rapidamente, ou seja, não irá carregar o terminal (testador)


Seric29:

Por que este código não funciona?

Talvez uma classe deva ser descrita através de dois pontos ::? A idéia de criar um ponteiro que aponte para outro ponteiro.

Você tem erros de sintaxe, deve parecer com isto:

#include <Object.mqh>
class CArray : public CObject
  {
public:
   double            m_Array[100];
  };

void OnStart()
  {
   CArray *arr=new CArray;
   arr.m_Array[22]=1.23456;
  }
 
novichok2018:

Olá!

Mais uma vez obrigado aAlexey Viktorov pela dica sobre as citações - tudo funciona. Nesta segunda-feira temos uma situação - os alemães negociaram, enquanto os ingleses têm um dia de folga. Acontece que em condições para a abertura da posição do euro foram utilizados valores antigos de libra esterlina. Daí o pedido: aconselhe como estabelecer a verificação no código de que ambos os símbolos são negociados neste dia?

Obrigado.

Desculpe, sou preguiçoso demais para ler a documentação hoje. E os chips de memória já queimaram há muito tempo quase todos eles, tudo o que resta é esclerose e marasmo.

 
Alexey Viktorov:

Desculpe, sou preguiçoso demais para ler a documentação hoje. E os chips de memória já queimaram quase todos há muito tempo, tudo o que resta é esclerose.

Bem, eu ainda não sou preguiçoso, apesar de já ter o suficiente de minha própria idiotice. Mas onde ler? Não consegui encontrá-lo. Meus olhos estão todos bagunçados no computador.

 
novichok2018:

Bem, eu ainda não sou preguiçoso, apesar de já ter o suficiente de minha própria idiotice. Mas onde ler? Não consegui encontrá-lo. Meus olhos estão confusos no computador.

A partir da documentação

AccountInfoInteger(ACCOUNT_TRADE_ALLOWED) pode retornar falso nos seguintes casos

  • sem conexão com o servidor comercial. Pode ser verificado com TerminalInfoInteger(TERMINAL_CONNECTED));
  • a conta comercial foi trocada para o modo somente leitura (enviada para arquivo);
  • A negociação na conta foi banida do lado do servidor de negociação;
  • A conexão com a conta comercial foi feita no modo investidor.

E se não for exatamente assim, procure outras opções.

 
Alexey Viktorov:

A partir da documentação.

E se não for bem assim, procure por outras opções.

Infelizmente, não é isso. A negociação não é proibida na conta - negociamos em euros, mas não negociamos na libra esterlina. Portanto, precisamos verificar o comércio em um símbolo específico. Talvez alguém tenha encontrado algo assim, ou saiba como resolver o problema. Ainda não estou encontrando nos fóruns nem no google.

 
novichok2018:

Infelizmente, não é. A negociação não é proibida na conta - negociamos em euros, mas não negociamos na libra esterlina. Consequentemente, preciso verificar o comércio em um determinado símbolo. Talvez alguém tenha encontrado algo assim, ou saiba como resolver o problema. Ainda não o encontrei nos fóruns nem no google.

Há outras funções na documentação

IsTradeAllowed(symbol,TimeCurrent()
TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)
 

Boa tarde.

No MT4, o texto especificado nas configurações do objeto TrendLine no campo "Descrição" é exibido no lado esquerdo da tendência (na extremidade esquerda). Talvez alguém tenha uma solução pronta como exibir o texto no final certo?

 
Taras Slobodyanik:

há outras funções na documentação

Experimentei-o.

bool uk = IsTradeAllowed("GPBUSD",TimeCurrent());
bool de = IsTradeAllowed("EURUSD",TimeCurrent());

      if(de && uk) Alert("uk == true");

Escreve tambémna segunda-feira 27, apesar de ter sido feriado na Inglaterra.

 
novichok2018:

Experimentei-o.

Diz averdade na segunda-feira 27, apesar de ter sido feriado na Inglaterra.

Então, você precisa identificar um feriado ou uma proibição de comercialização?
O comércio foi permitido no dia 27.

Se for um fim de semana, então você precisa de um analisador de notícias - para identificar feriados/fins-de-semana.