void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }Anteriormente, como resultado da chamada de tal função, a matriz "a1" tinha tamanho 3. Agora terá tamanho 1.
Documentação atualizada.
ENUM_FP_CLASS MathClassify( double value // número real );A enumeração contém os seguintes valores:
if(MathClassify(value)>FP_ZERO) { Print("value is not a valid number"); }
Alterados os critérios de otimização,
em que foram levados em consideração dois indicadores — saldo e um
segundo fator. Agora eles levam em conta apenas o segundo fator, sem
saldo. Tais critérios são mais simples e mais compreensíveis na análise.
import sys chart_symbol='unknown' chart_tf=1 if len(sys.argv) == 3: chart_symbol, chart_tf = sys.argv[1:3]; print("Hello world from", chart_symbol, chart_tf) >> Hello world from T.NYSE 15
long DatabaseImport( int database, // identificador de banco de dados recebido em DatabaseOpen const string table, // nome da tabela para inserir dados const string filename, // nome do arquivo para importar dados uint flags, // combinação de sinalizadores const string separator, // separador de dados ulong skip_rows, // quantas primeiras linhas a pular const string skip_comments // linhas de caracteres que definem comentários );
long DatabaseExport( int database, // identificador de banco de dados recebido em DatabaseOpen const string table_or_sql, // nome da tabela ou consulta SQL const string filename, // nome do arquivo CSV para exportação de dados uint flags, // combinação de sinalizadores const string separator // separador de dados no arquivo CSV );
long DatabasePrint( int database, // identificador de banco de dados recebido em DatabaseOpen const string table_or_sql, // tabela ou consulta SQL uint flags // combinação de sinalizadores );
int FileSelectDialog( string caption, // título da janela string initial_dir, // pasta inicial string filter, // filtro de extensão uint flags, // combinação de sinalizadores string& filenames[], // matriz com nomes de arquivos string default_filename // nome do arquivo por padrão );A nova função permite o usuário interagir convenientemente com o programa MQL5.
#property optimization_chart_mode "3d,InpX,InpY"Ao usá-la, você pode especificar o tipo de gráfico aberto uma vez concluída a otimização, bem como os parâmetros do programa para seus eixos X e Y.
double MathArctan2( double y // coordenada y do ponto double x // coordenada x do ponto );
Adicionada tradução da interface do usuário para punjabi (Índia).
Documentação atualizada.
Correções de crash-logs.
A atualização estará disponível através do sistema Live Update.
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // declaração válida da estrutura Item a partir da classe Bar Item item; // declaração inválidaAdicionado suporte ao espaço de nomes (namespace), dando ainda mais liberdade ao usar códigos/bibliotecas de terceiros em nossos programas.
#define PrintFunctionName() Print(__FUNCTION__) namespace NS { void func() { PrintFunctionName(); } struct C { int x; C() { PrintFunctionName(); }; }; } struct C { int x; C() { PrintFunctionName(); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void func() { PrintFunctionName(); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { func(); NS::func(); C c; NS::C ac; }Como resultado da execução, o programa mostrará as seguintes linhas:
class A { void operator=(const A &)=delete; // proíbe o operador de cópia de objeto }; class B : public A { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }Neste exemplo, para as linhas "a1=a2" e "b1=b2", o compilador mostra os erros:
input group "Signal input int ExtBBPeriod = 20; // Bollinger Bands period input double ExtBBDeviation=2.0; // deviation input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15; // BB timeframe input group "Trend" input int ExtMAPeriod = 13; // Moving Average period input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15; // MA timeframe input group "ExitRules" input bool ExtUseSL = true; // use StopLoss input int Ext_SL_Points = 50; // StopLoss in points input bool ExtUseTP = false; // use TakeProfit input int Ext_TP_Points = 100; // TakeProfit in points input bool ExtUseTS = true; // use Trailing Stop input int Ext_TS_Points = 30; // Trailing Stop in points input group "MoneyManagement" sinput double ExtInitialLot =0.1; // initial lot value input bool ExtUseAutoLot =true; // automatic lot calculation input group "Auxiliary" sinput int ExtMagicNumber =123456; // EA Magic Number sinput bool ExtDebugMessage=true; // print debug messagesAo iniciar este EA no testador de estratégia, você pode clicar duas vezes no nome do grupo para recolher e expandir o bloco de parâmetros de entrada, além de selecionar todos os seus parâmetros com um clique na caixa de seleção do grupo para otimização.
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }Anteriormente, a compilação deste tipo de código gerava o erro:
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()Agora, em vez do erro padrão, uma função MQL interna é usada como tendo uma prioridade mais alta. Para chamar a função importada, você deve especificar explicitamente o escopo:
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// antes de estilizar ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // após estilizar ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// antes de estilizar if(x==1&y!=2) { int a=0; } // após estilizar if(x == 1 & y != 2) { int a = 0; }
Adicionada tradução da interface do usuário para 18 novos idiomas:
No total, a interface da plataforma agora está traduzida para 50 idiomas e, no total, eles são nativos para mais de 4 bilhões de pessoas.
Para mudar a interface para o seu idioma, use o menu "Exibir \ Idioma" na parte superior do terminal.
Documentação atualizada.
Correções de crash-logs.
Python é uma linguagem de programação moderna de alto nível para o desenvolvimento de scripts e aplicativos. Possui muitas bibliotecas para aprendizado de máquina, automação de processos, análise de dados e visualização.
O pacote MetaTrader para Python é projetado para o recebimento conveniente e rápido de informações de negociação através de comunicação entre processos diretamente do terminal MetaTrader 5. Os dados recebidos desta maneira podem ser utilizados para cálculos estatísticos e aprendizado de máquina.
Conectando
Funções
bool TesterDeposit( double money // montante do depósito );
Documentação atualizada.
A atualização estará disponível através do sistema LiveUpdate.
bool CalendarCountryById( const long country_id, // identificador do país MqlCalendarCountry& country // descrição do país );CalendarEventById — obtém a descrição do evento por identificador.
bool CalendarEventById( const long event_id, // identificador do evento MqlCalendarEvent& event // descrição do evento );CalendarValueById — obtém a descrição do valor do evento por identificador.
bool CalendarValueById( const long value_id, // identificador do valor MqlCalendarValue& value // descrição do valor );CalendarEventByCountry — obtém um array de notícias disponíveis por país.
bool CalendarEventByCountry( string country_code, // código do país MqlCalendarEvent& events[] // matriz do evento );CalendarEventByCurrency — obtém um array contendo as notícias disponíveis da moeda, que elas afetam.
bool CalendarEventByCurrency( string currency, // moeda MqlCalendarEvent& events[] // matriz de eventos );CalendarValueHistoryByEvent — obtém um array de valores para o período especificado de acordo com o identificador do evento.
bool CalendarValueHistoryByEvent( ulong event_id, // identificador do evento MqlCalendarValue& values[], // matriz de valores datetime datetime_from, // data inicial datetime datetime_to=0 // data final );CalendarValueHistory — obtém um array de valores de todos os pelo período definido com filtragem por país e/ou moeda.
bool CalendarValueHistory( MqlCalendarValue& values[], // matriz de valores datetime datetime_from, // início do período datetime datetime_to=0, // fim do período string country_code=NULL, // código do país string currency=NULL // moeda );CalendarValueLastByEvent — obtém o array dos últimos valores de evento por identificador. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Para fazer isso, é usado seu in/out parâmetro "change_id".
bool CalendarValueHistory( ulong event_id, // identificador do evento ulong& change_id, // identificador do último valor do calendário MqlCalendarValue& values[] // matriz de valores );CalendarValueLast — obtém o array dos últimos valores de todos os eventos com filtragem por país e/ou moeda. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Semelhante a CalendarValueLastByEvent, a propriedade "change_id" é usada para a consulta.
bool CalendarValueHistory( ulong event_id, // identificador do evento ulong& change_id, // ID da última alteração do calendário MqlCalendarValue& values[], // matriz de valores string country_code=NULL, // código do país string currency=NULL // moeda );
struct MqlCalendarCountry { ulong id; // identificador do país ISO 3166-1 string name; // nome do país string code; // código do país ISO 3166-1 alpha-2 string currency; // código da moeda do país string currency_symbol; // símbolo da moeda do país string url_name; // nome do país usado no URL no site mql5.com };MqlCalendarEvent — descrição do evento.
struct MqlCalendarEvent { ulong id; // identificador do evento ENUM_CALENDAR_EVENT_TYPE type; // tipo de evento ENUM_CALENDAR_EVENT_SECTOR sector; // setor ao qual está relacionado o evento ENUM_CALENDAR_EVENT_FREQUENCY frequency; // frequência de publicação de eventos ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // modo de publicação de eventos por horário ulong country_id; // identificador do país ENUM_CALENDAR_EVENT_UNIT unit; // medida do valor do evento ENUM_CALENDAR_EVENT_IMPORTANCE importance; // importância do evento ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // multiplicador do valor do evento uint digits; // número de casas decimais no valor do evento string source_url; // URL da fonte string event_code; // código do evento string name; // nome do evento na linguagem do terminal };MqlCalendarValue — descrição do valor do evento.
struct MqlCalendarValue { ulong id; // identificador do valor ulong event_id; // identificador do evento datetime time; // hora e data do evento datetime period; // período de relatório do evento int revision; // revisão do indicador publicado em relação ao período de relatório long actual_value; // valor atual do evento long prev_value; // valor anterior do evento long revised_prev_value; // valor anterior revisado para o evento long forecast_value; // valor previsto do evento ENUM_CALENDAR_EVENT_IMPACRT impact_type; // impacto potencial na taxa de câmbio };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // não é usado CALENDAR_FREQUENCY_WEEK =1, // semana CALENDAR_FREQUENCY_MONTH =2, // mês CALENDAR_FREQUENCY_QUARTER =3, // trimestre CALENDAR_FREQUENCY_YEAR =4, // ano CALENDAR_FREQUENCY_DAY =5, // dia }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // evento (reunião, discurso, etc.) CALENDAR_TYPE_INDICATOR =1, // indicador CALENDAR_TYPE_HOLIDAY =2, // feriado }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // não CALENDAR_SECTOR_MARKET =1, // mercado CALENDAR_SECTOR_GDP =2, // PIB CALENDAR_SECTOR_JOBS =3, // trabalho CALENDAR_SECTOR_PRICES =4, // preços CALENDAR_SECTOR_MONEY =5, // dinheiro CALENDAR_SECTOR_TRADE =6, // negociação CALENDAR_SECTOR_GOVERNMENT =7, // governo CALENDAR_SECTOR_BUSINESS =8, // negócio CALENDAR_SECTOR_CONSUMER =9, // usuário CALENDAR_SECTOR_HOUSING =10, // habitação CALENDAR_SECTOR_TAXES =11, // impostos CALENDAR_SECTOR_HOLIDAYS =12, // feriados }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_NONE =0, // não CALENDAR_IMPORTANCE_LOW =1, // baixo CALENDAR_IMPORTANCE_MODERATE =2, // médio CALENDAR_IMPORTANCE_HIGH =3, // alto }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // não CALENDAR_UNIT_PERCENT =1, // porcentagem CALENDAR_UNIT_CURRENCY =2, // moeda nacional CALENDAR_UNIT_HOUR =3, // quantidade de horas CALENDAR_UNIT_JOB =4, // número de empregos CALENDAR_UNIT_RIG =5, // número de torres CALENDAR_UNIT_USD =6, // dólares estadunidenses CALENDAR_UNIT_PEOPLE =7, // número de pessoas CALENDAR_UNIT_MORTGAGE =8, // número de empréstimos hipotecários CALENDAR_UNIT_VOTE =9, // número de votos CALENDAR_UNIT_BARREL =10, // número de barreis CALENDAR_UNIT_CUBICFEET =11, // pés cúbicos CALENDAR_UNIT_POSITION =12, // número de empregos CALENDAR_UNIT_BUILDING =13 // número de edifícios }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // não CALENDAR_MULTIPLIER_THOUSANDS =1, // miles CALENDAR_MULTIPLIER_MILLIONS =2, // milhões CALENDAR_MULTIPLIER_BILLIONS =3, // bilhões CALENDAR_MULTIPLIER_TRILLIONS =4, // trilhões }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // desconhecido CALENDAR_IMPACT_POSITIVE =1, // positivo CALENDAR_IMPACT_NEGATIVE =2, // negativo }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // a fonte publica o tempo exato CALENDAR_TIMEMODE_DATE =1, // evento acontece durante todo o dia CALENDAR_TIMEMODE_NOTIME =2, // fonte não publica a hora do evento CALENDAR_TIMEMODE_TENTATIVE =3, // fonte não publica com antecedência o tempo exato do evento, apenas notifica o dia, o tempo é confirmado após a ocorrência do evento };
ERR_CALENDAR_MORE_DATA =5400, // matriz é pequena para o resultado inteiro (dados os valores que se ajustam na matriz) ERR_CALENDAR_TIMEOUT =5401, // expirado tempo de resposta da consulta de dados a partir do calendário ERR_CALENDAR_NO_DATA =5402, // dados não encontrados
bool CharArrayToStruct( void& struct_object, // estrutura const uchar& char_array[], // matriz uint start_pos=0 // posição inicial na matriz );StructToCharArray — copia uma estrutura POD para um array de tipo uchar.
bool StructToCharArray( const void& struct_object, // estrutura uchar& char_array[], // matriz uint start_pos=0 // posição inicial na matriz );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // string uint new_capacity // tamanho do buffer para armazenar a string );StringSetLength — define para a string o comprimento especificado nos símbolos.
bool StringSetLength( string& string_var, // strings uint new_length // novo comprimento da string );
bool ArrayRemove( void& array[], // matriz de qualquer tipo uint start, // índice para começar a excluir uint count=WHOLE_ARRAY // número de elementos );ArrayInsert — insere o número especificado de elementos do array de origem no array de destino, iniciando no índice especificado.
bool ArrayInsert( void& dst_array[], // array de destino const void& src_array[], // array de origem uint dst_start, // índice no array de destino para inserir uint src_start=0, // índice no array de origem para copiar uint count=WHOLE_ARRAY // número de elementos a serem inseridos );ArrayReverse — inverte o número especificado de elementos no array, iniciando no índice especificado.
bool ArrayReverse( void& array[], // array de qualquer tipo uint start=0, // índice para começar a inverter o array uint count=WHOLE_ARRAY // número de elementos );
int CustomBookAdd( const string symbol, // nome do símbolo const MqlBookInfo& books[] // array com descrições de elementos do livro de ofertas uint count=WHOLE_ARRAY // número de elementos a serem usados );
bool CustomSymbolCreate( const string symbol_name, // nome do símbolo personalizado const string symbol_path="", // nome do grupo em que é criado o símbolo const string symbol_origin=NULL // nome do símbolo em cuja base é criado o símbolo personalizado );O nome do símbolo - do qual serão copiadas as propriedades do símbolo personalizado criado - é especificado no parâmetro "symbol_origin".
Adicionada tradução da interface do usuário para o idioma croata.
Documentação atualizada.
#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.