#import "TestLib.dll" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }O código C# para a função Inc da classe TestClass é semelhante ao seguinte:
public class TestClass { public static void Inc(ref int x) { x++; } }Como resultado, o script retornará o valor 42.
struct MqlTick
{
datetime time; // Hora da última atualização de preço
double bid; // Preço Bid atual
double ask; // Preço Ask atual
double last; // Preço atual da última transação (Last)
ulong volume; // Volume para o preço Last atual
long time_msc; // Hora da última atualização de preço em milissegundos
uint flags; // Sinalizadores de ticks
double volume_real; // Volume para o preço Last atual com alta precisão
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // tipo de boleta a partir da enumeração ENUM_BOOK_TYPE double price; // preço long volume; // volume double volume_real; // volume com alta precisão };
//+------------------------------------------------------------------+ //| Default packing | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| Specified packing | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+Conclusão:
sizeof(A)=5 sizeof(B)=8Mais informações sobre o alinhamento em estruturas estão disponíveis no MSDN.
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void OnStart() { }O compilador emitirá um aviso:
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // anteriormente neste lugar o compilador dava um erro template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
Documentação atualizada.
Documentação atualizada.
Documentação atualizada.
datetime iTime( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
double iOpen( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
double iHigh( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
double iLow( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
double iClose( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
long iVolume( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
int iBars( string symbol, // símbolo ENUM_TIMEFRAMES timeframe // período );
int iBarShift( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período datetime time, // tempo bool exact=false // modo );
int iLowest( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int type, // identificador de timeseries int count, // número de elementos int start // índice );
int iHighest( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int type, // identificador de timeseries int count, // número de elementos int start // índice );
long iRealVolume( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
long iTickVolume( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
long iSpread( string symbol, // símbolo ENUM_TIMEFRAMES timeframe, // período int shift // deslocamento );
void TesterHideIndicators( bool hide // sinalizador );
Documentação atualizada.
Correções de crash-logs.
MetaTrader 5 build 1745 é a versão mais recente da plataforma de negociação, ela suporta o Microsoft Windows XP/2003/Vista.
Alguns meses atrás, nós anunciamos o fim do suporte a versões mais antigas dos sistemas operacionais.
Windows 2003, Windows Vista e, em particular, Microsoft Windows XP
estão desatualizados. Há um ano, a Microsoft deixou de dar suporte ao
Windows XP 3, uma vez que limitações técnicas não permitiam implementar
todo o potencial do hardware.
MetaTrader 5 build 1745, bem como versões liberadas anteriormente
continuarão a trabalhar nesses sistemas operacionais, mas sem
atualizações. Além disso, nesses sistemas operacionais, não serão
executados instaladores.
A versão mínima para trabalhar com o
MetaTrader 5 é o Windows 7, no entanto recomendamos que você use a
versão de 64 bits do Windows 10.
Na nova versão da plataforma será descontinuado o suporte a terminais desktop e móveis das versões mais antigas:
Para dar suporte a novos projetos de grupo, foi modificado o protocolo
de trabalho com o armazenamento online MQL5 Storage. Infelizmente, após a
atualização para uma nova versão da plataforma, você terá que
re-extrair todos os dados a partir do repositório. Os dados armazenados
nele não serão nem afetados nem perdidos.
Antes de atualizar
para uma nova versão da plataforma, recomendamos que você envie todas as
alterações locais para o repositório (executar Commit).
Por exemplo, você pode criar uma ferramenta que mostrará o índice do dólar (USDX). Sua fórmula é a seguinte:
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Nota: na fórmula original do índice do dólar, são usados os pares
USDEUR e USDGBP. Como na plataforma há apenas pares invertidos, na
fórmula do instrumento sintético para eles é usada uma potência negativa
e o preço Ask, em vez do Bid.
A plataforma calculará em tempo
real o preço do novo instrumento com base nas cotações de outros seis
instrumentos diferentes fornecidos pela sua corretora. Na Observação do
mercado e no gráfico, você pode ver como se altera seu preço:
int CustomTicksAdd( const string symbol, // nome do símbolo const MqlTick& ticks[] // matriz com dados de ticks que é necessário aplicar ao instrumento personalizado );A função CustomTicksAdd permite enviar ticks, como se viessem do servidor da corretora. Os dados não são gravados diretamente no banco de ticks, em vez disso, são enviados para a janela "Observação do mercado". Em seguida, a partir dela, o terminal armazena ticks em seu banco de dados. Quando o volume de dados enviados numa única chamada é muito grande, a função muda o seu comportamento para economizar recursos. Ao carregar mais de 256 ticks, os dados são divididos em duas partes. A primeira parte (a maior) é imediatamente gravada no banco de ticks (como o faz CustomTicksReplace). A segunda parte, que consiste nos últimos 128 ticks, é enviada através da janela "Observação do mercado" e, em seguida, é armazenada na base do terminal.
Projetos com recursos completos estão agora disponíveis no
MetaEditor. O processo de desenvolvimento de programas se tornou muito
mais conveniente.
Agora o arquivo de programa principal MQ5 não
é apresentado como projeto. O projeto é um arquivo separado "MQPROJ",
em que são armazenadas as configurações do programa, os parâmetros de
compilação e informações sobre todos os arquivos utilizados. O acesso às
principais configurações do projeto é organizado através de uma caixa
de diálogo separada, não há mais necessidade de especificá-las no código
fonte através de #property.
Para o trabalhar facilmente com o projeto, existe uma guia
separada no Navegador. Ela mostra todos os arquivos usados por
categorias: incluídos, de recurso, de cabeçalhos, etc. Além disso, os
arquivos são adicionados ao navegador do projeto automaticamente. Por
exemplo, se você habilitar um novo arquivo MQH no código, ele será
exibido automaticamente na seção "Dependencies" do navegador.
Ao
mesmo tempo, nós tornamos possível trabalhar com novos projetos no
repositório online MQL5 Storage. Agora, o desenvolvimento de grandes
projetos pode ser realizado conjuntamente com outros participantes da
MQL5.community.
Para trabalhar com projetos em grupo, foi adicionada a nova seção Shared Projects. O projeto criado nesta seção é imediatamente enviado para o repositório: você pode distribuir rapidamente permissões de acesso a ele a outros participantes e começar o desenvolvimento conjunto.
Quando você compila o projeto no Shared Project, o executável EX5 é automaticamente copiado no catálogo local Experts, Indicators ou Scripts, dependendo do tipo de programa. Você pode imediatamente executar o programa dentro do gráfico, sem ter que copiar os arquivos manualmente de cada vez.
Alterações no trabalho com o repositório MQL5 Storage
Para uma experiência completa com projetos em grupo, foi refeito o protocolo de trabalho com o repositório MQL5 Storage. Infelizmente, após a atualização para uma nova versão da plataforma, você terá que re-extrair todos os dados a partir do repositório. Os dados armazenados nele não serão nem afetados nem perdidos.
Agora o comando "Extrair dados do repositório" (Checkout from Storage) está indisponível. Para extrair dados, são usados os comandos "Ativar MQL5 Storage" e "Obter arquivo do repositório":
Novos projetos: exemplo de criação e detalhes de trabalho
Ao MetaEditor foi adicionado o projeto. Trata-se de um arquivo com extensão mqproj, em que são armazenadas as propriedades gerais do programa, bem como informações sobre todos os arquivo utilizados. Agora é possível gerenciar facilmente as propriedades do programa numa caixa de diálogo separada do MetaEditor, em vez de alterá-las manualmente no código-fonte (diretiva #property).
Se você já tiver um projeto, a maneira mais fácil de experimentar novos projetos é usar o comando "Novo projeto a partir do arquivo-fonte."
No diretório em que o arquivo selecionado está localizado, será criado um novo arquivo de projeto com o mesmo nome e a extensão mqproj. As principais propriedades do programa especificadas no código-fonte via #property serão automaticamente adicionadas ao projeto, incluindo o nome, direitos de autor, versão, link para o site e programa de descrição do desenvolvedor.
Foram adicionadas duas novas opções para compilar programas MQL5:
Para trabalhar com o projeto, use a guia separada "Projeto" na janela "Navegador". Todos os arquivos usados no projeto são exibidos nesta guia convenientemente. Quando um projeto é gerado a partir de um arquivo de origem, todos os arquivos anexados (especificados usando a diretiva #include no arquivo MQ5 principal e em todos os arquivos incluídos no mesmo) são automaticamente adicionados à seção "Dependencies".
Quando você adiciona novos arquivos no código fonte, eles também aparecerão no Navegador do projeto. Os arquivos de cabeçalho usados serão adicionados à seção Headers, enquanto as imagens, sons e outros programas MQL5 são adicionados ao projeto como recursos na seção Resources. Na seção Sources, são exibidos os arquivos MQ5 com código-fonte. Na seção Settings and files, pode-se adicionar outros arquivo, por exemplo, configurações de teste e modelos de gráficos.
Para adicionar arquivos existentes a um projeto ou para excluir os arquivos a partir dele, use os comandos do menu contextual. Tenha cuidado ao excluir, pois você pode estar removendo um arquivo de projeto (remover a ligação) ou completamente excluí-lo do disco rígido:
Criar um novo projeto é tão facilmente como a criação de um programa MQL5 convencional. Clique em "Novo projeto", selecione o tipo de programa e especifique suas propriedades (nome, manipuladores de eventos, etc.) no Assistente MQL5, no modo normal.
Para obter um arquivo executável EX5, você pode abrir um projeto e pressionar F7 (o comando de compilação) ou abrir o arquivo MQ5 principal do programa e compilá-lo.
Projetos em grupo no MQL5 Storage: detalhes de trabalho
Projetos em grupo são gerenciados a partir da seção Shared Projects. Se você não tiver conectado o repositório ainda, execute o comando Activate MQL5 Storage no menu de contexto desta pasta. MetaEditor verificará se o seu armazenamento contém dados armazenados e se existem quaisquer projetos disponíveis para você. Os dados existente serão recuperados do seu repositório e carregados na seu computador (Checkout). Os projetos em grupo serão exibidos na seção Shared Project, para extrai-los clique em "Extrair arquivos do repositório" no menu contextual.
Para criar um novo projeto grupal, selecione a pasta Shared Projects e clique em "Novo projeto":
Em seguida, complete as etapas do Assistente MQL5: defina o tipo, nome e propriedades do futuro programa. Para projetos em grupo, escolha nomes claros e compreensíveis, para que os outros participantes possam encontrá-los facilmente. Nos nomes dos projetos só podem ser usadas letras latinas sem espaços.
Imediatamente após a criação do projeto, ele é automaticamente adicionado ao repositório MQL5 Storage. Os arquivos usados pela biblioteca padrão no repositório não são adicionados, você pode adicioná-los manualmente, se necessário.
Para permitir outros participantes trabalharem com o projeto, abra suas propriedades. Você pode, especificando o login da MQL5.community, conceder permissões a usuários, bem como estabelecer os parâmetros gerais do trabalho em grupo:
A fim de facilitar o trabalho, ao compilar o projeto grupal, o
executável final (EX5) é copiado automaticamente na pasta Experts,
Indicators ou Scripts, dependendo do tipo de programa. Assim, você pode
executar imediatamente o programa no terminal, sem ter que copiá-lo
manualmente no diretório desejado.
Projetos públicos no MQL5 Storage: participação no desenvolvimento
Como mencionado acima, cada projeto em grupo, na MQL5 Storage, tem configurações de disponibilidade ao público: o projeto pode ser privado ou aberto à participação de outros usuários. Agora, todos os projetos com participação livre são exibidos na guia separada "Projetos públicos".
Todo mundo pode encontrar um projeto interessante e participar em seu desenvolvimento. Basta pressionar "Ingressar" e, em seguida, receber o projeto a partir do repositório.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- arquivo de modelo como matriz binária unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // a matriz de dados é reduzida }; //--- armazenamento e implementação do modelo if(FileSave("my_template.tpl",my_template)) { Print("Custom template saved in \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Custom template applied to the current chart"); else Print("Failed to apply custom template"); } else Print("Failed to save custom template"); }
Função | Ação |
---|---|
CustomSymbolCreate | Cria um símbolo personalizado com o nome especificado no grupo definido |
CustomSymbolDelete | Remove o símbolo personalizado com o nome especificado |
CustomSymbolSetInteger | Define o valor do tipo inteiro para o símbolo personalizado |
CustomSymbolSetDouble | Define o valor do tipo real para o símbolo personalizado |
CustomSymbolSetString | Define o valor do tipo cadeia de caracteres para o símbolo personalizado |
CustomSymbolSetMarginRate | Define o coeficiente de cobrança da margem - dependendo do tipo e direção da ordem - para o símbolo personalizado |
CustomSymbolSetSessionQuote | Define a hora de início e fim da sessão de cotação especificada para o símbolo especificado e dia da semana |
CustomSymbolSetSessionTrade | Define a hora de início e fim da sessão de negociação especificada para o símbolo especificado e dia da semana |
CustomRatesDelete | Exclui todas as barras no histórico de preço do instrumento personalizado, no intervalo de tempo selecionado |
CustomRatesReplace | Substitui todo o histórico de preços do instrumento personalizado pelos dados na matriz do tipo MqlRates, no intervalo de tempo definido |
CustomRatesUpdate | Adiciona ao histórico do instrumento personalizado as barras que faltam e substitui os dados existentes na matriz do tipo MqlRates |
CustomTicksAdd | Adiciona dados de uma matriz do tipo MqlTick ao histórico de preços de um símbolo personalizado. O símbolo personalizado deve ser selecionado na janela Market Watch (Observação do mercado). |
CustomTicksDelete | Exclui todos os ticks no histórico de preço do instrumento personalizado, no intervalo de tempo selecionado |
CustomTicksReplace | Substitui todo o histórico de preço do instrumento personalizado pelos dados na matriz do tipo MqlTick, no intervalo de tempo definido |
A biblioteca está localizada no diretório de trabalho do terminal na pasta Include\Generic.
bool ArraySwap( void& array1[], // primeira matriz void& array2[] // segunda matriz );A função implementa matrizes dinâmicas do mesmo tipo e as mesmas dimensões. Para matrizes multidimensionais, o número de elementos em todas as dimensões, excepto o primeiro, tem de ser o mesmo.
Adicionada a capacidade de visualizar a estatística de mercado para instrumentos financeiros, negociados no modo de execução bolsista. Para fazer isso, na Observação do mercado [Market Watch] abra o menu do símbolo desejado e selecione estatísticas.
Otimizado o trabalho com posições na aba "Negociação". Agora, um simples toque na célula da posição/ordem imediatamente mostra informações detalhadas e opções disponíveis: fechamento, mudança ou incremento da posição, bem como abertura do gráfico do símbolo para o qual a posição está aberta.
No MetaTrader 5 Android, agora é possível abrir rapidamente contas preliminares (preliminary) na corretora. Para fazer isso, basa selecionar o item do menu "Abrir conta real" e, em seguida, especificar a corretora desejada na lista de servidores. A seguir, você só precisa anexar ao pedido um documento de identidade e um extrato bancário. Seu pedido para abrir a conta real será enviado para a corretora que, se necessário, poderá solicitar informações adicionais.
Baixe a versão móvel do MetaTrader 5 para Android e tenha acesso a 160 corretoras diferentes fornecedoras de instrumentos de negociação forex, ações, futuros e criptomoeda.
union LongDouble { long long_value; double double_value; };Em contraste com a estrutura, os diferentes membros da união pertencem ao mesmo local de memória. Neste exemplo, é declarada a união LongDouble, em que o valor do tipo long e o valor do tipo double dividem a mesma área de memória. É importante entender que é impossível fazer com que esta união armazene simultaneamente um valor inteiro long e um real double (como seria na estrutura), porque as variáveis double_value e long_value se sobrepõem (na memória). Por outro lado, o programa MQL5 é capaz de processar os dados da união como um número inteiro (long) ou um real (double) a qualquer momento. Consequentemente, a união permite a obtenção de dois (ou mais) variantes de representação da mesma sequência de dados.
union LongDouble { long long_value; double double_value; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- LongDouble lb; //--- obtemos e exibimos o número inválido -nan(ind) lb.double_value=MathArcsin(2.0); printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value); //--- maior número normalizado (DBL_MAX) lb.long_value=0x7FEFFFFFFFFFFFFF; printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value); //--- menor positivo normalizado (DBL_MIN) lb.long_value=0x0010000000000000; printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value); } /* Resultado de execução 1. double=-nan(ind) integer=FFF8000000000000 2. double=1.7976931348623157e+308 integer=7FEFFFFFFFFFFFFF 3. double=2.2250738585072014e-308 integer=0010000000000000 */
class Foo { int value; public: string Description(void){return IntegerToString(value);}; //--- construtor por padrão Foo(void){value=-1;}; //--- construtor com parâmetros Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| estrutura contendo o objeto do tipo Foo | //+------------------------------------------------------------------+ struct MyStruct { string s; Foo foo; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- MyStruct a,b; Foo an_foo(5); a.s="test"; a.foo=an_foo; Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); //--- Print("b=a"); b=a; //--- Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); /* Resultado de execução; a.s=test a.foo.Description()=5 b.s= b.foo.Description()=-1 b=a a.s=test a.foo.Description()=5 b.s=test b.foo.Description()=5 */ }No operador implícito, é realizada a cópia de objetos recebidos.
ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | Descrição de razões |
---|---|---|---|
POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | Transação realizada como resultado da ativação de uma ordem colocada a partir de um terminal desktop |
POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | Transação realizada como resultado da ativação de uma ordem colocada a partir de um aplicativo móvel |
POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | Transação realizada como resultado da ativação de uma ordem colocada a partir da plataforma web |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | Transação realizada como resultado da ativação de uma ordem colocada a partir de um programa MQL5, Expert Advisor ou script |
- | DEAL_REASON_SL | ORDER_REASON_SL | Transação realizada como resultado da ativação de uma ordem Stop Loss |
- | DEAL_REASON_TP | ORDER_REASON_TP | Transação realizada como resultado da ativação de uma ordem Stop Loss |
- | DEAL_REASON_SO | ORDER_REASON_SO | Transação realizada como resultado do evento Stop Out |
- | DEAL_REASON_ROLLOVER | - | Transação realizada devido à transferência da posição |
- | DEAL_REASON_VMARGIN | - | Transação realizada após creditada/debitada a margem de variação |
- | DEAL_REASON_SPLIT | - | Transação realizada após o fracionamento (redução do preço) do ativo que tinha a posição aberta durante a declaração do fracionamento |
Ao MetaTrader 5 iOS adicionada a possibilidade de abrir rapidamente constas preliminares (preliminary) na corretora. Agora basa selecionar o item menu "Abrir conta real" e, em seguida, especificar a corretora desejada na lista de servidores. Após preencher os dados pessoais, somente resta anexar dois documentos que confirmam a identidade e endereço, e enviar o pedido de registro. Assim, a corretora - após solicitar informações adicionais se necessário - pode abrir imediatamente sua conta real.
No build 1605 MetaTrader 5 iOs também foram realizados o redesenho e a otimização do e-mail:
Documentação atualizada.
Ao MetaTrader 5 Android adicionada a apresentação do histórico de negociação na forma de posições. Anteriormente na aba "Histórico" eram exibidas apenas transações e ordens a partir do histórico, e agora é possível analisar as negociações usando posições. Para fazer isso, todas as operações relacionadas com a posição são agrupadas num único registro, nele é possível ver:
Foi adicionada a apresentação do histórico na forma de posições. Anteriormente, na aba "Histórico" eram exibidas apenas as transações a partir do histórico, agora nela também são apresentadas as posições. A plataforma de negociação recolhe dados sobre operações - relativas à posição - e agrupa estes dados numa única entrada. Nela pode ser visto:
//+------------------------------------------------------------------+ //| Função de modelo | //+------------------------------------------------------------------+ template<typename T1,typename T2> string Assign(T1 &var1,T2 var2) { var1=(T1)var2; return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| Sobrecarga especial para o caso bool+string | //+------------------------------------------------------------------+ string Assign(bool &var1,string var2) { var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0); return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int i; bool b; Print(Assign(i,"test")); Print(Assign(b,"test")); }Como resultado da execução deste código, podemos ver que para o par int+string foi utilizada a função de modelo Assign(), enquanto, na segunda chamada, para o par bool+string já foi utilizada a versão sobrecarregada.
string Assign<int,string>(int&,string) string Assign(bool&,string)
template<typename T> T Func() { return (T)0; } void OnInit() { Func<double>(); // especialização explícita da função de modelo }Assim, a especialização não se realiza através do parâmetro de chamada, mas sim especificando os tipos.
Documentação atualizada.
Documentação atualizada.
Foi adicionada a possibilidade de login e registro da conta
MQL5.com via Facebook. Agora, se você tem um perfil, nesta rede social,
você pode em alguns cliques acessar os bate-papos e todo o conjunto de
serviços para MetaTrader 5.
#resource caminho_para_o_arquivo_do_recurso as tipo_de_variável_de_recurso nome_de_variável_de_recurso
#resource "data.bin" as int ExtData[] // declaração de matriz de tipo numérico, que contém dados a partir do arquivo data.bin #resource "data.bin" as MqlRates ExtData[] // declaração de matriz de estrutura simples, que contém dados a partir do arquivo data.bin #resource "data.txt" as string ExtCode // declaração de cadeias de caracteres, que contém dados a partir do arquivo data.txt #resource "data.txt" as string ExtCode[] // declaração de matriz de sequência de caracteres, que contém dados a partir do arquivo data.txt #resource "image.bmp" as bitmap ExtBitmap[] // declaração de matriz unidimensional, que contém em si a varredura a partir do arquivo BMP, tamanho da matriz = height * width #resource "image.bmp" as bitmap ExtBitmap2[][] // declaração de matriz bidimensional, que contém em si a varredura a partir do arquivo BMP, tamanho da matriz [height][width]
Documentação atualizada.
string str; ... if(str) // aparecerá o erro de compilação "Cannot convert type 'string' to 'bool'" (nas compilações anteriores não acontecia o erro) Print("str is true");É necessário escrever uma condição explícita:
string str; ... //--- verifica se a cadeia de caracteres é inicializada if(str!=NULL) Print("str is true"); ou //--- verifica se o valor da cadeia de caracteres é "true" if(StringCompare(str,"true",false)) Print("str is true"); ou //--- verifica se a cadeia de caracteres é um número e não é igual a zero if((int)str!=0) Print("str is true");
Correções de crash-logs.