void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }Antes, como resultado de la llamada de esta función, la matriz "а1" tenía un tamaño 3. Ahora, tendrá un tamaño 1.
Documentación actualizada.
ENUM_FP_CLASS MathClassify( double value // número real );La enumeración contiene los siguientes valores:
if(MathClassify(value)>FP_ZERO) { Print("value is not a valid number"); }
Modificados los criterios de optimización
en los que se consideraban dos índices: el balance y un cierto segundo
factor. Ahora, en ellos se considera solo el segundo factor, sin
balance. Estos criterios son los más sencillos y comprensibles para el
análisis.
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, // manejador de la base de datos obtenido en DatabaseOpen const string table, // nombre del recuadro para insertar los datos const string filename, // nombre del archivo para importar los datos uint flags, // combinación de banderas const string separator, // separador de datos ulong skip_rows, // cuántas primeras líneas se omitirán const string skip_comments // línea de símbolos que definen los comentarios );
long DatabaseExport( int database, // manejador de la base de datos obtenido en DatabaseOpen const string table_or_sql, // nombre del recuadro o solicitud SQL const string filename, // nombre del archivo CSV para exportar datos uint flags, // combinación de banderas const string separator // separador de datos en el archivo CSV );
long DatabasePrint( int database, // manejador de la base de datos obtenido en DatabaseOpen const string table_or_sql, // recuadro o solicitud SQL uint flags // combinación de banderas );
int FileSelectDialog( string caption, // encabezado de la ventana string initial_dir, // carpeta inicial string filter, // filtro de extensiones uint flags, // combinación de banderas string& filenames[], // matriz con los nombres de los archivos string default_filename // nombre del archivo por defecto );La nueva función permite implementar una cómoda interacción entre el usuario y un programa MQL5.
#property optimization_chart_mode "3d,InpX,InpY"Al usarla, usted podrá establecer el tipo de gráfico abierto al finalizar la optimización, así como los parámetros del programa para su eje X e Y.
double MathArctan2( double y // coordenada y del punto double x // coordenada x del punto );
Añadida la traducción de la interfaz de usuario al panyabí (India).
Documentación actualizada.
Correcciones de crash logs.
La actualización estará disponible a través del sistema Live Update.
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // declaración correcta de la estructura Item de la clase Bar Item item; // declaración incorrectaAsimismo, se ha añadido el soporte del espacio de nombres (namespace), lo que da una mayor libertad al utilizar códigos/bibliotecas de terceros en programas propios.
#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 de la ejecución, el programa mostrará las siguientes líneas:
class A { void operator=(const A &)=delete; // prohibimos el operador de copiado de un objeto }; class B : public A { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }En este ejemplo, para las líneas "a1=a2" y "b1=b2", el compilador dará el error:
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 messagesAl iniciar un asesor de este tipo, en el simulador de estrategias aparece la posibilidad de minimizar y desplegar el bloque de parámetros de entrada de un grupo haciendo doble clic sobre el nombre del mismo, y también de seleccionar todos parámetros de un grupo para la optimización clicando sobre la casilla de verificación de este.
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }Antes, la compilación de este código daba error:
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()Ahora, en lugar de error, se usará por defecto la función MQL incorporada como aquella con mayor prioridad. Para llamar una función importada, será necesario indicar explícitamente su ámbito:
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// antes de la estilización ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // después de la estilización ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// antes de la estilización if(x==1&y!=2) { int a=0; } // después de la estilización if(x == 1 & y != 2) { int a = 0; }
Añadida la traducción de la interfaz de usuario a 18 nuevos idiomas:
En total, la interfaz de la plataforma está ahora traducida a 50 idiomas que, en suma, constituyen la lengua nativa para más de 4 mil millones de personas.
Para poner la interfaz en su idioma, use el menú "Ver \ Idioma" en la parte superior del terminal.
Documentación actualizada.
Correcciones de crash logs.
La actualización estará disponible a través del sistema Live Update.
Python es un moderno lenguaje de programación de alto nivel para el desarrollo de escenarios y aplicaciones. Contiene multitud de bibliotecas para el aprendizaje de máquinas, la automatización de procesos, el análisis y la visualización de datos.
El paquete MetaTrader para Python ha sido pensado para obtener de forma rápida y sencilla información bursátil a través de la interacción entre procesadores directamente desde el terminal MetaTrader 5. Los datos obtenidos de esta forma se pueden usar en lo sucesivo tanto para realizar cálculos estadísticos, como en el aprendizaje de máquinas.
Conexión
Funciones
bool TesterDeposit( double money // suma depositada );
Documentación actualizada.
La actualización estará disponible a través del sistema LiveUpdate.
bool CalendarCountryById( const long country_id, // identificador del país MqlCalendarCountry& country // descripción del país );CalendarEventById — obtener la descripción de un evento según el identificador.
bool CalendarEventById( const long event_id, // identificador del evento MqlCalendarEvent& event // descripción del evento );CalendarValueById — obtener la descripción de un valor según el identificador.
bool CalendarValueById( const long value_id, // identificador del valor MqlCalendarValue& value // descripción del valor );CalendarEventByCountry — obtener la matriz de noticias disponibles del país.
bool CalendarEventByCountry( string country_code, // código del país MqlCalendarEvent& events[] // matriz de eventos );CalendarEventByCurrency — obtener la matriz de noticias disponibles sobre la divisa en la que influyen.
bool CalendarEventByCurrency( string currency, // divisa MqlCalendarEvent& events[] // matriz de eventos );CalendarValueHistoryByEvent — obtener la matriz de valores en el periodo indicado según el identificador de evento.
bool CalendarValueHistoryByEvent( ulong event_id, // indicador de evento MqlCalendarValue& values[], // matriz de valores datetime datetime_from, // fecha inicial datetime datetime_to=0 // fecha final );CalendarValueHistory — obtener la matriz de valores de todos los eventos en el periodo indicado con filtrado según el país y/o divisa.
bool CalendarValueHistory( MqlCalendarValue& values[], // matriz de valores datetime datetime_from, // comienzo del periodo datetime datetime_to=0, // final del periodo string country_code=NULL, // código del país string currency=NULL // divisa );CalendarValueLastByEvent — obtener la matriz de los últimos valores de un evento según el identificador. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. Para ello, se usa su parámetro in/out "change_id".
bool CalendarValueHistory( ulong event_id, // identificador del evento ulong& change_id, // identificador del último cambio del calendario MqlCalendarValue& values[] // matriz de valores );CalendarValueLast — obtener la matriz de los últimos valores de todos los eventos con filtrado según el país y/o divisa. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. De forma análoga a CalendarValueLastByEvent, para la solicitud se usa la propiedad "change_id".
bool CalendarValueHistory( ulong event_id, // identificador del evento ulong& change_id, // identificador del último cambio del calendario MqlCalendarValue& values[], // matriz de valores string country_code=NULL, // código del país string currency=NULL // divisa );
struct MqlCalendarCountry { ulong id; // identificador del país ISO 3166-1 string name; // nombre de texto del país string code; // nombre en código del país ISO 3166-1 alpha-2 string currency; // código de la divisa del país string currency_symbol; // símbolo/señal de la divisa del país string url_name; // nombre del país utilizado en la URL en el sitio web mql5.com };MqlCalendarEvent — descripción del evento.
struct MqlCalendarEvent { ulong id; // identificador del evento ENUM_CALENDAR_EVENT_TYPE type; // tipo del evento ENUM_CALENDAR_EVENT_SECTOR sector; // sector con el que se relaciona el evento ENUM_CALENDAR_EVENT_FREQUENCY frequency; // periodicidad de publicación del evento ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // modo de publicación del evento por tiempo ulong country_id; // indicador del país ENUM_CALENDAR_EVENT_UNIT unit; // unidad de medición del valor del evento ENUM_CALENDAR_EVENT_IMPORTANCE importance; // importancia del evento ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // multiplicador del valor del evento uint digits; // número de decimales tras la coma en el valor del evento string source_url; // URL de la fuente string event_code; // código del evento string name; // nombre de texto del evento en el lenguaje del terminal };MqlCalendarValue — descripción del valor del evento.
struct MqlCalendarValue { ulong id; // identificador del valor ulong event_id; // identificador del evento datetime time; // hora y fecha del evento datetime period; // periodo de informe del evento int revision; // revisión del indicador publicado con respecto al periodo de informe long actual_value; // valor actual del evento long prev_value; // valor anterior del evento long revised_prev_value; // valor anterior revisado del evento long forecast_value; // valor pronosticado del evento ENUM_CALENDAR_EVENT_IMPACRT impact_type; // influencia potencial en el curso de la divisa };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // no se usa CALENDAR_FREQUENCY_WEEK =1, // semana CALENDAR_FREQUENCY_MONTH =2, // mes CALENDAR_FREQUENCY_QUARTER =3, // trimestre CALENDAR_FREQUENCY_YEAR =4, // año CALENDAR_FREQUENCY_DAY =5, // día }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // evento(reunión, discurso, etc.) CALENDAR_TYPE_INDICATOR =1, // indicador CALENDAR_TYPE_HOLIDAY =2, // fiesta }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // no CALENDAR_SECTOR_MARKET =1, // mercado CALENDAR_SECTOR_GDP =2, // PIB CALENDAR_SECTOR_JOBS =3, // trabajo CALENDAR_SECTOR_PRICES =4, // precios CALENDAR_SECTOR_MONEY =5, // dinero CALENDAR_SECTOR_TRADE =6, // comercio CALENDAR_SECTOR_GOVERNMENT =7, // gobierno CALENDAR_SECTOR_BUSINESS =8, // negocios CALENDAR_SECTOR_CONSUMER =9, // consumidor CALENDAR_SECTOR_HOUSING =10, // vivienda CALENDAR_SECTOR_TAXES =11, // impuestos CALENDAR_SECTOR_HOLIDAYS =12, // fiestas }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_NONE =0, // no CALENDAR_IMPORTANCE_LOW =1, // baja CALENDAR_IMPORTANCE_MODERATE =2, // media CALENDAR_IMPORTANCE_HIGH =3, // alta }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // no CALENDAR_UNIT_PERCENT =1, // porcentajes CALENDAR_UNIT_CURRENCY =2, // divisa nacional CALENDAR_UNIT_HOUR =3, // número de horas CALENDAR_UNIT_JOB =4, // número de puestos laborales CALENDAR_UNIT_RIG =5, // número de plataformas petroleras CALENDAR_UNIT_USD =6, // dólares USA CALENDAR_UNIT_PEOPLE =7, // número de personas CALENDAR_UNIT_MORTGAGE =8, // número de créditos hipotecarios CALENDAR_UNIT_VOTE =9, // número de votos CALENDAR_UNIT_BARREL =10, // número de barriles CALENDAR_UNIT_CUBICFEET =11, // volumen pies cúbicos CALENDAR_UNIT_POSITION =12, // número de puestos laborales CALENDAR_UNIT_BUILDING =13 // número de construcciones }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // no CALENDAR_MULTIPLIER_THOUSANDS =1, // miles CALENDAR_MULTIPLIER_MILLIONS =2, // millones CALENDAR_MULTIPLIER_BILLIONS =3, // miles de millones CALENDAR_MULTIPLIER_TRILLIONS =4, // billones }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // desconocido CALENDAR_IMPACT_POSITIVE =1, // positivo CALENDAR_IMPACT_NEGATIVE =2, // negativo }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // la fuente publica la hora exacta CALENDAR_TIMEMODE_DATE =1, // el evento ocupa el día completo CALENDAR_TIMEMODE_NOTIME =2, // la fuente no publica la hora del evento CALENDAR_TIMEMODE_TENTATIVE =3, // la fuente no publica la hora del evento de antemano, solo el día, la hora se concreta al darse el evento };
ERR_CALENDAR_MORE_DATA =5400, // la matriz es pequeña para el resultado completo (se han dado los valores que han cabido en la matriz) ERR_CALENDAR_TIMEOUT =5401, // se ha superado el límite de tiempo de espera para la solicitud de datos del calendario ERR_CALENDAR_NO_DATA =5402, // no se han detectado datos
bool CharArrayToStruct( void& struct_object, // estructura const uchar& char_array[], // matriz uint start_pos=0 // posición inicial en la matriz );StructToCharArray - Copia una estructura POD en una matriz de tipo uchar.
bool StructToCharArray( const void& struct_object, // estructura uchar& char_array[], // matriz uint start_pos=0 // posición inicial en la matriz );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // cadena uint new_capacity // tamaño del búfer para guardar la cadena );StringSetLength — establece para una cadena la longitud indicada en símbolos.
bool StringSetLength( string& string_var, // cadena uint new_length // nueva longitud de la cadena );
bool ArrayRemove( void& array[], // matriz de cualquier tipo uint start, // desde qué índice comenzamos a eliminar uint count=WHOLE_ARRAY // número de elementos );ArrayInsert — Inserta en la matriz-receptor el número indicado de elementos, comenzando por el índice establecido.
bool ArrayInsert( void& dst_array[], // matriz-receptor const void& src_array[], // matriz-fuente uint dst_start, // índice en la matriz-receptor para la inserción uint src_start=0, // índice en la matriz-fuente para el copiado uint count=WHOLE_ARRAY // número de elementos insertados );ArrayReverse — Invierte en la matriz el número indicado de elementos, comenzando por el índice indicado.
bool ArrayReverse( void& array[], // matriz de cualquier tipo uint start=0, // desde qué índice comenzamos a invertir la matriz uint count=WHOLE_ARRAY // número de elementos );
int CustomBookAdd( const string symbol, // nombre del símbolo const MqlBookInfo& books[] // matriz con las descripciones de los elementos de la profundidad de mercado uint count=WHOLE_ARRAY // número de elementos que se usarán );
bool CustomSymbolCreate( const string symbol_name, // nombre del símbolo personalizado const string symbol_path="", // nombre del grupo en el que se creará el símbolo const string symbol_origin=NULL // nombre del símbolo sobre cuya base se creará el símbolo personalizado );Nombre del símbolo desde el que se copiarán las propiedades del símbolo personalizado creado, se indica en el parámetro "symbol_origin".
Añadida la traducción de la interfaz al croata.
Documentación actualizada.
#import "TestLib.dll" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }El código C# de la función Inc de la clase TestClass tiene el aspecto siguiente:
public class TestClass { public static void Inc(ref int x) { x++; } }Como resultado de la ejecución, el script retornará el valor 42.
struct MqlTick
{
datetime time; // Hora de la última actualización de precios
double bid; // Precio Bid actual
double ask; // Precio Ask actual
double last; // Precio actual de la última transacción (Last)
ulong volume; // Volumen para el precio Last actual
long time_msc; // Hora de la última actualización de precios en milisegundos
uint flags; // Banderas de los ticks
double volume_real; // Volumen para el precio Last actual con precisión aumentada
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // tipo de solicitud de la enumeración ENUM_BOOK_TYPE double price; // precio long volume; // volumen double volume_real; // volumen con precisión aumentada };
//+------------------------------------------------------------------+ //| 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)); } //+------------------------------------------------------------------+Conclusión:
sizeof(A)=5 sizeof(B)=8Podrá encontrar información más detallada sobre la alineación de estructuras en MSDN.
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void OnStart() { }El compilador mostrará la advertencia:
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // antes, en este lugar el compilador daba error template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
Documentación actualizada.