You are on page 1of 2079
Manual de referencia del leng METAQUOTES LANGUAGE 5 para el terminal de cliente MetaTrader 5 APRENDA el lenguaje MQL5 y REALICE cualquiera de estas tares: OMe i Peet eee oc del analisis técnico de cualquier complejidad Oem un atcur C ecar] Cee ee orien cents Meenas) Oe Curries near sce ee eC ieem uric ny ee serie Ora Cec re informativo-comerciales Poe te eek cices (trading, monitoring, sefales, etc.) COP SEU M rei einen 2 | Contenido MQL5 Contenido Manual de referencia de MQL5 1 Bases del lenguaje. Sintaxis 35 Comentarios 36 Identificadores. 37 Palabras reservadas. 38 Tipos de datos 39 Tipos enteros: 0 Tipos char, short, int y long a Constantes de caracteres, 4 Tipo datetime a Tipo color 8 Tipo boot 8 Enumeraciones, 50 Tip0s reales (double, float) 52 Tipo string. 57 Estructuras y clases, 9 Objeto de un vector dindmico. 65 Conversién de tipos 67 Tipo void y constante NULL. a Punteros a objetos, ma Referencias. Modificador fy palabra clave this % Operaciones y expresiones .. Expresiones, Operaciones aritméticas. Operaciones de asignacién. 80 Operaciones de relacién at Operaciones égicas. 82 COperaciones a nivel de bits 8 tras operaciones, 86 Prioridades y orden de las operaciones. 90 operadores 92 Operadar compuesto. 94 Operador-expresién 95 Operador de retorno return, 96 Operador condicionali-ese 97 Operador condicional 98 Operador switch 99 Operador cictico whit sor Operador cictico for 102 Operador cictico do while 103 Operador break 104 Operador de continuacién continue. 105 Operadar-creador de objetos new. 106 Operador-eliminador de objetos delete 108 Funciones Uamada a una funcién, am Traspaso de pardmetros 12 Sobrecarga de una funcién 115 Descripcién de funciones externas 118 Exportactén de funciones. 19 Funciones de procesamiento de eventos. 120 Variables ‘© 2000-20 aQuotes Software ¢ 32 3 | Contenido MQL5 Variables locales 100 Pavametros formales. mw Variables estaticas 4 Variables globales, 196 Variables Input. 07 Variables Extern. 7) Inicializacién de variables vat \Visibiidad y tiempo de vida de variables. 3 Creacién y eiminactén de objetos, 45 Preprocesador . Declaracién de constante, Propiedades de programas. Inclusién de archivos: 155 Importacién de funciones, Programacién orientada a objetos Encapsulacién y extensién de tipos Herencia 163 Polimorfismo. Sobrecarga Funciones virtuales, 2. Constantes estindares, enumeraciones y estructuras.. Constantes de graficos Typos de eventos de grafico 4 Periodos de gréticos: m7 Propiedades de grafico 79 Posicionamiento de grafico. 13 \Visualizacién de gratis 14 Constantes de objetos Tipos de objetos. Prapiedades de objetos 189 Modes de enlace de objetos 183 Esquina de enlace 7 \Visibiidad de objetos. 199 Niveles de las ondas de Eliott 202 Objetos de Gann. Colores Web. Wingdings, Constantes de indicadores Constantes de precio, Métodos de alisamiento Lineas de indicadores, Estilos de dibujo. Propiedades de ndicadores de usuario, 219 Tip0s de indicadores. 22 Identificadores de tpos de datos 224 Estado de entorno Estado del terminal de cliente. 226 Informacién sobre el programa NQLS en ejecucién. 28 Informacién sobre la herramienta, 230 Informacién sobre la cuenta, 236 Constantes comerciales Informacién sobre datos histéricos por hertamienta, 239 Propiedades de érdenes. 240 Prapiedades de posiciones. 244 Propiedades de transacciones 246 Tipos de operaciones comerciales 288 Tip0s de érdenes en profundidad de mercado. 209 Constantes nombradas {© 2000-2010, MetaQuotes Software Corp. 4 | Contenido MQL5 macro substituciones predefinidas, 251 Constantes mateméticas, 253 Constantes de tipos numéricos. 255 Razones de deiniciaizactén, 258 Verificacién del puntero a objeto, 260 tras constantes 261 Estructuras de datos Estructura de fecha 265 Estructura de pardmetros de entrada de indicador 266 Estructura de datos histéricos. 267 Estructura de profundidad de mercado 268 Estructura de solicitud comercial 269 Estructura de resultado de solicitud comercial, 273 Estructura para abtencién de precios actuales. 27 Cédigos de errores y advertencias CCédigos de retomo del servidor comercial 279 Advertencias del compilador. 281 Errores de complacién 283 Errores de tiempo de ejecucién 291 Constantes de entradalsalid Banderas de apertura de archivos. 300 Posicionamiento dentro del archivo, 303 Uso de pagina de cécigo. 304 MessageBox 3 Programas de MQLS.. Ejecucién de programas Eventos de terminal de cliente -. Llamadas a as funciones importadas Errores de ejecucién 4 Variables predefinidas .. Dieits Point cLasten “Period StopFlag “Symbot “UninitReason 5 Funciones comunes.. Alert CheckPointer Comment DebugBreak ExpertRemove GetPointer GetTickCount MessageBox PeriodSeconds PlaySound Print PrintFormat ResetLastError SetUserError SendFT? SendMait Steep Terminalclose TesterWithdrawal taQuotes Software Corp. ZZ Contenido ZeroMemory 6 Operaciones con vectores. ArrayBsearch ArrayCopy ArrayFree ArrayGetAsSeries Arrayinitialize .. ‘ArraylsDynamic Arraylsseries ArrayMaximum ArrayMinimum ArrayRange ArrayResize ArraySetasseries ArraySize ‘ArraySort 7 Conversién de datos CharTostring CharArrayTostring . ColorTostring DoubleTostring IntegerTostring, ShortTostring ShortArrayTostring TimeTostring -. NormalizeDouble .. StringTochar Array . StringToCotor .. StringTobouble StringTointeger StringToshortArray StringToTime .. StringFormat 8 Funciones matematicas Mathabs Mathareeos Matharesin Matharctan Mathceit Mathcos MathExp MathFloor MathLog MathLogio Mathttax. Mathttin Mathttod MathPow MathRand MathRound Mathsin Mathsart Mathsrand MathTan MathlsVatidNumber . 9 Funciones de cadenas de caracteres Stringadd, 00-2010, MetaQuotes Softwa so | Contenido StringBufferLen StringConcatenate .. StringFit StringFind StringGetCharacter Stringlnit StringLen StringSetCharacter Stringsubstr StringToLower StringToUpper StringTrimLeft.. StringTrimRight 10 Fecha yhora .. TimeCurrent TimeTradeServer TimeLocat TimeGHT TimeDaylightSavings TimecHTortset TimeTostruct . StructToTime . 11 Informacién de cuenta. ‘AccountinfoDouble ‘Accountinfolnteger Accountinfostring 12 Comprobacién de estado. GetLastérror {stopped UninitiaizeReason Terminallnfointeger Terminallnfostring MoLSinfolnteger MoLSInfostring Symbot Period Digits Point 13. Obtencién de informacién de mercado. SymbolsTotat .. Symbotlame Symbotselect . Symbollssynchronized .. SymbotinfoDouble.. Symbolinfolnteger -. Symbolinfostring .. SymbolinfoTick MarketBookAdd MarketBookRetease MarketBookGet eee . 14 Acceso a las series temporales y a los datos de indicadores.. Direceién de indexacién en tos vectores y series temporales Organizacién de acceso alos datos Seriesinfolnteger . Bars BarsCalculated 00-2010, MetaQuotes Softwa 7 | Contenido IndicatorCreate IndicatorRelease .. CopyButfer CopyRates CopyTime CopyOpen Copytiigh copyLow CopyCtose CopyTickVolume . CopyRealVotume .. Copyspread 15. Operaciones con graficos . ChartApplyTemplate ChartWindowFind Chartopen ChartFirst Chartlext Chartclose ChartRedraw .. ChartSetDoubte Chartsetinteger ChartSetstring ChartGetDouble ChartGetinteger ChartGetstring ChartNavigate Chartio Chart WindowonDropped ChartPriceOnDropped ChartTimeOnDropped ChartXOnbropped -. ChartYonDropped -. ChartSetsymbolPeriod ChartScreenshot .. 16 Funciones comerciales. Ordersend PositionsTotal. PositionGetsymbot .. Positionselect -. PositionGetDouble . PositionGetinteger .. PositionGetstring .. OrdersTotat OrderGetTicket Ordersetect OrderGetDouble OrderGetinteger OrderGetstring HistorySetect . HistoryOrdersetect HistoryOrdersTotat HistoryOrderGetTicket HistoryOrderGetDouble HistoryOrderGetinteger HistoryOrderGetstring 00-2010, MetaQuotes Softwa | Contenido HistoryDeatsetect HistoryDeatsTotal HistoryDealGetTicket .. HistoryDealGetDouble HistoryDealGetinteger HistoryDealGetstring. eee 17 Variables globales del terminal de cliente.. GlobatVariablecheck GlobatvariableTime GlobatVariableDet GlobatVariableGet GlobatVariableName GlobatVariableset GlobatVariablesFlush GlobatVariableTemp GlobatVariableSetOnCondition .. GlobatVariablesDeleteAtt GlobatVariablesTotat 18 Operaciones con archivos FileFindFirst FileFindtlext FileFindClose .. FilelsExist Fileopen FileClose Filecopy FileDelete FileMove FileFtush FilelsEnding FilelsLineEnding FileReadArray « FileReadBoo!-. FileReadDatetime . FileReadDouble FileReadFtoat.. FileReadinteger FileReadLong -. FileReadNumber FileReadstring- FileReadstruct Fileseek Filesize FileTett Filewrite FileWritearray FileWriteDouble File WriteFloat -. FileWritelnteger FileWriteLong - FileWritestring FileWritestruct Foldercreate .. FolderDelete .. Folderctean 19. Indicadores de usuario. Relacién entre propiedades de indicador y funciones 00-2010, MetaQuotes Softwa 3 | Contenido SetindexBuffer IndicatorSetDouble IndicatorSetinteger IndicatorSetString -. PlotindexSetDouble -. PlotindexSetinteger PlotindexSetstring -. PlotindexGetinteger - 20 Objetos graficos ovjectcreate Ovjectilame Ovjectdetete .. Objectsbeleteat .. Ovjectring ObjectGetTimeBy Vatu ObjectGetVatueByTime Ovjecttove OvjectsTotat ObjectSetDoube .. Objectsetinteger . Objectsetstring OvjectGetDouble . ObjectGetinteger ovjectGetstring. 24. Indicadores técnicos. IADXWilder iAtigator iAMA ino iATR \BearsPower ‘Bands \BullsPower ier ichaikin custom DENA iDeMarker iEnvetopes ‘Force iFractats iFrAMA Gator ichimoku. iBwHFL Momentum imme ima iosta imacD iopy SAR inst inv istapev 00-2010, MetaQuates Software Corp, Contenido Istochastie - TEMA iTeix iwer ivipya Volumes EventSetTimer Eventkil(Timer EventChartCustom 23. Biblioteca estandar Basic Class CObject-. Prev Prev Next 751 Next 752 Compare, 753 save 755 Load Type Classes of data array 761 step 762 step 763 Total 764 Avalable 165 ax 166 IsSorted 167 SortMode 768 lear 769 sort 70 save ™ Load m ‘cArrayChar. ™ Reserve 75 Resize 176 Shutdown ™ ada 78 Adaarray 79 Adaarray 780 Insert 782 Insertarray. 783 Insertarray. 784 AssignArray. 786 Assignarray. 787 Update 789 shift 790 Delete 71 DeleteRange 792 at 793 Comparearray. 795 Comparearray. 796 Incertsort 97 Search 798 SearchGreat. 799 SearchLess 800 SearchGreatOrEqual B01 SearchLessOrEqual 802 {© 2000-2010, MetaQuotes Software Co on | Contenido MQL5 SearchFirst. 803 SearchLast .. 804 save 805 Load 806 Type 808 CcarrayShort 809 Reserve att Resize 812 Shutdown 819 ada 314 Adaarray a5 Adaarray 816 Insert 818 InsertArray... 319 InsertArray.. 820 Assignarray . 822 AssignArray . 823 Update 825 shift 826 Delete a2? DeleteRange 228 at . 329 Comparearray. ast Comparearray. 832 Incertsort 839 Search a4 SearchGreat.. 835 SearchLess .. 836 SearchGreatOrEqual 837 SearchLessOrEqual 838 SearchFirst.. 839 SearchLast .. 840 save Bat Load 3 Type 845 ccarrayint... 846 Reserve 843 Resize 849 Shutdown 850 ada 851 Adaarray 852 Adaarray 859 Insert 855 InsertArray... 856 InsertArray.. 857 Assignarray . 859 AssignArray . 860 Update 862 shift 863 Delete B64 DeleteRange 865 at . 866 Comparearray. 868 Comparearray. 869 Incertsort 870 Search art SearchGreat.. 872 SearchLess .. 873 {© 2000-2010, MetaQuotes Software Corp. oe | Contenido MQL5 SearchGreatOrEqual 874 SearchLessOrEqual 875 SearchFirst.. 876 Searchlast .. 877 save 878 Load 880 Type 882 ccarrayLong.. 883 Reserve 885 Resize 886 Shutdown 887 Ada 888 Addarray 889 Adaarray 890 Insert 892 IncertArray... 893 IncertAreay.. 394 AssignArray 896 AssignArray . 397 Update 899 shift 900 Delete sor DeleteRange 902 at . 903 Comparearray, 905 Comparearray, 906 Incertsort 907 search 908 SearchGreat.. 909 SearchLess 910 SearchGreatOrEqual ont SearchLessOrEqual 912 SearchFirst.. 919 Searchlast .. 914 save 915 Load on Type 919 CcarrayFloat, 920 Delta 922 Reserve 923 Resize 924 Shutdown 925 ada 926 Adaarray oar Adaarray 928 Insert 930 InsertArray... sat InsertArray.. 902 Assignarray . 904 AssignArray . 995 Update 97 shift 998 Delete 999 DeleteRange 940 at oo oat Comparearray. 943 Comparearray. oad Incertsort 945 {© 2000-2010, MetaQuotes Software Corp. a8 | Contenido MQL5 search 946 SearchGreat.. oar SearchLess ... 948 SearchGreatOrEqual 949 SearchLessOrEqual 950 SearchFirst.. ost Searchlast .. 952 save 959 Load 955 Type concn ninsnnininitinoinininaninenninanineneinnennuennennienssns 957 CANFaYDOUBIE aise niente enntnneninniinainneinienineneninenienanenieness 958 Detta 960 Reserve 96 Resize 962 Shutdown 963 ada 964 Adaarray 965 Adaarray 966 Insert 968 InsertArray... 969 InsertArray.. 970 Assignarray . 972 AssignArray . 973 Update 975 shift 976 Delete or DeleteRange 978 at . 979 Comparearray. set Comparearray. 982 Incertsort 983 Search 94 SearchGreat.. 985 SearchLess .. 986 SearchGreatOrEqual 987 SearchLessOrEqual 988 SearchFirst.. 989 SearchLast .. 990 save oot Load 993 Type os os se os onsen 995 CArrayString. otis nicninennninenieninnainnernienineianneneenerniennesses 996 Reserve 998 RESIZE onsnnnsnntnnnnannninnatinisnatinuinninininenineninisnaninesnnnnesse, 998 SHULIOWN .oorssotsinsnsninssinnninnetinisiatianesisnisniennisnesonsesase sess: 1000 ada ssnsnntinniinatinisnntnintanniisesninsnatinannnsnatanesisesnnsensesee 101 Adaarray 1002 Adaarray 1003 Insert 1005 Insertarray... 1006 InsertArray... 1007 AssignArray... 1009 Assignarray... 1010 Update ro shift 1099 Delete sora DeleteRange... 1015 at 1016 {© 2000-2010, MetaQuotes Software Corp. Contenido Comparearray Comparearray Incertsort search SearchGreat.. SearchLess SearchGreatOrEqual SearchLessOrEqual SearchFirst... SearchLast save Load Type ccarrayOb}... FreeMode FreeMode Reserve Resize lear Shutdown, CreateElement. Ada Adaarray Insert Insertarray... Assignarray... Update shite Detach Delete DeleteRange... at o Comparearray Incertsort Search SearchGreat.. SearchLess SearchGreatOrEqual SearchLessOrEqual SearchFist... SearchLast save Load Type cust FreeMode FreeMode Total IsSorted SortMode CreateElement. Ada Insert Detachcurrent Deletecurrent Delete Clear Indexor MQL5 1018 1019 1020 sor 1022 1023 024 1025 1026 1027 1078 1000 1002 1003 1038 1009 soa 1042 toa 1085 1046 1088 1049 1082 1054 1056 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 so71 1072 1073 1074 1076 1077 1079 1080 1082 1083 084 1085 1086 1087 1089 1090 1091 1092 1099 {© 2000-2010, MetaQuotes Software Corp. ZZ Contenido GetNodestindex... GetFirstNode, GetPrevNode.. GetCurrentNode... GGetNextNode, GetLastNode.. sort o MoveTolndex.. Exchange Comparetist.. search save Load Type CTreeNode.. ‘owner Left Right Balance Balancel BalanceR Createsample. RefreshBalance GetNext SaveNode LoadNode Type ctree Root . CreateElement. Insert Detach Delete lear Find save Load . Type ee Classes for Graphic Objects . cChartobject Chartla Window Name NumPoints Attach SetPoint Delete Detach shiftobject... shiftPoint Time Price Color style wiath BackGround... Selected Selectable {© 2000-2010, MetaQuotes Software Corp. ro Contenido Description... Timeframes... CreateTine... LevelsCount... Levelcolor Levelstyle Levelwiath Levelvatue LevelDescription.. Getinteger Setlnteger. GetDouble SetDouble Getstring setstring save Load Type Objects Lines. (CChartObjectVLine. Create Type (CChartObjectHLine. Create Type CChartobjectTrend Create RayLett RayRight save Load Type (CChartObjectTrendByangle, Create Angle Type CChartObjectcycles. Create Type Objects Channels ‘CChartObjectChannel Create Type (CChartObjectRegression Create Type senses (CChartObjectsteDevChannel Create Deviations, save Load Type ChartObjectPitchfork. Create Type Gann Tod... (CChartObjectGannLine Create MQL5 1165 1166 1167 1168 1169 at 1173 1175 7 1179 181 1183 1185 1187 1189 s191 1192 1193 1194 1195 1196 1197 1198 1199 +1200 ra01 1202 1203 1204 1205 1206 1207 1208 1209 120 an 1212 20 4 125 1216 a 128 2 1200 saat m2 123 12a 1225 1206 wa 128 18 1200 1231 1202 1299 {© 2000-2010, MetaQuotes Software Corp. Contenido Fibonacci Tools... MQL5 PipsPerBar. 204 save 1235 Load 1236 Type sa CChartObjectGannFan.. 1208 Create 129 PipsPerBar. 120 Downtrend a save pe Load 2a Type sou CChartobjectGannGni. 1285 Create 1246 PipsPerBar. pa Downtrend 28 save 208 Load 1250 Type 1251 1252 CChartobjectFibo. 1259 Create 1254 Type 1255 (CChartObjectFiboTimes 1256 Create 1057 Type oe 1258 CChartObjectFiboFan... 1259 Create 1260 Type 1261 CChartObjectFibost... 1262 Create 1263 Scale 1264 Ellipse 1265 save 1266 Load 1267 Type os 1268 (CChartObjectFbochannel... 1269 Create 1270 Type os an CChartObjectFiboExpansion. ww Create 273 Type wa Ehiott Took... onan 1275 CCChartObjectéliottWaves... 1276 Create an Degree 1278 Lines 1279 save 1280 Load 1281 Type os 1282 CChartObjectéliottWaves... 1283 Create 184 Type 1286 Objects shapes... 1287 ‘CChartObjectRectangle 1288 Create 1289 Type os se os os oneness 1290 (CChartObjectT rangle. .cnisseinnisnannneseintniennieniieinninnennneninneseienses 1291 Create 1292 {© 2000-2010, MetaQuotes Software Corp. Contenido MQL5 Type 1293 CChartobjectélipse 1294 Create 1295 Type 1296 Objects Arron... 1297 (CChartObjectArrow 1298 Create 1299 ArrowCode 1001 Anchor 1903 save 1905 Load 1306 Type ss 1007 Arrows with fixed code 1908 Create 1310 ArrowCode 112 Type 1319 Objects Contras. ou (CChartObjectText. 1315 Create 1316 Angle 1 Font 1318 Fontsize 1319 Anchor 1320 save s32 Load 2 Type 1003 CChartObjectLabel sa2 Create 1925 x Distance. 1926 ‘Distance. 1307 X Size 1328 Size 1029 comer 1300 Time yo0t Price 1302 save 1999 Load ra04 Type 1995 CChartobjectéait 1336 Create 1097 X Size 1908 Size 1999 BackColor 1340 Angle 1341 save 1322 Load 0 Type 1344 CChartObjectButton.... 1385 state 1346 save 1347 Load 138 Type 138 (CChartObjectsubChart. 1350 Create 1382 x Distance. 1959 ‘Distance. 1354 comer 1955 X Size 1356 {© 2000-2010, MetaQuotes Software Corp. Za Contenido Size Symbol Period Scale Datescale Pricescale Time Price save Load Type ChartObjectBitmap.... Create BmpFile save Load Type CChartObject8impLabel Create x Distance. ‘Distance. comer X Size Size BmpFiieOn. BmpFeort. state Time Price save Load Type Class for working with chart. Chartio. Mode. Foreground. shift shittsize ‘Autoscral Scale. ScaleFix. ScaleFix_11.. FixeaMax FixedMin, PoittsPerBar ScalePPa ShowOHLC, ShowLineBi ShowLinetsk ShowLastLine ShowPeriodSep.... Showsrid ShowVolumes ShowObjectDescr. ColorBackeround.. ColorForeground.. ColerGria ColorBarUp {© 2000-2010, MetaQuotes Software Corp. 20 Contenido ColorBarDown, ColorCandleBul... ColarCandleBear.. ColorChartLine... Color Volumes, ColorLineBid ColorLineask ColorLineLast. ColorstopLevels.. VisibeBars... WindowsTota. Window! Visible... wiathineixes HeightinPixes Pricemin. PriceMax, Attach . Chart. Nextchart. Open Detach.. Close Navigate, Symbo . Period .. Redraw. Getinteger. Setinteger. GetDouble SetDowe, cetstring, setstring SetSymboPeriod. ApplyTemplate Screenshot... Windowondropped PriceOnbropped... TemeOnDropped... xOnDropped. ‘YonDropped. save Load Type essen Classes for file operations cre Handle Filename Flags SetUnicode SetCommon... Open Close Delete IsExist Copy {© 2000-2010, MetaQuotes Software Corp. Contenido Move size Tet Seek Flush IsEnding IsLineEnaing... FolderCreate.. FolderDelete... FolderClean... FieFindFirst.. FieFindNext.. FieFindCse . crieBin Open Writechar: Wrteshort Wniteinteger. WriteLong. WriteFlat. WriteDouble... Woitestring... Writechararray... Writeshortarray... Writeintegerarray, WriteLongarray... WriteFloatArray... WriteDoublearray.. writeobyect . Readchar Readshort Readinteger... ReadLong, ReadFloat ReadDowe... Readstring ReadChararray ReadshortArray, Readintegerarray.. ReadLongArray ReadFloatArray ReadDoubles ReadObject... crieTxt Open an Wotestring... Readstring Class for String operations string. str Len Copy Fil Assign Append Insert Compare CompareNocase... Yo {© 2000-2010, MetaQuotes Software Corp. Contenido Left Right ma Trim TrimLett Trinkight lear ToUpper ToLower Reverse Find FindRev Remove Replace sarseatnnnse Classes for working with Indicators indicator Base Class. Handle Name status NumBurtfes... Timeframe Symbol Period CurrentNeed.. Create urtsize Getata ion inValue ‘Nexium axValue Refresh Periodstr ethodstr Pricestr Volumestr on CindicatorButfer Auxtiary Class size offset Name at ioimum ‘Nexium Refresh Refresh 0_only Trend Indicaters.. CWOX MaPeriod Create nan Plus ious Type cuDXWider... aPeriod Create nan Plus {© 2000-2010, MetaQuotes Software Corp. Contenido MQL5 ious 1598 Type 1599 ciBands 1600 MaPeriod 1601 ashitt 1602 Deviation 1603 Applied 1604 Create 1605 Base 1606 Upper 1607 Loner 1608 Type 1609 Cinvelopes... 1610 aPeriog t61 ashitt 1612 MaMethod. 1619 Deviation 1614 Applied 1615 Create 1616 Upper 1617 Loner 1618 Type 1619 Cilchimoku . 1620 TenkanSenPertod... 1621 KijunsenPeriod. 162 SenkouSpanBPeriod, 1623 Create 1624 Tenkansen, 1625 Kijunsen 1626 SenkouSpana 1607 Senkouspan. 1628 CChinkouspan 1629 Type 1620 cima . 1631 MaPeriod 1602 ashitt 1633 aMethod. 1604 Applied 1695 Create 1636 nai 1637 Type 1698 CAR 1639 Sarstep 1640 Naxinun 1641 Create 1682 nai 163 Type 1644 cistaDev 1685 MaPeriod 1646 ashitt 1647 aMethod. 1688 Applied 1689 Create 1650 nan 1651 Type 1682 CEMA. 1659 MaPeriod 1654 Inashitt 1655 {© 2000-2010, MetaQuotes Software Corp. Contenido Appied Create nan Type CEMA. ‘MaPeriod Inasnitt Apptied Create nai Type FAM aPeriod Indsnitt Appied Create nan Type CAMA. MaPeriod Fast€maPeriod. Siowmaeriod. Indsnitt Appied Create nan Type civipya ‘cmoPeriod, EmaPeriod, Inashitt Apptied Create nai Type Oscilators. cATR. aPerioa Create nai Type CiBearsPower. MaPeriod Create nan Type ciBulsPower.. MaPeriod Create MQL5 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 161 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1699 1694 1695 1696 1697 1698 1699 1700 701 1702 1703 1704 1705 1706 1707 708 1709 1710 mn m2 179 {© 2000-2010, MetaQuotes Software Corp. Contenido MQL5 FastMaPeriod.. ma SiowMaPeried.. m5 MaMethod. 116 Applied m7 Create 18 nan 79 Type 1720 cibemarker... wma MaPerioa mm Create m3 nan wma Type 1725 ciForce 176 MaPeriod wm aMethod. m8 Applied 1m Create 17390 nan wt Type 92 imac 1733 FastEmaPeried, 34 SiowmaPeriod. 1795 SignaPeriod 1736 Applied w37 Create 1738 nan a9 Signal 170 Type aa ‘ciMomentum.. waa aPeriog 1703 Applied sa Create 1785 nan 1746 Type war ciosma . 1788 FastEmaPeried. 179 SiowmaPeriod. 1750 SignaPeriod 751 Applied 152 Create 1759 nan 154 Type 1755 cst 1756 aPeriod 1757 Applied 1758 Create 1759 nan 1760 Type 761 RVI 1762 MaPeriod 1763 Create 64 hain 1765 Signal 1766 Type os se os os onsen 167 a period 1769 Dperiod a0 siowing wm {© 2000-2010, MetaQuotes Software Corp. Contenido MQL5 MaMethod. wm PriceField 73 Create a4 hain 175 Signal 1776 Type wm cAWPR 178 alePeriod, 179 Create 1780 nai 781 Type 172 citrix 1783 aPeriod rea Applied 1785 Create 1786 nai 1787 Type 1788 Volume Indicators, 1789 cup . 1790 Applied 1798 Create 1792 nai 1793 Type 1794 cel 1795 1796 197 1798 1799 +1800 cioav 1801 Applied 1802 Create 1803 nan e048 Type 1805 volumes... 1806 Applied 1807 Create 1808 nan 1809 Type 110 Bx Wiliams Indicators ten cae o re Create 1819 nai rea Type 1815 Cimtigator 1816 JawPeriod. 1817 sawshit 1818 TeethPered. 189 Teethshitt. 1820 LipsPeriod. tert Lipsshirt we aMethod. 1823 Applied tera Create 1825 Jaw 1826 Teeth 187 Lips 1828 Type 18 {© 2000-2010, MetaQuotes Software Corp. Contenido cao . Create nan Type cractats Create Upper Loner Type cigator awPeriod. Jawshit TeetnPertod. Teethshitt. LipsPeriod. Lipsshirt aMethod. Appied Create Upper Loner Type cise Applied Create nan Type senses indicators Classes Collection... Create Refresh Trade Classes ‘cAccountinfo Login TradeMode . TradeModeDescrption.. Leverage os NarginMode ote NarginModeDescription, Tradedloned.. TradeExpert.. Balance credit Profit Equity aren FreeNargin... NarginLevel.. Nargincell NarginstopOut, Name Server currency Company Infolnteger... InfoDouble. Infostring Nargincheck FreeMargincheck . {© 2000-2010, MetaQuotes Software Corp. Contenido MQL5 MaxLOtChedk ...:snnsnninsnanniinatinisinnnasanesnsneniisnannisnsnesasesnee 1889 csymbalinto.. conennieniineninninnetinennininennieniienanenatinenaenienesessss 1890 a RefreshRates.. 1894 Select 1895 IsSynchronized 1896 Volume 1897 Volumetigh... 1898 VolameLow. 1899 VolumeBid +1900 Volameask 1901 Time 1902 spread 1903 SpreadFioat... 1904 TickBookDepth 1905 StopLevel 1906 FreezeLevel.. 1907 Bia 1908 Bictigh 1909 BiaLow 1910 Ask sen Ackttigh a2 AskLow 190 Last a4 LastHign 1915 LastLow 1916 TradeCaleMode o 187 TradeCalcModeDescription... 1918 TradeMode . 19 TradeModeDescrption.. 1920 TradeExecution . sort TradeExecutionDescrption.. 2 SMBPMOUE vones nse 190 ‘SwapModeDescription... 924 ‘wmapRoloverdays. 1925 ‘wmapRolover3daysDescription, 1926 Nargininitil. 1877 ‘NarginMaintenance. 1928 NarginLone... 19 Narginshort.. 1900 NargnLimit.. 801 Nargnstop 1902 NarginstopLinit... 4909 TradeTimeFlags 904 TradeF Flags 1935 Digits 1996 Pont 1997 TickValue 1908 TiekSize 1999 Contractsize.. 1940 Lotsa sat LotsMax 1942 Lotsstep 190 ‘smapLong saa ‘smapshort 1945 CurrencyBase 1946 CurrencyProfit 1947 CurrencyMargin... 1948 {© 2000-2010, MetaQuotes Software Corp. 29 Contenido Bank . Description... Path o Infolnteger... InfoDouble. Infostring TypeDescriptior state o StateDescription... TimeExpiration, TimeDone TypeFiting, o TypeFilingescription... TypeTime o TypeTimeDescription... Nagic Positiontd Volmeinitial. VolumeCurrent, Priceopen StopLoss TakeProfit PriceCurrent. PriceStopLimit, Symbol Conment Infolnteger... InfoDouble. Infostring Storestate. Checkstate... CitstoryOrderinto Timesetup Type . TypeDescriptior state o StateDescription... TimeExpiration, TimeDone TypeFiting, . TypeFilingescription... TypeTime o TypeTimeDescription... Nagic Positiontd Volmelnitial. VolumeCurrent, Priceopen StopLoss TakeProfit PriceCurrent. PricestopLimit, Symbol Conment Infolnteger... MQL5 1949 1950 1951 1952 1959 1954 1955 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 set coz 1973 a974 1975 1976 1977 1978 1979 1980 1981 1982 1989 1904 1986 1987 1988 1989 1990 1991 1992 1999 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 {© 2000-2010, MetaQuotes Software Corp. InfoDouble. Infostring CPositioninto Time . Type . TypeDescriptior Nagic Identiti Volume Priceopen StopLoss TakeProfit PriceCurrent. Commission... ‘swap Profit Symbol Infolnteger... InfoDouble. Infostring Select Storestate. CheckState... Cealingo... order Time o Type . TypeDescriptior Entry o EntryDescription.. Nagic Positionld Volume Price Commision ‘swap Profit Symbol Conment Infolnteger... InfoDouble. Infostring Ticket Trade is sotssns nese SetExpertmagicNumber SetDeviationinPoints... OrderOpen Ordermedity.. OrderDetete... PositionOpen.. PositionWodity PositionCloce.. ResultRetcode, on ResultRetcodeDescription.... ResultDeal ResultOrder. ResultVoume.. ResultPrice MQL5 2009 2010 2011 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2090 2031 2032 203 2035 2036 2097 2038 2039 2040 2041 2042 2043 2048 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2056 2057 2058 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 {© 2000-2010, MetaQuotes Software Corp. Contenido 24 Paso de la version MQL4. MQL5 RESUIBID so rssntsnnsnninnannninnatinnisnntininsanesnsonsisnatinsnsnesasesnee BOT ResultAsk ... soninannninnatinnsnannnesisennnsentis 2072 ResultComment 2073 PrintRequest.. 2074 PrintResut 2075 - 2076 {© 2000-2010, MetaQuotes Software Corp. MQL5 Manual de referencia de MQL5 ‘MetaQuotes Language 5 (MQL5) es un lenguaje built-in de programacién de estrategias comerciales que ha sido desarrollado por la compafiia MetaQuotes Software Corp., baséndose en su ampia experiencia de varios afios en el Ambito de creacién de plataformas informativo-comerciales. Dicho lenguaje permite escribir sus propios programas-expertos (Expert Advisors) que hacen la gestién de procesos comerciales totalmente automatizada, y que son completamente adecuados para le realizadén de sus propias estrategias comerciales. Ademas, utilizando MQL5 se puede crear los indicadores técnicos personales (Custom Indicators), scripts (Scripts) y biblotecas de funciones (Libraries). ‘MQLS contiene la gran cantidad de funciones necesarias para el anilisis de las cotizacones actuales y recibidas anteriormente, en el programa estén integrados los indicadores y funciones principales para la gestion de las posiciones comerciales y control de éstas Para escribir el cédigo del programa se utiliza el procesador especializado de textos MetaEditor 5 que marca diferentes construcciones del lenguaje MQL5 con distintos colores, lo que permite al usuario orientarse mejor en el texto del sistema especializado, Como el sistema de consulta acerca del lenguaje MQL5 se utilize el diccionario MetaQuotes Language Dictionary. El manual de referencia contiene las funciones, operaciones, palabras reservadas y otras construcciones del lenguaje divididas por categorias. El manual permite averiguar la descripaén de cada elemento que se utiliza y que compone el lenguaje. Los programas escritos en MetaQuotes Language 5 tienen distintas propiedades y finalidades: + El Asesor Experto es un sistema automatico de comerdo (SAC) que tiene como referenda un grafico determinado. El Asesor Experto se inida si surge un evento que éste puede procesar: eventos de inidalizacién y deinidalizadén, evento de recepdén de un nuevo tick, evento procedente del temporizador, evento relacionado con el cambio de la profundidad de mercado, ‘eventos procedentes del grafico y los eventos del usuario. El Asesor Experto no sélo puede fundonar en modo de informar sobre la posibilidad de llevar a cabo una transaccién, sino celebrar las transacciones en la cuenta comerdal de una forma automatizada, enviandolas Inmediatamente al servidor comercial. Los Asesores Expertos se guardan en la carpeta con la siguiente direccién - fichero_terminal\MQLS\Experts. La quintaesencia integral comunicante © El indicador de usuario es un indicador técnico creado personalmente por el usuario como complemento de los indicadores ya integrados en el terminal de cliente, Los indicadores de usuario, igual que los indicadores built-in, no pueden comerciar de una forma automatica y estan destinados pare realizar Gnicamente las funciones analiticas. Los indicadores de usuario se guardan en el directorio - fichero_terminallMQLS\Indicators = El script es un programa destinado para ejecutar alguna accién sélo una vez. A diferencia de los expertos, los scripts no procesan ningiin evento salvo el de inicalizacién, para ello el script debe disponer de la funcién procesal OnStart. Los scripts se guardan en el directorio - Fichero_terminal\AIQLS\Scripts + La biblioteca es un fichero de las funciones del usuario que est destinado para guardar y distribuir las partes de lor programas del usuario de uso frecuente. Las bibliotecas no pueden activarse de una forma auténoma. Las biblictecas se almacenan en el directorio - fichero_terminal\MQL5\ Libraries + El archivo de insercién es un texto fuente de los bloques de los programas de usuario de uso frecuente, Durante la fase de compilacién, estos archivos pueden ser incluidos en los textos fuentes de los expertos, scripts, indicadores de usuario y bibliotecas. Es més preferible utilizar los archivos (© 2000-2010, MetaQuotes Software Corp. MQL5 de insercién en ver de las bibliotecas debido a los gastos accesories adicionales a la hora de recurrir a las funciones de la biblioteca, Los archivos de insercién pueden estar ubicados en el mismo directorio donde se encuentra el archivo inidal. En este caso se utiliza la orden #include con las comillas dobles. Otro sitio para guardar los archivos de insercién es el directorio fichero_terminall MQLS\ Include, utilizando en este caso la orden Hinclude con los paréntesis angulares © 2000-2010, MetaQuotes Software Corp, (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Bases del lenguaje El lenguaje MetaQuotes Language 5 (MQL5) es un lenguaje de programadién orientado a objeto: de alto nivel y est8 destinado para disefiar las estrategias automaticas de comercio, indicadores técnicos de usuario con el fin de analizar diferentes mercados financieros. No sélo permite disefiar diferentes sistemas expertos destinados para trabajar en tiempo real sino crear sus propias herramientas eréficas que ayudan a tomar decisiones comerciales. MQLS se basa en concepto del lenguaje de programacién muy usual C++, En comparacién con MQL4, han sido agregadas las enumeraciones, estructuras, clases y procesamiento de eventos, La interaccién de los programas procesados en MQLS con las dems apticadones mediante dll ha sido facilitado al méximo gracias al aumento de cantidad de tipos prindpales incorporades. La sintaxis del lenguaje MQLS es paredida a la del C++, lo que permite traspasar a él sin ninguna dificuitad los programas escritos en otros modemnos lenguajes de programacién Con el fin de aprender el lenguaje MQL5 todos los temas han sido agrupados en los siguientes apartador: + Tipos de datos + Operaciones y expresiones * Operadores * Funciones * Variables * Preprocesador * Programadién orientada a objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Sintaxis En aspecto de la sintaxis el lenguaje de programadén de estrategias comerciales MQL5S es muy parecido al lenguaje de programacién C++, salvo algunas posibitida des: * falta la aritmética de direccién; * falta el operador goto; + no se puede utilizar la enumeradén anénima; * constructores de clases y estructuras no disponen de parémetros; * no hay herencia miitiple. Véase también Enumeraciones, Estructuras y clases, Herencia (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Comentarios Los comentarios en bloque se empiezan con los simboles /* y se terminan con*/. Estos comentarios no pueden ser insertados. Los comentarios en tinea se empiezan con los simbolos //, se terminan con elsimbolo de nueva linea, se puede insertartos en los comentarios en bloque. Esta permitido el uso de los comentarios en cualquier lugar donde se puede utilizar los espadios, ademas la cantidad de espacios no esté limitada Ejemp| //--~ Comentario en linea /* Comentario on // Conentario en linea insertado bloque 7 (© 2000-2010, MetaQuotes Software Corp. za Bases del lenguale MQL5 Identificadores Los identificadores se utitizan como los nombres para las variables y funciones. Los identificadores no pueden tener mas de 31 caracteres. Los simbolos permitidos para escribir los identificadores son los siguientes: digitos numérico: de 0 2 9, letras maytisculas y minusculas latinas a-z y A-Z se reconocen como simbolos distintos, guién bajo (_). Digitos numéricos en ningtin caso deben aparecer como primer caracter. Un identificador no puede coincidir con una palabra reserv ada Ejemplos: MAME] nanel Total_§ Paper Véase también Variables, Funciones (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Palabras reservadas Los identificadores especificados més abajo se determinan como palabras reservadas a cada una de las cuales le corresponde una accién determinada, y no pueden ser utitizados en otro sentido: Tipos de datos boot enum struct char float uuchar lass int wine color long long, datetime short ushort double string void Especificadores de acceso const private protected publi virtual Clases de memoria extern input static Operadores break do return case abe sizeof continue for switch default if white delete new Otros false Hdefine property this, Himport true Hindlude (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Tipos de datos Cualquier programa opera con los los datos. Dependiendo de su fundién, éstos pueden ser de varios tipos. Por ejemplo, para acceder a los elementos de un vector se utilizan lor datos del tipo de nim eros enteros. Los datos de precios tienen el tipo de doble precisién en punto flotante, Esto se debe a que en el lenguaje MQLS no est previsto ningtin tipo especial para los datos de precios. Los datos de diferentes tipor se procesan a diferentes velocidades. El procesamiento de datos de nniimeros enteros se realiza mas rapido. Para procesar datos de doble precisién se utiliza un coprocesador especial. No obstante, a causa de la complejidad de demostracién interna de los datos de punto flotante, éstos requieren mas tiempo para ser procesados que los de numero enteros. Los que mas lentamente se procesan son los datos en cadena de caracteres. Esto esta reladonado con la distribucién y redistribudén dinamica de la memoria operativa del ordenador. Prindipales tipos de datos: * enteros (char, short, int, long, uchar, ushort, uint, ulong) * \6eicos (bool) * literales (char, uchar) + cadenas de caracteres (string) * de punto flotante (double, float) * calor (color) * fecha y tiempo (datetime) + enumeraciones (enum) Tipos de datos compuestos: * estructuras + cases, En los términos de POO los tipos complejos de datos obtienen el nombre de los tipos abstractos de datos. Los tipos color y datetime sirven unicamente para la comodidad de presentadién e introduccién de los parametros hechos desde fuera: la tabla de propiedades del asesor o indicador del usuario (pestafia " Inputs"), Les datos de los tips color y datetime se representan como los niimeras enteros. Los tipos enteros y los del punto flotante se llaman los tipos aritméticos (num éricos} En las expresiones se utiliza ls conversién impticita de tipos si no se indica lo contario (a explicta) Véase también Conversién de tipos (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 pos enteros En el lenguaje MQLS los tipos enteros estén representados por once categorias. Algunos de ellos se puede utilizar en conjunto con los demés si lo requiere la légica del programa, aunque en este caso hay que tener en cuenta las normas de conversién de tipos En la tabla de abajo se muestran las caracteristicas de cada tipo. Ademés, en la ultima columna, para cada tipo se indica su andlogo en el lenguaje de programacién C++. Tipo Tamaiio —en_Valor minimo Valor maximo Analogo_ en ell bytes lenguaje C++ char 1 -128 127 char char, 1 o 255 unsigned char, BYTE boot 1 O(fatse) A(true) bool short 2 -32 768 32 767 short, wehar_t short 2 0 65535 unsigned short, WORD int 4 +2147 483 648 | 2147 483647 | int int 4 0 4294967295 | unsigned —_ int, DWoRD color 4 a4 1677215 int, COLORREF long 8 -9 223 372 036 | 9 223 372 036 | _intea 854775 808 854775 807 long 8 0 18 446 744 073 | unsigned _intéd 709 551 615 datetime 8 0 (1970.01.01 | 32 535244799 | __timesa_t 0:00:00) (3000.12.31 73:59:59) Los valores de tipos enteros también pueden ser representados en forma de las constantes numéricas, literales de color, literales de fecha-hora, constantes de signos y enumeraciones. Véase también Conversién de datos, Constantes de tipos num éricos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale MQL5 Tipos char, short, int y long char Eltipo entero char ocupa en la memoria 1 byte (8 bits) y permite representar en el sistema numérico binatio 2°8 valores = 256, El tipo char puede contener los valores positives, igual que negatives. El rango de valores es de-128 2 127, uchar Eltipo entero uchar también ocupa en la memoria 1 byte, igual que el tipo char, pero a diferenda de él, uchar es destinado unicamente a los valores positives. El valor minimo es igual a cero, el valor maximo es igual a 255. La primera letra u del nombre uchar es la abreviatura de la palabra unsigned (sin signo). short El tipo entero short tiene el tamajio de 2 bytes (16 bits), permite representar la multitud de valores igual 2 elevado a 16: 2"16 = 65 536. Puesto que el tipo short es con signas y contiene los valores tanto positives, como negatives, el rango de valores se oscila entre -32 768 y 32 767. ushort El tipo ushort es el tipo short sin signos, también tiene el tamafio de 2 bytes. El valor minimo es igual a cero, el valor maximo es igual a 65 535, int El tipo entero int tiene el tamafio de 4 bytes (32 bits), El valor minimo es de -2 147 483 648, el valor maximo es de 2 147 483 647. uint El tipo entero sin signos uint ocupa en la memoria 4 bytes y permite representar los valores de rnumeros enteros de 0 a 4 294 967 295, long Eltipo entero long tiene el tamafio de 8 bytes (64 bits). El valor minimo es de -9 223 372 036 854 775 808, el valor maximo es de 9 223 372 036 854 75 807. ulong El tipo entero ulong también ocupa 8 bytes y permite almacenar valores de 0 a 18 446 744.073 709 551 615, Ejemp| char chel2; (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 short sh=-S000; 148777; ant Debido 2 que los tipos enteros sin signos no sirven para almacenar los valores negatives, el intento de poner los valores negativos puede llevar a las consecuendas inesperadas. Pues un script inocente como éste llevard a un ciclo continuo: //-- ciclo continuo void OnStart() ‘ uchar uch; Ast es correcto: //--~ version correcta void OnStart() ‘ uchar uch; fox (char ehe-129;eh¢=127;eh++) wche", uch) che -128 u_che 128 che 127 uch 129 che -126 ude 130 che -125 uch 131 che -124 u_che 132 che 123 u_che 133 che -122 ude 134 che 121 uche 135 (© 2000-2010, MetaQuotes Software Corp. BT 22 ensie che -120 che -119 che -118 che 117 che -116 che 115 che 114 che 113 che -112 che 111 Ejemplos: //--~ no se puede guardar los valores negatives en los tipos sin signos che 136 uch 137 che 138 uch 139 ude 140 ude 141 che 142 uch 143 che 144, uiche 145 char u_eh=-120; ushort u_sh=-5000; wine win Hexadecmales: cifras 0-9, letras a-f 0 A-F para los valores 10-15, se empiezan con 0x 0 0X. Ejemp| 401280; QkOA, O12, CHO2, Ox2E, OkA3, OAs, CHICT Véase también Conversién d le tipos MQL5 (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Constantes de caracteres En MQLS los caracteres, como elementos de una linea, son los indices en conjunto de caracteres Unicode, Estos son unos valores hexadecimales que pueden ser convertidas en nimeros enteros y con los que se puede ejecutar operaciones de ntimeros enteros, tales como, la suma y la resta, Cualquier carécter sotitario que viene entre comillas simples 0 el cédigo ASCII hexadecimal en forma de '\x10' es una constante de caracteres y tiene el tipo ushort, Por ejemplo, la introduccién del ‘0! representa el valor numérico 30 que corresponde al indice segin el cual en la tabla de caracteres se encuentra elsigno cero. Ejemplo: void onstart() ‘ //--~ deverninenos las constantes de caracteres int symbol_O='0'; int symbol_S=symbol_0#9; // obtensuos ©1 signo ‘6! //--~ saquenos los valores de las constantes printf ("En forma decimal: symbol_O-4d, symbol_9=4d",symbol_O,symbol,_8); printf ("En forza hexadecimal: symbol O-Oxtx, Symbol. 9=0x%x", symbol,_O,symbol, 9) //--~ introduzcamos las constantes en una linea string test"; ‘StringSetCharacter (test, 0,syabol_O} ‘StringSetCharacter (test, 1,syabol_9) //--~ asi se ven en 1a linea Print(test); ) Para un compilador durante el analisis de las tineas de constantes y las constantes de caracteres en el cédigo fuente del programa la barra inversa es un caracter controlador. Algunos simbolos, por ejemplo, comillas simples ('), comillas dobles ("), barra inversa (\) y caracteres controladores se puede representar mediante una combinadén de signos que se empiezan con la barra inversa (\), segun se indica en la tabla de abajo: Nombre del signo Cédigo Inscripcién en Valor numérico mnemotécnico 0 ‘MQLS imagen nueva tinea (cambio | LF Nn 13 de tinea) ‘tabulacién horizontal. | HT ne 9 retorno de carro cR Ne 10 barra inverse \ AY 92 comilla simple . 39 comilla doble . 34 cédigo hexadecimal hhh "hhh de 1 a 4 simbolos hexadecimales cédigo decimal d Nd numero decimal de 0 2 65535 (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Si después de la barra inversa sigue un signo distinto a los arriba mencionados, entonces el resultado no esta determinado. Ejemplo: void onstart() de caracteres // codigo Oxas + // codigo del signo © imprimanos Las constant Print(a,b,c,d) 7 agreguemos ©l signo a la linea sbring teste"; StringSetCharacter (test,0,a) Print(test); cambiemos ¢l signo en la linea ‘StringSetcharacter (test, 0,b) Print(test); cambiemos el signo en la linea StringSetcharacter (test,0,c)? Print(test); cambiemos ¢1 signo en la linea ‘StringSetcharacter (test, 0,d) Print(test); representemos signos en forma numérica int al=65; ant e1=169; ant dl=174; agreguenos ©l signo a la linea ‘StringSetCharacter (test,1,al) : Print(test); cambiemos ¢1 signo en la linea ‘StringSetCharacter (test,1,bl) 7 Print(test); cambiemos ¢1 signo en la linea ‘StringSetCharacter (test,1,cl) 2 Print(test); cambiemos ¢1 signo en la linea ‘StringSetCharacter (test,1,dl) 2 Print(test); ) Como se deca antes, el valor de una constante de caracteres (o una variable) representa un indice en la tabla de signos, y debido a que éste es un niimero entero, se permite es cribirlo de varias maneras (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale MQL5 void onstart() ‘ I // c6digo del signo © corresponde al literal '\xAE' 7/ c6digo del signo $ corresponde al literal '\x24' // cédigo del signo © corresponde al literal '\xAS' // cédigo del signo 0 corresponde al literal '\x263A' saquenos los valores Print(a,b,c,d) agrequenos ©l signo a la linea string teste"; StringSetCharacter (test,0,a) Print(test); cambiemos ¢1 signo en la linea StringSetCharacter (test, 0,b) Print(test); cambiemos ¢1 signo en la linea StringSetCharacter (test, 0,c)? Print(test); cambiemos ¢1 signo en la linea StringSetCharacter (test, 0,d) Print(test); cédigos de palos ant al=0x2660; 02663; ‘agreguenos el signo de pica ‘StringSetCharacter (test,1,al) 2 Print(test); agreguemos ©l signo de corazén ‘StringSetCharacter (test, 2,bl) 7 Print(test); agreguemos ©l signo de diamante StringSetCharacter (test, 3,c1) 2 Print(test): agreguemos ©1 signo de trébol ‘StringSetCharacter (test,4,dl) 7 Print(test); Ejemplo de literales de signos en la linea vest="Dana\x26€0As\x2662"? prince ("4s",test) : ) La representacién interna del literal de signo es el tipo ushort. Las constantes de caracteres pueden adquirir valores de 0 2 65535, Véase también StringSetCharacter(), StringGetCharacter( StringToShortArray() ShortToString(), ShortArrayToString(), (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale MQL5 Tipo datetime El tipo datetime sirve para almacenar la fecha y la hora en forma de cantidad de segundos que han pasado desde el 1 de enero de 1970. Ocupa en la memoria 8 bytes Las constantes de fecha y hora pueden estar representadas por una linea de caracteres compuesta de 6 partes que representan el valor numérico del afio, mes, dia (o dia, mes, afio), hora, minuto y segundo, La constante se mete entre comillas simples y se empieza con el signo D. Se puede omitir o la fecha (afio, mes, dia) 0 la hora (hora, minuto, segundo}, o pueden ser las dos cosas. El rango de valores es desde el 1 de enero de 1970 hasta el 31 de diciembre de 3000. Ejemplos: D+2004.01.01 00:00! // Alo Nuevo D'1980.07.19 12:30:27" ‘19.07.1980 12:30:27" ‘19.07.1980 12' //equivalente a D'1980.07.19 12:00:00! D'01.01.2004" //equivalente a D'O1.01.2004 00:00:00" D'12: 30:27! //equivalente a D'[fecha de compilacién] 12:30:27' be //equivalente a D'[fecha de compilacién] 00:00:00' Véase también Estructura de fecha, Fecha y hora, TimeToString, StringToTime (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 Tipo color El tipo color sirve para almacenar la informacién sobre el color y ocupa en la memoria 4 bytes. El primer byte no se cuenta, los demas 3 bytes contienen los componentes RGB. Las constantes de colores pueden ser representadas de tres formas distintas: de forma literal, con nnimeros enteros o mediante un nombre (sélo para los colores-W eb concretos). La representacién literal se compone de tres partes que representan valores numéricos de le intensidad de tres componentes prindpales: rojo (red), verde (green), azul (blue). La constante se mete entre comillas simples y se empieza con el signo C. Los valores numéricos de la intensidad del componente de color se encuentra entre Q y 255, La representacién con numeros enteros se realiza a través de un nimero decimal o hexadecimal. El nim ero hexadecimal tiene la siguiente forma Ox00BBGGRR, donde RR es la intensidad del color rojo, GG - verde y BB - azul. Las constantes decimales no tienen la expresién directa en RGB, Estas representan el valor decimal de la expresién hexadecimal de nuimeros enteros. Los cotores concretos expresan un conjunto de colores-W eb. Ejemplos: I c'128,128,128' —// gris C*0x00, 0x00, OKFF! // azul //mobres d= colores Literales Red / x00 Yellow // amarillo Black // negro representaciones con niimeros enteros OxFFFFFF 1 blanco 16777215 1 blanco ‘ox008000 // verde 32768 // verde Véase también Colores Web, ColorToString, StringToColor, Conversién de tipos (© 2000-2010, MetaQuotes Software Corp. Tipo bool MQL5 El tipo bool sirve para almacenar los valores légicos true (verdadero) 0 false (falco) la representacion de los cuales es 1 0 0 respectivamente. Ejemplos: bool a = true; bool b = false; bool ¢ = 1; La representacién interna es un niimero entero de tamano de 1 byte, Cabe sefialar que en las expresiones légicas se puede utilizar en vez del tipo bool también otros tipos enteros 0 reales 0 representaciones de estos tipos, el compilador igual no va a sefialar ningun error. En este caso el valor cero va a ser interpretado como false y las dems como true. Ejemplos: Af (i) Print( else Print( f(a) Print( else Print 450; Af (i) Print( else Print 420.0; f(a) Print( else Print( 4,"y tiene el valor true"); yiyty tiene el valor false"); 4,"y tiene el valor true"); rdy"y tiene e valor false"); is"y tiene el valor true"); yiyty tiene el valor false"); 4,"y tiene el valor true"); ",d,"y tiene el valor false"); resultados de ejecucién Sy tiene el valor true 2, §0000000 y tiene el valor true Oy tiene ¢1 valor false // d= 0,00000000 y tiene el valor false Véase también Operaciones légicas, Prioridades y orden de las operaciones (© 2000-2010, MetaQuotes Software Corp. e Bases del lenguaje MQL5 Enumeraciones Los datos del tipo enumerativo enum se refieren 2 una cantidad timitada de datos. La definicién del tipo enumerativo: enum noubre del tipo enumerativo ‘ lista de valores La lista de valores es una lista de variables separadas por comas. Ejemplo: enum months // emumeracién de las constantes concretas ( January, February, March, april, May, Sune, July, August, September, october, Movember, December y Después de declarar una enumeracién aparece un nuevo tipo de dates de numeros entero: de 4 bytes La declaracién del nuevo tipo de dates permite al compilador controlar de una forma estricta los parametros trancferidos porque la enumeracién establece nuevas constantes concretas. En el ejemplo de arriba la constante concreta January tiene el valor 0, February tiene el valor 1, December tiene el valor 11, Regla: si una constante concreta, siendo un elemento de enumeradién, no tiene adjudicado un valor concreto entonces su valor se forma de una manera automatica, Si se trata del primer elemento de enumeracién se le va 2 adjudicar el valor 0. Para todos los elementos posteriores los valores se calculan a base del valor del elemento anterior sum ndole un uno. Ejemplo; enum intervals // snumeracién de las constantes concretas ( month, // intervalo de un mes ‘two_months, // dos meses // tres meses ~ trimestre // senestre // sho ~ 12 meses (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Observaciones # A diferencia de C++ el tamafio interno de la representacién de un tipo enumerativo en MQLS siempre es ded bytes, Es decir, sizeof{months) devolvers el valor 4, * A diferencia de C++ en MQLS no se puede declarar una enumeracién anénima. Es decir, después de la palabra clave enum siempre hay que indicar un nombre dnico, Véase también Conversién de tipos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale MQL5 Tipos reales (double, float) Los tipos reales (0 tipos de punto flotante) representan valores que contienen la parte fraccionaria. En el lenguaje MQL5 existen dos tipos para los numero con punto flotante. El modo de representar los rnlimeros reales en la memoria del ordenador se rige por el estandar IEEE 754 y no depende de las plataformas, sistemas operatives y lenguajes de programacién. Tipo Tamafio en Valor minimo Valor Precision de Analogo en et bytes positive maximo representaci lenguaje C++ float 4 1,175494351 | 3.402823466 | 7 cifras float 238 +38 significativas double 8 2,225073858 | 1.797693134 15 cifras, double 5072014e |: 8623158e+30 | significativas 308 8 El nombre double significa que la precisién de estos niimeros es dos veces mas que la predisién de lo: nntimeros del tipo float. En mayoria de los casos el tipo double es mas cémodo. En muchos casos la precisién limitada de los nimeros float simplemente es insuficiente, La razén de utilizar todavia el tipo Float se encuentra en el ahorro de la memoria durante el almacenamiento (es importante para las grandes cantidades de matrices de ndmeros reales) Las constantes de punto flotante se componen de la parte entera, punto (.) y parte fraccionaria, La parte entera y fraccionaria es una sucesién de ndmeros decimales Ejemplos: double a=12.111; double b=-856.1007; float ¢ =0.0001; float 4 =lé; Existe el modo cientifico de escribir las constantes reales. A menudo esta modo de escribir es mas compacto en comparacién con la forma tradicional. Ejemplo: double cl=1.12123515e-25; double ¢2=0. c00000000000000000000000112123515; // 24 ceros despues del punto decim Print("L. cl =",DoubleToString(cl,16)) // Resultado: 1. ¢1 = 0.a90000000000000 Print("2. el =",DoubleToString(cl,-16)); // Resultado: 2. cl = 1,12123514ss9eseee, Print("3. 2 =",DoubleToString(c2,-16)); // Resultado: 3, c2 = 1.121235 14s99eesee Hay que recordar que los ntimeros reales se almacenan en la memoria del ordenador con una derta (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 precisién imitada en el sistema binario, mientras que el sistema decimal es de uso general. Por eso muchos nuimeros que se escriben en elsistema decimal, en el sistema binario pueden ser escritos sélo en forma de fracdén continua Por ejemplo, en el ordenador los nmeros 0.3 y 0.7 estan representados por las fracciones continuas, mientras que el ntimero 0.25 se guarda de forma exacta porque es la potencia de 2 Por esta razén no se recomienda de ninguna manera comparar la igualdad de dos nimeros reales Porque esta comparacién no es correcta Ejemplo: void Onstart() ‘ I double three: double x,¥,27 xeL/three; yea/three; zeS/three; Af (xtys=2) Print("1/3 + 4/3 else Print ("1/3 + 4/3 != 5/3"); // Resultado: 1/3 + 4/3 '= 5/3 ) 5/3"); Si en alguna ocasién es necesario comparar la igualdad de dos niimeros reales, entonces se puede hacerlo de dos maneras distintas. El primer modo consiste en la comparacién de diferenda entre dos rntimeros con un valor pequefio que marca la precisién de comparacién. Ejemplo: bool EqualDoubles (double dl,double d2,double epsilon) ‘ Af (epsiloncd) epsilor -psilon; I Af (dl-d2>epsilon) return false; Af (dl-d2<-epsilon) return false; I return true; ) void OnStart() ‘ double d_val=0.7; float f_val=0.7; Lf (EqualDoubles(d_val,f_val,0.000000000000001)) Print(d_val,"equals”,f val): |_val=",DoubleTostring(d_val,16), -_val=" DoubleToString(f_val,16))? // Resultado: Different: d_val= 0.7000000000000000 f_val= 0. ) 1959998807S0710 Cabe menconar que el valor del parémetro epsilon en el ejemplo de arriba, no puede ser menos que la (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 constante predeterminada DBL_EPSILON, El valor de esta constante es 2.2204460492503131¢-016. Para el tipo float la constante correspondiente es FLT_EPSILON = 1.192092896e-07. El sentido de estos valores es siguiente: se trata del valor minima que satisface la condicién 1.0+DBL_EPSILON != 1.0 (para los nimeros del tipo float 1.0+FLT_EPSILON != 1.0) El segundo modo supone la comparacién de la diferencia normalizada de dos ntmeros reales con el valor cero. Es inutil comparar la diferencia de los numeros normatizados con el cero porque el resultado de cualquier operacién matemtica con los niimeros normatizados no va a ser normatizado, Ejemplo: bool CompareDoubles (double number1,double number?) ‘ {Lf (Normal izeDouble (number1-number2,8) ) return (true): else return(false); ) void OnStart() ‘ double d_val: float £ val: {Af (CompareDoubles(d_val,f val)) Print(d_val,"equals",f val); 4_vale=" ,DoubleToSteing(d_val,1é), r_val=" DoubleToString(f_val,16))? // Resultado: Different: d_val= 0.3000000000000000 f_val= 0. 3000000119208280, ) Como resuttado de algunas operaciones mateméticas del coprocesador se puede obtener un numero real extendido, el que no se puede utilizar en las operaciones matemticas y operaciones de comparacién porque el resultado de ejecudén de las operaciones con niimeros reales extendidos no esté definido. Por ejemplo, tratando de calcular el arcseno de 2 se obtiene el infinito negative. Ejemplo: double abnormal = MathArcsin(2.0); Print("MathArcsin(2.0) =", abnormal); // Resultado: MathAresin(2.0) = -1.#1ND0000 A parte del infinito negativo existe el infinite positive y NaN (no es un niimero). Para determinar que el nim ero es extendido se puede utilizar la funcién MathisValidNumberl). Segtin el esténdar IEEE ellos tienen una representadién informatica especial. Por ejemplo, el infinito positivo para el tipo double tiene la representacién de bit 0x7FFO 0000 0000 0000. Ejemplos: struct strl ‘ double a; he struct str? ‘ Jong 1; (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale MQL5 expecemos strl sl; str? 82, 1. deWatharesin(2.0); // obtenenos mimero extendido -1. #1ND af S164x",s1.d,82.1); // mimero extendido ~1. #QNAN af S164x",s1.d,82.1); ‘52, 1-07FF7000000000000; // nomimero maximo Salt 82; prineé("3. %£ S164" s1.d,s2.1); 52. 1+Qe7FFe000000000000;—// nomimero minino QNall Af SI64X",s1.4)82.1) 5 ‘52. 1-0 7FFFO00000000000; // nomimero méxino Mall Af SI64X",s1.4)82.1) 5 '52.1+Qe7FFO000000000000;// infinito positive 1.#INF y nomimero minimo SNall Af SI64X",s1.4)82.1) 5 ‘52. 1+0eFFFO000000000000;// infinito negative -1.#1NF 2 printé("7. %£ $164",s1.4,82.1); ‘92, 1=08000000000000000; // cero negative -0.0 sles2; printé("S. %£ 4164" s1.d,s2.1); 's2.1+0x3FE0000000000000;// 0.5 Af SI64X",s1.4)82.1) 5 ‘92, 1=03FFO000000000000; 2.0 Af SI64X",s1.4)82.1) 5 ‘92, LO) FEFFFFFFFFFFFFF: 2 printé("Ll. %.lée *164%",s1.d,s2.1)7 // mimero méximo normalizado (MAX DBL) (© 2000-2010, MetaQuotes Software Corp. BE 22 21 ensaie I ‘92, 1-001 0000000000000; sles2; printé ( 000000 7 Véase también alee 4. 1616a" alee 4. 1616a" FFFe000000000000 FFFFO00000000000 ‘7FF7000000000000 ‘7000000000000 ‘7FFFOO0000000000 ‘7FFOOO0000000000 FFFO000000000000 ‘sodq0000000000 ‘3FE0000000000000 ‘3FFOo00000000000 MQL5 // minimo normalizado positive (MIN_DBL) 18.4)82.1)5 // indicanos que ¢1 mimero 0.7 ~ es una fraccién cont 18.4)82.1)5 2250738585072014e-308 0010000000000000 1 AL, 1.7976931348623157e+308 7FEFFFFFFFFFFFFF 6, S99ecessoeseecece-onl sFESEceeEcceccee DoubleToString, NormalizeDouble, Constantes de tipos num éricos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Tipo string Tipo string sirve para guardar las cadenas de caracteres. Una cadena de caracteres es una sucesién de caracteres en formato Unicode con el cero al final A una variable string se le puede asignar una constante literal. Una constante literal es una sucesién de caracteres Unicode encerada entre comillas dobles: "Es una constante literat’ La representacién interna es una estructura de 8 bytes. El primer elemento de la estructura, lo entero del tipo int buf_len, contiene el tamafio del buffer predeterminado para una cadena, El segundo elemento de la estructura but_ptr, el puntero de 32-bits al bufer, contiene una cadena, La variable str_len del tipo int se encuentra directamente antes del buffer y contiene la longitud de la cadena (cantidad de caracteres de cadena hasta el cero final) El miembro de la estructura buf_len puede tener uno de los siguientes valores + 0 indica que se trata de una cadena constante que se guarda en un pool de cadenas constantes; = -1- indica que la cadena pertenece al terminal de cliente (el terminal de cliente se encarga de le liberacién de esta cadena, en vez de que lo haga el subsistema ejecttivo); ‘= numero es el tamafio del buffer en signos tipo short que se ubica en la memoria del ordenador con el fin de guardar una cadena, int buf_len_puntaro buf_ptr “ L longitud del butter buf_ten int str_ten js a lk lk lk __Congitud de ta Cadena strlen Justamente antes del buffer se deja un espacio de 4 bytes para la informacién auxiliar sobre la longitud de la cadena. Precisamente de aqui la funcién StringLen{) saca la informacién sobre la la longitud de la cadena. La longitud de la cadena puede tener el valor cero 2 pesar de que el mismo buffer que se le asigna tenga el valor distinto a cero, El fin de la cadena en el buffer siempre esté donde se encuentra el primer byte que contiene 0. Para poder introducir una comitla doble (") dentro de la cadena hay que interponerle el signo de barra inversa (\). Cualquier constante de signo especial, si le interviene elsigno de barra inversa (\), puede ser introducida en la cadena Ejemplos: string svar="This is a character string” string svar2=StringSubstx (svar,0,4) ; Print ("Simbolo de copyright \t\xO0AS") ; FileWrite (handle,"esta cadena contiene 1 simbolo de avance de linea \n"); string MTSpa \\Program Files\\MetaTrader 5"; (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguale MQL5 Si la variable del tipo string no esta inicializada de una manera clara, entonces el mismo compilador pone el cédigo que anula la estructura indicada. Esto es necesario para evitar el error critico a la hora de dirigirse @ una variable de este tipo. Véase también Conversién de tipos, Funciones de cadenas de caracteres, FileOpen, FileReadString, FileWriteString (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 Estructuras y clases Estructuras Una estructura es un conjunto de elementos del tipo libre, salvo el tipo void. De esa manera, la estructura une los datos de diferentes tipos que estén vinculados de una forma légica Declaracién de estructura El tipo de datos estructuralse define de la siguiente manera: ‘struct nombre_de_estructura ‘ descripcién_de_slenentos No se puede usar el nombre de la estructura en calidad del identificador (nombre de la variable o fundién). Hay que tener en cuenta que en MQLS los elementos de una estructura siguen directamente tno detrés del otro sin que sean atineados. En el lenguaje C++ este comando se proporciona al compilador mediante la instruccién #pragma pack (1) Si hace fatta hacer otra alineadén dentro de la estructura, es necesario utilizar los elementos relleno" adicionales de tamafio necesario, Ejemplo: struct trade_settings ‘ uchar slippage: // valor del deslizaniento permitide - tanafio 1 byte char reservedl; —// 1 byte de permiso short reserved2; — // 2 bytes reserved4; —// otros 4 bytes de permiso. Aseguramos 1a alineacién al mary take; io de fijacién del beneficio stop: io del stop de proteccién Esta descripcién de alineacién de las estructuras es necesaria unicamente para la transmisién a las funciones dll importadas. Atencisn: este ejemplo refleja los datos proyectados de una manera errénea, Seria mejor declarar al principio los datos take y stop de mayor tamafio que el tipo double, y luego deciarar el elemento slippage del tipo double, En este caso, la presentacién interna de los datos siempre va a ser igual independientemente del valor indicado en pragma pack() Si la estructura contiene las variables del tipo string y/o el objeto del vector dinémico, entonces pare esta estructura el compilador asigna un constructor implicito donde se efectua la anuladén de todos las elementos del tipo string y la inicializadién correcta para el objeto del vector dinamico, Estructuras simples (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Las estructuras que no contienen las cadenas y objetos del vector dindmico se llaman estructuras simples, las variables de estas estructuras pueden copiarse ibremente una en otra, incluso si se trata de las estructuras diferentes, Las variables de estructuras simples, igual que sus matrices, pueden ser pasadas como parémetros en las funciones importadas de DLL. Acceso a los elementos de la estructura El nombre de la estructura es un tipo de datos nuevo y permite declarar las variables de este tipo. Se puede declarar la estructura sélo una vez dentro de un proyecto. El acceso a los elementos de las estructuras se reatiza mediante operacién punto (.). Ejemplo: struct trade_settings ‘ double take; // valor del precio de fijacién del beneficio double stop: // valor del precio del stop de proteccién uchar slippage; // valor del deslizaniento permitido //--~ creanos ¢ imicializamos 1a variable del tipo trade_settings trade_settings my_set=(0.0,0.0,5}; Af (input_TP>0) my_sev. take=input_TP; Clases Las clases llevan una serie de diferencia de las estructuras * en la declaracién se utiliza la palabra clave dass; * sino se indica lo contrario todos los elementos de las clase por defecto tienen el especificador de acceso private, Los elementos-datos de la estructura por defecto tienen el tipo de acceso public, si no se indica lo contrario; * los objetos de las cases siempre tienen una tabla de funciones virtuales, incluso si en la clase ninguna funcién virtual esté declarada. Las estructuras no pueden tener funciones virtuales; « las dases pueden ser heredadas unicamente de las clases, y las estructuras sélo de las estructuras. Las dlases y las estructuras pueden tener el constructor y destructor explicites. En el caso, si el constructor esté determinado de una manera expticta, la inidalizacién de variable del tipo de le estructura o clase con la ayuda de la sucesién inidalizadora es imposible. Ejemplo: struct trade_settings ‘ double take; // valor del precio de fijacién del beneficio double stop; // valor del precio del stop de proveccién uchar slippage; // valor del deslizaniento permitido //--~ constructor trade_settings() ( take=0.0; stop=0.0; sLippage= destructor I wtrade_settings() ( Print("Es el final ay he (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 //--~ compilador nostrara ¢1 error con el mensaje sobre la imposibilidad de inicializ teade_settings my_set=(0.0,0.0,5}7 Constructores y destructores El constructor es una funcién especial que se ejecuta autom sticamente al crear un objeto de la clase 0 estructura, y a menudo se utitiza para la inicializadién de los elementos de la clase. A continuadén seguiremos hablando sélo de las clases, entendiéndose que todo lo mendonado se refiere también 2 las estructuras si no se indica lo contrario. El nombre del constructor tiene que coindidir con el de la clase. El constructor no tiene el tipo que devuelve (se puede indicar el tipo void). En MQL5 los constructores no disponen de ningunos pardmetros de entrada, de esta manera cada dase puede disponer sélo de un constructor. Los elementos de la clase: cadenas, vectores_dindmicos y los objetos que necesitan inidalizadén, en cualquier caso van a ser inicializados independientemente de la presencia del constructor. Los destructores son unas funciones especiales llamadas autométicamente a la hora de eliminar un objeto de la clase. El nombre del destructor se escribe como el de la dase con la tilde (~). Las cadenas, vectores din&micos y los objetos que necesitan deinicializacién van a ser deinicializados de cualquier manera independientemente de la presencia del destructor. Disponiendo del destructor, estas acciones van a ser ejecutadas después del arranque del mismo. Los destructores siempre son virtuales, independientemente de que si estan declarados con la palabra clave virtual o no, Determinacién de los métodos de clase Las funciones-métodos de clase pueden ser determinados tanto dentro de la clase, como fuera de la dedaradién de la clase. Si el método se determina dentro de la clase, entonces su cuerpo sigue directamente después de la declaracién del método. Ejemplo: (© 2000-2010, MetaQuotes Software Corp. e | Bases del lenguale MQL5 class CTetrisshape ‘ protected: ant type, ant xpos, ant x _ypos, ant mxsize; ant mysize; ant a prev_tumn; ant tum; ant _right_border: public: void cTeteissnape (): void SetRightBorder (int border) ( m right bordersborder; } void SetYPos(int ypos) ( mypos-ypos; } void Set¥Pos(int xpos) ( a xpos=xpos? ) ant GetYPos() ( return (m_ypos) + ) ant Get¥os() ( return(m xpos) ; ) ant GetvSize() ( return (m_ysize ) ant GetxSize() ( return (m xsize ) ant GetType() r ) void Lett() ( ) void Right() ( ) void Rotate() r (H+a_turm>3) virtual void Draw() ( retum? ) virtual bool CheckDown(inte pad_arrayl]); virtual bool CheckLeft(inte side_row{]) : virtual bool CheckRight(inte side_rov[]}; Las funciones con SetRightBorder(int border) por Draw() se declaran y se determinan directamente dentro de la clase CTetrisShape. El constructor CTetris Shape() y los métodos CheckDownfint&t pad_array{]), CheckLeft(int& side_row(]) y CheckRight(int& side_row{]) se dedlaran sélo dentro de la dase, pero por ahora no estan determinados. Las determinaciones de estas funciones deben seguir mas adelante en el cédigo. Para determinar el método fuera de la clase se utiliza la operacién del permiso de contexte, como contexto se utiliza el nombre de la clase. Ejemplo: (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguaje MQL5 Ue //| Constructor de 1a clase base 1 Ue void CTetrisShape: : CTetrisshape() acright border=0; ) em 7/\ Prueba de posibilidad de moverse abajo (para la vara 0 él cubo) 1 bool CTetrisshape::CheckDown(ints pad_azray[ ) ( Ant 4)xsizesm_xsize/SHAPE SIZE; us for‘ ( if(m_ypostm_ysize>«pad_arzay[i]) return (false); , iecxsizes itt) I return (true) ) Modificadores de acceso public, protected y private Alla hora de crear nueva clase se recomienda timitar el acceso a los elementos desde fuera. Para eso se utilizan las palabras claves private o protected. En este caso el acceso a los datos encubiertos puede realizarse sélo desde las funciones-métodos de la misma dase. Si se utiliza la palabra clave protected, entonces el acceso a los datos encubiertos se puede realizar también de los métodos de las clases que son herederos de esta clase, De la misma manera se puede limitar el acceso a las funciones-métodos de clase. Si se necesita abrir totalmente el acceso a los elementos y/o métodos de dase, entonces se utiliza la palabra clave public. Ejemplo: class CTetrisField ‘ private: int score; // cuenta ant m_ypos: // posicién actual de 1a pic ant _field[FIELD_HEIGHT]{FIELD WIDTH]; // matrix del vaso ant ‘_rows[FIELD_HEIGHT]; // mmeracién de las filas d int a_last_row; // 1a Ultima fila Libre CTetrisshape —*m_shape; // pieza del tetris bool 1 bover; // fin del juego public: (© 2000-2010, MetaQuotes Software Corp. Bases del lenguale void void void void void void void void private: void void void he MQL5 CTetrisField() ( m_shape-NULL: Init(); Deinit(); Down() Lefe(): Right () Rotate(); Drop () boversfalse; } MewShape() ; CheckAndDeleteRows (); Labelover()+ Cualquier elemento y método de la clase que estén declarados después del especificador public (y hasta el siguiente especificador del acceso), son accesibles a la hora de cualquier referenda del programa hada el objeto de esta clase, En este ejemplo son los siguientes elementos: funciones CTetrisField(), Init(), Deinit(), Down(), Left(), Right(), Rotate() y Drop() Cualquier elemento de la clase que esté declarado después del espedificador private (y hasta el siguiente especificador del acceso), es accesible slo para las funciones-elementos de la misma clase. Los especificadores de acceso a los elementos siempre se terminan con dos puntos (:) y pueden aparecer en la determinacién de la clase varias veces El acceso a los elementos de la clase base puede volver a determinarse durante la herencia_ en las clases derivadas Véase también Programadén orientada a objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Objeto de un vector dinamico Vectores dinamicos Un vector din&mico es una estructura de tamafio de 40 bytes. Se permite deciarar un vector que no no supere 4 dimensiones: struct MqlArrayobject. ( ushort types // tipo de datos codificado ushort flags; // banderas que determinan 1a categoria del vector int itemien; // tanafio de un elemento del vector en bytes int allocated; // tanafio real destinado para el vector int rangeD;—// tamafo de 1a primera dimensién (a priori igual a 0) int rangel; —// tamafo de 1a segunda dimension, si existe. De otro modo igu int range2;—// tamafo de 1a tercera dimension, si existe. De otro modo igu int range3;_—// tamafo de 1a cuarta dimension, si existe. De otro modo igua int reservedO; // datos para int reservedl; // ©1 uso // interno Al dedarar una matriz dinamica (matriz sin valor expreso en el primer par de los corchetes), el compilador crea autométicamente una variable de la estructura indicada més arriba (objeto de matriz dindmica) y proporciona el cédigo para una inidatizacién correcta, Los vectores dinémicos se liberan autométicamente, al salir fuera de los limites de la visibilidad del bloque donde han sido declarados Ejemplo: double matrix[][10][20]; // matriz dinémica de 3 dimensiones ArrayResize(matrix,5); // indicamos 1 tamafio de la primera dimension Vectores estaticos Si todas las dimensiones significativas de un vector se indican de una manera explicta, el compilador de antemano distribuye el espacio necesario de ls memoria. Este vector se llama vector estético, No obstante, el compilador distribuye adicionalmente la memoria para el objeto del vector dinémico. Este objeto esta vinculado con el biifer estatico distribuido previamente (sector de memoria pare almacenamiento de la matriz) La creadién de un objeto del vector dinamico esta condidonado a la posible necesidad de transmitir dicho vector estético como un pardmetro a alguna funcién Ejemplos: double stat_array[5]; // vector dinamico de 1 dimension some_function (stat_array) ; (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguale MQL5 ool some_function(doublee arrayl]) ‘ Af (ArrayResize(array,100)) return (false): return(true) ) Vectores como partes de las estructuras Al declarar un vector estatico como un elemento de una estructura, el objeto del vector dinémico no se crea, Esto se hace para la compatibilidad de las estructuras de dates que se utitizan en Windows API Sin embargo, los vectores estétices declarados como elementos de las estructuras, también se puede pasar a las funciones MQLS. En este caso, al pasar el parametro va a crearse un objeto de un vector dindmico temporal vinculado con el vector estético - elemento de la estructura Véase también Operaciones con vectores, Inicializacién de variables, Visibilidad y tiempo de vida de variables Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Conversion de tipos Transformacién de tipos numéricos ‘Muy 2 menudo surge la necesidad de transformar un tipo de datos en otro. No cada uno de los tipos num éricas puede ser transformado en otro. Las transformaciones admisibles en MQLS se indican en el esquemai uchar —* ushort —» uint —» ulong l/l | char —+ short ——> int_—» long Noe! float —+ double Las lineas continuas con flechas indican las transformacones que se efectuan sin pérdida de la informacién, El tipo bool puede figurar en vez del tipo char (ambos ocupan 1 byte de la memoria), en vez del tipo int se puede utilizar el tipo color (4 bytes cada uno}, y en vez del tipo long se admite el tipo datetime (ocupan 8 bytes cada uno). Cuatro lineas rayadas con flechas de color gris significan las transformadones en las que puede ocurrirse la pérdida de precisiones. Por ejemplo, la cantidad de digitos en el ntimero entero 123456789 (int) supera la cantidad de digitos que puede ser representada en el tipo float. ant m=123456789; float f=n; // contenido f es igual a 1.234567892E8 Print/ // resultado a, rf) 123456788 123456782..00000 El num ero transformado en el tipo float tiene el mismo orden pero con una precisién algo menor. Las transformacones inversas a las flechas negras se realizan con una posible pérdida de la informacién. Las transformaciones entre char y uchar, short y ushort, int y uint, long y ulong (se tienen en cuenta las transformaciones directas e inversas) pueden llevar a la pérdida de la informacién. Resulta que al transformar los valores con punto flotante en el tipo entero, la parte fraccionaria siempre se omite. Si se necesita redondear el némero con punto flotante hasta un nimero entero ms préximo (lo que en mayorfa de las casos puede ser mas util) es necesario utilizar la Funcién MathRound oe Ejemplo: //--~ aceleracion de la gravedad double 9=9.8; double round_g=(int)g? double math_round_g-MathRound(g) : Print ("zound_g= ";round_g); Prine ("math round g =",math_round_g); is Resultado: (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 round_g = 9.00000000 math_round_g = 10.00000000 / Si dos valores se unen con un operador binario, entonces antes de iniciar la operacién el operando del po manor setrertenns a pe may sgin a path indcads on eo cue Soe Fists —tt— ctor En las operadores les tnor de door car, Ucar, shat y shart se aetna tipo in incon drain et Ejemplos: char cl=3; //-- primer ejemplo double d2c1/240.3; Print("cl/240.3 =",d2)7 // Resultado: ¢1/240.3 = 1.30000000 //--~ segunda ejenplo :1/2.040.3; Print(""cl/2.0+0.3 =",42); // Resultado: ¢1/2.0+0.3 = 1.e0000000 La expresién calculada se compone de dos partes. En el primer ejemplo le variable cl del tipo char se transforma en la variable temporal del tipo int, puesto que el segundo operando en la operacién de divisién, la constante 2, tiene el tipo int mayor. Como resultado de la divisién de numeros enteros 3/2 obtenemos el valor 1 que tiene el tipo int. En la segunda operacién del primer ejemplo el segundo operando es la constante 0.3 que tiene el tipo double, por eso el resultado de la primera operacién se transforma en la variable temporal del tipo double con el valor 1.0. En el segundo ejemplo la variable c1 del tipo char se transforma en la variable temporal del tipo double, puesto que el segundo operando en la operacién de divisién, la constante 2.0, tiene el tipo double. Las siguientes transformadones no se realizan. La conversion de tipos numéricos En las expresiones del lenguaje MQLS se puede utilizar tanto la conversién explicita de tipos, como la implicita, La conversion explicita de tipos se escribe de la siguiente manera: var_l = (tipo)var_2; En calidad de la variable var admite también la ins ipcién funcional de la conversién explicita de tipos puede ser una expresién o resultado de ejecucién de la funcién. Se var_l = tipo(var_2); (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Vamos a analizar la conversion expticita 2 base del primer ejemplo. I tercer ejemplo double d2= (double) ¢1/240.3; Print(""(double)cl/2+0.3 =",42); // Resultado: (double)¢1/2+0.3 = 180000000 Antes de realizar la operacién de divisién la variable ct se convierte al tipo double, Ahora la constante de numero entero 2 se convierte al valor 2.0 del tipo double, puesto que en el resultado de ls transformad@n el primer operando ha obtenido el tipo double, Practicamente ls conversién explicita fs una operacién unaria, Adem és, al intentar realizar la conversién de tipos, el resultado puede salir de los margenes del rango permitido, En este caso habré el acortamiento. Por ejemplo: char ¢; ye): // vesultade e=-112 a); // resultado u=144 Antes de ejecutar las operaciones (salvo la de asignacién), ocurre la transformacién en el tipo que tengs la mayor prioridad, y antes de las operaciones de asignacién - en el tipo objetivo. Ejemplos: // no hay conversién de tipos, resultado: 0 // 1a expresion se convierte al tipo double, + // luego se convierte al tipo objetivo int, resultado: // no hay conversién de tipos, resultado: 0.5 Ja expresion se convierte al tipo double, que coincide con el tipo objetivo, resultado: 0.5 “ Cee Las conversiones para el tipo string El tipo string tiene la mayor prioridad entre los tipos simples. Por esta razén, si en la operacién uno de las operandos tiene el tipo string, entonces el otro operando va a ser convertido al tipo string de una manera automatica, Hay que tener en cuenta que para el tipo string se permite sélo operadén binaria de suma, Esté permitida la conversién explicita de la variable del tipo string a cualquier tipo (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 Ejemplos: string sl=1.0/8; // 1a expresion se convierte al tipo double, Print("sl=1.0/8; ",s1); // luego al tipo objetivo string, // vesultado:"0.12500000" (cadena de 10 sinbolos) string s2-NULL; // Geinicializacion de la cadena Print(""s2-NULL; ",s2)7 // resultado: cadena vacia string s3-"Ticket N"412345; // 1a expresién se convierte al tipo string Print ("s=\"Ticket N"+12345,83) 7 string stri="true"; string str2="0,255,0"; string str3="2009. 06.01"; string str4e"1.2345e2"; Print (bool (stel)); Print(color(ste2)); Print (datetime (str3))+ Print (double (str4)) La conversién de datos de tipo de las estructuras simples Los datos de tipo de las estructuras simples se puede asignar uno al otro sélo en el caso si todos los elementos de las ambas estructuras tienen los tipos numéricos. Entendiéndose que en las operaciones de asignacién los dos operandos, tanto de la izquierda como de la derecha, deben ser del tipo de las estructuras. Nose hace una conversién por elementos como tal, simplemente se copia. Si los tamafios de las estructuras se diferencian, entonces se copia la cantidad de bytes que corresponde al menor tamafio. De esta manera se compensa la falta de las uniones (union) en el lenguaje MQLS. Ejemplos: struct strl ‘ double 4; he Is struct str2 ‘ jong 1: Is struct str3 ant low part; ant high part; void OnStart() (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 ‘ strl sl; str? 82; str3 $3; 1. deWatharesin(2.0); // obtenenos #1 mimero irreal ~1.#IND s2esl; prineé("L. 3£ *164%",s1.d,s2.1); 2 printf("2. high part of long 4.8% low part of long 4.8%", 53.high_part,s3. low part) ; ) Otro ejemplo nos demuestra como se puede organizar la propia fundién para obtener del tipo color las representaciones del color en RGB (Red,Green,Blue). Para eso vamos a crear dos estructuras que tengan el mismo tamafio pero diferentes contenidos. Para la comodidad vamos a afiadir en la estructura una funcién que devuelva el color en representacién de RGB en forma de la cadena #property script_show_inputs input color testColorsBlue;// asignen el color para su evaluacién //--~ estructura para 1a presentacién del color en RGB struct RGB ‘ uchar blue; // componente azul del color uchar green; // componente verde del color uchar reds // componente rojo del color uchar empty: // este byte no se usa string toString(); — // funcién para la obtencién en forma de la caden In string RGB: toString(void) ‘ string ou return out; funcién para la salida en forma de 1a cadena ("4(string) red#":"4 (string) green#":"+(string)bluet")"; //--~ estructura para almacenaiento del tipo interno color struct builtcolor //\ Script program start function 1 i void OnStart() ‘ Is variable para almacenaniento en RGB RGB colorRGB; variable para almacenamiento I tipo color (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 builtcolor test; test.cetestColor; //--~ conversion de dos estructuras mediante la copia del contenido colorRGB=test; Print(""color ",test.c,"=",colorRGB. toString()) 7 I ) La conversién de tipos de punteros de las clases bases a los punteros de las clases derivadas Los objetos de la clase derivada abiertamente también pueden considerarse como los objetos de la clase base que le corresponde. Esto lleva 2 algunos efectos interesantes. Por ejemplo, @ pesar del hecho que lo: objeto: de diferentes clases derivadas de una dase base, puedan diferendarse de una manera significativa uno del otro, podemos crear su lista asociada (List) puesto que los consideramos como los objetos de la clase base, Pero lo invertido no es correcta: resulta que los objetos de la clase base no son los objetos de la clase derivada de una forma automstica Se puede utilizar la conversién explicita de tipos para la transformadién de los punteros de la clase base en os _punteros de la clase derivada. Pero hay que estar completamente seguro de ls admisibilidad de esta transformacién, porque en el caso contrario surgiré un error critico de tiempo de ejecucién y el programa-mals se detendrs. Véase también Tipos de datos (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguaje MQL5 Tipo void y constante NULL Sint cticamente el tipo void es un tipo fundamental igual que el tipo char, uchar, bool, short, ushort, int, uint, color, long, ulong, datetime, float, double y string. Este tipo se utiliza o para indicar que la funcién no devuelve los valores, 0 como parémetro de la funcién que significa la falta de los parametros, La variable constante predeterminada NULL tiene el tipo void. Esta puede ser asignada sin transformadién 2 las variables de cualquier otro tipo fundamental. También se permite la comparadén de las variables de tipos fundamentales con el valor NULL Ejemplo: //--~ si 1a cadena no esta inicializada, entonces le asignarenos nuestro valor predet Af (some_string==NULL) some_string="enpty"; ‘Adem ’s, NULL se puede comparar con los punters a los objetos creados con el operador new. Véase también Variables, Funciones (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguale MQL5 Los punteros a objetos En MQLS existe la posibilidad de crear lor objetas de tipo compuesto de una forma dinémica, Esto se hace con la ayuda del operador new, que devuelve el descriptor del objeto creado, El descriptor tiene el tamafio de 8 bytes. Sint&cticamente los descriptores de objetos en MQLS son parecidos a los punteros en C++. Ejemplos: MyObject® hobject= nev Myobyect() ; Repitamos otra vez que a diferencia de C++ la variable hobject del ejemplo de arriba no es el puntero a la memoria, sino el descriptor de objeto. Véase también , Visibilidad v tiempo de vida de variables, Creacién v Variables, Inicializacién de variables, eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Referencias. Modificador & y palabra clave thi Traspaso de parametros por referencia En MQLS los parametros de tipos simples pueden ser traspasados por valor y por referencia, mientras que los parémetros de tipos compuestos siempre se traspasan por referencia, Para indicar al compilador ls necesidad de traspaso de parametros por referencia antes del nombre del parémetro se coloca el signo &. El traspaso de parametro por referencia significa el paso de direccién de una variable, por eso todas las modificaciones realizadas con el parémetro pasado por referencia en seguida se reflejaran también. ena variable original, Al usar el traspaso de parametros por referenda, se puede organizar al mismo tiempo el retorno de varios resultados desde la funcién. Para evitar los cambios del parémetro traspasado por referencia, hace falta utilizar el modificador const, De esa manera, si el pardmetro entrante de una funcién es un vector, objeto de estructura o clase, entonces en el encabezado de la funcién después del tipo de variable y antes de su nombre se pone el signo'®. Ejemplo class CDenoClass ‘ private: double m_array[]; public: void setarray(double earray[]); void CDemoClass: :setArray(double carray[]) Af (ArraySize (array)>0) ‘ ArrayResize (m_array, ArraySize (array) ) 7 ArrayCopy(m_array, array); : ) En el ejemplo de arriba se declara ls clase CDemoClass que contiene un elemento-vector privado m_atray{] del tipo double. Se declara la fundién setArray() en la que el vector array{] es traspasado por referencia. Si escribimos el encabezado de la funcién sin indicar el traspaso por referenda, es decir, quitando el signo de ampersand, durante el intento de compiladén de tal cédigo saldré un mensaje de error. A pesar de que un vector se traspasa por referenda, no podemos realizar la asignacién de un vector a otro, Es necesario hacer una copia elemento por elemento del contenido de vector-fuente al vector- receptor. Para los vectores y estructuras a la hota de traspaso en calidad del parémetro de la funcién la presencia del signo & es obligatoria durante la descripdién de la funcién. Palabra clave this (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 La variable del tipo clase (objeto) puede ser traspasada tanto por referencia, como por puntero, Un untero, igual como una referencia, sirve para obtener el acceso a un objeto. Después de dedarar el Puntero a objeto es necesario apticarle el operador new para su creacién e inicializadén. La palabra reservada this sirve para obtener referencia del objeto a si mismo, dicha referencia debe ser accesible dentro de los métodos de la clase o estructura. this siempre hace referencia al objeto en el método del que se utiliza. Y la expresién GetPointer(this) da un puntero al objeto al que pertenece la funcién en la que se realiza la llamada a la funcién GetPointer(). En MQLS las funciones no pueden devolver los objetos pero est permitido devolver el puntero a objetos. Asi, si hace falta que la funcién devuelva el objeto, podem os devolver el puntero a este objeto a modo de GetPointer(this). Afladamos a la descripcién de la clase CDemoClass la funcién getDemoClass() que devuelve el puntero a objeto de esta clase. class CDenoClass ‘ private: double m_array[]; public: void setarray(double earray[]); (DenoClass ngetDemoClass() I //\ relleno del vector void CDemoClass: :setArray(double carray[]) Af (ArraySize (array)>0) ‘ ArrayResize (m_array,ArraySize (array)) + ArrayCopy (m_é ) ‘ay, aEray) ; ) Uh //| devuelve su propio puntero Ue CDenoClass *CDemoClass: : getDemoClass (void) ‘ ‘return (GetPointer (this) ) ) Las estructuras no disponen de punteros, no se les puede aplicar les operadores new y delete, tampoco se puede usar GetPointer(this. Véase también Punteros a objetos, Creadén y eliminacién de objetos, Visibilidad y tiempo de vida de variables (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Operaciones y expresiones Algunos caracteres y sucesiones de caracteres adquieren importancia especial, Son llamados simbolos de operaciones, por ejemplo: +" /% — simbolos de operaciones aritméticas eel simbolos de operaciones légicas ste te simbolos de operaciones de asignacién Los simbolos de operaciones se utilizan en las expresiones y tienen sentido cuando se les dan los operandas correspondientes. Ademés, se da importancia especial a los signos de puntuadén. Los signos de puntuacién incluyen los paréntesis, llaves, coma, dos puntos y el punto coma Los simbolos de operaciones, signos de puntuacién y espacios sirven para separar los elementos del lenguaje. En este apartado se examinan los temas siguientes: + Expresiones + Operaciones avitméticas + Operaciones de asignadén * Operaciones de relaién * Operaciones légicas * Operacones a nivel de bits + Otras operaciones + Prioridades y orden de operaciones (© 2000-2010, MetaQuotes Software Corp. Za Bases del lenguale MQL5 Expresiones Una expresién se compone de uno o varios operandos y simbolos de operaciones, Se puede escribirla en varias Uneas. Ejemplos: att; b= 10; // varias expresiones s¢ ubicen en una linea //--~ wa sxpresion se divide en varias Lineas xe (y"z)/ (w+ 2) +1275 La expresién terminada con el punto y coma (;) es un operador. Véase también Prioridades y orden de las operaciones (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje Operaciones aritméticas MQL5 Las operaciones aditivas y muttiplicativas pertenecen a las operaciones aritm éticas: ‘Suma de valores Resta de valores Cambio de signo Multiplicacién de valores Cociente de 1a division Resto de la division ‘Suma de 1 al valor de 1a variable ‘Suma de 1 al valor de la variable Resta de 1 del valor de 1a variable Resta de 1 del valor de 1a variable =542; =3-3 30x; =a: minutes = time % €0; itt Hi: Operaciones de incremento y decremento se aplican unicamente a las variables; no se usan con las constantes. El incremento prefijo (++i) y decremento prefijo (--k) se aplican a la variable justo antes de usarla en la expresién, Post-incremento (i++) y post-decremento (k--] se aplican a la variable justo después de usarla en le expresién, Ejemplos: // expresion correcta Ant b=(att)"3;// expresin incorrecta Véase también Prioridades y orden de las operacion: (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguaje MQL5 Operaciones de asignacion El valor de la expresién que induye la operadén de asignadén, es el valor del operando izquierdo después de la asignacién. Asignacién del valor x a la variable y y Las siguientes operaciones unen las operaciones aritméticas y a nivel de bits con la operacién de asignacién: ‘Sumando x al valor de la variable y Restando x del valor de 1a variable y Multiplicando el valor de la variable y por x Dividiendo el valor de 1a variable y por x Resto de la division del valor de 1a variable y por x Desplaza x bits a la derecha 1a representacién binaria de y Desplaza x bits a la izquierda 1a representacion binaria de y operacién a nivel de bits AND de las representaciones binarias y y x operacién a nivel de bits OR de las representaciones binarias y y x operacién a nivel de bits excluyendo oR de las representaciones binarias y y x y Me eg Operaciones a nivel de bits se realizan unicamente con niimeros enteros. Durante la operadén del desplazamiento légico de la representadén y a la derecha/izquierda sobre x bits, se usan 5 menores digitos binarios del valor x, los digitos mayores se omiten; es decir, el desplazamiento se realize sobre 0-31 bits Durante la operacién %= (valor y por el médulo x) el signo del resultado coincide con el signo del dividiendo, El operador de asignacién puede aparecer varias veces en una expresién, En este caso el procesamiento de la expresién se realiza de derecha a izquierda: yee3; Al principio 2 la variable x se le asigna el valor 3, luego 2 la variable yse le va a asignar el valor de la variable x, es decir, también 3 Véase también Prioridades y orden de las operaciones (© 2000-2010, MetaQuotes Software Corp. z= Bases del lenguale MQL5 Operaciones de relacion El valor l6gico FALSO se representa por el valor entero cero, y el valor VERDADERO se representa por cualquier valor distinto 2 cero. FALSO (0) y VERDADERO (1) son valores de las expresiones que contienen las operaciones de relacién o las operaciones légicas Verdadero, si a es igual ab asb Verdadero, si a no es igual ab aleb Verdadero, si a es menor que b ach Verdadero, si a es mayor que b arb: Verdadero, si a es menor o igual ab ach Verdadero, sia es mayor o igual ab ads b; No se puede comparar la equivalencia de dos numeros reales. En mayor'a de los casos resulta que dos nniimeros aparentemente iguales pueden ser desiguales por la diferencia del valor en el décmoquinto digito después de la coma. Para una comparacién correcta de dos numeros reales es necesario comparar la diferencia normalizada de estos niimeros con el valor cero. Ejemplo: bool CompareDoubles (double number1,double number?) ‘ {Lf (Normal izeDouble (number1-number2,8) else return(false); ) void OnStart() ‘ double first: double secon double third=second-2.7; Af (first!=thira) ‘ if (CompareDoubles (first, third) ) printé("¥.16f 4.16£ son iguales”,first, third) ; ) return (true): ) // Resultade: 0.3000000000000000 0. 28899999S8995998 no obstante, son iguales Véase también Prioridades y orden de las operaciones (© 2000-2010, MetaQuotes Software Corp. 2 | Bases del lenguaje MQL5 Operaciones légicas Negacién logica NOT(!) El operando de la operadién de negacién légica NOT(!) debe tener el tipo aritmético. El resultado es igual a VERDADERO(1) si el valor del operando es FALSO(0), y es igual a FALSO(0) si el operando no es igual a FALSO(0). Af(1a) Print ("no ‘a'"); Operacién légica OR (||) Operacién légica OR (| |) de los valores x yy. Elvalor de la expresién es VERDADERO(1) si el valor de x oy es verdadero (no cero). En caso contrario es FALSO(0). AE(K=max_bars) Print(""out of range"); Operacién légica AND (&&) Operacién légica AND (Bf) de los valores x y y. El valor de la expresién es VERDADERO(1) si el valor de x yyson verdaderes (no cero). En caso contrario es FALSO(0). Las expresiones légicas se calculan por completo, es decir, no se les aptica ast llamada la esquema de "evaluacién corta" AE(p!=x 66 poy) Prine ("TRUE") : Véase también Prioridades y orden de las operaciones (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguaje MQL5 Operaciones a nivel de bits Complemento a uno Complemento del valor de la variable a uno. El valor de la expresién contiene 1 en todos lor digitos donde el valor de la variable contiene 0, y0 en todos los digitos donde el valor de la variable contiene Ejemplo: char ae'a' be-a Print("as",a, " be",b); // Resultado va a sex el siguiente:: Wa 87 -s68 Desplazamiento a la derecha La representadién binaria dex se desplaza a la derecha a y digitos. Si el valor desplazado posee el tipo sin signos, entonces se reatiza el desplazamiento légico a la derecha, es decir, los digitos liberados por la izquierda se rellenan con ceros Pero si el valor desplazado tiene el tipo de signo, entonces se realiza el desplazamiento aritmético a le derecha, es decir, los digitos liberados por la izquierda van a ser rellenados con el valor del bit de signo (si el niimero es positivo, el valor del bit de signo es igual 2 0; si el numero es negativo, el valor del bit de signo es igual a 1) x =x >> yr Ejemplo: char asta! ,b='b'; Print("Before: as",a," b=",b); //--~ haganos 1 desplazamiento a la derecha peal: Print("After: a: // Resultado va a sex el siguiente: // Betore: az 97 b= SB W/ Miter: az 97 b= 48, Desplazamiento a la izquierda La representacién binaria dex se desplaza a la izquierda a y digitos, rellenndose los digitos tiberados por la derecha con ceros. xox < #1 segundo parémetro esta omiti Véase también Sobrecarga, Funciones virtuales, Polimorfismo (© 2000-2010, MetaQuotes Software Corp. tr Bases del lenguaje MQL5 Traspaso de parametros Existen dos métodos mediante los cuales el lenguaje de programacién puede pasar el argumento al subprograma (funcién). El primer modo consiste en traspasar los parametros por valor. Este método copia el valor del argumento en el pardmetro formal de la funcién, Por tanto, cualquieras que sean las modificaciones de este parametro dentro de la fundén, no tendrén ninguna influenda sobre el correspondiente argumento de llamada. Ui //\ traspaso de parémetros por valor 1 i double FirstWethod(int i,int 3) ‘ double res; return (res); ) i //\ Script program start function 1 i void OnStart() ‘ I Print("a yb antes de la Lanada; double d=FirstMethod (a,b) : Print("a yb después de 1a llanad: ) //--~ resultado de sjecucién del script // ayb antes de 1a llamada: 148 // ayb después de la Lamada: 14 8 El segundo modo es el traspaso de parémetros por referencia, En este caso la referenda al parémetro (y no su valor) se pasa al parémetro de la fundién. Se usa dentro de la funcién para dirigirse al parametro actual indicado en la llamada. Esto significa que las modificacones del parémetro van @ influir sobre el argumento utilizado para invocar la funcién. Ui //| traspaso de parénetros por referencia i double SecondMethod(int ¢i,int 43) ‘ double res; I (© 2000-2010, MetaQuotes Software Corp. i | Bases del lenguaje MQL5 reseit; I etumn(zes); ) Ue //\ Script program start function 1 Ue void OnStart() ‘ Is double d=SecondMethod(a,b) + Print("a yb después de 1a llanad: resultado de ejecucién del script // ayb antes de 1a llamada: 148 // ayb después de la Lamada: 28 4 MQLS utiliza los dos métodos, salvo una excepdén: los vectores y variables del tipo de estructuras (objetos de clases) siempre se traspasan por referenda, Para excluir los cambios de los parémetros actuales (argumentos pasados al invocar una funcién) es necesario usar el especificador de acceso const, Cuando se intenta cambiar el contenido de la variable que ha sido decarada con el especificador const, el compilador mostrar un error. Nota Hay que recordar que los parémetros se traspasan a una funcién del revés, es decir, al prindpio se calcula yse pasa el ultimo pardmetro, luego el penuitimo, etc. En ultimo lugar se calcula y se pasa el pardmetro que est8 primero después de las llaves Ejemplo: void OnStart() ‘ Is ant af} int i=0; 0,1,2)2 fume (ali), afit+],"La primera Llanada(i="+string(1}+") func (a[it+],a[i],"La segunda Llanada(i="#string(i)+")"); // Resultado: // Primera Llamada(is0) : parl=1 par? // Segunda Llamada(i=l) : parl=1 par? (© 2000-2010, MetaQuotes Software Corp. ry Bases del lenguaje MQL5 Ue mn Ue void func (int parl,int par2,string coment) ‘ Print(comment,": parl =",parl," par? =",par2); ) Durante la primera llamada en el ejemplo menconado, al principio la variable i toma parte en le concatenadién de cadenas de caracteres “La primera Llanada(i="+string(i)+")" ademas ali su valor no se cambia. Luego la variable i toma parte en el calculo del elemento del vector afi++], es decir, después de tomar el elemento i del vector, la variable i se incrementa, Y sélo después de eso se calcula el primer parametro con el valor cambiado de la variable En la segunda llamada durante el célculo de todos los tres pardmetros, se usa el mismo valor de i que ha sido cambiado durante la primera invocadién de la fundén, y sélo una vez calculado el primer parametro, la variable i vuelve a cambiarse, Véase también Visibitidad y tiempo de vida de variables, Sobrecarga, Fundones virtuales, Polimorfismo (© 2000-2010, MetaQuotes Software Corp. Tr Bases del lenguaje MQL5 Sobrecarga de una funcién Habitualmente en el nombre de una fundén intentan reflejar su prindpal finalidad, Por regla general, los programas legibles contienen diversos identificadores bien seleccionados. A veces, las funciones diferentes se usan con los mismos propésitos. Vamos a considerar, por ejemplo, la funcién que calcula el valor promedio del vector de niimeros de doble precisién y ts misma funcién pero la que opera con el vector de numeros enteros. Es conveniente que las dos tengan el nombre AverageFromArray: Ue //\ cAlculo del promedio para el vector de tipo double Ue double AverageFromArray(const double array{],int size) double aver; for(int i=D;i¢size;it+) ‘ sumtsarray[i]; // suma para double ) averssun/size; // simplenente dividimos 1a suma por la cantidad Print("Célculo de la media para un vector del tipo double"); return aver; ) Ue //\ caleulo del pronedio para el vector de tipo int Ue double AverageFromArray(const int array[],int size) ‘ Af (sizec=0) return 0.0; double aver=0.0; ant sum=0; for(int i=D;i¢size;it+) ‘ sumtsarray[i]; // suma para double ) aver=(double) sum/size;// convertimos 1a suma al tipo double y 1a dividimos Print("Célculo de la media para un vector del tipo int"); return aver; ) Cada funcién contiene la extracdén del mensaje a través de la funcién Print) Print("Célculo de la media para un vector del tipo int"); El compilador elige una funcién necesaria de acuerdo con los tipos de argumentos y su cantidad, La (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 regla, segin la cual se hace la eleccién, se llama algoritmo de equivalencia a la signatura. Una signatura es una lista de tipos usados en la declaracién de funcién, //\ Script program start function 1 i void OnStart() ‘ Is ant aS]=(1,2,3,4,5)2 double b[S]=(1-1,2.2,3-3,4.4)5.5} double int_aver=AverageFromArray(a,5); wwerageFromkrzay(b, 5); int_aver," double_aver: double double_aver= Print(""int_ave: ) //--~ Resultado de funcionamiento del script // célculo del pronedio para ¢1 vector de tipo int // célculo del pronedio para el vector de tipo double // snt_aver= 3.00000000 _double_aver= 3.30000000 La sobrecarga es la practica de asignacién de varios valores @ una fundén. La elecdén de un valor espedifico depende de los tipos de argumentos recibidos por la funcién. Una funcién especifica se elige a base de la correspondencia de la lista de argumentos durante la invocacién de la funcién a le lista de parémetros en la declaracién de ls funcién, Cuando se invoca una funcién sobrecargada, el compilador debe tener un algoritmo para elegir una funcién apropiada. El algoritmo que hace la elecdén depende del tipo de conversiones que estén presentes. La mejor correlacién tiene que ser Unica. Tiene que ser la mejor por lo menos para uno de los argumentos, e igual de buena como las dems correspondendias para todos los otros argumentos. ‘Mas abajo viene el algoritmo de correspondendia para cada argumento. Algoritmo de eleccién de una funcién sobrecargada 1. Usar la correspondenda estricta (si es posible) 2. Intentar el incremento est&ndar del tipo. 3. Intentar la transformadién estandar del tipo, Elincremento esténdar del tipo es mejor que las dems transformaciones esténdar. El incremento es una transformadién float en double, y también bool, char, short o enum en int. Ademas, a las transformadones esténdar pertenecen las transformaciones de los vectores de tipos_enterossimilares Los tipos similares son los siguientes: bool, char, uchar, puesto que estos tres tipos son enteros de un byte; los enteros de dos bytes short y ushort; los enteros de 4 bytes int, uint y color; long, ulong y datetime. No hay duda que la correspondenda estricta es la mejor, Para conseguirla se puede usar las coversiones. El compilador no podré con una situacién de doble sentido, asi que no hay que fiarse de las ligeras diferencias en los tipos y las transformaciones implictas que hacen la funcién sobrecargada poco cara. (© 2000-2010, MetaQuotes Software Corp. a | Bases del lenguaje MQL5 Si Usted tiene duda, recurra a las conversiones explicitas para conseguir la correspondenda estricta. Como ejemplo de las funciones sobrecargadas en MQLS puede servir el de la funcién Arrayinitialize() Las reglas de sobrecarga de funciones también se aplican a la sobrecarga de métodos de clases. La sobrecarga de las funciones del sistema esté permitida pero en este caso hay que mirar que el compilador pueda elegir sin problema alguno la funcién necesaria, Como ejemplo, podemos sobrecargar la fundién del sistema fmax() de 3 formas distintas, pero sélo dos opciones van a ser correcta. Ejemplo: // sobrecarga esta permitida - se diferencia por 1a cantidad de parénetros double fmax (double a,double b, double c); // sobrecarga con error // 1a cantidad de parémetros es diferente, pero el tiltimo tiene el valor por defecto // eso lleva a la ocultacién de 1a funcién del sistena durante 1a llamada, pero esto double fmax (double a,double b,double c=DBL_MIM) ; // sobrecarga normal por el tipo de parametro ant fmax(int a,int b); Véase también Sobrecarga, Funciones virtuales, Polimorfismo (© 2000-2010, MetaQuotes Software Corp. =a Bases del lenguale MQL5 Descripcion de funciones externas El tipo de funciones externas definidas en otro médulo, tiene que ser explicitamente descrito. La falta de esta descripcién puede llevar a los errores en la fase de compiladén, composidén o ejecucién del programa. Durante ls descripcién de un objeto externo, use la palabra cave Himport indicando el médulo, Ejemplos: #import "user32.al1" int —-MessageBoxlW(int hind ,string szText,string saCaption, int nType) int SendMessagelW(int hind, int Msg, int waram,int 1Param); #import "Lib. exs" double round(double value) : #import, ‘Mediante la importacién es muy facil des cribir las funciones invocadas de las DLL externas o de las bibtiotecas compiladas EX5. Las bibliotecas EXS son unos archivos ex-8 que tienen la propiedad de library. Sélo las funciones des critas con el modificador export pueden ser importadas de las bibliotecas EX6. Véase también Sobrecarga, Funciones virtuales, Polimorfismo (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguaje MQL5 Exportacién de funciones Hay posibilidad de usar en el programa MQLS la funcién que ha sido deciarada en otro programa MQLS con el postmodificader export. Esta fundén se llama exportable, y puede invocarse de otros programas después de la compilacién. ant Function() 0) Print ("handle customMa else Print("Cannot open or not EXS file '"4terminal, patht"\\MQLS\\\Indicators\ phandle_custonMA) ; cus ) En este ejemplo el ltimo pardmetro pasa el valor PRICE_TYPICAL (desde la enumeracén ENUM APPLIED PRICE ) que indica que el indicador de usuario va 2 ser construide por los precios tipicos recibidos como (High+Low+Close)/3. Si el parémetro no se indica, el indicador se construye por los valores PRICE_CLOSE, es decir, por los precios de cierre de cada barra, Otro ejemplo que demuestra el traspaso del manejador (handle) de indicador por el ultimo pardmetro para especificar el vector price[], se muestra en la descripcién de la funcién iCustom (). La segunda forma de la llamada sirve para todos los demés indicadores en los cuales para el célculo se utiliza mas de una serie temporal. Ant OnCalculate (const int rates_total, // vamaio de temporales de entrad const int prevcalculated, // procesado de barras en la anterior 11 const datetines time[], | // Time const doubles open], us const doubles hight], uy const doubles lov[], us const doubles closef], uy const longe tick_volume[}, // Tick Volume const longé volume], // Beal Volume const inte spread{] // Spread (© 2000-2010, MetaQuotes Software Corp. za Bases del lenguaje MQL5 Los parémetros openf], high{], low{] y close[] contienen los vectores con los precios de apertura, precio maximo, minimo y precios de cerre del periodo en curso. El parémetro timef] contiene el vector con valores de apertura, el parémetro spread{] es el vector que contiene el historial de spreads (i spread est previsto para esta herramienta comercial). Lor parémetros volumef] y tick_volume[] contienen respectivamente el historial del volum en comercial y del volumen de tick Para determinar la direcdén de indexacién dentro de los vectores time[], opent], high(], low{], close O, tic_volumef], volumef] y spread{] es necesario lamar a ls funcién ArrayGetAsSeries(). Para no depender de los valores predefinidos es necesario invecar incondidonalmente la fundén ArraySetAsSeries() para los vectores con los que se preve trabajar. El primer parémetro rates_total contiene la cantidad de barras disponibles para el indicador para ser calculados, y corresponde a la cantidad de barras disponibles en el grafico, Cabe destacar el vinculo entre el valor de la funcién devuelta OnCalculate() y el segundo parémetro de entrada prev_calculated. Cuando se invoca la funcién el parametro prev_calculated contiene el valor que la funcién OnCalculate() ha dewuelto durante la llamada anterior, Esto permite realizar los algoritmos econémicos de célculo del indicador de usuario con el fin de evitar los célculos repetidos para las barras que no se hayan cambiado des de el arranque anterior de esta funcién. Para e50 es suficente devolver el valor del parsmetro rates_total que contiene la cantidad de barras durante la corriente llamada a la funcién. Si desde la ultima llamada a la fundién OnCalculate() los datos de precios han sido cambiados (se ha cargado un historial més profunda o los blancos en el historial han sido lenados), el mismo terminal pondré el valor cero al pardmetro entrante prev_calculated. Nota: si la funcién OnCalculate devuelve el valor cero, los valores del indicador no se mostrarén en la ventana DataWindow del terminal de cliente. Para el mejor entendimiento, seré util inidar el indicador cuyo cédigo se encuentra mas abajo. Ejemplo de indicador: (© 2000-2010, MetaQuotes Software Corp. PM Bases del lenguaje MQL5 #property indicator_chart_vindow aproperty indicator buffers 1 #property indicator plots 1. J/---= plot Line #property indicator_labell “Line” dproperty indicator_typel DRAV_LINE aproperty indicator color! DarkBlue aproperty indicator_stylel STYLE_SOLID aproperty indicator vidthl 1 indicator buffers LineBufter{]; //\ Custom indicator initialization function 1 Uh ant onInit() ‘ //--~ indicator buffers napping SetIndexBuffer (0,LineBuffer, INDICATOR_DATA) ; I return(0); ) I //\ Custom indicator iteration function 1 Ui Ant OnCalculate(const int rates_total, const int prev_calculated, const datetime tine[], const doublee open], const doublee high{], const doublee lov[], const doubles close], const longe tick_volume[], const longs volume[], const inte spread[}) obtendrenos una cantidad de barras disponibles para ¢l simbolo y periodo actual ant bars-Bars (Symbol () ,0); Print("Bars ,_total =",rates_total, Print("time[0] Time[rates_total-1] return value of prev_calculated for next call. return(rates_total) ; ) i ; prev_calculated =",prev_caleu ytime[zates_total-1])? I Véase también Ejecucién del programa, Eventos del terminal de usuario, Trabajo con eventos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Variables Declaracién de variables Las variables tienen que estar declaradas antes de empezar a usarlas, Para identificar las variables se utilizan los nombres dnicos. Las descripciones de variables se utilizan para su determinacién y declaradin de tipos. Las descripciones no son unos operadores. Los tipos simples son: * char, short, int, long, uchar, ushort, uint, ulong - ntimeros enteros; + color~ niimero entero que representa el color RGB; + datetime - fecha y hora es un nimero sin signo que contiene la cantidad de segundos pasados desde Ohoras del 1 de enero de 1970; * bool - valores légicos true y false; * double - niimeros de doble precisién en punto flotante; * float - ndimeros de precisién sencilla en punto flotante; * string - cadenas de caracteres Ejemplos: string szInfoBox; ant nOrders; double dSymbolPrice: bool blog? datetime tBegin Data = D'2004.01.01 00:00"; color cModify Color = C'0x44, 0xB9,OxE6 Tipos complejos o compuestos: Las estructuras son unos tipos de datos compuestos que se construyen con la ayuda de otras tipos. struct MyTime ‘ ant hour; // 0-23 int minute; // 0-59 int second; // 0-59 Wyfine steTine; // variable del tipo de 1a estructura ByTine declarada anterioraente Nose puede decarar ns variables deltipo de estructura sts que la estructura esté dedards. Vectors Elvector ex un conju indeade de dtr del mismo tipo ant af SO]; // Vector unidimensional de 50 nimeros enteros. double m[7][50]; // Vector bidimensional compuesto por siete vectores, // cada uno de los cuales contiene 50 mimeros, (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 MyTime ¢[100]; // vector que conti e elementos del tipo MyTim Sélo un nimero entero puede ser el indice del vector. Se admiten los vectores que no tienen mas de cuatro dimensiones. La numeracién de los elementos de un vector se empieza con 0. El ultimo elemento del vector unidimensional tiene el numero a 1 menos que el tamafio del vector, es decir, la llamada al ultimo elemento del vector de 50 numeros enteros se vers de la siguiente manera [49]. Lo mismo se puede decir de los vectores multidimensionales, la indexacién de una dimensién se realize de 0 al tamafio de dimensién -1, El ultimo elemento del vector bidimensional del ejemplo aparece como m[6][49]. Los vectores estéticos no pueden ser representados como series temporales, es decir, no se les puede aplicar la funcidn ArraySetAsSeries(), que establece el acceso a los elementos del vector desde el fin del vector a su prindpio. Si es necesario establecer el acceso al vector como en series temporales, hay que usar el objeto del vector dinamico, Al acceder fuere de los limites del vector, el subsistema ejecutivo generara un error critico y la ejecudén del programa se detendré Especificadores de acceso Los especificadores de acceso indican al compilador cémo se puede realizar el acceso a las variables, elementos de las estructuras 0 de las clases. El especificador const declara una variable como una constante y no permite cambiar el valor de esta variable durante el proceso de ejecucién del programa. La inidalizadén de la variable durante su declaradién se permite sélo una vez. El especificador const no puede ser aplicado a los elementos de estructuras y cases. Bemplo int OnCalculate (const int rates_total, // tanaio del vector price] const int prev calculated, // barras procesadas durante 1a Llanada const int begin, 7/ de donde se enpiezan los datos signif const doublee price[] // vector para #1 calculo ) Para acceder a los elementos de las estructuras y clases se utilizan los siguientes especificadores: * public no limita el acceso con nada a la variable o al método de dase; * protected - permite el acceso desde los métodos de la misma clase, y también desde los métodos de las dases que se heredan abiertamente, Otro acceso es imposible; * private - permite el acceso a las variables y métodos de clase Unicamente desde los métodos de la misma clase. * virtual - es apticable sdlo a los métodos de clase (en ningtin caso a los métodos de estructuras), y comunica al compilador que este método tiene que ser colocado en la tabla de las funciones virtuales de la clase. Clases de memoria Existen tres clases de memoria: static, input y extern, Estos modificadores de la clase de memoria indican al compilador de una manera explicita que las variables correspondientes se distribuyen en la zona de memoria predeterminada que se llama el pool global. Adem4s, estos modificadores indican un (© 2000-2010, MetaQuotes Software Corp. | Bases del lenguale MQL5 procesamiento especifico de los datos de variables. Si una variable dearada a nivel local no es estatica, entonces la distribucién de la memoria para esta variable se realiza de una manera automatica en la pila (stack) de programa. La liberadén de memoria destinada para un vector no estético también se realiza de forma automética cuando se sale fuera de los limites de visibilidad del bloque, en el cual este vector ha sido declarado, Véase también Tipos de datos, Encapsulacién y extensién de tipos, Inidatizacién de variables, Visibilidad y tiempo de vida de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Variables locales Una variable declarada dentro de una funcién funcién es local. La zona de visibilidad de le variable local esté limitado por los margenes de la funcién dentro de ls cual ésta esta declarada, La variable local puede ser inicializada con la ayuda de cualquier expresién, La inicializacién de la variable local se realiza cada vez durante la llamada a la funcién correspondiente, Las variables locales se ubican en zona temporal de la memoria de las funcién correspondiente. Ejemplo: ant somefunc() ‘ ant ret_code=0; return (ret_code) ; ) La zona de apticacién(o visibilidad) de una variable es una parte del programa en la cual se puede referirse a la variable, Las variables declaradas dentro del bloque (a nivel local) van a tener el bloque como su zona de aplicacién, La zona de aplicadén del bloque se empieza con la declaracién de la variable y se termina con la llave derecha final. Las variables locales declaradas al prindpio de la funcién también tienen la zona de aplicadén del bloque igual que los parémetros de la funcién, que también son variables locales. Cualquier bloque puede contener las declaracones de las variables. Si lor bloques estan anidados y el nombre de Identificador del bloque exterior coincide con el del bloque interior, el identificador del bloque exterior esté "invisible" (oculto) hasta que se termine el trabajo en el bloque interior. Ejemplo: void Onstart() ‘ // variable local de 1a funcién int i#10; // variable de la funcién Print("En el bloque i=",i); // resultado i=10; ) Print("Fuera del bloque ) Aye // resultado Eso significa que mientras se ejecuta el bloque interno, él ve los valores de sus propios identificadores locales, y no los valores de los identificadores con los mismos nombres en el bloque exterior. Ejemplo: void Onstart() ‘ Wn // variable local de 1a funcién <3 si4+) (© 2000-2010, MetaQuotes Software Corp. =a Bases del lenguale MQL5 Print("Dentro for i =",4)7 Print("Fuera del bloque 1 =",4)7 ) /* Resultado de ejecucién Dentro for i = 0 Dentro for i Dentro for i Fuera del bloque i = 5 / Las variables locales declaradas como static, tienen la visibilidad del bloque, a pesar de que existan desde el principio de ejecucién del programa, Véase también Tipos de datos, Encapsulacién y extensién de tipos, Iniciatizacién de variables, Visibilidad y tiempo de vida de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Parametros formales Los parémetros pasados a la funcién son locales. Su zona de visibilidad es el bloque de la funcién, Los parémetros formales tienen que tener nombres distintos que las variables externas y variables locales definidas dentro de la funcién, En el bloque de la funcién a los parémetros formales se les puede asignar algunos valores. Si el pardmetro formal esté dedarado con el modificador const, su valor no se puede cambiar dentro de la funcién, Ejemplo: void fune(const int x[], double y, bool z) ‘ 1£(y>0.0 ee !z) Print (x[0]) ) Los parémetros formales pueden ser iniciatizados por las constantes. En este caso, el valor inidalizado se considera como el valor por defecto. Los parametros que siguen después del pardmetros inicializado también tienen que ser inidalizado. Ejemplo: void fue (int x, double y = 0.0, bool 2 = true) ‘ ) Cuando se llama una funcién como esa, se puede omitir los parémetros inicializados, a su vez seran puestos los valores por defecto. Ejemplo: fune(123, 0.5); Los parametros de tipos simples se traspasan por valor, es decir, los cambios de la correspondiente variable local de este tipo dentro de la funcién llamada no se reflejaré de ninguna manera en la fundn lamadora. Los vectores de cualquier tipo y los datos del tipo de estructuras siempre se pasan por referenda. Si es preciso prohibir el cambio del vector o el contenido de la estructura, los pardmetros de estos tipos tienen que declararse con la palabra clave const. También existe la posibilidad de pasar por referencia los pardmetros de tipos simples. En este caso, la modificacién de estos parémetros se reflejaré en las correspondientes variables en la funcién llamada, que han sido pasadas por referencia. Para especificar que un parémetro se pasa por referencia, después del tipo de datos hay que poner el modificador &, Ejemplo: void func (inte x, doublee y, doubles 2[]) ‘ double caleulated_tp: (© 2000-2010, MetaQuotes Software Corp. | Bases del lenguale MQL5 for(int 120; icOrdersTotal(); i++) ‘ if (issArraySize(z)) break; if(OrderSelect(i)==false) break z[i]=OrderdpenPrice() 7 : xl; yecaleulated_tp; ) No se puede inicializar los parametros pasados por referencia con valores por defecto, No se puede pasar a la funcién mas de 64 parémetros. Véase también Variables Input, Tipos de datos, Encapsuladén y extensién de tipos, Inicializadén de variables, Visibitidad y tiempo de vida de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Variables estaticas La clase de memoria static define una variable estatica. El modificador static se indica antes del tipo de datos Ejemplo: ant somefunc|) ‘ static int flag=10; return (flag) ) Una variable estatica puede ser inicalizada por una constante correspondiente a su tipo o por una expresién constante, a diferencia de una variable local simple, que puede ser inidalizada por cualquier expresién, Las variables estéticas existen a partir del momento de ejecucién del programa y son inicializadas sélo una vez antes de lamar a la funcién especiatizada Onlnit(). Si los valores iniciales no estan especificados, entonces las variables de la clase estatica de la memoria adquieren los valores iniciales Las variables locales declaradas con la palabra clave static conservan sus valores durante todo el tiempo de vida de ls funcién, Con cada siguiente llamada a la funcién, estas variables locales ya contienen los valores que tenian durante la llamada anterior, Cualquier variable en el bloque, salvo los pardmetros formales de una fundén, puede ser definida como estatica. Ejemplo: ant Counter () ‘ static int count; counttt; 4A£(counts100-=0) Print ("La funcién Counter ha sido llamada ya ",count,"veces") return count; ) void OnStart() ‘ Wo ant ¢=345; for (int ‘ int e=Counter(); ) Print("c =",6)7 ) 142000; 4+) Véase también (© 2000-2010, MetaQuotes Software Corp. za Bases del lenguale MQL5 Tipos de datos, Encapsulacién y extensién de tipos, Inidatizacién de variables, Visibilidad y tiempo de vida de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. za Bases del lenguaje MQL5 Variables globales Las variables globales se creen mediante la colocacién de sus declaraciones fuera de la descripdén de una funcién, Las variables globales se definen al mismo nivel que las funciones, es decir, no son locales en ningun bloque. Ejemplo: Ant GlobalFlag=10; // variable global ant onStare() ‘ ) La visibitidad de las variables globales es el programa entero, y estén disponibles desde todas las fundones definidas en el programa, Estas se inicializan por cero, si no esta definido explicitamente otro valor inial Una variable global puede ser iniciatizada sélo por una constante correspondiente @ su tipo © por una expresién constante, La inicializacién de las variables globales se realiza sélo una vez justo después de cargarse el programa en la memoria del terminal de cliente. Nota: no se puede confundir las variables declaradas 2 nivel global con las variables globales del terminal de cliente, el acceso a las cuales se consigue a través de la funcién GlobalVariable...() Véase también Tipos de datos, Encapsulacién y extensién de tipos, Inidatizacién de variables, Visibilidad y tiempo de vida de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Variables Input La clase de memoria input define una variable externa. El modificador input se indica antes del tipo de datos, Nose puede cambiar el valor de una variable con el modificador input dentro del programa mal6, estas variables son exclusivamente para la lectura, Sélo el usuario puede modificar los valores de las variables input desde la ventana de propiedades de su programa, Ejemplo: //--~ input parameters input int. MA _Period=13; input int. MA_shift=0; input ENUM_MA METHOD MA Method=MODE_sm™mA; Las variables Input determinan las parémetros de entrada del programa, estén disponibles desde le ventana Propiedades de la aplicadién, er ou Era [Common] Tepuie [Paremsters| Cotas J Viuateain] Vatable Vaue (2) Na Poa 8 en 0 1) NA Method Smeothed ile Es posible establecer otro modo de mostrar los nombres de parémetros de entrada en la pestafia Inputs", Para eso se utiliza un comentario de cadena, el que tiene que ir después de la descripcién del parametro de entrada en la misma cadena. De esa manera, se puede asignar a los parémetros de entrada los nombres mas comprensibles para el usuario. input parameters input int. InpMAPeriod=13; // Smoothing period input int. InpMAShift=0; // Line horizontal shift amput ENUM_MA METHOD InpMAMethod=NODE_SMMA; // Smoothing method (© 2000-2010, MetaQuotes Software Corp. | Bases del lenguale MQL5 er ou Era [Common] Tepuie [Paremsters| Cotas J Viuateain] Vaable Vac 19 smoohing serod 3 [Line rvzontl eit 0 ‘1a Smoothing method Smeothed Nota: Los vectores y variables de tipos compuestos no pueden actuar como las variables input, Traspaso de parametros al llamar a los indicadores de usuario desde los programas mqlS Los indicadores de usuario se invocan con ayuda de la funcién iCustom(). Alli, después del nombre del indicador de usuario, deben ir los parémetros de acuerdo estricto con la declaracién de variables input de este indicador de usuario, Si se indican menos parémetros que las variables input declaradas en el indicador de usuario invocado, entonces los parémetros que faltan se lenan con los valores especificados durante la declaracién de variables, Si en indicador de usuario se usa la funcién OnCalculate del primer tipo (es decir, el indicador se calcula en el mismo vector de datos}, entonces uno de los valores ENUM APPLIED PRICE o manejador (handle) det otro indicador debe actuar como el ultimo parametro durante la llamada de este indicador de usuario. Entonces, todos les parémetros correspondientes a las variables input tienen que ser claramente indicades Enumeraciones como parametro input No sélo las enumeraciones "built-in", previstas en el lenguaje MQL5, pueden ser utilizadas como las variables input (parémetros de entrada para los programas ma), sino las enumeraciones definidas por el usuario. Por ejemplo, podemos crear la enumeracién dayOfWeek que describe lor dias de la semana, y usar la variable input para indicar un dia concreto de la semana no como un niimero, sino en forma mas comtn para el usuario, Ejemplo: #property script_show_inputs //--~ day of week enum dayofvesk ‘ 3-0, // Sunday M1, // Monday 7-2, // Tuesday (© 2000-2010, MetaQuotes Software Corp. 139 Bases del lenguaje MQL5 // Wednesday // Taursday // Friday, // Savurday //--~ input parameters input dayOfWeek svapday Para que el usuario pueda eligir el valor necesario de la ventana de Propiedades durante el inicio del script, usamos el comando de preprocesador #property script_show inputs. Inidamos el script y podemos eligir de la lista uno de los valores de la enumeracién dayOfWeek. Iniciamos el script Enumlninput y pasamos a la pestafia "Parémetros. Por defecto, el valor del parametro swapday (dia de cémputo del triple swap) es miércoles (W=3), pero nosotros podemos especificar cualquier otro valor y utilizar este valor para cambiar la operacién del programa. Variable | Value 1) swapcay ‘Wednesday ¥ Sunday IMenday sy Thursday Friday, [Saiuray La cantidad de posibles valores de enumeracién esta limitada. Por eso para eligir un valor de entrada se utiliza una lista desplegable. Los nombres mnemotécnicos de los elementos de enum eracién se usan en calidad de los valores mostrados dentro de la lista, Pero si un nombre mnemotécnico est’ asociado con un comentario, como se muestra en el ejemplo, entonces en vez del nombre mnemotécnico se use el contenido del comentario. Cada valor de la enumeradén dayOfWeek tiene su propio valor de 0 a 6, pero en la lista de pardmetros se mostrarén los comentarios indicados para cada valor. Eso da una flexibiidad adicional para escribir los programas con las descripciones claras de los parametros de entrada, Cada valor de la enumeracién dayOfWeek tiene su valor de 0 a6, pero enla lista de parametros seran mostrados los cometarios especificados para cada valor. Esto oporta la flexibilidad adiconal pare escribir un programa con las descripciones claras de los parametros de entrada Véase también iCustom, Enumeraciones, Propiedades de programas (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Variables Extern La palabra clave extern se utiliza para declarar los identificadores de las variables como los identificadores de la dase estética de memoria con el tiempo de vida global, Estas variables existen desde el momento del inicio de programa, y la memoria para ellas se asigna y se inicialize inmediatamente después del inicio del programa, Se puede crear programas compuestes de varios archivos inidales. En este caso, para el preprocesador se utiliza el comando #include, Las variables declaradas como extern con el mismo tipo e identificador, pueden existir en diferentes archivos iniciales de un proyecto, Durante la compilacién de todo el proyecto, todas las variables extern con el mismo tipo identificador, se asocian con una parte de memoria del pool de las variables globales. Las variables extern son ttiles para una compilacién separada de los archivos iniciales. Las variables extern pueden ser inidalizadas, aunque séto una vez. Esté prohibida la existencia de varias variables inidalizadas extern del mismo tipo y con el mismo identificador. Véase también Tipos de datos, Encapsulacién y extensién de tipos, Iniciatizacién de variables, Visibilidad y tiempo de vide de variables, Creacién y eliminacién de objetos (© 2000-2010, MetaQuotes Software Corp. 141 Bases del lenguaje MQL5 Inicializacion de variables Cualquier variable puede ser inicatizada durante la definicén, Si la variable no es inicatizada explicitamente, el valor almacenado en esta variable puede ser cualesquiera. La inidalizadén implicita no se realiza Las variables globales y estéticas pueden ser inicializadas sélo por la constante del tipo correspondiente o por una expresién constante, Las variables locales pueden ser inidalizadas por cualquier expresién, y no slo por una constante, La inicializacién de las variables globales y estéticas se realiza sélo una vez. La inicializacién de las variables locales se realiza cada vez al lamar a la funcién correspondiente, Ejemplos: anton =a; string 5 = “hello double ff] = (0-0, 0.236, 0.382, 0.5, 0.618, 1.0 } ant a4)4] = ( (1, 1, 1, 1h, (2, 2, 2, 2h, (3, 3, 8, 30, (4, 4, 4, J/--> de vetris ant right[4]=(VIDTH_IN_PISELS+VERT_BORDER, VIDTH_IN_PIMELS+VERT_BORDER, VIDTH_IN_PIXELS+VERT_BORDER, VIDTH_IN_PIXELSHERT_BORDER}; La lista de valores de los elementos del vector tiene que encerrarse dentro de las llaves. Las sucesiones inicializadoras perdidas se consideran iguales 2 0. En la secuencia que inidaliza tiene que haber por lo menos un valor: este valor inicializa el primer elemento de la estructura correspondiente © del vector, los elementos que faltan se consideran iguales a cero, Si el tamario del vector inidalizado no esta especificado, éste es determinado por el compilador baséndose en el tamafio de la sucesién inidatizadora. Los vectores multidimensionales no pueden ser inicializados por una sucesién unidimensional (por una sucesién sin llaves adiconales), excepto el caso, cuando se especifica sélo un elemento inidalizador (cero, por regla general) Los vectores (incluso aquellos que hayan sido declarados a nivel local) pueden ser inicializados slo por las constantes. Ejemplos: struct str3 ( ant low part: ant high part; ie struct strl0 ( sexs 33; double a1[10}; ant is; iB void onstart() ( stel0 s10_l=( (1,0), (1-0,2.1,3.2,4.4,5.3,6.1,7.8,8.7,9.2,10.0},100); (© 2000-2010, MetaQuotes Software Corp. =a Bases del lenguale MQL5 strl0 s10_2=({1,0),(0},100}; strl0 s10_3=((1,0),(1.0}}; Prine("l. s10_1.41[5] yA. aL[S]) 7 Print("2. s10_2.41[5] ) 2.41 [5]) ¢ Print("3. 10 3.d1[5] =",s10_3.41[S])7 Print("4. s10_3.41[0) 3. AL[0}) : ) Véase también Tipos de datos, Encapsulacién y extens Creacién y eliminadén de objetos in de tipos, Visibilidad y tiempo de vida de variables, (© 2000-2010, MetaQuotes Software Corp. re) Bases del lenguaje MQL5 Vv Hay dos tipos principales de zona de visibitidad: zona local de visibiidad y zona global de visibitidad. ibilidad y tiempo de vida de variables Una variable declarada fuera de todas las funciones se coloca en la visibilidad global. Estas variables pueden ser accesibles desde cualquier parte del programa. Estas variables se ubican en el pool global de la memoria, por eso el tiempo de sus vidas coincide con el tiempo de vide del programa Una variable declarada dentro del bloque (parte del cédigo encerrada dentro de las llaves) pertenece @ la visibitidad local. Esta variable no es visible (por tanto no es accesible) fuera del bloque en el que esté declarada. El caso més comin de la dedaracién local es una variable declarada dentro de le funcién. Una variable con declaracién local se coloca en una pila, y su tiempo de vida coincide con el tiempo de vida de la funcién, Ya que ls zona de visibilidad de una variable local es el bloque donde est8 declarada, hay posibilidad de declarar las variables con los nombres que coincidan con los de las variables declaradas en otros bloques, y también declaradas en los niveles superiores, asi sucesivamente hasta el nivel global Ejemplo: void CalculateLWMA(int rates_total,int prev_calculated, int begin, const double eprice[ ‘ ant i, Limit; static int veightsum=0; double sum Wn Af (prev_calculate: ‘ Limit-MA_Periodtbegin; (/--~ set expty value for first Limit bars for(is0; iclimit; i++) LineBuffer[i]=0.0; ur double firstWalue=0; for(int isbegin; iclimit; i++) 0) calculate first visible value firstValuetskeprice[i]; ) firseValue/=(double)weightsum: LineBuffer[1imit-1]=firetValue; ) else ‘ Limit-prev_calculated-1; ) fox (isLimit;iceaves_tovalsit+) ‘ sun=0; (© 2000-2010, MetaQuotes Software Corp. 144 Bases del lenguaje MQL5 for(int 3-0; 3 LineBuffer[i]=sum/weightsum; ) I ) Preste la atenién a la variable i declarada en tinea for(int isbegin; iclimit; i++) ‘ int kei-begintl; weightsumt firstValuet=k*price[i]; : Su visibilidad es sélo el ciclo for, fuera de este dclo hay otra variable con el mismo nombre que ha sido declarada al principio de la funcién. Ademés, en el cuerpo del ciclo esta declarada la variable K, cuya zona de visibitidad es el cuerpo del ciclo, Se puede declarar las variables locales con el especificador de acceso static. En este caso, el compilador coloca esta variable en el pool global de la memoria. Por tanto, el tiempo de vida de una variable estatica coincide con el tiempo de vida del programa, No obstante, la zona de visibilidad de esta variable se timita por el bloque donde esté decarada Véase también Tipos de datos, Encapsulacién y extensién de tipos, Iniciatizacién de variables, Creadién y eliminadén de objetos (© 2000-2010, MetaQuotes Software Corp. 14 Bases del lenguaje MQL5 Creacién y eliminacion de objetos Una vez cargado el programa mal para ser ejecutado, a cada constante se le asigna una parte de memoria de acuerdo con el tipo de la variable, Dependiendo del nivel de acceso las variables se dividen en dos tipos: variables globales y variables locales, y también dependiendo de las clases de memoria: parémetros input del programa mal5, estéticas y automaticas. En caso de necesidad cada variable es inidalizada por el valor correspondiente. Después de ser usada, la variable se deinidatiza, y la memoria ocupada por ésta se devuelve al sistema ejecutivo MQLS. Inic acién y deinicializacién de variables globales Las variables globales se inicializan de una forma automatica inmediatamente después de que se cargue el programa mql5 y antes de que se llame a cualquier funcién. Durante la inicializadén se asignan valores inidales a las variables de tipos simples y se llama al constructor (si existe) para los objetos. Los parametros input siempre se declaran a nivel global, son inicalizados por valores aignador por lor usuarios en un iélogo durante el inicio del programa mals A pesar de que las variables estéticas suelen declararse a nivel local, la memoria para estas variables se distribuye de antemano, y la inidalizadén se reatiza justo después de que el programa se cargue, lo mismo que pasa con las variables globales. El orden de inicializacién cotresponde al orden de dedaracién de una variable en el programa, y la deinicializadén se reatiza a la inversa antes de cargar el programa. Esta regla vale sélo para ls variables que no han sido creadas por el operador new. Estas variables se crean y se inidalizan autométicamente justo después de la carga, y se deinidatizan directamente antes de la descarga del programa. Inic acion de variables locales acién y deinic! Si una variable dectarada a nivel local no es estética, entonces la distribucién de memoria para este variable se realiza de una forma automatica. Las variables locales, igual como globales, se inidalizan autométicamente en el momento cuando la ejecucién del programa encuentra la declaracién de una variable local, De esta manera, el orden de inicializacién corresponde al orden de dectaracién. Las variables locales se deinicializan al final del bloque del programa en el cual ha sido deciaradas, y en el orden inverso a la dedaracién, Un bloque del programa es un operador compuesto que puede ser una parte del operador de eleccién switch, ciclo (for, while, do-while}, cuerpo de fundién o parte del operador if-elee. Las variables locales se iniclatizan sélo en el momento cuando la ejecucién del programa llege a le declaradén de variable. Si durante el proceso de ejecucién del programa el bloque en el que una variable esté declarada, no ha sido ejecutado, esta variable no se inidaliza. Inic: dina y de objetos _colocados amente Un caso especial representan los punteros_a_objetos, puesto que la declaradién de un puntero no implica la posterior inicializacién del objeto correspondiente. Los objetos colocados dinémicamente se inidatizan s6lo en el momento cuando la muestra de dase es creada por el operador new. La iniciatizacién del objeto supone la invocacién del constructor de la clase correspondiente. Si en la clase (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 no hay constructores correspondientes, entonces sus elementos que tienen el tipo simple, no serén inicializados automaticamente; los elementos de tipos string, vector dinamico y objeto compuesto seran inidatizados de una forma automética Los punteros pueden ser declarados @ nivel local o global y pueden ser inicializados por el valor vaco NULL 0 por el valor del puntero del mismo tipo o del tipo derivado. Si el operador new ha sido invocado para un puntero declarado @ nivel local, entonces el operador delete para este puntero tiene que ser ejecutado antes de salir de este nivel, En caso contrario, el puntero se perder’ y el objeto no podré ser eliminado de una forma explicta. Todos los objetos creados por la expresién puntero_objeto=new Nombre Clase, @ continuacién tienen que ser eliminados obligatoriamente por el operador delete(puntero_objeto). Si por alguna razén esta variable no ha sido eliminada por el operador delete después de que el programa complete su trabajo, aparecera un mensaje de entrada en el apartado “Expertos’, Es posible declarar varias variables, y asignarles a todas el puntero a un objeto. Si el objeto creado dinémicamente tiene un constructor, este constructor seré llamado en el momento de la ejecudén del operador new, Si el objeto tiene un destructor, este destructor sera llamado en el momento de la ejecucién del operador delete. De esta manera, los objetos colocados din&micamente se crean sélo en el momento cuando son creados por el operador new, y se etiminan de una forma garantizada por el operador delete o autométicamente por el sistema ejecutora de MQL5 durante la descarga del programa. El orden de declaracién de punteros de los objetos creados din&micamente no influye en el orden de su inicializacién, El programador controla completamente el orden de inicializacién y deinicatizacién. Caracteristicas breves de variables La informacién general sobre el orden de creacién, eliminacién, llamada a los constructores y destructores se muestra en la tabla de abajo. Variable globat Variable local Objeto creado automatica automatica dinamicamente Iniciatizacion inmediatamente al llegar durante la | durante la ejecudén después de que se ejecuciéna la linea de del operador new cargue el programa | cédigo, donde ésta ma esté declarada Orden deen el orden deen el orden de no depende del orden inicializacion declaradén decaradén de dedaracién Deiniciatizacion antes de que se cuando la ejecucién durante la ejecucién descargue el programa abandona el bloque de | del operador delete o mals dedaracén antes de que se des cargue el programa mals Orden de | en el orden inverso 2 en el orden inverso ano depende del orden deiniciatizacion la inidatizadén la inidalizadén de inidalizacién Llamada al al cargar el programa | durante la | durante la ejecudén constructor ma inidalizacién del operador new (© 2000-2010, MetaQuotes Software Corp. MQL5 Llamada destructor al descargar el programa mq al salir del bloque donde la variable ha sido inidatizada durante la ejecudén del operador delete Aviso de errores aviso en el apartado “Expertos" sobre el intento de eliminacién del objeto creado ‘auto ticamente aviso en el apartado “Expertos" sobre el intento de eliminacién del objeto creado autométicamente aviso en el apartado "Expertos* sobre los objetos creados dindmicamente pero con fallos durante le descarga del programa mali Véase también Tipos de datos, Encapsulacién y extensién de tipos, Inidatizacién de variables, Visibilidad y tiempo de vida de variables (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Preprocesador El preprocesador es un subsistema especial del compilador MQL5 que se ocupa de la preparacién preliminar del cédigo fuente del programa directamente antes de su compilacién, El preprocesador permite mejorar la legibitidad del cédigo fuente, Se puede conseguir la estructurizadién del cédigo mediante la inclusién de Gertos archivos con los cédigos fuentes de los programas mq. Ademés de eso, la posibilidad de asignar los nombres mnemotécnicos a algunas constantes también contribuye a la mejora de legibilidad del cédigo. El preprocesador, asimismo, permite determinar los parametros especiales de los programas mals: + Declarar constantes + Establecer propiedades de programa * Incluir archivos en texto de programa + Importar funciones Si el signo #se usa como el primer simbolo en la linea del programa, entonces esta linea es directiva del preprocesador. Una directiva del preprocesador se termina con el caracter de nueva linea. (© 2000-2010, MetaQuotes Software Corp. Bases del lenguaje MQL5 Declaracién de constante (#define) La directiva #define puede ser utilizada para la asignacién de les nombres mnemotécnicos a las constantes. #define identifier token_string La directiva #define sustituye todas las siguientes entradas identifier en el texto original por token string, identifier se sustituye sélo en el caso si es un token suelto. identifier no se sustituye si es parte del un comentario, una cadena o parte de otro identificador mas largo. El identificador de constante se rige por las mismas reglas, las que funcionan para los nombres de las variables. El valor puede ser de cualquier tipo: #define ABC 100 #define PI 3.14 define COMPANY_NAME "MevaQuotes Software Corp. void ShowCopyright () ‘ Prine("Copyright 2001-2008, ", COMPANY NAME) : Print ("hetp: //wwu.metaquotes.net”) ; ) token string puede estar compuesto por varios tokens, como por ejemplo, palabras claves, constantes, expresiones constantes y no constantes. token string se termina con elfin de la nea y no puede saltar a la siguiente. Ejemplo #define TWO 2 #define THREE 3 define INCOMPLETE TVO+THREE define COMPLETE (TVO+THREE) void OnStart() ‘ Peint("2+32 =", INCOMPLETE*2) ; Print(""(2+3) "2 =", COMPLETE®2); ) /* Resultado 24302 = 8 (243)*2 = 10 / Véase también Identificadores, Constantes de caracteres (© 2000-2010, MetaQuotes Software Corp. = Bases del lenguaje MQL5 Propiedades de programas (#property) Para cada programa ma\é se puede indicar unos parémetros especificos adiconales Aproperty, los que ayudan al terminal de diente prestar un servicio correcto a los programas sin necesidad de iniciarlos explicitamente. En primer lugar, esto se refiere a les ajustes de lor indicadores externos. Las propiedades descritas en en los archivos incluidos se ignoran por completo. Las propiedades tienen que ser especificadas en el archivo-malS principal, property identificador valor El compilador apuntaré los valores renovades en lor ajustes del médulo ejecutado. Constante Tipo Des cripcién link referencia a la web de la empresa productore nombre de la empresa productora copyright version versién del programa, no mas de 31 caracteres, breve descripcién textual det programa mal. Puede haber algunas description, cada una de las cuales describe una linea de texto. La longitud total de todas las description no puede superar mas de 511 caracteres induyendo saltos de lineas description stacksize int tamafio de pila para las amadas recursivas library biblioteca; no asigna ninguna fundién de inicio; funciones con modificador export se puede importar en otros programas mq indicator_apptied price int especifica el valor por defecto para el campo "Apply to’, Se puede especificar uno de los valores de enumeradén ENUM APPLIED PRICE, Si la propiedad noes especificada, entonces por defecto se aplica el valor PRICE_CLOSE indicator_chart_window mostrar el indicador en la (© 2000-2010, MetaQuotes Software Corp. z= Bases del lenguaje MQL5 ventana del grafico indicator_separate_window mostrar el indicador en la ventana separada indicator_buffers int cantidad de buffers para el cBlculo del indicador indicator_plots int cantidad de series gréficas en el indicador indicator_minimum double margen inferior de escala de la ventana separada.— del indicador indicator_maximum double margen superior de escala de la ventana separada del indicador indicator_labelN string pone una marca para la enésima serie __eréfica mostrada en la ventana DataWindow, Para las series eréficas que necesitan varios buffers de —_indicadores (DRAW _CANDLES, DRAW_FILLING y los demés), los nombres de las marcas vienen con separadot indicator_colorN color color para mostrar la nea N, donde la Nes el numero de la serie gréfics se empieza desde 1 la enumeradén indi cator_widthN int grosor de tinea en le serie gréfica, donde la N es el numero de la serie gréfica; la enumeradén se empieza desde 1 indicator_styleN int estilo de tinea la serie eréfica especificado con el valor de ENUM LINE STYLE, La Nes el numero de la serie gréfica, la enumeradén se empieza desde 1 indicator_typeN int tipo de construccién grafica especificado con el valor de ENUM_DRAW_TYPE. La Nes el numero de la serie gréfica, la enumeradén se empieza desde 1 (© 2000-2010, MetaQuotes Software Corp.

You might also like