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

 
Igor Zakharov:

Isto não é uma substituição - o MB não funciona em indicadores, pois pára o fluxo até que o botão seja pressionado!

Aconselhei isso inadvertidamente, mas não é nada disso que a nota diz:

Nota

Esta função não é recomendada para uso em indicadores personalizados, pois a chamada da MessageBox() interrompe a execução do fio indicador durante todo o tempo de espera pela resposta do usuário. E como todos os indicadores para cada símbolo são executados em um único fio, todos os gráficos para todos os períodos de tempo para este símbolo serão interrompidos.

Ao trabalhar no testador de estratégia, a função MessageBox() não é executada.

 
MakarFX:

Eu não sou um programador, eu edito o indicador para minha própria conveniência. Não o verifiquei no testador, mas em tempo real.

A propósito, não há telepatas.

Se você souber qual dos indicadores disponíveis aqui usa esta função, por favor me diga, talvez eu mesmo a descubra.

Obrigado

Nós temos tudo.

Клуб Телепатов
Клуб Телепатов
  • 2011.05.08
  • www.mql5.com
Клуб телепатов Вас послали сюда? Тогда давайте знакомиться! Как же такое могло случиться со мной...
 
Artyom Trishkin:

Você declara uma variável com o tipo de estrutura no escopo local, e é o que você envia para a função. No mesmo âmbito local.

A questão é que quando se cria uma variável para uma estrutura no campo, seu escopo é sobre todo o fonctionamento e não sobre uma área local. Aqui está um exemplo.

int OnInit()
  {
{int In=8;
 MyPoint qr;}
qr - видна здесь
In - здесь не видна
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason){}

struct MyPoint
{
    int x[5];
    int y;
};

Acontece que não é mais possível trabalhar localmente.

 

Tentando ler dados de um arquivo csv em um script. Sem sorte e eu não entendo por que.

Eu uso um procedimento simples para lê-lo:

bool GetBiFromFile(string InFNam,int& alBars,double& xClose[],datetime& xTime[])
{  int  InHndl,nBars;
   bool fset;
   double aval;
   
   InHndl = FileOpen(InFNam+".csv",FILE_READ|FILE_CSV,",");
   if (InHndl==INVALID_HANDLE) {
       Print("File "+InFNam+" does not open. Error: ", GetLastError()); 
       return(false); 
   } else {
      fset = FileSeek(InHndl,0,SEEK_SET);
      ArrayResize(xClose,alBars);      
      ArrayInitialize(xClose,0.0);  
      ArrayResize(xTime,alBars);       
      ArrayInitialize(xTime,0);  
      nBars = 0;
      while (!FileIsEnding(InHndl)) {
         nBars++;
         xTime[nBars-1]  = FileReadDatetime(InHndl);;
         xClose[nBars-1] = FileReadDouble(InHndl);
         aval = FileReadDouble(InHndl);
         if (nBars>=alBars) break;
      }
   }
   Print("nBars = ",nBars,"   allBars = ",alBars);
   Print("Start: ",xClose[0],"   " + TimeToString(xTime[0],TIME_DATE|TIME_SECONDS));
   Print("End: ",xClose[nBars-1],"   " + TimeToString(xTime[nBars-1],TIME_DATE|TIME_SECONDS));
   return(true);
}

O arquivo com os dados tem a seguinte forma:

2012.01.02 02:00:02,1.293240,1.293410

2012.01.02 02:00:52,1.293330,1.293500

2012.01.02 02:00:55,1.293810,1.293980

....

E o resultado da impressão() das declarações do procedimento é

nBars = 1000 alBars = 1000

Início: 0.0 2020.01.29 01:00:00

Fim: 0.0 2020.01.29 01:00:00

Ou seja, todas as linhas são processadas no loop de leitura, mas nada é lido. E nenhuma mensagem de erro.

Alguém pode me explicar isso?


 
Yurixx:

Alguém pode me explicar isso?

As funções binárias lêem um arquivo de texto.

 
Alexey Viktorov:

Nós temos tudo.

Você é mau!

 
MakarFX:

Você é mau!

Eu estou fingindo.

Se você quiser entender a programação, comece a tentar entendê-la. Se você só precisa fazer isso, vá para o tópico onde eles se oferecem para escrevê-lo gratuitamente, afixe seu indicador lá e descreva seu pedido.


ps: Eu verifiquei tudo. Alerta() por algum motivo, mesmo que colocado antes do PlaySound() não toque o som selecionado. Talvez minha memória seja ruim, mas não a questão.

Você pode silenciar o Alerta() fazendo um duplo toque para obter uma cruz vermelha


e nesse caso não importa o que Alerta() ou PlaySound() está escrito na frente dele

 
Alexey Viktorov:

Eu estou fingindo.


e neste caso não fará diferença se diz Alert() ou PlaySound() na frente

Neste caso, a janela de alerta não se abre.(

 
fxsaber:

Você lê um arquivo de texto com funções binárias.

Ele diz sobre a funçãoFileReadDouble() que ele lê de um arquivo binário.

Mas diz sobreFileReadDatetime(): "Lê do arquivo CSV uma string de um dos formatos: "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" ou "HH:MI:SS" - e o converte para o valor de data/hora".

Também, a mesma imagem foi quando useiFileReadString() e depois converti eu mesmo as cordas para otipo correto.

Como você acha que eu deveria fazer ?


 
Yurixx:

Como você acha que isso deve ser feito ?

void OnStart()
{
  datetime time;
  
  double PriceBid;
  double PriceAsk;
  
  string Str = "2012.01.02 02:00:02,1.293240,1.293410";
  string StrArray[];
  
  if (StringSplit(Str, ',', StrArray) > 2)
  {
    time = (datetime)StrArray[0];
    
    PriceBid = (double)StrArray[1];
    PriceAsk = (double)StrArray[2];
  }
}