Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 929

 
Juer:

Código

Dá este resultado:

O que é que estou a fazer mal?

Não é possível passar por todos os membros da enumeração. As enumerações incorporadas não podem ser atravessadas como uma matriz - como de "0" a "fim". Para fazer uma enumeração em linha, é necessário dirigir-se directamente a cada membro da enumeração, correctamente. Por exemplo, como este:

//+------------------------------------------------------------------+
//|                                              ENUM_TIMEFRAMES.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print("PERIOD_CURRENT ",PERIOD_M1,"\n",
         "PERIOD_M2 ",PERIOD_M2,"\n",
         "PERIOD_M3 ",PERIOD_M3,"\n",
         "PERIOD_M4 ",PERIOD_M4,"\n",
         "PERIOD_M5 ",PERIOD_M5,"\n",
         "PERIOD_M6 ",PERIOD_M6,"\n",
         "PERIOD_M10 ",PERIOD_M10,"\n",
         "PERIOD_M12 ",PERIOD_M12,"\n",
         "PERIOD_M15 ",PERIOD_M15,"\n",
         "PERIOD_M20 ",PERIOD_M20,"\n",
         "PERIOD_M30 ",PERIOD_M30,"\n",
         "PERIOD_H1 ",PERIOD_H1,"\n",
         "PERIOD_H2 ",PERIOD_H2,"\n",
         "PERIOD_H3 ",PERIOD_H3,"\n",
         "PERIOD_H4 ",PERIOD_H4,"\n",
         "PERIOD_H6 ",PERIOD_H6,"\n",
         "PERIOD_H8 ",PERIOD_H8,"\n",
         "PERIOD_H12 ",PERIOD_H12,"\n",
         "PERIOD_D1 ",PERIOD_D1,"\n",
         "PERIOD_W1 ",PERIOD_W1,"\n",
         "PERIOD_MN1 ",PERIOD_MN1,"\n");
  }
//+------------------------------------------------------------------+
Arquivos anexados:
 
Vladimir Karputov:

Não se passa por todos os membros da enumeração. As enumerações incorporadas não podem ser atravessadas como uma matriz - como de "0" a "fim". Para aceder às enumerações incorporadas, deve dirigir-se a cada membro da enumeração directamente, correctamente. Por exemplo, como este:

Quem teria pensado...
 
int val=(int)PERIOD_H1;

Numa expressão como esta, val é 16385. Qual é este valor?

Sempre pensei que a int e a enumeração poderiam ser facilmente convertidas uma na outra :(

 
Juer:
Quem teria pensado...

Se quiser aceder a uma enumeração padrão como uma matriz, deve primeiro declarar e preencher essa matriz você mesmo:

//--- variant 2
   ENUM_TIMEFRAMES timeframes_array[21]=
     {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,
      PERIOD_M4,PERIOD_M5,PERIOD_M6,
      PERIOD_M10,PERIOD_M12,PERIOD_M15,
      PERIOD_M20,PERIOD_M30,PERIOD_H1,
      PERIOD_H2,PERIOD_H3,PERIOD_H4,
      PERIOD_H6,PERIOD_H8,PERIOD_H12,
      PERIOD_D1,PERIOD_W1,PERIOD_MN1
     };
   int size=ArraySize(timeframes_array);
   for(int i=0;i<size;i++)
      Print(i,": ",EnumToString(timeframes_array[i])," ",timeframes_array[i]);
 
Juer:

Numa expressão como esta, val é 16385. Qual é este valor?

Sempre pensei que a int e a enumeração poderiam ser facilmente convertidas uma na outra :(

O meu exemplo acima): reproduzir e olhar para os números

 

Estou a tentar configurar uma transferência de ficheiro ftp.

Premir o botão Teste em Service-Settings-FTP permite o envio de ficheiro, ou seja, as palavras-passe e o caminho estão correctos.

Não posso enviar ficheiros através de software. Ao enviar ficheiro via script ao executar SendFTP("File_1.txt", "/ftp_failes"); o terminal fica pendurado. File_1.txt está localizado no directório File_1.txt.

Pergunta. TerminalInfoInteger( TERMINAL_FTP_ENABLED) no meu script =0. Não consigo encontrar onde e como está configurado, por favor aconselhem-me.

E pode dizer-me que mais me está a faltar?
Использование облачных хранилищ для обмена данными между терминалами
Использование облачных хранилищ для обмена данными между терминалами
  • www.mql5.com
Все большее распространение в современном мире получают облачные технологии. Мы можем использовать хранилища разного объема, как платные, так и бесплатные. Можем ли мы их использовать в практическом трейдинге? В этой статье предлагается технология для обмена данными между терминалами, через облачные хранилища. Вы спросите: зачем для этого...
 
User_mt5:

Estou a tentar configurar uma transferência de ficheiro ftp.

Premir o botão Teste em Service-Settings-FTP permite o envio de ficheiro, ou seja, as palavras-passe e o caminho estão correctos.

Não posso enviar ficheiros através de software. Ao enviar ficheiro via script ao executar SendFTP("File_1.txt", "/ftp_failes"); o terminal fica pendurado. File_1.txt está no directório File_1.txt.

Pergunta. TerminalInfoInteger( TERMINAL_FTP_ENABLED) no meu script =0. Não consigo encontrar onde e como está configurado, por favor aconselhem-me.

E pode dizer-me que mais me escapou?
A razão foi a seguinte: não é permitido nomear um ficheiro em letras russas.
A questão foi resolvida.
 

Estou a tentar ler um fio de um ficheiro:

#include <Files\FileTxt.mqh>
CFileTxt          m_file_txt;
m_file_handle=m_file_txt.Open(m_file_name,FILE_CSV|FILE_READ|FILE_COMMON|FILE_ANSI,10);
m_file_txt.Seek(0,SEEK_SET);
string str=m_file_txt.ReadString();

Aqui está a primeira linha do ficheiro:

1,1,1,1,21,0,contagem sem correspondência,IGNORECRLF

Só recebo a personagem "," em str.

 
FILE_UNICODE

ajudou, mas neste caso os caracteres chineses são lidos.

E se eu precisar de ANSI? Porque não consigo ler um fio inteiro quando a bandeira FILE_ANSI?

 
Pode:
   int cur_bars=Bars(_Symbol,PERIOD_CURRENT);

substituir por:

   int cur_bars=Bars(_Symbol,_Period);
Razão: