0% found this document useful (0 votes)
1K views4,087 pages

MQL 5

Founded in 1807, John Wiley & Sons is the oldest independent publishing company in the United States. With offices in North America, Europe, Australia, and Asia, Wiley is globally committed to developing and marketing print and electronic products and services for our customers’ professional and personal knowledge and understanding. The Wiley Trading series features books by traders who have survived the market’s ever-changing temperament and have prospered—some by reinventing systems, others by getting back to basics. Whether a novice trader, professional, or somewhere in-between, these books will provide the advice and strategies needed to prosper today and well into the future. For a list of available titles, visit our Web site at www.WileyFinance.com.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views4,087 pages

MQL 5

Founded in 1807, John Wiley & Sons is the oldest independent publishing company in the United States. With offices in North America, Europe, Australia, and Asia, Wiley is globally committed to developing and marketing print and electronic products and services for our customers’ professional and personal knowledge and understanding. The Wiley Trading series features books by traders who have survived the market’s ever-changing temperament and have prospered—some by reinventing systems, others by getting back to basics. Whether a novice trader, professional, or somewhere in-between, these books will provide the advice and strategies needed to prosper today and well into the future. For a list of available titles, visit our Web site at www.WileyFinance.com.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4087

MQL5 Language REFERENCE

for the MetaTrader 5 client terminal


STUDY MQL5 and
SOLVE any tasks:
Create your own technical analysis indicators
of any complexity
Use autotrading - automate trading systems
to work on various financial markets
Develop your own analytical tools based on
mathematical achievements and traditional
methods
Write information trading systems for solving
a wide range of tasks (trading, monitoring,
alerting, etc.)

Content 2
2000-2014, MetaQuotes Software Corp.
Content
MQL5 Reference
50
................................................................................................. 51 1 Language Basics
............................................................................................................................52 Syntax
......................................................................................................................... 53 Comments
......................................................................................................................... 54 I dentifiers
......................................................................................................................... 55 Reserved Words
............................................................................................................................57 Data Types
......................................................................................................................... 58 I nteger Types
................................................................................................................ 59 Char, Short, I nt and Long Types
................................................................................................................ 63 Character Constants
................................................................................................................ 66 Datetime Type
................................................................................................................ 67 Color Type
................................................................................................................ 68 Bool Type
................................................................................................................ 69 Enumerations
......................................................................................................................... 71 Real Types (double, float)
......................................................................................................................... 76 String Type
......................................................................................................................... 77 Structures and Classes
......................................................................................................................... 88 Dynamic Array Object
......................................................................................................................... 89 Typecasting
......................................................................................................................... 96 Void Type and NULL Constant
......................................................................................................................... 97 Object Pointers
......................................................................................................................... 98 References: Modifier & and Keyword this
............................................................................................................................100 Operations and Expressions
......................................................................................................................... 101 Expressions
......................................................................................................................... 102 Arithmetical Operations
......................................................................................................................... 103 Assignment Operations
......................................................................................................................... 104 Operations of Relation
......................................................................................................................... 105 Boolean Operations
......................................................................................................................... 107 Bitwise Operations
......................................................................................................................... 110 Other Operations
......................................................................................................................... 114 Precedence Rules
............................................................................................................................116 Operators
......................................................................................................................... 118 Compound Operator
......................................................................................................................... 119 Expression Operator
......................................................................................................................... 120 Return Operator
......................................................................................................................... 121 Conditional Operator if-else
......................................................................................................................... 122 Ternary Operator ?:
......................................................................................................................... 124 Switch Operator
......................................................................................................................... 126 Loop Operator while
......................................................................................................................... 127 Loop Operator for
......................................................................................................................... 128 Loop Operator do while
......................................................................................................................... 129 Break Operator
......................................................................................................................... 130 Continue Operator
......................................................................................................................... 131 Object Create Operator new
......................................................................................................................... 132 Object Delete Operator delete
............................................................................................................................133 Functions
......................................................................................................................... 135 Function Call
......................................................................................................................... 136 Passing Parameters
......................................................................................................................... 139 Function Overloading
......................................................................................................................... 142 Operation Overloading
......................................................................................................................... 155 Description of External Functions
......................................................................................................................... 157 Exporting Functions
......................................................................................................................... 158 Event Handling Functions
Content 3
2000-2014, MetaQuotes Software Corp.
............................................................................................................................169 Variables
......................................................................................................................... 172 Local Variables
......................................................................................................................... 174 Formal Parameters
......................................................................................................................... 176 Static Variables
......................................................................................................................... 178 Global Variables
......................................................................................................................... 179 I nput Variables
......................................................................................................................... 183 Extern Variables
......................................................................................................................... 184 I nitialization of Variables
......................................................................................................................... 186 Visibility Scope and Lifetime of Variables
......................................................................................................................... 188 Creating and Deleting Objects
............................................................................................................................191 Preprocessor
......................................................................................................................... 192 Macro substitution (#define)
......................................................................................................................... 194 Program Properties (#property)
......................................................................................................................... 199 I ncluding Files (#include)
......................................................................................................................... 200 I mporting Functions (#import)
......................................................................................................................... 202 Conditional Compilation (#ifdef, #ifndef, #else, #endif)
............................................................................................................................204 Object-Oriented Programming
......................................................................................................................... 206 Encapsulation and Extensibility of Types
......................................................................................................................... 209 I nheritance
......................................................................................................................... 214 Polymorphism
......................................................................................................................... 218 Overload
......................................................................................................................... 219 Virtual Functions
......................................................................................................................... 222 Static Members of a Class
......................................................................................................................... 226 Function templates
................................................................................................. 230 2 Standard Constants, Enumerations and Structures
............................................................................................................................231 Chart Constants
......................................................................................................................... 232 Types of Chart Events
......................................................................................................................... 237 Chart Timeframes
......................................................................................................................... 239 Chart Properties
......................................................................................................................... 245 Positioning Constants
......................................................................................................................... 246 Chart Representation
......................................................................................................................... 248 Examples of Working with the Chart
............................................................................................................................304 Objects Constants
......................................................................................................................... 305 Object Types
................................................................................................................ 307 OBJ_VLI NE
................................................................................................................ 312 OBJ_HLI NE
................................................................................................................ 317 OBJ_TREND
................................................................................................................ 324 OBJ_TRENDBYANGLE
................................................................................................................ 330 OBJ_CYCLES
................................................................................................................ 336 OBJ_ARROWED_LI NE
................................................................................................................ 342 OBJ_CHANNEL
................................................................................................................ 349 OBJ_STDDEVCHANNEL
................................................................................................................ 356 OBJ_REGRESSI ON
................................................................................................................ 362 OBJ_PI TCHFORK
................................................................................................................ 370 OBJ_GANNLI NE
................................................................................................................ 377 OBJ_GANNFAN
................................................................................................................ 384 OBJ_GANNGRI D
................................................................................................................ 391 OBJ_FI BO
................................................................................................................ 398 OBJ_FI BOTI MES
................................................................................................................ 405 OBJ_FI BOFAN
................................................................................................................ 412 OBJ_FI BOARC
................................................................................................................ 419 OBJ_FI BOCHANNEL
................................................................................................................ 427 OBJ_EXPANSI ON
................................................................................................................ 435 OBJ_ELLI OTWAVE5
................................................................................................................ 443 OBJ_ELLI OTWAVE3
................................................................................................................ 450 OBJ_RECTANGLE
................................................................................................................ 456 OBJ_TRI ANGLE
................................................................................................................ 463 OBJ_ELLI PSE
Content 4
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 469 OBJ_ARROW_THUMB_UP
................................................................................................................ 475 OBJ_ARROW_THUMB_DOWN
................................................................................................................ 481 OBJ_ARROW_UP
................................................................................................................ 487 OBJ_ARROW_DOWN
................................................................................................................ 493 OBJ_ARROW_STOP
................................................................................................................ 499 OBJ_ARROW_CHECK
................................................................................................................ 505 OBJ_ARROW_LEFT_PRI CE
................................................................................................................ 510 OBJ_ARROW_RI GHT_PRI CE
................................................................................................................ 515 OBJ_ARROW_BUY
................................................................................................................ 520 OBJ_ARROW_SELL
................................................................................................................ 525 OBJ_ARROW
................................................................................................................ 531 OBJ_TEXT
................................................................................................................ 537 OBJ_LABEL
................................................................................................................ 545 OBJ_BUTTON
................................................................................................................ 552 OBJ_CHART
................................................................................................................ 559 OBJ_BI TMAP
................................................................................................................ 566 OBJ_BI TMAP_LABEL
................................................................................................................ 573 OBJ_EDI T
................................................................................................................ 580 OBJ_EVENT
................................................................................................................ 585 OBJ_RECTANGLE_LABEL
......................................................................................................................... 591 Object Properties
......................................................................................................................... 598 Methods of Object Binding
......................................................................................................................... 602 Chart Corner
......................................................................................................................... 604 Visibility of Objects
......................................................................................................................... 607 Levels of Elliott Wave
......................................................................................................................... 608 Gann Objects
......................................................................................................................... 610 Web Colors
......................................................................................................................... 612 Wingdings
............................................................................................................................613 Indicator Constants
......................................................................................................................... 614 Price Constants
......................................................................................................................... 617 Smoothing Methods
......................................................................................................................... 618 I ndicators Lines
......................................................................................................................... 620 Drawing Styles
......................................................................................................................... 624 Custom I ndicator Properties
......................................................................................................................... 627 I ndicator Types
......................................................................................................................... 629 Data Type I dentifiers
............................................................................................................................630 Environment State
......................................................................................................................... 631 Client Terminal Properties
......................................................................................................................... 634 Running MQL5 Program Properties
......................................................................................................................... 637 Symbol Properties
......................................................................................................................... 648 Account Properties
......................................................................................................................... 651 Testing Statistics
............................................................................................................................655 Trade Constants
......................................................................................................................... 656 History Database Properties
......................................................................................................................... 657 Order Properties
......................................................................................................................... 661 Position Properties
......................................................................................................................... 663 Deal Properties
......................................................................................................................... 666 Trade Operation Types
......................................................................................................................... 667 Trade Transaction Types
......................................................................................................................... 670 Trade Orders in DOM
......................................................................................................................... 671 Signal Properties
............................................................................................................................673 Named Constants
......................................................................................................................... 674 Predefined Macro Substitutions
......................................................................................................................... 676 Mathematical Constants
......................................................................................................................... 678 Numerical Type Constants
......................................................................................................................... 681 Uninitialization Reason Codes
......................................................................................................................... 683 Checking Object Pointer
......................................................................................................................... 684 Other Constants
Content 5
2000-2014, MetaQuotes Software Corp.
............................................................................................................................688 Data Structures
......................................................................................................................... 689 Structure of the Date Type
......................................................................................................................... 690 Structure of I nput Parameters
......................................................................................................................... 691 History Data Structure
......................................................................................................................... 692 DOM Structure
......................................................................................................................... 693 Trade Request Structure
......................................................................................................................... 697 Structure of Request Check Results
......................................................................................................................... 698 Structure of a Trade Request Result
......................................................................................................................... 701 Structure of a Trade Transaction
......................................................................................................................... 709 Structure for Current Prices
............................................................................................................................710 Codes of Errors and Warnings
......................................................................................................................... 711 Trade Server Return Codes
......................................................................................................................... 713 Compiler Warnings
......................................................................................................................... 716 Compilation Errors
......................................................................................................................... 726 Runtime Errors
............................................................................................................................734 Input/Output Constants
......................................................................................................................... 735 File Opening Flags
......................................................................................................................... 737 File Properties
......................................................................................................................... 738 I n-File Position
......................................................................................................................... 739 Use of a Codepage
......................................................................................................................... 740 MessageBox
................................................................................................. 742 3 MQL5 programs
............................................................................................................................743 Program Running
............................................................................................................................749 Client Terminal Events
............................................................................................................................752 Resources
............................................................................................................................761 Call of Imported Functions
............................................................................................................................763 Runtime Errors
............................................................................................................................764 Testing Trading Strategies
................................................................................................. 789 4 Predefined Variables
............................................................................................................................790 _Digits
............................................................................................................................791 _Point
............................................................................................................................792 _LastError
............................................................................................................................793 _Period
............................................................................................................................794 _RandomSeed
............................................................................................................................795 _StopFlag
............................................................................................................................796 _Symbol
............................................................................................................................797 _UninitReason
................................................................................................. 798 5 Common Functions
............................................................................................................................800 Alert
............................................................................................................................801 CheckPointer
............................................................................................................................803 Comment
............................................................................................................................804 DebugBreak
............................................................................................................................805 ExpertRemove
............................................................................................................................807 GetPointer
............................................................................................................................811 GetTickCount
............................................................................................................................812 MessageBox
............................................................................................................................813 PeriodSeconds
............................................................................................................................814 PlaySound
............................................................................................................................815 Print
............................................................................................................................817 PrintFormat
............................................................................................................................822 ResetLastError
............................................................................................................................823 ResourceCreate
............................................................................................................................825 ResourceFree
............................................................................................................................826 ResourceReadImage
............................................................................................................................827 ResourceSave
............................................................................................................................828 SetUserError
............................................................................................................................829 SendFTP
Content 6
2000-2014, MetaQuotes Software Corp.
............................................................................................................................830 SendNotification
............................................................................................................................831 SendMail
............................................................................................................................832 Sleep
............................................................................................................................833 TerminalClose
............................................................................................................................835 TesterStatistics
............................................................................................................................836 TesterWithdrawal
............................................................................................................................837 WebRequest
............................................................................................................................839 ZeroMemory
................................................................................................. 840 6 Array Functions
............................................................................................................................841 ArrayBsearch
............................................................................................................................845 ArrayCopy
............................................................................................................................850 ArrayCompare
............................................................................................................................851 ArrayFree
............................................................................................................................860 ArrayGetAsSeries
............................................................................................................................863 ArrayInitialize
............................................................................................................................864 ArrayFill
............................................................................................................................866 ArrayIsDynamic
............................................................................................................................868 ArrayIsSeries
............................................................................................................................870 ArrayMaximum
............................................................................................................................881 ArrayMinimum
............................................................................................................................892 ArrayRange
............................................................................................................................893 ArrayResize
............................................................................................................................896 ArraySetAsSeries
............................................................................................................................899 ArraySize
............................................................................................................................901 ArraySort
................................................................................................. 906 7 Conversion Functions
............................................................................................................................908 CharToString
............................................................................................................................909 CharArrayToString
............................................................................................................................910 ColorToARGB
............................................................................................................................912 ColorToString
............................................................................................................................913 DoubleToString
............................................................................................................................914 EnumToString
............................................................................................................................916 IntegerToString
............................................................................................................................917 ShortToString
............................................................................................................................918 ShortArrayToString
............................................................................................................................919 TimeToString
............................................................................................................................920 NormalizeDouble
............................................................................................................................922 StringToCharArray
............................................................................................................................923 StringToColor
............................................................................................................................924 StringToDouble
............................................................................................................................925 StringToInteger
............................................................................................................................926 StringToShortArray
............................................................................................................................927 StringToTime
............................................................................................................................928 StringFormat
................................................................................................. 929 8 Math Functions
............................................................................................................................930 MathAbs
............................................................................................................................931 MathArccos
............................................................................................................................932 MathArcsin
............................................................................................................................933 MathArctan
............................................................................................................................934 MathCeil
............................................................................................................................935 MathCos
............................................................................................................................936 MathExp
............................................................................................................................937 MathFloor
............................................................................................................................938 MathLog
............................................................................................................................939 MathLog10
............................................................................................................................940 MathMax
............................................................................................................................941 MathMin
Content 7
2000-2014, MetaQuotes Software Corp.
............................................................................................................................942 MathMod
............................................................................................................................943 MathPow
............................................................................................................................944 MathRand
............................................................................................................................945 MathRound
............................................................................................................................946 MathSin
............................................................................................................................947 MathSqrt
............................................................................................................................948 MathSrand
............................................................................................................................951 MathTan
............................................................................................................................952 MathIsValidNumber
................................................................................................. 953 9 String Functions
............................................................................................................................954 StringAdd
............................................................................................................................956 StringBufferLen
............................................................................................................................957 StringCompare
............................................................................................................................959 StringConcatenate
............................................................................................................................960 StringFill
............................................................................................................................961 StringFind
............................................................................................................................962 StringGetCharacter
............................................................................................................................963 StringInit
............................................................................................................................964 StringLen
............................................................................................................................965 StringReplace
............................................................................................................................966 StringSetCharacter
............................................................................................................................968 StringSplit
............................................................................................................................970 StringSubstr
............................................................................................................................971 StringToLower
............................................................................................................................972 StringToUpper
............................................................................................................................973 StringTrimLeft
............................................................................................................................974 StringTrimRight
................................................................................................. 975 10 Date and Time
............................................................................................................................976 TimeCurrent
............................................................................................................................977 TimeTradeServer
............................................................................................................................978 TimeLocal
............................................................................................................................979 TimeGMT
............................................................................................................................980 TimeDaylightSavings
............................................................................................................................981 TimeGMTOffset
............................................................................................................................982 TimeToStruct
............................................................................................................................983 StructToTime
................................................................................................. 984 11 Account Information
............................................................................................................................985 AccountInfoDouble
............................................................................................................................986 AccountInfoInteger
............................................................................................................................988 AccountInfoString
................................................................................................. 989 12 Checkup
............................................................................................................................990 GetLastError
............................................................................................................................991 IsStopped
............................................................................................................................992 UninitializeReason
............................................................................................................................993 TerminalInfoInteger
............................................................................................................................994 TerminalInfoDouble
............................................................................................................................995 TerminalInfoString
............................................................................................................................996 MQLInfoInteger
............................................................................................................................997 MQLInfoString
............................................................................................................................998 Symbol
............................................................................................................................999 Period
............................................................................................................................1000 Digits
............................................................................................................................1001 Point
................................................................................................. 1002 13 Market Info
............................................................................................................................1003 SymbolsTotal
............................................................................................................................1004 SymbolName
Content 8
2000-2014, MetaQuotes Software Corp.
............................................................................................................................1005 SymbolSelect
............................................................................................................................1006 SymbolIsSynchronized
............................................................................................................................1007 SymbolInfoDouble
............................................................................................................................1009 SymbolInfoInteger
............................................................................................................................1011 SymbolInfoString
............................................................................................................................1012 SymbolInfoTick
............................................................................................................................1013 SymbolInfoSessionQuote
............................................................................................................................1014 SymbolInfoSessionTrade
............................................................................................................................1015 MarketBookAdd
............................................................................................................................1016 MarketBookRelease
............................................................................................................................1017 MarketBookGet
................................................................................................. 1018 14 Timeseries and Indicators Access
............................................................................................................................1022 Indexing Direction in Arrays, Buffers and Timeseries
............................................................................................................................1025 Organizing Data Access
............................................................................................................................1034 SeriesInfoInteger
............................................................................................................................1036 Bars
............................................................................................................................1038 BarsCalculated
............................................................................................................................1040 IndicatorCreate
............................................................................................................................1042 IndicatorParameters
............................................................................................................................1044 IndicatorRelease
............................................................................................................................1046 CopyBuffer
............................................................................................................................1051 CopyRates
............................................................................................................................1055 CopyTime
............................................................................................................................1058 CopyOpen
............................................................................................................................1061 CopyHigh
............................................................................................................................1065 CopyLow
............................................................................................................................1068 CopyClose
............................................................................................................................1071 CopyTickVolume
............................................................................................................................1075 CopyRealVolume
............................................................................................................................1078 CopySpread
................................................................................................. 1082 15 Chart Operations
............................................................................................................................1084 ChartApplyTemplate
............................................................................................................................1087 ChartSaveTemplate
............................................................................................................................1092 ChartWindowFind
............................................................................................................................1094 ChartTimePriceToXY
............................................................................................................................1095 ChartXYToTimePrice
............................................................................................................................1098 ChartOpen
............................................................................................................................1099 ChartFirst
............................................................................................................................1100 ChartNext
............................................................................................................................1101 ChartClose
............................................................................................................................1102 ChartSymbol
............................................................................................................................1103 ChartPeriod
............................................................................................................................1104 ChartRedraw
............................................................................................................................1105 ChartSetDouble
............................................................................................................................1106 ChartSetInteger
............................................................................................................................1107 ChartSetString
............................................................................................................................1108 ChartGetDouble
............................................................................................................................1110 ChartGetInteger
............................................................................................................................1112 ChartGetString
............................................................................................................................1114 ChartNavigate
............................................................................................................................1117 ChartID
............................................................................................................................1118 ChartIndicatorAdd
............................................................................................................................1122 ChartIndicatorDelete
............................................................................................................................1125 ChartIndicatorGet
............................................................................................................................1127 ChartIndicatorName
............................................................................................................................1128 ChartIndicatorsTotal
............................................................................................................................1129 ChartWindowOnDropped
............................................................................................................................1130 ChartPriceOnDropped
Content 9
2000-2014, MetaQuotes Software Corp.
............................................................................................................................1131 ChartTimeOnDropped
............................................................................................................................1132 ChartXOnDropped
............................................................................................................................1133 ChartYOnDropped
............................................................................................................................1134 ChartSetSymbolPeriod
............................................................................................................................1135 ChartScreenShot
................................................................................................. 1138 16 Trade Functions
............................................................................................................................1140 OrderCalcMargin
............................................................................................................................1141 OrderCalcProfit
............................................................................................................................1142 OrderCheck
............................................................................................................................1143 OrderSend
............................................................................................................................1148 OrderSendAsync
............................................................................................................................1159 PositionsTotal
............................................................................................................................1160 PositionGetSymbol
............................................................................................................................1161 PositionSelect
............................................................................................................................1162 PositionGetDouble
............................................................................................................................1163 PositionGetInteger
............................................................................................................................1165 PositionGetString
............................................................................................................................1166 OrdersTotal
............................................................................................................................1167 OrderGetTicket
............................................................................................................................1169 OrderSelect
............................................................................................................................1170 OrderGetDouble
............................................................................................................................1171 OrderGetInteger
............................................................................................................................1172 OrderGetString
............................................................................................................................1173 HistorySelect
............................................................................................................................1175 HistorySelectByPosition
............................................................................................................................1176 HistoryOrderSelect
............................................................................................................................1177 HistoryOrdersTotal
............................................................................................................................1178 HistoryOrderGetTicket
............................................................................................................................1180 HistoryOrderGetDouble
............................................................................................................................1181 HistoryOrderGetInteger
............................................................................................................................1184 HistoryOrderGetString
............................................................................................................................1185 HistoryDealSelect
............................................................................................................................1186 HistoryDealsTotal
............................................................................................................................1187 HistoryDealGetTicket
............................................................................................................................1189 HistoryDealGetDouble
............................................................................................................................1190 HistoryDealGetInteger
............................................................................................................................1193 HistoryDealGetString
................................................................................................. 1194 17 Trade Signals
............................................................................................................................1195 SignalBaseGetDouble
............................................................................................................................1196 SignalBaseGetInteger
............................................................................................................................1197 SignalBaseGetString
............................................................................................................................1198 SignalBaseSelect
............................................................................................................................1199 SignalBaseTotal
............................................................................................................................1200 SignalInfoGetDouble
............................................................................................................................1201 SignalInfoGetInteger
............................................................................................................................1202 SignalInfoGetString
............................................................................................................................1203 SignalInfoSetDouble
............................................................................................................................1204 SignalInfoSetInteger
............................................................................................................................1205 SignalSubscribe
............................................................................................................................1206 SignalUnSubscribe
................................................................................................. 1207 18 Global Variables of the Terminal
............................................................................................................................1208 GlobalVariableCheck
............................................................................................................................1209 GlobalVariableTime
............................................................................................................................1210 GlobalVariableDel
............................................................................................................................1211 GlobalVariableGet
............................................................................................................................1212 GlobalVariableName
............................................................................................................................1213 GlobalVariableSet
Content 10
2000-2014, MetaQuotes Software Corp.
............................................................................................................................1214 GlobalVariablesFlush
............................................................................................................................1215 GlobalVariableTemp
............................................................................................................................1216 GlobalVariableSetOnCondition
............................................................................................................................1217 GlobalVariablesDeleteAll
............................................................................................................................1218 GlobalVariablesTotal
................................................................................................. 1219 19 File Functions
............................................................................................................................1222 FileFindFirst
............................................................................................................................1224 FileFindNext
............................................................................................................................1226 FileFindClose
............................................................................................................................1228 FileIsExist
............................................................................................................................1231 FileOpen
............................................................................................................................1234 FileClose
............................................................................................................................1235 FileCopy
............................................................................................................................1238 FileDelete
............................................................................................................................1240 FileMove
............................................................................................................................1242 FileFlush
............................................................................................................................1244 FileGetInteger
............................................................................................................................1247 FileIsEnding
............................................................................................................................1249 FileIsLineEnding
............................................................................................................................1254 FileReadArray
............................................................................................................................1256 FileReadBool
............................................................................................................................1259 FileReadDatetime
............................................................................................................................1262 FileReadDouble
............................................................................................................................1265 FileReadFloat
............................................................................................................................1268 FileReadInteger
............................................................................................................................1272 FileReadLong
............................................................................................................................1275 FileReadNumber
............................................................................................................................1280 FileReadString
............................................................................................................................1282 FileReadStruct
............................................................................................................................1286 FileSeek
............................................................................................................................1289 FileSize
............................................................................................................................1291 FileTell
............................................................................................................................1294 FileWrite
............................................................................................................................1297 FileWriteArray
............................................................................................................................1300 FileWriteDouble
............................................................................................................................1303 FileWriteFloat
............................................................................................................................1305 FileWriteInteger
............................................................................................................................1308 FileWriteLong
............................................................................................................................1310 FileWriteString
............................................................................................................................1313 FileWriteStruct
............................................................................................................................1316 FolderCreate
............................................................................................................................1319 FolderDelete
............................................................................................................................1322 FolderClean
................................................................................................. 1325 20 Custom Indicators
............................................................................................................................1329 Indicator Styles in Examples
......................................................................................................................... 1336 DRAW_NONE
......................................................................................................................... 1339 DRAW_LI NE
......................................................................................................................... 1343 DRAW_SECTI ON
......................................................................................................................... 1347 DRAW_HI STOGRAM
......................................................................................................................... 1351 DRAW_HI STOGRAM2
......................................................................................................................... 1355 DRAW_ARROW
......................................................................................................................... 1360 DRAW_ZI GZAG
......................................................................................................................... 1365 DRAW_FI LLI NG
......................................................................................................................... 1370 DRAW_BARS
......................................................................................................................... 1376 DRAW_CANDLES
......................................................................................................................... 1382 DRAW_COLOR_LI NE
......................................................................................................................... 1387 DRAW_COLOR_SECTI ON
......................................................................................................................... 1393 DRAW_COLOR_HI STOGRAM
Content 11
2000-2014, MetaQuotes Software Corp.
......................................................................................................................... 1398 DRAW_COLOR_HI STOGRAM2
......................................................................................................................... 1403 DRAW_COLOR_ARROW
......................................................................................................................... 1409 DRAW_COLOR_ZI GZAG
......................................................................................................................... 1414 DRAW_COLOR_BARS
......................................................................................................................... 1421 DRAW_COLOR_CANDLES
............................................................................................................................1428 Connection between Indicator Properties and Functions
............................................................................................................................1430 SetIndexBuffer
............................................................................................................................1433 IndicatorSetDouble
............................................................................................................................1436 IndicatorSetInteger
............................................................................................................................1440 IndicatorSetString
............................................................................................................................1443 PlotIndexSetDouble
............................................................................................................................1444 PlotIndexSetInteger
............................................................................................................................1448 PlotIndexSetString
............................................................................................................................1449 PlotIndexGetInteger
................................................................................................. 1452 21 Object Functions
............................................................................................................................1454 ObjectCreate
............................................................................................................................1458 ObjectName
............................................................................................................................1459 ObjectDelete
............................................................................................................................1460 ObjectsDeleteAll
............................................................................................................................1461 ObjectFind
............................................................................................................................1462 ObjectGetTimeByValue
............................................................................................................................1463 ObjectGetValueByTime
............................................................................................................................1464 ObjectMove
............................................................................................................................1465 ObjectsTotal
............................................................................................................................1466 ObjectSetDouble
............................................................................................................................1469 ObjectSetInteger
............................................................................................................................1472 ObjectSetString
............................................................................................................................1474 ObjectGetDouble
............................................................................................................................1475 ObjectGetInteger
............................................................................................................................1476 ObjectGetString
............................................................................................................................1478 TextSetFont
............................................................................................................................1480 TextOut
............................................................................................................................1484 TextGetSize
................................................................................................. 1485 22 Technical Indicators
............................................................................................................................1487 iAC
............................................................................................................................1492 iAD
............................................................................................................................1497 iADX
............................................................................................................................1502 iADXWilder
............................................................................................................................1507 iAlligator
............................................................................................................................1514 iAMA
............................................................................................................................1519 iAO
............................................................................................................................1524 iATR
............................................................................................................................1529 iBearsPower
............................................................................................................................1534 iBands
............................................................................................................................1540 iBullsPower
............................................................................................................................1545 iCCI
............................................................................................................................1550 iChaikin
............................................................................................................................1555 iCustom
............................................................................................................................1558 iDEMA
............................................................................................................................1563 iDeMarker
............................................................................................................................1568 iEnvelopes
............................................................................................................................1574 iForce
............................................................................................................................1579 iFractals
............................................................................................................................1584 iFrAMA
............................................................................................................................1589 iGator
............................................................................................................................1596 iIchimoku
............................................................................................................................1603 iBWMFI
............................................................................................................................1608 iMomentum
Content 12
2000-2014, MetaQuotes Software Corp.
............................................................................................................................1613 iMFI
............................................................................................................................1618 iMA
............................................................................................................................1623 iOsMA
............................................................................................................................1628 iMACD
............................................................................................................................1634 iOBV
............................................................................................................................1639 iSAR
............................................................................................................................1644 iRSI
............................................................................................................................1649 iRVI
............................................................................................................................1654 iStdDev
............................................................................................................................1659 iStochastic
............................................................................................................................1665 iTEMA
............................................................................................................................1670 iTriX
............................................................................................................................1675 iWPR
............................................................................................................................1680 iVIDyA
............................................................................................................................1685 iVolumes
................................................................................................. 1690 23 Working with Optimization Results
............................................................................................................................1691 FrameFirst
............................................................................................................................1692 FrameFilter
............................................................................................................................1693 FrameNext
............................................................................................................................1694 FrameInputs
............................................................................................................................1695 FrameAdd
............................................................................................................................1696 ParameterGetRange
............................................................................................................................1699 ParameterSetRange
................................................................................................. 1701 24 Working with Events
............................................................................................................................1702 EventSetMillisecondTimer
............................................................................................................................1703 EventSetTimer
............................................................................................................................1704 EventKillTimer
............................................................................................................................1705 EventChartCustom
................................................................................................. 1711 25 Working with OpenCL
............................................................................................................................1712 CLHandleType
............................................................................................................................1713 CLGetInfoInteger
............................................................................................................................1715 CLGetInfoString
............................................................................................................................1718 CLContextCreate
............................................................................................................................1719 CLContextFree
............................................................................................................................1720 CLGetDeviceInfo
............................................................................................................................1724 CLProgramCreate
............................................................................................................................1725 CLProgramFree
............................................................................................................................1726 CLKernelCreate
............................................................................................................................1727 CLKernelFree
............................................................................................................................1728 CLSetKernelArg
............................................................................................................................1729 CLSetKernelArgMem
............................................................................................................................1730 CLBufferCreate
............................................................................................................................1731 CLBufferFree
............................................................................................................................1732 CLBufferWrite
............................................................................................................................1733 CLBufferRead
............................................................................................................................1734 CLExecute
................................................................................................. 1736 26 Standard Library
............................................................................................................................1737 Basic Class CObject
......................................................................................................................... 1738 Prev
......................................................................................................................... 1739 Prev
......................................................................................................................... 1740 Next
......................................................................................................................... 1741 Next
......................................................................................................................... 1742 Compare
......................................................................................................................... 1744 Save
......................................................................................................................... 1746 Load
......................................................................................................................... 1748 Type
............................................................................................................................1749 Classes of data
Content 13
2000-2014, MetaQuotes Software Corp.
......................................................................................................................... 1750 CArray
................................................................................................................ 1752 Step
................................................................................................................ 1753 Step
................................................................................................................ 1754 Total
................................................................................................................ 1755 Available
................................................................................................................ 1756 Max
................................................................................................................ 1757 I sSorted
................................................................................................................ 1758 SortMode
................................................................................................................ 1759 Clear
................................................................................................................ 1760 Sort
................................................................................................................ 1761 Save
................................................................................................................ 1762 Load
......................................................................................................................... 1763 CArrayChar
................................................................................................................ 1765 Reserve
................................................................................................................ 1766 Resize
................................................................................................................ 1767 Shutdown
................................................................................................................ 1768 Add
................................................................................................................ 1769 AddArray
................................................................................................................ 1770 AddArray
................................................................................................................ 1772 I nsert
................................................................................................................ 1773 I nsertArray
................................................................................................................ 1774 I nsertArray
................................................................................................................ 1776 AssignArray
................................................................................................................ 1777 AssignArray
................................................................................................................ 1779 Update
................................................................................................................ 1780 Shift
................................................................................................................ 1781 Delete
................................................................................................................ 1782 DeleteRange
................................................................................................................ 1783 At
................................................................................................................ 1785 CompareArray
................................................................................................................ 1786 CompareArray
................................................................................................................ 1787 I nsertSort
................................................................................................................ 1788 Search
................................................................................................................ 1789 SearchGreat
................................................................................................................ 1790 SearchLess
................................................................................................................ 1791 SearchGreatOrEqual
................................................................................................................ 1792 SearchLessOrEqual
................................................................................................................ 1793 SearchFirst
................................................................................................................ 1794 SearchLast
................................................................................................................ 1795 SearchLinear
................................................................................................................ 1796 Save
................................................................................................................ 1797 Load
................................................................................................................ 1799 Type
......................................................................................................................... 1800 CArrayShort
................................................................................................................ 1802 Reserve
................................................................................................................ 1803 Resize
................................................................................................................ 1804 Shutdown
................................................................................................................ 1805 Add
................................................................................................................ 1806 AddArray
................................................................................................................ 1807 AddArray
................................................................................................................ 1809 I nsert
................................................................................................................ 1810 I nsertArray
................................................................................................................ 1811 I nsertArray
................................................................................................................ 1813 AssignArray
................................................................................................................ 1814 AssignArray
................................................................................................................ 1816 Update
................................................................................................................ 1817 Shift
................................................................................................................ 1818 Delete
Content 14
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 1819 DeleteRange
................................................................................................................ 1820 At
................................................................................................................ 1822 CompareArray
................................................................................................................ 1823 CompareArray
................................................................................................................ 1824 I nsertSort
................................................................................................................ 1825 Search
................................................................................................................ 1826 SearchGreat
................................................................................................................ 1827 SearchLess
................................................................................................................ 1828 SearchGreatOrEqual
................................................................................................................ 1829 SearchLessOrEqual
................................................................................................................ 1830 SearchFirst
................................................................................................................ 1831 SearchLast
................................................................................................................ 1832 SearchLinear
................................................................................................................ 1833 Save
................................................................................................................ 1835 Load
................................................................................................................ 1837 Type
......................................................................................................................... 1838 CArrayI nt
................................................................................................................ 1840 Reserve
................................................................................................................ 1841 Resize
................................................................................................................ 1842 Shutdown
................................................................................................................ 1843 Add
................................................................................................................ 1844 AddArray
................................................................................................................ 1845 AddArray
................................................................................................................ 1847 I nsert
................................................................................................................ 1848 I nsertArray
................................................................................................................ 1849 I nsertArray
................................................................................................................ 1851 AssignArray
................................................................................................................ 1852 AssignArray
................................................................................................................ 1854 Update
................................................................................................................ 1855 Shift
................................................................................................................ 1856 Delete
................................................................................................................ 1857 DeleteRange
................................................................................................................ 1858 At
................................................................................................................ 1860 CompareArray
................................................................................................................ 1861 CompareArray
................................................................................................................ 1862 I nsertSort
................................................................................................................ 1863 Search
................................................................................................................ 1864 SearchGreat
................................................................................................................ 1865 SearchLess
................................................................................................................ 1866 SearchGreatOrEqual
................................................................................................................ 1867 SearchLessOrEqual
................................................................................................................ 1868 SearchFirst
................................................................................................................ 1869 SearchLast
................................................................................................................ 1870 SearchLinear
................................................................................................................ 1871 Save
................................................................................................................ 1873 Load
................................................................................................................ 1875 Type
......................................................................................................................... 1876 CArrayLong
................................................................................................................ 1878 Reserve
................................................................................................................ 1879 Resize
................................................................................................................ 1880 Shutdown
................................................................................................................ 1881 Add
................................................................................................................ 1882 AddArray
................................................................................................................ 1883 AddArray
................................................................................................................ 1885 I nsert
................................................................................................................ 1886 I nsertArray
................................................................................................................ 1887 I nsertArray
................................................................................................................ 1889 AssignArray
Content 15
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 1890 AssignArray
................................................................................................................ 1892 Update
................................................................................................................ 1893 Shift
................................................................................................................ 1894 Delete
................................................................................................................ 1895 DeleteRange
................................................................................................................ 1896 At
................................................................................................................ 1898 CompareArray
................................................................................................................ 1899 CompareArray
................................................................................................................ 1900 I nsertSort
................................................................................................................ 1901 Search
................................................................................................................ 1902 SearchGreat
................................................................................................................ 1903 SearchLess
................................................................................................................ 1904 SearchGreatOrEqual
................................................................................................................ 1905 SearchLessOrEqual
................................................................................................................ 1906 SearchFirst
................................................................................................................ 1907 SearchLast
................................................................................................................ 1908 SearchLinear
................................................................................................................ 1909 Save
................................................................................................................ 1911 Load
................................................................................................................ 1913 Type
......................................................................................................................... 1914 CArrayFloat
................................................................................................................ 1916 Delta
................................................................................................................ 1917 Reserve
................................................................................................................ 1918 Resize
................................................................................................................ 1919 Shutdown
................................................................................................................ 1920 Add
................................................................................................................ 1921 AddArray
................................................................................................................ 1922 AddArray
................................................................................................................ 1924 I nsert
................................................................................................................ 1925 I nsertArray
................................................................................................................ 1926 I nsertArray
................................................................................................................ 1928 AssignArray
................................................................................................................ 1929 AssignArray
................................................................................................................ 1931 Update
................................................................................................................ 1932 Shift
................................................................................................................ 1933 Delete
................................................................................................................ 1934 DeleteRange
................................................................................................................ 1935 At
................................................................................................................ 1937 CompareArray
................................................................................................................ 1938 CompareArray
................................................................................................................ 1939 I nsertSort
................................................................................................................ 1940 Search
................................................................................................................ 1941 SearchGreat
................................................................................................................ 1942 SearchLess
................................................................................................................ 1943 SearchGreatOrEqual
................................................................................................................ 1944 SearchLessOrEqual
................................................................................................................ 1945 SearchFirst
................................................................................................................ 1946 SearchLast
................................................................................................................ 1947 SearchLinear
................................................................................................................ 1948 Save
................................................................................................................ 1950 Load
................................................................................................................ 1952 Type
......................................................................................................................... 1953 CArrayDouble
................................................................................................................ 1956 Delta
................................................................................................................ 1957 Reserve
................................................................................................................ 1958 Resize
................................................................................................................ 1959 Shutdown
................................................................................................................ 1960 Add
Content 16
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 1961 AddArray
................................................................................................................ 1962 AddArray
................................................................................................................ 1964 I nsert
................................................................................................................ 1965 I nsertArray
................................................................................................................ 1966 I nsertArray
................................................................................................................ 1968 AssignArray
................................................................................................................ 1969 AssignArray
................................................................................................................ 1971 Update
................................................................................................................ 1972 Shift
................................................................................................................ 1973 Delete
................................................................................................................ 1974 DeleteRange
................................................................................................................ 1975 At
................................................................................................................ 1977 CompareArray
................................................................................................................ 1978 CompareArray
................................................................................................................ 1979 Minimum
................................................................................................................ 1980 Maximum
................................................................................................................ 1981 I nsertSort
................................................................................................................ 1982 Search
................................................................................................................ 1983 SearchGreat
................................................................................................................ 1984 SearchLess
................................................................................................................ 1985 SearchGreatOrEqual
................................................................................................................ 1986 SearchLessOrEqual
................................................................................................................ 1987 SearchFirst
................................................................................................................ 1988 SearchLast
................................................................................................................ 1989 SearchLinear
................................................................................................................ 1990 Save
................................................................................................................ 1992 Load
................................................................................................................ 1994 Type
......................................................................................................................... 1995 CArrayString
................................................................................................................ 1997 Reserve
................................................................................................................ 1998 Resize
................................................................................................................ 1999 Shutdown
................................................................................................................ 2000 Add
................................................................................................................ 2001 AddArray
................................................................................................................ 2002 AddArray
................................................................................................................ 2004 I nsert
................................................................................................................ 2005 I nsertArray
................................................................................................................ 2006 I nsertArray
................................................................................................................ 2008 AssignArray
................................................................................................................ 2009 AssignArray
................................................................................................................ 2011 Update
................................................................................................................ 2012 Shift
................................................................................................................ 2013 Delete
................................................................................................................ 2014 DeleteRange
................................................................................................................ 2015 At
................................................................................................................ 2017 CompareArray
................................................................................................................ 2018 CompareArray
................................................................................................................ 2019 I nsertSort
................................................................................................................ 2020 Search
................................................................................................................ 2021 SearchGreat
................................................................................................................ 2022 SearchLess
................................................................................................................ 2023 SearchGreatOrEqual
................................................................................................................ 2024 SearchLessOrEqual
................................................................................................................ 2025 SearchFirst
................................................................................................................ 2026 SearchLast
................................................................................................................ 2027 SearchLinear
................................................................................................................ 2028 Save
................................................................................................................ 2030 Load
Content 17
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2032 Type
......................................................................................................................... 2033 CArrayObj
................................................................................................................ 2038 FreeMode
................................................................................................................ 2039 FreeMode
................................................................................................................ 2041 Reserve
................................................................................................................ 2042 Resize
................................................................................................................ 2044 Clear
................................................................................................................ 2045 Shutdown
................................................................................................................ 2046 CreateElement
................................................................................................................ 2048 Add
................................................................................................................ 2049 AddArray
................................................................................................................ 2052 I nsert
................................................................................................................ 2054 I nsertArray
................................................................................................................ 2056 AssignArray
................................................................................................................ 2058 Update
................................................................................................................ 2059 Shift
................................................................................................................ 2060 Detach
................................................................................................................ 2061 Delete
................................................................................................................ 2062 DeleteRange
................................................................................................................ 2063 At
................................................................................................................ 2064 CompareArray
................................................................................................................ 2065 I nsertSort
................................................................................................................ 2066 Search
................................................................................................................ 2067 SearchGreat
................................................................................................................ 2068 SearchLess
................................................................................................................ 2069 SearchGreatOrEqual
................................................................................................................ 2070 SearchLessOrEqual
................................................................................................................ 2071 SearchFirst
................................................................................................................ 2072 SearchLast
................................................................................................................ 2073 Save
................................................................................................................ 2074 Load
................................................................................................................ 2076 Type
......................................................................................................................... 2077 CList
................................................................................................................ 2079 FreeMode
................................................................................................................ 2080 FreeMode
................................................................................................................ 2082 Total
................................................................................................................ 2083 I sSorted
................................................................................................................ 2084 SortMode
................................................................................................................ 2085 CreateElement
................................................................................................................ 2086 Add
................................................................................................................ 2087 I nsert
................................................................................................................ 2089 DetachCurrent
................................................................................................................ 2090 DeleteCurrent
................................................................................................................ 2091 Delete
................................................................................................................ 2092 Clear
................................................................................................................ 2093 I ndexOf
................................................................................................................ 2094 GetNodeAtI ndex
................................................................................................................ 2095 GetFirstNode
................................................................................................................ 2096 GetPrevNode
................................................................................................................ 2097 GetCurrentNode
................................................................................................................ 2098 GetNextNode
................................................................................................................ 2099 GetLastNode
................................................................................................................ 2100 Sort
................................................................................................................ 2101 MoveToI ndex
................................................................................................................ 2102 Exchange
................................................................................................................ 2103 CompareList
................................................................................................................ 2104 Search
................................................................................................................ 2105 Save
Content 18
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2107 Load
................................................................................................................ 2109 Type
......................................................................................................................... 2110 CTreeNode
................................................................................................................ 2115 Owner
................................................................................................................ 2116 Left
................................................................................................................ 2117 Right
................................................................................................................ 2118 Balance
................................................................................................................ 2119 BalanceL
................................................................................................................ 2120 BalanceR
................................................................................................................ 2121 CreateSample
................................................................................................................ 2122 RefreshBalance
................................................................................................................ 2123 GetNext
................................................................................................................ 2124 SaveNode
................................................................................................................ 2125 LoadNode
................................................................................................................ 2126 Type
......................................................................................................................... 2127 CTree
................................................................................................................ 2132 Root
................................................................................................................ 2133 CreateElement
................................................................................................................ 2134 I nsert
................................................................................................................ 2135 Detach
................................................................................................................ 2136 Delete
................................................................................................................ 2137 Clear
................................................................................................................ 2138 Find
................................................................................................................ 2139 Save
................................................................................................................ 2140 Load
................................................................................................................ 2141 Type
............................................................................................................................2142 Classes for Graphic Objects
......................................................................................................................... 2143 CChartObject
................................................................................................................ 2146 ChartI d
................................................................................................................ 2147 Window
................................................................................................................ 2148 Name
................................................................................................................ 2149 NumPoints
................................................................................................................ 2150 Attach
................................................................................................................ 2151 SetPoint
................................................................................................................ 2152 Delete
................................................................................................................ 2153 Detach
................................................................................................................ 2154 ShiftObject
................................................................................................................ 2155 ShiftPoint
................................................................................................................ 2156 Time
................................................................................................................ 2158 Price
................................................................................................................ 2160 Color
................................................................................................................ 2161 Style
................................................................................................................ 2162 Width
................................................................................................................ 2163 Background
................................................................................................................ 2164 Selected
................................................................................................................ 2165 Selectable
................................................................................................................ 2166 Description
................................................................................................................ 2167 Tooltip
................................................................................................................ 2168 Timeframes
................................................................................................................ 2169 Z_Order
................................................................................................................ 2170 CreateTime
................................................................................................................ 2171 LevelsCount
................................................................................................................ 2172 LevelColor
................................................................................................................ 2174 LevelStyle
................................................................................................................ 2176 LevelWidth
................................................................................................................ 2178 LevelValue
................................................................................................................ 2180 LevelDescription
................................................................................................................ 2182 GetI nteger
Content 19
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2184 SetI nteger
................................................................................................................ 2186 GetDouble
................................................................................................................ 2188 SetDouble
................................................................................................................ 2190 GetString
................................................................................................................ 2192 SetString
................................................................................................................ 2194 Save
................................................................................................................ 2195 Load
................................................................................................................ 2196 Type
......................................................................................................................... 2197 Objects Lines
................................................................................................................ 2198 CChartObjectVLine
........................................................................................................... 2199 Create
........................................................................................................... 2200 Type
................................................................................................................ 2201 CChartObjectHLine
........................................................................................................... 2202 Create
........................................................................................................... 2203 Type
................................................................................................................ 2204 CChartObjectTrend
........................................................................................................... 2205 Create
........................................................................................................... 2206 RayLeft
........................................................................................................... 2207 RayRight
........................................................................................................... 2208 Save
........................................................................................................... 2209 Load
........................................................................................................... 2210 Type
................................................................................................................ 2211 CChartObjectTrendByAngle
........................................................................................................... 2212 Create
........................................................................................................... 2213 Angle
........................................................................................................... 2214 Type
................................................................................................................ 2215 CChartObjectCycles
........................................................................................................... 2216 Create
........................................................................................................... 2217 Type
......................................................................................................................... 2218 Objects Channels
................................................................................................................ 2219 CChartObjectChannel
........................................................................................................... 2220 Create
........................................................................................................... 2221 Type
................................................................................................................ 2222 CChartObjectRegression
........................................................................................................... 2223 Create
........................................................................................................... 2224 Type
................................................................................................................ 2225 CChartObjectStdDevChannel
........................................................................................................... 2226 Create
........................................................................................................... 2227 Deviations
........................................................................................................... 2228 Save
........................................................................................................... 2229 Load
........................................................................................................... 2230 Type
................................................................................................................ 2231 CChartObjectPitchfork
........................................................................................................... 2232 Create
........................................................................................................... 2233 Type
......................................................................................................................... 2234 Gann Tools
................................................................................................................ 2235 CChartObjectGannLine
........................................................................................................... 2236 Create
........................................................................................................... 2237 PipsPerBar
........................................................................................................... 2238 Save
........................................................................................................... 2239 Load
........................................................................................................... 2240 Type
................................................................................................................ 2241 CChartObjectGannFan
........................................................................................................... 2242 Create
........................................................................................................... 2243 PipsPerBar
........................................................................................................... 2244 Downtrend
........................................................................................................... 2245 Save
........................................................................................................... 2246 Load
Content 20
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 2247 Type
................................................................................................................ 2248 CChartObjectGannGrid
........................................................................................................... 2249 Create
........................................................................................................... 2250 PipsPerBar
........................................................................................................... 2251 Downtrend
........................................................................................................... 2252 Save
........................................................................................................... 2253 Load
........................................................................................................... 2254 Type
......................................................................................................................... 2255 Fibonacci Tools
................................................................................................................ 2256 CChartObjectFibo
........................................................................................................... 2257 Create
........................................................................................................... 2258 Type
................................................................................................................ 2259 CChartObjectFiboTimes
........................................................................................................... 2260 Create
........................................................................................................... 2261 Type
................................................................................................................ 2262 CChartObjectFiboFan
........................................................................................................... 2263 Create
........................................................................................................... 2264 Type
................................................................................................................ 2265 CChartObjectFiboArc
........................................................................................................... 2266 Create
........................................................................................................... 2267 Scale
........................................................................................................... 2268 Ellipse
........................................................................................................... 2269 Save
........................................................................................................... 2270 Load
........................................................................................................... 2271 Type
................................................................................................................ 2272 CChartObjectFiboChannel
........................................................................................................... 2273 Create
........................................................................................................... 2274 Type
................................................................................................................ 2275 CChartObjectFiboExpansion
........................................................................................................... 2276 Create
........................................................................................................... 2277 Type
......................................................................................................................... 2278 Elliott Tools
................................................................................................................ 2279 CChartObjectElliottWave3
........................................................................................................... 2280 Create
........................................................................................................... 2281 Degree
........................................................................................................... 2282 Lines
........................................................................................................... 2283 Save
........................................................................................................... 2284 Load
........................................................................................................... 2285 Type
................................................................................................................ 2286 CChartObjectElliottWave5
........................................................................................................... 2287 Create
........................................................................................................... 2289 Type
......................................................................................................................... 2290 Objects Shapes
................................................................................................................ 2291 CChartObjectRectangle
........................................................................................................... 2292 Create
........................................................................................................... 2293 Type
................................................................................................................ 2294 CChartObjectTriangle
........................................................................................................... 2295 Create
........................................................................................................... 2296 Type
................................................................................................................ 2297 CChartObjectEllipse
........................................................................................................... 2298 Create
........................................................................................................... 2299 Type
......................................................................................................................... 2300 Objects Arrows
................................................................................................................ 2301 CChartObjectArrow
........................................................................................................... 2302 Create
........................................................................................................... 2304 ArrowCode
........................................................................................................... 2306 Anchor
........................................................................................................... 2308 Save
Content 21
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 2309 Load
........................................................................................................... 2310 Type
................................................................................................................ 2311 Arrows with fixed code
........................................................................................................... 2313 Create
........................................................................................................... 2315 ArrowCode
........................................................................................................... 2316 Type
......................................................................................................................... 2317 Objects Controls
................................................................................................................ 2318 CChartObjectText
........................................................................................................... 2319 Create
........................................................................................................... 2320 Angle
........................................................................................................... 2321 Font
........................................................................................................... 2322 FontSize
........................................................................................................... 2323 Anchor
........................................................................................................... 2324 Save
........................................................................................................... 2325 Load
........................................................................................................... 2326 Type
................................................................................................................ 2327 CChartObjectLabel
........................................................................................................... 2328 Create
........................................................................................................... 2329 X_Distance
........................................................................................................... 2330 Y_Distance
........................................................................................................... 2331 X_Size
........................................................................................................... 2332 Y_Size
........................................................................................................... 2333 Corner
........................................................................................................... 2334 Time
........................................................................................................... 2335 Price
........................................................................................................... 2336 Save
........................................................................................................... 2337 Load
........................................................................................................... 2338 Type
................................................................................................................ 2339 CChartObjectEdit
........................................................................................................... 2340 Create
........................................................................................................... 2341 TextAlign
........................................................................................................... 2342 X_Size
........................................................................................................... 2343 Y_Size
........................................................................................................... 2344 BackColor
........................................................................................................... 2345 BorderColor
........................................................................................................... 2346 Angle
........................................................................................................... 2347 Save
........................................................................................................... 2348 Load
........................................................................................................... 2349 Type
................................................................................................................ 2350 CChartObjectButton
........................................................................................................... 2351 State
........................................................................................................... 2352 Save
........................................................................................................... 2353 Load
........................................................................................................... 2354 Type
................................................................................................................ 2355 CChartObjectSubChart
........................................................................................................... 2357 Create
........................................................................................................... 2358 X_Distance
........................................................................................................... 2359 Y_Distance
........................................................................................................... 2360 Corner
........................................................................................................... 2361 X_Size
........................................................................................................... 2362 Y_Size
........................................................................................................... 2363 Symbol
........................................................................................................... 2364 Period
........................................................................................................... 2365 Scale
........................................................................................................... 2366 DateScale
........................................................................................................... 2367 PriceScale
........................................................................................................... 2368 Time
........................................................................................................... 2369 Price
Content 22
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 2370 Save
........................................................................................................... 2371 Load
........................................................................................................... 2372 Type
................................................................................................................ 2373 CChartObjectBitmap
........................................................................................................... 2374 Create
........................................................................................................... 2375 BmpFile
........................................................................................................... 2376 X_Offset
........................................................................................................... 2377 Y_Offset
........................................................................................................... 2378 Save
........................................................................................................... 2379 Load
........................................................................................................... 2380 Type
................................................................................................................ 2381 CChartObjectBmpLabel
........................................................................................................... 2383 Create
........................................................................................................... 2384 X_Distance
........................................................................................................... 2385 Y_Distance
........................................................................................................... 2386 X_Offset
........................................................................................................... 2387 Y_Offset
........................................................................................................... 2388 Corner
........................................................................................................... 2389 X_Size
........................................................................................................... 2390 Y_Size
........................................................................................................... 2391 BmpFileOn
........................................................................................................... 2392 BmpFileOff
........................................................................................................... 2393 State
........................................................................................................... 2394 Time
........................................................................................................... 2395 Price
........................................................................................................... 2396 Save
........................................................................................................... 2397 Load
........................................................................................................... 2398 Type
................................................................................................................ 2399 CChartObjectRectLabel
........................................................................................................... 2400 Create
........................................................................................................... 2401 X_Size
........................................................................................................... 2402 Y_Size
........................................................................................................... 2403 BackColor
........................................................................................................... 2404 Angle
........................................................................................................... 2405 BorderType
........................................................................................................... 2406 Save
........................................................................................................... 2407 Load
........................................................................................................... 2408 Type
............................................................................................................................2409 Class for creating custom graphics
......................................................................................................................... 2412 ChartObjectName
......................................................................................................................... 2413 Circle
......................................................................................................................... 2414 CircleAA
......................................................................................................................... 2415 Create
......................................................................................................................... 2416 CreateBitmap
......................................................................................................................... 2418 CreateBitmapLabel
......................................................................................................................... 2420 Destroy
......................................................................................................................... 2421 Erase
......................................................................................................................... 2422 Fill
......................................................................................................................... 2423 FillCircle
......................................................................................................................... 2424 FillRectangle
......................................................................................................................... 2425 FillTriangle
......................................................................................................................... 2426 FontAngleGet
......................................................................................................................... 2427 FontAngleSet
......................................................................................................................... 2428 FontFlagsGet
......................................................................................................................... 2429 FontFlagsSet
......................................................................................................................... 2430 FontGet
......................................................................................................................... 2431 FontNameGet
......................................................................................................................... 2432 FontNameSet
Content 23
2000-2014, MetaQuotes Software Corp.
......................................................................................................................... 2433 FontSet
......................................................................................................................... 2434 FontSizeGet
......................................................................................................................... 2435 FontSizeSet
......................................................................................................................... 2436 Height
......................................................................................................................... 2437 Line
......................................................................................................................... 2438 LineAA
......................................................................................................................... 2439 LineHorizontal
......................................................................................................................... 2440 LineStyleSet
......................................................................................................................... 2441 LineVertical
......................................................................................................................... 2442 LoadFromFile
......................................................................................................................... 2443 PixelGet
......................................................................................................................... 2444 PixelSet
......................................................................................................................... 2445 PixelSetAA
......................................................................................................................... 2446 Polygon
......................................................................................................................... 2447 PolygonAA
......................................................................................................................... 2448 Polyline
......................................................................................................................... 2449 PolylineAA
......................................................................................................................... 2450 Rectangle
......................................................................................................................... 2451 Resize
......................................................................................................................... 2452 ResourceName
......................................................................................................................... 2453 TextHeight
......................................................................................................................... 2454 TextOut
......................................................................................................................... 2455 TextSize
......................................................................................................................... 2456 TextWidth
......................................................................................................................... 2457 TransparentLevelSet
......................................................................................................................... 2458 Triangle
......................................................................................................................... 2459 TriangleAA
......................................................................................................................... 2460 Update
......................................................................................................................... 2461 Width
............................................................................................................................2462 Class for working with chart
......................................................................................................................... 2467 ChartI D
......................................................................................................................... 2468 Mode
......................................................................................................................... 2469 Foreground
......................................................................................................................... 2470 Shift
......................................................................................................................... 2471 ShiftSize
......................................................................................................................... 2472 AutoScroll
......................................................................................................................... 2473 Scale
......................................................................................................................... 2474 ScaleFix
......................................................................................................................... 2475 ScaleFix_11
......................................................................................................................... 2476 FixedMax
......................................................................................................................... 2477 FixedMin
......................................................................................................................... 2478 PointsPerBar
......................................................................................................................... 2479 ScalePPB
......................................................................................................................... 2480 ShowOHLC
......................................................................................................................... 2481 ShowLineBid
......................................................................................................................... 2482 ShowLineAsk
......................................................................................................................... 2483 ShowLastLine
......................................................................................................................... 2484 ShowPeriodSep
......................................................................................................................... 2485 ShowGrid
......................................................................................................................... 2486 ShowVolumes
......................................................................................................................... 2487 ShowObjectDescr
......................................................................................................................... 2488 ShowDateScale
......................................................................................................................... 2489 ShowPriceScale
......................................................................................................................... 2490 ColorBackground
......................................................................................................................... 2491 ColorForeground
......................................................................................................................... 2492 ColorGrid
......................................................................................................................... 2493 ColorBarUp
......................................................................................................................... 2494 ColorBarDown
Content 24
2000-2014, MetaQuotes Software Corp.
......................................................................................................................... 2495 ColorCandleBull
......................................................................................................................... 2496 ColorCandleBear
......................................................................................................................... 2497 ColorChartLine
......................................................................................................................... 2498 ColorVolumes
......................................................................................................................... 2499 ColorLineBid
......................................................................................................................... 2500 ColorLineAsk
......................................................................................................................... 2501 ColorLineLast
......................................................................................................................... 2502 ColorStopLevels
......................................................................................................................... 2503 VisibleBars
......................................................................................................................... 2504 WindowsTotal
......................................................................................................................... 2505 WindowI sVisible
......................................................................................................................... 2506 WindowHandle
......................................................................................................................... 2507 FirstVisibleBar
......................................................................................................................... 2508 WidthI nBars
......................................................................................................................... 2509 WidthI nPixels
......................................................................................................................... 2510 HeightI nPixels
......................................................................................................................... 2511 PriceMin
......................................................................................................................... 2512 PriceMax
......................................................................................................................... 2513 Attach
......................................................................................................................... 2514 FirstChart
......................................................................................................................... 2515 NextChart
......................................................................................................................... 2516 Open
......................................................................................................................... 2517 Detach
......................................................................................................................... 2518 Close
......................................................................................................................... 2519 BringToTop
......................................................................................................................... 2520 EventObjectCreate
......................................................................................................................... 2521 EventObjectDelete
......................................................................................................................... 2522 I ndicatorAdd
......................................................................................................................... 2523 I ndicatorDelete
......................................................................................................................... 2524 I ndicatorsTotal
......................................................................................................................... 2525 I ndicatorName
......................................................................................................................... 2526 Navigate
......................................................................................................................... 2527 Symbol
......................................................................................................................... 2528 Period
......................................................................................................................... 2529 Redraw
......................................................................................................................... 2530 GetI nteger
......................................................................................................................... 2531 SetI nteger
......................................................................................................................... 2532 GetDouble
......................................................................................................................... 2533 SetDouble
......................................................................................................................... 2534 GetString
......................................................................................................................... 2535 SetString
......................................................................................................................... 2536 SetSymbolPeriod
......................................................................................................................... 2537 ApplyTemplate
......................................................................................................................... 2538 ScreenShot
......................................................................................................................... 2539 WindowOnDropped
......................................................................................................................... 2540 PriceOnDropped
......................................................................................................................... 2541 TimeOnDropped
......................................................................................................................... 2542 XOnDropped
......................................................................................................................... 2543 YOnDropped
......................................................................................................................... 2544 Save
......................................................................................................................... 2545 Load
......................................................................................................................... 2546 Type
............................................................................................................................2547 Classes for file operations
......................................................................................................................... 2548 CFile
................................................................................................................ 2550 Handle
................................................................................................................ 2551 Filename
................................................................................................................ 2552 Flags
................................................................................................................ 2553 SetUnicode
Content 25
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2554 SetCommon
................................................................................................................ 2555 Open
................................................................................................................ 2556 Close
................................................................................................................ 2557 Delete
................................................................................................................ 2558 I sExist
................................................................................................................ 2559 Copy
................................................................................................................ 2560 Move
................................................................................................................ 2561 Size
................................................................................................................ 2562 Tell
................................................................................................................ 2563 Seek
................................................................................................................ 2564 Flush
................................................................................................................ 2565 I sEnding
................................................................................................................ 2566 I sLineEnding
................................................................................................................ 2567 FolderCreate
................................................................................................................ 2568 FolderDelete
................................................................................................................ 2569 FolderClean
................................................................................................................ 2570 FileFindFirst
................................................................................................................ 2571 FileFindNext
................................................................................................................ 2572 FileFindClose
......................................................................................................................... 2573 CFileBin
................................................................................................................ 2575 Open
................................................................................................................ 2576 WriteChar
................................................................................................................ 2577 WriteShort
................................................................................................................ 2578 WriteI nteger
................................................................................................................ 2579 WriteLong
................................................................................................................ 2580 WriteFloat
................................................................................................................ 2581 WriteDouble
................................................................................................................ 2582 WriteString
................................................................................................................ 2583 WriteCharArray
................................................................................................................ 2584 WriteShortArray
................................................................................................................ 2585 WriteI ntegerArray
................................................................................................................ 2586 WriteLongArray
................................................................................................................ 2587 WriteFloatArray
................................................................................................................ 2588 WriteDoubleArray
................................................................................................................ 2589 WriteObject
................................................................................................................ 2590 ReadChar
................................................................................................................ 2591 ReadShort
................................................................................................................ 2592 ReadI nteger
................................................................................................................ 2593 ReadLong
................................................................................................................ 2594 ReadFloat
................................................................................................................ 2595 ReadDouble
................................................................................................................ 2596 ReadString
................................................................................................................ 2597 ReadCharArray
................................................................................................................ 2598 ReadShortArray
................................................................................................................ 2599 ReadI ntegerArray
................................................................................................................ 2600 ReadLongArray
................................................................................................................ 2601 ReadFloatArray
................................................................................................................ 2602 ReadDoubleArray
................................................................................................................ 2603 ReadObject
......................................................................................................................... 2604 CFileTxt
................................................................................................................ 2605 Open
................................................................................................................ 2606 WriteString
................................................................................................................ 2607 ReadString
............................................................................................................................2608 Class for String operations
......................................................................................................................... 2609 CString
................................................................................................................ 2611 Str
................................................................................................................ 2612 Len
................................................................................................................ 2613 Copy
Content 26
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2614 Fill
................................................................................................................ 2615 Assign
................................................................................................................ 2616 Append
................................................................................................................ 2617 I nsert
................................................................................................................ 2618 Compare
................................................................................................................ 2619 CompareNoCase
................................................................................................................ 2620 Left
................................................................................................................ 2621 Right
................................................................................................................ 2622 Mid
................................................................................................................ 2623 Trim
................................................................................................................ 2624 TrimLeft
................................................................................................................ 2625 TrimRight
................................................................................................................ 2626 Clear
................................................................................................................ 2627 ToUpper
................................................................................................................ 2628 ToLower
................................................................................................................ 2629 Reverse
................................................................................................................ 2630 Find
................................................................................................................ 2631 FindRev
................................................................................................................ 2632 Remove
................................................................................................................ 2633 Replace
............................................................................................................................2634 Classes for working with Indicators
......................................................................................................................... 2635 Base classes
................................................................................................................ 2636 CSpreadBuffer
........................................................................................................... 2637 Size
........................................................................................................... 2638 SetSymbolPeriod
........................................................................................................... 2639 At
........................................................................................................... 2640 Refresh
........................................................................................................... 2641 RefreshCurrent
................................................................................................................ 2642 CTimeBuffer
........................................................................................................... 2643 Size
........................................................................................................... 2644 SetSymbolPeriod
........................................................................................................... 2645 At
........................................................................................................... 2646 Refresh
........................................................................................................... 2647 RefreshCurrent
................................................................................................................ 2648 CTickVolumeBuffer
........................................................................................................... 2649 Size
........................................................................................................... 2650 SetSymbolPeriod
........................................................................................................... 2651 At
........................................................................................................... 2652 Refresh
........................................................................................................... 2653 RefreshCurrent
................................................................................................................ 2654 CRealVolumeBuffer
........................................................................................................... 2655 Size
........................................................................................................... 2656 SetSymbolPeriod
........................................................................................................... 2657 At
........................................................................................................... 2658 Refresh
........................................................................................................... 2659 RefreshCurrent
................................................................................................................ 2660 CDoubleBuffer
........................................................................................................... 2661 Size
........................................................................................................... 2662 SetSymbolPeriod
........................................................................................................... 2663 At
........................................................................................................... 2664 Refresh
........................................................................................................... 2665 RefreshCurrent
................................................................................................................ 2666 COpenBuffer
........................................................................................................... 2667 Refresh
........................................................................................................... 2668 RefreshCurrent
................................................................................................................ 2669 CHighBuffer
........................................................................................................... 2670 Refresh
........................................................................................................... 2671 RefreshCurrent
Content 27
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2672 CLowBuffer
........................................................................................................... 2673 Refresh
........................................................................................................... 2674 RefreshCurrent
................................................................................................................ 2675 CCloseBuffer
........................................................................................................... 2676 Refresh
........................................................................................................... 2677 RefreshCurrent
................................................................................................................ 2678 CI ndicatorBuffer
........................................................................................................... 2679 Offset
........................................................................................................... 2680 Name
........................................................................................................... 2681 At
........................................................................................................... 2682 Refresh
........................................................................................................... 2683 RefreshCurrent
................................................................................................................ 2684 CSeries
........................................................................................................... 2685 Name
........................................................................................................... 2686 BuffersTotal
........................................................................................................... 2687 Timeframe
........................................................................................................... 2688 Symbol
........................................................................................................... 2689 Period
........................................................................................................... 2690 RefreshCurrent
........................................................................................................... 2691 BufferSize
........................................................................................................... 2692 BufferResize
........................................................................................................... 2693 Refresh
........................................................................................................... 2694 PeriodDescription
................................................................................................................ 2695 CPriceSeries
........................................................................................................... 2696 BufferResize
........................................................................................................... 2697 GetData
........................................................................................................... 2698 Refresh
........................................................................................................... 2699 MinI ndex
........................................................................................................... 2700 MinValue
........................................................................................................... 2701 MaxI ndex
........................................................................................................... 2702 MaxValue
................................................................................................................ 2703 CI ndicator
........................................................................................................... 2706 Handle
........................................................................................................... 2707 Status
........................................................................................................... 2708 FullRelease
........................................................................................................... 2709 Create
........................................................................................................... 2710 BufferResize
........................................................................................................... 2711 BarsCalculated
........................................................................................................... 2712 GetData
........................................................................................................... 2715 Refresh
........................................................................................................... 2716 Minimum
........................................................................................................... 2717 MinValue
........................................................................................................... 2718 Maximum
........................................................................................................... 2719 MaxValue
........................................................................................................... 2720 MethodDescription
........................................................................................................... 2721 PriceDescription
........................................................................................................... 2722 VolumeDescription
........................................................................................................... 2723 AddToChart
........................................................................................................... 2724 DeleteFromChart
................................................................................................................ 2725 CI ndicators
........................................................................................................... 2726 Create
........................................................................................................... 2727 Refresh
......................................................................................................................... 2728 Timeseries classes
................................................................................................................ 2729 CiSpread
........................................................................................................... 2730 Create
........................................................................................................... 2731 BufferResize
........................................................................................................... 2732 GetData
........................................................................................................... 2734 Refresh
Content 28
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2735 CiTime
........................................................................................................... 2736 Create
........................................................................................................... 2737 BufferResize
........................................................................................................... 2738 GetData
........................................................................................................... 2740 Refresh
................................................................................................................ 2741 CiTickVolume
........................................................................................................... 2742 Create
........................................................................................................... 2743 BufferResize
........................................................................................................... 2744 GetData
........................................................................................................... 2746 Refresh
................................................................................................................ 2747 CiRealVolume
........................................................................................................... 2748 Create
........................................................................................................... 2749 BufferResize
........................................................................................................... 2750 GetData
........................................................................................................... 2752 Refresh
................................................................................................................ 2753 CiOpen
........................................................................................................... 2754 Create
........................................................................................................... 2755 GetData
................................................................................................................ 2757 CiHigh
........................................................................................................... 2758 Create
........................................................................................................... 2759 GetData
................................................................................................................ 2761 CiLow
........................................................................................................... 2762 Create
........................................................................................................... 2763 GetData
................................................................................................................ 2765 CiClose
........................................................................................................... 2766 Create
........................................................................................................... 2767 GetData
......................................................................................................................... 2769 Trend I ndicators
................................................................................................................ 2770 CiADX
........................................................................................................... 2771 MaPeriod
........................................................................................................... 2772 Create
........................................................................................................... 2773 Main
........................................................................................................... 2774 Plus
........................................................................................................... 2775 Minus
........................................................................................................... 2776 Type
................................................................................................................ 2777 CiADXWilder
........................................................................................................... 2778 MaPeriod
........................................................................................................... 2779 Create
........................................................................................................... 2780 Main
........................................................................................................... 2781 Plus
........................................................................................................... 2782 Minus
........................................................................................................... 2783 Type
................................................................................................................ 2784 CiBands
........................................................................................................... 2785 MaPeriod
........................................................................................................... 2786 MaShift
........................................................................................................... 2787 Deviation
........................................................................................................... 2788 Applied
........................................................................................................... 2789 Create
........................................................................................................... 2790 Base
........................................................................................................... 2791 Upper
........................................................................................................... 2792 Lower
........................................................................................................... 2793 Type
................................................................................................................ 2794 CiEnvelopes
........................................................................................................... 2795 MaPeriod
........................................................................................................... 2796 MaShift
........................................................................................................... 2797 MaMethod
........................................................................................................... 2798 Deviation
........................................................................................................... 2799 Applied
Content 29
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 2800 Create
........................................................................................................... 2801 Upper
........................................................................................................... 2802 Lower
........................................................................................................... 2803 Type
................................................................................................................ 2804 CiI chimoku
........................................................................................................... 2805 TenkanSenPeriod
........................................................................................................... 2806 KijunSenPeriod
........................................................................................................... 2807 SenkouSpanBPeriod
........................................................................................................... 2808 Create
........................................................................................................... 2809 TenkanSen
........................................................................................................... 2810 KijunSen
........................................................................................................... 2811 SenkouSpanA
........................................................................................................... 2812 SenkouSpanB
........................................................................................................... 2813 ChinkouSpan
........................................................................................................... 2814 Type
................................................................................................................ 2815 CiMA
........................................................................................................... 2816 MaPeriod
........................................................................................................... 2817 MaShift
........................................................................................................... 2818 MaMethod
........................................................................................................... 2819 Applied
........................................................................................................... 2820 Create
........................................................................................................... 2821 Main
........................................................................................................... 2822 Type
................................................................................................................ 2823 CiSAR
........................................................................................................... 2824 SarStep
........................................................................................................... 2825 Maximum
........................................................................................................... 2826 Create
........................................................................................................... 2827 Main
........................................................................................................... 2828 Type
................................................................................................................ 2829 CiStdDev
........................................................................................................... 2830 MaPeriod
........................................................................................................... 2831 MaShift
........................................................................................................... 2832 MaMethod
........................................................................................................... 2833 Applied
........................................................................................................... 2834 Create
........................................................................................................... 2835 Main
........................................................................................................... 2836 Type
................................................................................................................ 2837 CiDEMA
........................................................................................................... 2838 MaPeriod
........................................................................................................... 2839 I ndShift
........................................................................................................... 2840 Applied
........................................................................................................... 2841 Create
........................................................................................................... 2842 Main
........................................................................................................... 2843 Type
................................................................................................................ 2844 CiTEMA
........................................................................................................... 2845 MaPeriod
........................................................................................................... 2846 I ndShift
........................................................................................................... 2847 Applied
........................................................................................................... 2848 Create
........................................................................................................... 2849 Main
........................................................................................................... 2850 Type
................................................................................................................ 2851 CiFrAMA
........................................................................................................... 2852 MaPeriod
........................................................................................................... 2853 I ndShift
........................................................................................................... 2854 Applied
........................................................................................................... 2855 Create
........................................................................................................... 2856 Main
........................................................................................................... 2857 Type
Content 30
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2858 CiAMA
........................................................................................................... 2859 MaPeriod
........................................................................................................... 2860 FastEmaPeriod
........................................................................................................... 2861 SlowEmaPeriod
........................................................................................................... 2862 I ndShift
........................................................................................................... 2863 Applied
........................................................................................................... 2864 Create
........................................................................................................... 2865 Main
........................................................................................................... 2866 Type
................................................................................................................ 2867 CiVI DyA
........................................................................................................... 2868 CmoPeriod
........................................................................................................... 2869 EmaPeriod
........................................................................................................... 2870 I ndShift
........................................................................................................... 2871 Applied
........................................................................................................... 2872 Create
........................................................................................................... 2873 Main
........................................................................................................... 2874 Type
......................................................................................................................... 2875 Oscillators
................................................................................................................ 2876 CiATR
........................................................................................................... 2877 MaPeriod
........................................................................................................... 2878 Create
........................................................................................................... 2879 Main
........................................................................................................... 2880 Type
................................................................................................................ 2881 CiBearsPower
........................................................................................................... 2882 MaPeriod
........................................................................................................... 2883 Create
........................................................................................................... 2884 Main
........................................................................................................... 2885 Type
................................................................................................................ 2886 CiBullsPower
........................................................................................................... 2887 MaPeriod
........................................................................................................... 2888 Create
........................................................................................................... 2889 Main
........................................................................................................... 2890 Type
................................................................................................................ 2891 CiCCI
........................................................................................................... 2892 MaPeriod
........................................................................................................... 2893 Applied
........................................................................................................... 2894 Create
........................................................................................................... 2895 Main
........................................................................................................... 2896 Type
................................................................................................................ 2897 CiChaikin
........................................................................................................... 2898 FastMaPeriod
........................................................................................................... 2899 SlowMaPeriod
........................................................................................................... 2900 MaMethod
........................................................................................................... 2901 Applied
........................................................................................................... 2902 Create
........................................................................................................... 2903 Main
........................................................................................................... 2904 Type
................................................................................................................ 2905 CiDeMarker
........................................................................................................... 2906 MaPeriod
........................................................................................................... 2907 Create
........................................................................................................... 2908 Main
........................................................................................................... 2909 Type
................................................................................................................ 2910 CiForce
........................................................................................................... 2911 MaPeriod
........................................................................................................... 2912 MaMethod
........................................................................................................... 2913 Applied
........................................................................................................... 2914 Create
........................................................................................................... 2915 Main
Content 31
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 2916 Type
................................................................................................................ 2917 CiMACD
........................................................................................................... 2918 FastEmaPeriod
........................................................................................................... 2919 SlowEmaPeriod
........................................................................................................... 2920 SignalPeriod
........................................................................................................... 2921 Applied
........................................................................................................... 2922 Create
........................................................................................................... 2923 Main
........................................................................................................... 2924 Signal
........................................................................................................... 2925 Type
................................................................................................................ 2926 CiMomentum
........................................................................................................... 2927 MaPeriod
........................................................................................................... 2928 Applied
........................................................................................................... 2929 Create
........................................................................................................... 2930 Main
........................................................................................................... 2931 Type
................................................................................................................ 2932 CiOsMA
........................................................................................................... 2933 FastEmaPeriod
........................................................................................................... 2934 SlowEmaPeriod
........................................................................................................... 2935 SignalPeriod
........................................................................................................... 2936 Applied
........................................................................................................... 2937 Create
........................................................................................................... 2938 Main
........................................................................................................... 2939 Type
................................................................................................................ 2940 CiRSI
........................................................................................................... 2941 MaPeriod
........................................................................................................... 2942 Applied
........................................................................................................... 2943 Create
........................................................................................................... 2944 Main
........................................................................................................... 2945 Type
................................................................................................................ 2946 CiRVI
........................................................................................................... 2947 MaPeriod
........................................................................................................... 2948 Create
........................................................................................................... 2949 Main
........................................................................................................... 2950 Signal
........................................................................................................... 2951 Type
................................................................................................................ 2952 CiStochastic
........................................................................................................... 2953 Kperiod
........................................................................................................... 2954 Dperiod
........................................................................................................... 2955 Slowing
........................................................................................................... 2956 MaMethod
........................................................................................................... 2957 PriceField
........................................................................................................... 2958 Create
........................................................................................................... 2959 Main
........................................................................................................... 2960 Signal
........................................................................................................... 2961 Type
................................................................................................................ 2962 CiTriX
........................................................................................................... 2963 MaPeriod
........................................................................................................... 2964 Applied
........................................................................................................... 2965 Create
........................................................................................................... 2966 Main
........................................................................................................... 2967 Type
................................................................................................................ 2968 CiWPR
........................................................................................................... 2969 CalcPeriod
........................................................................................................... 2970 Create
........................................................................................................... 2971 Main
........................................................................................................... 2972 Type
......................................................................................................................... 2973 Volume I ndicators
Content 32
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 2974 CiAD
........................................................................................................... 2975 Applied
........................................................................................................... 2976 Create
........................................................................................................... 2977 Main
........................................................................................................... 2978 Type
................................................................................................................ 2979 CiMFI
........................................................................................................... 2980 MaPeriod
........................................................................................................... 2981 Applied
........................................................................................................... 2982 Create
........................................................................................................... 2983 Main
........................................................................................................... 2984 Type
................................................................................................................ 2985 CiOBV
........................................................................................................... 2986 Applied
........................................................................................................... 2987 Create
........................................................................................................... 2988 Main
........................................................................................................... 2989 Type
................................................................................................................ 2990 CiVolumes
........................................................................................................... 2991 Applied
........................................................................................................... 2992 Create
........................................................................................................... 2993 Main
........................................................................................................... 2994 Type
......................................................................................................................... 2995 Bill Williams I ndicators
................................................................................................................ 2996 CiAC
........................................................................................................... 2997 Create
........................................................................................................... 2998 Main
........................................................................................................... 2999 Type
................................................................................................................ 3000 CiAlligator
........................................................................................................... 3001 JawPeriod
........................................................................................................... 3002 JawShift
........................................................................................................... 3003 TeethPeriod
........................................................................................................... 3004 TeethShift
........................................................................................................... 3005 LipsPeriod
........................................................................................................... 3006 LipsShift
........................................................................................................... 3007 MaMethod
........................................................................................................... 3008 Applied
........................................................................................................... 3009 Create
........................................................................................................... 3010 Jaw
........................................................................................................... 3011 Teeth
........................................................................................................... 3012 Lips
........................................................................................................... 3013 Type
................................................................................................................ 3014 CiAO
........................................................................................................... 3015 Create
........................................................................................................... 3016 Main
........................................................................................................... 3017 Type
................................................................................................................ 3018 CiFractals
........................................................................................................... 3019 Create
........................................................................................................... 3020 Upper
........................................................................................................... 3021 Lower
........................................................................................................... 3022 Type
................................................................................................................ 3023 CiGator
........................................................................................................... 3024 JawPeriod
........................................................................................................... 3025 JawShift
........................................................................................................... 3026 TeethPeriod
........................................................................................................... 3027 TeethShift
........................................................................................................... 3028 LipsPeriod
........................................................................................................... 3029 LipsShift
........................................................................................................... 3030 MaMethod
........................................................................................................... 3031 Applied
Content 33
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 3032 Create
........................................................................................................... 3033 Upper
........................................................................................................... 3034 Lower
........................................................................................................... 3035 Type
................................................................................................................ 3036 CiBWMFI
........................................................................................................... 3037 Applied
........................................................................................................... 3038 Create
........................................................................................................... 3039 Main
........................................................................................................... 3040 Type
......................................................................................................................... 3041 Custom indicators
................................................................................................................ 3042 NumBuffers
................................................................................................................ 3043 NumParams
................................................................................................................ 3044 ParamType
................................................................................................................ 3045 ParamLong
................................................................................................................ 3046 ParamDouble
................................................................................................................ 3047 ParamString
................................................................................................................ 3048 Type
............................................................................................................................3049 Trade Classes
......................................................................................................................... 3050 CAccountI nfo
................................................................................................................ 3052 Login
................................................................................................................ 3053 TradeMode
................................................................................................................ 3054 TradeModeDescription
................................................................................................................ 3055 Leverage
................................................................................................................ 3056 MarginMode
................................................................................................................ 3057 MarginModeDescription
................................................................................................................ 3058 TradeAllowed
................................................................................................................ 3059 TradeExpert
................................................................................................................ 3060 LimitOrders
................................................................................................................ 3061 Balance
................................................................................................................ 3062 Credit
................................................................................................................ 3063 Profit
................................................................................................................ 3064 Equity
................................................................................................................ 3065 Margin
................................................................................................................ 3066 FreeMargin
................................................................................................................ 3067 MarginLevel
................................................................................................................ 3068 MarginCall
................................................................................................................ 3069 MarginStopOut
................................................................................................................ 3070 Name
................................................................................................................ 3071 Server
................................................................................................................ 3072 Currency
................................................................................................................ 3073 Company
................................................................................................................ 3074 I nfoI nteger
................................................................................................................ 3075 I nfoDouble
................................................................................................................ 3076 I nfoString
................................................................................................................ 3077 OrderProfitCheck
................................................................................................................ 3078 MarginCheck
................................................................................................................ 3079 FreeMarginCheck
................................................................................................................ 3080 MaxLotCheck
......................................................................................................................... 3081 CSymbolI nfo
................................................................................................................ 3085 Refresh
................................................................................................................ 3086 RefreshRates
................................................................................................................ 3087 Name
................................................................................................................ 3088 Select
................................................................................................................ 3089 I sSynchronized
................................................................................................................ 3090 Volume
................................................................................................................ 3091 VolumeHigh
................................................................................................................ 3092 VolumeLow
................................................................................................................ 3093 Time
Content 34
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3094 Spread
................................................................................................................ 3095 SpreadFloat
................................................................................................................ 3096 TicksBookDepth
................................................................................................................ 3097 StopsLevel
................................................................................................................ 3098 FreezeLevel
................................................................................................................ 3099 Bid
................................................................................................................ 3100 BidHigh
................................................................................................................ 3101 BidLow
................................................................................................................ 3102 Ask
................................................................................................................ 3103 AskHigh
................................................................................................................ 3104 AskLow
................................................................................................................ 3105 Last
................................................................................................................ 3106 LastHigh
................................................................................................................ 3107 LastLow
................................................................................................................ 3108 TradeCalcMode
................................................................................................................ 3109 TradeCalcModeDescription
................................................................................................................ 3110 TradeMode
................................................................................................................ 3111 TradeModeDescription
................................................................................................................ 3112 TradeExecution
................................................................................................................ 3113 TradeExecutionDescription
................................................................................................................ 3114 SwapMode
................................................................................................................ 3115 SwapModeDescription
................................................................................................................ 3116 SwapRollover3days
................................................................................................................ 3117 SwapRollover3daysDescription
................................................................................................................ 3118 MarginI nitial
................................................................................................................ 3119 MarginMaintenance
................................................................................................................ 3120 MarginLong
................................................................................................................ 3121 MarginShort
................................................................................................................ 3122 MarginLimit
................................................................................................................ 3123 MarginStop
................................................................................................................ 3124 MarginStopLimit
................................................................................................................ 3125 TradeTimeFlags
................................................................................................................ 3126 TradeFillFlags
................................................................................................................ 3127 Digits
................................................................................................................ 3128 Point
................................................................................................................ 3129 TickValue
................................................................................................................ 3130 TickValueProfit
................................................................................................................ 3131 TicksBookDepth
................................................................................................................ 3132 TickSize
................................................................................................................ 3133 ContractSize
................................................................................................................ 3134 LotsMin
................................................................................................................ 3135 LotsMax
................................................................................................................ 3136 LotsStep
................................................................................................................ 3137 LotsLimit
................................................................................................................ 3138 SwapLong
................................................................................................................ 3139 SwapShort
................................................................................................................ 3140 CurrencyBase
................................................................................................................ 3141 CurrencyProfit
................................................................................................................ 3142 CurrencyMargin
................................................................................................................ 3143 Bank
................................................................................................................ 3144 Description
................................................................................................................ 3145 Path
................................................................................................................ 3146 SessionDeals
................................................................................................................ 3147 SessionBuyOrders
................................................................................................................ 3148 SessionSellOrders
................................................................................................................ 3149 SessionTurnover
................................................................................................................ 3150 SessionI nterest
................................................................................................................ 3151 SessionBuyOrdersVolume
Content 35
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3152 SessionSellOrdersVolume
................................................................................................................ 3153 SessionOpen
................................................................................................................ 3154 SessionClose
................................................................................................................ 3155 SessionAW
................................................................................................................ 3156 SessionPriceSettlement
................................................................................................................ 3157 SessionPriceLimitMin
................................................................................................................ 3158 SessionPriceLimitMax
................................................................................................................ 3159 I nfoI nteger
................................................................................................................ 3160 I nfoDouble
................................................................................................................ 3161 I nfoString
................................................................................................................ 3162 NormalizePrice
......................................................................................................................... 3163 COrderI nfo
................................................................................................................ 3165 Ticket
................................................................................................................ 3166 TimeSetup
................................................................................................................ 3167 TimeSetupMsc
................................................................................................................ 3168 OrderType
................................................................................................................ 3169 TypeDescription
................................................................................................................ 3170 State
................................................................................................................ 3171 StateDescription
................................................................................................................ 3172 TimeExpiration
................................................................................................................ 3173 TimeDone
................................................................................................................ 3174 TimeDoneMsc
................................................................................................................ 3175 TypeFilling
................................................................................................................ 3176 TypeFillingDescription
................................................................................................................ 3177 TypeTime
................................................................................................................ 3178 TypeTimeDescription
................................................................................................................ 3179 Magic
................................................................................................................ 3180 PositionI d
................................................................................................................ 3181 VolumeI nitial
................................................................................................................ 3182 VolumeCurrent
................................................................................................................ 3183 PriceOpen
................................................................................................................ 3184 StopLoss
................................................................................................................ 3185 TakeProfit
................................................................................................................ 3186 PriceCurrent
................................................................................................................ 3187 PriceStopLimit
................................................................................................................ 3188 Symbol
................................................................................................................ 3189 Comment
................................................................................................................ 3190 I nfoI nteger
................................................................................................................ 3191 I nfoDouble
................................................................................................................ 3192 I nfoString
................................................................................................................ 3193 StoreState
................................................................................................................ 3194 CheckState
................................................................................................................ 3195 Select
................................................................................................................ 3196 SelectByI ndex
......................................................................................................................... 3197 CHistoryOrderI nfo
................................................................................................................ 3199 TimeSetup
................................................................................................................ 3200 TimeSetupMsc
................................................................................................................ 3201 OrderType
................................................................................................................ 3202 TypeDescription
................................................................................................................ 3203 State
................................................................................................................ 3204 StateDescription
................................................................................................................ 3205 TimeExpiration
................................................................................................................ 3206 TimeDone
................................................................................................................ 3207 TimeDoneMsc
................................................................................................................ 3208 TypeFilling
................................................................................................................ 3209 TypeFillingDescription
................................................................................................................ 3210 TypeTime
................................................................................................................ 3211 TypeTimeDescription
Content 36
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3212 Magic
................................................................................................................ 3213 PositionI d
................................................................................................................ 3214 VolumeI nitial
................................................................................................................ 3215 VolumeCurrent
................................................................................................................ 3216 PriceOpen
................................................................................................................ 3217 StopLoss
................................................................................................................ 3218 TakeProfit
................................................................................................................ 3219 PriceCurrent
................................................................................................................ 3220 PriceStopLimit
................................................................................................................ 3221 Symbol
................................................................................................................ 3222 Comment
................................................................................................................ 3223 I nfoI nteger
................................................................................................................ 3224 I nfoDouble
................................................................................................................ 3225 I nfoString
................................................................................................................ 3226 Ticket
................................................................................................................ 3227 SelectByI ndex
......................................................................................................................... 3228 CPositionI nfo
................................................................................................................ 3230 Time
................................................................................................................ 3231 TimeMsc
................................................................................................................ 3232 TimeUpdate
................................................................................................................ 3233 TimeUpdateMsc
................................................................................................................ 3234 PositionType
................................................................................................................ 3235 TypeDescription
................................................................................................................ 3236 Magic
................................................................................................................ 3237 I dentifier
................................................................................................................ 3238 Volume
................................................................................................................ 3239 PriceOpen
................................................................................................................ 3240 StopLoss
................................................................................................................ 3241 TakeProfit
................................................................................................................ 3242 PriceCurrent
................................................................................................................ 3243 Commission
................................................................................................................ 3244 Swap
................................................................................................................ 3245 Profit
................................................................................................................ 3246 Symbol
................................................................................................................ 3247 Comment
................................................................................................................ 3248 I nfoI nteger
................................................................................................................ 3249 I nfoDouble
................................................................................................................ 3250 I nfoString
................................................................................................................ 3251 Select
................................................................................................................ 3252 SelectByI ndex
................................................................................................................ 3253 StoreState
................................................................................................................ 3254 CheckState
......................................................................................................................... 3255 CDealI nfo
................................................................................................................ 3257 Order
................................................................................................................ 3258 Time
................................................................................................................ 3259 TimeMsc
................................................................................................................ 3260 DealType
................................................................................................................ 3261 TypeDescription
................................................................................................................ 3262 Entry
................................................................................................................ 3263 EntryDescription
................................................................................................................ 3264 Magic
................................................................................................................ 3265 PositionI d
................................................................................................................ 3266 Volume
................................................................................................................ 3267 Price
................................................................................................................ 3268 Commision
................................................................................................................ 3269 Swap
................................................................................................................ 3270 Profit
................................................................................................................ 3271 Symbol
Content 37
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3272 Comment
................................................................................................................ 3273 I nfoI nteger
................................................................................................................ 3274 I nfoDouble
................................................................................................................ 3275 I nfoString
................................................................................................................ 3276 Ticket
................................................................................................................ 3277 SelectByI ndex
......................................................................................................................... 3278 CTrade
................................................................................................................ 3282 LogLevel
................................................................................................................ 3283 SetExpertMagicNumber
................................................................................................................ 3284 SetDeviationI nPoints
................................................................................................................ 3285 SetTypeFilling
................................................................................................................ 3286 SetAsyncMode
................................................................................................................ 3287 OrderOpen
................................................................................................................ 3289 OrderModify
................................................................................................................ 3290 OrderDelete
................................................................................................................ 3291 PositionOpen
................................................................................................................ 3292 PositionModify
................................................................................................................ 3293 PositionClose
................................................................................................................ 3294 Buy
................................................................................................................ 3295 Sell
................................................................................................................ 3296 BuyLimit
................................................................................................................ 3297 BuyStop
................................................................................................................ 3298 SellLimit
................................................................................................................ 3299 SellStop
................................................................................................................ 3300 Request
................................................................................................................ 3301 RequestAction
................................................................................................................ 3302 RequestActionDescription
................................................................................................................ 3303 RequestMagic
................................................................................................................ 3304 RequestOrder
................................................................................................................ 3305 RequestSymbol
................................................................................................................ 3306 RequestVolume
................................................................................................................ 3307 RequestPrice
................................................................................................................ 3308 RequestStopLimit
................................................................................................................ 3309 RequestSL
................................................................................................................ 3310 RequestTP
................................................................................................................ 3311 RequestDeviation
................................................................................................................ 3312 RequestType
................................................................................................................ 3313 RequestTypeDescription
................................................................................................................ 3314 RequestTypeFilling
................................................................................................................ 3315 RequestTypeFillingDescription
................................................................................................................ 3316 RequestTypeTime
................................................................................................................ 3317 RequestTypeTimeDescription
................................................................................................................ 3318 RequestExpiration
................................................................................................................ 3319 RequestComment
................................................................................................................ 3320 Result
................................................................................................................ 3321 ResultRetcode
................................................................................................................ 3322 ResultRetcodeDescription
................................................................................................................ 3323 ResultDeal
................................................................................................................ 3324 ResultOrder
................................................................................................................ 3325 ResultVolume
................................................................................................................ 3326 ResultPrice
................................................................................................................ 3327 ResultBid
................................................................................................................ 3328 ResultAsk
................................................................................................................ 3329 ResultComment
................................................................................................................ 3330 CheckResult
................................................................................................................ 3331 CheckResultRetcode
................................................................................................................ 3332 CheckResultRetcodeDescription
................................................................................................................ 3333 CheckResultBalance
Content 38
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3334 CheckResultEquity
................................................................................................................ 3335 CheckResultProfit
................................................................................................................ 3336 CheckResultMargin
................................................................................................................ 3337 CheckResultMarginFree
................................................................................................................ 3338 CheckResultMarginLevel
................................................................................................................ 3339 CheckResultComment
................................................................................................................ 3340 PrintRequest
................................................................................................................ 3341 PrintResult
................................................................................................................ 3342 FormatRequest
................................................................................................................ 3343 FormatRequestResult
......................................................................................................................... 3344 CTerminalI nfo
................................................................................................................ 3346 Build
................................................................................................................ 3347 I sConnected
................................................................................................................ 3348 I sDLLsAllowed
................................................................................................................ 3349 I sTradeAllowed
................................................................................................................ 3350 I sEmailEnabled
................................................................................................................ 3351 I sFtpEnabled
................................................................................................................ 3352 MaxBars
................................................................................................................ 3353 CodePage
................................................................................................................ 3354 CPUCores
................................................................................................................ 3355 MemoryPhysical
................................................................................................................ 3356 MemoryTotal
................................................................................................................ 3357 MemoryAvailable
................................................................................................................ 3358 MemoryUsed
................................................................................................................ 3359 I sX64
................................................................................................................ 3360 OpenCLSupport
................................................................................................................ 3361 DiskSpace
................................................................................................................ 3362 Language
................................................................................................................ 3363 Name
................................................................................................................ 3364 Company
................................................................................................................ 3365 Path
................................................................................................................ 3366 DataPath
................................................................................................................ 3367 CommonDataPath
................................................................................................................ 3368 I nfoI nteger
................................................................................................................ 3369 I nfoString
............................................................................................................................3370 Trading Strategy Classes
......................................................................................................................... 3373 Base classes for Expert Advisors
................................................................................................................ 3374 CExpertBase
........................................................................................................... 3376 I nitPhase
........................................................................................................... 3377 TrendType
........................................................................................................... 3378 UsedSeries
........................................................................................................... 3379 EveryTick
........................................................................................................... 3380 Open
........................................................................................................... 3381 High
........................................................................................................... 3382 Low
........................................................................................................... 3383 Close
........................................................................................................... 3384 Spread
........................................................................................................... 3385 Time
........................................................................................................... 3386 TickVolume
........................................................................................................... 3387 RealVolume
........................................................................................................... 3388 I nit
........................................................................................................... 3389 Symbol
........................................................................................................... 3390 Period
........................................................................................................... 3391 Magic
........................................................................................................... 3392 ValidationSettings
........................................................................................................... 3393 SetPriceSeries
........................................................................................................... 3394 SetOtherSeries
........................................................................................................... 3395 I nitI ndicators
Content 39
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 3396 I nitOpen
........................................................................................................... 3397 I nitHigh
........................................................................................................... 3398 I nitLow
........................................................................................................... 3399 I nitClose
........................................................................................................... 3400 I nitSpread
........................................................................................................... 3401 I nitTime
........................................................................................................... 3402 I nitTickVolume
........................................................................................................... 3403 I nitRealVolume
........................................................................................................... 3404 PriceLevelUnit
........................................................................................................... 3405 StartI ndex
........................................................................................................... 3406 CompareMagic
................................................................................................................ 3407 CExpert
........................................................................................................... 3411 I nit
........................................................................................................... 3412 Magic
........................................................................................................... 3413 I nitSignal
........................................................................................................... 3414 I nitTrailing
........................................................................................................... 3415 I nitMoney
........................................................................................................... 3416 I nitTrade
........................................................................................................... 3417 Deinit
........................................................................................................... 3418 OnTickProcess
........................................................................................................... 3419 OnTradeProcess
........................................................................................................... 3420 OnTimerProcess
........................................................................................................... 3421 OnChartEventProcess
........................................................................................................... 3422 OnBookEventProcess
........................................................................................................... 3423 MaxOrders
........................................................................................................... 3424 Signal
........................................................................................................... 3425 ValidationSettings
........................................................................................................... 3426 I nitI ndicators
........................................................................................................... 3427 OnTick
........................................................................................................... 3428 OnTrade
........................................................................................................... 3429 OnTimer
........................................................................................................... 3430 OnChartEvent
........................................................................................................... 3431 OnBookEvent
........................................................................................................... 3432 I nitParameters
........................................................................................................... 3433 DeinitTrade
........................................................................................................... 3434 DeinitSignal
........................................................................................................... 3435 DeinitTrailing
........................................................................................................... 3436 DeinitMoney
........................................................................................................... 3437 DeinitI ndicators
........................................................................................................... 3438 Refresh
........................................................................................................... 3439 Processing
........................................................................................................... 3441 CheckOpen
........................................................................................................... 3442 CheckOpenLong
........................................................................................................... 3443 CheckOpenShort
........................................................................................................... 3444 OpenLong
........................................................................................................... 3445 OpenShort
........................................................................................................... 3446 CheckReverse
........................................................................................................... 3447 CheckReverseLong
........................................................................................................... 3448 CheckReverseShort
........................................................................................................... 3449 ReverseLong
........................................................................................................... 3450 ReverseShort
........................................................................................................... 3451 CheckClose
........................................................................................................... 3452 CheckCloseLong
........................................................................................................... 3453 CheckCloseShort
........................................................................................................... 3454 CloseAll
........................................................................................................... 3455 Close
........................................................................................................... 3456 CloseLong
........................................................................................................... 3457 CloseShort
Content 40
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 3458 CheckTrailingStop
........................................................................................................... 3459 CheckTrailingStopLong
........................................................................................................... 3460 CheckTrailingStopShort
........................................................................................................... 3461 TrailingStopLong
........................................................................................................... 3462 TrailingStopShort
........................................................................................................... 3463 CheckTrailingOrderLong
........................................................................................................... 3464 CheckTrailingOrderShort
........................................................................................................... 3465 TrailingOrderLong
........................................................................................................... 3466 TrailingOrderShort
........................................................................................................... 3467 CheckDeleteOrderLong
........................................................................................................... 3468 CheckDeleteOrderShort
........................................................................................................... 3469 DeleteOrders
........................................................................................................... 3470 DeleteOrder
........................................................................................................... 3471 DeleteOrderLong
........................................................................................................... 3472 DeleteOrderShort
........................................................................................................... 3473 LotOpenLong
........................................................................................................... 3474 LotOpenShort
........................................................................................................... 3475 LotReverse
........................................................................................................... 3476 PrepareHistoryDate
........................................................................................................... 3477 HistoryPoint
........................................................................................................... 3478 CheckTradeState
........................................................................................................... 3479 WaitEvent
........................................................................................................... 3480 NoWaitEvent
........................................................................................................... 3481 TradeEventPositionStopTake
........................................................................................................... 3482 TradeEventOrderTriggered
........................................................................................................... 3483 TradeEventPositionOpened
........................................................................................................... 3484 TradeEventPositionVolumeChanged
........................................................................................................... 3485 TradeEventPositionModified
........................................................................................................... 3486 TradeEventPositionClosed
........................................................................................................... 3487 TradeEventOrderPlaced
........................................................................................................... 3488 TradeEventOrderModified
........................................................................................................... 3489 TradeEventOrderDeleted
........................................................................................................... 3490 TradeEventNotI dentified
........................................................................................................... 3491 TimeframeAdd
........................................................................................................... 3492 TimeframesFlags
................................................................................................................ 3493 CExpertSignal
........................................................................................................... 3495 BasePrice
........................................................................................................... 3496 UsedSeries
........................................................................................................... 3497 Weight
........................................................................................................... 3498 PatternsUsage
........................................................................................................... 3499 General
........................................................................................................... 3500 I gnore
........................................................................................................... 3501 I nvert
........................................................................................................... 3502 ThresholdOpen
........................................................................................................... 3503 ThresholdClose
........................................................................................................... 3504 PriceLevel
........................................................................................................... 3505 StopLevel
........................................................................................................... 3506 TakeLevel
........................................................................................................... 3507 Expiration
........................................................................................................... 3508 Magic
........................................................................................................... 3509 ValidationSettings
........................................................................................................... 3510 I nitI ndicators
........................................................................................................... 3511 AddFilter
........................................................................................................... 3512 CheckOpenLong
........................................................................................................... 3513 CheckOpenShort
........................................................................................................... 3514 OpenLongParams
........................................................................................................... 3515 OpenShortParams
........................................................................................................... 3516 CheckCloseLong
Content 41
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 3517 CheckCloseShort
........................................................................................................... 3518 CloseLongParams
........................................................................................................... 3519 CloseShortParams
........................................................................................................... 3520 CheckReverseLong
........................................................................................................... 3521 CheckReverseShort
........................................................................................................... 3522 CheckTrailingOrderLong
........................................................................................................... 3523 CheckTrailingOrderShort
........................................................................................................... 3524 LongCondition
........................................................................................................... 3525 ShortCondition
........................................................................................................... 3526 Direction
................................................................................................................ 3527 CExpertTrailing
........................................................................................................... 3528 CheckTrailingStopLong
........................................................................................................... 3529 CheckTrailingStopShort
................................................................................................................ 3530 CExpertMoney
........................................................................................................... 3531 Percent
........................................................................................................... 3532 ValidationSettings
........................................................................................................... 3533 CheckOpenLong
........................................................................................................... 3534 CheckOpenShort
........................................................................................................... 3535 CheckReverse
........................................................................................................... 3536 CheckClose
......................................................................................................................... 3537 Modules of Trade Signals
................................................................................................................ 3540 Signals of the I ndicator Accelerator Oscillator
................................................................................................................ 3543 Signals of the I ndicator Adaptive Moving Average
................................................................................................................ 3547 Signals of the I ndicator Awesome Oscillator
................................................................................................................ 3551 Signals of the Oscillator Bears Power
................................................................................................................ 3553 Signals of the Oscillator Bulls Power
................................................................................................................ 3555 Signals of the Oscillator Commodity Channel I ndex
................................................................................................................ 3559 Signals of the Oscillator DeMarker
................................................................................................................ 3563 Signals of the I ndicator Double Exponential Moving Average
................................................................................................................ 3567 Signals of the I ndicator Envelopes
................................................................................................................ 3570 Signals of the I ndicator Fractal Adaptive Moving Average
................................................................................................................ 3574 Signals of the I ntraday Time Filter
................................................................................................................ 3576 Signals of the Oscillator MACD
................................................................................................................ 3582 Signals of the I ndicator Moving Average
................................................................................................................ 3586 Signals of the I ndicator Parabolic SAR
................................................................................................................ 3588 Signals of the Oscillator Relative Strength I ndex
................................................................................................................ 3594 Signals of the Oscillator Relative Vigor I ndex
................................................................................................................ 3596 Signals of the Oscillator Stochastic
................................................................................................................ 3601 Signals of the Oscillator Triple Exponential Average
................................................................................................................ 3605 Signals of the I ndicator Triple Exponential Moving Average
................................................................................................................ 3609 Signals of the Oscillator Williams Percent Range
......................................................................................................................... 3612 Trailing Stop Classes
................................................................................................................ 3613 CTrailingFixedPips
........................................................................................................... 3614 StopLevel
........................................................................................................... 3615 ProfitLevel
........................................................................................................... 3616 ValidationSettings
........................................................................................................... 3617 CheckTrailingStopLong
........................................................................................................... 3618 CheckTrailingStopShort
................................................................................................................ 3619 CTrailingMA
........................................................................................................... 3620 Period
........................................................................................................... 3621 Shift
........................................................................................................... 3622 Method
........................................................................................................... 3623 Applied
........................................................................................................... 3624 I nitI ndicators
........................................................................................................... 3625 ValidationSettings
........................................................................................................... 3626 CheckTrailingStopLong
........................................................................................................... 3627 CheckTrailingStopShort
................................................................................................................ 3628 CTrailingNone
Content 42
2000-2014, MetaQuotes Software Corp.
........................................................................................................... 3629 CheckTrailingStopLong
........................................................................................................... 3630 CheckTrailingStopShort
................................................................................................................ 3631 CTrailingPSAR
........................................................................................................... 3632 Step
........................................................................................................... 3633 Maximum
........................................................................................................... 3634 I nitI ndicators
........................................................................................................... 3635 CheckTrailingStopLong
........................................................................................................... 3636 CheckTrailingStopShort
......................................................................................................................... 3637 Money Management Classes
................................................................................................................ 3638 CMoneyFixedLot
........................................................................................................... 3639 Lots
........................................................................................................... 3640 ValidationSettings
........................................................................................................... 3641 CheckOpenLong
........................................................................................................... 3642 CheckOpenShort
................................................................................................................ 3643 CMoneyFixedMargin
........................................................................................................... 3644 CheckOpenLong
........................................................................................................... 3645 CheckOpenShort
................................................................................................................ 3646 CMoneyFixedRisk
........................................................................................................... 3647 CheckOpenLong
........................................................................................................... 3648 CheckOpenShort
................................................................................................................ 3649 CMoneyNone
........................................................................................................... 3650 ValidationSettings
........................................................................................................... 3651 CheckOpenLong
........................................................................................................... 3652 CheckOpenShort
................................................................................................................ 3653 CMoneySizeOptimized
........................................................................................................... 3654 DecreaseFactor
........................................................................................................... 3655 ValidationSettings
........................................................................................................... 3656 CheckOpenLong
........................................................................................................... 3657 CheckOpenShort
............................................................................................................................3658 Classes for Control Panels and Dialogs
......................................................................................................................... 3660 CPoint
................................................................................................................ 3661 Move
................................................................................................................ 3662 Shift
................................................................................................................ 3663 Format
......................................................................................................................... 3664 CRect
................................................................................................................ 3665 Left
................................................................................................................ 3666 Top
................................................................................................................ 3667 Right
................................................................................................................ 3668 Bottom
................................................................................................................ 3669 Width
................................................................................................................ 3670 Height
................................................................................................................ 3671 SetBound
................................................................................................................ 3672 Move
................................................................................................................ 3673 Shift
................................................................................................................ 3674 Contains
................................................................................................................ 3675 Format
......................................................................................................................... 3676 CWnd
................................................................................................................ 3679 Create
................................................................................................................ 3680 Destroy
................................................................................................................ 3681 OnEvent
................................................................................................................ 3682 OnMouseEvent
................................................................................................................ 3683 Name
................................................................................................................ 3684 ControlsTotal
................................................................................................................ 3685 Control
................................................................................................................ 3686 ControlFind
................................................................................................................ 3687 Rect
................................................................................................................ 3688 Left
................................................................................................................ 3689 Top
Content 43
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3690 Right
................................................................................................................ 3691 Bottom
................................................................................................................ 3692 Width
................................................................................................................ 3693 Height
................................................................................................................ 3694 Move
................................................................................................................ 3695 Shift
................................................................................................................ 3696 Resize
................................................................................................................ 3697 Contains
................................................................................................................ 3698 Alignment
................................................................................................................ 3699 Align
................................................................................................................ 3700 I d
................................................................................................................ 3701 I sEnabled
................................................................................................................ 3702 Enable
................................................................................................................ 3703 Disable
................................................................................................................ 3704 I sVisible
................................................................................................................ 3705 Visible
................................................................................................................ 3706 Show
................................................................................................................ 3707 Hide
................................................................................................................ 3708 I sActive
................................................................................................................ 3709 Activate
................................................................................................................ 3710 Deactivate
................................................................................................................ 3711 StateFlags
................................................................................................................ 3712 StateFlagsSet
................................................................................................................ 3713 StateFlagsReset
................................................................................................................ 3714 PropFlags
................................................................................................................ 3715 PropFlagsSet
................................................................................................................ 3716 PropFlagsReset
................................................................................................................ 3717 MouseX
................................................................................................................ 3718 MouseY
................................................................................................................ 3719 MouseFlags
................................................................................................................ 3720 MouseFocusKill
................................................................................................................ 3721 OnCreate
................................................................................................................ 3722 OnDestroy
................................................................................................................ 3723 OnMove
................................................................................................................ 3724 OnResize
................................................................................................................ 3725 OnEnable
................................................................................................................ 3726 OnDisable
................................................................................................................ 3727 OnShow
................................................................................................................ 3728 OnHide
................................................................................................................ 3729 OnActivate
................................................................................................................ 3730 OnDeactivate
................................................................................................................ 3731 OnClick
................................................................................................................ 3732 OnChange
................................................................................................................ 3733 OnMouseDown
................................................................................................................ 3734 OnMouseUp
................................................................................................................ 3735 OnDragStart
................................................................................................................ 3736 OnDragProcess
................................................................................................................ 3737 OnDragEnd
................................................................................................................ 3738 DragObjectCreate
................................................................................................................ 3739 DragObjectDestroy
......................................................................................................................... 3740 CWndObj
................................................................................................................ 3742 OnEvent
................................................................................................................ 3743 Text
................................................................................................................ 3744 Color
................................................................................................................ 3745 ColorBackground
................................................................................................................ 3746 ColorBorder
................................................................................................................ 3747 Font
................................................................................................................ 3748 FontSize
Content 44
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3749 ZOrder
................................................................................................................ 3750 OnObjectCreate
................................................................................................................ 3751 OnObjectChange
................................................................................................................ 3752 OnObjectDelete
................................................................................................................ 3753 OnObjectDrag
................................................................................................................ 3754 OnSetText
................................................................................................................ 3755 OnSetColor
................................................................................................................ 3756 OnSetColorBackground
................................................................................................................ 3757 OnSetFont
................................................................................................................ 3758 OnSetFontSize
................................................................................................................ 3759 OnSetZOrder
................................................................................................................ 3760 OnDestroy
................................................................................................................ 3761 OnChange
......................................................................................................................... 3762 CWndContainer
................................................................................................................ 3764 Destroy
................................................................................................................ 3765 OnEvent
................................................................................................................ 3766 OnMouseEvent
................................................................................................................ 3767 ControlsTotal
................................................................................................................ 3768 Control
................................................................................................................ 3769 ControlFind
................................................................................................................ 3770 Add
................................................................................................................ 3771 Delete
................................................................................................................ 3772 Move
................................................................................................................ 3773 Shift
................................................................................................................ 3774 I d
................................................................................................................ 3775 Enable
................................................................................................................ 3776 Disable
................................................................................................................ 3777 Show
................................................................................................................ 3778 Hide
................................................................................................................ 3779 MouseFocusKill
................................................................................................................ 3780 Save
................................................................................................................ 3781 Load
................................................................................................................ 3782 OnResize
................................................................................................................ 3783 OnActivate
................................................................................................................ 3784 OnDeactivate
......................................................................................................................... 3785 CLabel
................................................................................................................ 3786 Create
................................................................................................................ 3787 OnSetText
................................................................................................................ 3788 OnSetColor
................................................................................................................ 3789 OnSetFont
................................................................................................................ 3790 OnSetFontSize
................................................................................................................ 3791 OnCreate
................................................................................................................ 3792 OnShow
................................................................................................................ 3793 OnHide
................................................................................................................ 3794 OnMove
......................................................................................................................... 3795 CBmpButton
................................................................................................................ 3797 Create
................................................................................................................ 3798 Border
................................................................................................................ 3799 BmpNames
................................................................................................................ 3800 BmpOffName
................................................................................................................ 3801 BmpOnName
................................................................................................................ 3802 BmpPassiveName
................................................................................................................ 3803 BmpActiveName
................................................................................................................ 3804 Pressed
................................................................................................................ 3805 Locking
................................................................................................................ 3806 OnSetZOrder
................................................................................................................ 3807 OnCreate
................................................................................................................ 3808 OnShow
Content 45
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3809 OnHide
................................................................................................................ 3810 OnMove
................................................................................................................ 3811 OnChange
................................................................................................................ 3812 OnActivate
................................................................................................................ 3813 OnDeactivate
................................................................................................................ 3814 OnMouseDown
................................................................................................................ 3815 OnMouseUp
......................................................................................................................... 3816 CButton
................................................................................................................ 3818 Create
................................................................................................................ 3819 Pressed
................................................................................................................ 3820 Locking
................................................................................................................ 3821 OnSetText
................................................................................................................ 3822 OnSetColor
................................................................................................................ 3823 OnSetColorBackground
................................................................................................................ 3824 OnSetColorBorder
................................................................................................................ 3825 OnSetFont
................................................................................................................ 3826 OnSetFontSize
................................................................................................................ 3827 OnCreate
................................................................................................................ 3828 OnShow
................................................................................................................ 3829 OnHide
................................................................................................................ 3830 OnMove
................................................................................................................ 3831 OnResize
................................................................................................................ 3832 OnMouseDown
................................................................................................................ 3833 OnMouseUp
......................................................................................................................... 3834 CEdit
................................................................................................................ 3836 Create
................................................................................................................ 3837 ReadOnly
................................................................................................................ 3838 TextAlign
................................................................................................................ 3839 OnObjectEndEdit
................................................................................................................ 3840 OnSetText
................................................................................................................ 3841 OnSetColor
................................................................................................................ 3842 OnSetColorBackground
................................................................................................................ 3843 OnSetColorBorder
................................................................................................................ 3844 OnSetFont
................................................................................................................ 3845 OnSetFontSize
................................................................................................................ 3846 OnSetZOrder
................................................................................................................ 3847 OnCreate
................................................................................................................ 3848 OnShow
................................................................................................................ 3849 OnHide
................................................................................................................ 3850 OnMove
................................................................................................................ 3851 OnResize
................................................................................................................ 3852 OnChange
................................................................................................................ 3853 OnClick
......................................................................................................................... 3854 CPanel
................................................................................................................ 3855 Create
................................................................................................................ 3856 BorderType
................................................................................................................ 3857 OnSetText
................................................................................................................ 3858 OnSetColorBackground
................................................................................................................ 3859 OnSetColorBorder
................................................................................................................ 3860 OnCreate
................................................................................................................ 3861 OnShow
................................................................................................................ 3862 OnHide
................................................................................................................ 3863 OnMove
................................................................................................................ 3864 OnResize
................................................................................................................ 3865 OnChange
......................................................................................................................... 3866 CPicture
................................................................................................................ 3867 Create
................................................................................................................ 3868 Border
Content 46
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3869 BmpName
................................................................................................................ 3870 OnCreate
................................................................................................................ 3871 OnShow
................................................................................................................ 3872 OnHide
................................................................................................................ 3873 OnMove
................................................................................................................ 3874 OnChange
......................................................................................................................... 3875 CScroll
................................................................................................................ 3877 Create
................................................................................................................ 3878 OnEvent
................................................................................................................ 3879 MinPos
................................................................................................................ 3880 MaxPos
................................................................................................................ 3881 CurrPos
................................................................................................................ 3882 CreateBack
................................................................................................................ 3883 CreateI nc
................................................................................................................ 3884 CreateDec
................................................................................................................ 3885 CreateThumb
................................................................................................................ 3886 OnClickI nc
................................................................................................................ 3887 OnClickDec
................................................................................................................ 3888 OnShow
................................................................................................................ 3889 OnHide
................................................................................................................ 3890 OnChangePos
................................................................................................................ 3891 OnThumbDragStart
................................................................................................................ 3892 OnThumbDragProcess
................................................................................................................ 3893 OnThumbDragEnd
................................................................................................................ 3894 CalcPos
......................................................................................................................... 3895 CScrollV
................................................................................................................ 3896 CreateI nc
................................................................................................................ 3897 CreateDec
................................................................................................................ 3898 CreateThumb
................................................................................................................ 3899 OnResize
................................................................................................................ 3900 OnChangePos
................................................................................................................ 3901 OnThumbDragStart
................................................................................................................ 3902 OnThumbDragProcess
................................................................................................................ 3903 OnThumbDragEnd
................................................................................................................ 3904 CalcPos
......................................................................................................................... 3905 CScrollH
................................................................................................................ 3906 CreateI nc
................................................................................................................ 3907 CreateDec
................................................................................................................ 3908 CreateThumb
................................................................................................................ 3909 OnResize
................................................................................................................ 3910 OnChangePos
................................................................................................................ 3911 OnThumbDragStart
................................................................................................................ 3912 OnThumbDragProcess
................................................................................................................ 3913 OnThumbDragEnd
................................................................................................................ 3914 CalcPos
......................................................................................................................... 3915 CWndClient
................................................................................................................ 3917 Create
................................................................................................................ 3918 OnEvent
................................................................................................................ 3919 ColorBackground
................................................................................................................ 3920 ColorBorder
................................................................................................................ 3921 BorderType
................................................................................................................ 3922 VScrolled
................................................................................................................ 3923 HScrolled
................................................................................................................ 3924 CreateBack
................................................................................................................ 3925 CreateScrollV
................................................................................................................ 3926 CreateScrollH
................................................................................................................ 3927 OnResize
................................................................................................................ 3928 OnVScrollShow
Content 47
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3929 OnVScrollHide
................................................................................................................ 3930 OnHScrollShow
................................................................................................................ 3931 OnHScrollHide
................................................................................................................ 3932 OnScrollLineDown
................................................................................................................ 3933 OnScrollLineUp
................................................................................................................ 3934 OnScrollLineLeft
................................................................................................................ 3935 OnScrollLineRight
................................................................................................................ 3936 Rebound
......................................................................................................................... 3937 CListView
................................................................................................................ 3939 Create
................................................................................................................ 3940 OnEvent
................................................................................................................ 3941 TotalView
................................................................................................................ 3942 AddI tem
................................................................................................................ 3943 Select
................................................................................................................ 3944 SelectByText
................................................................................................................ 3945 SelectByValue
................................................................................................................ 3946 Value
................................................................................................................ 3947 CreateRow
................................................................................................................ 3948 OnResize
................................................................................................................ 3949 OnVScrollShow
................................................................................................................ 3950 OnVScrollHide
................................................................................................................ 3951 OnScrollLineDown
................................................................................................................ 3952 OnScrollLineUp
................................................................................................................ 3953 OnI temClick
................................................................................................................ 3954 Redraw
................................................................................................................ 3955 RowState
................................................................................................................ 3956 CheckView
......................................................................................................................... 3957 CComboBox
................................................................................................................ 3959 Create
................................................................................................................ 3960 OnEvent
................................................................................................................ 3961 AddI tem
................................................................................................................ 3962 ListViewI tems
................................................................................................................ 3963 Select
................................................................................................................ 3964 SelectByText
................................................................................................................ 3965 SelectByValue
................................................................................................................ 3966 Value
................................................................................................................ 3967 CreateEdit
................................................................................................................ 3968 CreateButton
................................................................................................................ 3969 CreateList
................................................................................................................ 3970 OnClickEdit
................................................................................................................ 3971 OnClickButton
................................................................................................................ 3972 OnChangeList
................................................................................................................ 3973 ListShow
................................................................................................................ 3974 ListHide
......................................................................................................................... 3975 CCheckBox
................................................................................................................ 3976 Create
................................................................................................................ 3977 OnEvent
................................................................................................................ 3978 Text
................................................................................................................ 3979 Color
................................................................................................................ 3980 Checked
................................................................................................................ 3981 Value
................................................................................................................ 3982 CreateButton
................................................................................................................ 3983 CreateLabel
................................................................................................................ 3984 OnClickButton
................................................................................................................ 3985 OnClickLabel
......................................................................................................................... 3986 CCheckGroup
................................................................................................................ 3988 Create
................................................................................................................ 3989 OnEvent
Content 48
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 3990 AddI tem
................................................................................................................ 3991 Value
................................................................................................................ 3992 CreateButton
................................................................................................................ 3993 OnVScrollShow
................................................................................................................ 3994 OnVScrollHide
................................................................................................................ 3995 OnScrollLineDown
................................................................................................................ 3996 OnScrollLineUp
................................................................................................................ 3997 OnChangeI tem
................................................................................................................ 3998 Redraw
................................................................................................................ 3999 RowState
......................................................................................................................... 4000 CRadioButton
................................................................................................................ 4001 Create
................................................................................................................ 4002 OnEvent
................................................................................................................ 4003 Text
................................................................................................................ 4004 Color
................................................................................................................ 4005 State
................................................................................................................ 4006 CreateButton
................................................................................................................ 4007 CreateLabel
................................................................................................................ 4008 OnClickButton
................................................................................................................ 4009 OnClickLabel
......................................................................................................................... 4010 CRadioGroup
................................................................................................................ 4012 Create
................................................................................................................ 4013 OnEvent
................................................................................................................ 4014 AddI tem
................................................................................................................ 4015 Value
................................................................................................................ 4016 CreateButton
................................................................................................................ 4017 OnVScrollShow
................................................................................................................ 4018 OnVScrollHide
................................................................................................................ 4019 OnScrollLineDown
................................................................................................................ 4020 OnScrollLineUp
................................................................................................................ 4021 OnChangeI tem
................................................................................................................ 4022 Redraw
................................................................................................................ 4023 RowState
................................................................................................................ 4024 Select
......................................................................................................................... 4025 CSpinEdit
................................................................................................................ 4026 Create
................................................................................................................ 4027 OnEvent
................................................................................................................ 4028 MinValue
................................................................................................................ 4029 MaxValue
................................................................................................................ 4030 Value
................................................................................................................ 4031 CreateEdit
................................................................................................................ 4032 CreateI nc
................................................................................................................ 4033 CreateDec
................................................................................................................ 4034 OnClickI nc
................................................................................................................ 4035 OnClickDec
................................................................................................................ 4036 OnChangeValue
......................................................................................................................... 4037 CDialog
................................................................................................................ 4039 Create
................................................................................................................ 4040 OnEvent
................................................................................................................ 4041 Caption
................................................................................................................ 4042 Add
................................................................................................................ 4043 CreateWhiteBorder
................................................................................................................ 4044 CreateBackground
................................................................................................................ 4045 CreateCaption
................................................................................................................ 4046 CreateButtonClose
................................................................................................................ 4047 CreateClientArea
................................................................................................................ 4048 OnClickCaption
................................................................................................................ 4049 OnClickButtonClose
Content 49
2000-2014, MetaQuotes Software Corp.
................................................................................................................ 4050 ClientAreaVisible
................................................................................................................ 4051 ClientAreaLeft
................................................................................................................ 4052 ClientAreaTop
................................................................................................................ 4053 ClientAreaRight
................................................................................................................ 4054 ClientAreaBottom
................................................................................................................ 4055 ClientAreaWidth
................................................................................................................ 4056 ClientAreaHeight
................................................................................................................ 4057 OnDialogDragStart
................................................................................................................ 4058 OnDialogDragProcess
................................................................................................................ 4059 OnDialogDragEnd
......................................................................................................................... 4060 CAppDialog
................................................................................................................ 4062 Create
................................................................................................................ 4063 Destroy
................................................................................................................ 4064 OnEvent
................................................................................................................ 4065 Run
................................................................................................................ 4066 ChartEvent
................................................................................................................ 4067 Minimized
................................................................................................................ 4068 SaveI niFile
................................................................................................................ 4069 LoadI niFile
................................................................................................................ 4070 I niFileName
................................................................................................................ 4071 I niFileExt
................................................................................................................ 4072 CreateCommon
................................................................................................................ 4073 CreateExpert
................................................................................................................ 4074 CreateI ndicator
................................................................................................................ 4075 CreateButtonMinMax
................................................................................................................ 4076 OnClickButtonClose
................................................................................................................ 4077 OnClickButtonMinMax
................................................................................................................ 4078 OnAnotherApplicationClose
................................................................................................................ 4079 Rebound
................................................................................................................ 4080 Minimize
................................................................................................................ 4081 Maximize
................................................................................................................ 4082 CreateI nstanceI d
................................................................................................................ 4083 ProgramName
................................................................................................................ 4084 SubwinOff
................................................................................................. 4085 27 Moving from MQL4

2000-2014, MetaQuotes Software Corp.
50
MQL5 Reference
MetaQuotes Language 5 (MQL5) is a built-in language for programming trading strategies. This
language is developed by MetaQuotes Software Corp. based on their long experience in the creation of
online trading platforms. Using this language, you can create your own Expert Advisors that make
trading management automated and are perfectly suitable for implementing your own trading
strategies. Besides, using MQL5 you can create your own technical indicators (custom indicators),
scripts and libraries.
MQL5 contains a large number of functions necessary for analyzing current and previously received
quotes, and has built-in basic indicators and functions for managing trade positions and controlling
them. The MetaEditor 5 (text editor) that highlights different constructions of MQL5 language is used
for writing the program code. It helps users to orientate themselves in the expert system text quite
easily.
The brief guide contains functions, operations, reserved words, and other language constructions
divided into categories, and allows finding the description of every used element of the language.
Programs written in MetaQuotes Language 5 have different features and purposes:
Expert Advisor is a mechanical trading system linked up to a certain chart. An Expert Advisor starts
to run when an event happens that can be handled by it: events of initialization and deinitialization,
event of a new tick receipt, a timer event, depth of market changing event, chart event and custom
events.
An Expert Advisor can both inform you about a possibility to trade and automatically trade on an
account sending orders directly to a trade server. Expert Advisors are stored in terminal_directory
\MQL5\Experts.
Custom Indicator is a technical indicator written independently in addition to those already
integrated into the client terminal. Like built-in indicators, they cannot trade automatically and are
intended for implementing of analytical functions only.
Custom indicators are stored in terminal_directory\MQL5\Indicators
Script is a program intended for a single execution of some actions. Unlike Expert Advisors, scripts
do not process any actions, except for the start event (this requires the OnStart handler function in
a script). Scripts are stored in terminal_directory\MQL5\Scripts
Library is a set of custom functions intended for storing and distributing frequently used blocks of
custom programs. Libraries cannot start executing by themselves.
Libraries are stored in terminal_directory\MQL5\Libraries
Include File is a source text of the most frequently used blocks of custom programs. Such files can
be included into the source texts of Expert Advisors, scripts, custom indicators, and libraries at the
compiling stage. The use of included files is more preferable than the use of libraries because of
additional burden occurring at calling library functions.
Include files can be stored in the same directory as a source file - in this case the #include directive
with double quotes is used. Another place to store include files is terminal_directory\MQL5\Include,
in this case the #include directive is used with angle brackets.
2000-2014, MetaQuotes Software Corp.
Language Basics
2000-2014, MetaQuotes Software Corp.
51
Language Basics
The MetaQuotes Language 5 (MQL5) is an object-oriented high-level programming language intended
for writing automated trading strategies, custom technical indicators for the analysis of various
financial markets. It allows not only to write a variety of expert systems, designed to operate in real
time, but also create their own graphical tools to help you make trade decisions.
MQL5 is based on the concept of the popular programming language C++. As compared to MQL4, the
new language now has enumerations, structures, classes and event handling. By increasing the number
of embedded main types, the interaction of executable programs in MQL5 with other applications
through dll is now as easy as possible. MQL5 syntax is similar to the syntax of C++, and this makes it
easy to translate into it programs from modern programming languages.
To help you study the MQL5 language, all topics are grouped into the following sections:
Syntax
Data Types
Operations and Expressions
Operators
Functions
Variables
Preprocessor
Object-Oriented Programming
Language Basics
2000-2014, MetaQuotes Software Corp.
52
Syntax
As to the syntax, THE MQL5 language for programming trading strategies is very much similar to the C
++ programming language, except for some features:
no address arithmetic;
no goto operator;
an anonymous enumeration can't be declared;
no multiple inheritance.
See also
Enumerations, Structures and Classes, Inheritance
Language Basics
2000-2014, MetaQuotes Software Corp.
53
Comments
Multi-line comments start with the /* pair of symbols and end with the */ one. Such kind of comments
cannot be nested. Single-line comments begin with the // pair of symbols and end with the newline
character, they can be nested in other multi-line comments. Comments are allowed everywhere where
the spaces are allowed, they can have any number of spaces in them.
Examples:
//--- Single-line comment
/* Multi-
line // Nested single-line comment
comment
*/
Language Basics
2000-2014, MetaQuotes Software Corp.
54
Identifiers
Identifiers are used as names of variables and functions. The length of the identifier can not exceed
63 characters.
Characters allowed to be written in an identifier: figures 0-9, the Latin uppercase and lowercase
letters a-z and A-Z, recognized as different characters, the underscore character (_).The first
character can not be a digit.
The identifier must not coincide with reserved word.
Examples:
NAME1 namel Total_5 Paper
See also
Variables, Functions
Language Basics
2000-2014, MetaQuotes Software Corp.
55
Reserved Words
The following identifiers are recorded as reserved words, each of them corresponds to a certain
action, and cannot be used in another meaning:
Data Types
bool enum struct
char float uchar
class int uint
color long ulong
datetime short ushort
double string void
Access Specificators
const private protected
public virtual
Memory Classes
extern input static
Operators
break do operator
case else return
continue for sizeof
default if switch
delete new while
Other
false #define #property
this #import template
true #include typename
Language Basics
2000-2014, MetaQuotes Software Corp.
56
Language Basics
2000-2014, MetaQuotes Software Corp.
57
Data Types
Any program operates with data. Data can be of different types depending on their purposes. For
example, integer data are used to access to array components. Price data belong to those of double
precision with floating point. This is related to the fact that no special data type for price data is
provided in MQL5.
Data of different types are processed with different rates. Integer data are processed at the fastest.
To process the double precision data, a special co-processor is used. However, because of complexity
of internal representation of data with floating point, they are processed slower than the integer ones.
String data are processed at the longest because of dynamic computer memory allocation/reallocation.
The basic data types are:
integers (char, short, int, long, uchar, ushort, uint, ulong);
logical (bool);
literals (ushort);
strings (string);
floating-point numbers (double, float);
color (color);
date and time (datetime);
enumerations (enum).
Complex data types are:
structures;
classes.
In terms of OOP complex data types are called abstract data types.
The color and datetime types make sense only to facilitate visualization and input of parameters
defined from outside - from the table of Expert Advisor or custom indicator properties (the Inputs
tab). Data of color and datetime types are represented as integers. Integer types and floating-point
types are called arithmetic (numeric) types.
Only implicit type casting is used in expressions, unless the explicit casting is specified.
See also
Typecasting
Language Basics
2000-2014, MetaQuotes Software Corp.
58
Integer Types
In MQL5 integers are represented by eleven types. Some types can be used together with other ones,
if required by the program logic, but in this case it's necessary to remember the rules of types
conversion.
The table below lists the characteristics of each type. Besides, the last column features a type in C++
corresponding to each type.
Type Size in Bytes Minimum Value Maximum Value C++ Analog
char 1 -128 127 char
uchar 1 0 255 unsigned char,
BYTE
bool 1 0(false) 1(true) bool
short 2 -32 768 32 767 short, wchar_t
ushort 2 0 65 535 unsigned short,
WORD
int 4 - 2 147 483 648 2 147 483 647 int
uint 4 0 4 294 967 295 unsigned int,
DWORD
color 4 -1 16 777 215 int, COLORREF
long 8 -9 223 372 036
854 775 808
9 223 372 036
854 775 807
__int64
ulong 8 0 18 446 744 073
709 551 615
unsigned __int64
datetime 8 0 (1970.01.01
0:00:00)
32 535 244 799
(3000.12.31
23:59:59)
__time64_t
Integer type values can also be presented as numeric constants, color literals, date-time literals,
character constants and enumerations.
See also
Data Conversion, Constants of Numeric Types
Language Basics
2000-2014, MetaQuotes Software Corp.
59
Char, Short, Int and Long Types
char
The char type takes 1 byte of memory (8 bits) and allows expressing in the binary notation 2^8=256
values. The char type can contain both positive and negative values. The range of values is from -128
to 127.
uchar
The uchar integer type also occupies 1 byte of memory, as well as the char type, but unlike it uchar is
intended only for positive values. The minimum value is zero, the maximum value is 255. The first
letter u in the name of the uchar type is the abbreviation for unsigned.
short
The size of the short type is 2 bytes (16 bits) and, accordingly, it allows expressing the range of values
equal to 2 to the power 16: 2^16 = 65 536.Since the short type is a sign one, and contains both
positive and negative values, the range of values is between -32 768 and 32 767.
ushort
The unsigned short type is the type ushort, which also has a size of 2 bytes. The minimum value is 0,
the maximum value is 65 535.
int
The size of the int type is 4 bytes (32 bits). The minimal value is -2 147 483 648, the maximal one is 2
147 483 647.
uint
The unsigned integer type is uint. It takes 4 bytes of memory and allows expressing integers from 0 to
4 294 967 295.
long
The size of the long type is 8 bytes (64 bits). The minimum value is -9 223 372 036 854 775 808, the
maximum value is 9 223 372 036 854 775 807.
ulong
The ulong type also occupies 8 bytes and can store values from 0 to 18 446 744 073 709 551 615.
Examples:
char ch=12;
short sh=-5000;
int in=2445777;
Language Basics
2000-2014, MetaQuotes Software Corp.
60
Since the unsigned integer types are not designed for storing negative values, the attempt to set a
negative value can lead to unexpected consequences. Such a simple script will lead to an infinite loop:
//--- Infinite loop
void OnStart()
{
uchar u_ch;
for(char ch=-128;ch<128;ch++)
{
u_ch=ch;
Print("ch = ",ch," u_ch = ",u_ch);
}
}
The correct variant is:
//--- Correct variant
void OnStart()
{
uchar u_ch;
for(char ch=-128;ch<=127;ch++)
{
u_ch=ch;
Print("ch = ",ch," u_ch = ",u_ch);
if(ch==127) break;
}
}
Result:
ch= -128 u_ch= 128
ch= -127 u_ch= 129
ch= -126 u_ch= 130
ch= -125 u_ch= 131
ch= -124 u_ch= 132
ch= -123 u_ch= 133
ch= -122 u_ch= 134
ch= -121 u_ch= 135
ch= -120 u_ch= 136
ch= -119 u_ch= 137
ch= -118 u_ch= 138
ch= -117 u_ch= 139
ch= -116 u_ch= 140
ch= -115 u_ch= 141
ch= -114 u_ch= 142
ch= -113 u_ch= 143
ch= -112 u_ch= 144
ch= -111 u_ch= 145
Language Basics
2000-2014, MetaQuotes Software Corp.
61
...
Examples:
//--- Negative values can not be stored in unsigned types
uchar u_ch=-120;
ushort u_sh=-5000;
uint u_in=-401280;
Hexadecimal: numbers 0-9, the letters a-f or A-F for the values of 10-15; start with 0x or 0X.
Examples:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
For integer variables, the values can be set in binary form using B prefix. For example, you can encode
the working hours of a trading session into int type variable and use information about them according
to the required algorithm:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- set 1 for working hours and 0 for nonworking ones
int AsianSession =B'111111111'; // Asian session from 0:00 to 9:00
int EuropeanSession=B'111111111000000000'; // European session 9:00 - 18:00
int AmericanSession =B'111111110000000000000011'; // American session 16:00 - 02:00
//--- derive numerical values of the sessions
PrintFormat("Asian session hours as value =%d",AsianSession);
PrintFormat("European session hours as value is %d",EuropeanSession);
PrintFormat("American session hours as value is %d",AmericanSession);
//--- and now let's display string representations of the sessions' working hours
Print("Asian session ",GetHoursForSession(AsianSession));
Print("European session ",GetHoursForSession(EuropeanSession));
Print("American session ",GetHoursForSession(AmericanSession));
//---
}
//+------------------------------------------------------------------+
//| return the session's working hours as a string |
//+------------------------------------------------------------------+
string GetHoursForSession(int session)
{
//--- in order to check, use AND bit operations and left shift by 1 bit <<=1
//--- start checking from the lowest bit
int bit=1;
string out="working hours: ";
//--- check all 24 bits starting from the zero and up to 23 inclusively
for(int i=0;i<24;i++)
{
//--- receive bit state in number
Language Basics
2000-2014, MetaQuotes Software Corp.
62
bool workinghour=(session&bit)==bit;
//--- add the hour's number to the message
if(workinghour )out=out+StringFormat("%d ",i);
//--- shift by one bit to the left to check the value of the next one
bit<<=1;
}
//--- result string
return out;
}
See also
Typecasting
Language Basics
2000-2014, MetaQuotes Software Corp.
63
Character Constants
Characters as elements of a string in MQL5 are indexes in the Unicode character set. They are
hexadecimal values that can be cast into integers, and that can be manipulated by integer operations
like addition and subtraction.
Any single character in quotation marks or a hexadecimal ASCII code of a character as '\x10' is a
character constant and is of ushort type. For example, a record of '0' type is a numerical value 30, that
corresponds to the index of zero in the table of characters.
Example:
void OnStart()
{
//--- define character constants
int symbol_0='0';
int symbol_9=symbol_0+9; // get symbol '9'
//--- output values of constants
printf("In a decimal form: symbol_0 = %d, symbol_9 = %d",symbol_0,symbol_9);
printf("In a hexadecimal form: symbol_0 = 0x%x, symbol_9 = 0x%x",symbol_0,symbol_9);
//--- enter constants into a string
string test="";
StringSetCharacter(test,0,symbol_0);
StringSetCharacter(test,1,symbol_9);
//--- this is what they look like in a string
Print(test);
}
A backslash is a control character for a compiler when dealing with constant strings and character
constants in a source text of a program. Some symbols, for example a single quote ('), double quotes
("), backslash (\) and control characters can be represented as a combination of symbols that start
with a backslash (\), according to the below table:
Character name Mnemonic code or
image
Record in MQL5 Numeric value
new line (line feed) LF '\n' 13
horizontal tab HT '\t' 9
carriage return CR '\r' 10
backslash \ '\\' 92
single quote ' '\'' 39
double quote " '\"' 34
hexadecimal code hhhh '\xhhhh' 1 to 4 hexadecimal
characters
decimal code d '\d' decimal number from
0 to 65535
Language Basics
2000-2014, MetaQuotes Software Corp.
64
If a backslash is followed by a character other than those described above, result is undefined.
Example
void OnStart()
{
//--- declare character constants
int a='A';
int b='$';
int c=''; // code 0xA9
int d='\xAE'; // code of the symbol
//--- output print constants
Print(a,b,c,d);
//--- add a character to the string
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,b);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,c);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,d);
Print(test);
//--- represent characters as a number
int a1=65;
int b1=36;
int c1=169;
int d1=174;
//--- add a character to the string
StringSetCharacter(test,1,a1);
Print(test);
//--- add a character to the string
StringSetCharacter(test,1,b1);
Print(test);
//--- add a character to the string
StringSetCharacter(test,1,c1);
Print(test);
//--- add a character to the string
StringSetCharacter(test,1,d1);
Print(test);
}
As it was mentioned above, th value of a character constant (or variable) is an index in the table of
characters. Index being an integer, it can be written in different ways.
void OnStart()
{
Language Basics
2000-2014, MetaQuotes Software Corp.
65
//---
int a=0xAE; // the code of corresponds to the '\xAE' literal
int b=0x24; // the code of $ corresponds to the '\x24' literal
int c=0xA9; // the code of corresponds to the '\xA9' literal
int d=0x263A; // the code of corresponds to the '\x263A' literal
//--- show values
Print(a,b,c,d);
//--- add a character to the string
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,b);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,c);
Print(test);
//--- replace a character in a string
StringSetCharacter(test,0,d);
Print(test);
//--- codes of suits
int a1=0x2660;
int b1=0x2661;
int c1=0x2662;
int d1=0x2663;
//--- add a character of spades
StringSetCharacter(test,1,a1);
Print(test);
//--- add a character of hearts
StringSetCharacter(test,2,b1);
Print(test);
//--- add a character of diamonds
StringSetCharacter(test,3,c1);
Print(test);
//--- add a character of clubs
StringSetCharacter(test,4,d1);
Print(test);
//--- Example of character literals in a string
test="Queen\x2660Ace\x2662";
printf("%s",test);
}
The internal representation of a character literal is the ushort type. Character constants can accept
values from 0 to 65535.
See also
StringSetCharacter(), StringGetCharacter(), ShortToString(), ShortArrayToString(),
StringToShortArray()
Language Basics
2000-2014, MetaQuotes Software Corp.
66
Datetime Type
The datetime type is intended for storing the date and time as the number of seconds elapsed since
January 01, 1970. This type occupies 8 bytes of memory.
Constants of the date and time can be represented as a literal string, which consists of 6 parts
showing the numerical value of the year, month, day (or day, month, year), hours, minutes and
seconds. The constant is enclosed in single quotation marks and starts with the D character.
Values range from 1 January, 1970 to 31 December, 3000. Either date (year , month, day) or time
(hours, minutes, seconds), or all together can be omitted.
With literal date specification, it is desirable that you specify year, month and day. Otherwise the
compiler returns a warning about an incomplete entry.
Examples:
datetime NY=D'2015.01.01 00:00'; // Time of beginning of year 2015
datetime d1=D'1980.07.19 12:30:27'; // Year Month Day Hours Minutes Seconds
datetime d2=D'19.07.1980 12:30:27'; // Equal to D'1980.07.19 12:30:27';
datetime d3=D'19.07.1980 12'; // Equal to D'1980.07.19 12:00:00'
datetime d4=D'01.01.2004'; // Equal to D'01.01.2004 00:00:00'
datetime compilation_date=__DATE__; // Compilation date
datetime compilation_date_time=__DATETIME__; // Compilation date and time
datetime compilation_time=__DATETIME__-__DATE__;// Compilation time
//--- Examples of declarations after which compiler warnings will be returned
datetime warning1=D'12:30:27'; // Equal to D'[date of compilation] 12:30:27'
datetime warning2=D''; // Equal to __DATETIME__
See also
Structure of the Date Type, Date and Time, TimeToString, StringToTime
Language Basics
2000-2014, MetaQuotes Software Corp.
67
Color Type
The color type is intended for storing information about color and occupies 4 bytes in memory. The
first byte is ignored, the remaining 3 bytes contain the RGB-components.
Color constants can be represented in three ways: literally, by integers, or by name (for named Web-
colors only).
Literal representation consists of three parts representing numerical rate values of the three main
color components: red, green, blue. The constant starts with C and is enclosed in single quotes.
Numerical rate values of a color component lie in the range from 0 to 255.
Integer-valued representation is written in a form of hexadecimal or a decimal number. A hexadecimal
number looks like 0x00BBGGRR, where RR is the rate of the red color component, GG - of the green
one, and BB - of the blue one. Decimal constants are not directly reflected in the RGB. They represent
a decimal value of the hexadecimal integer representation.
Specific colors reflect the so-called Web-colors set.
Examples:
//--- Literals
C'128,128,128' // Gray
C'0x00,0x00,0xFF' // Blue
//color names
clrRed // Red
clrYellow // Yellow
clrBlack // Black
//--- Integral representations
0xFFFFFF // White
16777215 // White
0x008000 // Green
32768 // Green
See also
Web Colors, ColorToString, StringToColor, Typecasting
Language Basics
2000-2014, MetaQuotes Software Corp.
68
Bool Type
The bool type is intended to store the logical values of true or false, numeric representation of them is
1 or 0, respectively.
Examples:
bool a = true;
bool b = false;
bool c = 1;
The internal representation is a whole number 1 byte large. It should be noted that in logical
expressions you can use other integer or real types or expressions of these types - the compiler will
not generate any error. In this case, the zero value will be interpreted as false, and all other values -
as true.
Examples:
int i=5;
double d=-2.5;
if(i) Print("i = ",i," and is set to true");
else Print("i = ",i," and is set to false");
if(d) Print("d = ",d," and has the true value");
else Print("d = ",d," and has the false value");
i=0;
if(i) Print("i = ",i," and has the true value");
else Print("i = ",i," and has the false value");
d=0.0;
if(d) Print("d = ",d," and has the true value");
else Print("d = ",d," and has the false value");
//--- Execution results
// i= 5 and has the true value
// d= -2.5 and has the true value
// i= 0 and has the false value
// d= 0 and has the false value
See also
Boolean Operations, Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
69
Enumerations
Data of the enum type belong to a certain limited set of data. Defining the enumeration type:
enum name of enumerable type
{
list of values
};
The list of values is a list of identifiers of named constants separated by commas.
Example:
enum months // enumeration of named constants
{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};
After the enumeration is declared, a new integer-valued 4-byte data type appears. Declaration of the
new data type allows the compiler to strictly control types of passed parameters, because enumeration
introduces new named constants. In the above example, the January named constant has the value of
0, February - 1, December - 11.
Rule: If a certain value is not assigned to a named constant that is a member of the enumeration, its
new value will be formed automatically. If it is the first member of the enumeration, the 0 value will
be assigned to it. For all subsequent members, values will be calculated based on the value of the
previous members by adding one.
Example:
enum intervals // Enumeration of named constants
{
month=1, // Interval of one month
two_months, // Two months
quarter, // Three months - quarter
halfyear=6, // Half a year
year=12, // Year - 12 months
};
Notes
Language Basics
2000-2014, MetaQuotes Software Corp.
70
Unlike C++, the size of the internal representation of the enumerated type in MQL5 is always equal
to 4 bytes. That is, sizeof (months) returns the value 4.
Unlike C++, an anonymous enumeration can't be declared in MQL5. That is, a unique name must be
always specified after the enum keyword.
See also
Typecasting
Language Basics
2000-2014, MetaQuotes Software Corp.
71
Real Types (double, float)
Real types (or floating-point types) represent values with a fractional part. In the MQL5 language there
are two types for floating point numbers.The method of representation of real numbers in the
computer memory is defined by the IEEE 754 standard and is independent of platforms, operating
systems or programming languages.
Type Size in bytes Minimal
Positive
Value
Maximum
Value
Representati
on Accuracy
C++ Analog
float 4 1.175494351
e-38
3.402823466e
+38
7 significant
digits
float
double 8 2.225073858
5072014e-
308
1.7976931348
623158e+308
15 significant
digits
double
The double name means that the accuracy of these numbers is twice the accuracy of the float type
numbers. In most cases, the double type is the most convenient one. In many cases the limited
precision of float numbers is not enough. The reason why the float type is still used is saving the
memory (this is important for large arrays of real numbers).
Floating-point constants consist of an integer part, a point (.) and the fractional part. The integer and
fractional parts are sequences of decimal digits.
Examples:
double a=12.111;
double b=-956.1007;
float c =0.0001;
float d =16;
There is a scientific way of writing real constants, often this method of recording is more compact
than the traditional one.
Example:
double c1=1.12123515e-25;
double c2=0.000000000000000000000000112123515; // 24 zero after the decimal point

Print("1. c1 =",DoubleToString(c1,16));
// Result: 1. c1 = 0.0000000000000000

Print("2. c1 =",DoubleToString(c1,-16));
// Result: 2. c1 = 1.1212351499999999e-025
Print("3. c2 =",DoubleToString(c2,-16));
// Result: 3. c2 = 1.1212351499999999e-025
It should be remembered that real numbers are stored in memory with some limited accuracy in the
binary system, while generally the decimal notation is used. That's why many numbers that are
Language Basics
2000-2014, MetaQuotes Software Corp.
72
precisely represented in the decimal system can be written only as an infinite fraction in the binary
system.
For example, numbers 0.3 and 0.7 are represented in the computer as infinite fractions, while the
number of 0.25 is stored exactly, because it represents the power of two.
In this regard, it is strongly recommended not to compare two real numbers for equality, because such
a comparison is not correct.
Example:
void OnStart()
{
//---
double three=3.0;
double x,y,z;
x=1/three;
y=4/three;
z=5/three;
if(x+y==z) Print("1/3 + 4/3 == 5/3");
else Print("1/3 + 4/3 != 5/3");
// Result: 1/3 + 4/3 != 5/3
}
If you still need to compare the equality of two real numbers, then you can do this in two different
ways. The first way is to compare the difference between two numbers with some small quantity that
specifies the accuracy of comparison.
Example:
bool EqualDoubles(double d1,double d2,double epsilon)
{
if(epsilon<0) epsilon=-epsilon;
//---
if(d1-d2>epsilon) return false;
if(d1-d2<-epsilon) return false;
//---
return true;
}
void OnStart()
{
double d_val=0.7;
float f_val=0.7;
if(EqualDoubles(d_val,f_val,0.000000000000001)) Print(d_val," equals ",f_val);
else Print("Different: d_val = ",DoubleToString(d_val,16),
" f_val = ",DoubleToString(f_val,16));
// Result: Different: d_val= 0.7000000000000000 f_val= 0.6999999880790710
}
Noted that the value of epsilon in the above example can not be less than the predefined constant
DBL_EPSILON. The value of this constant is 2.2204460492503131e-016. The constant corresponding to
Language Basics
2000-2014, MetaQuotes Software Corp.
73
the float type is FLT_EPSILON = 1.192092896e-07. The meaning of these values is the following: it is
the lowest value that satisfies the condition 1.0 + DBL_EPSILON! = 1.0 (for numbers of float type 1.0
+ FLT_EPSILON! = 1.0).
The second way offers comparing the normalized difference of two real numbers with zero. It's
meaningless to compare the difference of normalized numbers with a zero, because any mathematical
operation with normalized numbers gives a non-normalized result.
Example:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
void OnStart()
{
double d_val=0.3;
float f_val=0.3;
if(CompareDoubles(d_val,f_val)) Print(d_val," equals ",f_val);
else Print("Different: d_val = ",DoubleToString(d_val,16),
" f_val = ",DoubleToString(f_val,16));
// Result: Different: d_val= 0.3000000000000000 f_val= 0.3000000119209290
}
Some operations of the mathematical co-processor can result in the invalid real number, which can't be
used in mathematical operations and operations of comparison, because the result of operations with
invalid real numbers is undefined. For example, when trying to calculate the arcsine of 2, the result is
the negative infinity.
Example:
double abnormal = MathArcsin(2.0);
Print("MathArcsin(2.0) =",abnormal);
// Result: MathArcsin(2.0) = -1.#IND
Besides the minus infinity there is the plus infinity and NaN (not a number). To determine that this
number is invalid, you can use MathIsValidNumber(). According to the IEEE standard, they have a
special machine representation. For example, plus infinity for the double type has the bit
representation of 0x7FF0 0000 0000 0000.
Examples:
struct str1
{
double d;
};
struct str2
{
long l;
};
Language Basics
2000-2014, MetaQuotes Software Corp.
74
//--- Start
str1 s1;
str2 s2;
//---
s1.d=MathArcsin(2.0); // Get the invalid number -1.#IND
s2=s1;
printf("1. %f %I64X",s1.d,s2.l);
//---
s2.l=0xFFFF000000000000; // invalid number -1.#QNAN
s1=s2;
printf("2. %f %I64X",s1.d,s2.l);
//---
s2.l=0x7FF7000000000000; // greatest non-number SNaN
s1=s2;
printf("3. %f %I64X",s1.d,s2.l);
//---
s2.l=0x7FF8000000000000; // smallest non-number QNaN
s1=s2;
printf("4. %f %I64X",s1.d,s2.l);
//---
s2.l=0x7FFF000000000000; // greatest non-number QNaN
s1=s2;
printf("5. %f %I64X",s1.d,s2.l);
//---
s2.l=0x7FF0000000000000; // Positive infinity 1.#INF and smallest non-number SNaN
s1=s2;
printf("6. %f %I64X",s1.d,s2.l);
//---
s2.l=0xFFF0000000000000; // Negative infinity -1.#INF
s1=s2;
printf("7. %f %I64X",s1.d,s2.l);
//---
s2.l=0x8000000000000000; // Negative zero -0.0
s1=s2;
printf("8. %f %I64X",s1.d,s2.l);
//---
s2.l=0x3FE0000000000000; // 0.5
s1=s2;
printf("9. %f %I64X",s1.d,s2.l);
//---
s2.l=0x3FF0000000000000; // 1.0
s1=s2;
printf("10. %f %I64X",s1.d,s2.l);
//---
s2.l=0x7FEFFFFFFFFFFFFF; // Greatest normalized number (MAX_DBL)
s1=s2;
printf("11. %.16e %I64X",s1.d,s2.l);
//---
s2.l=0x0010000000000000; // Smallest positive normalized (MIN_DBL)
Language Basics
2000-2014, MetaQuotes Software Corp.
75
s1=s2;
printf("12. %.16e %.16I64X",s1.d,s2.l);
//---
s1.d=0.7; // Show that the number of 0.7 - endless fraction
s2=s1;
printf("13. %.16e %.16I64X",s1.d,s2.l);
/*
1. -1.#IND00 FFF8000000000000
2. -1.#QNAN0 FFFF000000000000
3. 1.#SNAN0 7FF7000000000000
4. 1.#QNAN0 7FF8000000000000
5. 1.#QNAN0 7FFF000000000000
6. 1.#INF00 7FF0000000000000
7. -1.#INF00 FFF0000000000000
8. -0.000000 8000000000000000
9. 0.500000 3FE0000000000000
10. 1.000000 3FF0000000000000
11. 1.7976931348623157e+308 7FEFFFFFFFFFFFFF
12. 2.2250738585072014e-308 0010000000000000
13. 6.9999999999999996e-001 3FE6666666666666
*/
See also
DoubleToString, NormalizeDouble, Constants of Numeric Types
Language Basics
2000-2014, MetaQuotes Software Corp.
76
String Type
The string type is used for storing text strings. A text string is a sequence of characters in the
Unicode format with the final zero at the end of it. A string constant can be assigned to a string
variable. A string constant is a sequence of Unicode characters enclosed in double quotes: "This is a
string constant".
If you need to include a double quote (") into a string, the backslash character (\) must be put before
it. Any special character constants can be written in a string, if the backslash character (\) is typed
before them.
Examples:
string svar="This is a character string";
string svar2=StringSubstr(svar,0,4);
Print("Copyright symbol\t\x00A9");
FileWrite(handle,"This string contains a new line symbols \n");
string MT5path="C:\\Program Files\\MetaTrader 5";
To make the source code readable, long constant strings can be split into parts without addition
operation. During compilation, these parts will be combined into one long string:
//--- Declare a long constant string
string HTML_head="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"
"<title>Trade Operations Report</title>\n"
"</head>";
//--- Output the constant string into log
Print(HTML_head);
}
See also
Conversion Functions, String Functions, FileOpen, FileReadString, FileWriteString
Language Basics
2000-2014, MetaQuotes Software Corp.
77
Structures and Classes
Structures
A structure is a set of elements of any type (except for the void type). Thus, the structure combines
logically related data of different types.
Structure Declaration
The structure data type is determined by the following description:
struct structure_name
{
elements_description
};
The structure name can't be used as an identifier (name of a variable or function). It should be noted
that in MQL5 structure elements follow one another directly, without alignment. In C++ such an order
is made to the compiler using the following instruction:
#pragma pack(1)
If you want to do another alignment in the structure, use auxiliary members, "fillers" to the right size.
Example:
struct trade_settings
{
uchar slippage; // value of the permissible slippage-size 1 byte
char reserved1; // skip 1 byte
short reserved2; // skip 2 bytes
int reserved4; // another 4 bytes are skipped. ensure alignment of the boundary 8 bytes
double take; // values of the price of profit fixing
double stop; // price value of the protective stop
};
Such a description of aligned structures is necessary only for transferring to imported dll-functions.
Attention: This example illustrates incorrectly designed data. It would be better first to declare the
take and stop large data of the double type, and then declare the slippage member of the uchar type.
In this case, the internal representation of data will always be the same regardless of the value
specified in #pragma pack().
If a structure contains variables of the string type and/or object of a dynamic array, the compiler
assigns an implicit constructor to such a structure. This constructor resets all the structure members
of string type and correctly initializes objects of the dynamic array.
Simple Structures
Structures that do not contain strings or objects of dynamic arrays are called simple structures;
variables of such structures can be freely copied to each other, even if they are different structures.
Variables of simple structures, as well as their array can be passed as parameters to functions
Language Basics
2000-2014, MetaQuotes Software Corp.
78
imported from DLL.
Access to Structure Members
The structure is a new type of data allowing to declare variables of this type. The structure can be
declared only once within a project. The structure members are accessed using the point operation
(.).
Example:
struct trade_settings
{
double take; // values of the profit fixing price
double stop; // value of the protective stop price
uchar slippage; // value of the acceptable slippage
};
//--- create up and initialize a variable of the trade_settings type
trade_settings my_set={0.0,0.0,5};
if (input_TP>0) my_set.take=input_TP;
Classes
Classes differ from structures in the following:
the keyword class is used in declaration;
by default, all class members have access specifier private, unless otherwise indicated. Data-
members of the structure have the default type of access as public, unless otherwise indicated;
class objects always have a table of virtual functions, even if there are no virtual functions declared
in the class. Structures can't have virtual functions;
the new operator can be applied to class objects; this operator cannot be applied to structures;
classes can be inherited only from classes, structures can be inherited only from structures.
Classes and structures can have an explicit constructor and destructor. If your constructor is explicitly
defined, the initialization of a structure or class variable using the initializing sequence is impossible.
Example:
struct trade_settings
{
double take; // values of the profit fixing price
double stop; // value of the protective stop price
uchar slippage; // value of the acceptable slippage
//--- Constructor
trade_settings() { take=0.0; stop=0.0; slippage=5; }
//--- Destructor
~trade_settings() { Print("This is the end"); }
};
//--- Compiler will generate an error message that initialization is impossible
trade_settings my_set={0.0,0.0,5};
Language Basics
2000-2014, MetaQuotes Software Corp.
79
Constructors and Destructors
A constructor is a special function, which is called automatically when creating an object of a structure
or class and is usually used to initialize class members. Further we will talk only about classes, while
the same applies to structures, unless otherwise indicated. The name of a constructor must match the
class name. The constructor has no return type (you can specify the void type).
Defined class members strings, dynamic arrays and objects that require initialization will be in any
case initialized, regardless of whether there is a constructor.
Each class can have multiple constructors, differing by the number of parameters and the initialization
list. A constructor that requires specifying parameters is called a parametric constructor.
A constructor with no parameters is called a default constructor. If no constructors are declared in a
class, the compiler creates a default constructor during compilation.
//+------------------------------------------------------------------+
//| A class for working with a date |
//+------------------------------------------------------------------+
class MyDateClass
{
private:
int m_year; // Year
int m_month; // Month
int m_day; // Day of the month
int m_hour; // Hour in a day
int m_minute; // Minutes
int m_second; // Seconds
public:
//--- Default constructor
MyDateClass(void);
//--- Parametric constructor
MyDateClass(int h,int m,int s);
};
A constructor can be declared in the class description and then its body can be defined. For example,
two constructors of MyDateClass can be defined the following way:
//+------------------------------------------------------------------+
//| Default constructor |
//+------------------------------------------------------------------+
MyDateClass::MyDateClass(void)
{
//---
MqlDateTime mdt;
datetime t=TimeCurrent(mdt);
m_year=mdt.year;
m_month=mdt.mon;
m_day=mdt.day;
Language Basics
2000-2014, MetaQuotes Software Corp.
80
m_hour=mdt.hour;
m_minute=mdt.min;
m_second=mdt.sec;
Print(__FUNCTION__);
}
//+------------------------------------------------------------------+
//| Parametric constructor |
//+------------------------------------------------------------------+
MyDateClass::MyDateClass(int h,int m,int s)
{
MqlDateTime mdt;
datetime t=TimeCurrent(mdt);
m_year=mdt.year;
m_month=mdt.mon;
m_day=mdt.day;
m_hour=h;
m_minute=m;
m_second=s;
Print(__FUNCTION__);
}
In the default constructor, all members of the class are filled using the TimeCurrent() function, in the
parametric constructor only hour values are filled in. Other members of the class (m_year, m_month
and m_day) will be automatically initialized with the current date.
The default constructor has a special purpose when initializing an array of objects of its class. The
constructor, all parameters of which have default values, is not a default constructor. Here is an
example:
//+------------------------------------------------------------------+
//| A class with a default constructor |
//+------------------------------------------------------------------+
class CFoo
{
datetime m_call_time; // Time of the last object call
public:
//--- A constructor with a parameter that has a default value is not a default constructor
CFoo(const datetime t=0){m_call_time=t;};
//--- A copying constructor
CFoo(const CFoo &foo){m_call_time=foo.m_call_time;};
string ToString(){return(TimeToString(m_call_time,TIME_DATE|TIME_SECONDS));};
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// CFoo foo; // This variant cannot be used - a default constructor is not set
//--- Possible options to create the CFoo object
Language Basics
2000-2014, MetaQuotes Software Corp.
81
CFoo foo1(TimeCurrent()); // An explicit call of a parametric constructor
CFoo foo2(); // An explicit call of a parametric constructor with a default parameter
CFoo foo3=D'2009.09.09'; // An implicit call of a parametric constructor
CFoo foo40(foo1); // An explicit call of a copying constructor
CFoo foo41=foo1; // An implicit call of a copying constructor
CFoo foo5; // An explicit call of a default constructor (if there is no default constructor,
// then a parametric constructor with a default value is called)
//--- Possible options to receive CFoo pointers
CFoo *pfoo6=new CFoo(); // Dynamic creation of an object and receiving of a pointer to it
CFoo *pfoo7=new CFoo(TimeCurrent());// Another option of dynamic object creation
CFoo *pfoo8=GetPointer(foo1); // Now pfoo8 points to object foo1
CFoo *pfoo9=pfoo7; // pfoo9 and pfoo7 point to one and the same object
// CFoo foo_array[3]; // This option cannot be used - a default constructor is not specified
//--- Show the value of m_call_time
Print("foo1.m_call_time=",foo1.ToString());
Print("foo2.m_call_time=",foo2.ToString());
Print("foo3.m_call_time=",foo3.ToString());
Print("foo4.m_call_time=",foo4.ToString());
Print("foo5.m_call_time=",foo5.ToString());
Print("pfoo6.m_call_time=",pfoo6.ToString());
Print("pfoo7.m_call_time=",pfoo7.ToString());
Print("pfoo8.m_call_time=",pfoo8.ToString());
Print("pfoo9.m_call_time=",pfoo9.ToString());
//--- Delete dynamically created arrays
delete pfoo6;
delete pfoo7;
//delete pfoo8; // You do not need to delete pfoo8 explicitly, since it points to the automatically created object foo1
//delete pfoo9; // You do not need to delete pfoo9 explicitly. since it points to the same object as pfoo7
}
If you uncomment these strings
//CFoo foo_array[3]; // This variant cannot be used - a default constructor is not set
or
//CFoo foo_dyn_array[]; // This variant cannot be used - a default constructor is not set
then the compiler will return an error for them "default constructor is not defined".
If a class has a user-defined constructor, the default constructor is not generated by the compiler. This
means that if a parametric constructor is declared in a class, but a default constructor is not declared,
you can not declare the arrays of objects of this class. The compiler will return an error for this script:
//+------------------------------------------------------------------+
//| A class without a default constructor |
//+------------------------------------------------------------------+
class CFoo
{
string m_name;
public:
Language Basics
2000-2014, MetaQuotes Software Corp.
82
CFoo(string name) { m_name=name;}
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Get the "default constructor is not defined" error during compilation
CFoo badFoo[5];
}
In this example, the CFoo class has a declared parametric constructor - in such cases, the compiler
does not create a default constructor automatically during compilation. At the same time when you
declare an array of objects, it is assumed that all objects should be created and initialized
automatically. During auto-initialization of an object, it is necessary to call a default constructor, but
since the default constructor is not explicitly declared and not automatically generated by the compiler,
it is impossible to create such an object. For this reason, the compiler generates an error at the
compilation stage.
There is a special syntax to initialize an object using a constructor. Constructor initializers (special
constructions for initialization) for the members of a struct or class can be specified in the
initialization list.
An initialization list is a list of initializers separated by commas, which comes after the colon after
the list of parameters of a constructor and precedes the body (goes before an opening brace). There
are several requirements:
Initialization lists can be used only in constructors;
Parent members cannot be initialized in the initialization list;
The initialization list must be followed by a definition (implementation) of a function.
Here is an example of several constructors for initializing class members.
//+------------------------------------------------------------------+
//| A class for storing the name of a character |
//+------------------------------------------------------------------+
class CPerson
{
string m_first_name; // First name
string m_second_name; // Second name
public:
//--- An empty default constructor
CPerson() {Print(__FUNCTION__);};
//--- A parametric constructor
CPerson(string full_name);
//--- A constructor with an initialization list
CPerson(string surname,string name): m_second_name(surname), m_first_name(name) {};
void PrintName(){PrintFormat("Name=%s Surname=%s",m_first_name,m_second_name);};
};
//+------------------------------------------------------------------+
//| |
Language Basics
2000-2014, MetaQuotes Software Corp.
83
//+------------------------------------------------------------------+
CPerson::CPerson(string full_name)
{
int pos=StringFind(full_name," ");
if(pos>=0)
{
m_first_name=StringSubstr(full_name,0,pos);
m_second_name=StringSubstr(full_name,pos+1);
}
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Get an error "default constructor is not defined"
CPerson people[5];
CPerson Tom="Tom Sawyer"; // Tom Sawyer
CPerson Huck("Huckleberry","Finn"); // Huckleberry Finn
CPerson *Pooh = new CPerson("Winnie","Pooh"); // Winnie the Pooh
//--- Output values
Tom.PrintName();
Huck.PrintName();
Pooh.PrintName();

//--- Delete a dynamically created object
delete Pooh;
}
In this case, the CPerson class has three constructors:
1. An explicit default constructor, which allows creating an array of objects of this class;
2. A constructor with one parameter, which gets a full name as a parameter and divides it to the name
and second name according to the found space;
3. A constructor with two parameters that contains an initialization list. Initializers -
m_second_name(surname) and m_first_name(name).
Note that the initialization using a list has replaced an assignment. Individual members must be
initialized as:
class_member (a list of expressions)
In the initialization list, members can go in any order, but all members of the class will be initialized
according to the order of their announcement. This means that in the third constructor, first the
m_first_name member will be initialized, as it is announced first, and only after it m_second_name is
initialized. This should be taken into account in cases where the initialization of some members of the
class depends on the values in other class members.
If a default constructor is not declared in the base class, and at the same time one or more
constructors with parameters are declared, you should always call one of the base class constructors in
the initialization list. It goes through the comma as ordinary members of the list and will be called first
Language Basics
2000-2014, MetaQuotes Software Corp.
84
during object initialization, no matter where in the initialization list it is located.
//+------------------------------------------------------------------+
//| Base class |
//+------------------------------------------------------------------+
class CFoo
{
string m_name;
public:
//--- A constructor with an initialization list
CFoo(string name) : m_name(name) { Print(m_name);}
};
//+------------------------------------------------------------------+
//| Class derived from CFoo |
//+------------------------------------------------------------------+
class CBar : CFoo
{
CFoo m_member; // A class member is an object of the parent
public:
//--- A default constructor in the initialization list calls the constructor of a parent
CBar(): m_member(_Symbol), CFoo("CBAR") {Print(__FUNCTION__);}
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
CBar bar;
}
In this example, when creating the bar object, a default constructor CBar() will be called, in which first
a constructor for the parent CFoo is called, and then comes a constructor for the m_member class
member.
A destructor is a special function that is called automatically when a class object is destroyed. The
name of the destructor is written as a class name with a tilde (~). Strings, dynamic arrays and objects,
requiring deinitialization, will be de-initialized anyway, regardless of the destructor presence or
absence. If there is a destructor, these actions will be performed after calling the destructor.
Destructors are always virtual, regardless of whether they are declared with the virtual keyword or not.
Defining Class Methods
Class function-methods can be defined both inside the class and outside the class declaration. If the
method is defined within a class, then its body comes right after the method declaration.
Example:
class CTetrisShape
{
protected:
Language Basics
2000-2014, MetaQuotes Software Corp.
85
int m_type;
int m_xpos;
int m_ypos;
int m_xsize;
int m_ysize;
int m_prev_turn;
int m_turn;
int m_right_border;
public:
void CTetrisShape();
void SetRightBorder(int border) { m_right_border=border; }
void SetYPos(int ypos) { m_ypos=ypos; }
void SetXPos(int xpos) { m_xpos=xpos; }
int GetYPos() { return(m_ypos); }
int GetXPos() { return(m_xpos); }
int GetYSize() { return(m_ysize); }
int GetXSize() { return(m_xsize); }
int GetType() { return(m_type); }
void Left() { m_xpos-=SHAPE_SIZE; }
void Right() { m_xpos+=SHAPE_SIZE; }
void Rotate() { m_prev_turn=m_turn; if(++m_turn>3) m_turn=0; }
virtual void Draw() { return; }
virtual bool CheckDown(int& pad_array[]);
virtual bool CheckLeft(int& side_row[]);
virtual bool CheckRight(int& side_row[]);
};
Functions from SetRightBorder(int border) to Draw() are declared and defined directly inside the
CTetrisShape class.
The CTetrisShape() constructor and methods CheckDown(int& pad_array[]), CheckLeft(int&
side_row[]) and CheckRight(int& side_row[]) are only declared inside the class, but not defined yet.
Definitions of these functions will be further in the code. In order to define the method outside the
class, the scope resolution operator is used, the class name is used as the scope.
Example:
//+------------------------------------------------------------------+
//| Constructor of the basic class |
//+------------------------------------------------------------------+
void CTetrisShape::CTetrisShape()
{
m_type=0;
m_ypos=0;
m_xpos=0;
m_xsize=SHAPE_SIZE;
m_ysize=SHAPE_SIZE;
m_prev_turn=0;
m_turn=0;
m_right_border=0;
Language Basics
2000-2014, MetaQuotes Software Corp.
86
}
//+------------------------------------------------------------------+
//| Checking ability to move down (for the stick and cube) |
//+------------------------------------------------------------------+
bool CTetrisShape::CheckDown(int& pad_array[])
{
int i,xsize=m_xsize/SHAPE_SIZE;
//---
for(i=0; i<xsize; i++)
{
if(m_ypos+m_ysize>=pad_array[i]) return(false);
}
//---
return(true);
}
Public, Protected and Private Access Modifiers
When developing a new class, it is recommended to restrict access to the members from the outside.
For this purpose keywords private or protected are used. In this case, hidden data can be accessed
only from function-methods of the same class. If the protected keyword is used, hidden data can be
accessed also from methods of classes - inheritors of this class. The same method can be used to
restrict the access to functions-methods of a class.
If you need to completely open access to members and/or methods of a class, use the keyword public.
Example:
class CTetrisField
{
private:
int m_score; // Score
int m_ypos; // Current position of the figures
int m_field[FIELD_HEIGHT][FIELD_WIDTH]; // Matrix of the well
int m_rows[FIELD_HEIGHT]; // Numbering of the well rows
int m_last_row; // Last free row
CTetrisShape *m_shape; // Tetris figure
bool m_bover; // Game over
public:
void CTetrisField() { m_shape=NULL; m_bover=false; }
void Init();
void Deinit();
void Down();
void Left();
void Right();
void Rotate();
void Drop();
private:
void NewShape();
void CheckAndDeleteRows();
Language Basics
2000-2014, MetaQuotes Software Corp.
87
void LabelOver();
};
Any class members and methods declared after the specifier public: (and before the next access
specifier) are available in any reference to the class object by the program. In this example these are
the following members: functions CTetrisField(), Init(), Deinit(), Down(), Left(), Right(), Rotate() and
Drop().
Any members that are declared after the access specifier to the elements private: (and before the
next access specifier) are available only to members-functions of this class. Specifiers of access to
elements always end with a colon (:) and can appear in the class definition many times.
Access to the members of the basis class can be redefined during inheritance in derived classes.
See also
Object-Oriented Programming
Language Basics
2000-2014, MetaQuotes Software Corp.
88
Dynamic Array Object
Dynamic Arrays
Maximum 4-dimension array can be declared. When declaring a dynamic array (an array of unspecified
value in the first pair of square brackets), the compiler automatically creates a variable of the above
structure (a dynamic array object) and provides a code for the correct initialization.
Dynamic arrays are automatically freed when going beyond the visibility area of the block they are
declared in.
Example:
double matrix[][10][20]; // 3-dimensional dynamic array
ArrayResize(matrix,5); // Set the size of the first dimension
Static Arrays
When all significant array dimensions are explicitly specified, the compiler pre-allocates the necessary
memory size. Such an array is called static. Nevertheless, the compiler allocates additional memory for
the object of a dynamic array, which (object) is associated with the pre-allocated static buffer
(memory part for storing the array).
Creating a dynamic array object is due to the possible need to pass this static array as a parameter to
some function.
Examples:
double stat_array[5]; // 1-dimensional static array
some_function(stat_array);
...
bool some_function(double& array[])
{
if(ArrayResize(array,100)<0) return(false);
...
return(true);
}
Arrays in Structures
When a static array is declared as a member of a structure, a dynamic array object is not created.
This is done to ensure compatibility of data structures used in the Windows API.
However, static arrays that are declared as members of structures, can also be passed to MQL5-
functions. In this case, when passing the parameter a temporary object of a dynamic array, connected
with the static array - structure member, will be created.
See also
Array Functions, Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and
Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
89
Typecasting
Casting Numeric Types
Often a necessity occurs to convert one numeric type into another. Not all numeric types can be
converted into another. Here is the scheme of allowed casting:
Solid lines with arrows indicate changes that are performed almost without any loss of information.
Instead of the char type, the bool type can be used (both take 1 byte of memory), instead of type int,
the color type can be used (4 bytes), instead of the long type, datetime can be used (take 8 bytes).
The four dashed grey lines, also arrowed, denote conversions, when the loss of precision can occur.
For example, the number of digits in an integer equal to 123456789 (int) is higher than the number of
digits that can be represented by float.
int n=123456789;
float f=n; // the content of f is equal to 1.234567892E8
Print("n = ",n," f = ",f);
// result n= 123456789 f= 123456792.00000
A number converted into float has the same order, but is less accurate. Conversions, contrary to black
arrows, can be performed with possible data loss. Conversions between char and uchar, short and
ushort, int and uint, long and ulong (conversions to both sides), may lead to the loss of data.
As a result of converting floating point values to integer type, the fractional part is always deleted. If
you want to round off a float to the nearest whole number (which in many cases is more useful), you
should use MathRound().
Example:
//--- Gravitational acceleration
double g=9.8;
double round_g=(int)g;
double math_round_g=MathRound(g);
Print("round_g = ",round_g);
Print("math_round_g = ",math_round_g);
/*
Result:
round_g = 9
math_round_g = 10
*/
Language Basics
2000-2014, MetaQuotes Software Corp.
90
If two values are combined by a binary operator, before the operation execution the operand of a
lower type is converted to the higher type in accordance with the priority given in the below scheme:
The data types char, uchar, short, and ushort unconditionally are converted to the int type.
Examples:
char c1=3;
//--- First example
double d2=c1/2+0.3;
Print("c1/2 + 0.3 = ",d2);
// Result: c1/2+0.3 = 1.3
//--- Second example
d2=c1/2.0+0.3;
Print("c1/2.0 + 0.3 = ",d2);
// Result: c1/2.0+0.3 = 1.8
The calculated expression consists of two operations. In the first example, the variable c1 of the char
type is converted to a temporary variable of the int type, because the second operand in the division
operation, the constant 2, is of the higher type int. As a result of the integer division 3/2 we get the
value 1, which is of the int type.
In the second operation of the first example, the second operand is the constant 0.3, which is of the
double type, so the result of the first operation is converted into a temporary variable of the double
type with a value of 1.0.
In the second example the variable of the char type c1 is converted to a temporary variable of the
double type, because the second operand in the division operation, the constant 2.0, is of the double
type; no further conversions are made.
Typecasting of Numeric Types
In the expressions of the MQL5 language both explicit and implicit typecasting can be used. The
explicit typecasting is written as follows:
var_1 = (type)var_2;
An expression or function execution result can be used as the var_2 variable. The functional recording
of the explicit typecasting is also possible:
var_1 = type(var_2);
Let's consider an explicit typecasting on the basis of the first example.
//--- Third example
double d2=(double)c1/2+0.3;
Language Basics
2000-2014, MetaQuotes Software Corp.
91
Print("(double)c1/2 + 0.3 = ",d2);
// Result: (double)c1/2+0.3 = 1.80000000
Before the division operation is performed, the c1 variable is explicitly cast to the double type. Now
the integer constant 2 is cast to the value 2.0 of the double type, because as a result of converting the
first operand has taken the double type. In fact, the explicit typecasting is a unary operation.
Besides, when trying to cast types, the result may go beyond the permissible range. In this case, the
truncation occurs. For example:
char c;
uchar u;
c=400;
u=400;
Print("c = ",c); // Result c=-112
Print("u = ",u); // Result u=144
Before operations (except for the assignment ones) are performed, the data are converted into the
maximum priority type. Before assignment operations are performed, the data are cast into the target
type.
Examples:
int i=1/2; // no types casting, the result is 0
Print("i = 1/2 ",i);
int k=1/2.0; // the expression is cast to the double type,
Print("k = 1/2 ",k); // then is to the target type of int, the result is 0
double d=1.0/2.0; // no types casting, the result is 0.5
Print("d = 1/2.0; ",d);
double e=1/2.0; // the expression is cast to the double type,
Print("e = 1/2.0; ",e);// that is the same as the target type, the result is 0.5
double x=1/2; // the expression of the int type is cast to the double target typr,
Print("x = 1/2; ",x); // the result is 0.0
When converting long/ulong type into double, precision may be lost in case the integer value is
greater than 9223372036854774784 or less than -9223372036854774784.
void OnStart()
{
long l_max=LONG_MAX;
long l_min=LONG_MIN+1;
//--- define the highest integer value, which does not lose accuracy when being cast to double
while(l_max!=long((double)l_max))
l_max--;
//--- define the lowest integer value, which does not lose accuracy when being cast to double
while(l_min!=long((double)l_min))
l_min++;
//--- derive the found interval for integer values
Language Basics
2000-2014, MetaQuotes Software Corp.
92
PrintFormat("When casting an integer value to double, it must be "
"within [%I64d, %I64d] interval",l_min,l_max);
//--- now, let's see what happens if the value falls out of this interval
PrintFormat("l_max+1=%I64d, double(l_max+1)=%.f, ulong(double(l_max+1))=%I64d",
l_max+1,double(l_max+1),long(double(l_max+1)));
PrintFormat("l_min-1=%I64d, double(l_min-1)=%.f, ulong(double(l_min-1))=%I64d",
l_min-1,double(l_min-1),long(double(l_min-1)));
//--- receive the following result
// When casting an integer value to double, it should be within [-9223372036854774784, 9223372036854774784] interval
// l_max+1=9223372036854774785, double(l_max+1)=9223372036854774800, ulong(double(l_max+1))=9223372036854774784
// l_min-1=-9223372036854774785, double(l_min-1)=-9223372036854774800, ulong(double(l_min-1))=-9223372036854774784
}
Typecasting for the String Type
The string type has the highest priority among simple types. Therefore, if one of operands of an
operation is of the string type, the second operand will be cast to a string automatically. Note that for
a string, a single dyadic two-place operation of addition is possible. The explicit casting of string to
any numeric type is allowed.
Examples:
string s1=1.0/8; // the expression is cast to the double type,
Print("s1 = 1.0/8; ",s1); // then is to the target type of string,
// result is "0.12500000" (a string containing 10 characters)
string s2=NULL; // string deinitialization
Print("s2 = NULL; ",s2); // the result is an empty string
string s3="Ticket N"+12345; // the expression is cast to the string type
Print("s3 = \"Ticket N\"+12345",s3);
string str1="true";
string str2="0,255,0";
string str3="2009.06.01";
string str4="1.2345e2";
Print(bool(str1));
Print(color(str2));
Print(datetime(str3));
Print(double(str4));
Typecasting of Simple Structure Types
Data of the simple structures type can be assigned to each other only if all the members of both
structures are of numeric types. In this case both operands of the assignment operation (left and
right) must be of the structures type. The member-wise casting is not performed, a simple copying is
done. If the structures are of different sizes, the number of bytes of the smaller size is copied. Thus
Language Basics
2000-2014, MetaQuotes Software Corp.
93
the absence of union in MQL5 is compensated.
Examples:
struct str1
{
double d;
};
//---
struct str2
{
long l;
};
//---
struct str3
{
int low_part;
int high_part;
};
//---
struct str4
{
string s;
};
//+------------------------------------------------------------------+
void OnStart()
{
str1 s1;
str2 s2;
str3 s3;
str4 s4;
//---
s1.d=MathArcsin(2.0); // get the invalid number -1. # IND
s2=s1;
printf("1. %f %I64X",s1.d,s2.l);
//---
s3=s2;
printf("2. high part of long %.8X low part of long %.8X",
s3.high_part,s3.low_part);
//---
s4.s="some constant string";
s3=s4;
printf("3. buffer len is %d constant string address is 0x%.8X",
s3.low_part,s3.high_part);
}
Another example illustrates the method of organizing a custom function for receiving RGB (Red,
Green, Blue) representation from the color type. Create two structures of the same size but with
different contents. For convenience, let's add a function returning the RGB representation of a color as
Language Basics
2000-2014, MetaQuotes Software Corp.
94
a string.
#property script_show_inputs
input color testColor=clrBlue;// set color for testing
//--- structure for representing color as RGB
struct RGB
{
uchar blue; // blue component of color
uchar green; // green component of color
uchar red; // red component of color
uchar empty; // this byte is not used
string toString(); // function for receiving a string
};
//--- function for showing color as a string
string RGB::toString(void)
{
string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
return out;
}
//--- structure for storing of the built-in color type
struct builtColor
{
color c;
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- a variable for storing in RGB
RGB colorRGB;
//--- variable for storing the color type
builtColor test;
test.c=testColor;
//--- casting two structures by copying contents
colorRGB=test;
Print("color ",test.c,"=",colorRGB.toString());
//---
}
Typecasting of Base Class Pointers to Pointers of Derivative Classes
Objects of the open generated class can also be viewed as objects of the corresponding base class.
This leads to some interesting consequences.For example, despite the fact that objects of different
classes, generated by a single base class, may differ significantly from each other, we can create a
linked list (List) of them, as we view them as objects of the base type. But the converse is not true:
the base class objects are not automatically objects of a derived class.
Language Basics
2000-2014, MetaQuotes Software Corp.
95
You can use the explicit casting to convert the base class pointers to the pointers of a derived class.
But you must be fully confident in the admissibility of such a transformation, because otherwise a
critical runtime error will occur and the mql5 program will be stopped.
See also
Data Types
Language Basics
2000-2014, MetaQuotes Software Corp.
96
Void Type and NULL Constant
Syntactically the void type is a fundamental type along with types of char, uchar, bool, short, ushort,
int, uint, color, long, ulong, datetime, float, double and string. This type is used either to indicate
that the function does not return any value, or as a function parameter it denotes the absence of
parameters.
The predefined constant variable NULL is of the void type. It can be assigned to variables of any other
fundamental types without conversion. The comparison of fundamental type variables with the NULL
value is allowed.
Example:
//--- If the string is not initialized, then assign our predefined value to it
if(some_string==NULL) some_string="empty";
Also NULL can be compared to pointers to objects created with the new operator.
See also
Variables, Functions
Language Basics
2000-2014, MetaQuotes Software Corp.
97
Object Pointers
In MQL5, there is a possibility to dynamically create objects of complex type. This is done by the new
operator, which returns a descriptor of the created object. Descriptor is 8 bytes large. Syntactically,
object descriptors in MQL5 are similar to pointers in C++.
Examples:
MyObject* hobject= new MyObject();
Again, unlike C++, the variable hobject from the example above is not a pointer to the memory, it is
a descriptor of the object.
See also
Variables, Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and
Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
98
References: Modifier & and Keyword this
Passing Parameters by Reference
In MQL5 parameters of simple types can be passed both by value and by reference, while parameters
of compound types are always passed by reference. To inform the compiler that a parameter must be
passed by reference, the ampersand character & is added before the parameter name.
Passing a parameter by reference means passing the address of the variable, that's why all changes in
the parameter that is passed by reference will be immediately reflected in the source variable. Using
parameter passing by reference, you can implement return of several results of a function at the same
time. In order to prevent changing of a parameter passed by reference, use the const modifier.
Thus, if the input parameter of a function is an array, a structure or class object, symbol '&' is placed
in the function header after the variable type and before its name.
Example
class CDemoClass
{
private:
double m_array[];
public:
void setArray(double &array[]);
};
//+------------------------------------------------------------------+
//| filling the array |
//+------------------------------------------------------------------+
void CDemoClass::setArray(double &array[])
{
if(ArraySize(array)>0)
{
ArrayResize(m_array,ArraySize(array));
ArrayCopy(m_array, array);
}
}
In the above example class CDemoClass is declared, which contains the private member - array
m_array[] of double type. Function setArray() is declared, to which array[] is passed by reference. If
the function header doesn't contain the indication about passing by reference, i.e. doesn't contain the
ampersand character, an error message will be generated at the attempt to compile such a code.
Despite the fact that the array is passed by reference, we can't assign one array to another. We need
to perform the element-wise copying of contents of the source array to the recipient array. The
presence of & in the function description is the obligatory condition for arrays and structures when
passed as the function parameter.
Keyword this
A variable of class type (object) can be passed both by reference and by pointer. As well as reference,
Language Basics
2000-2014, MetaQuotes Software Corp.
99
the pointer allows having access to an object. After the object pointer is declared, the new operator
should be applied to it to create and initialize it.
The reserved word this is intended for obtaining the reference of the object to itself, which is
available inside class or structure methods. this always references to the object, in the method of
which it is used, and the expression GetPointer(this) gives the pointer of the object, whose member is
the function, in which call of GetPointer() is performed. In MQL5 functions can't return objects, but
they can return the object pointer.
Thus, if we need a function to return an object, we can return the pointer of this object in the form of
GetPointer(this). Let's add function getDemoClass() that returns pointer of the object of this class,
into the description of CDemoClass.
class CDemoClass
{
private:
double m_array[];
public:
void setArray(double &array[]);
CDemoClass *getDemoClass();
};
//+------------------------------------------------------------------+
//| filling the array |
//+------------------------------------------------------------------+
void CDemoClass::setArray(double &array[])
{
if(ArraySize(array)>0)
{
ArrayResize(m_array,ArraySize(array));
ArrayCopy(m_array,array);
}
}
//+------------------------------------------------------------------+
//| returns its own pointer |
//+------------------------------------------------------------------+
CDemoClass *CDemoClass::getDemoClass(void)
{
return(GetPointer(this));
}
Structures don't have pointers, operators new and delete can't be applied to them, GetPointer(this)
can't be used.
See also
Object Pointers, Creating and Deleting Objects, Visibility Scope and Lifetime of Variables
Language Basics
2000-2014, MetaQuotes Software Corp.
100
Operations and Expressions
Some characters and character sequences are of a special importance. These are so-called operation
symbols, for example:
+ - * / % Symbols of arithmetic operations
&& || Symbols of logical operations
= += *= Characters assignment operators
Operation symbols are used in expressions and have sense when appropriate operands are given them.
Punctuation marks are emphasized, as well. These are parentheses, braces, comma, colon, and
semicolon.
Operation symbols, punctuation marks, and spaces are used to separate language elements from each
other.
This section contains the description of the following topics:
Expressions
Arithmetical Operations
Assignment Operations
Operations of Relation
Boolean Operations
Bitwise Operations
Other Operations
Priorities and Operations Order
Language Basics
2000-2014, MetaQuotes Software Corp.
101
Expressions
An expression consists of one or more operands and operation symbols. An expression can be written
in several lines.
Examples:
a++; b = 10; // several expressions are located in one line
//--- one expression is divided into several lines
x = (y * z) /
(w + 2) + 127;
An expression that ends with a semicolon (;) is an operator.
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
102
Arithmetic Operations
Arithmetical operations include additive and multiplicative operations:
Sum of variables i = j + 2;
Difference of variables i = j - 3;
Changing the sign x = - x;
Product of variables z = 3 * x;
Division quotient i = j / 5;
Remainder of division minutes = time % 60;
Adding 1 to the variable value i++;
Adding 1 to the variable value ++i;
Subtracting 1 from the variable value k--;
Subtracting 1 from the variable value --k;
Increment and decrement operations are applied only to variables, they can't be applied to constants.
The prefix increment (++i) and decrement (--k) are applied to the variable right before this variable is
used in an expression.
Post-increment (a++) and post-decrement (k--) are applied to the variable right after this variable is
used in an expression.
Important Notice
int i=5;
int k = i++ + ++i;
Computational problems may occur while moving the above expression from one programming
environment to another one (for example, from Borland C++ to MQL5). In general, the order of
computations depends on the compiler implementation. In practice, there are two ways to implement
the post-decrement (post-increment):
1. The post-decrement (post-increment) is applied to the variable after calculating the whole
expression.
2. The post-decrement (post-increment) is applied to the variable immediately at the operation.
Currently the first way of post-decrement (post-increment) calculation is implemented in MQL5. But
even knowing this peculiarity, it is not recommended to experiment with its use.
Examples:
int a=3;
a++; // valid expression
int b=(a++)*3; // invalid expression
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
103
Assignment Operations
The value of the expression that includes the given operation is the value of the left operand after
assignment:
Assignment the x value to the y variable y = x;
The following operations unite arithmetic or bitwise operations with operation of assignment:
Adding x to the y variable y += x;
Subtracting x from the y variable y -= x;
Multiplying the y variable by x y *= x;
Dividing the y variable by x y /= x;
Reminder of division of the y variable by x y %= x;
Shift of the binary representation of y to the right by x bits y >>= x;
Shift of the binary representation of y to the left by x bits y <<= x;
AND bitwise operation of binary representations of y and x y &= x;
OR bitwise operation of binary representations of y and x y |= x;
Excluding OR bitwise operation of binary representations of y and x y ^= x;
Bitwise operations can be applied to integers only. When performing the operation of the logical shift
of the y representation to the right/left by x bits, the 5 smallest binary digits of the x value are used,
the highest ones are dropped, i.e. the shift is made to 0-31 bits.
By %= operation (y value by module of x), the result sign is equal to the sign of divided number.
The assignment operator can be used several times in an expression . In this case the processing of
the expression is performed from left to right:
y=x=3;
First, the variable x will be assigned the value 3, then the y variable will be assigned the value of x,
i.e. also 3.
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
104
Operations of Relation
Boolean FALSE is represented with an integer zero value, while the boolean TRUE is represented by any
non-zero value.
The value of expressions containing operations of relation or logical operations is FALSE (0) or TRUE
(1).
True if a is equal to b a == b;
True if a is not equal to b a != b;
True if a is less than b a < b;
True if a is greater than b a > b;
True if a is less than or equal to b a <= b;
True if a is greater than or equal to b a >= b;
The equality of two real numbers can't be compared. In most cases, two seemingly identical numbers
can be unequal because of different values in the 15th decimal place. In order to correctly compare two
real numbers, compare the normalized difference of these numbers with zero.
Example:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
void OnStart()
{
double first=0.3;
double second=3.0;
double third=second-2.7;
if(first!=third)
{
if(CompareDoubles(first,third))
printf("%.16f and %.16f are equal",first,third);
}
}
// Result: 0.3000000000000000 0.2999999999999998 are equal
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
105
Boolean Operations
Logical Negation NOT (!)
Operand of the logical negation (!) must be of arithmetic type. The result is TRUE (1), if the operand
value is FALSE (0); and it is equal to FALSE (0), if the operand differs from FALSE (0).
if(!a) Print("not 'a'");
Logical Operation OR (||)
Logical OR operation (||) of x and y values. The expression value is TRUE (1), if x or y value is true
(not null). Otherwise - FALSE (0).
if(x<0 || x>=max_bars) Print("out of range");
Logical Operation AND (&&)
Logical operation AND (&&) of x and y values. The expression value is TRUE (1), if the values of x and
y are true (not null). Otherwise - FALSE (0).
Brief Estimate of Boolean Operations
The scheme of the so called "brief estimate" is applied to boolean operations, i.e. the calculation of
the expression is terminated when the result of the expression can be precisely estimated.
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- the first example of the brief estimate
if(func_false() && func_true())
{
Print("Operation &&: You will never see this expression");
}
else
{
Print("Operation &&: Result of the first expression is false, so the second wasn't calculated");
}
//--- the second example of the brief estimate
if(!func_false() || !func_true())
{
Print("Operation ||: Result of the first expression is true, so the second wasn't calculated");
}
else
{
Print("Operation ||: You will never see this expression");
}
}
//+------------------------------------------------------------------+
Language Basics
2000-2014, MetaQuotes Software Corp.
106
//| the function always returns false |
//+------------------------------------------------------------------+
bool func_false()
{
Print("Function func_false()");
return(false);
}
//+------------------------------------------------------------------+
//| the function always returns true |
//+------------------------------------------------------------------+
bool func_true()
{
Print("Function func_true()");
return(true);
}
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
107
Bitwise Operations
Complement to One
Complement of the variable value up to one. The value of the expression contains 1 in all digits where
the variable value contains 0, and 0 in all digits where the variable contains 1.
b = ~n;
Example:
char a='a',b;
b=~a;
Print("a = ",a, " b = ",b);
// The result will be:
// a = 97 b = -98
Right Shift
The binary representation of x is shifted to the right by y digits. If the value to shift is of the unsigned
type, the logical right shift is made, i.e. the freed left-side bits will be filled with zeroes.
If the value to shift is of a sign type, the arithmetic right shift is made, i.e. the freed left-side digits
will be filled with the value of a sign bit (if the number is positive, the value of the sign bit is 0; if the
number is negative, the value of the sign bit is 1).
x = x >> y;
Example:
char a='a',b='b';
Print("Before: a = ",a, " b = ",b);
//--- shift to the right
b=a>>1;
Print("After: a = ",a, " b = ",b);
// The result will be:
// Before: a = 97 b = 98
// After: a = 97 b = 48
Left Shift
The binary representation of x is shifted to the left by y digits, the freed right-side digits are filled
with zeros.
x = x << y;
Example:
char a='a',b='b';
Print("Before: a = ",a, " b = ",b);
//--- shift to the left
b=a<<1;
Print("After: a = ",a, " b = ",b);
Language Basics
2000-2014, MetaQuotes Software Corp.
108
// The result will be:
// Before: a = 97 b = 98
// After: a = 97 b = -62
It is not recommended to shift by the number of bits larger or equal to the length of the variable
shifted, because the result of such an operation is undefined.
Bitwise AND Operation
The bitwise AND operation of binary-coded x and y representations. The value of the expression
contains a 1 (TRUE) in all digits where both x and y contain non-zero, and it contains 0 (FALSE) in all
other digits.
b = ((x & y) != 0);
Example:
char a='a',b='b';
//--- AND operation
char c=a&b;
Print("a = ",a," b = ",b);
Print("a & b = ",c);
// The result will be:
// a = 97 b = 98
// a & b = 96
Bitwise OR Operation
The bitwise OR operation of binary representations of x and y. The value of the expression contains 1
in all digits where x or y does not contain 0, and it contains 0 in all other digits.
b = x | y;
Example:
char a='a',b='b';
//--- OR operation
char c=a|b;
Print("a = ",a," b = ",b);
Print("a | b = ",c);
// The result will be:
// a = 97 b = 98
// a | b = 99
Bitwise Exclusive Operation OR
The bitwise exclusive OR (eXclusive OR) operation of binary representations of x and y. The value of
the expression contains a 1 in all digits where x and y have different binary values, and it contains 0 in
all other digits.
b = x ^ y;
Example:
Language Basics
2000-2014, MetaQuotes Software Corp.
109
char a='a', b='b';
//--- Excluding OR operation
char c=a^b;
Print("a = ",a," b = ",b);
Print("a ^ b = ",c);
// The result will be:
// a = 97 b = 98
// a ^ b = 99
Bitwise operations are performed with integers only.
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
110
Other operations
Indexing ( [] )
When addressing the i-th element of the array, the expression value is the value of a variable with the
serial number i.
Example:
array[i] = 3; // Assign the value of 3 to i-th element of the array.
Only an integer can be index of an array. Four-dimensional and below arrays are allowed. Each
measurement is indexed from 0 to measurement size-1. In particular case, for a one-dimensional
array consisting of 50 elements, the reference to the first element will look like array [0], that to the
last element will be array [49].
When addressing beyond the array, the executing subsystem will generate a critical error, and the
program will be stopped.
Calling Function with x1, x2 ,..., xn Arguments
Each argument can represent a constant, variable, or expression of the corresponding type. The
arguments passed are separated by commas and must be inside of parentheses, the opening
parenthesis must follow the name of the called function.
The expression value is the value returned by the function. If the return value is of void type, such
function call cannot be placed to the right in the assignment operation. Please make sure that the
expressions x1,..., xn are executed exactly in this order.
Example:
int length=1000000;
string a="a",b="b",c;
//---Other Operations
int start=GetTickCount(),stop;
long i;
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);
Comma Operation ( , )
Expressions separated by commas are executed from left to right. All side effects of the left
expression calculation can appear before the right expression is calculated. The result type and value
coincide with those of the right expression. The list of parameters to be passed (see above) can be
considered as an example.
Example:
Language Basics
2000-2014, MetaQuotes Software Corp.
111
for(i=0,j=99; i<100; i++,j--) Print(array[i][j]);
Dot Operator ( . )
For the direct access to the public members of structures and classes the dot operation is used.
Syntax:
Variable_name_of_structure_type.Member_name
Example:
struct SessionTime
{
string sessionName;
int startHour;
int startMinutes;
int endHour;
int endMinutes;
} st;
st.sessionName="Asian";
st.startHour=0;
st.startMinutes=0;
st.endHour=9;
st.endMinutes=0;
Scope Resolution Operation ( :: )
Each function in a mql5 program has its own execution scope. For example, the Print() system function
is performed in a global scope. Imported functions are called in the scope of the corresponding import.
Method functions of classes have the scope of the corresponding class. The syntax of the scope
resolution operation is as follows:
[Scope_name]::Function_name(parameters)
If there is no scope name, this is the explicit direction to use the global scope. If there is no scope
resolution operation, the function is sought in the nearest scope. If there is no function in the local
scope, the search is conducted in the global scope.
The scope resolution operation is also used to define function-class member.
type Class_name::Function_name(parameters_description)
{
// function body
}
Example:
#property script_show_inputs
#import "kernel32.dll"
int GetLastError(void);
#import
Language Basics
2000-2014, MetaQuotes Software Corp.
112
class CCheckContext
{
int m_id;
public:
CCheckContext() { m_id=1234; }
protected:
int GetLastError() { return(m_id); }
};
class CCheckContext2 : public CCheckContext
{
int m_id2;
public:
CCheckContext2() { m_id2=5678; }
void Print();
protected:
int GetLastError() { return(m_id2); }
};
void CCheckContext2::Print()
{
::Print("Terminal GetLastError",::GetLastError());
::Print("kernel32 GetLastError",kernel32::GetLastError());
::Print("parent GetLastError",CCheckContext::GetLastError());
::Print("our GetLastError",GetLastError());
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
CCheckContext2 test;
test.Print();
}
//+------------------------------------------------------------------+
Operation of Obtaining Data Type Size or Size of Any Data Type
Object ( sizeof )
Using the sizeof operation, the memory size corresponding to an identifier or type can be defined. The
sizeof operation is of the following format:
Example:
sizeof(expression)
Any identifier, or type name enclosed in brackets can be used as an expression. Note that the void
type name can't be used, and the identifier cannot belong to the field of bits, or be a function name.
If the expression is the name of a static array (i.e. the first dimension is given), then the result is the
size of the whole array (i.e. the product of the number of elements and the length of the type). If the
Language Basics
2000-2014, MetaQuotes Software Corp.
113
expression is the name of a dynamic array (the first dimension is not specified), the result will be the
size of the object of the dynamic array.
When sizeof is applied to the name of structure or class type, or to the identifier of the structure or
class type, the result is the actual size of the structure or class.
Example:
struct myStruct
{
char h;
int b;
double f;
} str;
Print("sizeof(str) = ",sizeof(str));
Print("sizeof(myStruct) = ",sizeof(myStruct));
The size is calculated at the compilation stage.
See also
Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
114
Precedence Rules
Each group of operations in the table has the same priority. The higher the priority of operations is,
the higher it is position of the group in the table. The precedence rules determine the grouping of
operations and operands.
Attention: Precedence of operations in the MQL5 language corresponds to the priority adopted in C++,
and differs from the priority given in the MQL4 language.
Operation Desciption Execution Order
()
[]
.
Function Call
Referencing to an array
element
Referencing to a structure
element
From left to right
!
~

++
--
(type)
sizeof
Logical negation
Bitwise negation (complement)
Sign changing
Increment by one
Decrement by one
Typecasting
Determining size in bytes
Right to left
*
/
%
Multiplication
Division
Module division
From left to right
+

Addition
Subtraction
From left to right
<<
>>
Left shift
Right shift
From left to right
<
<=
>
>=
Less than
Less than or equal
Greater than
Greater than or equal
From left to right
==
!=
Equal
Not equal
From left to right
& Bitwise AND operation From left to right
^ Bitwise exclusive OR From left to right
| Bitwise OR operation From left to right
&& Logical AND operation From left to right
|| Logical OR operation From left to right
?: Conditional Operator Right to left
=
*=
Assignment
Multiplication with assignment
Right to left
Language Basics
2000-2014, MetaQuotes Software Corp.
115
/=
%=
+=
-=
<<=
>>=
&=
^=
|=
Division with assignment
Module with assignment
Addition with assignment
Subtraction with assignment
Left shift with assignment
Right shift with assignment
Bitwise AND with assignment
Exclusive OR with assignment
Bitwise OR with assignment
, Comma From left to right
To change the operation execution order, parenthesis that are of higher priority are used.
Language Basics
2000-2014, MetaQuotes Software Corp.
116
Operators
Language operators describe some algorithmic operations that must be executed to accomplish a task.
The program body is a sequence of such operators. Operators following one by one are separated by
semicolons.
Operator Description
Compound operator {} One or more operators of any type, enclosed in
curly braces {}
Expression operator (;) Any expression that ends with a semicolon (;)
return operator Terminates the current function and returns
control to the calling program
if-else conditional operator Is used when it's necessary to make a choice
?: conditional operator A simple analog of the if-else conditional
operator
switch selection operator Passes control to the operator, which
corresponds to the expression value
while loop operator Performs an operator until the expression
checked becomes false. The expression is
checked before each iteration
for loop operator Performs an operator until the expression
checked becomes false. The expression is
checked before each iteration
do-while loop operator Performs an operator until the expression
checked becomes false. The end condition is
checked, after each loop. The loop body is
always executed at least once.
break operator Terminates the execution of the nearest
attached external operator switch, while, do-
while or for
continue operator Passes control to the beginning of the nearest
external loop operator while, do-while or for
new operator Creates an object of the appropriate size and
returns a descriptor of the created object.
delete operator Deletes the object created by the new operator
One operator can occupy one or more lines. Two or more operators can be located in the same line.
Operators that control over the execution order (if, if-else, switch, while and for), can be nested into
each other.
Example:
if(Month() == 12)
Language Basics
2000-2014, MetaQuotes Software Corp.
117
if(Day() == 31) Print("Happy New Year!");
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
118
Compound Operator
A compound operator (a block) consists of one or more operators of any type, enclosed in braces {}.
The closing brace must not be followed by a semicolon (;).
Example:
if(x==0)
{
Print("invalid position x = ",x);
return;
}
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
119
Expression Operator
Any expression followed by a semicolon (;) is the operator. Here are some examples of expression
operators.
Assignment Operator
Identifier = expression;
x=3;
y=x=3;
bool equal=(x==y);
Assignment operator can be used many times in an expression. In this case, the expression is
processed from left to right:
Function Calling Operator
Function_name (argument1,..., argumentN);
FileClose(file);
Empty Operator
Consists only of a semicolon (;) and is used to denote an empty body of a control operator.
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
120
Return Operator
The return operator terminates the current function execution and returns control to the calling
program. The expression calculation result is returned to the calling function. The expression can
contain an assignment operator.
Example:
int CalcSum(int x, int y)
{
return(x+y);
}
In functions with the void return type, the return operator without expression must be used:
void SomeFunction()
{
Print("Hello!");
return; // this operator can be removed
}
The right brace of the function means implicit execution of the return operator without expression.
What can be returned: simple types, simple structures, object pointers. With the return operator you
can't return any arrays, class objects, variables of compound structure type.
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
121
If-Else Conditional Operator
The IF - ELSE operator is used when a choice must be made. Formally, the syntax is as follows:
if (expression)
operator1
else
operator2
If the expression is true, operator1 is executed and control is given to the operator that follows
operator2 (operator2 is not executed). If the expression is false, operator2 is executed.
The else part of the if operator can be omitted. Thus, a divergence may appear in nested if operators
with omitted else part. In this case, else addresses to the nearest previous if operator in the same
block that has no else part.
Examples:
//--- The else part refers to the second if operator:
if(x>1)
if(y==2) z=5;
else z=6;
//--- The else part refers to the first if operator:
if(x>l)
{
if(y==2) z=5;
}
else z=6;
//--- Nested operators
if(x=='a')
{
y=1;
}
else if(x=='b')
{
y=2;
z=3;
}
else if(x=='c')
{
y=4;
}
else Print("ERROR");
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
122
Ternary Operator ?:
The general form of the ternary operator is as follows:
expression1 ? expression2 : expression3
For the first operand - "expression1" - any expression that results in a bool type value can be used. If
the result is true, then the operator set by the second operand, i.e. "expression2" is executed.
If the first operand is false, the third operand - "expression3" is performed. The second and third
operands, i.e. "expression2" and "expression3" should return values of one type and should not be of
void type. The result of the conditional operator execution is the result of expression2 or result of the
expression3, depending on the result of expression1.
//--- normalize difference between open and close prices for a day range
double true_range = (High==Low)?0:(Close-Open)/(High-Low);
This entry is equivalent to the following:
double true_range;
if(High==Low)true_range=0; // if High and Low are equal
else true_range=(Close-Open)/(High-Low); // if the range is not null
Operator Use Restrictions
Based on the value of "expression1", the operator must return one of the two values - either
"expression2" or "expression3". There are several limitations to these expressions:
1. Do not confuse the user-defined type with the simple type or enumeration. NULL can be used for
the pointer.
2. If types of values are simple, the operator will be of the maximum type (see Type casting).
3. If one of the values is an enumeration and the second one is of a numeric type, the enumeration is
replaced by int and the second rule is applied.
4. If both values are enumerations, their types must be identical, and the operator will be of type
enumeration.
Restrictions for the user-defined types (classes or structures):
a) Types must be identical or one should be derived from the other one.
b) If types are not identical (inheritance), then the child is implicitly cast to the parent, i.e. the
operator will be of the parent type.
c) Do not confuse the object and the pointer both expressions are either objects or pointers. NULL
can be used for the pointer.
Note
Be careful when using the conditional operator as an argument of an overloaded function, because the
type of the result of a conditional operator is defined at the time of program compilation. And this
type is defined as the larger of the types "expression2" and "expression3".
Example:
Language Basics
2000-2014, MetaQuotes Software Corp.
123
void func(double d) { Print("double argument: ",d); }
void func(string s) { Print("string argument: ",s); }
bool Expression1=true;
double Expression2=M_PI;
string Expression3="3.1415926";
void OnStart()
{
func(Expression2);
func(Expression3);
func(Expression1?Expression2:Expression3); // warning on implicit casting to string
func(!Expression1?Expression2:Expression3); // warning on implicit casting to string
}
// Result:
// double argument: 3.141592653589793
// string argument: 3.1415926
// string argument: 3.141592653589793
// string argument: 3.1415926
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
124
Switch Operator
Compares the expression value with constants in all the case variants and passes control to the
operator that corresponds to the expression value. Each variant of case can be marked with an integer
constant, a literal constant or a constant expression. The constant expression can't contain variables
or function calls. Expression of the switch operator must be of integer type.
switch(expression)
{
case constant: operators
case constant: operators
...
default: operators
}
Operators marked by the default label are executed if none of the constants in case operators is equal
to the expression value. The default variant should not be necessarily declared and should not be
necessarily the last one. If none of the constants corresponds to the expression value and the default
variant is not available, no actions are executed.
The case keyword with a constant are just labels, and if operators are executed for some case variant,
the program will further execute the operators of all subsequent variants until the break operator
occurs. It allows to bind a sequence of operators with several variants.
A constant expression is calculated during compilation. No two constants in one switch operator can
have the same value.
Examples:
//--- First example
switch(x)
{
case 'A':
Print("CASE A");
break;
case 'B':
case 'C':
Print("CASE B or C");
break;
default:
Print("NOT A, B or C");
break;
}
//--- Second example
string res="";
int i=0;
switch(i)
{
case 1:
res=i;break;
Language Basics
2000-2014, MetaQuotes Software Corp.
125
default:
res="default";break;
case 2:
res=i;break;
case 3:
res=i;break;
}
Print(res);
/*
Result
default
*/
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
126
While Loop Operator
The while operator consists of a checked expression and the operator, which must be fulfilled:
while(expression)
operator;
If the expression is true, the operator is executed until the expression becomes false. If the
expression is false, the control is passed to the next operator. The expression value is defined before
the operator is executed. Therefore, if the expression is false from the very beginning, the operator
will not be executed at all.
Note
If it is expected that a large number of iterations will be handled in a loop, it is advisable that you
check the fact of forced program termination using the IsStopped() function.
Example:
while(k<n && !IsStopped())
{
y=y*x;
k++;
}
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
127
For Loop Operator
The for operator consists of three expressions and an executable operator:
for(expression1; expression2; expression3)
operator;
Expression1 describes the loop initialization. Expression2 checks the conditions of the loop
termination. If it is true, the loop body for is executed. The loop repeats expression2 until it becomes
false. If it is false, the loop is terminated, and control is given to the next operator. Expression3 is
calculated after each iteration.
The for operator is equivalent to the following succession of operators:
expression1;
while(expression2)
{
operator;
expression3;
};
Any of the three or all three expressions can be absent in the for operator, but the semicolons (;) that
separate them must not be omitted. If expression2 is omitted, it is considered constantly true. The
for(;;) operator is a continuous loop, equivalent to the while(1) operator. Each expression 1 or 3 can
consist of several expressions combined by a comma operator ','.
Note
If it is expected that a large number of iterations will be handled in a loop, it is advisable that you
check the fact of forced program termination using the IsStopped() function.
Examples:
for(x=1;x<=7000; x++)
{
if(IsStopped())
break;
Print(MathPower(x,2));
}
//--- Another example
for(;!IsStopped();)
{
Print(MathPower(x,2));
x++;
if(x>10) break;
}
//--- Third example
for(i=0,j=n-l;i<n && !IsStopped();i++,j--) a[i]=a[j];
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
128
Loop Operator do while
The for and while loops check the termination at the beginning, not at the end of a loop. The third
loop operator do - while checks the condition of termination at the end, after each loop iteration. The
loop body is always executed at least once.
do
operator;
while(expression)
First the operator is executed, then the expression is calculated. If it is true, then the operator is
executed again, and so on. If the expression becomes false, the loop terminates.
Note
If it is expected that a large number of iterations will be handled in a loop, it is advisable that you
check the fact of forced program termination using the IsStopped() function.
Example:
//--- Calculate the Fibonacci series
int counterFibonacci=15;
int i=0,first=0,second=1;
int currentFibonacciNumber;
do
{
currentFibonacciNumber=first+second;
Print("i = ",i," currentFibonacciNumber = ",currentFibonacciNumber);
first=second;
second=currentFibonacciNumber;
i++; // without this operator an infinite loop will appear!
}
while(i<counterFibonacci && !IsStopped());
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
129
Break Operator
The break operator terminates the execution of the nearest nested outward switch, while, do-while or
for operator. The control is passed to the operator that follows the terminated one. One of the
purposes of this operator is to finish the looping execution when a certain value is assigned to a
variable.
Example:
//--- searching for the first zero element
for(i=0;i<array_size;i++)
if(array[i]==0)
break;
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
130
Continue Operator
The continue operator passes control to the beginning of the nearest outward loop while, do-while or
for operator, the next iteration being called. The purpose of this operator is opposite to that of break
operator.
Example:
//--- Sum of all nonzero elements
int func(int array[])
{
int array_size=ArraySize(array);
int sum=0;
for(int i=0;i<array_size; i++)
{
if(a[i]==0) continue;
sum+=a[i];
}
return(sum);
}
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
131
Object Create Operator new
The new operator automatically creates an object of a corresponding size, calls the object constructor
and returns a descriptor of created object. In case of failure, the operator returns a null descriptor
that can be compared with the NULL constant.
The new operator can be applied only to class objects. It can't be applied to structures.
The operator shall not be used to create arrays of objects. To do this, use the ArrayResize() function.
Example:
//+------------------------------------------------------------------+
//| Figure creation |
//+------------------------------------------------------------------+
void CTetrisField::NewShape()
{
m_ypos=HORZ_BORDER;
//--- randomly create one of the 7 possible shapes
int nshape=rand()%7;
switch(nshape)
{
case 0: m_shape=new CTetrisShape1; break;
case 1: m_shape=new CTetrisShape2; break;
case 2: m_shape=new CTetrisShape3; break;
case 3: m_shape=new CTetrisShape4; break;
case 4: m_shape=new CTetrisShape5; break;
case 5: m_shape=new CTetrisShape6; break;
case 6: m_shape=new CTetrisShape7; break;
}
//--- draw
if(m_shape!=NULL)
{
//--- pre-settings
m_shape.SetRightBorder(WIDTH_IN_PIXELS+VERT_BORDER);
m_shape.SetYPos(m_ypos);
m_shape.SetXPos(VERT_BORDER+SHAPE_SIZE*8);
//--- draw
m_shape.Draw();
}
//---
}
It should be noted that object descriptor is not a pointer to memory address.
An object created with the new operator must be explicitly removed using the delete operator.
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
132
Object Delete Operator delete
The delete operator deletes an object created by the new operator, calls the corresponding class
destructor and frees up memory occupied by the object. A real descriptor of an existing object is used
as an operand. After the delete operation is executed, the object descriptor becomes invalid.
Example:
//--- delete figure
delete m_shape;
m_shape=NULL;
//--- create a new figure
NewShape();
See also
Initialization of Variables, Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
133
Functions
Every task can be divided into subtasks, each of which can either be directly represented in the form
of a code, or divided into smaller sub-tasks. This method is called stepwise refinement. Functions are
used for writing the code of sub-tasks to be solved. The code that describes what a function does is
called function definition:
function_header
{
instructions
}
All that is before the first brace is the header of the function definition, and what is between braces is
the body of the function definition. The function header includes a description of the return value
type, name (identifier) and formal parameters. The number of parameters passed to the function is
limited and cannot exceed 64.
The function can be called from other parts of the program as many times as necessary. In fact, the
return type, function identifier and parameter types constitute the function prototype.
Function prototype is the function declaration, but not its definition. Due to the explicit declaration of
the return type and a list of argument types, the strict type checking and implicit typecasting are
possible during function calls. Very often function declarations are used in classes to improve the code
readability.
The function definition must exactly match its declaration. Each declared function must be defined.
Example:
double // return value type
linfunc (double a, double b) // function name and parameter list
{
// composite operator
return (a + b); // return value
}
The return operator can return the value of an expression located in this operator. If necessary, the
expression value is converted to the function result type. What can be returned: simple types, simple
structures, object pointers. With the return operator you can't return any arrays, class objects,
variables of compound structure type.
A function that returns no value should be described as that of void type.
Example:
void errmesg(string s)
{
Print("error: "+s);
}
Parameters passed to the function can have default values, which are defined by constants of that
Language Basics
2000-2014, MetaQuotes Software Corp.
134
type.
Example:
int somefunc(double a,
double d=0.0001,
int n=5,
bool b=true,
string s="passed string")
{
Print("Required parameter a = ",a);
Print("Pass the following parameters: d = ",d," n = ",n," b = ",b," s = ",s);
return(0);
}
If any of parameters has a default value, all subsequent parameters must also have default values.
Example of incorrect declaration:
int somefunc(double a,
double d=0.0001, // default value 0.0001 declared
int n, // default value is not specified !
bool b, // default value is not specified !
string s="passed string")
{
}
See also
Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
135
Function Call
If a name that has not been described before, appears in the expression and is followed by the left
parenthesis, it is contextually considered as the name of a function.
function_name (x1, x2,..., xn)
Arguments (formal parameters) are passed by value, i.e. each expression x1,..., xn is calculated, and
the value is passed to the function. The order of expressions calculation and the order of values
loading are not guaranteed. During the execution, the system checks the number and type of
arguments passed to the function. Such way of addressing to the function is called a value call.
Function call is an expression, the value of which is the value returned by the function. The function
type described above must correspond with the type of the return value. The function can be declared
or described in any part of the program on the global scope, i.e., outside other functions. The function
cannot be declared or described inside of another function.
Examples:
int start()
{
double some_array[4]={0.3, 1.4, 2.5, 3.6};
double a=linfunc(some_array, 10.5, 8);
//...
}
double linfunc(double x[], double a, double b)
{
return (a*x[0] + b);
}
At calling of a function with default parameters, the list of parameters to be passed can be limited,
but not before the first default parameter.
Examples:
void somefunc(double init,
double sec=0.0001, //set default values
int level=10);
//...
somefunc(); // Wrong call. The first parameter must be presented.
somefunc(3.14); // Correct call
somefunc(3.14,0.0002); // Correct call
somefunc(3.14,0.0002,10); // Correct call
When calling a function, one may not skip parameters, even those having default values:
somefunc(3.14, , 10); // Wrong call -> the second parameter was skipped.
See also
Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
136
Passing Parameters
There are two methods, by which the machine language can pass arguments to a subprogram
(function). The first method is to send a parameter by value. This method copies the argument value
into a formal function parameter. Therefore, any changes in this parameter within the function have
no influence on the corresponding call argument.
//+------------------------------------------------------------------+
//| Passing parameters by value |
//+------------------------------------------------------------------+
double FirstMethod(int i,int j)
{
double res;
//---
i*=2;
j/=2;
res=i+j;
//---
return(res);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int a=14,b=8;
Print("a and b before call:",a," ",b);
double d=FirstMethod(a,b);
Print("a and b after call:",a," ",b);
}
//--- Result of script execution
// a and b before call: 14 8
// a and b after call: 14 8
The second method is to pass by reference. In this case, reference to a parameter (not its value) is
passed to a function parameter. Inside the function, it is used to refer to the actual parameter
specified in the call. This means that the parameter changes will affect the argument used to call the
function.
//+------------------------------------------------------------------+
//| Passing parameters by reference |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
{
double res;
//---
i*=2;
j/=2;
res=i+j;
Language Basics
2000-2014, MetaQuotes Software Corp.
137
//---
return(res);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int a=14,b=8;
Print("a and b before call:",a," ",b);
double d=SecondMethod(a,b);
Print("a and b after call:",a," ",b);
}
//+------------------------------------------------------------------+
//--- result of script execution
// a and b before call: 14 8
// a and b after call: 28 4
MQL5 uses both methods, with one exception: arrays, structure type variables and class objects are
always passed by reference. In order to avoid changes in actual parameters (arguments passed at
function call) use the access specifier const. When trying to change the contents of a variable declared
with the const specifier, the compiler will generate an error.
Note
It should be noted that parameters are passed to a function in reversed order, i.e., first the last
parameter is calculated and passed, and then the last but one, etc. The last calculated and passed
parameter is the one that stands first after opening parenthesis.
Example:
void OnStart()
{
//---
int a[]={0,1,2};
int i=0;
func(a[i],a[i++],"First call (i = "+string(i)+")");
func(a[i++],a[i],"Second call (i = "+string(i)+")");
// Result:
// First call (i = 0) : par1 = 1 par2 = 0
// Second call (i = 1) : par1 = 1 par2 = 1
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void func(int par1,int par2,string comment)
{
Language Basics
2000-2014, MetaQuotes Software Corp.
138
Print(comment,": par1 = ",par1," par2 = ",par2);
}
In first call (see example above) the i variable is first used in strings concatenation:
"First call (i = "+string(i)+")"
Here its value doesn't change. Then the i variable is used in calculation of the a[i++] array element,
i.e. when array element with index i is accessed, the i variable is incremented. And only after that the
first parameter with changed value of i variable is calculated.
In the second call the same value of i (calculated on the first phase of function calling) is used when
calculating all three parameters. Only after the first parameters is calculated the i variable is changed
again.
See also
Visibility Scope and Lifetime of Variables, Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
139
Function Overloading
Usually the function name tends to reflect its main purpose. As a rule, readable programs contain
various well selected identifiers. Sometimes different functions are used for the same purposes. Let's
consider, for example, a function that calculates the average value of an array of double precision
numbers and the same function, but operating with an array of integers. Both are convenient to be
called AverageFromArray:
//+------------------------------------------------------------------+
//| The calculation of average for an array of double type |
//+------------------------------------------------------------------+
double AverageFromArray(const double & array[],int size)
{
if(size<=0) return 0.0;
double sum=0.0;
double aver;
//---
for(int i=0;i<size;i++)
{
sum+=array[i]; // Summation for the double
}
aver=sum/size; // Just divide the sum by the number
//---
Print("Calculation of the average for an array of double type");
return aver;
}
//+------------------------------------------------------------------+
//| The calculation of average for an array of int type |
//+------------------------------------------------------------------+
double AverageFromArray(const int & array[],int size)
{
if(size<=0) return 0.0;
double aver=0.0;
int sum=0;
//---
for(int i=0;i<size;i++)
{
sum+=array[i]; // Summation for the int
}
aver=(double)sum/size;// Give the amount of type double, and divide
//---
Print("Calculation of the average for an array of int type");
return aver;
}
Each function contains the message output via the Print() function;
Print("Calculation of the average for an array of int type");
The compiler selects a necessary function in accordance with the types of arguments and their
Language Basics
2000-2014, MetaQuotes Software Corp.
140
quantity. The rule, according to which the choice is made, is called the signature matching algorithm.
A signature is a list of types used in the function declaration.
Example:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int a[5]={1,2,3,4,5};
double b[5]={1.1,2.2,3.3,4.4,5.5};
double int_aver=AverageFromArray(a,5);
double double_aver=AverageFromArray(b,5);
Print("int_aver = ",int_aver," double_aver = ",double_aver);
}
//--- Result of the script
// Calculate the average for an array of int type
// Calculate the average for an array of double type
// int_aver= 3.00000000 double_aver= 3.30000000
Function overloading is a process of creating several functions with the same name, but different
parameters. This means that in overloaded variants of a function, the number of arguments and/or
their type must be different. A specific function variant is selected based on the correspondence of
the list of arguments when calling the function, to the list of parameters in the function declaration.
When an overloaded function is called, the compiler must have an algorithm to select the appropriate
function. The algorithm that performs this choice depends on castings of what types are present. The
best correspondence must be unique. An overloaded function must be the best match among all the
other variants for at least one argument. At the same time it must match for all other arguments not
worse than other variants.
Below is a matching algorithm for each argument.
Algorithm of Choosing an Overloaded Function
1. Use strict matching (if possible).
2. Try standard type increase.
3. Try standard typecasting.
The standard type increase is better than other standard conversions. Increase is the conversion of
float to double, of bool, char, short or enum to int. Typecasting of arrays of similar integer types also
belongs to typecasting. Similar types are: bool, char, uchar, since all the three types are single-byte
integers; double-byte integers short and ushort; 4-byte integers int, uint, and color; long, ulong, and
datetime.
Of course, the strict matching is the best. To achieve such a consistency typecasting can be used. The
compiler cannot cope with ambiguous situations. Therefore you should not rely on subtle differences of
types and implicit conversions that make the overloaded function unclear.
Language Basics
2000-2014, MetaQuotes Software Corp.
141
If you doubt, use explicit conversion to ensure strict compliance.
Examples of overloaded functions in MQL5 can be seen in the example of ArrayInitialize() functions.
Function overloading rules apply to overload of class methods.
Overloading of system functions is allowed, but it should be observed that the compiler is able to
accurately select the necessary function. For example, we can overload the system function MathMax()
in 4 different ways, but only two variants are correct.
Example:
// 1. overload is allowed - function differs from built-in MathMax() function in the number of parameters
double MathMax(double a,double b,double c);
// 2. overload is not allowed!
// number of parameters is different, but the last has a default value
// this leads to the concealment of the system function when calling, which is unacceptable
double MathMax(double a,double b,double c=DBL_MIN);
// 3. overload is allowed - normal overload by type of parameters a and b
double MathMax(int a,int b);
// 4. overload is not allowed!
// the number and types of parameters are the same as in original double MathMax(double a,double b)
int MathMax(double a,double b);
See also
Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
142
Operation Overloading
For ease of code reading and writing, overloading of some operations is allowed. Overloading operator
is written using the keyword operator. The following operators can be overloaded:
binary +,-,/,*,%,<<,>>,==,!=,<,>,<=,>=,=,+=,-=,/=,*=,%=,&=,|=,^=,<<=,>>=,&&,||,&,|,^
unary +,-,++,--,!,~
assignment operator =
indexing operator []
Operation overloading allows the use of the operating notation (written in the form of simple
expressions) for complex objects - structures and classes. Writing expressions using overloaded
operations simplifies the view of the source code, because a more complex implementation is hidden.
For example, consider complex numbers, which consist of real and imaginary parts. They are widely
used in mathematics. The MQL5 language has no data type to represent complex numbers, but it is
possible to create a new data type in the form of a structure or class. Declare the complex structure
and define four methods that implement four arithmetic operations:
//+------------------------------------------------------------------+
//| A structure for operations with complex numbers |
//+------------------------------------------------------------------+
struct complex
{
double re; // Real part
double im; // Imaginary part
//--- Constructors
complex():re(0.0),im(0.0) { }
complex(const double r):re(r),im(0.0) { }
complex(const double r,const double i):re(r),im(i) { }
complex(const complex &o):re(o.re),im(o.im) { }
//--- Arithmetic operations
complex Add(const complex &l,const complex &r) const; // Addition
complex Sub(const complex &l,const complex &r) const; // Subtraction
complex Mul(const complex &l,const complex &r) const; // Multiplication
complex Div(const complex &l,const complex &r) const; // Division
};
Now, in our code we can declare variables representing complex numbers, and work with them.
For example:
void OnStart()
{
//--- Declare and initialize variables of a complex type
complex a(2,4),b(-4,-2);
PrintFormat("a=%.2f+i*%.2f, b=%.2f+i*%.2f",a.re,a.im,b.re,b.im);
//--- Sum up two numbers
complex z;
Language Basics
2000-2014, MetaQuotes Software Corp.
143
z=a.Add(a,b);
PrintFormat("a+b=%.2f+i*%.2f",z.re,z.im);
//--- Multiply two numbers
z=a.Mul(a,b);
PrintFormat("a*b=%.2f+i*%.2f",z.re,z.im);
//--- Divide two numbers
z=a.Div(a,b);
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//---
}
But it would be more convenient to use usual operators "+", "-", "*" and "/" for ordinary arithmetic
operations with complex numbers.
Keyword operator is used for defining a member function that performs type conversion. Unary and
binary operations for class object variables can be overloaded as non-static member functions. They
implicitly act on the class object.
Most binary operations can be overloaded like regular functions that take one or both arguments as a
class variable or a pointer to an object of this class. For our type complex, overloading in the
declaration will look like this:
//--- Operators
complex operator+(const complex &r) const { return(Add(this,r)); }
complex operator-(const complex &r) const { return(Sub(this,r)); }
complex operator*(const complex &r) const { return(Mul(this,r)); }
complex operator/(const complex &r) const { return(Div(this,r)); }
The full example of the script:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Declare and initialize variables of type complex
complex a(2,4),b(-4,-2);
PrintFormat("a=%.2f+i*%.2f, b=%.2f+i*%.2f",a.re,a.im,b.re,b.im);
//a.re=5;
//a.im=1;
//b.re=-1;
//b.im=-5;
//--- Sum up two numbers
complex z=a+b;
PrintFormat("a+b=%.2f+i*%.2f",z.re,z.im);
//--- Multiply two numbers
z=a*b;
PrintFormat("a*b=%.2f+i*%.2f",z.re,z.im);
//--- Divide two numbers
z=a/b;
Language Basics
2000-2014, MetaQuotes Software Corp.
144
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//---
}
//+------------------------------------------------------------------+
//| A structure for operations with complex numbers |
//+------------------------------------------------------------------+
struct complex
{
double re; // Real part
double im; // Imaginary part
//--- Constructors
complex():re(0.0),im(0.0) { }
complex(const double r):re(r),im(0.0) { }
complex(const double r,const double i):re(r),im(i) { }
complex(const complex &o):re(o.re),im(o.im) { }
//--- Arithmetic operations
complex Add(const complex &l,const complex &r) const; // Addition
complex Sub(const complex &l,const complex &r) const; // Subtraction
complex Mul(const complex &l,const complex &r) const; // Multiplication
complex Div(const complex &l,const complex &r) const; // Division
//--- Binary operators
complex operator+(const complex &r) const { return(Add(this,r)); }
complex operator-(const complex &r) const { return(Sub(this,r)); }
complex operator*(const complex &r) const { return(Mul(this,r)); }
complex operator/(const complex &r) const { return(Div(this,r)); }
};
//+------------------------------------------------------------------+
//| Addition |
//+------------------------------------------------------------------+
complex complex::Add(const complex &l,const complex &r) const
{
complex res;
//---
res.re=l.re+r.re;
res.im=l.im+r.im;
//--- Result
return res;
}
//+------------------------------------------------------------------+
//| Subtraction |
//+------------------------------------------------------------------+
complex complex::Sub(const complex &l,const complex &r) const
{
complex res;
//---
res.re=l.re-r.re;
res.im=l.im-r.im;
//--- Result
return res;
Language Basics
2000-2014, MetaQuotes Software Corp.
145
}
//+------------------------------------------------------------------+
//| Multiplication |
//+------------------------------------------------------------------+
complex complex::Mul(const complex &l,const complex &r) const
{
complex res;
//---
res.re=l.re*r.re-l.im*r.im;
res.im=l.re*r.im+l.im*r.re;
//--- Result
return res;
}
//+------------------------------------------------------------------+
//| Division |
//+------------------------------------------------------------------+
complex complex::Div(const complex &l,const complex &r) const
{
//--- Empty complex number
complex res(EMPTY_VALUE,EMPTY_VALUE);
//--- Check for zero
if(r.re==0 && r.im==0)
{
Print(__FUNCTION__+": number is zero");
return(res);
}
//--- Auxiliary variables
double e;
double f;
//--- Selecting calculation variant
if(MathAbs(r.im)<MathAbs(r.re))
{
e = r.im/r.re;
f = r.re+r.im*e;
res.re=(l.re+l.im*e)/f;
res.im=(l.im-l.re*e)/f;
}
else
{
e = r.re/r.im;
f = r.im+r.re*e;
res.re=(l.im+l.re*e)/f;
res.im=(-l.re+l.im*e)/f;
}
//--- Result
return res;
}
Language Basics
2000-2014, MetaQuotes Software Corp.
146
Most unary operations for classes can be overloaded as ordinary functions that accept a single class
object argument or a pointer to it. Add overloading of unary operations "-" and "!".
//+------------------------------------------------------------------+
//| A structure for operations with complex numbers |
//+------------------------------------------------------------------+
struct complex
{
double re; // Real part
double im; // Imaginary part
...
//--- Unary operators
complex operator-() const; // Unary minus
bool operator!() const; // Negation
};
...
//+------------------------------------------------------------------+
//| Overloading the "unary minus" operator |
//+------------------------------------------------------------------+
complex complex::operator-() const
{
complex res;
//---
res.re=-re;
res.im=-im;
//--- Result
return res;
}
//+------------------------------------------------------------------+
//| Overloading the "logical negation" operator |
//+------------------------------------------------------------------+
bool complex::operator!() const
{
//--- Are the real and imaginary parts of the complex number equal to zero?
return (re!=0 && im!=0);
}
Now we can check the value of a complex number for zero and get a negative value:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Declare and initialize variables of type complex
complex a(2,4),b(-4,-2);
PrintFormat("a=%.2f+i*%.2f, b=%.2f+i*%.2f",a.re,a.im,b.re,b.im);
//--- Divide the two numbers
Language Basics
2000-2014, MetaQuotes Software Corp.
147
complex z=a/b;
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//--- A complex number is equal to zero by default (in the default constructor re==0 and im==0)
complex zero;
Print("!zero=",!zero);
//--- Assign a negative value
zero=-z;
PrintFormat("z=%.2f+i*%.2f, zero=%.2f+i*%.2f",z.re,z.im, zero.re,zero.im);
PrintFormat("-zero=%.2f+i*%.2f",-zero.re,-zero.im);
//--- Check for zero once again
Print("!zero=",!zero);
//---
}
Note that we did not have to overload the assignment operator "=", as structures of simple types can
be directly copied one into each other. Thus, we can now write a code for calculations involving
complex numbers in the usual manner.
Overloading of the indexing operator allows to obtain the values of the arrays enclosed in an object, in
a simple and familiar way, and it also contributes to a better readability of the source code. For
example, we need to provide access to a symbol in the string at the specified position. A string in
MQL5 is a separate type string, which is not an array of symbols, but with the help of an overloaded
indexing operation we can provide a simple and transparent work in the generated CString class:
//+------------------------------------------------------------------+
//| Class to access symbols in string as in array of symbols |
//+------------------------------------------------------------------+
class CString
{
string m_string;

public:
CString(string str=NULL):m_string(str) { }
ushort operator[] (int x) { return(StringGetCharacter(m_string,x)); }
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- An array for receiving symbols from a string
int x[]={ 19,4,18,19,27,14,15,4,17,0,19,14,17,27,26,28,27,5,14,
17,27,2,11,0,18,18,27,29,30,19,17,8,13,6 };
CString str("abcdefghijklmnopqrstuvwxyz[ ]CS");
string res;
//--- Make up a phrase using symbols from the str variable
for(int i=0,n=ArraySize(x);i<n;i++)
{
res+=ShortToString(str[x[i]]);
}
Language Basics
2000-2014, MetaQuotes Software Corp.
148
//--- Show the result
Print(res);
}
Another example of overloading of the indexing operation is operations with matrices. The matrix
represents a two-dimensional dynamic array, the array size is not defined in advance. Therefore, you
cannot declare an array of form array[][] without specifying the size of the second dimension, and
then pass this array as a parameter. A possible solution is a special class CMatrix, which contains an
array of CRow class objects.
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Operations of addition and multiplication of matrices
CMatrix A(3),B(3),C();
//--- Prepare an array for rows
double a1[3]={1,2,3}, a2[3]={2,3,1}, a3[3]={3,1,2};
double b1[3]={3,2,1}, b2[3]={1,3,2}, b3[3]={2,1,3};
//--- Fill the matrices
A[0]=a1; A[1]=a2; A[2]=a3;
B[0]=b1; B[1]=b2; B[2]=b3;
//--- Output the matrices in the Experts log
Print("---- Elements of matrix A");
Print(A.String());
Print("---- Elements of matrix B");
Print(B.String());
//--- Addition of matrices
Print("---- Addition of matrices A and B");
C=A+B;
//--- Output the formatted string representation
Print(C.String());
//--- Multiplication of matrices
Print("---- Multiplication of matrices A and B");
C=A*B;
Print(C.String());
//--- Now we show how to get values in the style of dynamic arrays matrix[i][j]
Print("Output the values of matrix C elementwise");
//--- Go through the matrix rows - CRow objects - in a loop
for(int i=0;i<3;i++)
{
string com="| ";
//--- Form rows from the matrix for the value
for(int j=0;j<3;j++)
{
Language Basics
2000-2014, MetaQuotes Software Corp.
149
//--- Get the matrix element by the number of the row and column
double element=C[i][j];// [i] - Access to CRow in the array m_rows[] ,
// [j] - Overloaded operator of indexing in CRow
com=com+StringFormat("a(%d,%d)=%G ; ",i,j,element);
}
com+="|";
//--- Output the values of the row
Print(com);
}
}
//+------------------------------------------------------------------+
//| Class "Row" |
//+------------------------------------------------------------------+
class CRow
{
private:
double m_array[];
public:
//--- Constructors and a destructor
CRow(void) { ArrayResize(m_array,0); }
CRow(const CRow &r) { this=r; }
CRow(const double &array[]);
~CRow(void){};
//--- Number of elements in the row
int Size(void) const { return(ArraySize(m_array));}
//--- Returns a string with values
string String(void) const;
//--- Indexing operator
double operator[](int i) const { return(m_array[i]); }
//--- Assignment operators
void operator=(const double &array[]); // An array
void operator=(const CRow & r); // Another CRow object
double operator*(const CRow &o); // CRow object for multiplication
};
//+------------------------------------------------------------------+
//| Constructor for initializing a row with an array |
//+------------------------------------------------------------------+
void CRow::CRow(const double &array[])
{
int size=ArraySize(array);
//--- If the array is not empty
if(size>0)
{
ArrayResize(m_array,size);
//--- Fill with values
for(int i=0;i<size;i++)
m_array[i]=array[i];
}
//---
Language Basics
2000-2014, MetaQuotes Software Corp.
150
}
//+------------------------------------------------------------------+
//| Assignment operation for the array |
//+------------------------------------------------------------------+
void CRow::operator=(const double &array[])
{
int size=ArraySize(array);
if(size==0) return;
//--- Fill the array with values
ArrayResize(m_array,size);
for(int i=0;i<size;i++) m_array[i]=array[i];
//---
}
//+------------------------------------------------------------------+
//| Assignment operation for CRow |
//+------------------------------------------------------------------+
void CRow::operator=(const CRow &r)
{
int size=r.Size();
if(size==0) return;
//--- Fill the array with values
ArrayResize(m_array,size);
for(int i=0;i<size;i++) m_array[i]=r[i];
//---
}
//+------------------------------------------------------------------+
//| Operator of multiplication by another row |
//+------------------------------------------------------------------+
double CRow::operator*(const CRow &o)
{
double res=0;
//--- Verifications
int size=Size();
if(size!=o.Size() || size==0)
{
Print(__FUNCSIG__,": Failed to multiply two matrices, their sizes are different");
return(res);
}
//--- Multiply arrays elementwise and add the products
for(int i=0;i<size;i++)
res+=m_array[i]*o[i];
//--- Result
return(res);
}
//+------------------------------------------------------------------+
//| Returns a formatted string representation |
//+------------------------------------------------------------------+
string CRow::String(void) const
{
Language Basics
2000-2014, MetaQuotes Software Corp.
151
string out="";
//--- If the size of the array is greater than zero
int size=ArraySize(m_array);
//--- We work only with a non-zero number of array elements
if(size>0)
{
out="{";
for(int i=0;i<size;i++)
{
//--- Collect the values to a string
out+=StringFormat(" %G;",m_array[i]);
}
out+=" }";
}
//--- Result
return(out);
}
//+------------------------------------------------------------------+
//| Class "Matrix" |
//+------------------------------------------------------------------+
class CMatrix
{
private:
CRow m_rows[];
public:
//--- Constructors and a destructor
CMatrix(void);
CMatrix(int rows) { ArrayResize(m_rows,rows); }
~CMatrix(void){};
//--- Get the matrix sizes
int Rows() const { return(ArraySize(m_rows)); }
int Cols() const { return(Rows()>0? m_rows[0].Size():0); }
//--- Returns the value of the column in the form of a CRow row
CRow GetColumnAsRow(const int col_index) const;
//--- Returns a string with the matrix values
string String(void) const;
//--- The indexing operator returns a string by its number
CRow *operator[](int i) const { return(GetPointer(m_rows[i])); }
//--- Addition operator
CMatrix operator+(const CMatrix &m);
//--- Multiplication operator
CMatrix operator*(const CMatrix &m);
//--- Assignment operator
CMatrix *operator=(const CMatrix &m);
};
//+------------------------------------------------------------------+
//| A default constructor, create an array of rows of zero size |
//+------------------------------------------------------------------+
Language Basics
2000-2014, MetaQuotes Software Corp.
152
CMatrix::CMatrix(void)
{
//--- The zero number of rows in the matrix
ArrayResize(m_rows,0);
//---
}
//+------------------------------------------------------------------+
//| Returns the column value in the form of CRow |
//+------------------------------------------------------------------+
CRow CMatrix::GetColumnAsRow(const int col_index) const
{
//--- A variable to get the values from the column
CRow row();
//--- The number of rows in the matrix
int rows=Rows();
//--- If the number of rows is greater than zero, execute the operation
if(rows>0)
{
//--- An array to receive the values of the column with index col_index
double array[];
ArrayResize(array,rows);
//--- Filling the array
for(int i=0;i<rows;i++)
{
//--- Check the number of the column for row i - it may exceed the boundaries of the array
if(col_index>=this[i].Size())
{
Print(__FUNCSIG__,": Error! Column number ",col_index,"> row size ",i);
break; // row will be uninitialized object
}
array[i]=this[i][col_index];
}
//--- Create a CRow row based on the array values
row=array;
}
//--- Result
return(row);
}
//+------------------------------------------------------------------+
//| Addition of two matrices |
//+------------------------------------------------------------------+
CMatrix CMatrix::operator+(const CMatrix &m)
{
//--- The number of rows and columns in the passed matrix
int cols=m.Cols();
int rows=m.Rows();
//--- The matrix to receive the addition results
CMatrix res(rows);
//--- The sizes of the matrix must match
Language Basics
2000-2014, MetaQuotes Software Corp.
153
if(cols!=Cols() || rows!=Rows())
{
//--- Addition impossible
Print(__FUNCSIG__,": Failed to add two matrices, their sizes are different");
return(res);
}
//--- Auxiliary array
double arr[];
ArrayResize(arr,cols);
//--- Go through rows to add
for(int i=0;i<rows;i++)
{
//--- Write the results of addition of matrix strings in the array
for(int k=0;k<cols;k++)
{
arr[k]=this[i][k]+m[i][k];
}
//--- Place the array to the matrix row
res[i]=arr;
}
//--- return the result of addition of matrices
return(res);
}
//+------------------------------------------------------------------+
//| Multiplication of two matrices |
//+------------------------------------------------------------------+
CMatrix CMatrix::operator*(const CMatrix &m)
{
//--- Number of columns of the first matrix, number of rows passed in the matrix
int cols1=Cols();
int rows2=m.Rows();
int rows1=Rows();
int cols2=m.Cols();
//--- Matrix to receive the addition result
CMatrix res(rows1);
//--- Matrices should be coordinated
if(cols1!=rows2)
{
//--- Multiplication impossible
Print(__FUNCSIG__,": Failed to multiply two matrices, format is not compatible "
"- number of columns in the first factor should be equal to the number of rows in the second");
return(res);
}
//--- Auxiliary array
double arr[];
ArrayResize(arr,cols1);
//--- Fill the rows in the multiplication matrix
for(int i=0;i<rows1;i++)// Go through rows
{
Language Basics
2000-2014, MetaQuotes Software Corp.
154
//--- Reset the receiving array
ArrayInitialize(arr,0);
//--- Go through elements in the row
for(int k=0;k<cols1;k++)
{
//--- Take values of column k of the matrix m in the for of CRow
CRow column=m.GetColumnAsRow(k);
//--- Multiply two rows and write the result of scalar multiplication of vectors in the i-th element
arr[k]=this[i]*column;
}
//--- place array arr[] in the i-th row of the matrix
res[i]=arr;
}
//--- Return the product of two matrices
return(res);
}
//+------------------------------------------------------------------+
//| Assignment operation |
//+------------------------------------------------------------------+
CMatrix *CMatrix::operator=(const CMatrix &m)
{
//--- Find and set the number of rows
int rows=m.Rows();
ArrayResize(m_rows,rows);
//--- Fill our rows with the values of rows of the passed matrix
for(int i=0;i<rows;i++) this[i]=m[i];
//---
return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| String representation of the matrix |
//+------------------------------------------------------------------+
string CMatrix::String(void) const
{
string out="";
int rows=Rows();
//--- Form string by string
for(int i=0;i<rows;i++)
{
out=out+this[i].String()+"\r\n";
}
//--- Result
return(out);
}
See also
Overloading, Arithmetic Operations, Function Overloading, Precedence Rules
Language Basics
2000-2014, MetaQuotes Software Corp.
155
Description of External Functions
Type of external functions defined in another module, should be explicitly described. The absence of
such a description can lead to errors when compiling, building, or executing a program. When
describing an external object, use the keyword #import indicating the module.
Examples:
#import "user32.dll"
int MessageBoxW(int hWnd ,string szText,string szCaption,int nType);
int SendMessageW(int hWnd,int Msg,int wParam,int lParam);
#import "lib.ex5"
double round(double value);
#import
With the help of import, it is easy to describe functions that are called from external DLL or compiled
EX5 libraries. EX5 libraries are compiled ex5 files, which have the library property. Only function
described with the export modifier can be imported from EX5 libraries.
Please keep in mind that DLL and EX5 libraries should have different names (regardless of the
directories they are located in) if they are imported together. All imported functions have the scope
resolution corresponding to the library's "file name".
Example:
#import "kernel32.dll"
int GetLastError();
#import "lib.ex5"
int GetLastError();
#import
class CFoo
{
public:
int GetLastError() { return(12345); }
void func()
{
Print(GetLastError()); // call of the class method
Print(::GetLastError()); // call of the MQL5 function
Print(kernel32::GetLastError()); // call of the DLL library function from kernel32.dll
Print(lib::GetLastError()); // call of the EX5 library function from lib.ex5
}
};
void OnStart()
{
CFoo foo;
foo.func();
}
See also
Language Basics
2000-2014, MetaQuotes Software Corp.
156
Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
157
Exporting Functions
A function declared in a mql5 program with the export postmodifier can be used in another mql5
program. Such a function is called exportable, and it can be called from other programs after
compilation.
int Function() export
{
}
This modifier orders the compiler to add the function into the table of EX5 functions exported by this
ex5 file. Only function with such a modifier are accessible ("visible") from other mql5 programs.
The library property tells the compiler that the EX5-file will be a library, and the compiler will show it in
the header of EX5.
All functions that are planned as exportable ones must be marked with the export modifier.
See also
Overload, Virtual Functions, Polymorphism
Language Basics
2000-2014, MetaQuotes Software Corp.
158
Event Handling Functions
The MQL5 language provides processing of some predefined events. Functions for handling these
events must be defined in a MQL5 program; function name, return type, composition of parameters (if
there are any) and their types must strictly conform to the description of the event handler function.
The event handler of the client terminal identifies functions, handling this or that event, by the type
of return value and type of parameters. If other parameters, not corresponding to below descriptions,
are specified for a corresponding function, or another return type is indicated for it, such a function
will not be used as an event handler.
OnStart
The OnStart() function is the Start event handler, which is automatically generated only for running
scripts. It must be of void type, with no parameters:
void OnStart();
For the OnStart() function, the int return type can be specified.
OnInit
The OnInit() function is the Init event handler. It must be of void or int type, with no parameters:
void OnInit();
The Init event is generated immediately after an Expert Advisor or an indicator is downloaded; this
event is not generated for scripts. The OnInit() function is used for initialization. If OnInit() has the
int type of the return value, the non-zero return code means unsuccessful initialization, and it
generates the Deinit event with the code of deinitialization reason REASON_INITFAILED.
To optimize input parameters of an Expert Advisor, it is recommended to use values of the
ENUM_INIT_RETCODE enumeration as the return code. These values are used for organizing the course
of optimization, including the selection of the most appropriate testing agents. During initialization of
an Expert Advisor before the start of testing you can request information about the configuration and
resources of an agent (the number of cores, amount of free memory, etc.) using the
TerminalInfoInteger() function. Based on the information obtained, you can either allow to use this
testing agent, or reject using it during the optimization of this Expert Advisor.
ENUM_INIT_RETCODE
Identifier Description
INIT_SUCCEEDED Successful initialization, testing of the Expert
Advisor can be continued.
This code means the same as a null value the
Expert Advisor has been successfully initialized
in the tester.
INIT_FAILED Initialization failed; there is no point in
continuing testing because of fatal errors. For
example, failed to create an indicator that is
required for the work of the Expert Advisor.
Language Basics
2000-2014, MetaQuotes Software Corp.
159
This return value means the same as a value
other than zero - initialization of the Expert
Advisor in the tester failed. Testing for the
given set of parameters of the Expert Advisor
will not be executed, the agent is free to receive
a new task.
INIT_PARAMETERS_INCORRECT This value means the incorrect set of input
parameters. The result string containing this
return code is highlighted in red in the general
optimization table.
Upon receiving this value, the strategy tester
will reliably not pass this task to other agents
for retry.
INIT_AGENT_NOT_SUITABLE No errors during initialization, but for some
reason the agent is not suitable for testing. For
example, not enough memory, no OpenCL
support, etc.
After the return of this code, the agent will not
receive tasks until the end of this optimization.
The OnInit() function of the void type always denotes successful initialization.
OnDeinit
The OnDeinit() function is called during deinitialization and is the Deinit event handler. It must be
declared as the void type and should have one parameter of the const int type, which contains the
code of deinitialization reason. If a different type is declared, the compiler will generate a warning,
but the function will not be called. For scripts the Deinit event is not generated and therefore the
OnDeinit() function can't be used in scripts.
void OnDeinit(const int reason);
The Deinit event is generated for Expert Advisors and indicators in the following cases:
before reinitialization due to the change of a symbol or chart period, to which the mql5 program is
attached;
before reinitialization due to the change of input parameters;
before unloading the mql5 program.
OnTick
The NewTick event is generated for Expert Advisors only when a new tick for a symbol is received, to
the chart of which the Expert Advisor is attached. It's useless to define the OnTick() function in a
custom indicator or script, because the NewTick event is not generated for them.
The Tick event is generated only for Expert Advisors, but this does not mean that Expert Advisors
required the OnTick() function, since not only NewTick events are generated for Expert Advisors, but
also events of Timer, BookEvent and ChartEvent are generated. It must be declared as the void type,
with no parameters:
Language Basics
2000-2014, MetaQuotes Software Corp.
160
void OnTick();
OnTimer
The OnTimer() function is called when the Timer event occurs, which is generated by the system timer
only for Expert Advisors and indicators - it can't be used in scripts. The frequency of the event
occurrence is set when subscribing to notifications about this event to be received by the
EventSetTimer() function.
You can unsubscribe from receiving timer events for a particular Expert Advisor using the
EventKillTimer() function. The function must be defined with the void type, with no parameters:
void OnTimer();
It is recommended to call the EventSetTimer() function once in the OnInit() function, and the
EventKillTimer() function should be called once in OnDeinit().
Every Expert Advisor, as well as every indicator works with its own timer and receives events only
from it. As soon as the mql5 program stops operating, the timer is destroyed forcibly, if it was created
but hasn't been disabled by the EventKillTimer() function.
OnTrade
The function is called when the Trade event occurs, which appears when you change the list of placed
orders and open positions, the history of orders and history of deals. When a trade activity is
performed (pending order opening, position opening/closing, stops setting, pending order triggering,
etc.) the history of orders and deals and/or list of positions and current orders is changed accordingly.
void OnTrade();
Users must independently implement in the code the verification of a trade account state when such
an event is received (if this is required by the trade strategy conditions). If the OrderSend() function
call has been completed successfully and returned a value of true, this means that the trading server
has put the order into the queue for execution and assigned a ticket number to it. As soon as the
server processes this order, the Trade event will be generated. And if a user remembers the ticket
value, he/she will be able to find out what happened to the order using this value during OnTrade()
event handling.
OnTradeTransaction
When performing some definite actions on a trade account, its state changes. Such actions include:
Sending a trade request from any MQL5 application in the client terminal using OrderSend and
OrderSendAsync functions and its further execution;
Sending a trade request via the terminal graphical interface and its further execution;
Pending orders and stop orders activation on the server;
Performing operations on a trade server side.
The following trade transactions are performed as a result of these actions:
handling a trade request;
changing open orders;
changing orders history;
Language Basics
2000-2014, MetaQuotes Software Corp.
161
changing deals history;
changing positions.
For example, when sending a market buy order, it is handled, an appropriate buy order is created for
the account, the order is then executed and removed from the list of the open ones, then it is added
to the orders history, an appropriate deal is added to the history and a new position is created. All
these actions are trade transactions. Arrival of such a transaction at the terminal is a
TradeTransaction event. It calls OnTradeTransaction handler
void OnTradeTransaction(
const MqlTradeTransaction& trans, // trade transaction structure
const MqlTradeRequest& request, // request structure
const MqlTradeResult& result // result structure
);
The handler contains three parameters:
trans - this parameter gets MqlTradeTransaction structure describing a trade transaction applied to
a trade account;
request - this parameter gets MqlTradeRequest structure describing a trade request;
result - this parameter gets MqlTradeResult structure describing a trade request execution result.
The last two request and result parameters are filled by values only for
TRADE_TRANSACTION_REQUEST type transaction, data on transaction can be received from type
parameter of trans variable. Note that in this case, request_id field in result variable contains ID of
request trade request, after the execution of which the trade transaction described in trans variable
has been performed. Request ID allows to associate the performed action (OrderSend or
OrderSendAsync functions call) with the result of this action sent to OnTradeTransaction().
One trade request manually sent from the terminal or via OrderSend()/OrderSendAsync() functions can
generate several consecutive transactions on the trade server. Priority of these transactions' arrival at
the terminal is not guaranteed. Thus, you should not expect that one group of transactions will arrive
after another one when developing your trading algorithm. Besides, transactions can be lost during
delivery from the server to the terminal.
All types of trade transactions are described in ENUM_TRADE_TRANSACTION_TYPE enumeration.
MqlTradeTransaction structure describing a trade transaction is filled in different ways
depending on a transaction type. For example, only type field (trade transaction type) must be
analyzed for TRADE_TRANSACTION_REQUEST type transactions. The second and third
parameters of OnTradeTransaction function (request and result) must be analyzed for additional
data. For more information, see "Structure of a Trade Transaction".
A trade transaction description does not deliver all available information concerning orders,
deals and positions (e.g., comments). OrderGet*, HistoryOrderGet*, HistoryDealGet* and
PositionGet* functions should be used to get extended information.
After applying trade transactions for a client account, they are consistently placed to the terminal
trade transactions queue, from which they consistently sent to OnTradeTransaction entry point in
order of arrival at the terminal.
When handling trade transactions by an Expert Advisor using OnTradeTransaction handler, the
terminal continues handling newly arrived trade transactions. Therefore, the state of a trade account
Language Basics
2000-2014, MetaQuotes Software Corp.
162
can change during OnTradeTransaction operation already. For example, while an MQL5 program
handles an event of adding a new order, it may be executed, deleted from the list of the open ones
and moved to the history. Further on, the application will be notified of these events.
Transactions queue length comprises 1024 elements. If OnTradeTransaction handles a new transaction
for too long, the old ones in the queue may be superseded by the newer ones.
Generally, there is no accurate ratio of the number of OnTrade and OnTradeTransaction calls.
One OnTrade call corresponds to one or several OnTradeTransaction calls.
OnTrade is called after appropriate OnTradeTransaction calls.
OnTester
The OnTester() function is the handler of the Tester event that is automatically generated after a
history testing of an Expert Advisor on the chosen interval is over. The function must be defined with
the double type, with no parameters:
double OnTester();
The function is called right before the call of OnDeinit() and has the same type of the return value -
double. OnTester() can be used only in the testing of Expert Advisors. Its main purpose is to calculate
a certain value that is used as the Custom max criterion in the genetic optimization of input
parameters.
In the genetic optimization descending sorting is applied to results within one generation. I.e. from
the point of view of the optimization criterion, the best results are those with largest values (for the
Custom max optimization criterion values returned by the OnTester function are taken into account).
In such a sorting, the worst values are positioned at the end and further thrown off and do not
participate in the forming of the next generation.
OnTesterInit
The OnTesterInit() function is the handler of the TesterInit event, which is automatically generated
before the start of Expert Advisor optimization in the strategy tester. The function must be defined
with the void type. It has no parameters:
void OnTesterInit();
With the start of optimization, an Expert Advisor with the OnTesterDeinit() or OnTesterPass() handler
is automatically loaded in a separate terminal chart with the symbol and period specified in the tester,
and receives the TesterInit event. The function is used for Expert Advisor initialization before the
start of optimization for further processing of optimization results.
OnTesterPass
The OnTesterPass() function is the handler of the TesterPass event, which is automatically generated
when a frame is received during Expert Advisor optimization in the strategy tester. The function must
be defined with the void type. It has no parameters:
void OnTesterPass();
An Expert Advisor with the OnTesterPass() handler is automatically loaded in a separate terminal chart
Language Basics
2000-2014, MetaQuotes Software Corp.
163
with the symbol/period specified for testing, and gets TesterPass events when a frame is received
during optimization. The function is used for dynamic handling of optimization results "on the spot"
without waiting for its completion. Frames are added using the FrameAdd() function, which can be
called after the end of a single pass in the OnTester() handler.
OnTesterDeinit
OnTesterDeinit() is the handler of the TesterDeinit event, which is automatically generated after the
end of Expert Advisor optimization in the strategy tester. The function must be defined with the void
type. It has no parameters:
void OnTesterDeinit();
An Expert Advisor with the TesterDeinit() handler is automatically loaded on a chart at the start of
optimization, and receives TesterDeinit after its completion. The function is used for final processing
of all optimization results.
OnBookEvent
The OnBookEvent() function is the BookEvent handler. BookEvent is generated for Expert Advisors only
when Depth of Market changes. It must be of the void type and have one parameter of the string type:
void OnBookEvent (const string& symbol);
To receive BookEvent events for any symbol, you just need to pre-subscribe to receive these events
for this symbol using the MarketBookAdd() function. In order to unsubscribe from receiving the
BookEvent events for a particular symbol, call MarketBookRelease().
Unlike other events, the BookEvent event is broadcast. This means that if one Expert Advisor
subscribes to receiving BookEvent events using MarketBookAdd, all the other Experts Advisors that
have the OnBookEvent() handler will receive this event. It is therefore necessary to analyze the name
of the symbol, which is passed to the handler as the const string& symbol parameter.
OnChartEvent
OnChartEvent() is the handler of a group of ChartEvent events:
CHARTEVENT_KEYDOWN event of a keystroke, when the chart window is focused;
CHARTEVENT_MOUSE_MOVE mouse move events and mouse click events (if
CHART_EVENT_MOUSE_MOVE=true is set for the chart);
CHARTEVENT_OBJECT_CREATE event of graphical object creation (if
CHART_EVENT_OBJECT_CREATE=true is set for the chart);
CHARTEVENT_OBJECT_CHANGE event of change of an object property via the properties dialog;
CHARTEVENT_OBJECT_DELETE event of graphical object deletion (if
CHART_EVENT_OBJECT_DELETE=true is set for the chart);
CHARTEVENT_CLICK event of a mouse click on the chart;
CHARTEVENT_OBJECT_CLICK event of a mouse click in a graphical object belonging to the chart;
CHARTEVENT_OBJECT_DRAG event of a graphical object move using the mouse;
CHARTEVENT_OBJECT_ENDEDIT event of the finished text editing in the entry box of the
LabelEdit graphical object;
Language Basics
2000-2014, MetaQuotes Software Corp.
164
CHARTEVENT_CHART_CHANGE event of chart changes;
CHARTEVENT_CUSTOM+n ID of the user event, where n is in the range from 0 to 65535.
CHARTEVENT_CUSTOM_LAST the last acceptable ID of a custom event (CHARTEVENT_CUSTOM
+65535).
The function can be called only in Expert Advisors and indicators. The function should be of void type
with 4 parameters:
void OnChartEvent(const int id, // Event ID
const long& lparam, // Parameter of type long event
const double& dparam, // Parameter of type double event
const string& sparam // Parameter of type string events
);
For each type of event, the input parameters of the OnChartEvent() function have definite values that
are required for the processing of this event. The events and values passed through these parameters
are listed in the table below.
Event Value of the id
parameter
Value of the
lparam
parameter
Value of the
dparam
parameter
Value of the
sparam
parameter
Event of a
keystroke
CHARTEVENT_KE
YDOWN
code of a
pressed key
Repeat count
(the number of
times the
keystroke is
repeated as a
result of the user
holding down the
key)
The string value
of a bit mask
describing the
status of
keyboard buttons
Mouse events (if
property
CHART_EVENT_
MOUSE_MOVE=tr
ue is set for the
chart)
CHARTEVENT_MO
USE_MOVE
the X coordinate the Y coordinate The string value
of a bit mask
describing the
status of mouse
buttons
Event of
graphical object
creation (if
CHART_EVENT_O
BJECT_CREATE=t
rue is set for the
chart)
CHARTEVENT_OB
JECT_CREATE
Name of the
created graphical
object
Event of change
of an object
property via the
properties dialog
CHARTEVENT_OB
JECT_CHANGE
Name of the
modified
graphical object
Event of
graphical object
CHARTEVENT_OB
JECT_DELETE
Name of the
deleted graphical
Language Basics
2000-2014, MetaQuotes Software Corp.
165
deletion (if
CHART_EVENT_O
BJECT_DELETE=t
rue is set for the
chart)
object
Event of a
mouse click on
the chart
CHARTEVENT_C
LICK
the X coordinate the Y coordinate
Event of a
mouse click in a
graphical object
belonging to the
chart
CHARTEVENT_OB
JECT_CLICK
the X coordinate the Y coordinate Name of the
graphical object,
on which the
event occurred
Event of a
graphical object
dragging using
the mouse
CHARTEVENT_OB
JECT_DRAG
Name of the
moved graphical
object
Event of the
finished text
editing in the
entry box of the
LabelEdit
graphical object
CHARTEVENT_OB
JECT_ENDEDIT
Name of the
LabelEdit
graphical object,
in which text
editing has
completed
Event of chart
Changes
CHARTEVENT_C
HART_CHANGE

ID of the user
event under the
N number
CHARTEVENT_CU
STOM+N
Value set by the
EventChartCusto
m() function
Value set by the
EventChartCusto
m() function
Value set by the
EventChartCusto
m() function
OnCalculate
The OnCalculate() function is called only in custom indicators when it's necessary to calculate the
indicator values by the Calculate event. This usually happens when a new tick is received for the
symbol, for which the indicator is calculated. This indicator is not required to be attached to any price
chart of this symbol.
The OnCalculate() function must have a return type int. There are two possible definitions. Within one
indicator you cannot use both versions of the function.
The first form is intended for those indicators that can be calculated on a single data buffer. An
example of such an indicator is Custom Moving Average.
int OnCalculate (const int rates_total, // size of the price[] array
const int prev_calculated, // bars handled on a previous call
const int begin, // where the significant data start from
const double& price[] // array to calculate
);
Language Basics
2000-2014, MetaQuotes Software Corp.
166
As the price[] array, one of timeseries or a calculated buffer of some indicator can be passed. To
determine the direction of indexing in the price[] array, call ArrayGetAsSeries(). In order not to
depend on the default values, you must unconditionally call the ArraySetAsSeries() function for those
arrays, that are expected to work with.
Necessary time series or an indicator to be used as the price[] array can be selected by the user in the
"Parameters" tab when starting the indicator. To do this, you should specify the necessary item in the
drop-down list of "Apply to" field.
To receive values of a custom indicator from other mql5 programs, the iCustom() function is used,
which returns the indicator handle for subsequent operations. You can also specify the appropriate
price[] array or the handle of another indicator. This parameter should be transmitted last in the list
of input variables of the custom indicator.
Example:
void OnStart()
{
//---
string terminal_path=TerminalInfoString(STATUS_TERMINAL_PATH);
int handle_customMA=iCustom(Symbol(),PERIOD_CURRENT, "Custom Moving Average",13,0, MODE_EMA,PRICE_TYPICAL);
if(handle_customMA>0)
Print("handle_customMA = ",handle_customMA);
else
Print("Cannot open or not EX5 file '"+terminal_path+"\\MQL5\\Indicators\\"+"Custom Moving Average.ex5'");
}
In this example, the last parameter passed is the PRICE_TYPICAL value (from the
ENUM_APPLIED_PRICE enumeration), which indicates that the custom indicator will be built on typical
prices obtained as (High+Low+Close)/3. If this parameter is not specified, the indicator is built based
on PRICE_CLOSE values, i.e. closing prices of each bar.
Another example that shows passing of the indicator handler as the last parameter to specify the
price[] array, is given in the description of the iCustom() function.
The second form is intended for all other indicators, in which more than one time series is used for
Language Basics
2000-2014, MetaQuotes Software Corp.
167
calculations.
int OnCalculate (const int rates_total, // size of input time series
const int prev_calculated, // bars handled in previous call
const datetime& time[], // Time
const double& open[], // Open
const double& high[], // High
const double& low[], // Low
const double& close[], // Close
const long& tick_volume[], // Tick Volume
const long& volume[], // Real Volume
const int& spread[] // Spread
);
Parameters of open[], high[], low[] and close[] contain arrays with open prices, high and low prices
and close prices of the current time frame. The time[] parameter contains an array with open time
values, the spread[] parameter has an array containing the history of spreads (if any spread is
provided for the traded security). The parameters of volume[] and tick_volume[] contain the history of
trade and tick volume, respectively.
To determine the indexing direction of time[], open[], high[], low[], close[], tick_volume[], volume[]
and spread[], call ArrayGetAsSeries(). In order not to depend on default values, you should
unconditionally call the ArraySetAsSeries() function for those arrays, which are expected to work with.
The first rates_total parameter contains the number of bars, available to the indicator for calculation,
and corresponds to the number of bars available in the chart.
We should noted the connection between the return value of OnCalculate() and the second input
parameter prev_calculated. During the function call, the prev_calculated parameter contains a value
returned by OnCalculate() during previous call. This allows for economical algorithms for calculating
the custom indicator in order to avoid repeated calculations for those bars that haven't changed since
the previous run of this function.
For this, it is usually enough to return the value of the rates_total parameter, which contains the
number of bars in the current function call. If since the last call of OnCalculate() price data has
changed (a deeper history downloaded or history blanks filled), the value of the input parameter
prev_calculated will be set to zero by the terminal.
Note: if OnCalculate returns zero, then the indicator values are not shown in the DataWindow of the
client terminal.
To understand it better, it would be useful to start the indicator, which code is attached below.
Indicator Example:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//---- plot Line
#property indicator_label1 "Line"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrDarkBlue
#property indicator_style1 STYLE_SOLID
Language Basics
2000-2014, MetaQuotes Software Corp.
168
#property indicator_width1 1
//--- indicator buffers
double LineBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
//--- Get the number of bars available for the current symbol and chart period
int bars=Bars(Symbol(),0);
Print("Bars = ",bars,", rates_total = ",rates_total,", prev_calculated = ",prev_calculated);
Print("time[0] = ",time[0]," time[rates_total-1] = ",time[rates_total-1]);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
See also
Running Programs, Client Terminal Events, Working with Events
Language Basics
2000-2014, MetaQuotes Software Corp.
169
Variables
Declaring Variables
Variables must be declared before they are used. Unique names are used to identify variables. To
declare a variable, you must specify its type and a unique name. Declaration of variable is not an
operator.
Simple types are:
char, short, int, long, uchar, ushort, uint, ulong integers;
color integer representing the RGB-color;
datetime the date and time, an unsigned integer containing the number of seconds since 0 hour
January 1, 1970;
bool boolean values true and false;
double double-precision floating point number;
float single-precision floating point number;
string character strings.
Examples:
string szInfoBox;
int nOrders;
double dSymbolPrice;
bool bLog;
datetime tBegin_Data = D'2004.01.01 00:00';
color cModify_Color = C'0x44,0xB9,0xE6';
Complex or compound types:
Structures are composite data types, constructed using other types.
struct MyTime
{
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
...
MyTime strTime; // Variable of the previously declared structure MyTime
You can't declare variables of the structure type until you declare the structure.
Arrays
Array is the indexed sequence of identical-type data:
int a[50]; // One-dimensional array of 50 integers.
double m[7][50]; // Two-dimensional array of seven arrays,
// each of them consisting of 50 numbers.
MyTime t[100]; // Array containing elements such as MyTime
Language Basics
2000-2014, MetaQuotes Software Corp.
170
Only an integer can be an array index. No more than four-dimensional arrays are allowed. Numbering
of array elements starts with 0. The last element of a one-dimensional array has the number which is 1
less than the array size. This means that call for the last element of an array consisting of 50 integers
will appear as a[49]. The same concerns multidimensional arrays: A dimension is indexed from 0 to
the dimension size-1. The last element of a two-dimensional array from the example will appear as
m[6][49].
Static arrays can't be represented as timeseries, i.e., the ArraySetAsSeries() function, which sets
access to array elements from the end to beginning, can't be applied to them. If you want to provide
access to an array the same as in timeseries, use the dynamic array object.
If there is an attempt to access out of the array range, the executing subsystem will generate a critical
error and the program will be stopped.
Access Specifiers
Access specifiers define how the compiler can access variables, members of structures or classes.
The const specifier declares a variable as a constant, and does not allow to change this variable during
runtime. A single initialization of a variable is allowed when declaring it. The const specifier can't be
applied to members of structures and classes.
Example:
int OnCalculate (const int rates_total, // size of the price[] array
const int prev_calculated, // bars handled on a previous call
const int begin, // where the significant data start from
const double& price[] // array to calculate
);
To access members of structures and classes use the following qualifiers:
public allows unrestricted access to the variable or class method
protected allows access from methods of this class, as well as from methods of publicly inherited
classes. Other access is impossible;
private allows access to variables and class methods only from methods of the same class.
virtual applies only to class methods (but not to methods of structures) and tells the compiler that
this method should be placed in the table of virtual functions of the class.
Storage Classes
There are three storage classes: static, input and extern. These modifiers of a storage class explicitly
indicate to the compiler that corresponding variables are distributed in a pre-allocated area of
memory, which is called the global pool. Besides, these modifiers indicate the special processing of
variable data. If a variable declared on a local level is not a static one, memory for such a variable is
allocated automatically at a program stack. Freeing of memory allocated for a non-static array is also
performed automatically when going beyond the visibility area of the block, in which the array is
declared.
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Language Basics
2000-2014, MetaQuotes Software Corp.
171
Lifetime of Variables, Creating and Deleting Objects, Static Members of a Class
Language Basics
2000-2014, MetaQuotes Software Corp.
172
Local Variables
A variable declared inside a function is local. The scope of a local variable is limited to the function
range inside which it is declared. Local variable can be initialized by outcome of any expression. Every
call of the function initializes a local variable. Local variables are stored in memory area of the
corresponding function.
Example:
int somefunc()
{
int ret_code=0;
...
return(ret_code);
}
Scope of a variable is a program part, in which a variable can referred to. Variables declared inside a
block (at the internal level), have the block as their scope. The block scope start with the variable
declaration and ends with the final right brace.
Local variables declared in the beginning of a function also have the scope of block, as well as function
parameters that are local variables. Any block can contain variable declarations. If blocks are nested
and the identifier in the external block has the same name as the identifier in the internal block, the
external block identifier is hidden, until the operation of the internal block is over.
Example:
void OnStart()
{
//---
int i=5; // local variable of the function
{
int i=10; // function variable
Print("Inside block i = ",i); // result is i=10;
}
Print("Outside block i = ",i); // result is i=5;
}
This means that while the internal block is running, it sees values of its own local identifiers, not the
values of identifiers with identical names in the external block.
Example:
void OnStart()
{
//---
int i=5; // local variable of the function
for(int i=0;i<3;i++)
Print("Inside for i = ",i);
Print("Outside the block i = ",i);
}
/* Execution result
Language Basics
2000-2014, MetaQuotes Software Corp.
173
Inside for i = 0
Inside for i = 1
Inside for i = 2
Outside block i = 5
*/
Local variables declared as static have the scope of the block, despite the fact that they exist since
the program start.
Stack
In every MQL5 program, a special memory area called stack is allocated for storing local function
variables that are created automatically. One stack is allocated for all functions. The default stack size
is 256 kb, the stack size can be managed using the #property stacksize compiler directive.
Static local variables are stored in the same place where other static and global variables are stored -
in a special memory area, which exists separately from the stack. Dynamically created variables also
use a memory area separate from the stack.
With each function call, a place on the stack is allocated for internal non-static variables. After exiting
the function, the memory is available for use again.
If from the first function the second one is called, then the second function occupies the required size
from the remaining stack memory for its variables. Thus, when using included functions, stack
memory will be sequentially occupied for each function. This may lead to a shortage of memory during
one of the function calls, such a situation is called stack overflow.
Therefore, for large local data you should better use dynamic memory - when entering a function,
allocate the memory, which is required for local needs, in the system (new, ArrayResize()), and when
exiting the function, release the memory (delete, ArrayFree()).
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
174
Formal Parameters
Parameters passed to the function are local. The scope is the function block. Formal parameters must
have names differing from those of external variables and local variables defined within one function.
Some values can be assigned to formal parameters in the function block. If a formal parameter is
declared with the const modifier, its value can't be changed within the function.
Example:
void func(const int & x[], double y, bool z)
{
if(y>0.0 && !z)
Print(x[0]);
...
}
Formal parameters can be initialized by constants. In this case, the initializing value is considered as
the default value. Parameters, next to the initialized one, must also be initialized.
Example:
void func(int x, double y = 0.0, bool z = true)
{
...
}
When calling such a function, the initialized parameters can be omitted, the defaults being substituted
instead of them.
Example:
func(123, 0.5);
Parameters of simple types are passed by value, i.e., modifications of the corresponding local variable
of this type inside the called function will not be reflected in the calling function. Arrays of any type
and data of the structure type are always passed by reference. If it is necessary to prohibit modifying
the array or structure contents, the parameters of these types must be declared with the const
keyword.
There is an opportunity to pass parameters of simple types by reference. In this case, modification of
such parameters inside the calling function will affect the corresponding variables passed by reference.
In order to indicate that a parameter is passed by reference, put the & modifier after the data type.
Example:
void func(int& x, double& y, double & z[])
{
double calculated_tp;
...
for(int i=0; i<OrdersTotal(); i++)
{
if(i==ArraySize(z)) break;
if(OrderSelect(i)==false) break;
Language Basics
2000-2014, MetaQuotes Software Corp.
175
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}
Parameters passed by reference, can't be initialized by default values.
Maximum 64 parameters can be passed into a function.
See also
Input Variables, Data Types, Encapsulation and Extensibility of Types,Initialization of Variables,
Visibility Scope and Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
176
Static Variables
The storage class of static defines a static variable. The static modifier is indicated before the data
type.
Example:
int somefunc()
{
static int flag=10;
...
return(flag);
}
A static variable can be initialized by a constant or constant expression corresponding to its type,
unlike a simple local variable, which can be initialized by any expression.
Static variables exist from the moment of program execution and are initialized only once before the
specialized functions OnInit() is called. If the initial values are not specified, variables of the static
storage class are taking zero initial values.
Local variables declared with the static keyword retain their values throughout the function lifetime.
With each next function call, such local variables contain the values that they had during the previous
call.
Any variables in a block, except formal parameters of a function, can be defined as static. If a
variable declared on a local level is not a static one, memory for such a variable is allocated
automatically at a program stack.
Example:
int Counter()
{
static int count;
count++;
if(count%100==0) Print("Function Counter has been called ",count," times");
return count;
}
void OnStart()
{
//---
int c=345;
for(int i=0;i<1000;i++)
{
int c=Counter();
}
Print("c =",c);
}
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Language Basics
2000-2014, MetaQuotes Software Corp.
177
Lifetime of Variables, Creating and Deleting Objects, Static Class Members
Language Basics
2000-2014, MetaQuotes Software Corp.
178
Global Variables
Global variables are created by placing their declarations outside function descriptions. Global
variables are defined at the same level as functions, i.e., they are not local in any block.
Example:
int GlobalFlag=10; // Global variable
int OnStart()
{
...
}
The scope of global variables is the entire program. Global variables are accessible from all functions
defined in the program. They are initialized to zero unless another initial value is explicitly defined. A
global variable can be initialized only by a constant or constant expression that corresponds to its type.
Global Variables are initialized only once right after the program is loaded into the client terminal
memory.
Note: Variables declared at global level must not be mixed up with the client terminal global variables
that can be accessed using the GlobalVariable...() functions.
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
179
Input Variables
The input storage class defines the external variable. The input modifier is indicated before the data
type. A variable with the input modifier can't be changed inside mql5-programs, such variables can be
accessed for reading only. Values of input variables can be changed only by a user from the program
properties window.
Example:
//--- input parameters
input int MA_Period=13;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;
Input variables determine the input parameters of a program. They are available from the Properties
window of a program.
It is possible to set another way to display names of input parameters in the Inputs tab. To do this, a
string comment is used, which should be located after the description of an input parameter in the
same line. Thus, names more understandable for a user can be matched to input parameters.
Example:
//--- input parameters
input int InpMAPeriod=13; // Smoothing period
input int InpMAShift=0; // Line horizontal shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA; // Smoothing method
Language Basics
2000-2014, MetaQuotes Software Corp.
180
Note: Arrays and variables of complex types can't act as input variables.
Note: The length of a string comment for Input variables cannot exceed 63 characters.
Passing Parameters When Calling Custom Indicators from MQL5 Programs
Custom Indicators are called using the iCustom() function. After the name of the custom indicator,
parameters should go in a strict accordance with the declaration of input variables of this custom
indicator. If indicated parameters are less than input variables declared in the called custom indicator,
the missing parameters are filled with values specified during the declaration of variables.
If the custom indicator uses the OnCalculate function of the first type (i.e., the indicator is calculated
using the same array of data), then one of ENUM_APPLIED_PRICE values or handle of another indicator
should be used as the last parameter when calling such a custom indicator. All parameters
corresponding to input variables must be clearly indicated.
Enumerations as input Parameters
Not only built-in enumerations provided in MQL5, but also user defined variables can be used as input
variables (input parameters for mql5 programs). For example, we can create the dayOfWeek
enumeration, describing days of the week, and use the input variable to specify a particular day of the
week, not as a number, but in a more common way.
Example:
#property script_show_inputs
//--- day of week
enum dayOfWeek
{
S=0, // Sunday
M=1, // Monday
T=2, // Tuesday
W=3, // Wednesday
Th=4, // Thursday
Language Basics
2000-2014, MetaQuotes Software Corp.
181
Fr=5, // Friday,
St=6, // Saturday
};
//--- input parameters
input dayOfWeek swapday=W;
In order to enable a user to select a necessary value from the properties window during the script
startup, we use the preprocessor command #property script_show_inputs. We start the script and can
choose one of values of the dayOfWeek enumeration from the list. We start the EnumInInput script
and go to the Inputs tab. By default, the value of swapday (day of triple swap charge) is Wednesday (W
= 3), but we can specify any other value, and use this value to change the program operation.
Number of possible values of an enumeration is limited. In order to select an input value the drop-
down list is used. Mnemonic names of enumeration members are used for values displayed in the list.
If a comment is associated with a mnemonic name, as shown in this example, the comment content is
used instead of the mnemonic name.
Each value of the dayOfWeek enumeration has its value from 0 to 6, but in the list of parameters,
comments specified for each value will be shown. This provides additional flexibility for writing
programs with clear descriptions of input parameters.
Variables with sinput Modifier
Variables with input modifier allow not only setting external parameters values when launching
programs but are also necessary when optimizing trading strategies in the Strategy Tester. Each input
variable excluding the one of a string type can be used in optimization.
Sometimes, it is necessary to exclude some external program parameters from the area of all passes
in the tester. sinput memory modifier has been introduced for such cases. sinput stands for static
external variable declaration (sinput = static input). It means that the following declaration in an
Expert Advisor code
Language Basics
2000-2014, MetaQuotes Software Corp.
182
sinput int layers=6; // Number of layers
will be equivalent to the full declaration
static input int layers=6; // Number of layers
The variable declared with sinput modifier is an input parameter of MQL5 program. The value of this
parameter can be changed when launching the program. However, this variable is not used in the
optimization of input parameters. In other words, its values are not enumerated when searching for
the best set of parameters fitting a specified condition.
The Expert Advisor shown above has 5 external parameters. "Number of layers" is declared to be
sinput and equal to 6. This parameter cannot be changed during a trading strategy optimization. We
can specify the necessary value for it to be used further on. Start, Step and Stop fields are not
available for such a variable.
Therefore, users will not be able to optimize this parameter after we specify sinput modifier for the
variable. In other words, the terminal users will not be able to set initial and final values for it in the
Strategy Tester for automatic enumeration in the specified range during optimization.
However, there is one exception to this rule: sinput variables can be varied in optimization tasks
using ParameterSetRange() function. This function has been introduced specifically for the program
control of available values sets for any input variable including the ones declared as static input
(sinput). The ParameterGetInput() function allows to receive input variables values when optimization
is launched (in OnTesterInit() handler) and to reset a change step value and a range, within which an
optimized parameter values will be enumerated.
In this way, combining the sinput modifier and two functions that work with input parameters, allows
to create a flexible rules for setting optimization intervals of input parameters that depend on values
of another input parameters.
See also
iCustom, Enumerations, Properties of Programs
Language Basics
2000-2014, MetaQuotes Software Corp.
183
Extern Variables
The extern keyword is used for declaring variable identifiers as identifiers of the static storage class
with global lifetime. These variables exist from the start of the program and memory for them is
allocated and initialized immediately after the start of the program.
You can create programs that consist of multiple source files; in this case a directive to the
preprocessor #include is used. Variables declared as an extern with the same type and identifier can
exist in different source files of one project.
When compiling the whole project, all the extern variables with the same type and an identifier are
associated with one part of memory of the global variable pool. Extern variables are useful for
separate compilation of source files. Extern variables can be initialized, but only once - existence of
several initialized extern variables of the same type and with the same identifier is prohibited.
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Lifetime of Variables, Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
184
Initialization of Variables
Any variable can be initialized during definition. If a variable is not initialized explicitly, the value
stored in this variable can be any. Implicit initialization is not used.
Global and static variables can be initialized only by a constant of the corresponding type or a constant
expression. Local variables can be initialized by any expression, not just a constant.
Initialization of global and static variables is performed only once. Initialization of local variables is
made every time you call the corresponding functions.
Examples:
int n = 1;
string s = "hello";
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int a[4][4] = { {1, 1, 1, 1}, {2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4 } };
//--- from tetris
int right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- initialization of all fields of the structure with zero values
MqlTradeRequest request={0};
List of values of the array elements must be enclosed in curly brackets. Missed initializing sequences
are considered equal to 0. The initializing sequence must have at least one value: this value is
initialized to the first element of the corresponding structure or array, missing elements are
considered equal to zero.
If the size of the initialized array is not specified, it is determined by a compiler, based on the size of
the initialization sequence. Multi-dimensional arrays cannot be initialized by a one-dimensional
sequence (a sequence without additional curly brackets), except for the case, when only one
initializing element is specified (zero, as a rule).
Arrays (including those announced at the local level) can be initialized only by constants.
Examples:
struct str3
{
int low_part;
int high_part;
};
struct str10
{
str3 s3;
double d1[10];
int i3;
};
void OnStart()
{
str10 s10_1={{1,0},{1.0,2.1,3.2,4.4,5.3,6.1,7.8,8.7,9.2,10.0},100};
str10 s10_2={{1,0},{0},100};
Language Basics
2000-2014, MetaQuotes Software Corp.
185
str10 s10_3={{1,0},{1.0}};
//---
Print("1. s10_1.d1[5] = ",s10_1.d1[5]);
Print("2. s10_2.d1[5] = ",s10_2.d1[5]);
Print("3. s10_3.d1[5] = ",s10_3.d1[5]);
Print("4. s10_3.d1[0] = ",s10_3.d1[0]);
}
For structure type variable partial initialization is allowed, as well as for static arrays (with an
implicitly set size). You can initialize on or more first elements of a structure or array, the other
elements will be initialized with zeroes in this case.
See also
Data Types, Encapsulation and Extensibility of Types, Visibility Scope and Lifetime of Variables,
Creating and Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
186
Visibility Scope and Lifetime of Variables
There are two basic types of scope: local scope and global scope.
A variable declared outside all functions is located into the global scope. Access to such variables can
be done from anywhere in the program.These variables are located in the global pool of memory, so
their lifetime coincides with the lifetime of the program.
A variable declared inside a block (part of code enclosed in curly brackets) belongs to the local scope.
Such a variable is not visible (and therefore not available) outside the block, in which it is declared.
The most common case of local declaration is a variable declared within a function. A variable declared
locally, is located on the stack, and the lifetime of such a variable is equal to the lifetime of the
function.
Since the scope of a local variable is the block in which it is declared, it is possible to declare variables
with the same name, as those of variables declared in other blocks; as well as of those declared at
upper levels, up to the global level.
Example:
void CalculateLWMA(int rates_total,int prev_calculated,int begin,const double &price[])
{
int i,limit;
static int weightsum=0;
double sum=0;
//---
if(prev_calculated==0)
{
limit=MA_Period+begin;
//--- set empty value for first limit bars
for(i=0; i<limit; i++) LineBuffer[i]=0.0;
//--- calculate first visible value
double firstValue=0;
for(int i=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
firstValue/=(double)weightsum;
LineBuffer[limit-1]=firstValue;
}
else
{
limit=prev_calculated-1;
}
for(i=limit;i<rates_total;i++)
{
sum=0;
Language Basics
2000-2014, MetaQuotes Software Corp.
187
for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
LineBuffer[i]=sum/weightsum;
}
//---
}
Pay attention to the variable i, declared in line
for(int i=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
Its scope is only the for cycle; outside of this cycle there is another variable with the same name,
declared at the beginning of the function. In addition, the k variable is declared in the loop body, its
scope is the loop body.
Local variables can be declared with the access specifier static. In this case, the compiler has a
variable in the global pool of memory. Therefore, the lifetime of a static variable is equal to the
lifetime of the program. Here the scope of such a variable is limited to the block in which it is
declared.
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Creating and
Deleting Objects
Language Basics
2000-2014, MetaQuotes Software Corp.
188
Creating and Deleting Objects
After a mql5 program is loaded for execution, memory is allocated to each variable according to its
type. According to the access level all variables are divided into two types - global variables and local
variables. According to the memory class they can be input parameters of a mql5 program, static and
automatic. If necessary, each variable is initialized by a corresponding value. After being used a
variable is unintialized and memory used by it is returned to the MQL5 executable system.
Initialization and Deinitialization of Global Variables
Global variables are initialized automatically right after a mql5 program is loaded and before any of
function is called. During initialization initial values are assigned to variables of simple types and a
constructor (if there is any) is called for objects. Input variables are always declared at a global level,
and are initialized by values set by a user in the dialog during the program start.
Despite the fact that static variables are usually declared at a local level, the memory for these
variables is pre-allocated, and initialization is performed right after a program is loaded, the same as
for global variables.
The initialization order corresponds to the variable declaration order in the program. Deinitialization is
performed in the reverse order. This rule is true only for the variables that were not created by the
new operator. Such variables are created and initialized automatically right after loading, and are
deinitialized before the program unloading.
Initialization and Deinitialization of Local Variables
If a variable declared on a local level is not a static one, memory is allocated automatically for such a
variable. Local variables, as well as global ones, are initialized automatically at the moment when the
program execution meets the declaration of a local variable. Thus the initialization order corresponds
to the order of declaration.
Local variables are deinitialized at the end of the program block, in which they were declared, and in
the order opposite to their declaration. A program block is a compound operator that can be a part of
selection operator switch, cycle operator (for, while, do-while), a function body or a part of the if-else
operator.
Local variables are initialized only at the moment when the program execution meets the variable
declaration. If during the program execution the block, in which the variable is declared, was not
executed, such a variable is not initialized.
Initialization and Deinitialization of Objects Placed
A special case is that with object pointers, because declaration of a pointer does not entail
initialization of a corresponding objects. Dynamically placed objects are initialized only at the moment
when the class sample is created by the new operator. Initialization of objects presupposes call of a
constructor of a corresponding class. If there is no corresponding constructor in the class, its members
of a simple type will not be automatically initialized; members of types string, dynamic array and
complex object will be automatically initialized.
Pointers can be declared on a local or global level; and they can be initialized by the empty value of
NULL or by the value of the pointer of the same or inherited type. If the new operator is called for a
Language Basics
2000-2014, MetaQuotes Software Corp.
189
pointer declared on a local level, the delete operator for this pointer must be performed before exiting
the level. Otherwise the pointer will be lost and the explicit deletion of the object will fail.
All objects created by the expression of object_pointer=new Class_name, must be then deleted by the
delete(object_pointer) operator. If for some reasons such a variable is not deleted by the delete
operator when the program is completed, the corresponding entry will appear in the "Experts" journal.
One can declare several variables and assign a pointer of one object to all of them.
If a dynamically created object has a constructor, this constructor will be called at the moment of the
new operator execution. If an object has a destructor, it will be called during the execution of the
delete operator.
Thus dynamically placed objects are created only at the moment when are created by the new
operator, and are assuredly deleted either by thedelete operator or automatically by the executing
system of MQL5 during the program unloading. The order of declaration of pointers of dynamically
created object doesn't influence the order of their initialization. The order of initialization and
deinitialization is fully controlled by the programmer.
Dynamic memory allocation in MQL5
When working with dynamic arrays, released memory is immediately returned back to the operating
system.
When working with dynamic class objects using the new operator, first memory is requested from the
class memory pool the memory manager is working with. If there is not enough memory in the pool,
memory is requested from the operating system. When deleting the dynamic object using the delete
operator, released memory is immediately returned back to the class memory pool.
Memory manager releases memory back to the operating system immediately after exiting the
following event handling functions: OnInit(), OnDeinit(), OnStart(), OnTick(), OnCalculate(),
OnTimer(), OnTrade(), OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit(),
OnChartEvent(), OnBookEvent().
Brief Characteristics of Variables
The main information about the order of creation, deletion, about calls of constructors and destructors
is given in the below table.
Global automatic
variable
Local automatic
variable
Dynamically created
object
Initialization right after a mql5
program is loaded
when the code line
where it is declared is
reached during
execution
at the execution of
the new operator
Initialization order in the order of
declaration
in the order of
declaration
irrespective of the
order of declaration
Deinitialization before a mql5 program
is unloaded
when execution exits
the declaration block
when the delete
operator is executed
or before a mql5
Language Basics
2000-2014, MetaQuotes Software Corp.
190
program is unloaded
Deinitialization
order
in the order opposite
to the initialization
order
in the order opposite
to the initialization
order
irrespective of the
initialization order
Constructor call at mql5 program
loading
at initialization at the execution of
the new operator
Destructor call at mql5 program
unloading
when exiting the block
where the variable
was initialized
at the execution of
the delete operator
Error logs log message in the
"Experts" journal
about the attempt to
delete an
automatically created
object
log message in the
"Experts" journal
about the attempt to
delete an
automatically created
object
log message in the
"Experts" journal
about undeleted
dynamically created
objects at the unload
of a mql5 program
See also
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Visibility Scope and
Lifetime of Variables
Language Basics
2000-2014, MetaQuotes Software Corp.
191
Preprocessor
Preprocessor is a special subsystem of the MQL5 compiler that is intended for preparation of the
program source code immediately before the program is compiled.
Preprocessor allows enhancement of the source code readability. The code can be structured by
including of specific files containing source codes of mql5-programs. The possibility to assign
mnemonic names to specific constants contributes to enhancement of the code readability.
Preprocessor also allows determining specific parameters of mql5-programs:
Declare constants
Set program properties
Include files in program text
Import functions
Conditional Compilation
If the # symbol is used in the first line of the program, this line is a preprocessor directive. A
preprocessor directive ends with a line feed character.
Language Basics
2000-2014, MetaQuotes Software Corp.
192
Declaration of Constants (#define)
The #define directive can be used to assign mnemonic names to constants. There are two forms:
#define identifier expression // parameter-free form
#define identifier(par1,... par8) expression // parametric form
The #define directive substitutes expression for all further found entries of identifier in the source
text. The identifier is replaced only if it is a separate token. The identifier is not replaced if it is part
of a comment, part of a string, or part of another longer identifier.
The constant identifier is governed by the same rules as variable names. The value can be of any type:
#define ABC 100
#define PI 3.14
#define COMPANY_NAME "MetaQuotes Software Corp."
...
void ShowCopyright()
{
Print("Copyright 2001-2009, ",COMPANY_NAME);
Print("http://www.metaquotes.net");
}
expression can consist of several tokens, such as keywords, constants, constant and non-constant
expressions. expression ends with the end of the line and can't be transferred to the next line.
Example:
#define TWO 2
#define THREE 3
#define INCOMPLETE TWO+THREE
#define COMPLETE (TWO+THREE)
void OnStart()
{
Print("2 + 3*2 = ",INCOMPLETE*2);
Print("(2 + 3)*2 = ",COMPLETE*2);
}
// Result
// 2 + 3*2 = 8
// (2 + 3)*2 = 10
Parametric Form #define
With the parametric form, all the subsequent found entries of identifier will be replaced by expression
taking into account the actual parameters. For example:
// example with two parameters a and b
#define A 2+3
#define B 5-1
#define MUL(a, b) ((a)*(b))
Language Basics
2000-2014, MetaQuotes Software Corp.
193
double c=MUL(A,B);
Print("c=",c);
/*
expression double c=MUL(A,B);
is equivalent to double c=((2+3)*(5-1));
*/
// Result
// c=20
Be sure to enclose parameters in parentheses when using the parameters in expression, as this will
help avoid non-obvious errors that are hard to find. If we rewrite the code without using the brackets,
the result will be different:
// example with two parameters a and b
#define A 2+3
#define B 5-1
#define MUL(a, b) a*b
double c=MUL(A,B);
Print("c=",c);
/*
expression double c=MUL(A,B);
is equivalent to double c=2+3*5-1;
*/
// Result
// c=16
When using the parametric form, maximum 8 parameters are allowed.
// correct parametric form
#define LOG(text) Print(__FILE__,"(",__LINE__,") :",text) // one parameter - 'text'
// incorrect parametric form
#define WRONG_DEF(p1, p2, p3, p4, p5, p6, p7, p8, p9) p1+p2+p3+p4 // more than 8 parameters from p1 to p9
See also
Identifiers, Character Constants
Language Basics
2000-2014, MetaQuotes Software Corp.
194
Program Properties (#property)
Every mql5-program allows to specify additional specific parameters named #property that help client
terminal in proper servicing for programs without the necessity to launch them explicitly. This
concerns external settings of indicators, first of all. Properties described in included files are
completely ignored. Properties must be specified in the main mq5-file.
#property identifier value
The compiler will write declared values in the configuration of the module executed.
Constant Type Description
icon string Path to the file of an image
that will be used as an icon of
the EX5 program. Path
specification rules are the
same as for resources. The
property must be specified in
the main module with the
MQL5 source code. The icon
file must be in the ICO format.
link string Link to the company website
copyright string The company name
version string Program version, maximum 31
characters
description string Brief text description of a
mql5-program. Several
description can be present,
each of them describes one
line of the text. The total
length of all description can
not exceed 511 characters
including line feed.
stacksize int Size of the stack for recursive
calls
library A library; no start function is
assigned, functions with the
export modifier can be
imported in other mql5-
programs
indicator_applied_price int Specifies the default value for
the "Apply to" field. You can
specify one of the values of
ENUM_APPLIED_PRICE. If the
property is not specified, the
default value is PRICE_CLOSE
Language Basics
2000-2014, MetaQuotes Software Corp.
195
indicator_chart_window Show the indicator in the chart
window
indicator_separate_window Show the indicator in a
separate window
indicator_height int Fixed height of the indicator
subwindow in pixels (property
INDICATOR_HEIGHT)
indicator_buffers int Number of buffers for
indicator calculation
indicator_plots int Number of graphic series in
the indicator
indicator_minimum double The bottom scaling limit for a
separate indicator window
indicator_maximum double The top scaling limit for a
separate indicator window
indicator_labelN string Sets a label for the N-th
graphic series displayed in
DataWindow. For graphic
series requiring multiple
indicator buffers
(DRAW_CANDLES,
DRAW_FILLING and others),
the tag names are defined by
the separator ';'.
indicator_colorN color The color for displaying line N,
where N is the number of
graphic series; numbering
starts from 1
indicator_widthN int Line thickness in graphic
series, where N - number of
graphic series, numbering
starts from 1
indicator_styleN int Line style in graphic series,
specified by the values of
ENUM_LINE_STYLE. N -
number of graphic series,
numbering starts from 1
indicator_typeN int Type of graphical plotting,
specified by the values of
ENUM_DRAW_TYPE. N -
number of graphic series,
numbering starts from 1
indicator_levelN double Horizontal level of N in a
separate indicator window
Language Basics
2000-2014, MetaQuotes Software Corp.
196
indicator_levelcolor color Color of horizontal levels of
the indicator
indicator_levelwidth int Thickness of horizontal levels
of the indicator
indicator_levelstyle int Style of horizontal levels of the
indicator
script_show_confirm Display a confirmation window
before running the script
script_show_inputs Display a window with the
properties before running the
script and disable this
confirmation window
tester_indicator string Name of a custom indicator in
the format of
"indicator_name.ex5".
Indicators that require testing
are defined automatically from
the call of the iCustom()
function, if the corresponding
parameter is set through a
constant string. For all other
cases (use of the
IndicatorCreate() function or
use of a non-constant string in
the parameter that sets the
indicator name) this property
is required
tester_file string File name for a tester with the
indication of extension, in
double quotes (as a constant
string). The specified file will
be passed to tester. Input files
to be tested, if there are
necessary ones, must always
be specified.
tester_library string Library name with the
extension, in double quotes. A
library can have extension dll
or ex5. Libraries that require
testing are defined
automatically. However, if any
of libraries is used by a custom
indicator, this property is
required
Sample Task of Description and Version Number
Language Basics
2000-2014, MetaQuotes Software Corp.
197
#property version "3.70" // Current version of the Expert Advisor
#property description "ZigZag universal with Pesavento Patterns"
#property description "At the moment in the indicator several ZigZags with different algorithms are included"
#property description "It is possible to embed a large number of other indicators showing the highs and"
#property description "lows and automatically build from these highs and lows various graphical tools"
Examples of Specifying a Separate Label for Each Indicator Buffer ( "C open; C high; C low; C
close")
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots 1
#property indicator_type1 DRAW_CANDLES
#property indicator_width1 3
#property indicator_label1 "C open;C high;C low;C close"
Language Basics
2000-2014, MetaQuotes Software Corp.
198
Language Basics
2000-2014, MetaQuotes Software Corp.
199
Including Files (#include)
The #include command line can be placed anywhere in the program, but usually all inclusions are placed
at the beginning of the source code. Call format:
#include <file_name>
#include "file_name"
Examples:
#include <WinUser32.mqh>
#include "mylib.mqh"
The preprocessor replaces the line #include <file_name> with the content of the file WinUser32.mqh.
Angle brackets indicate that the WinUser32.mqh file will be taken from the standard directory (usually
it is terminal_installation_directory\MQL5\Include). The current directory is not visible.
If the file name is enclosed in quotation marks, the search is made in the current directory (which
contains the main source file). The standard directory is not visible.
See also
Standard Library, Importing Functions
Language Basics
2000-2014, MetaQuotes Software Corp.
200
Importing Function (#import)
Functions are imported from compiled MQL5 modules (*. ex5 files) and from operating system modules
(files *. dll). The module name is specified in the #import directive. For compiler to be able to
correctly form the imported function call and organize proper transmission parameters, the full
description of functions is needed. Function descriptions immediately follow the #import "module
name" directive. New command #import (can be without parameters) completes the block of imported
function descriptions.
#import "file_name"
func1 define;
func2 define;
...
funcN define;
#import
Imported functions can have any names. Functions having the same names but from different modules
can be imported at the same time. Imported functions can have names that coincide with the names
of built-in functions. Operation of scope resolution defines which of the functions should be called.
The order of searching for a file specified after the #import keyword is described in Call of Imported
Functions.
Since the imported functions are outside the compiled module, the compiler can not verify the validity
of passed parameters. Therefore, to avoid run-time errors, one must accurately describe the
composition and order of parameters passed to imported functions. Parameters passed to imported
functions (both from EX5, and from the DLL-module) can have default values.
The following can't be used for parameters in imported functions:
pointers (*);
links to objects that contain dynamic arrays and/or pointers.
Classes, string arrays or complex objects that contain strings and/or dynamic arrays of any types
cannot be passed as a parameter to functions imported from DLL.
Examples:
#import "user32.dll"
int MessageBoxW(uint hWnd,string lpText,string lpCaption,uint uType);
#import "stdlib.ex5"
string ErrorDescription(int error_code);
int RGB(int red_value,int green_value,int blue_value);
bool CompareDoubles(double number1,double number2);
string DoubleToStrMorePrecision(double number,int precision);
string IntegerToHexString(int integer_number);
#import "ExpertSample.dll"
int GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
double GetArrayItemValue(double &arr[],int,int);
bool SetArrayItemValue(double &arr[],int,int,double);
Language Basics
2000-2014, MetaQuotes Software Corp.
201
double GetRatesItemValue(double &rates[][6],int,int,int);
#import
To import functions during execution of a mql5 program, early binding is used. This means that the
library is loaded during the loading of a program using its ex5 program.
It's not recommended to use a fully qualified name of the loadable module of type Drive:\Directory
\FileName.Ext. MQL5 libraries are loaded from the terminal_dir\MQL5\Libraries folder.
See also
Including Files
Language Basics
2000-2014, MetaQuotes Software Corp.
202
Conditional Compilation (#ifdef, #ifndef, #else, #endif)
Preprocessor conditional compilation directives allow compiling or skipping a part of the program
depending on the fulfillment of a certain condition.
That condition can take one of the following forms.
#ifdef identifier
// the code located here is compiled if the identifier has already been defined for the preprocessor in #define directive.
#endif
#ifndef identifier
// the code located here is compiled if the identifier is not currently defined by #define preprocessor directive.
#endif
Any of the conditional compilation directives can be followed by any number of lines possibly
containing #else directive and ending with #endif. If the verified condition is true, the lines between
#else and #endif are ignored. If the verified condition is not fulfilled, all lines between checking and
#else directive (or #endif directive if the former is absent) are ignored.
Example:
#ifndef TestMode
#define TestMode
#endif
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
#ifdef TestMode
Print("Test mode");
#else
Print("Normal mode");
#endif
}
Depending on the program type and compilation mode, the standard macros are defined the following
way:
__MQL5__ macro is defined when compiling *.mq5 file, __MQL4__ macro is defined when compiling
*.mq4 one.
_DEBUG macro is defined when compiling in debug mode.
_RELEASE macro is defined when compiling in release mode.
Example:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Language Basics
2000-2014, MetaQuotes Software Corp.
203
#ifdef __MQL5__
#ifdef _DEBUG
Print("Hello from MQL5 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL5 compiler [RELEASE]");
#endif
#endif
#else
#ifdef __MQL4__
#ifdef _DEBUG
Print("Hello from MQL4 compiler [DEBUG]");
#else
#ifdef _RELEASE
Print("Hello from MQL4 compiler [RELEASE]");
#endif
#endif
#endif
#endif
}
Language Basics
2000-2014, MetaQuotes Software Corp.
204
Object-Oriented Programming
Object-oriented programming (OOP) is programming primarily focused on data, while data and
behavior are being inseparably linked. Data and behavior together constitute a class, while objects are
class instances.
The components of the object-oriented approach are:
Encapsulation and type extensibility
Inheritance
Polymorphism
Overloading
Virtual functions
OOP considers computation as modeling of behavior. The modeled item is the object represented by
computational abstractions. Suppose we want to write a well known game "Tetris". To do this, we
must learn how to model the appearance of random shapes composed of four squares joined together
by edges. Also we need to regulate the falling speed of shapes, define operations of rotation and shift
of shapes. Moving of shapes on the screen is limited by the well's boundaries, this requirement must
also be modeled. Besides that, filled rows of cubes must be destroyed and achieved points must be
counted.
Thus, this easy-to-understand game requires the creation of several models - shape model, well
model, shape movement model and so on. All these models are abstractions, represented by
calculations in the computer. To describe these models, the concept of Abstract Data Type, ADT (or
complex data type) is used. Strictly speaking, the model of the "shapes" motion in the DOM is not a
data type, but it is a set of operations on the "shape" data type, using the restrictions of the "well"
data type.
Objects are class variables. Object-oriented programming allows you to easily create and use ADT.
Object-oriented programming uses the inheritance mechanism. The benefit of inheritance is in the
fact that it allows obtaining derivative types from data types already defined by a user.
For example, to create Tetris shapes, it's convenient to create a base class Shape first. The other
classes representing all seven possible shape types can be derived on its basis. Behavior of shapes is
defined in the base class, while implementation of behavior of each separate shape is defined in
derivative classes.
In OOP objects are responsible for their behavior. ADT developer should include a code to describe any
behavior that would normally be expected from the corresponding objects. The fact that the object
itself is responsible for its behavior, greatly simplifies the task of programming for the user of this
object.
If we want to draw a shape on the screen, we need to know where the center will be and how to draw
it. If a separate shape knows how to draw itself, the programmer should send a "draw" message when
using such a shape.
The MQL5 Language is a C++ like, and it also has the encapsulation mechanism for the implementation
of ADT. On the one hand encapsulation combines the internal details of the implementation of a
particular type, and on the other hand it combines externally accessible functions that can influence
objects of this type. Implementation details may be inaccessible for a program that uses this type.
Language Basics
2000-2014, MetaQuotes Software Corp.
205
The concept of OOP has a set of related concepts, including the following:
Simulation of actions from the real world
User-defined data types
Hiding the implementation details
Possibility of the code reuse through inheritance
Interpretation of function calls during execution
Some of these concepts are rather vague, some are abstract, others are general.
Language Basics
2000-2014, MetaQuotes Software Corp.
206
Encapsulation and Extensibility of Types
OOP is a balanced approach to writing software. Data and behavior are packed together. This
encapsulation creates user-defined data types, extending the language data types and interacting with
them. Types extensibility is an opportunity to add to the language user-defined data types, which are
also easy to use, as well as basic types.
An abstract data type, for example, a string, is a description of the ideal, well known behavior type.
The string user knows that the string operations, such as concatenation or print, have a certain
behavior. Concatenation and print operations are called methods.
A certain implementation of ADT may have some restrictions, for example, strings can be limited in
length. These limitations affect the behavior opened to all. At the same time, internal or private
implementation details do not affect directly the way the user sees the object. For example, the string
is often implemented as an array, while the internal base address of this array and its name are not
essential for the user.
Encapsulation is the ability to hide the implementation details when the open interfaces to user-
defined type is provided. In MQL5, as well as in C++, class and structure definitions (class and struct)
are used for the encapsulation provisions in combination with access keywords private, protected and
public.
The public keyword shows that access to the members that stand behind it, is open without
restrictions. Without this keyword, class members are locked by default. Private members are
accessible only by member functions only of its class.
Protected class functions are available to class functions not only in its class, but also in its inheritor
classes. Public class functions are available for any function within the scope of the class declaration.
The protection makes possible to hide part of the class implementation, thus preventing unexpected
changes in the structure of data. Access restriction or data hiding is a feature of the object-oriented
programming.
Usually, class functions are protected and declared with the protected modifier, the reading and
writing of the values are performed by using special so-called set-and get-methods that are defined by
the publics access modifier.
Example:
class CPerson
{
protected:
string m_name; // name
public:
void SetName(string n){m_name=n;}// sets name
string GetName(){return (m_name);} // returns name
};
This approach offers several advantages. First, by function name we can understand what it does -
Language Basics
2000-2014, MetaQuotes Software Corp.
207
sets or gets the value of a class member. Secondly, perhaps in the future we will need to change the
type of the m_name variable in the CPerson class or in any of its derivative classes.
In this case, we'll need just to change the implementation of functions SetName() and GetName(),
while objects of the CPerson class will be available for using in a program without any code changes
because the user will not even know that the data type of m_name has changed.
Example:
struct Name
{
string first_name; // name
string last_name; // last name
};
class CPerson
{
protected:
Name m_name; // name
public:
void SetName(string n);
string GetName(){return(m_name.first_name+" "+m_name.last_name);}
private:
string GetFirstName(string full_name);
string GetLastName(string full_name);
};
void CPerson::SetName(string n)
{
m_name.first_name=GetFirstName(n);
m_name.last_name=GetLastName(n);
}
string CPerson::GetFirstName(string full_name)
{
int pos=StringFind(full_name," ");
if(pos>0) StringSetCharacter(full_name,pos,0);
return(full_name);
}
string CPerson::GetLastName(string full_name)
{
string ret_string;
int pos=StringFind(full_name," ");
if(pos>0) ret_string=StringSubstr(full_name,pos+1);
else ret_string=full_name;
return(ret_string);
}
See also
Language Basics
2000-2014, MetaQuotes Software Corp.
208
Data Types
Language Basics
2000-2014, MetaQuotes Software Corp.
209
Inheritance
The characteristic feature of OOP is the encouragement of code reuse through inheritance. A new
class is made from the existing, which is called the base class. The derived class uses the members of
the base class, but can also modify and supplement them.
Many types are variations of the existing types. It is often tedious to develop a new code for each of
them. In addition, the new code implies new errors. The derived class inherits the description of the
base class, thus any re-development and re-testing of code is unnecessary. The inheritance
relationships are hierarchical.
Hierarchy is a method that allows to copy the elements in all their diversity and complexity. It
introduces the objects classification. For example, the periodic table of elements has gases. They
possess to properties inherent to all periodic elements.
Inert gases constitute the next important subclass. The hierarchy is that the inert gas, such as argon
is a gas, and gas, in its turn, is part of the system. Such a hierarchy allows to interpret behaviour of
inert gases easily. We know that their atoms contain protons and electrons, that is true for all other
elements.
We know that they are in a gaseous state at room temperature, like all the gases. We know that no
gas from inert gas subclass enters usual chemical reaction with other elements, and it is a property of
all inert gases.
Consider an example of the inheritance of geometric shapes. To describe the whole variety of simple
shapes (circle, triangle, rectangle, square etc.), the best way is to create a base class (ADT), which is
the ancestor of all the derived classes.
Let's create a base class CShape, which contains just the most common members describing the
shape. These members describe properties that are characteristic of any shape - the type of the shape
and main anchor point coordinates.
Example:
//--- The base class Shape
class CShape
{
protected:
int m_type; // Shape type
int m_xpos; // X - coordinate of the base point
int m_ypos; // Y - coordinate of the base point
public:
CShape(){m_type=0; m_xpos=0; m_ypos=0;} // constructor
void SetXPos(int x){m_xpos=x;} // set X
void SetYPos(int y){m_ypos=y;} // set Y
};
Next, create new classes derived from the base class, in which we will add necessary fields, each
specifying a certain class. For the Circle shape it is necessary to add a member that contains the
radius value. The Square shape is characterized by the side value. Therefore, derived classes,
inherited from the base class CShape will be declared as follows:
Language Basics
2000-2014, MetaQuotes Software Corp.
210
//--- The derived class circle
class CCircle : public CShape // After a colon we define the base class
{ // from which inheritance is made
private:
int m_radius; // circle radius
public:
CCircle(){m_type=1;}// constructor, type 1
};
For the Square shape class declaration is similar:
//--- the derived class Square
class CSquare : public CShape // After a colon we define the base class
{ // from which inheritance is made
private:
int m_square_side; // square side
public:
CSquare(){m_type=2;} // constructor, type 2
};
It should be noted that while object is created the base class constructor is called first, and then the
constructor of the derived class is called. When an object is destroyed first the destructor of the
derived class is called, and then a base class destructor is called.
Thus, by declaring the most general members in the base class, we can add an additional members in
derived classes, which specify a particular class. Inheritance allows creating powerful code libraries
that can be reused many times.
The syntax for creating a derived class from an already existing on is as follows:
class class_name :
(public | protected | private)
opt
base_class_name
{
class members declaration
};
One of aspects of the derived class is the visibility (openness) of its members successors (heirs). The
public, protected and private keywords are used to indicate the extent, to which members of the base
class will be available for the derived one. The public keyword after a colon in the header of a derived
class indicates that the protected and public members of the base class CShape should be inherited as
protected and public members of the derived class CCircle.
The private class members of the base class are not available for the derived class. The public
inheritance also means that derived classes (CCircle and CSquare) are CShapes. That is, the Square
(CSquare) is a shape (CShape), but the shape does not necessarily have to be a square.
The derived class is a modification of the base class, it inherits the protected and public members of
the base class. The constructors and destructors of the base class cannot be inherited. In addition to
Language Basics
2000-2014, MetaQuotes Software Corp.
211
members of the base class, new members are added in a derivative class.
The derived class may include the implementation of member functions, different from the base class.
It has nothing common with an overload, when the meaning of the same function name may be
different for different signatures.
In protected inheritance, public and protected members of base class become protected members of
derived class. In private inheritance, the public and protected members of base class become private
members of the derived class.
In protected and private inheritance, the relation that "the object of a derivative class is object of a
base class" is not true. The protected and private inheritance types are rare, and each of them needs
to be used carefully.
It should be understood that the type of inheritance (public, protected or private) does not affect the
ways of accessing the members of base classes in the hierarchy of inheritance from a derived
class. With any type of inheritance, only base class members declared with public and protected access
specifiers will be available out of the derived classes. Let's consider it in the following example:
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Example class with a few access types |
//+------------------------------------------------------------------+
class CBaseClass
{
private: //--- The private member is not available from derived classes
int m_member;
protected: //--- The protected method is available from the base class and its derived classes
int Member(){return(m_member);}
public: //--- Class constructor is available to all members of classes
CBaseClass(){m_member=5;return;};
private: //--- A private method for assigning a value to m_member
void Member(int value) { m_member=value;};
};
//+------------------------------------------------------------------+
//| Derived class with errors |
//+------------------------------------------------------------------+
class CDerived: public CBaseClass // specification of public inheritance can be omitted, since it is default
{
public:
void Func() // In the derived class, define a function with calls to base class members
{
//--- An attempt to modify a private member of the base class
m_member=0; // Error, the private member of the base class is not available
Member(0); // Error, the private method of the base class is not available in derived classes
//--- Reading the member of the base class
Print(m_member); // Error, the private member of the base class is not available
Language Basics
2000-2014, MetaQuotes Software Corp.
212
Print(Member()); // No error, protected method is available from the base class and its derived classes
}
};
In the above example, CBaseClass has only a public method the constructor. Constructors are called
automatically when creating a class object. Therefore, the private member m_member and the
protected methods Member() cannot be called from the outside. But in case of public inheritance, the
Member() method of the base class will be available from the derived classes.
In case of protected inheritance, all the members of the base class with public and protected access
become protected. It means that if public data members and methods of the base class were
accessible from the outside, with protected inheritance they are available only from the classes of the
derived class and its further derivatives.
//+------------------------------------------------------------------+
//| Example class with a few access types |
//+------------------------------------------------------------------+
class CBaseMathClass
{
private: //--- The private member is not available from derived classes
double m_Pi;
public: //--- Getting and setting a value for m_Pi
void SetPI(double v){m_Pi=v;return;};
double GetPI(){return m_Pi;};
public: // The class constructor is available to all members
CBaseMathClass() {SetPI(3.14); PrintFormat("%s",__FUNCTION__);};
};
//+------------------------------------------------------------------+
//| Derived class, in which m_Pi cannot be modified |
//+------------------------------------------------------------------+
class CProtectedChildClass: protected CBaseMathClass // Protected inheritance
{
private:
double m_radius;
public: //--- Public methods in the derived class
void SetRadius(double r){m_radius=r; return;};
double GetCircleLength(){return GetPI()*m_radius;};
};
//+------------------------------------------------------------------+
//| Script starting function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- When creating a derived class, the constructor of the base class will be called automatically
CProtectedChildClass pt;
//--- Specify radius
pt.SetRadius(10);
PrintFormat("Length=%G",pt.GetCircleLength());
//--- If comment the string below, we will get an error at the stage of compilation, since SetPi() is now protected
// pt.SetPI(3);
Language Basics
2000-2014, MetaQuotes Software Corp.
213
//--- Now declare a variable of the base class and try to set the Pi constant equal to 10
CBaseMathClass bc;
bc.SetPI(10);
//--- Here is the result
PrintFormat("bc.GetPI()=%G",bc.GetPI());
}
The example shows that methods SetPI() and GetPi() in the base class CBaseMathClass are open and
available for calling from any place of the program. But at the same time, for CProtectedChildClass
which is derived from it these methods can be called only from the methods of the
CProtectedChildClass class or its derived classes.
In case of private inheritance, all the members of the basic class with the public and protected access
become private, and calling them becomes impossible in further inheritance.
MQL5 has no multiple inheritance.
See also
Structures and Classes
Language Basics
2000-2014, MetaQuotes Software Corp.
214
Polymorphism
Polymorphism is an opportunity for different classes of objects, related through inheritance, to
respond in various ways when calling the same function element. It helps to create a universal
mechanism describing the behavior of not only the base class, but also descendant classes.
Let's continue to develop a base class CShape, and define a member function GetArea(), designed to
calculate the area of a shape. In all the descendant classes, produced by inheritance from the base
class, we re-define this function in accordance with rules of calculating the area of a particular shape.
For a square (class CSquare), the area is calculated through its sides, for a circle (class CCircle), area
is expressed through its radius etc. We can create an array to store objects of CShape type, in which
both objects of a base class and those of all descendant classes can be stored. Further we can call the
same function for each element of the array.
Example:
//--- Base class
class CShape
{
protected:
int m_type; // Shape type
int m_xpos; // X - coordinate of the base point
int m_ypos; // Y - coordinate of the base point
public:
void CShape(){m_type=0;}; // constructor, type=0
int GetType(){return(m_type);};// returns type of the shape
virtual
double GetArea(){return (0); }// returns area of the shape
};
Now, all of the derived classes have a member function getArea(), which returns a zero value. The
implementation of this function in each descendant will vary.
//--- The derived class Circle
class CCircle : public CShape // After a colon we define the base class
{ // from which inheritance is made
private:
double m_radius; // circle radius
public:
void CCircle(){m_type=1;}; // constructor, type=1
void SetRadius(double r){m_radius=r;};
virtual double GetArea(){return (3.14*m_radius*m_radius);}// circle area
};
For the class Square the declaration is the same:
//--- The derived class Square
class CSquare : public CShape // After a colon we define the base class
{ // from which inheritance is made
Language Basics
2000-2014, MetaQuotes Software Corp.
215
private:
double m_square_side; // square side
public:
void CSquare(){m_type=2;}; // constructor, type=1
void SetSide(double s){m_square_side=s;};
virtual double GetArea(){return (m_square_side*m_square_side);}// square area
};
For calculating the area of the square and circle, we need the corresponding values of m_radius and
m_square_side, so we have added the functions SetRadius and SetSide() in the declaration of the
corresponding class.
It is assumed that object of different types (CCircle and CSquare) derived from one base type CShape
are used in our program. Polymorphism allows creating an array of objects of the base CShape class,
but when declaring this array, these objects are yet unknown and their type is undefined.
The decision on what type of object will be contained in each element of the array will be taken
directly during program execution. This involves the dynamic creation of objects of the appropriate
classes, and hence the necessity to use object pointers instead of objects.
The new operator is used for dynamic creation of objects. Each such object must be individually and
explicitly deleted using the delete operator. Therefore we will declare an array of pointers of CShape
type, and create an object of a proper type for each element (new Class_Name), as shown in the
following script example:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Declare an array of object pointers of the base type
CShape *shapes[5]; // An array of pointers to CShape object
//--- Here fill in the array with derived objects
//--- Declare a pointer to the object of CCircle type
CCircle *circle=new CCircle();
//--- Set object properties at the circle pointer
circle.SetRadius(2.5);
//--- Place the pointer value in shapes[0]
shapes[0]=circle;
//--- Create another CCircle object and write down its pointer in shapes[1]
circle=new CCircle();
shapes[1]=circle;
circle.SetRadius(5);
//--- Here we intentionally "forget" to set a value for shapes[2]
//circle=new CCircle();
//circle.SetRadius(10);
//shapes[2]=circle;
Language Basics
2000-2014, MetaQuotes Software Corp.
216
//--- Set NULL for the element that is not used
shapes[2]=NULL;
//--- Create a CSquare object and write down its pointer to shapes[3]
CSquare *square=new CSquare();
square.SetSide(5);
shapes[3]=square;
//--- Create a CSquare object and write down its pointer to shapes[4]
square=new CSquare();
square.SetSide(10);
shapes[4]=square;
//--- We have an array of pointers, get its size
int total=ArraySize(shapes);
//--- Pass in a loop through all pointers in the array
for(int i=0; i<5;i++)
{
//--- If the pointer at the specified index is valid
if(CheckPointer(shapes[i])!=POINTER_INVALID)
{
//--- Log the type and square of the shape
PrintFormat("The object of type %d has the square %G",
shapes[i].GetType(),
shapes[i].GetArea());
}
//--- If the pointer has type POINTER_INVALID
else
{
//--- Notify of an error
PrintFormat("Object shapes[%d] has not been initialized! Its pointer is %s",
i,EnumToString(CheckPointer(shapes[i])));
}
}
//--- We must delete all created dynamic objects
for(int i=0;i<total;i++)
{
//--- We can delete only the objects with pointers of POINTER_DYNAMIC type
if(CheckPointer(shapes[i])==POINTER_DYNAMIC)
{
//--- Notify of deletion
PrintFormat("Deleting shapes[%d]",i);
//--- Delete an object by its pointer
delete shapes[i];
}
}
}
Language Basics
2000-2014, MetaQuotes Software Corp.
217
Please note that when deleting an object using the delete operator, the type of its pointer must be
checked. Only objects with the POINTER_DYNAMIC pointer can be deleted using delete. For pointers of
other type, an error will be returned.
But besides the redefining of functions during inheritance, polymorphism also includes the
implementation of one and the same functions with different sets of parameters within a class. This
means that the class may have several functions with the same name but with a different type and/or
set of parameters. In this case, polymorphism is implemented through the function overload.
See also
Standard Library
Language Basics
2000-2014, MetaQuotes Software Corp.
218
Overload
Within one class it is possible to define two or more methods that use the same name, but have
different numbers of parameters. When this occurs, methods are called overloaded and such a process
is referred to as method overloading.
Method overloading is one of ways of polymorphism realization. Overloading of methods is performed
according to the same rules as the function overloading.
If the called function has no exact match, the compiler searches for a suitable function on three levels
sequentially:
1. search within class methods;
2. search within the base class methods, consistently from the nearest ancestor to the very first.
3. search among other functions.
If there is no exact correspondence at all levels, but several suitable functions at different levels have
been found, the function found at the least level is used. Within one level, there can't be more than
one suitable function.
See also
Reloading Functions
Language Basics
2000-2014, MetaQuotes Software Corp.
219
Virtual Functions
The virtual keyword is the function specifier, which provides a mechanism to select dynamically at
runtime an appropriate function-member among the functions of basic and derived classes. Structures
cannot have virtual functions. It can be used to change the declarations for function-members only.
The virtual function, like an ordinary function, must have an executable body. When called, its
semantic is the same as that of other functions.
A virtual function may be overridden in a derived class. The choice of what function definition should
be called for a virtual function is made dynamically (at runtime). A typical case is when a base class
contains a virtual function, and derived classes have their own versions of this function.
The pointer to the base class can indicate either a base class object or the object of a derived class.
The choice of the member-function to call will be performed at runtime and will depend on the type of
the object, not the type of the pointer. If there is no member of a derived type, the virtual function of
the base class is used by default.
Destructors are always virtual, regardless of whether they are declared with the virtual keyword or not.
Let's consider the use of virtual functions on the example of MT5_Tetris.mq5. The base class
CTetrisShape with the virtual function Draw is defined in the included file MT5_TetisShape.mqh.
//+------------------------------------------------------------------+
class CTetrisShape
{
protected:
int m_type;
int m_xpos;
int m_ypos;
int m_xsize;
int m_ysize;
int m_prev_turn;
int m_turn;
int m_right_border;
public:
void CTetrisShape();
void SetRightBorder(int border) { m_right_border=border; }
void SetYPos(int ypos) { m_ypos=ypos; }
void SetXPos(int xpos) { m_xpos=xpos; }
int GetYPos() { return(m_ypos); }
int GetXPos() { return(m_xpos); }
int GetYSize() { return(m_ysize); }
int GetXSize() { return(m_xsize); }
int GetType() { return(m_type); }
void Left() { m_xpos-=SHAPE_SIZE; }
void Right() { m_xpos+=SHAPE_SIZE; }
void Rotate() { m_prev_turn=m_turn; if(++m_turn>3) m_turn=0; }
virtual void Draw() { return; }
Language Basics
2000-2014, MetaQuotes Software Corp.
220
virtual bool CheckDown(int& pad_array[]);
virtual bool CheckLeft(int& side_row[]);
virtual bool CheckRight(int& side_row[]);
};
Further, for each derived class, this function is implemented in accordance with characteristics of a
descendant class. For example, the first shape CTetrisShape1 has its own implementation of the
Draw() function:
class CTetrisShape1 : public CTetrisShape
{
public:
//--- shape drawing
virtual void Draw()
{
int i;
string name;
//---
if(m_turn==0 || m_turn==2)
{
//--- horizontal
for(i=0; i<4; i++)
{
name=SHAPE_NAME+(string)i;
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,m_xpos+i*SHAPE_SIZE);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,m_ypos);
}
}
else
{
//--- vertical
for(i=0; i<4; i++)
{
name=SHAPE_NAME+(string)i;
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,m_xpos);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,m_ypos+i*SHAPE_SIZE);
}
}
}
}
The Square shape is described by class CTetrisShape6 and has its own implementation of the Draw()
method:
class CTetrisShape6 : public CTetrisShape
{
public:
//--- Shape drawing
virtual void Draw()
{
Language Basics
2000-2014, MetaQuotes Software Corp.
221
int i;
string name;
//---
for(i=0; i<2; i++)
{
name=SHAPE_NAME+(string)i;
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,m_xpos+i*SHAPE_SIZE);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,m_ypos);
}
for(i=2; i<4; i++)
{
name=SHAPE_NAME+(string)i;
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,m_xpos+(i-2)*SHAPE_SIZE);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,m_ypos+SHAPE_SIZE);
}
}
};
Depending on the class, to which the created object belongs, it calls the virtual function of this or that
derived class.
void CTetrisField::NewShape()
{
//--- creating one of the 7 possible shapes randomly
int nshape=rand()%7;
switch(nshape)
{
case 0: m_shape=new CTetrisShape1; break;
case 1: m_shape=new CTetrisShape2; break;
case 2: m_shape=new CTetrisShape3; break;
case 3: m_shape=new CTetrisShape4; break;
case 4: m_shape=new CTetrisShape5; break;
case 5: m_shape=new CTetrisShape6; break;
case 6: m_shape=new CTetrisShape7; break;
}
//--- draw
m_shape.Draw();
//---
}
See also
Standard Library
Language Basics
2000-2014, MetaQuotes Software Corp.
222
Static members of a Class/Structure
Static Members
The members of a class can be declared using the storage class modifier static. These data members
are shared by all instances of this class and are stored in one place. Non-static data members are
created for each class object variable.
The inability to declare static members of a class would have led to the need to declare these data on
the the global level of the program. It would break the relationship between the data and their class,
and is not consistent with the basic paradigm of the OOP - joining data and methods for handling them
in a class. The static member allows class data that are not specific to a particular instance to exist in
the class scope.
Since a static class member does not depend on the particular instance, the reference to it is as
follows:
class_name::variable
where class_name is the name of the class, and variable is the name of the class member.
As you see, to access the static member of a class, context resolution operator :: is used. When you
access a static member within class methods, the context operator is optional.
Static member of a class has to be explicitly initialized with desired value. For this it must be declared
and initialized in global scope. The sequence of static members initialization will correspond to the
sequence of their declaration in global scope.
For example, we have a class CParser used for parsing the text, and we need to count the total
number of processed words and characters. We only need to declare the necessary class members as
static and initialize them at the global level. Then all instances of the class will use common counters
of words and characters.
//+------------------------------------------------------------------+
//| Class "Text analyzer" |
//+------------------------------------------------------------------+
class CParser
{
public:
static int s_words;
static int s_symbols;
//--- Constructor and destructor
Parser(void);
~Parser(void){};
};
...
//--- Initialization of static members of the Parser class at the global level
int CParser::s_words=0;
int CParser::s_symbols=0;
A static class member can be declared with the const keyword. Such static constants must be
initialized at the global level with the const keyword:
Language Basics
2000-2014, MetaQuotes Software Corp.
223
//+------------------------------------------------------------------+
//| Class "Stack" for storing processed data |
//+------------------------------------------------------------------+
class CStack
{
public:
CStack(void);
~CStack(void){};
...
private:
static const int s_max_length; // Maximum stack capacity
};
//--- Initialization of the static constant of the CStack class
const int CStack::s_max_length=1000;
Pointer this
The keyword this denotes an implicitly declared pointer to itself to a specific instance of the class, in
the context of which the method is executed. It can be used only in non-static methods of the class.
Pointer this is an implicit non-static member of any class.
In static functions you can access only static members/methods of a class.
Static Methods
In MQL5 member functions of type static can be used. The static modifier must precede the return
type of a function in the declaration inside a class.
class CStack
{
public:
//--- Constructor and destructor
CStack(void){};
~CStack(void){};
//--- Maximum stack capacity
static int Capacity();
private:
int m_length; // The number of elements in the stack
static const int s_max_length; // Maximum stack capacity
};
//+------------------------------------------------------------------+
//| Returns the maximum number of elements to store in the stack |
//+------------------------------------------------------------------+
int CStack::Capacity(void)
{
return(s_max_length);
}
//--- Initialization of the static constant of the CStack class
const int CStack::s_max_length=1000;
Language Basics
2000-2014, MetaQuotes Software Corp.
224
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- declare CStack type variable
CStack stack;
//--- call the object's static method
Print("CStack.s_max_length=",stack.Capacity());
//--- it can also be called the following way, as the method is static and does not require the presence of the object
Print("CStack.s_max_length=",CStack::Capacity());
}
A method with the const modifier is called constant and cannot modify implicit members of its class.
Declaration of constant functions of a class and constant parameters is called const-correctness
control. Through this control you can be sure that the compiler will ensure the consistency of values of
objects and will return an error during compilation if there is something wrong.
The const modifier is placed after the list of arguments inside a class declaration. Definition outside a
class should also include the const modifier:
//+------------------------------------------------------------------+
//| Class "Rectangle" |
//+------------------------------------------------------------------+
class CRectangle
{
private:
double m_width; // Width
double m_height; // Height
public:
//--- Constructors and destructor
CRectangle(void):m_width(0),m_height(0){};
CRectangle(const double w,const double h):m_width(w),m_height(h){};
~CRectangle(void){};
//--- Calculating the area
double Square(void) const;
static double Square(const double w,const double h);// { return(w*h); }
};
//+------------------------------------------------------------------+
//| Returns the area of the "Rectangle" object |
//+------------------------------------------------------------------+
double CRectangle::Square(void) const
{
return(Square(m_width,m_height));
}
//+------------------------------------------------------------------+
//| Returns the product of two variables |
//+------------------------------------------------------------------+
static double CRectangle::Square(const double w,const double h)
{
Language Basics
2000-2014, MetaQuotes Software Corp.
225
return(w*h);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Create a rectangle rect with the sides equal to 5 and 6
CRectangle rect(5,6);
//--- Find the rectangle area using a constant method
PrintFormat("rect.Square()=%.2f",rect.Square());
//--- Find the product of numbers using the static method of class CRectangle
PrintFormat("CRectangle::Square(2.0,1.5)=%f",CRectangle::Square(2.0,1.5));
}
An additional argument in favor of using the constancy control is the fact that in this case, the
compiler generates a special optimization, for example, places a constant object in read-only memory.
A static function cannot be determined with the const modifier, because this modifier ensures the
constancy of the instance members when calling this function. But, as mentioned above, the static
function cannot access non-static class members.
See also
Static Variables, Variables, References. Modifier & and Keyword this
Language Basics
2000-2014, MetaQuotes Software Corp.
226
Function templates
Overloaded functions are commonly used to perform similar operations on various data types.
ArraySize() is a simple example of such function in MQL5. It returns size of any type of array. In fact,
this system function is overloaded and the entire implementation of such an overload is hidden from
MQL5 application developers:
int ArraySize(
void& array[] // checked array
);
It means that MQL5 language compiler inserts necessary implementation for each call of this function.
For example, that is how it can be done for integer type arrays:
int ArraySize(
int& array[] // array with int type elements
);
ArraySize() function can be displayed the following way for MqlRates type array for working with
quotations in historical data format:
int ArraySize(
MqlRates& array[]// array filled with MqlRates type values
);
Thus, it is very convenient to use the same function for working with different types. However, all
preliminary work should be carried out the necessary function should be overloaded for all data types
it should correctly work with.
There is a convenient solution. If similar operations should be executed for each data type, it is
possible to use function templates. In this case, a programmer needs to write only one function
template description. When describing the template in such a way, we should specify only some formal
parameter instead of some definite data type the function should work with. The compiler will
automatically generate various functions for the appropriate handling of each type based on the types
of the arguments used when calling the function.
Function template definition starts with the template keyword followed by the list of formal
parameters in angle brackets. Each formal parameter is preceded by the typename keyword. Formal
parameter types are built-in or user-defined types. They are used:
to specify the types of function arguments,
to specify the types of function's return value,
to declare the variables inside the function definition
Number of template parameters cannot exceed eight. Each formal parameter in the template
definition should appear in the list of function parameters at least once. Each name of the formal
parameter should be unique.
Below is an example of a function template for searching the highest value in the array of any numeric
type (integer and real numbers):
Language Basics
2000-2014, MetaQuotes Software Corp.
227
template<typename T>
T ArrayMax(T &arr[])
{
uint size=ArraySize(arr);
if(size==0) return(0);

T max=arr[0];
for(uint n=1;n<size;n++)
if(max<arr[n]) max=arr[n];
//---
return(max);
}
This template defines the function that finds the highest value in the passed array and returns this
value as a result. Keep in mind that the ArrayMaximum() function built in MQL5 returns only the
highest value index that can be used to find the value itself. For example:
//--- create an array
double array[];
int size=50;
ArrayResize(array,size);
//--- fill with random values
for(int i=0;i<size;i++)
{
array[i]=MathRand();
}
//--- find position of the highest value in the array
int max_position=ArrayMaximum(array);
//--- now, get the highest value itself in the array
double max=array[max_position];
//--- display the found value
Print("Max value = ",max);
Thus, we have performed two steps to get the highest value in the array. With ArrayMax() function
template, we can get the result of the necessary type just by passing the array of an appropriate type
into this function. It means that instead of two last lines
//--- find position of the highest value in the array
int max_position=ArrayMaximum(array);
//--- now, receive the highest value itself in the array
double max=array[max_position];
we now can use only one line, in which the returned result has the same type as the array passed into
function:
//--- find the highest value
double max=ArrayMax(array);
In this case, the type of result returned by the ArrayMax() function will automatically match the type of
array.
Language Basics
2000-2014, MetaQuotes Software Corp.
228
Use the typename keyword to get the argument type as a string in order to create general purpose
methods of working with various data types. Let's consider a specific example of the function that
returns data type as a string:
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
//---
CTrade trade;
double d_value=M_PI;
int i_value=INT_MAX;
Print("d_value: type=",GetTypeName(d_value), ", value=", d_value);
Print("i_value: type=",GetTypeName(i_value), ", value=", i_value);
Print("trade: type=",GetTypeName(trade));
//---
}
//+------------------------------------------------------------------+
//| Type is returned as a line |
//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
{
//--- return the type as a line
return(typename(T));
//---
}
Function templates can also be used for class methods, for example:
class CFile
{
...
public:
...
template<typename T>
uint WriteStruct(T &data);
};
template<typename T>
uint CFile::WriteStruct(T &data)
{
...
return(FileWriteStruct(m_handle,data));
}
Language Basics
2000-2014, MetaQuotes Software Corp.
229
Function templates should not be declared with export, virtual and #import keywords.
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
230
Standard Constants, Enumerations and Structures
To simplify the program writing and to make program texts more convenient for perception, the MQL5
language provides predefined standard constants and enumerations. Besides that, service structures
are used for storing information.
Standard constants are similar to macros and are of int type.
The constants are grouped by their purposes:
Chart constants are used when working with price charts: opening, navigation, setting parameters;
Objects constants are intended for processing graphical objects that can be created and displayed in
charts;
Indicators constants are used for working with standard and custom indicators;
Environment state constants describe properties of a MQL5-program, show information about a
client terminal, financial instrument and current account;
Trade constants allow to specify a variety of information in the course of trading;
Named constants are constants of the MQL5 language;
Data structures describe data storage formats used;
Codes of errors and warnings describe compiler messages and trading server answers to trade
requests;
In/out constants are designed for working with file functions and displaying messages on the screen
by the MessageBox() function.
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
231
Chart Constants
Constants describing various properties of charts are divided into the following groups:
Types of events events that occur when working with charts;
Chart timeframes standard built-in periods;
Properties of chart identifiers that are used as parameters of chart functions;
Positioning constants - value of a parameter of the ChartNavigate() function;
Displaying charts - setting the chart appearance.

Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
232
Types of Chart Events
There are 9 types of events that can be processed using the predefined function OnChartEvent(). For
custom events 65536 identifiers are provided in the range of CHARTEVENT_CUSTOM to
CHARTEVENT_CUSTOM_LAST inclusive. To generate a custom event, the EventChartCustom() function
should be used.
ENUM_CHART_EVENT
ID Description
CHARTEVENT_KEYDOWN Keystrokes
CHARTEVENT_MOUSE_MOVE Mouse move, mouse clicks (if
CHART_EVENT_MOUSE_MOVE=true is set for the
chart)
CHARTEVENT_OBJECT_CREATE Graphical object created (if
CHART_EVENT_OBJECT_CREATE=true is set for
the chart)
CHARTEVENT_OBJECT_CHANGE Graphical object property changed via the
properties dialog
CHARTEVENT_OBJECT_DELETE Graphical object deleted (if
CHART_EVENT_OBJECT_DELETE=true is set for
the chart)
CHARTEVENT_CLICK Clicking on a chart
CHARTEVENT_OBJECT_CLICK Clicking on a graphical object
CHARTEVENT_OBJECT_DRAG Drag and drop of a graphical object
CHARTEVENT_OBJECT_ENDEDIT End of text editing in the graphical object Edit
CHARTEVENT_CHART_CHANGE Change of the chart size or modification of chart
properties through the Properties dialog
CHARTEVENT_CUSTOM Initial number of an event from a range of
custom events
CHARTEVENT_CUSTOM_LAST The final number of an event from a range of
custom events
For each type of event, the input parameters of the OnChartEvent() function have definite values that
are required for the processing of this event. The events and values passed through this parameters
are listed in the below table.
Event Value of the id
parameter
Value of the
lparam
parameter
Value of the
dparam
parameter
Value of the
sparam
parameter
Event of a
keystroke
CHARTEVENT_KE
YDOWN
code of a
pressed key
Repeat count
(the number of
The string value
of a bit mask
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
233
times the
keystroke is
repeated as a
result of the user
holding down the
key)
describing the
status of
keyboard buttons
Mouse events (if
CHART_EVENT_
MOUSE_MOVE=tr
ue is set for the
chart)
CHARTEVENT_MO
USE_MOVE
the X coordinate the Y coordinate The string value
of a bit mask
describing the
status of mouse
buttons
event of
graphical object
creation (if
CHART_EVENT_O
BJECT_CREATE=t
rue is set for the
chart)
CHARTEVENT_OB
JECT_CREATE
Name of the
created graphical
object
Event of change
of an object
property via the
properties dialog
CHARTEVENT_OB
JECT_CHANGE
Name of the
modified
graphical object
Event of
graphical object
deletion (if
CHART_EVENT_O
BJECT_DELETE=t
rue is set for the
chart)
CHARTEVENT_OB
JECT_DELETE
Name of the
deleted graphical
object
Event of a
mouse click on
the chart
CHARTEVENT_C
LICK
the X coordinate the Y coordinate
Event of a
mouse click in a
graphical object
belonging to the
chart
CHARTEVENT_OB
JECT_CLICK
the X coordinate the Y coordinate Name of the
graphical object,
on which the
event occurred
Event of a
graphical object
dragging using
the mouse
CHARTEVENT_OB
JECT_DRAG
Name of the
moved graphical
object
Event of the
finished text
editing in the
entry box of the
LabelEdit
CHARTEVENT_OB
JECT_ENDEDIT
Name of the
LabelEdit
graphical object,
in which text
editing has
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
234
graphical object completed
Event of change
of the chart size
or modification
of chart
properties
through the
Properties dialog
CHARTEVENT_C
HART_CHANGE

ID of the user
event under the
N number
CHARTEVENT_CU
STOM+N
Value set by the
EventChartCusto
m() function
Value set by the
EventChartCusto
m() function
Value set by the
EventChartCusto
m() function
Example:
#define KEY_NUMPAD_5 12
#define KEY_LEFT 37
#define KEY_UP 38
#define KEY_RIGHT 39
#define KEY_DOWN 40
#define KEY_NUMLOCK_DOWN 98
#define KEY_NUMLOCK_LEFT 100
#define KEY_NUMLOCK_5 101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP 104
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("The expert with name ",MQL5InfoString(MQL5_PROGRAM_NAME)," is running");
//--- enable object create events
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- enable object delete events
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // Event identifier
const long& lparam, // Event parameter of long type
const double& dparam, // Event parameter of double type
const string& sparam // Event parameter of string type
)
{
//--- the left mouse button has been pressed on the chart
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
235
if(id==CHARTEVENT_CLICK)
{
Print("The coordinates of the mouse click on the chart are: x = ",lparam," y = ",dparam);
}
//--- the mouse has been clicked on the graphic object
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("The mouse has been clicked on the object with name '"+sparam+"'");
}
//--- the key has been pressed
if(id==CHARTEVENT_KEYDOWN)
{
switch(lparam)
{
case KEY_NUMLOCK_LEFT: Print("The KEY_NUMLOCK_LEFT has been pressed"); break;
case KEY_LEFT: Print("The KEY_LEFT has been pressed"); break;
case KEY_NUMLOCK_UP: Print("The KEY_NUMLOCK_UP has been pressed"); break;
case KEY_UP: Print("The KEY_UP has been pressed"); break;
case KEY_NUMLOCK_RIGHT: Print("The KEY_NUMLOCK_RIGHT has been pressed"); break;
case KEY_RIGHT: Print("The KEY_RIGHT has been pressed"); break;
case KEY_NUMLOCK_DOWN: Print("The KEY_NUMLOCK_DOWN has been pressed"); break;
case KEY_DOWN: Print("The KEY_DOWN has been pressed"); break;
case KEY_NUMPAD_5: Print("The KEY_NUMPAD_5 has been pressed"); break;
case KEY_NUMLOCK_5: Print("The KEY_NUMLOCK_5 has been pressed"); break;
default: Print("Some not listed key has been pressed");
}
ChartRedraw();
}
//--- the object has been deleted
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("The object with name ",sparam," has been deleted");
}
//--- the object has been created
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("The object with name ",sparam," has been created");
}
//--- the object has been moved or its anchor point coordinates has been changed
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("The anchor point coordinates of the object with name ",sparam," has been changed");
}
//--- the text in the Edit of object has been changed
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("The text in the Edit field of the object with name ",sparam," has been changed");
}
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
236
See also
Event Handling Functions, Working with events
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
237
Chart Timeframes
All predefined timeframes of charts have unique identifiers. The PERIOD_CURRENT identifier means
the current period of a chart, at which a mql5-program is running.
ENUM_TIMEFRAMES
ID Description
PERIOD_CURRENT Current timeframe
PERIOD_M1 1 minute
PERIOD_M2 2 minutes
PERIOD_M3 3 minutes
PERIOD_M4 4 minutes
PERIOD_M5 5 minutes
PERIOD_M6 6 minutes
PERIOD_M10 10 minutes
PERIOD_M12 12 minutes
PERIOD_M15 15 minutes
PERIOD_M20 20 minutes
PERIOD_M30 30 minutes
PERIOD_H1 1 hour
PERIOD_H2 2 hours
PERIOD_H3 3 hours
PERIOD_H4 4 hours
PERIOD_H6 6 hours
PERIOD_H8 8 hours
PERIOD_H12 12 hours
PERIOD_D1 1 day
PERIOD_W1 1 week
PERIOD_MN1 1 month
Example:
string chart_name="test_Object_Chart";
Print("Let's try to create a Chart object with the name ",chart_name);
//--- If such an object does not exist - create it
if(ObjectFind(0,chart_name)<0)ObjectCreate(0,chart_name,OBJ_CHART,0,0,0,0,0);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
238
//--- Define symbol
ObjectSetString(0,chart_name,OBJPROP_SYMBOL,"EURUSD");
//--- Set X coordinate of the anchor point
ObjectSetInteger(0,chart_name,OBJPROP_XDISTANCE,100);
//--- Set Y coordinate of the anchor point
ObjectSetInteger(0,chart_name,OBJPROP_YDISTANCE,100);
//--- Set the width of chart
ObjectSetInteger(0,chart_name,OBJPROP_XSIZE,400);
//--- Set the height
ObjectSetInteger(0,chart_name,OBJPROP_YSIZE,300);
//--- Set the timeframe
ObjectSetInteger(0,chart_name,OBJPROP_PERIOD,PERIOD_D1);
//--- Set scale (from 0 to 5)
ObjectSetDouble(0,chart_name,OBJPROP_SCALE,4);
//--- Disable selection by a mouse
ObjectSetInteger(0,chart_name,OBJPROP_SELECTABLE,false);
See also
PeriodSeconds, Period, Date and Time, Visibility of objects
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
239
Chart Properties
Identifiers of ENUM_CHART_PROPERTY enumerations are used as parameters of functions for working
with charts. The abbreviation of r/o in the "Property Type" column means that this property is read-
only and cannot be changed. The w/o abbreviation in the "Property Type" column means that this
property is write-only and it cannot be received. When accessing certain properties, it's necessary to
specify an additional parameter-modifier (modifier), which serves to indicate the number of chart
subwindows. 0 means the main window.
The functions defining the chart properties are actually used for sending change commands to the
chart. If these functions are executed successfully, the command is included in the common queue of
the chart events. The changes are implemented to the chart when handling the queue of the chart
events.
Thus, do not expect an immediate visual update of the chart after calling these functions. Generally,
the chart is updated automatically by the terminal following the change events - a new quote arrival,
resizing the chart window, etc. Use ChartRedraw() function to forcefully update the chart.
For functions ChartSetInteger() and ChartGetInteger()
ENUM_CHART_PROPERTY_INTEGER
ID Description Property Type
CHART_IS_OBJECT Identifying
"Chart" (OBJ_CHART) object
returns true for a graphical
object. Returns false for a real
chart
bool r/o
CHART_BRING_TO_TOP Show chart on top of other
charts
bool w/o
CHART_MOUSE_SCROLL Scrolling the chart horizontally
using the left mouse button.
Vertical scrolling is also
available if the value of any
following properties is set to
true: CHART_SCALEFIX,
CHART_SCALEFIX_11 or
CHART_SCALE_PT_PER_BAR
bool
CHART_EVENT_MOUSE_MOVE Send notifications of mouse
move and mouse click events
(CHARTEVENT_MOUSE_MOVE)
to all mql5 programs on a chart
bool
CHART_EVENT_OBJECT_CREAT
E
Send a notification of an event
of new object creation
(CHARTEVENT_OBJECT_CREAT
E) to all mql5-programs on a
chart
bool
CHART_EVENT_OBJECT_DELET Send a notification of an event bool
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
240
E of object deletion
(CHARTEVENT_OBJECT_DELETE
) to all mql5-programs on a
chart
CHART_MODE Chart type (candlesticks, bars
or line)
enum ENUM_CHART_MODE
CHART_FOREGROUND Price chart in the foreground bool
CHART_SHIFT Mode of price chart indent
from the right border
bool
CHART_AUTOSCROLL Mode of automatic moving to
the right border of the chart
bool
CHART_SCALE Scale int from 0 to 5
CHART_SCALEFIX Fixed scale mode bool
CHART_SCALEFIX_11 Scale 1:1 mode bool
CHART_SCALE_PT_PER_BAR Scale to be specified in points
per bar
bool
CHART_SHOW_OHLC Show OHLC values in the upper
left corner
bool
CHART_SHOW_BID_LINE Display Bid values as a
horizontal line in a chart
bool
CHART_SHOW_ASK_LINE Display Ask values as a
horizontal line in a chart
bool
CHART_SHOW_LAST_LINE Display Last values as a
horizontal line in a chart
bool
CHART_SHOW_PERIOD_SEP Display vertical separators
between adjacent periods
bool
CHART_SHOW_GRID Display grid in the chart bool
CHART_SHOW_VOLUMES Display volume in the chart enum
ENUM_CHART_VOLUME_MODE
CHART_SHOW_OBJECT_DESCR Pop-up descriptions of
graphical objects
bool
CHART_VISIBLE_BARS The number of bars on the
chart that can be displayed
int r/o
CHART_WINDOWS_TOTAL The total number of chart
windows, including indicator
subwindows
int r/o
CHART_WINDOW_IS_VISIBLE Visibility of subwindows bool r/o modifier - subwindow
number
CHART_WINDOW_HANDLE Chart window handle (HWND) int r/o
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
241
CHART_WINDOW_YDISTANCE The distance between the
upper frame of the indicator
subwindow and the upper
frame of the main chart
window, along the vertical Y
axis, in pixels. In case of a
mouse event, the cursor
coordinates are passed in
terms of the coordinates of the
main chart window, while the
coordinates of graphical
objects in an indicator
subwindow are set relative to
the upper left corner of the
subwindow.
The value is required for
converting the absolute
coordinates of the main chart
to the local coordinates of a
subwindow for correct work
with the graphical objects,
whose coordinates are set
relative to the upper left
corner of the subwindow
frame.
int r/o modifier - subwindow
number
CHART_FIRST_VISIBLE_BAR Number of the first visible bar
in the chart. Indexing of bars is
the same as for timeseries.
int r/o
CHART_WIDTH_IN_BARS Chart width in bars int r/o
CHART_WIDTH_IN_PIXELS Chart width in pixels int r/o
CHART_HEIGHT_IN_PIXELS Chart height in pixels int modifier - subwindow
number
CHART_COLOR_BACKGROUND Chart background color color
CHART_COLOR_FOREGROUND Color of axes, scales and OHLC
line
color
CHART_COLOR_GRID Grid color color
CHART_COLOR_VOLUME Color of volumes and position
opening levels
color
CHART_COLOR_CHART_UP Color for the up bar, shadows
and body borders of bull
candlesticks
color
CHART_COLOR_CHART_DOWN Color for the down bar,
shadows and body borders of
bear candlesticks
color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
242
CHART_COLOR_CHART_LINE Line chart color and color of
"Doji" Japanese candlesticks
color
CHART_COLOR_CANDLE_BULL Body color of a bull candlestick color
CHART_COLOR_CANDLE_BEAR Body color of a bear candlestick color
CHART_COLOR_BID Bid price level color color
CHART_COLOR_ASK Ask price level color color
CHART_COLOR_LAST Line color of the last executed
deal price (Last)
color
CHART_COLOR_STOP_LEVEL Color of stop order levels (Stop
Loss and Take Profit)
color
CHART_SHOW_TRADE_LEVELS Displaying trade levels in the
chart (levels of open positions,
Stop Loss, Take Profit and
pending orders)
bool
CHART_DRAG_TRADE_LEVELS Permission to drag trading
levels on a chart with a mouse.
The drag mode is enabled by
default (true value)
bool
CHART_SHOW_DATE_SCALE Showing the time scale on a
chart
bool
CHART_SHOW_PRICE_SCALE Showing the price scale on a
chart
bool
For functions ChartSetDouble() and ChartGetDouble()
ENUM_CHART_PROPERTY_DOUBLE
ID Description Property Type
CHART_SHIFT_SIZE The size of the zero bar indent
from the right border in
percents
double (from 10 to 50
percents)
CHART_FIXED_POSITION Chart fixed position from the
left border in percent value.
Chart fixed position is marked
by a small gray triangle on the
horizontal time axis. It is
displayed only if the automatic
chart scrolling to the right on
tick incoming is disabled (see
CHART_AUTOSCROLL
property). The bar on a fixed
position remains in the same
place when zooming in and out.
double
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
243
CHART_FIXED_MAX Fixed chart maximum double
CHART_FIXED_MIN Fixed chart minimum double
CHART_POINTS_PER_BAR Scale in points per bar double
CHART_PRICE_MIN Chart minimum double r/o modifier -
subwindow number
CHART_PRICE_MAX Chart maximum double r/o modifier -
subwindow number
For functions ChartSetString() and ChartGetString()
ENUM_CHART_PROPERTY_STRING
ID Description Property Type
CHART_COMMENT Text of a comment in a chart string
Example:
int chartMode=ChartGetInteger(0,CHART_MODE);
switch(chartMode)
{
case(CHART_BARS): Print("CHART_BARS"); break;
case(CHART_CANDLES): Print("CHART_CANDLES");break;
default:Print("CHART_LINE");
}
bool shifted=ChartGetInteger(0,CHART_SHIFT);
if(shifted) Print("CHART_SHIFT = true");
else Print("CHART_SHIFT = false");
bool autoscroll=ChartGetInteger(0,CHART_AUTOSCROLL);
if(autoscroll) Print("CHART_AUTOSCROLL = true");
else Print("CHART_AUTOSCROLL = false");
int chartHandle=ChartGetInteger(0,CHART_WINDOW_HANDLE);
Print("CHART_WINDOW_HANDLE = ",chartHandle);
int windows=ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Print("CHART_WINDOWS_TOTAL = ",windows);
if(windows>1)
{
for(int i=0;i<windows;i++)
{
int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,i);
double priceMin=ChartGetDouble(0,CHART_PRICE_MIN,i);
double priceMax=ChartGetDouble(0,CHART_PRICE_MAX,i);
Print(i+": CHART_HEIGHT_IN_PIXELS = ",height," pixels");
Print(i+": CHART_PRICE_MIN = ",priceMin);
Print(i+": CHART_PRICE_MAX = ",priceMax);
}
}
See also
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
244
Examples of Working with the Chart
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
245
Positioning Constants
Three identifiers from the ENUM_CHART_POSITION list are the possible values of the position
parameter for the ChartNavigate() function.
ENUM_CHART_POSITION
ID Description
CHART_BEGIN Chart beginning (the oldest prices)
CHART_CURRENT_POS Current position
CHART_END Chart end (the latest prices)
Example:
long handle=ChartOpen("EURUSD",PERIOD_H12);
if(handle!=0)
{
ChartSetInteger(handle,CHART_AUTOSCROLL,false);
ChartSetInteger(handle,CHART_SHIFT,true);
ChartSetInteger(handle,CHART_MODE,CHART_LINE);
ResetLastError();
bool res=ChartNavigate(handle,CHART_END,150);
if(!res) Print("Navigate failed. Error = ",GetLastError());
ChartRedraw();
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
246
Chart Representation
Price charts can be displayed in three ways:
as bars;
as candlesticks;
as a line.
The specific way of displaying the price chart is set by the function
ChartSetInteger(chart_handle,CHART_MODE, chart_mode), where chart_mode is one of the values of
the ENUM_CHART_MODE enumeration.
ENUM_CHART_MODE
ID Description
CHART_BARS Display as a sequence of bars
CHART_CANDLES Display as Japanese candlesticks
CHART_LINE Display as a line drawn by Close prices
To specify the mode of displaying volumes in the price chart the function
ChartSetInteger(chart_handle, CHART_SHOW_VOLUMES, volume_mode) is used, where volume_mode
is one of values of the ENUM_CHART_VOLUME_MODE enumeration.
ENUM_CHART_VOLUME_MODE
ID Description
CHART_VOLUME_HIDE Volumes are not shown
CHART_VOLUME_TICK Tick volumes
CHART_VOLUME_REAL Trade volumes
Example:
//--- Get the handle of the current chart
long handle=ChartID();
if(handle>0) // If it succeeded, additionally customize
{
//--- Disable autoscroll
ChartSetInteger(handle,CHART_AUTOSCROLL,false);
//--- Set the indent of the right border of the chart
ChartSetInteger(handle,CHART_SHIFT,true);
//--- Display as candlesticks
ChartSetInteger(handle,CHART_MODE,CHART_CANDLES);
//--- Scroll by 100 bars from the beginning of history
ChartNavigate(handle,CHART_CURRENT_POS,100);
//--- Set the tick volume display mode
ChartSetInteger(handle,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
247
}
See also
ChartOpen, ChartID
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
248
Examples of Working with the Chart
This section contains examples of working with chart properties. One or two complete functions are
displayed for each property. These functions allow setting/receiving the value of the property. These
functions can be used "as is" in custom mql5 applications.
The screenshot below demonstrates the graphic panel illustrating how changing of the chart property
changes its appearance. Clicking Next button allows setting the new value of the appropriate property
and view the changes in the chart window.
The panel's source code is located below.
Chart Properties and Sample Functions for Working with Them
CHART_IS_OBJECT defines if an object is a real chart or a graphic object.
//+------------------------------------------------------------------+
//| Checks if an object is a chart. If it is a graphic object, |
//| the result is true. If it is a real chart, the result variable |
//| has the value of false. |
//+------------------------------------------------------------------+
bool ChartIsObject(bool &result,const long chart_ID=0)
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
249
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- get the chart property
if(!ChartGetInteger(chart_ID,CHART_IS_OBJECT,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
//--- return false
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
CHART_BRING_TO_TOP shows the chart on top of all others.
//+----------------------------------------------------------------------+
//| Sends command to the terminal to display the chart above all others |
//+----------------------------------------------------------------------+
bool ChartBringToTop(const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- show the chart on top of all others
if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_MOUSE_SCROLL is a property for scrolling the chart using left mouse button.
//+--------------------------------------------------------------------------+
//| Checks if scrolling of chart using left mouse button is enabled |
//+--------------------------------------------------------------------------+
bool ChartMouseScrollGet(bool &result,const long chart_ID=0)
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
250
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+--------------------------------------------------------------------+
//| Enables/disables scrolling of chart using left mouse button |
//+--------------------------------------------------------------------+
bool ChartMouseScrollSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_EVENT_MOUSE_MOVE is a property of sending messages concerning move events and
mouse clicks to mql5 applications (CHARTEVENT_MOUSE_MOVE).
//+------------------------------------------------------------------+
//| Checks if messages concerning move events and mouse clicks |
//| are sent to all MQL5 applications on the chart |
//+------------------------------------------------------------------+
bool ChartEventMouseMoveGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
251
if(!ChartGetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------------------+
//| Enables/disables the mode of sending messages concerning move events and |
//| mouse clicks to MQL5 applications on the chart |
//+------------------------------------------------------------------------------+
bool ChartEventMouseMoveSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_EVENT_OBJECT_CREATE is a property of sending messages concerning the event of a
graphic object creation to mql5 applications (CHARTEVENT_OBJECT_CREATE).
//+---------------------------------------------------------------------+
//| Checks if messages concerning the event of a graphic |
//| object creation are sent to all MQL5 applications on the chart |
//+---------------------------------------------------------------------+
bool ChartEventObjectCreateGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
252
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+--------------------------------------------------------------------------+
//| Enables/disables the mode of sending messages concerning the event of a |
//| graphic object creation to all mql5 applications on the chart |
//+--------------------------------------------------------------------------+
bool ChartEventObjectCreateSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_EVENT_OBJECT_DELETE is a property of sending messages concerning the event of a
graphic object deletion to mql5 applications (CHARTEVENT_OBJECT_DELETE).
//+---------------------------------------------------------------------+
//| Checks if messages concerning the event of a graphic object |
//| deletion are sent to all mql5 applications on the chart |
//+---------------------------------------------------------------------+
bool ChartEventObjectDeleteGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
253
//--- successful execution
return(true);
}
//+--------------------------------------------------------------------------+
//| Enables/disables the mode of sending messages concerning the event of a |
//| graphic object deletion to all mql5 applications on the chart |
//+--------------------------------------------------------------------------+
bool ChartEventObjectDeleteSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_MODE type of the chart (candlesticks, bars or line).
//+------------------------------------------------------------------+
//| Gets chart display type (candlesticks, bars or line) |
//+------------------------------------------------------------------+
ENUM_CHART_MODE ChartModeGet(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=WRONG_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_MODE,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((ENUM_CHART_MODE)result);
}
//+------------------------------------------------------------------+
//| Sets chart display type (candlesticks, bars or line) |
//+------------------------------------------------------------------+
bool ChartModeSet(const long value,const long chart_ID=0)
{
//--- reset the error value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
254
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_MODE,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_FOREGROUND is a property of displaying a price chart in the foreground.
//+------------------------------------------------------------------+
//| Checks if a price chart is displayed in the foreground |
//+------------------------------------------------------------------+
bool ChartForegroundGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of a price chart on the foreground |
//+------------------------------------------------------------------+
bool ChartForegroundSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
255
}
//--- successful execution
return(true);
}
CHART_SHIFT mode of shift of the price chart from the right border.
//+-------------------------------------------------------------------+
//| Checks if shifting a price chart from the right border is enabled |
//+-------------------------------------------------------------------+
bool ChartShiftGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHIFT,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+---------------------------------------------------------------------------------+
//| Enables/disables displaying of a price chart with a shift from the right border |
//+---------------------------------------------------------------------------------+
bool ChartShiftSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHIFT,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
256
CHART_AUTOSCROLL the mode of automatic shift to the right border of the chart.
//+------------------------------------------------------------------+
//| Checks if automatic scrolling of a chart to the right |
//| on new ticks arrival is enabled |
//+------------------------------------------------------------------+
bool ChartAutoscrollGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables automatic scrolling of a chart to the right |
//| on new ticks arrival |
//+------------------------------------------------------------------+
bool ChartAutoscrollSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SCALE chart scale property.
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
257
//+------------------------------------------------------------------+
//| Gets chart scale (from 0 to 5) |
//+------------------------------------------------------------------+
int ChartScaleGet(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SCALE,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
//+------------------------------------------------------------------+
//| Sets chart scale (from 0 to 5) |
//+------------------------------------------------------------------+
bool ChartScaleSet(const long value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SCALE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SCALEFIX the mode of fixed chart scale.
//+------------------------------------------------------------------+
//| Checks if the fixed scale mode is enabled |
//+------------------------------------------------------------------+
bool ChartScaleFixGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
258
if(!ChartGetInteger(chart_ID,CHART_SCALEFIX,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables the fixed scale mode |
//+------------------------------------------------------------------+
bool ChartScaleFixSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SCALEFIX,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SCALEFIX_11 1:1 chart scale mode.
//+------------------------------------------------------------------+
//| Checks if the "1:1" scale is enabled |
//+------------------------------------------------------------------+
bool ChartScaleFix11Get(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
259
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables the "1:1" scale mode |
//+------------------------------------------------------------------+
bool ChartScaleFix11Set(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SCALE_PT_PER_BAR the mode of specifying the chart scale in points per bar.
//+------------------------------------------------------------------+
//| Checks if the "points per bar" chart scaling mode is enabled |
//+------------------------------------------------------------------+
bool ChartScalePerBarGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables the "points per bar" chart scaling mode |
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
260
bool ChartScalePerBarSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_OHLC the property of displaying OHLC values in the upper left corner.
//+----------------------------------------------------------------------------------+
//| Checks if displaying of OHLC values in the upper left corner of chart is enabled |
//+----------------------------------------------------------------------------------+
bool ChartShowOHLCGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------------------+
//| Enables/disables displaying of OHLC values in the upper left corner of chart |
//+------------------------------------------------------------------------------+
bool ChartShowOHLCSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
261
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_BID_LINE the property of displaying Bid value as a horizontal line on the chart.
//+------------------------------------------------------------------+
//| Checks if displaying of Bid line on chart is enabled |
//+------------------------------------------------------------------+
bool ChartShowBidLineGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of Bid line on chart |
//+------------------------------------------------------------------+
bool ChartShowBidLineSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
262
CHART_SHOW_ASK_LINE the property of displaying Ask value as a horizontal line on a chart.
//+------------------------------------------------------------------+
//| Checks if displaying of Ask line on chart is enabled |
//+------------------------------------------------------------------+
bool ChartShowAskLineGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of Ask line on chart |
//+------------------------------------------------------------------+
bool ChartShowAskLineSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_LAST_LINE the property of displaying Last value as a horizontal line on a chart.
//+-----------------------------------------------------------------------------+
//| Checks if displaying of line for the last performed deal's price is enabled |
//+-----------------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
263
bool ChartShowLastLineGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+-------------------------------------------------------------------------+
//| Enables/disables displaying of line for the last performed deal's price |
//+-------------------------------------------------------------------------+
bool ChartShowLastLineSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_PERIOD_SEP the property of displaying vertical separators between adjacent
periods.
//+---------------------------------------------------------------------------------+
//| Checks if displaying of vertical separators between adjacent periods is enabled |
//+---------------------------------------------------------------------------------+
bool ChartShowPeriodSeparatorGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
264
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+-----------------------------------------------------------------------------+
//| Enables/disables displaying of vertical separators between adjacent periods |
//+-----------------------------------------------------------------------------+
bool ChartShowPeriodSepapatorSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_GRID the property of displaying the chart grid.
//+------------------------------------------------------------------+
//| Checks if the chart grid is displayed |
//+------------------------------------------------------------------+
bool ChartShowGridGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_GRID,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
265
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of grid on chart |
//+------------------------------------------------------------------+
bool ChartShowGridSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_GRID,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_VOLUMES the property of displaying the volumes on a chart.
//+------------------------------------------------------------------+
//| Checks if volumes are displayed on a chart |
//| The flag indicates the volumes showing mode |
//+------------------------------------------------------------------+
ENUM_CHART_VOLUME_MODE ChartShowVolumesGet(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=WRONG_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_VOLUMES,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((ENUM_CHART_VOLUME_MODE)result);
}
//+------------------------------------------------------------------+
//| Sets mode of displaying volumes on chart |
//+------------------------------------------------------------------+
bool ChartShowVolumesSet(const long value,const long chart_ID=0)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
266
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_VOLUMES,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_OBJECT_DESCR the property of graphical object pop-up descriptions.
//+-------------------------------------------------------------------+
//| Checks if pop-up descriptions of graphical objects are displayed |
//| when hovering mouse over them |
//+-------------------------------------------------------------------+
bool ChartShowObjectDescriptionGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+-------------------------------------------------------------------------+
//| Enables/disables displaying of pop-up descriptions of graphical objects |
//| when hovering mouse over them |
//+-------------------------------------------------------------------------+
bool ChartShowObjectDescriptionSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
267
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_VISIBLE_BARS defines the number of bars on a chart that are available for display.
//+----------------------------------------------------------------------+
//| Gets the number of bars that are displayed (visible) in chart window |
//+----------------------------------------------------------------------+
int ChartVisibleBars(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
CHART_WINDOWS_TOTAL defines the total number of chart windows including indicator
subwindows.
//+-----------------------------------------------------------------------+
//| Gets the total number of chart windows including indicator subwindows |
//+-----------------------------------------------------------------------+
int ChartWindowsTotal(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,result))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
268
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
CHART_WINDOW_IS_VISIBLE defines the subwindow's visibility.
//+------------------------------------------------------------------+
//| Checks if the current chart window or subwindow is visible |
//+------------------------------------------------------------------+
bool ChartWindowsIsVisible(bool &result,const long chart_ID=0,const int sub_window=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WINDOW_IS_VISIBLE,sub_window,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
CHART_WINDOW_HANDLE returns the chart handle.
//+------------------------------------------------------------------+
//| Gets the chart handle |
//+------------------------------------------------------------------+
int ChartWindowsHandle(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WINDOW_HANDLE,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
269
}
//--- return the value of the chart property
return((int)result);
}
CHART_WINDOW_YDISTANCE defines the distance in pixels between the upper frame of the
indicator subwindow and the upper frame of the chart's main window.
//+------------------------------------------------------------------+
//| Gets the distance in pixels between the upper border of |
//| subwindow and the upper border of chart's main window |
//+------------------------------------------------------------------+
int ChartWindowsYDistance(const long chart_ID=0,const int sub_window=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WINDOW_YDISTANCE,sub_window,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
CHART_FIRST_VISIBLE_BAR returns the number of the first visible bar on the chart (bar indexing
corresponds to the time series).
//+------------------------------------------------------------------------------+
//| Gets the index of the first visible bar on chart. |
//| Indexing is performed like in timeseries: latest bars have smallest indices. |
//+------------------------------------------------------------------------------+
int ChartFirstVisibleBar(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
270
//--- return the value of the chart property
return((int)result);
}
CHART_WIDTH_IN_BARS returns the chart width in bars.
//+------------------------------------------------------------------+
//| Gets the width of chart (in bars) |
//+------------------------------------------------------------------+
int ChartWidthInBars(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_BARS,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
CHART_WIDTH_IN_PIXELS returns the chart width in pixels.
//+------------------------------------------------------------------+
//| Gets the width of chart (in pixels) |
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
271
CHART_HEIGHT_IN_PIXELS chart height property in pixels.
//+------------------------------------------------------------------+
//| Gets the height of chart (in pixels) |
//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
{
//--- prepare the variable to get the property value
long result=-1;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((int)result);
}
//+------------------------------------------------------------------+
//| Sets the height of chart (in pixels) |
//+------------------------------------------------------------------+
bool ChartHeightInPixelsSet(const int value,const long chart_ID=0,const int sub_window=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_BACKGROUND - chart background color.
//+------------------------------------------------------------------+
//| Gets the background color of chart |
//+------------------------------------------------------------------+
color ChartBackColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
272
ResetLastError();
//--- receive chart background color
if(!ChartGetInteger(chart_ID,CHART_COLOR_BACKGROUND,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the background color of chart |
//+------------------------------------------------------------------+
bool ChartBackColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the chart background color
if(!ChartSetInteger(chart_ID,CHART_COLOR_BACKGROUND,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_FOREGROUND color of axes, scale and OHLC line.
//+------------------------------------------------------------------+
//| Gets the color of axes, scale and OHLC line |
//+------------------------------------------------------------------+
color ChartForeColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of axes, scale and OHLC line
if(!ChartGetInteger(chart_ID,CHART_COLOR_FOREGROUND,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
273
//+------------------------------------------------------------------+
//| Sets the color of axes, scale and OHLC line |
//+------------------------------------------------------------------+
bool ChartForeColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of axes, scale and OHLC line
if(!ChartSetInteger(chart_ID,CHART_COLOR_FOREGROUND,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_GRID chart grid color.
//+------------------------------------------------------------------+
//| Gets the color of chart grid |
//+------------------------------------------------------------------+
color ChartGridColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive chart grid color
if(!ChartGetInteger(chart_ID,CHART_COLOR_GRID,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of chart grid |
//+------------------------------------------------------------------+
bool ChartGridColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set chart grid color
if(!ChartSetInteger(chart_ID,CHART_COLOR_GRID,clr))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
274
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_VOLUME - color of volumes and position opening levels.
//+------------------------------------------------------------------+
//| Gets the color of volumes and market entry levels |
//+------------------------------------------------------------------+
color ChartVolumeColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive color of volumes and market entry levels
if(!ChartGetInteger(chart_ID,CHART_COLOR_VOLUME,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of volumes and market entry levels |
//+------------------------------------------------------------------+
bool ChartVolumeColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set color of volumes and market entry levels
if(!ChartSetInteger(chart_ID,CHART_COLOR_VOLUME,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
275
CHART_COLOR_CHART_UP color of up bar, its shadow and border of a bullish candlestick's body.
//+-----------------------------------------------------------------------------+
//| Gets the color of up bar, shadow and border of a bullish candlestick's body |
//+-----------------------------------------------------------------------------+
color ChartUpColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of up bar, its shadow and border of bullish candlestick's body
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_UP,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of up bar, shadow and border of a bullish candlestick's body |
//+------------------------------------------------------------------+
bool ChartUpColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of up bar, its shadow and border of body of a bullish candlestick
if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_UP,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_CHART_DOWN color of down bar, its shadow and border of bearish candlestick's
body.
//+-------------------------------------------------------------------------------+
//| Gets the color of down bar, shadow and border of a bearish candlestick's body |
//+-------------------------------------------------------------------------------+
color ChartDownColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
276
//--- reset the error value
ResetLastError();
//--- receive the color of down bar, its shadow and border of bearish candlestick's body
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_DOWN,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+-------------------------------------------------------------------------------+
//| Sets the color of down bar, shadow and border of a bearish candlestick's body |
//+-------------------------------------------------------------------------------+
bool ChartDownColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of down bar, its shadow and border of bearish candlestick's body
if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_DOWN,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_CHART_LINE color of the chart line and Doji candlesticks.
//+------------------------------------------------------------------+
//| Gets the color of chart line and Doji candlesticks |
//+------------------------------------------------------------------+
color ChartLineColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive color of the chart line and Doji candlesticks
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_LINE,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
277
}
//+------------------------------------------------------------------+
//| Sets the color of chart line and Doji candlesticks |
//+------------------------------------------------------------------+
bool ChartLineColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set color of the chart line and Doji candlesticks
if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_LINE,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_CANDLE_BULL color of bullish candlestick's body.
//+------------------------------------------------------------------+
//| Gets the color of bullish candlestick's body |
//+------------------------------------------------------------------+
color ChartBullColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of bullish candlestick's body
if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of bullish candlestick's body |
//+------------------------------------------------------------------+
bool ChartBullColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of bullish candlestick's body
if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,clr))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
278
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_CANDLE_BEAR color of bearish candlestick's body.
//+------------------------------------------------------------------+
//| Gets the color of bearish candlestick's body |
//+------------------------------------------------------------------+
color ChartBearColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of bearish candlestick's body
if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of bearish candlestick's body |
//+------------------------------------------------------------------+
bool ChartBearColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of bearish candlestick's body
if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
279
CHART_COLOR_BID Bid price line color.
//+------------------------------------------------------------------+
//| Gets the color of Bid line |
//+------------------------------------------------------------------+
color ChartBidColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of Bid price line
if(!ChartGetInteger(chart_ID,CHART_COLOR_BID,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of Bid line |
//+------------------------------------------------------------------+
bool ChartBidColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of Bid price line
if(!ChartSetInteger(chart_ID,CHART_COLOR_BID,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_ASK Ask price line color.
//+------------------------------------------------------------------+
//| Gets the color of Ask line |
//+------------------------------------------------------------------+
color ChartAskColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
280
ResetLastError();
//--- receive the color of Ask price line
if(!ChartGetInteger(chart_ID,CHART_COLOR_ASK,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of Ask line |
//+------------------------------------------------------------------+
bool ChartAskColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of Ask price line
if(!ChartSetInteger(chart_ID,CHART_COLOR_ASK,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_LAST color of the last performed deal's price line (Last).
//+------------------------------------------------------------------+
//| Gets the color of the last performed deal's price line |
//+------------------------------------------------------------------+
color ChartLastColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive color of the last performed deal's price line (Last)
if(!ChartGetInteger(chart_ID,CHART_COLOR_LAST,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
281
//+------------------------------------------------------------------+
//| Sets the color of the last performed deal's price line |
//+------------------------------------------------------------------+
bool ChartLastColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set color of the last performed deal's price line (Last)
if(!ChartSetInteger(chart_ID,CHART_COLOR_LAST,clr))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_COLOR_STOP_LEVEL stop order level color (Stop Loss and Take Profit).
//+------------------------------------------------------------------+
//| Gets the color of Stop Loss and Take Profit levels |
//+------------------------------------------------------------------+
color ChartStopLevelColorGet(const long chart_ID=0)
{
//--- prepare the variable to receive the color
long result=clrNONE;
//--- reset the error value
ResetLastError();
//--- receive the color of stop order levels (Stop Loss and Take Profit)
if(!ChartGetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return((color)result);
}
//+------------------------------------------------------------------+
//| Sets the color of Stop Loss and Take Profit levels |
//+------------------------------------------------------------------+
bool ChartStopLevelColorSet(const color clr,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set the color of stop order levels (Stop Loss and Take Profit)
if(!ChartSetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,clr))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
282
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_TRADE_LEVELS property of displaying trade levels on the chart (levels of open
positions, Stop Loss, Take Profit and pending orders).
//+------------------------------------------------------------------+
//| Checks if trading levels are displayed on chart |
//+------------------------------------------------------------------+
bool ChartShowTradeLevelsGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of trading levels |
//+------------------------------------------------------------------+
bool ChartShowTradeLevelsSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
283
}
CHART_DRAG_TRADE_LEVELS property of enabling the ability to drag trading levels on a chart
using mouse.
//+----------------------------------------------------------------------+
//| Checks if dragging of trading levels on chart using mouse is allowed |
//+----------------------------------------------------------------------+
bool ChartDragTradeLevelsGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables dragging of trading levels on chart using mouse |
//+------------------------------------------------------------------+
bool ChartDragTradeLevelsSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_DATE_SCALE property of displaying the time scale on a chart.
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
284
//| Checks if the time scale is displayed on chart |
//+------------------------------------------------------------------+
bool ChartShowDateScaleGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of the time scale on chart |
//+------------------------------------------------------------------+
bool ChartShowDateScaleSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHOW_PRICE_SCALE property of displaying the price scale on a chart.
//+------------------------------------------------------------------+
//| Checks if the price scale is displayed on chart |
//+------------------------------------------------------------------+
bool ChartShowPriceScaleGet(bool &result,const long chart_ID=0)
{
//--- prepare the variable to get the property value
long value;
//--- reset the error value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
285
ResetLastError();
//--- receive the property value
if(!ChartGetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- store the value of the chart property in memory
result=value;
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Enables/disables displaying of the price scale on chart |
//+------------------------------------------------------------------+
bool ChartShowPriceScaleSet(const bool value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_SHIFT_SIZE shift size of the zero bar from the right border in percentage values.
//+-----------------------------------------------------------------+
//| Gets the size of shifting of the zero bar from the right border |
//| of the chart in percentage values (from 10% up to 50%) |
//+-----------------------------------------------------------------+
double ChartShiftSizeGet(const long chart_ID=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_SHIFT_SIZE,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
286
}
//--- return the value of the chart property
return(result);
}
//+-----------------------------------------------------------------------------+
//| Gets the size of shifting of the zero bar from the right border |
//| of the chart in percentage values (from 10% up to 50%). |
//| To enable the shift mode, CHART_SHIFT property value should be set to true. |
//+-----------------------------------------------------------------------------+
bool ChartShiftSizeSet(const double value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetDouble(chart_ID,CHART_SHIFT_SIZE,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_FIXED_POSITION chart fixed position from the left border in percentage value.
//+----------------------------------------------------------------------------------------+
//| Gets the location of chart's fixed position from the left border (in percentage value) |
//+----------------------------------------------------------------------------------------+
double ChartFixedPositionGet(const long chart_ID=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_FIXED_POSITION,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
//+-----------------------------------------------------------------------------------------+
//| Gets the location of chart's fixed position from the left border (in percentage value). |
//| To view the location of chart's fixed position, the value of CHART_AUTOSCROLL property |
//| should be set to false. |
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
287
//+-----------------------------------------------------------------------------------------+
bool ChartFixedPositionSet(const double value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetDouble(chart_ID,CHART_FIXED_POSITION,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_FIXED_MAX property of the chart's fixed maximum.
//+------------------------------------------------------------------+
//| Gets the value of chart's fixed maximum |
//+------------------------------------------------------------------+
double ChartFixedMaxGet(const long chart_ID=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_FIXED_MAX,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
//+------------------------------------------------------------------+
//| Sets the value of chart's fixed maximum. |
//| To change the value of the property, CHART_SCALEFIX property |
//| value should be preliminarily set to true. |
//+------------------------------------------------------------------+
bool ChartFixedMaxSet(const double value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetDouble(chart_ID,CHART_FIXED_MAX,value))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
288
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_FIXED_MIN property of the chart's fixed minimum.
//+------------------------------------------------------------------+
//| Gets the value of chart's fixed minimum |
//+------------------------------------------------------------------+
double ChartFixedMinGet(const long chart_ID=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_FIXED_MIN,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
//+------------------------------------------------------------------+
//| Sets the value of chart's fixed minimum. |
//| To change the value of the property, CHART_SCALEFIX property |
//| value should be preliminarily set to true. |
//+------------------------------------------------------------------+
bool ChartFixedMinSet(const double value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetDouble(chart_ID,CHART_FIXED_MIN,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
289
CHART_POINTS_PER_BAR value of scale in points per bar.
//+------------------------------------------------------------------+
//| Gets the value of chart scale in points per bar |
//+------------------------------------------------------------------+
double ChartPointsPerBarGet(const long chart_ID=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_POINTS_PER_BAR,0,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
//+----------------------------------------------------------------------+
//| Sets the value of chart scale in points per bar. |
//| To view the result of this property's value change, the value of |
//| CHART_SCALE_PT_PER_BAR property should be preliminarily set to true. |
//+----------------------------------------------------------------------+
bool ChartPointsPerBarSet(const double value,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetDouble(chart_ID,CHART_POINTS_PER_BAR,value))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
CHART_PRICE_MIN returns the value of the chart minimum.
//+----------------------------------------------------------------------+
//| Gets the value of chart minimum in the main window or in a subwindow |
//+----------------------------------------------------------------------+
double ChartPriceMin(const long chart_ID=0,const int sub_window=0)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
290
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
CHART_PRICE_MAX returns the value of the chart maximum.
//+----------------------------------------------------------------------+
//| Gets the value of chart maximum in the main window or in a subwindow |
//+----------------------------------------------------------------------+
double ChartPriceMax(const long chart_ID=0,const int sub_window=0)
{
//--- prepare the variable to get the result
double result=EMPTY_VALUE;
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- return the value of the chart property
return(result);
}
CHART_COMMENT comment on the chart.
//+------------------------------------------------------------------+
//| Gets comment in the upper left corner of chart |
//+------------------------------------------------------------------+
bool ChartCommentGet(string &result,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- receive the property value
if(!ChartGetString(chart_ID,CHART_COMMENT,result))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
291
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Gets comment in the upper left corner of chart |
//+------------------------------------------------------------------+
bool ChartCommentSet(const string str,const long chart_ID=0)
{
//--- reset the error value
ResetLastError();
//--- set property value
if(!ChartSetString(chart_ID,CHART_COMMENT,str))
{
//--- display the error message in Experts journal
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Panel for chart properties
//--- connect the library of control elements
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//--- predefined constants
#define X_PROPERTY_NAME_1 10 // coordinate of the property name in the first column
#define X_PROPERTY_VALUE_1 225 // coordinate of the property value in the first column
#define X_PROPERTY_NAME_2 345 // coordinate of the property name in the second and third columns
#define X_PROPERTY_VALUE_2 550 // coordinate of the property value in the second and third columns
#define X_BUTTON_1 285 // coordinate of the button in the first column
#define X_BUTTON_2 700 // coordinate of the button in the second column
#define Y_PROPERTY_1 30 // y coordinate of the beginning of the first and second column
#define Y_PROPERTY_2 286 // y coordinate of the beginning of the third column
#define Y_DISTANCE 16 // y axial distance between the lines
#define LAST_PROPERTY_NUMBER 111 // number of the last graphical property
//--- input parameters
input color InpFirstColor=clrDodgerBlue; // Color of odd lines
input color InpSecondColor=clrGoldenrod; // Color of even lines
//--- variables and arrays
CChartObjectLabel ExtLabelsName[]; // labels for displaying property names
CChartObjectLabel ExtLabelsValue[]; // labels for displaying property values
CChartObjectButton ExtButtons[]; // buttons
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
292
int ExtNumbers[]; // property indices
string ExtNames[]; // property names
uchar ExtDataTypes[]; // property data types (integer, double, string)
uint ExtGroupTypes[]; // array that stores the data on belonging of properties to one of the groups
uchar ExtDrawTypes[]; // array that stores the data on the type of property display
double ExtMaxValue[]; // maximum property values that are possible when working with the panel
double ExtMinValue[]; // minimum property values that are possible when working with the panel
double ExtStep[]; // steps for changing properties
int ExtCount; // total number of all properties
color ExtColors[2]; // array of colors for displaying lines
string ExtComments[2]; // array of comments (for CHART_COMMENT property)
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- display a comment on the chart
Comment("SomeComment");
//--- store colors in the array to be able to switch between them later
ExtColors[0]=InpFirstColor;
ExtColors[1]=InpSecondColor;
//--- store comments in the array to be able to switch between them later
ExtComments[0]="FirstComment";
ExtComments[1]="SecondComment";
//--- prepare and display the control panel for managing chart properties
if(!PrepareControls())
return(INIT_FAILED);
//--- successful execution
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- remove the comment on the chart
Comment("");
}
//+------------------------------------------------------------------+
//| Handler of a chart event |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- check the event of clicking the chart object
if(id==CHARTEVENT_OBJECT_CLICK)
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
293
//--- divide the object name by separator
string obj_name[];
StringSplit(sparam,'_',obj_name);
//--- check if the object is a button
if(obj_name[0]=="Button")
{
//--- receive button index
int index=(int)StringToInteger(obj_name[1]);
//--- unpress the button
ExtButtons[index].State(false);
//--- set the new value of the property depending on its type
if(ExtDataTypes[index]=='I')
ChangeIntegerProperty(index);
if(ExtDataTypes[index]=='D')
ChangeDoubleProperty(index);
if(ExtDataTypes[index]=='S')
ChangeStringProperty(index);
}
}
//--- re-draw property values
RedrawProperties();
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Changes an integer property of chart |
//+------------------------------------------------------------------+
void ChangeIntegerProperty(const int index)
{
//--- receive the current property value
long value=ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index]);
//--- define the following property value
switch(ExtDrawTypes[index])
{
case 'C':
value=GetNextColor((color)value);
break;
default:
value=(long)GetNextValue((double)value,index);
break;
}
//--- set the new property value
ChartSetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index],0,value);
}
//+------------------------------------------------------------------+
//| Changes a double property of chart |
//+------------------------------------------------------------------+
void ChangeDoubleProperty(const int index)
{
//--- receive the current property value
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
294
double value=ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index]);
//--- define the following property value
value=GetNextValue(value,index);
//--- set the new property value
ChartSetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index],value);
}
//+------------------------------------------------------------------+
//| Changes a string property of chart |
//+------------------------------------------------------------------+
void ChangeStringProperty(const int index)
{
//--- static variable for switching inside ExtComments array
static uint comment_index=1;
//--- change index for receiving another comment
comment_index=1-comment_index;
//--- set the new property value
ChartSetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[index],ExtComments[comment_index]);
}
//+------------------------------------------------------------------+
//| Gets the next property value |
//+------------------------------------------------------------------+
double GetNextValue(const double value,const int index)
{
if(value+ExtStep[index]<=ExtMaxValue[index])
return(value+ExtStep[index]);
else
return(ExtMinValue[index]);
}
//+------------------------------------------------------------------+
//| Gets the next color for color type property |
//+------------------------------------------------------------------+
color GetNextColor(const color clr)
{
//--- return the following color value
switch(clr)
{
case clrWhite: return(clrRed);
case clrRed: return(clrGreen);
case clrGreen: return(clrBlue);
case clrBlue: return(clrBlack);
default: return(clrWhite);
}
}
//+------------------------------------------------------------------+
//| Re-draws property values |
//+------------------------------------------------------------------+
void RedrawProperties(void)
{
//--- property value text
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
295
string text;
long value;
//--- loop of the number of properties
for(int i=0;i<ExtCount;i++)
{
text="";
switch(ExtDataTypes[i])
{
case 'I':
//--- receive the current property value
if(!ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[i],0,value))
break;
//--- integer property text
switch(ExtDrawTypes[i])
{
//--- color property
case 'C':
text=(string)((color)value);
break;
//--- boolean property
case 'B':
text=(string)((bool)value);
break;
//--- ENUM_CHART_MODE enumeration property
case 'M':
text=EnumToString((ENUM_CHART_MODE)value);
break;
//--- ENUM_CHART_VOLUME_MODE enumeration property
case 'V':
text=EnumToString((ENUM_CHART_VOLUME_MODE)value);
break;
//--- int type number
default:
text=IntegerToString(value);
break;
}
break;
case 'D':
//--- double property text
text=DoubleToString(ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[i]),4);
break;
case 'S':
//--- string property text
text=ChartGetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[i]);
break;
}
//--- display property value
ExtLabelsValue[i].Description(text);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
296
}
//+------------------------------------------------------------------+
//| Creates panel for managing chart properties |
//+------------------------------------------------------------------+
bool PrepareControls(void)
{
//--- allocate memory for arrays with a reserve
MemoryAllocation(LAST_PROPERTY_NUMBER+1);
//--- variables
int i=0; // loop variable
int col_1=0; // number of properties in the first column
int col_2=0; // number of properties in the second column
int col_3=0; // number of properties in the third column
//--- current number of properties - 0
ExtCount=0;
//--- looking for properties in the loop
while(i<=LAST_PROPERTY_NUMBER)
{
//--- store the current number of the property
ExtNumbers[ExtCount]=i;
//--- increase the value of the loop variable
i++;
//--- check if there is a property with such a number
if(CheckNumber(ExtNumbers[ExtCount],ExtNames[ExtCount],ExtDataTypes[ExtCount],ExtGroupTypes[ExtCount],ExtDrawTypes[ExtCount]))
{
//--- create control elements for the property
switch(ExtGroupTypes[ExtCount])
{
case 1:
//--- create labels and a button for the property
if(!ShowProperty(ExtCount,0,X_PROPERTY_NAME_1,X_PROPERTY_VALUE_1,X_BUTTON_1,Y_PROPERTY_1+col_1*Y_DISTANCE,true))
return(false);
//--- number of the elements in the first column has increased
col_1++;
break;
case 2:
//--- create labels and a button for the property
if(!ShowProperty(ExtCount,1,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,X_BUTTON_2,Y_PROPERTY_1+col_2*Y_DISTANCE,true))
return(false);
//--- number of the elements in the second column has increased
col_2++;
break;
case 3:
//--- create only labels for the property
if(!ShowProperty(ExtCount,2,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,0,Y_PROPERTY_2+col_3*Y_DISTANCE,false))
return(false);
//--- number of the elements in the third column has increased
col_3++;
break;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
297
}
//--- define maximum and minimum property value and step
GetMaxMinStep(ExtNumbers[ExtCount],ExtMaxValue[ExtCount],ExtMinValue[ExtCount],ExtStep[ExtCount]);
//--- increase the number of properties
ExtCount++;
}
}
//--- free the memory not used by arrays
MemoryAllocation(ExtCount);
//--- re-draw property values
RedrawProperties();
ChartRedraw();
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Allocates memory for arrays |
//+------------------------------------------------------------------+
void MemoryAllocation(const int size)
{
ArrayResize(ExtLabelsName,size);
ArrayResize(ExtLabelsValue,size);
ArrayResize(ExtButtons,size);
ArrayResize(ExtNumbers,size);
ArrayResize(ExtNames,size);
ArrayResize(ExtDataTypes,size);
ArrayResize(ExtGroupTypes,size);
ArrayResize(ExtDrawTypes,size);
ArrayResize(ExtMaxValue,size);
ArrayResize(ExtMinValue,size);
ArrayResize(ExtStep,size);
}
//+------------------------------------------------------------------+
//| Checks if the property index belongs to the one of |
//| ENUM_CHART_PROPERTIES enumerations |
//+------------------------------------------------------------------+
bool CheckNumber(const int ind,string &name,uchar &data_type,uint &group_type,uchar &draw_type)
{
//--- check if the property is of integer type
ResetLastError();
name=EnumToString((ENUM_CHART_PROPERTY_INTEGER)ind);
if(_LastError==0)
{
data_type='I'; // property from ENUM_CHART_PROPERTY_INTEGER enumeration
GetTypes(ind,group_type,draw_type); // define property display parameters
return(true);
}
//--- check if the property is of double type
ResetLastError();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
298
name=EnumToString((ENUM_CHART_PROPERTY_DOUBLE)ind);
if(_LastError==0)
{
data_type='D'; // property from ENUM_CHART_PROPERTY_DOUBLE enumeration
GetTypes(ind,group_type,draw_type); // define property display parameters
return(true);
}
//--- check if the property is of string type
ResetLastError();
name=EnumToString((ENUM_CHART_PROPERTY_STRING)ind);
if(_LastError==0)
{
data_type='S'; // property from ENUM_CHART_PROPERTY_STRING enumeration
GetTypes(ind,group_type,draw_type); // define property display parameters
return(true);
}
//--- property does not belong to any enumeration
return(false);
}
//+------------------------------------------------------------------+
//| Defines the group in which property should be stored, |
//| as well as its display type |
//+------------------------------------------------------------------+
void GetTypes(const int property_number,uint &group_type,uchar &draw_type)
{
//--- check if the property belongs to the third group
//--- third group properties are displayed in the second column starting from CHART_BRING_TO_TOP
if(CheckThirdGroup(property_number,group_type,draw_type))
return;
//--- check if the property belongs to the second group
//--- third group properties are displayed at the beginning of the second column
if(CheckSecondGroup(property_number,group_type,draw_type))
return;
//--- if you find yourself here, the property belongs to the first group (first column)
CheckFirstGroup(property_number,group_type,draw_type);
}
//+----------------------------------------------------------------------+
//| Checks if property belongs to the third group and |
//| defines its display type in case of a positive answer |
//+----------------------------------------------------------------------+
bool CheckThirdGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- check if the property belongs to the third group
switch(property_number)
{
//--- boolean properties
case CHART_IS_OBJECT:
case CHART_WINDOW_IS_VISIBLE:
draw_type='B';
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
299
break;
//--- integer properties
case CHART_VISIBLE_BARS:
case CHART_WINDOWS_TOTAL:
case CHART_WINDOW_HANDLE:
case CHART_WINDOW_YDISTANCE:
case CHART_FIRST_VISIBLE_BAR:
case CHART_WIDTH_IN_BARS:
case CHART_WIDTH_IN_PIXELS:
draw_type='I';
break;
//--- double properties
case CHART_PRICE_MIN:
case CHART_PRICE_MAX:
draw_type='D';
break;
//--- in fact, this property is a command of displaying the chart on top of all the others
//--- there is no need to apply this panel, as the window will always be
//--- on top of other ones before we use it
case CHART_BRING_TO_TOP:
draw_type=' ';
break;
//--- property does not belong to the third group
default:
return(false);
}
//--- property belongs to the third group
group_type=3;
return(true);
}
//+----------------------------------------------------------------------+
//| Checks if property belongs to the second group and |
//| defines its display type in case of a positive answer |
//+----------------------------------------------------------------------+
bool CheckSecondGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- check if the property belongs to the second group
switch(property_number)
{
//--- ENUM_CHART_MODE type property
case CHART_MODE:
draw_type='M';
break;
//--- ENUM_CHART_VOLUME_MODE type property
case CHART_SHOW_VOLUMES:
draw_type='V';
break;
//--- string property
case CHART_COMMENT:
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
300
draw_type='S';
break;
//--- color property
case CHART_COLOR_BACKGROUND:
case CHART_COLOR_FOREGROUND:
case CHART_COLOR_GRID:
case CHART_COLOR_VOLUME:
case CHART_COLOR_CHART_UP:
case CHART_COLOR_CHART_DOWN:
case CHART_COLOR_CHART_LINE:
case CHART_COLOR_CANDLE_BULL:
case CHART_COLOR_CANDLE_BEAR:
case CHART_COLOR_BID:
case CHART_COLOR_ASK:
case CHART_COLOR_LAST:
case CHART_COLOR_STOP_LEVEL:
draw_type='C';
break;
//--- property does not belong to the second group
default:
return(false);
}
//--- property belongs to the second group
group_type=2;
return(true);
}
//+-----------------------------------------------------------------------+
//| Called only if it is already known that property does not belong |
//| to the second and third property groups |
//+-----------------------------------------------------------------------+
void CheckFirstGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- the property belongs to the first group
group_type=1;
//--- define property display type
switch(property_number)
{
//--- integer properties
case CHART_SCALE:
case CHART_HEIGHT_IN_PIXELS:
draw_type='I';
return;
//--- double properties
case CHART_SHIFT_SIZE:
case CHART_FIXED_POSITION:
case CHART_FIXED_MAX:
case CHART_FIXED_MIN:
case CHART_POINTS_PER_BAR:
draw_type='D';
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
301
return;
//--- only boolean properties have remained
default:
draw_type='B';
return;
}
}
//+------------------------------------------------------------------+
//| Creates label and button for property |
//+------------------------------------------------------------------+
bool ShowProperty(const int ind,const int type,const int x1,const int x2,
const int xb,const int y,const bool btn)
{
//--- static array for switching inside ExtColors color array
static uint color_index[3]={1,1,1};
//--- change index for receiving another color
color_index[type]=1-color_index[type];
//--- display labels and a button (if btn=true) for the property
if(!LabelCreate(ExtLabelsName[ind],"name_"+(string)ind,ExtNames[ind],ExtColors[color_index[type]],x1,y))
return(false);
if(!LabelCreate(ExtLabelsValue[ind],"value_"+(string)ind,"",ExtColors[color_index[type]],x2,y))
return(false);
if(btn && !ButtonCreate(ExtButtons[ind],(string)ind,xb,y+1))
return(false);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Creates label |
//+------------------------------------------------------------------+
bool LabelCreate(CChartObjectLabel &lbl,const string name,const string text,
const color clr,const int x,const int y)
{
if(!lbl.Create(0,"Label_"+name,0,x,y)) return(false);
if(!lbl.Description(text)) return(false);
if(!lbl.FontSize(10)) return(false);
if(!lbl.Color(clr)) return(false);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Creates button |
//+------------------------------------------------------------------+
bool ButtonCreate(CChartObjectButton &btn,const string name,
const int x,const int y)
{
if(!btn.Create(0,"Button_"+name,0,x,y,50,15)) return(false);
if(!btn.Description("Next")) return(false);
if(!btn.FontSize(10)) return(false);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
302
if(!btn.Color(clrBlack)) return(false);
if(!btn.BackColor(clrWhite)) return(false);
if(!btn.BorderColor(clrBlack)) return(false);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Defines maximum and minimum property value and step |
//+------------------------------------------------------------------+
void GetMaxMinStep(const int property_number,double &max,double &min,double &step)
{
double value;
//--- set values depending on the property type
switch(property_number)
{
case CHART_SCALE:
max=5;
min=0;
step=1;
break;
case CHART_MODE:
case CHART_SHOW_VOLUMES:
max=2;
min=0;
step=1;
break;
case CHART_SHIFT_SIZE:
max=50;
min=10;
step=2.5;
break;
case CHART_FIXED_POSITION:
max=90;
min=0;
step=15;
break;
case CHART_POINTS_PER_BAR:
max=19;
min=1;
step=3;
break;
case CHART_FIXED_MAX:
value=ChartGetDouble(0,CHART_FIXED_MAX);
max=value*1.25;
min=value;
step=value/32;
break;
case CHART_FIXED_MIN:
value=ChartGetDouble(0,CHART_FIXED_MIN);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
303
max=value;
min=value*0.75;
step=value/32;
break;
case CHART_HEIGHT_IN_PIXELS:
max=700;
min=520;
step=30;
break;
//--- default values
default:
max=1;
min=0;
step=1;
}
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
304
Object Constants
There are 44 graphical objects that can be created and displayed in the price chart. All constants for
working with objects are divided into 9 groups:
Object types Identifiers of graphical objects;
Object properties setting and getting properties of graphical objects;
Methods of object binding constants of object positioning in the chart;
Binding corner an indication of the angle of the schedule, which is positioned on the object;
Visibility of objects setting timeframes in which an object is visible;
Levels of Elliott Waves wave gradation markings;
Gann objects trend constants for Gann fan and Gann grid;
Web colors constants of predefined web colors;
Wingdings codes of characters of the Wingdings font.
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
305
Object Types
When a graphical object is created using the ObjectCreate() function, it's necessary to specify the type
of object being created, which can be one of the values of the ENUM_OBJECT enumeration. Further
specifications of object properties are possible using functions for working with graphical objects.
ENUM_OBJECT
ID Description
OBJ_VLINE Vertical Line
OBJ_HLINE Horizontal Line
OBJ_TREND Trend Line
OBJ_TRENDBYANGLE Trend Line By Angle
OBJ_CYCLES Cycle Lines
OBJ_ARROWED_LINE Arrowed Line
OBJ_CHANNEL Equidistant Channel
OBJ_STDDEVCHANNEL Standard Deviation Channel
OBJ_REGRESSION Linear Regression Channel
OBJ_PITCHFORK Andrews Pitchfork
OBJ_GANNLINE Gann Line
OBJ_GANNFAN Gann Fan
OBJ_GANNGRID Gann Grid
OBJ_FIBO Fibonacci Retracement
OBJ_FIBOTIMES Fibonacci Time Zones
OBJ_FIBOFAN Fibonacci Fan
OBJ_FIBOARC Fibonacci Arcs
OBJ_FIBOCHANNEL Fibonacci Channel
OBJ_EXPANSION Fibonacci Expansion
OBJ_ELLIOTWAVE5 Elliott Motive Wave
OBJ_ELLIOTWAVE3 Elliott Correction Wave
OBJ_RECTANGLE Rectangle
OBJ_TRIANGLE Triangle
OBJ_ELLIPSE Ellipse
OBJ_ARROW_THUMB_UP Thumbs Up
OBJ_ARROW_THUMB_DOWN Thumbs Down
OBJ_ARROW_UP Arrow Up
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
306
OBJ_ARROW_DOWN Arrow Down
OBJ_ARROW_STOP Stop Sign
OBJ_ARROW_CHECK Check Sign
OBJ_ARROW_LEFT_PRICE Left Price Label
OBJ_ARROW_RIGHT_PRICE Right Price Label
OBJ_ARROW_BUY Buy Sign
OBJ_ARROW_SELL Sell Sign
OBJ_ARROW Arrow
OBJ_TEXT Text
OBJ_LABEL Label
OBJ_BUTTON Button
OBJ_CHART Chart
OBJ_BITMAP Bitmap
OBJ_BITMAP_LABEL Bitmap Label
OBJ_EDIT Edit
OBJ_EVENT The "Event" object
corresponding to an event in
the economic calendar
OBJ_RECTANGLE_LABEL The "Rectangle label" object
for creating and designing the
custom graphical interface.
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
307
OBJ_VLINE
Vertical Line.
Note
When drawing a vertical line, it is possible to set the line display mode for all chart windows
(property OBJPROP_RAY).
Example
The following script creates and moves the vertical line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Vertical Line\" graphical object."
#property description "Anchor point date is set in percentage of"
#property description "the chart window width in bars."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="VLine"; // Line name
input int InpDate=25; // Event date, %
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Line style
input int InpWidth=3; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpRay=true; // Line's continuation down
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
308
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create the vertical line |
//+------------------------------------------------------------------+
bool VLineCreate(const long chart_ID=0, // chart's ID
const string name="VLine", // line name
const int sub_window=0, // subwindow index
datetime time=0, // line time
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray=true, // line's continuation down
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- if the line time is not set, draw it via the last bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- create a vertical line
if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
{
Print(__FUNCTION__,
": failed to create a vertical line! Error code = ",GetLastError());
return(false);
}
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of displaying the line in the chart subwindows
ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
309
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the vertical line |
//+------------------------------------------------------------------+
bool VLineMove(const long chart_ID=0, // chart's ID
const string name="VLine", // line name
datetime time=0) // line time
{
//--- if line time is not set, move the line to the last bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- move the vertical line
if(!ObjectMove(chart_ID,name,0,time,0))
{
Print(__FUNCTION__,
": failed to move the vertical line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the vertical line |
//+------------------------------------------------------------------+
bool VLineDelete(const long chart_ID=0, // chart's ID
const string name="VLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete the vertical line
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete the vertical line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
310
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- array for storing the date values to be used
//--- for setting and changing line anchor point's coordinates
datetime date[];
//--- memory allocation
ArrayResize(date,bars);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- define points for drawing the line
int d=InpDate*(bars-1)/100;
//--- create a vertical line
if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack,
InpSelection,InpRay,InpHidden,InpZOrder))
return;
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the line
//--- loop counter
int h_steps=bars/2;
//--- move the line
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d<bars-1)
d+=1;
//--- move the point
if(!VLineMove(0,InpName,date[d]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.03 seconds of delay
Sleep(30);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
311
//--- 1 second of delay
Sleep(1000);
//--- delete the channel from the chart
VLineDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
312
OBJ_HLINE
Horizontal Line.
Example
The following script creates and moves the horizontal line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Horizontal Line\" graphical object."
#property description "Anchor point price is set in percentage of the height of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="HLine"; // Line name
input int InpPrice=25; // Line price, %
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Line style
input int InpWidth=3; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create the horizontal line |
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
313
bool HLineCreate(const long chart_ID=0, // chart's ID
const string name="HLine", // line name
const int sub_window=0, // subwindow index
double price=0, // line price
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- if the price is not set, set it at the current Bid price level
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- create a horizontal line
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
{
Print(__FUNCTION__,
": failed to create a horizontal line! Error code = ",GetLastError());
return(false);
}
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move horizontal line |
//+------------------------------------------------------------------+
bool HLineMove(const long chart_ID=0, // chart's ID
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
314
const string name="HLine", // line name
double price=0) // line price
{
//--- if the line price is not set, move it to the current Bid price level
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move a horizontal line
if(!ObjectMove(chart_ID,name,0,0,price))
{
Print(__FUNCTION__,
": failed to move the horizontal line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete a horizontal line |
//+------------------------------------------------------------------+
bool HLineDelete(const long chart_ID=0, // chart's ID
const string name="HLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete a horizontal line
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete a horizontal line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- price array size
int accuracy=1000;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
315
//--- array for storing the price values to be used
//--- for setting and changing line anchor point's coordinates
double price[];
//--- memory allocation
ArrayResize(price,accuracy);
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the line
int p=InpPrice*(accuracy-1)/100;
//--- create a horizontal line
if(!HLineCreate(0,InpName,0,price[p],InpColor,InpStyle,InpWidth,InpBack,
InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the line
//--- loop counter
int v_steps=accuracy/2;
//--- move the line
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p<accuracy-1)
p+=1;
//--- move the point
if(!HLineMove(0,InpName,price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete from the chart
HLineDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
316
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
317
OBJ_TREND
Trend Line.
Note
For Trend Line, it is possible to specify the mode of continuation of its display to the right and/or
left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
Example
The following script creates and moves the trend line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Trend Line\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Trend"; // Line name
input int InpDate1=35; // 1 st point's date, %
input int InpPrice1=60; // 1 st point's price, %
input int InpDate2=65; // 2 nd point's date, %
input int InpPrice2=40; // 2 nd point's price, %
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Line style
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
318
input int InpWidth=2; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Line's continuation to the left
input bool InpRayRight=false; // Line's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create a trend line by the given coordinates |
//+------------------------------------------------------------------+
bool TrendCreate(const long chart_ID=0, // chart's ID
const string name="TrendLine", // line name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // line's continuation to the left
const bool ray_right=false, // line's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeTrendEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create a trend line by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create a trend line! Error code = ",GetLastError());
return(false);
}
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
319
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move trend line anchor point |
//+------------------------------------------------------------------+
bool TrendPointChange(const long chart_ID=0, // chart's ID
const string name="TrendLine", // line name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move trend line's anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| The function deletes the trend line from the chart. |
//+------------------------------------------------------------------+
bool TrendDelete(const long chart_ID=0, // chart's ID
const string name="TrendLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete a trend line
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
320
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete a trend line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of trend line's anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, it is equal to the first point's one
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
321
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing line anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the line
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create a trend line
if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the line's anchor points
//--- loop counter
int v_steps=accuracy/5;
//--- move the first anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
if(!TrendPointChange(0,InpName,0,date[d1],price[p1]))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
322
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- move the second anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2<accuracy-1)
p2+=1;
//--- move the point
if(!TrendPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- half a second of delay
Sleep(500);
//--- loop counter
int h_steps=bars/2;
//--- move both anchor points horizontally at the same time
for(int i=0;i<h_steps;i++)
{
//--- use the following values
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- shift the points
if(!TrendPointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!TrendPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.03 seconds of delay
Sleep(30);
}
//--- 1 second of delay
Sleep(1000);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
323
//--- delete a trend line
TrendDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
324
OBJ_TRENDBYANGLE
Trend Line By Angle.
Note
For Trend Line By Angle, it is possible to specify the mode of continuation of its display to the right
and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
Both angle and the second anchor point's coordinates can be used to set the slope of the line.
Example
The following script creates and moves the trend line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Trend Line By Angle\" graphical object."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Trend"; // Line name
input int InpDate1=50; // 1 st point's date, %
input int InpPrice1=75; // 1 st point's price, %
input int InpAngle=0; // Line's slope angle
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Line style
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
325
input int InpWidth=2; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Line's continuation to the left
input bool InpRayRight=true; // Line's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create a trend line by angle |
//+------------------------------------------------------------------+
bool TrendByAngleCreate(const long chart_ID=0, // chart's ID
const string name="TrendLine", // line name
const int sub_window=0, // subwindow index
datetime time=0, // point time
double price=0, // point price
const double angle=45.0, // slope angle
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // line's continuation to the left
const bool ray_right=true, // line's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- create the second point to facilitate dragging the trend line by mouse
datetime time2=0;
double price2=0;
//--- set anchor points' coordinates if they are not set
ChangeTrendEmptyPoints(time,price,time2,price2);
//--- reset the error value
ResetLastError();
//--- create a trend line using 2 points
if(!ObjectCreate(chart_ID,name,OBJ_TRENDBYANGLE,sub_window,time,price,time2,price2))
{
Print(__FUNCTION__,
": failed to create a trend line! Error code = ",GetLastError());
return(false);
}
//--- change trend line's slope angle; when changing the angle, coordinates of the second
//--- point of the line are redefined automatically according to the angle's new value
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
326
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change trend line anchor point's coordinates |
//+------------------------------------------------------------------+
bool TrendPointChange(const long chart_ID=0, // chart's ID
const string name="TrendLine", // line name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move trend line's anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change trend line's slope angle |
//+------------------------------------------------------------------+
bool TrendAngleChange(const long chart_ID=0, // chart's ID
const string name="TrendLine", // trend line name
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
327
const double angle=45) // trend line's slope angle
{
//--- reset the error value
ResetLastError();
//--- change trend line's slope angle
if(!ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle))
{
Print(__FUNCTION__,
": failed to change the line's slope angle! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the trend line |
//+------------------------------------------------------------------+
bool TrendDelete(const long chart_ID=0, // chart's ID
const string name="TrendLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete a trend line
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete a trend line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of trend line's anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- set coordinates of the second, auxiliary point
//--- the second point will be 9 bars left and have the same price
datetime second_point_time[10];
CopyTime(Symbol(),Period(),time1,10,second_point_time);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
328
time2=second_point_time[0];
price2=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing line anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the line
int d1=InpDate1*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- create a trend line
if(!TrendByAngleCreate(0,InpName,0,date[d1],price[p1],InpAngle,InpColor,InpStyle,
InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
329
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move and rotate the line
//--- loop counter
int v_steps=accuracy/2;
//--- move the anchor point and change the line's slope angle
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
if(!TrendPointChange(0,InpName,date[d1],price[p1]))
return;
if(!TrendAngleChange(0,InpName,18*(i+1)))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete from the chart
TrendDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
330
OBJ_CYCLES
Cycle Lines.
Note
The distance between the lines is set by time coordinates of two anchor points of the object.
Example
The following script creates and moves cycle lines on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script creates cycle lines on the chart."
#property description "Anchor point coordinates are set in percentage"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Cycles"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=45; // 1 st point's price, %
input int InpDate2=20; // 2 nd point's date, %
input int InpPrice2=55; // 2 nd point's price, %
input color InpColor=clrRed; // Color of cycle lines
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Style of cycle lines
input int InpWidth=1; // Width of cycle lines
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
331
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create cycle lines |
//+------------------------------------------------------------------+
bool CyclesCreate(const long chart_ID=0, // chart's ID
const string name="Cycles", // object name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // color of cycle lines
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of cycle lines
const int width=1, // width of cycle lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeCyclesEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create cycle lines by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_CYCLES,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create cycle lines! Error code = ",GetLastError());
return(false);
}
//--- set color of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set display style of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the lines by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
332
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool CyclesPointChange(const long chart_ID=0, // chart's ID
const string name="Cycles", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the cycle lines |
//+------------------------------------------------------------------+
bool CyclesDelete(const long chart_ID=0, // chart's ID
const string name="Cycles") // object name
{
//--- reset the error value
ResetLastError();
//--- delete cycle lines
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete cycle lines! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
333
//+------------------------------------------------------------------+
//| Check the values of cycle lines' anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeCyclesEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, it is equal to the first point's one
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of cycle lines' anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
334
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing cycle lines
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create a trend line
if(!CyclesCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int h_steps=bars/5;
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
//--- move the point
if(!CyclesPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
335
//--- 1 second of delay
Sleep(1000);
//--- loop counter
h_steps=bars/4;
//--- move the first anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d1<bars-1)
d1+=1;
//--- move the point
if(!CyclesPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
CyclesDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
336
OBJ_ARROWED_LINE
Arrowed line.
Example
The following script creates and moves an arrow line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Arrowed line\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ArrowedLine"; // Line name
input int InpDate1=35; // 1 st point's date, %
input int InpPrice1=60; // 1 st point's price, %
input int InpDate2=65; // 2 nd point's date, %
input int InpPrice2=40; // 2 nd point's price, %
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Line style
input int InpWidth=2; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
337
//+------------------------------------------------------------------+
//| Create an arrowed line by the given coordinates |
//+------------------------------------------------------------------+
bool ArrowedLineCreate(const long chart_ID=0, // chart's ID
const string name="ArrowedLine", // line name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeArrowedLineEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create an arrowed line by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_ARROWED_LINE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create an arrowed line! Error code = ",GetLastError());
return(false);
}
//--- set line color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
338
}
//+------------------------------------------------------------------+
//| Move arrowed line's anchor point |
//+------------------------------------------------------------------+
bool ArrowedLinePointChange(const long chart_ID=0, // chart's ID
const string name="ArrowedLine", // line name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the line's anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| The function removes the arrowed line from the chart |
//+------------------------------------------------------------------+
bool ArrowedLineDelete(const long chart_ID=0, // chart's ID
const string name="ArrowedLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete an arrowed line
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to create an arrowed line! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor points' values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
339
void ChangeArrowedLineEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, it is equal to the first point's one
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing line anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
340
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the line
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create an arrowed line
if(!ArrowedLineCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the line's anchor points
//--- loop counter
int v_steps=accuracy/5;
//--- move the second anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2<accuracy-1)
p2+=1;
//--- move the point
if(!ArrowedLinePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- move the first anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
341
//--- move the point
if(!ArrowedLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- half a second of delay
Sleep(500);
//--- loop counter
int h_steps=bars/2;
//--- move both anchor points horizontally at the same time
for(int i=0;i<h_steps;i++)
{
//--- use the following values
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- shift the points
if(!ArrowedLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ArrowedLinePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.03 seconds of delay
Sleep(30);
}
//--- 1 second of delay
Sleep(1000);
//--- delete an arrowed line
ArrowedLineDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
342
OBJ_CHANNEL
Equidistant Channel
Note
For an equidistant channel, it is possible to specify the mode of its continuation to the right and/or
to the left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly). The mode of
filling the channel with color can also be set.
Example
The following script creates and moves an equidistant channel on the chart. Special functions have
been developed to create and change graphical object's properties. You can use these functions "as
is" in your own applications.
//--- description
#property description "Script draws \"Equidistant Channel\" graphical object."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Channel"; // Channel name
input int InpDate1=25; // 1 st point's date, %
input int InpPrice1=60; // 1 st point's price, %
input int InpDate2=65; // 2 nd point's date, %
input int InpPrice2=80; // 2 nd point's price, %
input int InpDate3=30; // 3 rd point's date, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
343
input int InpPrice3=40; // 3 rd point's price, %
input color InpColor=clrRed; // Channel color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of channel lines
input int InpWidth=2; // Channel line width
input bool InpBack=false; // Background channel
input bool InpFill=false; // Filling the channel with color
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Channel's continuation to the left
input bool InpRayRight=false; // Channel's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create an equidistant channel by the given coordinates |
//+------------------------------------------------------------------+
bool ChannelCreate(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // channel color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines
const int width=1, // width of channel lines
const bool fill=false, // filling the channel with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // channel's continuation to the left
const bool ray_right=false, // channel's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- create a channel by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_CHANNEL,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create an equidistant channel! Error code = ",GetLastError());
return(false);
}
//--- set channel color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
344
//--- set width of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the channel
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the channel's anchor point |
//+------------------------------------------------------------------+
bool ChannelPointChange(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
345
//+------------------------------------------------------------------+
//| Delete the channel |
//+------------------------------------------------------------------+
bool ChannelDelete(const long chart_ID=0, // chart's ID
const string name="Channel") // channel name
{
//--- reset the error value
ResetLastError();
//--- delete the channel
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete the channel! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+-------------------------------------------------------------------------+
//| Check the values of the channel's anchor points and set default values |
//| for empty ones |
//+-------------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- if the second (right) point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first (left) point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 300 points higher than the second one
if(!price1)
price1=price2+300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the third point's time is not set, it coincides with the first point's one
if(!time3)
time3=time1;
//--- if the third point's price is not set, it is equal to the second point's one
if(!price3)
price3=price2;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
346
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing channel anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the channel
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create the equidistant channel
if(!ChannelCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],InpColor,
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
347
InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the channel's anchor points
//--- loop counter
int h_steps=bars/6;
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
//--- move the point
if(!ChannelPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- move the first anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d1>1)
d1-=1;
//--- move the point
if(!ChannelPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
348
int v_steps=accuracy/10;
//--- move the third anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p3>1)
p3-=1;
//--- move the point
if(!ChannelPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the channel from the chart
ChannelDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
349
OBJ_STDDEVCHANNEL
Standard Deviation Channel.
Note
For Standard Deviation Channel, it is possible to specify the mode of continuation of its display to
the right and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly). The
mode of filling the channel with color can also be set.
OBJPROP_DEVIATION property is used to change the value of the channel deviation.
Example
The following script creates and moves Standard Deviation Channel on the chart. Special functions
have been developed to create and change graphical object's properties. You can use these functions
"as is" in your own applications.
//--- description
#property description "Script draws \"Standard Deviation Channel\" graphical object."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="StdDevChannel"; // Channel name
input int InpDate1=10; // 1 st point's date, %
input int InpDate2=40; // 2 nd point's date, %
input double InpDeviation=1.0; // Deviation
input color InpColor=clrRed; // Channel color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
350
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of channel lines
input int InpWidth=2; // Width of channel lines
input bool InpFill=false; // Filling the channel with color
input bool InpBack=false; // Background channel
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Channel's continuation to the left
input bool InpRayRight=false; // Channel's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create standard deviation channel by the given coordinates |
//+------------------------------------------------------------------+
bool StdDevChannelCreate(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
datetime time2=0, // second point time
const double deviation=1.0, // deviation
const color clr=clrRed, // channel color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines
const int width=1, // width of channel lines
const bool fill=false, // filling the channel with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // channel's continuation to the left
const bool ray_right=false, // channel's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeChannelEmptyPoints(time1,time2);
//--- reset the error value
ResetLastError();
//--- create a channel by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_STDDEVCHANNEL,sub_window,time1,0,time2,0))
{
Print(__FUNCTION__,
": failed to create standard deviation channel! Error code = ",GetLastError());
return(false);
}
//--- set deviation value affecting the channel width
ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATION,deviation);
//--- set channel color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the channel
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
351
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the channel's anchor point |
//+------------------------------------------------------------------+
bool StdDevChannelPointChange(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const int point_index=0, // anchor point index
datetime time=0) // anchor point time coordinate
{
//--- if point time is not set, move the point to the current bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,0))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change the channel's deviation |
//+------------------------------------------------------------------+
bool StdDevChannelDeviationChange(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const double deviation=1.0) // deviation
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
352
{
//--- reset the error value
ResetLastError();
//--- change trend line's slope angle
if(!ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATION,deviation))
{
Print(__FUNCTION__,
": failed to change channel deviation! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the channel |
//+------------------------------------------------------------------+
bool StdDevChannelDelete(const long chart_ID=0, // chart's ID
const string name="Channel") // channel name
{
//--- reset the error value
ResetLastError();
//--- delete the channel
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete the channel! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+-------------------------------------------------------------------------+
//| Check the values of the channel's anchor points and set default values |
//| for empty ones |
//+-------------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,datetime &time2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
353
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing channel anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the channel
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
//--- create standard deviation channel
if(!StdDevChannelCreate(0,InpName,0,date[d1],date[d2],InpDeviation,InpColor,InpStyle,
InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
354
ChartRedraw();
Sleep(1000);
//--- now, the channel horizontally to the right and expand it
//--- loop counter
int h_steps=bars/2;
//--- move the channel
for(int i=0;i<h_steps;i++)
{
//--- use the following values
if(d1<bars-1)
d1+=1;
if(d2<bars-1)
d2+=1;
//--- move the anchor points
if(!StdDevChannelPointChange(0,InpName,0,date[d1]))
return;
if(!StdDevChannelPointChange(0,InpName,1,date[d2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
double v_steps=InpDeviation*2;
//--- expand the channel
for(double i=InpDeviation;i<v_steps;i+=10.0/accuracy)
{
if(!StdDevChannelDeviationChange(0,InpName,i))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the channel from the chart
StdDevChannelDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
355
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
356
OBJ_REGRESSION
Linear Regression Channel.
Note
For Linear Regression Channel, it is possible to specify the mode of continuation of its display to the
right and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly). The mode
of filling the channel with color can also be set.
Example
The following script creates and moves Linear Regression Channel on the chart. Special functions
have been developed to create and change graphical object's properties. You can use these functions
"as is" in your own applications.
//--- description
#property description "Script draws \"Linear Regression Channel\" graphical object."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Regression"; // Channel name
input int InpDate1=10; // 1 st point's date, %
input int InpDate2=40; // 2 nd point's date, %
input color InpColor=clrRed; // Channel color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of channel lines
input int InpWidth=2; // Width of channel lines
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
357
input bool InpFill=false; // Filling the channel with color
input bool InpBack=false; // Background channel
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Channel's continuation to the left
input bool InpRayRight=false; // Channel's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Linear Regression Channel by the given coordinates |
//+------------------------------------------------------------------+
bool RegressionCreate(const long chart_ID=0, // chart's ID
const string name="Regression", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
datetime time2=0, // second point time
const color clr=clrRed, // channel color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines
const int width=1, // width of channel lines
const bool fill=false, // filling the channel with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // channel's continuation to the left
const bool ray_right=false, // channel's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeRegressionEmptyPoints(time1,time2);
//--- reset the error value
ResetLastError();
//--- create a channel by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_REGRESSION,sub_window,time1,0,time2,0))
{
Print(__FUNCTION__,
": failed to create linear regression channel! Error code = ",GetLastError());
return(false);
}
//--- set channel color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the channel
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
358
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the channel's anchor point |
//+------------------------------------------------------------------+
bool RegressionPointChange(const long chart_ID=0, // chart's ID
const string name="Channel", // channel name
const int point_index=0, // anchor point index
datetime time=0) // anchor point time coordinate
{
//--- if point time is not set, move the point to the current bar
if(!time)
time=TimeCurrent();
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,0))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the channel |
//+------------------------------------------------------------------+
bool RegressionDelete(const long chart_ID=0, // chart's ID
const string name="Channel") // channel name
{
//--- reset the error value
ResetLastError();
//--- delete the channel
if(!ObjectDelete(chart_ID,name))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
359
Print(__FUNCTION__,
": failed to delete the channel! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+-------------------------------------------------------------------------+
//| Check the values of the channel's anchor points and set default values |
//| for empty ones |
//+-------------------------------------------------------------------------+
void ChangeRegressionEmptyPoints(datetime &time1,datetime &time2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing channel anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
360
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the channel
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
//--- create linear regression channel
if(!RegressionCreate(0,InpName,0,date[d1],date[d2],InpColor,InpStyle,InpWidth,
InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the channel horizontally to the right
//--- loop counter
int h_steps=bars/2;
//--- move the channel
for(int i=0;i<h_steps;i++)
{
//--- use the following values
if(d1<bars-1)
d1+=1;
if(d2<bars-1)
d2+=1;
//--- move the anchor points
if(!RegressionPointChange(0,InpName,0,date[d1]))
return;
if(!RegressionPointChange(0,InpName,1,date[d2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
361
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the channel from the chart
RegressionDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
362
OBJ_PITCHFORK
Andrews Pitchfork.
Note
For Andrews Pitchfork, it is possible to specify the mode of continuation of its display to the right
and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
You can also specify the number of line-levels, their values and color.
Example
The following script creates and moves Andrews Pitchfork on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Andrews Pitchfork\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Pitchfork"; // Pitchfork name
input int InpDate1=14; // 1 st point's date, %
input int InpPrice1=40; // 1 st point's price, %
input int InpDate2=18; // 2 nd point's date, %
input int InpPrice2=50; // 2 nd point's price, %
input int InpDate3=18; // 3 rd point's date, %
input int InpPrice3=30; // 3 rd point's price, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
363
input color InpColor=clrRed; // Pitchfork color
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Style of pitchfork lines
input int InpWidth=1; // Width of pitchfork lines
input bool InpBack=false; // Background pitchfork
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Pitchfork's continuation to the left
input bool InpRayRight=false; // Pitchfork's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Andrews' Pitchfork by the given coordinates |
//+------------------------------------------------------------------+
bool PitchforkCreate(const long chart_ID=0, // chart's ID
const string name="Pitchfork", // pitchfork name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // color of pitchfork lines
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of pitchfork lines
const int width=1, // width of pitchfork lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // pitchfork's continuation to the left
const bool ray_right=false, // pitchfork's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- create Andrews' Pitchfork by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_PITCHFORK,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create \"Andrews' Pitchfork\"! Error code = ",GetLastError());
return(false);
}
//--- set color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
364
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the pitchfork for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the pitchfork's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the pitchfork's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of Andrews' Pitchfork levels and their parameters |
//+------------------------------------------------------------------+
bool PitchforkLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="Pitchfork") // pitchfork name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
365
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Andrews' Pitchfork anchor point |
//+------------------------------------------------------------------+
bool PitchforkPointChange(const long chart_ID=0, // chart's ID
const string name="Pitchfork", // channel name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Andrews Pitchfork |
//+------------------------------------------------------------------+
bool PitchforkDelete(const long chart_ID=0, // chart's ID
const string name="Pitchfork") // channel name
{
//--- reset the error value
ResetLastError();
//--- delete the channel
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Andrews' Pitchfork\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
366
}
//+----------------------------------------------------------------------+
//| Check the values of Andrews' Pitchfork anchor points and set default |
//| values for empty ones |
//+----------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- if the second (upper right) point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first (left) point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 200 points below the second one
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the third point's time is not set, it coincides with the second point's one
if(!time3)
time3=time2;
//--- if the third point's price is not set, move it 200 points lower than the first one
if(!price3)
price3=price1-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
367
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of Andrews' Pitchfork anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Andrews' Pitchfork
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create the pitchfork
if(!PitchforkCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the pitchfork's anchor points
//--- loop counter
int v_steps=accuracy/10;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
368
if(!PitchforkPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars/8;
//--- move the third anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d3<bars-1)
d3+=1;
//--- move the point
if(!PitchforkPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy/10;
//--- move the second anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2>1)
p2-=1;
//--- move the point
if(!PitchforkPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
369
}
//--- 1 second of delay
Sleep(1000);
//--- delete the pitchfork from the chart
PitchforkDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
370
OBJ_GANNLINE
Gann Line.
Note
For Gann Line, it is possible to specify the mode of continuation of its display to the right and/or
left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
Both Gann angle with a scale and coordinates of the second anchor point can be used to set the slope
of the line.
Example
The following script creates and moves Gann Line on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Gann Line\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="GannLine"; // Line name
input int InpDate1=20; // 1 st point's date, %
input int InpPrice1=75; // 1 st point's price, %
input int InpDate2=80; // 2 nd point's date, %
input double InpAngle=0.0; // Gann Angle
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
371
input double InpScale=1.0; // Scale
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Line style
input int InpWidth=2; // Line width
input bool InpBack=false; // Background line
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Line's continuation to the left
input bool InpRayRight=true; // Line's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Gann Line by the coordinates, angle and scale |
//+------------------------------------------------------------------+
bool GannLineCreate(const long chart_ID=0, // chart's ID
const string name="GannLine", // line name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
const double angle=1.0, // Gann angle
const double scale=1.0, // scale
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // line's continuation to the left
const bool ray_right=true, // line's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeGannLineEmptyPoints(time1,price1,time2);
//--- reset the error value
ResetLastError();
//--- create Gann Line by the given coordinates
//--- correct coordinate of the second anchor point is redefined
//--- automatically after Gann angle and/or the scale changes,
if(!ObjectCreate(chart_ID,name,OBJ_GANNLINE,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": failed to create \"Gann Line\"! Error code = ",GetLastError());
return(false);
}
//--- change Gann angle
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- change the scale (number of pips per bar)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- set line color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
372
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the lines for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Gann Line anchor point |
//+------------------------------------------------------------------+
bool GannLinePointChange(const long chart_ID=0, // chart's ID
const string name="GannLine", // line name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the line's anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
373
}
//+------------------------------------------------------------------+
//| Change Gann angle |
//+------------------------------------------------------------------+
bool GannLineAngleChange(const long chart_ID=0, // chart's ID
const string name="GannLine", // line name
const double angle=1.0) // Gann angle
{
//--- reset the error value
ResetLastError();
//--- change Gann angle
if(!ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle))
{
Print(__FUNCTION__,
": failed to change Gann angle! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Gann Line's scale |
//+------------------------------------------------------------------+
bool GannLineScaleChange(const long chart_ID=0, // chart's ID
const string name="GannLine", // line name
const double scale=1.0) // scale
{
//--- reset the error value
ResetLastError();
//--- change the scale (number of pips per bar)
if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
{
Print(__FUNCTION__,
": failed to change the scale! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| The function removes Gann Line from the chart |
//+------------------------------------------------------------------+
bool GannLineDelete(const long chart_ID=0, // chart's ID
const string name="GannLine") // line name
{
//--- reset the error value
ResetLastError();
//--- delete Gann line
if(!ObjectDelete(chart_ID,name))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
374
{
Print(__FUNCTION__,
": failed to delete \"Gann Line\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Gann Line anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeGannLineEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing line anchor points' coordinates
datetime date[];
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
375
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Gann Line
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- create Gann Line
if(!GannLineCreate(0,InpName,0,date[d1],price[p1],date[d2],InpAngle,InpScale,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the line's anchor point and change the angle
//--- loop counter
int v_steps=accuracy/2;
//--- move the first anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
if(!GannLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
376
}
//--- half a second of delay
Sleep(500);
//--- define the current value of Gann angle (changed
//--- after moving the first anchor point)
double curr_angle;
if(!ObjectGetDouble(0,InpName,OBJPROP_ANGLE,0,curr_angle))
return;
//--- loop counter
v_steps=accuracy/8;
//--- change Gann angle
for(int i=0;i<v_steps;i++)
{
if(!GannLineAngleChange(0,InpName,curr_angle-0.05*i))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the line from the chart
GannLineDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
377
OBJ_GANNFAN
Gann Fan.
Note
For Gann Fan, it is possible to specify trend type from ENUM_GANN_DIRECTION enumeration. By
adjusting the scale value (OBJPROP_SCALE), it is possible to change slope angle of the fan lines.
Example
The following script creates and moves Gann Fan on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Gann Fan\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="GannFan"; // Fan name
input int InpDate1=15; // 1 st point's date, %
input int InpPrice1=25; // 1 st point's price, %
input int InpDate2=85; // 2 nd point's date, %
input double InpScale=2.0; // Scale
input bool InpDirection=false; // Trend direction
input color InpColor=clrRed; // Fan color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
378
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of fan lines
input int InpWidth=1; // Width of fan lines
input bool InpBack=false; // Background fan
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Gann Fan |
//+------------------------------------------------------------------+
bool GannFanCreate(const long chart_ID=0, // chart's ID
const string name="GannFan", // fan name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
const double scale=1.0, // scale
const bool direction=true, // trend direction
const color clr=clrRed, // fan color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of fan lines
const int width=1, // width of fan lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeGannFanEmptyPoints(time1,price1,time2);
//--- reset the error value
ResetLastError();
//--- create Gann Fan by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_GANNFAN,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": failed to create \"Gann Fan\"! Error code = ",GetLastError());
return(false);
}
//--- change the scale (number of pips per bar)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- change Gann Fan's trend direction (true - descending, false - ascending)
ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction);
//--- set fan color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set display style of the fan lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the fan lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the fan for moving
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
379
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Gann Fan anchor point |
//+------------------------------------------------------------------+
bool GannFanPointChange(const long chart_ID=0, // chart's ID
const string name="GannFan", // fan name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the fan's anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Gann Fan's scale |
//+------------------------------------------------------------------+
bool GannFanScaleChange(const long chart_ID=0, // chart's ID
const string name="GannFan", // fan name
const double scale=1.0) // scale
{
//--- reset the error value
ResetLastError();
//--- change the scale (number of pips per bar)
if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
380
{
Print(__FUNCTION__,
": failed to change the scale! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Gann Fan's trend direction |
//+------------------------------------------------------------------+
bool GannFanDirectionChange(const long chart_ID=0, // chart's ID
const string name="GannFan", // fan name
const bool direction=true) // trend direction
{
//--- reset the error value
ResetLastError();
//--- change Gann Fan's trend direction
if(!ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction))
{
Print(__FUNCTION__,
": failed to change trend direction! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| The function removes Gann Fan from the chart |
//+------------------------------------------------------------------+
bool GannFanDelete(const long chart_ID=0, // chart's ID
const string name="GannFan") // fan name
{
//--- reset the error value
ResetLastError();
//--- delete Gann Fan
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Gann Fan\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
// | Check the values of Gann Fan anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
381
void ChangeGannFanEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of fan's anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
382
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Gann Fan
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- create Gann Fan
if(!GannFanCreate(0,InpName,0,date[d1],price[p1],date[d2],InpScale,InpDirection,
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the fan's anchor point
//--- loop counter
int v_steps=accuracy/2;
//--- move the first anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1<accuracy-1)
p1+=1;
//--- move the point
if(!GannFanPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- change fan's trend direction to descending one
GannFanDirectionChange(0,InpName,true);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the fan from the chart
GannFanDelete(0,InpName);
ChartRedraw();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
383
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
384
OBJ_GANNGRID
Gann Grid.
Note
For Gann Grid, it is possible to specify trend type from ENUM_GANN_DIRECTION. By adjusting the
scale value (OBJPROP_SCALE), it is possible to change slope angle of the grid lines.
Example
The following script creates and moves Gann Grid on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Gann Grid\" graphical object."
#property description "Anchor point coordinates of the grid are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="GannGrid"; // Grid name
input int InpDate1=15; // 1 st point's date, %
input int InpPrice1=25; // 1 st point's price, %
input int InpDate2=35; // 2 nd point's date, %
input double InpScale=3.0; // Scale
input bool InpDirection=false; // Trend direction
input color InpColor=clrRed; // Grid color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
385
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of grid lines
input int InpWidth=1; // Width of fan lines
input bool InpBack=false; // Background grid
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Gann Grid |
//+------------------------------------------------------------------+
bool GannGridCreate(const long chart_ID=0, // chart's ID
const string name="GannGrid", // grid name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
const double scale=1.0, // scale
const bool direction=true, // trend direction
const color clr=clrRed, // grid color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of grid lines
const int width=1, // width of grid lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeGannGridEmptyPoints(time1,price1,time2);
//--- reset the error value
ResetLastError();
//--- create Gann Grid by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_GANNGRID,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": failed to create \"Gann Grid\"! Error code = ",GetLastError());
return(false);
}
//--- change the scale (number of pips per bar)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- change Gann Fan's trend direction (true - descending, false - ascending)
ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction);
//--- set grid color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set display style of the grid lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the grid lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the grid for moving
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
386
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Gann Grid anchor point |
//+------------------------------------------------------------------+
bool GannGridPointChange(const long chart_ID=0, // chart's ID
const string name="GannGrid", // grid name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the grid's anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Gann Grid's scale |
//+------------------------------------------------------------------+
bool GannGridScaleChange(const long chart_ID=0, // chart's ID
const string name="GannGrid", // grids
const double scale=1.0) // scale
{
//--- reset the error value
ResetLastError();
//--- change the scale (number of pips per bar)
if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
387
{
Print(__FUNCTION__,
": failed to change the scale! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Gann Grid's trend direction |
//+------------------------------------------------------------------+
bool GannGridDirectionChange(const long chart_ID=0, // chart's ID
const string name="GannGrid", // grid name
const bool direction=true) // trend direction
{
//--- reset the error value
ResetLastError();
//--- change Gann Grid's trend direction
if(!ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction))
{
Print(__FUNCTION__,
": failed to change trend direction! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| The function removes Gann Fan from the chart |
//+------------------------------------------------------------------+
bool GannGridDelete(const long chart_ID=0, // chart's ID
const string name="GannGrid") // grid name
{
//--- reset the error value
ResetLastError();
//--- delete Gann Grid
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Gann Grid\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Gann Grid anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
388
void ChangeGannGridEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing grid anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
389
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Gann Grid
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- create Gann Grid
if(!GannGridCreate(0,InpName,0,date[d1],price[p1],date[d2],InpScale,InpDirection,
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the grid's anchor points
//--- loop counter
int v_steps=accuracy/4;
//--- move the first anchor point vertically
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1<accuracy-1)
p1+=1;
if(!GannGridPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars/4;
//--- move the second anchor point horizontally
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
if(!GannGridPointChange(0,InpName,1,date[d2],0))
return;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
390
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- change grid's trend direction to descending one
GannGridDirectionChange(0,InpName,true);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the grid from the chart
GannGridDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
391
OBJ_FIBO
Fibonacci Retracement.
Note
For Fibonacci Retracement, it is possible to specify the mode of continuation of its display to the
right and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
You can also specify the number of line-levels, their values and color.
Example
The following script creates and moves Fibonacci Retracement on the chart. Special functions have
been developed to create and change graphical object's properties. You can use these functions "as
is" in your own applications.
//--- description
#property description "Script draws \"Fibonacci Retracement\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboLevels"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=65; // 1 st point's price, %
input int InpDate2=90; // 2 nd point's date, %
input int InpPrice2=85; // 2 nd point's price, %
input color InpColor=clrRed; // Object color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
392
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Line style
input int InpWidth=2; // Line width
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Object's continuation to the left
input bool InpRayRight=false; // Object's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Retracement by the given coordinates |
//+------------------------------------------------------------------+
bool FiboLevelsCreate(const long chart_ID=0, // chart's ID
const string name="FiboLevels", // object name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // object color
const ENUM_LINE_STYLE style=STYLE_SOLID, // object line style
const int width=1, // object line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // object's continuation to the left
const bool ray_right=false, // object's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboLevelsEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- Create Fibonacci Retracement by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_FIBO,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Retracement\"! Error code = ",GetLastError());
return(false);
}
//--- set color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
393
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the object's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the object's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboLevels") // object name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
394
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Retracement anchor point |
//+------------------------------------------------------------------+
bool FiboLevelsPointChange(const long chart_ID=0, // chart's ID
const string name="FiboLevels", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Fibonacci Retracement |
//+------------------------------------------------------------------+
bool FiboLevelsDelete(const long chart_ID=0, // chart's ID
const string name="FiboLevels") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Retracement\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Retracement anchor points and set |
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
395
//| default values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboLevelsEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 200 points below the second one
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of Fibonacci Retracement anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
396
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Fibonacci Retracement
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create an object
if(!FiboLevelsCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int v_steps=accuracy*2/5;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
if(!FiboLevelsPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy*4/5;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
397
//--- move the second anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2>1)
p2-=1;
//--- move the point
if(!FiboLevelsPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
FiboLevelsDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
398
OBJ_FIBOTIMES
Fibonacci Time Zones.
Note
For "Fibonacci Time Zones", it is possible to specify the number of line-levels, their values and
color.
Example
The following script creates and moves Fibonacci Time Zones on the chart. Special functions have
been developed to create and change graphical object's properties. You can use these functions "as
is" in your own applications.
//--- description
#property description "Script draws \"Fibonacci Time Zones\" graphical object."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboTimes"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=45; // 1 st point's price, %
input int InpDate2=20; // 2 nd point's date, %
input int InpPrice2=55; // 2 nd point's price, %
input color InpColor=clrRed; // Object color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Line style
input int InpWidth=2; // Line width
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
399
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Time Zones by the given coordinates |
//+------------------------------------------------------------------+
bool FiboTimesCreate(const long chart_ID=0, // chart's ID
const string name="FiboTimes", // object name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // object color
const ENUM_LINE_STYLE style=STYLE_SOLID, // object line style
const int width=1, // object line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboTimesEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create Fibonacci Time Zones by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_FIBOTIMES,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Time Zones\"! Error code = ",GetLastError());
return(false);
}
//--- set color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
400
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboTimesLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboTimes") // object name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(values[i],1));
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Time Zones anchor point |
//+------------------------------------------------------------------+
bool FiboTimesPointChange(const long chart_ID=0, // chart's ID
const string name="FiboTimes", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
401
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Fibonacci Time Zones |
//+------------------------------------------------------------------+
bool FiboTimesDelete(const long chart_ID=0, // chart's ID
const string name="FiboTimes") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Time Zones\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Time Zones and |
//| set default values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboTimesEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
402
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 2 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 3 bars
datetime temp[3];
CopyTime(Symbol(),Period(),time1,3,temp);
//--- set the first point 2 bars left from the second one
time2=temp[0];
}
//--- if the second point's price is not set, it is equal to the first point's one
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of Fibonacci Time Zones anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
403
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Fibonacci Time Zones
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create an object
if(!FiboTimesCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int h_steps=bars*2/5;
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
//--- move the point
if(!FiboTimesPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
h_steps=bars*3/5;
//--- move the first anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d1<bars-1)
d1+=1;
//--- move the point
if(!FiboTimesPointChange(0,InpName,0,date[d1],price[p1]))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
404
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
FiboTimesDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
405
OBJ_FIBOFAN
Fibonacci Fan.
Note
For "Fibonacci Fan", it is possible to specify the number of line-levels, their values and color.
Example
The following script creates and moves Fibonacci Fan on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Fibonacci Fan\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboFan"; // Fan name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=25; // 1 st point's price, %
input int InpDate2=30; // 2 nd point's date, %
input int InpPrice2=50; // 2 nd point's price, %
input color InpColor=clrRed; // Fan line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Line style
input int InpWidth=2; // Line width
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
406
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Fan by the given coordinates |
//+------------------------------------------------------------------+
bool FiboFanCreate(const long chart_ID=0, // chart's ID
const string name="FiboFan", // fan name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // fan line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // fan line style
const int width=1, // fan line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboFanEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create Fibonacci Fan by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_FIBOFAN,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Fan\"! Error code = ",GetLastError());
return(false);
}
//--- set color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the fan for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
407
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboFanLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboFan") // fan name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Fan anchor point |
//+------------------------------------------------------------------+
bool FiboFanPointChange(const long chart_ID=0, // chart's ID
const string name="FiboFan", // fan name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
408
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Fibonacci Fan |
//+------------------------------------------------------------------+
bool FiboFanDelete(const long chart_ID=0, // chart's ID
const string name="FiboFan") // fan name
{
//--- reset the error value
ResetLastError();
//--- delete the fan
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Fan\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Fan anchor points and set |
//| default values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboFanEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
409
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 200 points below the second one
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of Fibonacci Fan anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
410
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Fibonacci Fan
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create an object
if(!FiboFanCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the fan's anchor points
//--- loop counter
int v_steps=accuracy/2;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1<accuracy-1)
p1+=1;
//--- move the point
if(!FiboFanPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars/4;
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
//--- move the point
if(!FiboFanPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
411
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
FiboFanDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
412
OBJ_FIBOARC
Fibonacci Arcs.
Note
For "Fibonacci Arcs", it is possible to specify the display mode of the entire ellipse. Curvature radius
can be specified by changing the scale and coordinates of the anchor points.
You can also specify the number of line-levels, their values and color.
Example
The following script creates and moves Fibonacci Arcs on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Fibonacci Arcs\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboArc"; // Object name
input int InpDate1=25; // 1 st point's date, %
input int InpPrice1=25; // 1 st point's price, %
input int InpDate2=35; // 2 nd point's date, %
input int InpPrice2=55; // 2 nd point's price, %
input double InpScale=3.0; // Scale
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
413
input bool InpFullEllipse=true; // Shape of the arcs
input color InpColor=clrRed; // Line color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Line style
input int InpWidth=2; // Line width
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Arcs by the given coordinates |
//+------------------------------------------------------------------+
bool FiboArcCreate(const long chart_ID=0, // chart's ID
const string name="FiboArc", // object name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const double scale=1.0, // scale
const bool full_ellipse=false, // shape of the arcs
const color clr=clrRed, // line color
const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
const int width=1, // line width
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboArcEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create Fibonacci Arcs by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_FIBOARC,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Arcs\"! Error code = ",GetLastError());
return(false);
}
//--- set the scale
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- set display of the arcs as a full ellipse (true) or a half of it (false)
ObjectSetInteger(chart_ID,name,OBJPROP_ELLIPSE,full_ellipse);
//--- set color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
414
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the arcs for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboArcLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboArc") // object name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
415
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Arcs anchor point |
//+------------------------------------------------------------------+
bool FiboArcPointChange(const long chart_ID=0, // chart's ID
const string name="FiboArc", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Fibonacci Arcs |
//+------------------------------------------------------------------+
bool FiboArcDelete(const long chart_ID=0, // chart's ID
const string name="FiboArc") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Arcs\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Arcs anchor points and set default |
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
416
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboArcEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the second point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 300 points below the second one
if(!price1)
price1=price2-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing the coordinates of Fibonacci Arcs anchor points
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
417
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Fibonacci Arcs
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create an object
if(!FiboArcCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpScale,
InpFullEllipse,InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int v_steps=accuracy/5;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1<accuracy-1)
p1+=1;
//--- move the point
if(!FiboArcPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars/5;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
418
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2<bars-1)
d2+=1;
//--- move the point
if(!FiboArcPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
FiboArcDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
419
OBJ_FIBOCHANNEL
Fibonacci Channel.
Note
For Fibonacci Channel, it is possible to specify the mode of continuation of its display to the right
and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
You can also specify the number of line-levels, their values and color.
Example
The following script creates and moves Fibonacci Channel on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Fibonacci Channel\" graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboChannel"; // Channel name
input int InpDate1=20; // 1 st point's date, %
input int InpPrice1=10; // 1 st point's price, %
input int InpDate2=60; // 2 nd point's date, %
input int InpPrice2=30; // 2 nd point's price, %
input int InpDate3=20; // 3 rd point's date, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
420
input int InpPrice3=25; // 3 rd point's price, %
input color InpColor=clrRed; // Channel color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of channel lines
input int InpWidth=2; // Width of channel lines
input bool InpBack=false; // Background channel
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Channel's continuation to the left
input bool InpRayRight=false; // Channel's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Channel by the given coordinates |
//+------------------------------------------------------------------+
bool FiboChannelCreate(const long chart_ID=0, // chart's ID
const string name="FiboChannel", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // channel color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines
const int width=1, // width of channel lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // channel's continuation to the left
const bool ray_right=false, // channel's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- create a channel by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_FIBOCHANNEL,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Channel\"! Error code = ",GetLastError());
return(false);
}
//--- set channel color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
421
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboChannelLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboChannel") // object name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
422
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Channel anchor point |
//+------------------------------------------------------------------+
bool FiboChannelPointChange(const long chart_ID=0, // chart's ID
const string name="FiboChannel", // channel name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the channel |
//+------------------------------------------------------------------+
bool FiboChannelDelete(const long chart_ID=0, // chart's ID
const string name="FiboChannel") // channel name
{
//--- reset the error value
ResetLastError();
//--- delete the channel
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Channel\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
423
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Channel anchor points and set |
//| default values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- if the second (right) point's time is not set, it will be on the current bar
if(!time2)
time2=TimeCurrent();
//--- if the second point's price is not set, it will have Bid value
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first (left) point's time is not set, it is located 9 bars left from the second one
if(!time1)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, move it 300 points higher than the second one
if(!price1)
price1=price2+300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the third point's time is not set, it coincides with the first point's one
if(!time3)
time3=time1;
//--- if the third point's price is not set, it is equal to the second point's one
if(!price3)
price3=price2;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
424
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing channel anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the channel
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create Fibonacci Channel
if(!FiboChannelCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the channel's anchor points
//--- loop counter
int h_steps=bars/10;
//--- move the first anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d1>1)
d1-=1;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
425
//--- move the point
if(!FiboChannelPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int v_steps=accuracy/10;
//--- move the second anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2>1)
p2-=1;
//--- move the point
if(!FiboChannelPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy/15;
//--- move the third anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p3<accuracy-1)
p3+=1;
//--- move the point
if(!FiboChannelPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
426
//--- 1 second of delay
Sleep(1000);
//--- delete the channel from the chart
FiboChannelDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
427
OBJ_EXPANSION
Fibonacci Expansion.
Note
For "Fibonacci Expansion", it is possible to specify the mode of continuation of its display to the
right and/or left (OBJPROP_RAY_RIGHT and OBJPROP_RAY_LEFT properties accordingly).
You can also specify the number of line-levels, their values and color.
Example
The following script creates and moves Fibonacci Expansion on the chart. Special functions have
been developed to create and change graphical object's properties. You can use these functions "as
is" in your own applications.
//--- description
#property description "Script draws \"Fibonacci Expansion\"graphical object."
#property description "Anchor point coordinates are set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="FiboExpansion"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=55; // 1 st point's price, %
input int InpDate2=30; // 2 nd point's date, %
input int InpPrice2=10; // 2 nd point's price, %
input int InpDate3=80; // 3 rd point's date, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
428
input int InpPrice3=75; // 3 rd point's price, %
input color InpColor=clrRed; // Object color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of lines
input int InpWidth=2; // Width of the lines
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpRayLeft=false; // Object's continuation to the left
input bool InpRayRight=false; // Object's continuation to the right
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Fibonacci Extension by the given coordinates |
//+------------------------------------------------------------------+
bool FiboExpansionCreate(const long chart_ID=0, // chart's ID
const string name="FiboExpansion", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // object color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of the lines
const int width=1, // width of the lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_left=false, // object's continuation to the left
const bool ray_right=false, // object's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeFiboExpansionEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- Create Fibonacci Extension by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_EXPANSION,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create \"Fibonacci Extension\"! Error code = ",GetLastError());
return(false);
}
//--- set the object's color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
429
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the object's visualization to the left
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the object's visualization to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Set number of levels and their parameters |
//+------------------------------------------------------------------+
bool FiboExpansionLevelsSet(int levels, // number of level lines
double &values[], // values of level lines
color &colors[], // color of level lines
ENUM_LINE_STYLE &styles[], // style of level lines
int &widths[], // width of level lines
const long chart_ID=0, // chart's ID
const string name="FiboExpansion") // object name
{
//--- check array sizes
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": array length does not correspond to the number of levels, error!");
return(false);
}
//--- set the number of levels
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- set the properties of levels in the loop
for(int i=0;i<levels;i++)
{
//--- level value
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- level color
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- level style
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- level width
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
430
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- level description
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,"FE "+DoubleToString(100*values[i],1));
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move Fibonacci Expansion anchor point |
//+------------------------------------------------------------------+
bool FiboExpansionPointChange(const long chart_ID=0, // chart's ID
const string name="FiboExpansion", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Fibonacci Expansion |
//+------------------------------------------------------------------+
bool FiboExpansionDelete(const long chart_ID=0, // chart's ID
const string name="FiboExpansion") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Fibonacci Expansion\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
431
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Fibonacci Expansion anchor points and set |
//| default values for empty ones |
//+------------------------------------------------------------------+
void ChangeFiboExpansionEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- if the third (right) point's time is not set, it will be on the current bar
if(!time3)
time3=TimeCurrent();
//--- if the third point's price is not set, it will have Bid value
if(!price3)
price3=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the first (left) point's time is not set, it is located 9 bars left from the third one
//--- array for receiving the open time of the last 10 bars
datetime temp[];
ArrayResize(temp,10);
if(!time1)
{
CopyTime(Symbol(),Period(),time3,10,temp);
//--- set the first point 9 bars left from the second one
time1=temp[0];
}
//--- if the first point's price is not set, it is equal to the third point's one
if(!price1)
price1=price3;
//--- if the second point's time is not set, it is located 7 bars left from the third one
if(!time2)
time2=temp[2];
//--- if the second point's price is not set, move it 250 points lower than the first one
if(!price2)
price2=price1-250*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
432
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing object anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Fibonacci Expansion
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create Fibonacci Expansion
if(!FiboExpansionCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int v_steps=accuracy/10;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
433
p1-=1;
//--- move the point
if(!FiboExpansionPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy/2;
//--- move the third anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p3>1)
p3-=1;
//--- move the point
if(!FiboExpansionPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy*4/5;
//--- move the second anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p2<accuracy-1)
p2+=1;
//--- move the point
if(!FiboExpansionPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
434
Sleep(1000);
//--- delete the object from the chart
FiboExpansionDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
435
OBJ_ELLIOTWAVE5
Elliott Motive Wave.
Note
For "Elliott Motive Wave", it is possible to enable/disable the mode of connecting points by lines
(OBJPROP_DRAWLINES property), as well as set the level of wave positioning (from
ENUM_ELLIOT_WAVE_DEGREE enumeration).
Example
The following script creates and moves Elliott motive wave on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Elliott Motive Wave\"."
#property description "Anchor point coordinates are set in percentage of the size of"
#property description "the chart window."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ElliotWave5"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=90; // 1 st point's price, %
input int InpDate2=20; // 2 nd point's date, %
input int InpPrice2=40; // 2 nd point's price, %
input int InpDate3=30; // 3 rd point's date, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
436
input int InpPrice3=60; // 3 rd point's price, %
input int InpDate4=40; // 4 th point's date, %
input int InpPrice4=10; // 4 th point's price, %
input int InpDate5=60; // 5 th point's date, %
input int InpPrice5=40; // 5 th point's price, %
input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR; // Level
input bool InpDrawLines=true; // Displaying the lines
input color InpColor=clrRed; // Color of the lines
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of the lines
input int InpWidth=2; // Width of the lines
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create "Elliott Motive Wave" by the given coordinates |
//+------------------------------------------------------------------+
bool ElliotWave5Create(const long chart_ID=0, // chart's ID
const string name="ElliotWave5", // wave name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
datetime time4=0, // fourth point time
double price4=0, // fourth point price
datetime time5=0, // fifth point time
double price5=0, // fifth point price
const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE, // degree
const bool draw_lines=true, // displaying the lines
const color clr=clrRed, // object color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of the lines
const int width=1, // width of the lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeElliotWave5EmptyPoints(time1,price1,time2,price2,time3,price3,time4,price4,time5,price5);
//--- reset the error value
ResetLastError();
//--- Create "Elliott Motive Wave" by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE5,sub_window,time1,price1,time2,price2,time3,
price3,time4,price4,time5,price5))
{
Print(__FUNCTION__,
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
437
": failed to create \"Elliott Motive Wave\"! Error code = ",GetLastError());
return(false);
}
//--- set degree (wave size)
ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degree);
//--- enable (true) or disable (false) the mode of displaying the lines
ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,draw_lines);
//--- set the object's color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move anchor point of Elliott Motive Wave |
//+------------------------------------------------------------------+
bool ElliotWave5PointChange(const long chart_ID=0, // chart's ID
const string name="ElliotWave5", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
438
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Elliott Motive Wave |
//+------------------------------------------------------------------+
bool ElliotWave5Delete(const long chart_ID=0, // chart's ID
const string name="ElliotWave5") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Elliott Motive Wave\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Elliott Motive Wave's anchor points and |
//| set default values for empty ones |
//+------------------------------------------------------------------+
void ChangeElliotWave5EmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3,
datetime &time4,double &price4,
datetime &time5,double &price5)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[];
ArrayResize(temp,10);
//--- receive data
CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
//--- receive the value of one point on the current chart
double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the first point's time is not set, it will be 9 bars left from the last bar
if(!time1)
time1=temp[0];
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it will be 7 bars left from the last bar
if(!time2)
time2=temp[2];
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
439
//--- if the second point's price is not set, move it 300 points lower than the first one
if(!price2)
price2=price1-300*point;
//--- if the third point's time is not set, it will be 5 bars left from the last bar
if(!time3)
time3=temp[4];
//--- if the third point's price is not set, move it 250 points lower than the first one
if(!price3)
price3=price1-250*point;
//--- if the fourth point's time is not set, it will be 3 bars left from the last bar
if(!time4)
time4=temp[6];
//--- if the fourth point's price is not set, move it 550 points lower than the first one
if(!price4)
price4=price1-550*point;
//--- if the fifth point's time is not set, it will be on the last bar
if(!time5)
time5=temp[9];
//--- if the fifth point's price is not set, move it 450 points lower than the first one
if(!price5)
price5=price1-450*point;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100 ||
InpDate4<0 || InpDate4>100 || InpPrice4<0 || InpPrice4>100 ||
InpDate5<0 || InpDate5>100 || InpPrice5<0 || InpPrice5>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing object anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
440
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Elliott Motive Wave
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int d4=InpDate4*(bars-1)/100;
int d5=InpDate5*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
int p4=InpPrice4*(accuracy-1)/100;
int p5=InpPrice5*(accuracy-1)/100;
//--- Create Elliott Motive Wave
if(!ElliotWave5Create(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
date[d4],price[p4],date[d5],price[p5],InpDegree,InpDrawLines,InpColor,InpStyle,InpWidth,
InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int v_steps=accuracy/5;
//--- move the fifth anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p5<accuracy-1)
p5+=1;
//--- move the point
if(!ElliotWave5PointChange(0,InpName,4,date[d5],price[p5]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
441
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy/5;
//--- move the second and third anchor points
for(int i=0;i<v_steps;i++)
{
//--- use the following values
if(p2<accuracy-1)
p2+=1;
if(p3>1)
p3-=1;
//--- shift the points
if(!ElliotWave5PointChange(0,InpName,1,date[d2],price[p2]))
return;
if(!ElliotWave5PointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy*4/5;
//--- move the first and fourth anchor points
for(int i=0;i<v_steps;i++)
{
//--- use the following values
if(p1>1)
p1-=1;
if(p4<accuracy-1)
p4+=1;
//--- shift the points
if(!ElliotWave5PointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ElliotWave5PointChange(0,InpName,3,date[d4],price[p4]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
442
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
ElliotWave5Delete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
443
OBJ_ELLIOTWAVE3
Elliott Correction Wave.
Note
For "Elliott Correction Wave", it is possible to enable/disable the mode of connecting points by lines
(OBJPROP_DRAWLINES property), as well as set the level of wave positioning (from
ENUM_ELLIOT_WAVE_DEGREE enumeration).
Example
The following script creates and moves Elliott correction wave on the chart. Special functions have
been developed to create and change graphical object's properties. You can use these functions "as
is" in your own applications.
//--- description
#property description "Script draws \"Elliott Correction Wave\" graphical object."
#property description "Anchor point coordinates are set in percentage of the chart's window"
#property description "size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ElliotWave3"; // Object name
input int InpDate1=10; // 1 st point's date, %
input int InpPrice1=90; // 1 st point's price, %
input int InpDate2=30; // 2 nd point's date, %
input int InpPrice2=10; // 2 nd point's price, %
input int InpDate3=50; // 3 rd point's date, %
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
444
input int InpPrice3=40; // 3 rd point's price, %
input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR; // Level
input bool InpDrawLines=true; // Displaying the lines
input color InpColor=clrRed; // Color of the lines
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of the lines
input int InpWidth=2; // Width of the lines
input bool InpBack=false; // Background object
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create "Elliott Correction Wave" by the given coordinates |
//+------------------------------------------------------------------+
bool ElliotWave3Create(const long chart_ID=0, // chart's ID
const string name="ElliotWave3", // wave name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE, // degree
const bool draw_lines=true, // displaying the lines
const color clr=clrRed, // object color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of the lines
const int width=1, // width of the lines
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeElliotWave3EmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- Create "Elliott Correction Wave" by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE3,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create \"Elliott Correction Wave\"! Error code = ",GetLastError());
return(false);
}
//--- set degree (wave size)
ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degree);
//--- enable (true) or disable (false) the mode of displaying the lines
ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,draw_lines);
//--- set the object's color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
445
//--- set the line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move anchor point of Elliott Correction Wave |
//+------------------------------------------------------------------+
bool ElliotWave3PointChange(const long chart_ID=0, // chart's ID
const string name="ElliotWave3", // object name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Elliott Correction Wave |
//+------------------------------------------------------------------+
bool ElliotWave3Delete(const long chart_ID=0, // chart's ID
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
446
const string name="ElliotWave3") // object name
{
//--- reset the error value
ResetLastError();
//--- delete the object
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Elliott Correction Wave\"! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of Elliott Correction Wave's anchor points |
//| and set default values for empty ones |
//+------------------------------------------------------------------+
void ChangeElliotWave3EmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[];
ArrayResize(temp,10);
//--- receive data
CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
//--- receive the value of one point on the current chart
double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the first point's time is not set, it will be 9 bars left from the last bar
if(!time1)
time1=temp[0];
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it will be 5 bars left from the last bar
if(!time2)
time2=temp[4];
//--- if the second point's price is not set, move it 300 points lower than the first one
if(!price2)
price2=price1-300*point;
//--- if the third point's time is not set, it will be 1 bar left from the last bar
if(!time3)
time3=temp[8];
//--- if the third point's price is not set, move it 200 points lower than the first one
if(!price3)
price3=price1-200*point;
}
//+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
447
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing object anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing Elliott Correction Wave
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- Create Elliott Correction Wave
if(!ElliotWave3Create(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpDegree,InpDrawLines,InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
448
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor points
//--- loop counter
int v_steps=accuracy/5;
//--- move the third anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p3<accuracy-1)
p3+=1;
//--- move the point
if(!ElliotWave3PointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy*4/5;
//--- move the first and second anchor points
for(int i=0;i<v_steps;i++)
{
//--- use the following values
if(p1>1)
p1-=1;
if(p2<accuracy-1)
p2+=1;
//--- shift the points
if(!ElliotWave3PointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ElliotWave3PointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the object from the chart
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
449
ElliotWave3Delete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
450
OBJ_RECTANGLE
Rectangle.
Note
For rectangle, the mode of filling with color can be set using OBJPROP_FILL property.
Example
The following script creates and moves the rectangle on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script creates rectangle on the chart."
#property description "Anchor point coordinates are set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Rectangle"; // Rectangle name
input int InpDate1=40; // 1 st point's date, %
input int InpPrice1=40; // 1 st point's price, %
input int InpDate2=60; // 2 nd point's date, %
input int InpPrice2=60; // 2 nd point's price, %
input color InpColor=clrRed; // Rectangle color
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of rectangle lines
input int InpWidth=2; // Width of rectangle lines
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
451
input bool InpFill=true; // Filling the rectangle with color
input bool InpBack=false; // Background rectangle
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create rectangle by the given coordinates |
//+------------------------------------------------------------------+
bool RectangleCreate(const long chart_ID=0, // chart's ID
const string name="Rectangle", // rectangle name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
const color clr=clrRed, // rectangle color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of rectangle lines
const int width=1, // width of rectangle lines
const bool fill=false, // filling rectangle with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
ResetLastError();
//--- create a rectangle by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create a rectangle! Error code = ",GetLastError());
return(false);
}
//--- set rectangle color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the style of rectangle lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the rectangle lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the rectangle
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the rectangle for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
452
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the rectangle anchor point |
//+------------------------------------------------------------------+
bool RectanglePointChange(const long chart_ID=0, // chart's ID
const string name="Rectangle", // rectangle name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the rectangle |
//+------------------------------------------------------------------+
bool RectangleDelete(const long chart_ID=0, // chart's ID
const string name="Rectangle") // rectangle name
{
//--- reset the error value
ResetLastError();
//--- delete rectangle
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete rectangle! Error code = ",GetLastError());
return(false);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
453
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of rectangle's anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeRectangleEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, move it 300 points lower than the first one
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing rectangle anchor points' coordinates
datetime date[];
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
454
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the rectangle
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- create a rectangle
if(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the rectangle's anchor points
//--- loop counter
int h_steps=bars/2;
//--- move the anchor points
for(int i=0;i<h_steps;i++)
{
//--- use the following values
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- shift the points
if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
return;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
455
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int v_steps=accuracy/2;
//--- move the anchor points
for(int i=0;i<v_steps;i++)
{
//--- use the following values
if(p1<accuracy-1)
p1+=1;
if(p2>1)
p2-=1;
//--- shift the points
if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete the rectangle from the chart
RectangleDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
456
OBJ_TRIANGLE
Triangle.
Note
For triangle, the mode of filling with color can be set using OBJPROP_FILL property.
Example
The following script creates and moves the triangle on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script creates triangle on the chart."
#property description "Anchor point coordinates are set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Triangle"; // Triangle name
input int InpDate1=25; // 1 st point's date, %
input int InpPrice1=50; // 1 st point's price, %
input int InpDate2=70; // 2 nd point's date, %
input int InpPrice2=70; // 2 nd point's price, %
input int InpDate3=65; // 3 rd point's date, %
input int InpPrice3=20; // 3 rd point's price, %
input color InpColor=clrRed; // Triangle color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
457
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of triangle lines
input int InpWidth=2; // Width of triangle lines
input bool InpFill=false; // Filling triangle with color
input bool InpBack=false; // Background triangle
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create triangle by the given coordinates |
//+------------------------------------------------------------------+
bool TriangleCreate(const long chart_ID=0, // chart's ID
const string name="Triangle", // triangle name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // triangle color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of triangle lines
const int width=1, // width of triangle lines
const bool fill=false, // filling triangle with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeTriangleEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- create triangle by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_TRIANGLE,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create a triangle! Error code = ",GetLastError());
return(false);
}
//--- set triangle color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of triangle lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of triangle lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the triangle
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
458
//--- enable (true) or disable (false) the mode of highlighting the triangle for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the triangle anchor point |
//+------------------------------------------------------------------+
bool TrianglePointChange(const long chart_ID=0, // chart's ID
const string name="Triangle", // triangle name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete the triangle |
//+------------------------------------------------------------------+
bool TriangleDelete(const long chart_ID=0, // chart's ID
const string name="Triangle") // triangle name
{
//--- reset the error value
ResetLastError();
//--- delete the triangle
if(!ObjectDelete(chart_ID,name))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
459
{
Print(__FUNCTION__,
": failed to delete the ellipse! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of triangle's anchor points and set default |
//| values for empty ones |
//+------------------------------------------------------------------+
void ChangeTriangleEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, move it 300 points lower than the first one
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the third point's time is not set, it coincides with the second point's date
if(!time3)
time3=time2;
//--- if the third point's price is not set, it is equal to the first point's one
if(!price3)
price3=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
460
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing triangle anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the triangle
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create a triangle
if(!TriangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpColor,InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the ellipse anchor points
//--- loop counter
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
461
int v_steps=accuracy*3/10;
//--- move the first anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p1>1)
p1-=1;
//--- move the point
if(!TrianglePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars*9/20-1;
//--- move the second anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d2>1)
d2-=1;
//--- move the point
if(!TrianglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
v_steps=accuracy/4;
//--- move the third anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p3<accuracy-1)
p3+=1;
//--- move the point
if(!TrianglePointChange(0,InpName,2,date[d3],price[p3]))
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
462
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- delete triangle from the chart
TriangleDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
463
OBJ_ELLIPSE
Ellipse.
Note
For ellipse, the mode of filling with color can be set using OBJPROP_FILL property.
Example
The following script creates and moves the ellipse on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script creates ellipse on the chart."
#property description "Anchor point coordinates are set"
#property description "in percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="Ellipse"; // Ellipse name
input int InpDate1=30; // 1 st point's date, %
input int InpPrice1=20; // 1 st point's price, %
input int InpDate2=70; // 2 nd point's date, %
input int InpPrice2=80; // 2 nd point's price, %
input int InpDate3=50; // 3 rd point's date, %
input int InpPrice3=60; // 3 rd point's price, %
input color InpColor=clrRed; // Ellipse color
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style of ellipse lines
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
464
input int InpWidth=2; // Width of ellipse lines
input bool InpFill=false; // Filling ellipse with color
input bool InpBack=false; // Background ellipse
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create an ellipse by the given coordinates |
//+------------------------------------------------------------------+
bool EllipseCreate(const long chart_ID=0, // chart's ID
const string name="Ellipse", // ellipse name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
double price1=0, // first point price
datetime time2=0, // second point time
double price2=0, // second point price
datetime time3=0, // third point time
double price3=0, // third point price
const color clr=clrRed, // ellipse color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of ellipse lines
const int width=1, // width of ellipse lines
const bool fill=false, // filling ellipse with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeEllipseEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- reset the error value
ResetLastError();
//--- create an ellipse by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_ELLIPSE,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": failed to create an ellipse! Error code = ",GetLastError());
return(false);
}
//--- set an ellipse color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of ellipse lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of ellipse lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- enable (true) or disable (false) the mode of filling the ellipse
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the ellipse for moving
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
465
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the ellipse anchor point |
//+------------------------------------------------------------------+
bool EllipsePointChange(const long chart_ID=0, // chart's ID
const string name="Ellipse", // ellipse name
const int point_index=0, // anchor point index
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete ellipse |
//+------------------------------------------------------------------+
bool EllipseDelete(const long chart_ID=0, // chart's ID
const string name="Ellipse") // ellipse name
{
//--- reset the error value
ResetLastError();
//--- delete an ellipse
if(!ObjectDelete(chart_ID,name))
{
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
466
Print(__FUNCTION__,
": failed to delete an ellipse! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check the values of ellipse anchor points and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeEllipseEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- if the first point's time is not set, it will be on the current bar
if(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
if(!time2)
{
//--- array for receiving the open time of the last 10 bars
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, move it 300 points lower than the first one
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- if the third point's time is not set, it coincides with the second point's date
if(!time3)
time3=time2;
//--- if the third point's price is not set, it is equal to the first point's one
if(!price3)
price3=price1;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
467
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing ellipse anchor points' coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the ellipse
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int d3=InpDate3*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
int p3=InpPrice3*(accuracy-1)/100;
//--- create an ellipse
if(!EllipseCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
InpColor,InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the ellipse anchor points
//--- loop counter
int v_steps=accuracy/5;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
468
//--- move the first and second anchor points
for(int i=0;i<v_steps;i++)
{
//--- use the following values
if(p1<accuracy-1)
p1+=1;
if(p2>1)
p2-=1;
//--- shift the points
if(!EllipsePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!EllipsePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int h_steps=bars/5;
//--- move the third anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d3>1)
d3-=1;
//--- move the point
if(!EllipsePointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- delete ellipse from the chart
EllipseDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
469
OBJ_ARROW_THUMB_UP
Thumbs Up sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Thumbs Up sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Thumbs Up\" sign."
#property description "Anchor point coordinate is set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ThumbUp"; // Sign name
input int InpDate=75; // Anchor point date in %
input int InpPrice=25; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Anchor type
input color InpColor=clrRed; // Sign color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
470
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Thumbs Up sign |
//+------------------------------------------------------------------+
bool ArrowThumbUpCreate(const long chart_ID=0, // chart's ID
const string name="ThumbUp", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_UP,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Thumbs Up\" sign! Error code = ",GetLastError());
return(false);
}
//--- set anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
471
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowThumbUpMove(const long chart_ID=0, // chart's ID
const string name="ThumbUp", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Thumbs Up sign anchor type |
//+------------------------------------------------------------------+
bool ArrowThumbUpAnchorChange(const long chart_ID=0, // chart's ID
const string name="ThumbUp", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor type
{
//--- reset the error value
ResetLastError();
//--- change anchor type
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
472
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Thumbs Up sign |
//+------------------------------------------------------------------+
bool ArrowThumbUpDelete(const long chart_ID=0, // chart's ID
const string name="ThumbUp") // sign name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Thumbs Up\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
473
//--- arrays for storing the date and price values to be used
//--- for setting and changing sign anchor point coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the sign
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- create Thumbs Up sign on the chart
if(!ArrowThumbUpCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor point and change its position relative to the sign
//--- loop counter
int h_steps=bars/4;
//--- move the anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d>1)
d-=1;
//--- move the point
if(!ArrowThumbUpMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
474
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int v_steps=accuracy/4;
//--- move the anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p<accuracy-1)
p+=1;
//--- move the point
if(!ArrowThumbUpMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- change anchor point location relative to the sign
ArrowThumbUpAnchorChange(0,InpName,ANCHOR_BOTTOM);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the sign from the chart
ArrowThumbUpDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
475
OBJ_ARROW_THUMB_DOWN
Thumbs Down sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Thumbs Down sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Thumbs Down\" sign."
#property description "Anchor point coordinate is set in percentage of"
#property description "the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ThumbDown"; // Sign name
input int InpDate=25; // Anchor point date in %
input int InpPrice=75; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Anchor type
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
476
input color InpColor=clrRed; // Sign color
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=true; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Thumbs Down sign |
//+------------------------------------------------------------------+
bool ArrowThumbDownCreate(const long chart_ID=0, // chart's ID
const string name="ThumbDown", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_DOWN,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Thumbs Down\" sign! Error code = ",GetLastError());
return(false);
}
//--- set anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
477
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowThumbDownMove(const long chart_ID=0, // chart's ID
const string name="ThumbDown", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Thumbs Down sign anchor type |
//+------------------------------------------------------------------+
bool ArrowThumbDownAnchorChange(const long chart_ID=0, // chart's ID
const string name="ThumbDown", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor type
{
//--- reset the error value
ResetLastError();
//--- change anchor type
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
478
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Thumbs Down sign |
//+------------------------------------------------------------------+
bool ArrowThumbDownDelete(const long chart_ID=0, // chart's ID
const string name="ThumbDown") // sign name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Thumbs Down\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
479
int accuracy=1000;
//--- arrays for storing the date and price values to be used
//--- for setting and changing sign anchor point coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the sign
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- create Thumbs Down sign on the chart
if(!ArrowThumbDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor point and change its position relative to the sign
//--- loop counter
int h_steps=bars/4;
//--- move the anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d<bars-1)
d+=1;
//--- move the point
if(!ArrowThumbDownMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
480
return;
//--- redraw the chart
ChartRedraw();
// 0.05 seconds of delay
Sleep(50);
}
//--- 1 second of delay
Sleep(1000);
//--- loop counter
int v_steps=accuracy/4;
//--- move the anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p>1)
p-=1;
//--- move the point
if(!ArrowThumbDownMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
}
//--- change anchor point location relative to the sign
ArrowThumbDownAnchorChange(0,InpName,ANCHOR_TOP);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the sign from the chart
ArrowThumbDownDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
481
OBJ_ARROW_UP
Arrow Up sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Arrow Up sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Arrow Up\" sign."
#property description "Anchor point coordinate is set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ArrowUp"; // Sign name
input int InpDate=25; // Anchor point date in %
input int InpPrice=25; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Anchor type
input color InpColor=clrRed; // Sign color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
482
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=false; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Arrow Up sign |
//+------------------------------------------------------------------+
bool ArrowUpCreate(const long chart_ID=0, // chart's ID
const string name="ArrowUp", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_UP,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Arrow Up\" sign! Error code = ",GetLastError());
return(false);
}
//--- set anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
483
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowUpMove(const long chart_ID=0, // chart's ID
const string name="ArrowUp", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Arrow Down sign anchor type |
//+------------------------------------------------------------------+
bool ArrowUpAnchorChange(const long chart_ID=0, // chart's ID
const string name="ArrowUp", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor type
{
//--- reset the error value
ResetLastError();
//--- change anchor point location
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
484
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Arrow Up sign |
//+------------------------------------------------------------------+
bool ArrowUpDelete(const long chart_ID=0, // chart's ID
const string name="ArrowUp") // sign name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Arrow Up\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
485
//--- arrays for storing the date and price values to be used
//--- for setting and changing sign anchor point coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the sign
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- create Arrow Up sign on the chart
if(!ArrowUpCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor point and change its position relative to the sign
//--- loop counter
int v_steps=accuracy/2;
//--- move the anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p<accuracy-1)
p+=1;
//--- move the point
if(!ArrowUpMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
486
//--- redraw the chart
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- change anchor point location relative to the sign
ArrowUpAnchorChange(0,InpName,ANCHOR_BOTTOM);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the sign from the chart
ArrowUpDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
487
OBJ_ARROW_DOWN
Arrow Down sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Arrow Down sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Arrow Down\" sign."
#property description "Anchor point coordinate is set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ArrowDown"; // Sign name
input int InpDate=75; // Anchor point date in %
input int InpPrice=75; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Anchor type
input color InpColor=clrRed; // Sign color
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
488
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=false; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Arrow Down sign |
//+------------------------------------------------------------------+
bool ArrowDownCreate(const long chart_ID=0, // chart's ID
const string name="ArrowDown", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_DOWN,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Arrow Down\" sign! Error code = ",GetLastError());
return(false);
}
//--- anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
489
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowDownMove(const long chart_ID=0, // chart's ID
const string name="ArrowDown", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Arrow Down sign anchor type |
//+------------------------------------------------------------------+
bool ArrowDownAnchorChange(const long chart_ID=0, // chart's ID
const string name="ArrowDown", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor type
{
//--- reset the error value
ResetLastError();
//--- change anchor point location
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
}
//--- successful execution
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
490
return(true);
}
//+------------------------------------------------------------------+
//| Delete Arrow Down sign |
//+------------------------------------------------------------------+
bool ArrowDownDelete(const long chart_ID=0, // chart's ID
const string name="ArrowDown") // sign name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Arrow Down\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
//--- arrays for storing the date and price values to be used
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
491
//--- for setting and changing sign anchor point coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the sign
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- create Arrow Down sign on the chart
if(!ArrowDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor point and change its position relative to the sign
//--- loop counter
int v_steps=accuracy/2;
//--- move the anchor point
for(int i=0;i<v_steps;i++)
{
//--- use the following value
if(p>1)
p-=1;
//--- move the point
if(!ArrowDownMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
492
ChartRedraw();
}
//--- 1 second of delay
Sleep(1000);
//--- change anchor point location relative to the sign
ArrowDownAnchorChange(0,InpName,ANCHOR_TOP);
//--- redraw the chart
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//--- delete the sign from the chart
ArrowDownDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
493
OBJ_ARROW_STOP
Stop sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Stop sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Stop\" sign."
#property description "Anchor point coordinate is set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ArrowStop"; // Sign name
input int InpDate=10; // Anchor point date in %
input int InpPrice=50; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Anchor type
input color InpColor=clrRed; // Sign color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
494
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=false; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Stop sign |
//+------------------------------------------------------------------+
bool ArrowStopCreate(const long chart_ID=0, // chart's ID
const string name="ArrowStop", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_STOP,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Stop\" sign! Error code = ",GetLastError());
return(false);
}
//--- set anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
495
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowStopMove(const long chart_ID=0, // chart's ID
const string name="ArrowStop", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Stop sign anchor type |
//+------------------------------------------------------------------+
bool ArrowStopAnchorChange(const long chart_ID=0, // chart's ID
const string name="ArrowStop", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor point position
{
//--- reset the error value
ResetLastError();
//--- change anchor type
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
496
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Stop sign |
//+------------------------------------------------------------------+
bool ArrowStopDelete(const long chart_ID=0, // chart's ID
const string name="ArrowStop") // label name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Stop\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- check correctness of the input parameters
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Error! Incorrect values of input parameters!");
return;
}
//--- number of visible bars in the chart window
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- price array size
int accuracy=1000;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
497
//--- arrays for storing the date and price values to be used
//--- for setting and changing sign anchor point coordinates
datetime date[];
double price[];
//--- memory allocation
ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- fill the array of dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Failed to copy time values! Error code = ",GetLastError());
return;
}
//--- fill the array of prices
//--- find the highest and lowest values of the chart
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- define a change step of a price and fill the array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define points for drawing the sign
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- create Stop sign on the chart
if(!ArrowStopCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redraw the chart and wait for 1 second
ChartRedraw();
Sleep(1000);
//--- now, move the anchor point and change its position relative to the sign
//--- loop counter
int h_steps=bars*2/5;
//--- move the anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d<bars-1)
d+=1;
//--- move the point
if(!ArrowStopMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
498
//--- redraw the chart
ChartRedraw();
// 0.025 seconds of delay
Sleep(25);
}
//--- change anchor point location relative to the sign
ArrowStopAnchorChange(0,InpName,ANCHOR_TOP);
//--- redraw the chart
ChartRedraw();
//--- loop counter
h_steps=bars*2/5;
//--- move the anchor point
for(int i=0;i<h_steps;i++)
{
//--- use the following value
if(d<bars-1)
d+=1;
//--- move the point
if(!ArrowStopMove(0,InpName,date[d],price[p]))
return;
//--- check if the script's operation has been forcefully disabled
if(IsStopped())
return;
//--- redraw the chart
ChartRedraw();
// 0.025 seconds of delay
Sleep(25);
}
//--- 1 second of delay
Sleep(1000);
//--- delete the sign from the chart
ArrowStopDelete(0,InpName);
ChartRedraw();
//--- 1 second of delay
Sleep(1000);
//---
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
499
OBJ_ARROW_STOP
Check sign.
Note
Anchor point position relative to the sign can be selected from ENUM_ARROW_ANCHOR
enumeration.
Large signs (more than 5) can only be created by setting the appropriate OBJPROP_WIDTH property
value when writing a code in MetaEditor.
Example
The following script creates and moves Check sign on the chart. Special functions have been
developed to create and change graphical object's properties. You can use these functions "as is" in
your own applications.
//--- description
#property description "Script draws \"Check\" sign."
#property description "Anchor point coordinate is set in"
#property description "percentage of the chart window size."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName="ArrowCheck"; // Sign name
input int InpDate=10; // Anchor point date in %
input int InpPrice=50; // Anchor point price in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Anchor type
input color InpColor=clrRed; // Sign color
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
500
input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Border line style
input int InpWidth=5; // Sign size
input bool InpBack=false; // Background sign
input bool InpSelection=false; // Highlight to move
input bool InpHidden=true; // Hidden in the object list
input long InpZOrder=0; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Check sign |
//+------------------------------------------------------------------+
bool ArrowCheckCreate(const long chart_ID=0, // chart's ID
const string name="ArrowCheck", // sign name
const int sub_window=0, // subwindow index
datetime time=0, // anchor point time
double price=0, // anchor point price
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor type
const color clr=clrRed, // sign color
const ENUM_LINE_STYLE style=STYLE_SOLID, // border line style
const int width=3, // sign size
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor point coordinates if they are not set
ChangeArrowEmptyPoint(time,price);
//--- reset the error value
ResetLastError();
//--- create the sign
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_CHECK,sub_window,time,price))
{
Print(__FUNCTION__,
": failed to create \"Check\" sign! Error code = ",GetLastError());
return(false);
}
//--- set anchor type
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set a sign color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set the border line style
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set the sign size
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the sign by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
501
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Move the anchor point |
//+------------------------------------------------------------------+
bool ArrowCheckMove(const long chart_ID=0, // chart's ID
const string name="ArrowCheck", // object name
datetime time=0, // anchor point time coordinate
double price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid price
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
ResetLastError();
//--- move the anchor point
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Change Check anchor type |
//+------------------------------------------------------------------+
bool ArrowCheckAnchorChange(const long chart_ID=0, // chart's ID
const string name="ArrowCheck", // object name
const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // anchor type
{
//--- reset the error value
ResetLastError();
//--- change anchor type
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": failed to change anchor type! Error code = ",GetLastError());
return(false);
}
Standard Constants, Enumerations and Structures
2000-2014, MetaQuotes Software Corp.
502
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Delete Check sign |
//+------------------------------------------------------------------+
bool ArrowCheckDelete(const long chart_ID=0, // chart's ID
const string name="ArrowCheck") // sign name
{
//--- reset the error value
ResetLastError();
//--- delete the sign
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete \"Check\" sign! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
//| Check anchor point values and set default values |
//| for empty ones |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- if the point's time is not set, it will be on the current bar
if(!time)
time=TimeCurrent();
//--- if the point's price is not set, it will have Bid value
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+<