You are on page 1of 4092

Linguagem MQL5 REFERENTE

ao terminal do cliente MetaTrader 5

ESTUDAR MQL5 e
RESOLVER todas as tarefas:
seus prprios indicadores de anlise
Criar
tcnica com qualquer grau de complexidade
a automatizao - automatizar
Utilizar
sistemas de negociao para trabalhar em
vrios mercados financeiros
suas prprias ferramentas
Desenvolver
analticas baseadas em clculos matemticos
e mtodos tradicionais
methods

Desenvolver sistemas de negociao para

resolver uma grande variedade de


necessidades(trading, monitoramento, alerta,
etc)

Contedo

Content
50

Referncia MQL5
1 Elementos Bsicos
.................................................................................................
da Linguagem
52
............................................................................................................................53
Sintaxe
Comentrios
......................................................................................................................... 54
Identificadores
......................................................................................................................... 55
Palavras Reservadas
......................................................................................................................... 56
............................................................................................................................58
Tipos de Dados
Tipos Inteiros
......................................................................................................................... 59
Tipos char, short,
................................................................................................................
int e long
60
Constantes de
................................................................................................................
Caracteres
64
Tipo datetime................................................................................................................ 67
Tipo color
................................................................................................................ 68
Tipo bool
................................................................................................................ 69
Enumeradores................................................................................................................ 70
Tipos Reais
.........................................................................................................................
(double, float)
72
Tipo string......................................................................................................................... 77
Estruturas.........................................................................................................................
e Classes
78
Objeto Array
.........................................................................................................................
Dinmico
89
Converso.........................................................................................................................
de Tipo (Typecasting)
90
Tipo void e.........................................................................................................................
constante NULL
97
Ponteiros .........................................................................................................................
de Objeto
98
Referncia,
.........................................................................................................................
Modificador & e Palavra-chave this
99
Operaes............................................................................................................................101
e Expresses
Expresses
......................................................................................................................... 102
Operaes
.........................................................................................................................
Aritmticas
103
Operaes
.........................................................................................................................
de Atribuio
104
Operaes
.........................................................................................................................
de Relao
105
Operaes
.........................................................................................................................
Booleanas
106
Operaes
.........................................................................................................................
Binrias
108
Outras Operaes
......................................................................................................................... 111
Regras de
.........................................................................................................................
Precedncia
115
Operadores............................................................................................................................117
Operador.........................................................................................................................
Composto
119
Operador.........................................................................................................................
de Expresso
120
Operador.........................................................................................................................
return
121
Operador.........................................................................................................................
Condicional if-else
122
Operador.........................................................................................................................
Ternrio ?
123
Operador.........................................................................................................................
switch
125
Operador.........................................................................................................................
de loop while
127
Operador.........................................................................................................................
de loop for
128
Operador.........................................................................................................................
de loop do while
130
Operador.........................................................................................................................
break
131
Operador.........................................................................................................................
continue
132
Operador.........................................................................................................................
de Criao de Objeto new
133
Operao
.........................................................................................................................
de Excluso de Objeto delete
135
Funes ............................................................................................................................136
Chamada.........................................................................................................................
de Funo
138
Passando.........................................................................................................................
Parmetros
139
Sobrecarga
.........................................................................................................................
de Funo
142
Sobrecarga
.........................................................................................................................
de Operao
145
Descrio
.........................................................................................................................
de Funes Externas
159
Exportao
.........................................................................................................................
de Funes
161
Funes .........................................................................................................................
de Manipulao de Evento
162
2000-2014, MetaQuotes Software Corp.

Contedo
V ariveis ............................................................................................................................174
Variveis.........................................................................................................................
Locais
177
Parmetros
.........................................................................................................................
Formais
179
Variveis.........................................................................................................................
Estticas
181
Variveis.........................................................................................................................
Globais
183
Variveis.........................................................................................................................
de Entrada
184
Variveis.........................................................................................................................
Externas
188
Inicializao
.........................................................................................................................
de Variveis
189
Visibilidade
.........................................................................................................................
Escopo e Tempo de Vida de Variveis
191
Criao e.........................................................................................................................
Excluso de Objetos
193
............................................................................................................................196
Preprocessador
Substituio
.........................................................................................................................
de Macro (#define)
197
Propriedades
.........................................................................................................................
de Programa (#property)
199
Incluindo.........................................................................................................................
Arquivos (#include)
204
Importando
.........................................................................................................................
Funes (#import)
205
Conditional
.........................................................................................................................
Compilation (#ifdef, #ifndef, #else, #endif)
207
............................................................................................................................209
Programao
Orientada a Objetos
Encapsulamento
.........................................................................................................................
e Extensibilidade de Tipo
211
Herana ......................................................................................................................... 214
Polimorfismo
......................................................................................................................... 219
Sobrecarga
.........................................................................................................................
(Overload)
223
Funes .........................................................................................................................
Virtuais
224
Membros.........................................................................................................................
Estticos de uma Classe
227
Templates
.........................................................................................................................
de Funo
231

Constantes Padro,
.................................................................................................
Enumeradores e Estruturas
235
Constantes............................................................................................................................236
de Grfico
Tipos de .........................................................................................................................
Eventos de Grficos
237
Janela temporal
.........................................................................................................................
de Grfico
242
Propriedades
.........................................................................................................................
de Grfico
244
Constantes
.........................................................................................................................
de Posicionamento
250
Representao
.........................................................................................................................
de Grfico
251
Exemplos.........................................................................................................................
de como trabalhar com um grfico
253
Constantes............................................................................................................................310
de Objetos
Tipos de .........................................................................................................................
Objeto
311
OBJ_VLINE ................................................................................................................ 313
OBJ_HLINE ................................................................................................................ 318
OBJ_TREND ................................................................................................................ 323
OBJ_TRENDBYANGLE
................................................................................................................ 330
OBJ_CYCLES................................................................................................................ 336
OBJ_ARROWED_LINE
................................................................................................................ 342
OBJ_CHANNEL
................................................................................................................ 348
OBJ_STDDEVCHANNEL
................................................................................................................ 355
OBJ_REGRESSION
................................................................................................................ 362
OBJ_PITCHFORK
................................................................................................................ 368
OBJ_GANNLINE
................................................................................................................ 376
OBJ_GANNFAN
................................................................................................................ 383
OBJ_GANNGRID
................................................................................................................ 390
OBJ_FIBO ................................................................................................................ 397
OBJ_FIBOTIMES
................................................................................................................ 404
OBJ_FIBOFAN
................................................................................................................ 411
OBJ_FIBOARC
................................................................................................................ 418
OBJ_FIBOCHANNEL
................................................................................................................ 425
OBJ_EXPANSION
................................................................................................................ 433
OBJ_ELLIOTWAVE5
................................................................................................................ 441
OBJ_ELLIOTWAVE3
................................................................................................................ 449
OBJ_RECTANGLE
................................................................................................................ 456
OBJ_TRIANGLE
................................................................................................................ 462
OBJ_ELLIPSE................................................................................................................ 469
2000-2014, MetaQuotes Software Corp.

Contedo
OBJ_ARROW_THUMB_UP
................................................................................................................ 476
OBJ_ARROW_THUMB_DOWN
................................................................................................................ 482
OBJ_ARROW_UP
................................................................................................................ 488
OBJ_ARROW_DOWN
................................................................................................................ 494
OBJ_ARROW_STOP
................................................................................................................ 500
OBJ_ARROW_CHECK
................................................................................................................ 506
OBJ_ARROW_LEFT_PRICE
................................................................................................................ 512
OBJ_ARROW_RIGHT_PRICE
................................................................................................................ 517
OBJ_ARROW_BUY
................................................................................................................ 522
OBJ_ARROW_SELL
................................................................................................................ 527
OBJ_ARROW................................................................................................................ 532
OBJ_TEXT ................................................................................................................ 538
OBJ_LABEL ................................................................................................................ 544
OBJ_BUTTON
................................................................................................................ 552
OBJ_CHART ................................................................................................................ 559
OBJ_BITMAP................................................................................................................ 566
OBJ_BITMAP_LABEL
................................................................................................................ 573
OBJ_EDIT ................................................................................................................ 580
OBJ_EVENT ................................................................................................................ 587
OBJ_RECTANGLE_LABEL
................................................................................................................ 592
Propriedades
.........................................................................................................................
do Objeto
598
Mtodos .........................................................................................................................
de Vinculao de Objeto
605
Canto de.........................................................................................................................
Grfico
609
Visibilidade
.........................................................................................................................
de Objetos
611
Nveis de.........................................................................................................................
Onda de Elliott
614
Objetos .........................................................................................................................
Gann
615
Cores Web
......................................................................................................................... 617
Wingdings
......................................................................................................................... 619
Constantes............................................................................................................................620
de Indicador
Constantes
.........................................................................................................................
de Preo
621
Mtodos .........................................................................................................................
de Suavizao
624
Linhas de.........................................................................................................................
Indicadores
625
Estilos de.........................................................................................................................
Desenho
627
Propriedades
.........................................................................................................................
de Indicador Customizado
631
Tipos de .........................................................................................................................
Indicador
634
Identificadores
.........................................................................................................................
de Tipo de Dados
636
............................................................................................................................637
Estado de Ambiente
Propriedades
.........................................................................................................................
do Terminal Cliente
638
Propriedades
.........................................................................................................................
de um Programa MQL5 em Execuo
641
Propriedades
.........................................................................................................................
do Ativo
644
Propriedades
.........................................................................................................................
da Conta
656
Estatsticas
.........................................................................................................................
de Teste
659
Constantes............................................................................................................................663
de Negociao (Trade)
Propriedades
.........................................................................................................................
de uma Base Histrica de Dados
664
Propriedades
.........................................................................................................................
de uma Ordem
665
Propriedades
.........................................................................................................................
de uma Posio
669
Propriedades
.........................................................................................................................
de uma Operao (Deal)
671
Tipos de .........................................................................................................................
Operaes de Negociao (Trade)
674
Tipos de .........................................................................................................................
Transao de Negociao
675
Ordens de
.........................................................................................................................
Negociao em DOM (Profundidade de Mercado)
678
Constantes............................................................................................................................679
Nomeados
Substituies
.........................................................................................................................
de Macro Predefinidas
680
Constantes
.........................................................................................................................
Matemticas
682
Constantes
.........................................................................................................................
de Tipo Numrico
684
Cdigos de
.........................................................................................................................
Motivos de Desinicializao
687
Verificao
.........................................................................................................................
de Ponteiro de Objeto
689
Outras Constantes
......................................................................................................................... 690
............................................................................................................................694
Estruturas de
Dados
2000-2014, MetaQuotes Software Corp.

Contedo
Estrutura
.........................................................................................................................
do Tipo Data
695
Estrutura
.........................................................................................................................
de Parmetros de Entrada
696
Estrutura
.........................................................................................................................
de Dados Histricos
697
Estrutura
.........................................................................................................................
DOM
698
Estrutura
.........................................................................................................................
de Solicitao de Negociao (Trade)
699
Estrutura
.........................................................................................................................
de Resultados de Verificao de Solicitao
703
Estrutura
.........................................................................................................................
de Resultado de Solicitao de uma Negociao (Trade)
704
Estrutura
.........................................................................................................................
de uma Transao de Negociao
708
Estrutura
.........................................................................................................................
para Preos Correntes
716
Cdigos de ............................................................................................................................717
Erros e Avisos
Cdigos de
.........................................................................................................................
Retorno do Servidor de Negociao
718
Avisos do.........................................................................................................................
Compilador
720
Erros de .........................................................................................................................
Compilao
723
Erros em.........................................................................................................................
Tempo de Execuo
734
Constantes............................................................................................................................743
de Entrada/Sada
Flags de .........................................................................................................................
Abertura de Arquivo
744
Propriedades
.........................................................................................................................
de Arquivo
747
Posio In-File
......................................................................................................................... 749
Uso de um
.........................................................................................................................
Cdigo de Pgina (Codepage)
750
MessageBox
......................................................................................................................... 751

Programas MQL5
................................................................................................. 753
............................................................................................................................754
Execuo de
Programa
Eventos do ............................................................................................................................761
Terminal Cliente
Recursos ............................................................................................................................764
............................................................................................................................773
Chamadas de
Funes Importadas
............................................................................................................................775
Erros em Tempo
de Execuo
............................................................................................................................776
Testando Estratgias
de Negociao

Variveis Predefinidas
................................................................................................. 801
............................................................................................................................802
_Digits
............................................................................................................................803
_Point
_LastError ............................................................................................................................804
............................................................................................................................805
_Period
............................................................................................................................806
_RandomSeed
_StopFlag ............................................................................................................................807
_Sy mbol ............................................................................................................................808
............................................................................................................................809
_UninitReason

Funes Comuns
................................................................................................. 810
............................................................................................................................812
Alert
............................................................................................................................813
CheckPointer
Comment ............................................................................................................................815
............................................................................................................................816
DebugBreak
............................................................................................................................817
ExpertRemove
GetPointer ............................................................................................................................819
............................................................................................................................823
GetTickCount
MessageBox............................................................................................................................824
............................................................................................................................825
PeriodSeconds
Play Sound ............................................................................................................................826
............................................................................................................................827
Print
PrintFormat............................................................................................................................829
............................................................................................................................835
ResetLastError
............................................................................................................................836
ResourceCreate
............................................................................................................................838
ResourceFree
............................................................................................................................839
ResourceReadImage
............................................................................................................................840
ResourceSave
............................................................................................................................841
SetUserError
SendFTP ............................................................................................................................842
............................................................................................................................843
SendNotification
2000-2014, MetaQuotes Software Corp.

Contedo
SendMail ............................................................................................................................844
............................................................................................................................845
Sleep
............................................................................................................................846
TerminalClose
............................................................................................................................848
TesterStatistics
............................................................................................................................849
TesterW ithdraw
al
............................................................................................................................850
ZeroMemory

Funes para .................................................................................................


Array
851
............................................................................................................................852
Array Bsearch
Array Copy ............................................................................................................................856
............................................................................................................................861
Array Compare
Array Free ............................................................................................................................862
............................................................................................................................871
Array GetAsSeries
............................................................................................................................874
Array Initialize
Array Fill ............................................................................................................................875
............................................................................................................................877
Array IsDy namic
............................................................................................................................879
Array IsSeries
............................................................................................................................881
Array Maximum
............................................................................................................................892
Array Minimum
Array Range............................................................................................................................903
............................................................................................................................904
Array Resize
............................................................................................................................907
Array SetAsSeries
Array Size ............................................................................................................................910
Array Sort ............................................................................................................................912

Funes de Converso
................................................................................................. 917
............................................................................................................................919
CharToString
............................................................................................................................920
CharArray ToString
............................................................................................................................921
ColorToARGB
............................................................................................................................923
ColorToString
............................................................................................................................924
DoubleToString
............................................................................................................................925
EnumToString
............................................................................................................................927
IntegerToString
............................................................................................................................928
ShortToString
ShortArray............................................................................................................................929
ToString
............................................................................................................................930
TimeToString
............................................................................................................................931
NormalizeDouble
............................................................................................................................933
StringToCharArray
............................................................................................................................934
StringToColor
............................................................................................................................935
StringToDouble
............................................................................................................................936
StringToInteger
............................................................................................................................937
StringToShortArray
............................................................................................................................938
StringToTime
............................................................................................................................939
StringFormat

Funes Matemticas
................................................................................................. 940
MathAbs ............................................................................................................................941
MathArccos............................................................................................................................942
MathArcsin............................................................................................................................943
MathArctan............................................................................................................................944
MathCeil ............................................................................................................................945
MathCos ............................................................................................................................946
MathExp ............................................................................................................................947
MathFloor ............................................................................................................................948
MathLog ............................................................................................................................949
MathLog10 ............................................................................................................................950
MathMax ............................................................................................................................951
MathMin ............................................................................................................................952
MathMod ............................................................................................................................953
MathPow ............................................................................................................................954
2000-2014, MetaQuotes Software Corp.

Contedo
MathRand ............................................................................................................................955
MathRound............................................................................................................................956
............................................................................................................................957
MathSin
MathSqrt ............................................................................................................................958
MathSrand ............................................................................................................................959
MathTan ............................................................................................................................962
............................................................................................................................963
MathIsV alidNumber

Funes de String
................................................................................................. 964
StringAdd ............................................................................................................................965
............................................................................................................................967
StringBufferLen
............................................................................................................................968
StringCompare
............................................................................................................................970
StringConcatenate
StringFill ............................................................................................................................971
StringFind ............................................................................................................................972
............................................................................................................................973
StringGetCharacter
StringInit ............................................................................................................................974
StringLen ............................................................................................................................975
............................................................................................................................976
StringReplace
............................................................................................................................977
StringSetCharacter
StringSplit ............................................................................................................................979
............................................................................................................................981
StringSubstr
............................................................................................................................982
StringToLow
er
............................................................................................................................983
StringToUpper
............................................................................................................................984
StringTrimLeft
............................................................................................................................985
StringTrimRight

10

Data e Hora

................................................................................................. 986

............................................................................................................................987
TimeCurrent
............................................................................................................................988
TimeTradeServer
TimeLocal ............................................................................................................................989
TimeGMT ............................................................................................................................990
............................................................................................................................991
TimeDay lightSavings
............................................................................................................................992
TimeGMTOffset
............................................................................................................................993
TimeToStruct
............................................................................................................................994
StructToTime

11 Informaes de
.................................................................................................
Conta
995
............................................................................................................................996
AccountInfoDouble
............................................................................................................................997
AccountInfoInteger
............................................................................................................................999
AccountInfoString

12

Verificando Estado
................................................................................................. 1000
............................................................................................................................1001
GetLastError
IsStopped............................................................................................................................1002
............................................................................................................................1003
UninitializeReason
............................................................................................................................1004
TerminalInfoInteger
............................................................................................................................1005
TerminalInfoString
............................................................................................................................1006
MQLInfoInteger
............................................................................................................................1007
MQLInfoString
Sy mbol ............................................................................................................................1008
............................................................................................................................1009
Period
............................................................................................................................1010
Digits
............................................................................................................................1011
Point

13

Informaes .................................................................................................
de Mercado
1012
............................................................................................................................1013
Sy mbolsTotal
............................................................................................................................1014
Sy mbolName
............................................................................................................................1015
Sy mbolSelect
............................................................................................................................1016
Sy mbolIsSy
nchronized
............................................................................................................................1017
Sy mbolInfoDouble

2000-2014, MetaQuotes Software Corp.

Contedo
............................................................................................................................1019
Sy mbolInfoInteger
............................................................................................................................1021
Sy mbolInfoString
............................................................................................................................1022
Sy mbolInfoTick
............................................................................................................................1023
Sy mbolInfoSessionQuote
............................................................................................................................1024
Sy mbolInfoSessionTrade
............................................................................................................................1025
MarketBookAdd
............................................................................................................................1026
MarketBookRelease
............................................................................................................................1027
MarketBookGet

14

Sries Temporais
.................................................................................................
e Acesso a Indicadores
1028
............................................................................................................................1032
Direo de
Indexao em Array s, Buffers e Sries Temporais
............................................................................................................................1036
Organizando
Acesso aos Dados
............................................................................................................................1046
SeriesInfoInteger
............................................................................................................................1048
Bars
............................................................................................................................1050
BarsCalculated
............................................................................................................................1052
IndicatorCreate
............................................................................................................................1054
IndicatorParameters
............................................................................................................................1056
IndicatorRelease
............................................................................................................................1058
Copy Buffer
Copy Rates............................................................................................................................1063
Copy Time............................................................................................................................1067
Copy Open............................................................................................................................1070
Copy High ............................................................................................................................1073
Copy Low ............................................................................................................................1077
Copy Close............................................................................................................................1080
............................................................................................................................1083
Copy TickV
olume
Copy RealV............................................................................................................................1087
olume
............................................................................................................................1090
Copy Spread

15

Operaes de.................................................................................................
Grficos
1094
............................................................................................................................1097
ChartApply
Template
............................................................................................................................1100
ChartSaveTemplate
............................................................................................................................1105
ChartW indow
Find
............................................................................................................................1107
ChartTimePriceToX
Y
............................................................................................................................1108
ChartX Y ToTimePrice
ChartOpen............................................................................................................................1111
ChartFirst ............................................................................................................................1112
ChartNext............................................................................................................................1113
ChartClose............................................................................................................................1114
............................................................................................................................1115
ChartSy mbol
............................................................................................................................1116
ChartPeriod
............................................................................................................................1117
ChartRedraw
............................................................................................................................1118
ChartSetDouble
............................................................................................................................1119
ChartSetInteger
............................................................................................................................1120
ChartSetString
............................................................................................................................1121
ChartGetDouble
............................................................................................................................1123
ChartGetInteger
............................................................................................................................1125
ChartGetString
............................................................................................................................1127
ChartNavigate
ChartID ............................................................................................................................1130
............................................................................................................................1131
ChartIndicatorAdd
............................................................................................................................1135
ChartIndicatorDelete
............................................................................................................................1138
ChartIndicatorGet
............................................................................................................................1140
ChartIndicatorName
............................................................................................................................1141
ChartIndicatorsTotal
............................................................................................................................1142
ChartW indow
OnDropped
............................................................................................................................1143
ChartPriceOnDropped
............................................................................................................................1144
ChartTimeOnDropped
............................................................................................................................1145
ChartX OnDropped
............................................................................................................................1146
ChartY OnDropped
2000-2014, MetaQuotes Software Corp.

Contedo
ChartSetSy............................................................................................................................1147
mbolPeriod
............................................................................................................................1148
ChartScreenShot

16

Funes de Negociao
.................................................................................................
(Trade)
1151
............................................................................................................................1153
OrderCalcMargin
............................................................................................................................1154
OrderCalcProfit
............................................................................................................................1155
OrderCheck
............................................................................................................................1156
OrderSend
............................................................................................................................1161
OrderSendAsy
nc
............................................................................................................................1172
PositionsTotal
............................................................................................................................1173
PositionGetSy
mbol
............................................................................................................................1174
PositionSelect
............................................................................................................................1175
PositionGetDouble
............................................................................................................................1176
PositionGetInteger
............................................................................................................................1178
PositionGetString
............................................................................................................................1179
OrdersTotal
............................................................................................................................1180
OrderGetTicket
............................................................................................................................1182
OrderSelect
............................................................................................................................1183
OrderGetDouble
............................................................................................................................1184
OrderGetInteger
............................................................................................................................1185
OrderGetString
............................................................................................................................1186
History Select
............................................................................................................................1188
History SelectBy
Position
............................................................................................................................1189
History OrderSelect
............................................................................................................................1190
History OrdersTotal
............................................................................................................................1191
History OrderGetTicket
............................................................................................................................1193
History OrderGetDouble
............................................................................................................................1194
History OrderGetInteger
............................................................................................................................1197
History OrderGetString
............................................................................................................................1198
History DealSelect
............................................................................................................................1199
History DealsTotal
............................................................................................................................1200
History DealGetTicket
............................................................................................................................1202
History DealGetDouble
............................................................................................................................1203
History DealGetInteger
............................................................................................................................1206
History DealGetString

17

Variveis Globais
.................................................................................................
do Terminal
1207
............................................................................................................................1208
GlobalV ariableCheck
............................................................................................................................1209
GlobalV ariableTime
............................................................................................................................1210
GlobalV ariableDel
............................................................................................................................1211
GlobalV ariableGet
............................................................................................................................1212
GlobalV ariableName
............................................................................................................................1213
GlobalV ariableSet
............................................................................................................................1214
GlobalV ariablesFlush
............................................................................................................................1215
GlobalV ariableTemp
............................................................................................................................1216
GlobalV ariableSetOnCondition
............................................................................................................................1217
GlobalV ariablesDeleteAll
............................................................................................................................1218
GlobalV ariablesTotal

18

Funes de Arquivo
................................................................................................. 1219
............................................................................................................................1222
FileFindFirst
............................................................................................................................1224
FileFindNext
............................................................................................................................1226
FileFindClose
FileIsExist ............................................................................................................................1228
FileOpen ............................................................................................................................1231
FileClose ............................................................................................................................1234
FileCopy ............................................................................................................................1235
FileDelete............................................................................................................................1238
FileMove ............................................................................................................................1240
FileFlush ............................................................................................................................1242
2000-2014, MetaQuotes Software Corp.

10

Contedo
............................................................................................................................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
FileSeek ............................................................................................................................1286
FileSize ............................................................................................................................1289
FileTell ............................................................................................................................1291
FileW rite ............................................................................................................................1294
............................................................................................................................1297
FileW riteArray
............................................................................................................................1300
FileW riteDouble
............................................................................................................................1303
FileW riteFloat
............................................................................................................................1305
FileW riteInteger
............................................................................................................................1308
FileW riteLong
............................................................................................................................1310
FileW riteString
............................................................................................................................1313
FileW riteStruct
............................................................................................................................1316
FolderCreate
............................................................................................................................1319
FolderDelete
............................................................................................................................1322
FolderClean

19

Indicadores Customizados
................................................................................................. 1325
Estilos de ............................................................................................................................1329
Indicador em Exemplos
DRAW_NONE
......................................................................................................................... 1337
DRAW_LINE
......................................................................................................................... 1340
DRAW_SECTION
......................................................................................................................... 1344
DRAW_HISTOGRAM
......................................................................................................................... 1348
DRAW_HISTOGRAM2
......................................................................................................................... 1352
DRAW_ARROW
......................................................................................................................... 1356
DRAW_ZIGZAG
......................................................................................................................... 1361
DRAW_FILLING
......................................................................................................................... 1366
DRAW_BARS
......................................................................................................................... 1371
DRAW_CANDLES
......................................................................................................................... 1377
DRAW_COLOR_LINE
......................................................................................................................... 1383
DRAW_COLOR_SECTION
......................................................................................................................... 1388
DRAW_COLOR_HISTOGRAM
......................................................................................................................... 1394
DRAW_COLOR_HISTOGRAM2
......................................................................................................................... 1399
DRAW_COLOR_ARROW
......................................................................................................................... 1404
DRAW_COLOR_ZIGZAG
......................................................................................................................... 1410
DRAW_COLOR_BARS
......................................................................................................................... 1415
DRAW_COLOR_CANDLES
......................................................................................................................... 1422
............................................................................................................................1429
Conexo entre
Propriedades do Indicador e Funes
............................................................................................................................1432
SetIndexBuffer
............................................................................................................................1435
IndicatorSetDouble
............................................................................................................................1439
IndicatorSetInteger
............................................................................................................................1443
IndicatorSetString
............................................................................................................................1446
PlotIndexSetDouble
............................................................................................................................1447
PlotIndexSetInteger
............................................................................................................................1451
PlotIndexSetString
............................................................................................................................1452
PlotIndexGetInteger

20

Funes de Objeto
................................................................................................. 1455
............................................................................................................................1457
ObjectCreate
2000-2014, MetaQuotes Software Corp.

11

Contedo
............................................................................................................................1461
ObjectName
............................................................................................................................1462
ObjectDelete
............................................................................................................................1463
ObjectsDeleteAll
............................................................................................................................1464
ObjectFind
............................................................................................................................1465
ObjectGetTimeBy
V alue
............................................................................................................................1466
ObjectGetV
alueBy Time
............................................................................................................................1467
ObjectMove
............................................................................................................................1468
ObjectsTotal
............................................................................................................................1469
ObjectSetDouble
............................................................................................................................1472
ObjectSetInteger
............................................................................................................................1475
ObjectSetString
............................................................................................................................1477
ObjectGetDouble
............................................................................................................................1478
ObjectGetInteger
............................................................................................................................1479
ObjectGetString
............................................................................................................................1481
TextSetFont
TextOut ............................................................................................................................1484
............................................................................................................................1488
TextGetSize

21 Indicadores Tcnicos
................................................................................................. 1489
............................................................................................................................1492
iAC
............................................................................................................................1497
iAD
............................................................................................................................1502
iADX
............................................................................................................................1507
iADX W ilder
iAlligator ............................................................................................................................1512
............................................................................................................................1519
iAMA
............................................................................................................................1524
iAO
............................................................................................................................1529
iATR
iBearsPow............................................................................................................................1534
er
............................................................................................................................1539
iBands
............................................................................................................................1545
iBullsPow er
............................................................................................................................1550
iCCI
iChaikin ............................................................................................................................1555
iCustom ............................................................................................................................1560
............................................................................................................................1563
iDEMA
iDeMarker............................................................................................................................1568
iEnvelopes............................................................................................................................1573
............................................................................................................................1579
iForce
iFractals ............................................................................................................................1584
iFrAMA ............................................................................................................................1589
............................................................................................................................1594
iGator
iIchimoku............................................................................................................................1601
iBW MFI ............................................................................................................................1608
............................................................................................................................1613
iMomentum
............................................................................................................................1618
iMFI
............................................................................................................................1623
iMA
............................................................................................................................1628
iOsMA
............................................................................................................................1633
iMACD
............................................................................................................................1639
iOBV
............................................................................................................................1644
iSAR
............................................................................................................................1649
iRSI
............................................................................................................................1654
iRV I
iStdDev ............................................................................................................................1659
iStochastic............................................................................................................................1664
............................................................................................................................1670
iTEMA
............................................................................................................................1675
iTriX
............................................................................................................................1680
iW PR
............................................................................................................................1685
iV IDy A
iV olumes ............................................................................................................................1690

22

Trabalhando.................................................................................................
com Resultados de Otimizao
1695
2000-2014, MetaQuotes Software Corp.

12

Contedo
FrameFirst............................................................................................................................1696
............................................................................................................................1697
FrameFilter
............................................................................................................................1698
FrameNext
............................................................................................................................1699
FrameInputs
FrameAdd............................................................................................................................1700
............................................................................................................................1701
ParameterGetRange
............................................................................................................................1704
ParameterSetRange

23

Trabalhando.................................................................................................
com Eventos
1706
............................................................................................................................1707
EventSetMillisecondTimer
............................................................................................................................1708
EventSetTimer
............................................................................................................................1709
EventKillTimer
............................................................................................................................1710
EventChartCustom

24

Trabalhando.................................................................................................
com OpenCL
1716
............................................................................................................................1717
CLHandleTy
pe
............................................................................................................................1718
CLGetInfoInteger
............................................................................................................................1720
CLGetInfoString
............................................................................................................................1723
CLContextCreate
............................................................................................................................1724
CLContextFree
............................................................................................................................1725
CLGetDeviceInfo
............................................................................................................................1729
CLProgramCreate
............................................................................................................................1730
CLProgramFree
............................................................................................................................1731
CLKernelCreate
............................................................................................................................1732
CLKernelFree
............................................................................................................................1733
CLSetKernelArg
............................................................................................................................1734
CLSetKernelArgMem
............................................................................................................................1735
CLBufferCreate
............................................................................................................................1736
CLBufferFree
CLBufferW............................................................................................................................1737
rite
............................................................................................................................1738
CLBufferRead
CLExecute............................................................................................................................1739

25

Standard Library
................................................................................................. 1741
Basic Class............................................................................................................................1742
CObject
Prev ......................................................................................................................... 1743
Prev ......................................................................................................................... 1744
Next ......................................................................................................................... 1745
Next ......................................................................................................................... 1746
Compare
......................................................................................................................... 1747
Save ......................................................................................................................... 1749
Load ......................................................................................................................... 1751
Type ......................................................................................................................... 1753
Classes of ............................................................................................................................1754
data
CArray ......................................................................................................................... 1755
Step
................................................................................................................ 1757
Step
................................................................................................................ 1758
Total
................................................................................................................ 1759
Available ................................................................................................................ 1760
Max
................................................................................................................ 1761
IsSorted ................................................................................................................ 1762
SortMode ................................................................................................................ 1763
Clear
................................................................................................................ 1764
Sort
................................................................................................................ 1765
Save
................................................................................................................ 1766
Load
................................................................................................................ 1767
CArrayChar
......................................................................................................................... 1768
Reserve ................................................................................................................ 1770
Resize
................................................................................................................ 1771
Shutdown ................................................................................................................ 1772
2000-2014, MetaQuotes Software Corp.

13

Contedo
Add
................................................................................................................ 1773
AddArray ................................................................................................................ 1774
AddArray ................................................................................................................ 1775
Insert
................................................................................................................ 1777
InsertArray................................................................................................................ 1778
InsertArray................................................................................................................ 1779
AssignArray................................................................................................................ 1781
AssignArray................................................................................................................ 1782
Update
................................................................................................................ 1784
Shift
................................................................................................................ 1785
Delete
................................................................................................................ 1786
DeleteRange
................................................................................................................ 1787
At
................................................................................................................ 1788
CompareArray
................................................................................................................ 1790
CompareArray
................................................................................................................ 1791
InsertSort ................................................................................................................ 1792
Search
................................................................................................................ 1793
SearchGreat
................................................................................................................ 1794
SearchLess................................................................................................................ 1795
SearchGreatOrEqual
................................................................................................................ 1796
SearchLessOrEqual
................................................................................................................ 1797
SearchFirst................................................................................................................ 1798
SearchLast................................................................................................................ 1799
SearchLinear
................................................................................................................ 1800
Save
................................................................................................................ 1801
Load
................................................................................................................ 1802
Type
................................................................................................................ 1804
CArrayShort
......................................................................................................................... 1805
Reserve ................................................................................................................ 1807
Resize
................................................................................................................ 1808
Shutdown ................................................................................................................ 1809
Add
................................................................................................................ 1810
AddArray ................................................................................................................ 1811
AddArray ................................................................................................................ 1812
Insert
................................................................................................................ 1814
InsertArray................................................................................................................ 1815
InsertArray................................................................................................................ 1816
AssignArray................................................................................................................ 1818
AssignArray................................................................................................................ 1819
Update
................................................................................................................ 1821
Shift
................................................................................................................ 1822
Delete
................................................................................................................ 1823
DeleteRange
................................................................................................................ 1824
At
................................................................................................................ 1825
CompareArray
................................................................................................................ 1827
CompareArray
................................................................................................................ 1828
InsertSort ................................................................................................................ 1829
Search
................................................................................................................ 1830
SearchGreat
................................................................................................................ 1831
SearchLess................................................................................................................ 1832
SearchGreatOrEqual
................................................................................................................ 1833
SearchLessOrEqual
................................................................................................................ 1834
SearchFirst................................................................................................................ 1835
SearchLast................................................................................................................ 1836
SearchLinear
................................................................................................................ 1837
Save
................................................................................................................ 1838
Load
................................................................................................................ 1840
Type
................................................................................................................ 1842
2000-2014, MetaQuotes Software Corp.

14

Contedo
CArrayInt
......................................................................................................................... 1843
Reserve ................................................................................................................ 1845
Resize
................................................................................................................ 1846
Shutdown ................................................................................................................ 1847
Add
................................................................................................................ 1848
AddArray ................................................................................................................ 1849
AddArray ................................................................................................................ 1850
Insert
................................................................................................................ 1852
InsertArray................................................................................................................ 1853
InsertArray................................................................................................................ 1854
AssignArray................................................................................................................ 1856
AssignArray................................................................................................................ 1857
Update
................................................................................................................ 1859
Shift
................................................................................................................ 1860
Delete
................................................................................................................ 1861
DeleteRange
................................................................................................................ 1862
At
................................................................................................................ 1863
CompareArray
................................................................................................................ 1865
CompareArray
................................................................................................................ 1866
InsertSort ................................................................................................................ 1867
Search
................................................................................................................ 1868
SearchGreat
................................................................................................................ 1869
SearchLess................................................................................................................ 1870
SearchGreatOrEqual
................................................................................................................ 1871
SearchLessOrEqual
................................................................................................................ 1872
SearchFirst................................................................................................................ 1873
SearchLast................................................................................................................ 1874
SearchLinear
................................................................................................................ 1875
Save
................................................................................................................ 1876
Load
................................................................................................................ 1878
Type
................................................................................................................ 1880
CArrayLong
......................................................................................................................... 1881
Reserve ................................................................................................................ 1883
Resize
................................................................................................................ 1884
Shutdown ................................................................................................................ 1885
Add
................................................................................................................ 1886
AddArray ................................................................................................................ 1887
AddArray ................................................................................................................ 1888
Insert
................................................................................................................ 1890
InsertArray................................................................................................................ 1891
InsertArray................................................................................................................ 1892
AssignArray................................................................................................................ 1894
AssignArray................................................................................................................ 1895
Update
................................................................................................................ 1897
Shift
................................................................................................................ 1898
Delete
................................................................................................................ 1899
DeleteRange
................................................................................................................ 1900
At
................................................................................................................ 1901
CompareArray
................................................................................................................ 1903
CompareArray
................................................................................................................ 1904
InsertSort ................................................................................................................ 1905
Search
................................................................................................................ 1906
SearchGreat
................................................................................................................ 1907
SearchLess................................................................................................................ 1908
SearchGreatOrEqual
................................................................................................................ 1909
SearchLessOrEqual
................................................................................................................ 1910
SearchFirst................................................................................................................ 1911
SearchLast................................................................................................................ 1912
2000-2014, MetaQuotes Software Corp.

15

Contedo
SearchLinear
................................................................................................................ 1913
Save
................................................................................................................ 1914
Load
................................................................................................................ 1916
Type
................................................................................................................ 1918
CArrayFloat
......................................................................................................................... 1919
Delta
................................................................................................................ 1921
Reserve ................................................................................................................ 1922
Resize
................................................................................................................ 1923
Shutdown ................................................................................................................ 1924
Add
................................................................................................................ 1925
AddArray ................................................................................................................ 1926
AddArray ................................................................................................................ 1927
Insert
................................................................................................................ 1929
InsertArray................................................................................................................ 1930
InsertArray................................................................................................................ 1931
AssignArray................................................................................................................ 1933
AssignArray................................................................................................................ 1934
Update
................................................................................................................ 1936
Shift
................................................................................................................ 1937
Delete
................................................................................................................ 1938
DeleteRange
................................................................................................................ 1939
At
................................................................................................................ 1940
CompareArray
................................................................................................................ 1942
CompareArray
................................................................................................................ 1943
InsertSort ................................................................................................................ 1944
Search
................................................................................................................ 1945
SearchGreat
................................................................................................................ 1946
SearchLess................................................................................................................ 1947
SearchGreatOrEqual
................................................................................................................ 1948
SearchLessOrEqual
................................................................................................................ 1949
SearchFirst................................................................................................................ 1950
SearchLast................................................................................................................ 1951
SearchLinear
................................................................................................................ 1952
Save
................................................................................................................ 1953
Load
................................................................................................................ 1955
Type
................................................................................................................ 1957
CArrayDouble
......................................................................................................................... 1958
Delta
................................................................................................................ 1961
Reserve ................................................................................................................ 1962
Resize
................................................................................................................ 1963
Shutdown ................................................................................................................ 1964
Add
................................................................................................................ 1965
AddArray ................................................................................................................ 1966
AddArray ................................................................................................................ 1967
Insert
................................................................................................................ 1969
InsertArray................................................................................................................ 1970
InsertArray................................................................................................................ 1971
AssignArray................................................................................................................ 1973
AssignArray................................................................................................................ 1974
Update
................................................................................................................ 1976
Shift
................................................................................................................ 1977
Delete
................................................................................................................ 1978
DeleteRange
................................................................................................................ 1979
At
................................................................................................................ 1980
CompareArray
................................................................................................................ 1982
CompareArray
................................................................................................................ 1983
Minimum ................................................................................................................ 1984
Maximum ................................................................................................................ 1985
2000-2014, MetaQuotes Software Corp.

16

Contedo
InsertSort ................................................................................................................ 1986
Search
................................................................................................................ 1987
SearchGreat
................................................................................................................ 1988
SearchLess................................................................................................................ 1989
SearchGreatOrEqual
................................................................................................................ 1990
SearchLessOrEqual
................................................................................................................ 1991
SearchFirst................................................................................................................ 1992
SearchLast................................................................................................................ 1993
SearchLinear
................................................................................................................ 1994
Save
................................................................................................................ 1995
Load
................................................................................................................ 1997
Type
................................................................................................................ 1999
CArrayString
......................................................................................................................... 2000
Reserve ................................................................................................................ 2002
Resize
................................................................................................................ 2003
Shutdown ................................................................................................................ 2004
Add
................................................................................................................ 2005
AddArray ................................................................................................................ 2006
AddArray ................................................................................................................ 2007
Insert
................................................................................................................ 2009
InsertArray................................................................................................................ 2010
InsertArray................................................................................................................ 2011
AssignArray................................................................................................................ 2013
AssignArray................................................................................................................ 2014
Update
................................................................................................................ 2016
Shift
................................................................................................................ 2017
Delete
................................................................................................................ 2018
DeleteRange
................................................................................................................ 2019
At
................................................................................................................ 2020
CompareArray
................................................................................................................ 2022
CompareArray
................................................................................................................ 2023
InsertSort ................................................................................................................ 2024
Search
................................................................................................................ 2025
SearchGreat
................................................................................................................ 2026
SearchLess................................................................................................................ 2027
SearchGreatOrEqual
................................................................................................................ 2028
SearchLessOrEqual
................................................................................................................ 2029
SearchFirst................................................................................................................ 2030
SearchLast................................................................................................................ 2031
SearchLinear
................................................................................................................ 2032
Save
................................................................................................................ 2033
Load
................................................................................................................ 2035
Type
................................................................................................................ 2037
CArrayObj
......................................................................................................................... 2038
FreeMode ................................................................................................................ 2043
FreeMode ................................................................................................................ 2044
Reserve ................................................................................................................ 2046
Resize
................................................................................................................ 2047
Clear
................................................................................................................ 2049
Shutdown ................................................................................................................ 2050
CreateElement
................................................................................................................ 2051
Add
................................................................................................................ 2053
AddArray ................................................................................................................ 2054
Insert
................................................................................................................ 2057
InsertArray................................................................................................................ 2059
AssignArray................................................................................................................ 2061
Update
................................................................................................................ 2063
Shift
................................................................................................................ 2064
2000-2014, MetaQuotes Software Corp.

17

Contedo
Detach
................................................................................................................ 2065
Delete
................................................................................................................ 2066
DeleteRange
................................................................................................................ 2067
At
................................................................................................................ 2068
CompareArray
................................................................................................................ 2069
InsertSort ................................................................................................................ 2070
Search
................................................................................................................ 2071
SearchGreat
................................................................................................................ 2072
SearchLess................................................................................................................ 2073
SearchGreatOrEqual
................................................................................................................ 2074
SearchLessOrEqual
................................................................................................................ 2075
SearchFirst................................................................................................................ 2076
SearchLast................................................................................................................ 2077
Save
................................................................................................................ 2078
Load
................................................................................................................ 2079
Type
................................................................................................................ 2081
CList ......................................................................................................................... 2082
FreeMode ................................................................................................................ 2084
FreeMode ................................................................................................................ 2085
Total
................................................................................................................ 2087
IsSorted ................................................................................................................ 2088
SortMode ................................................................................................................ 2089
CreateElement
................................................................................................................ 2090
Add
................................................................................................................ 2091
Insert
................................................................................................................ 2092
DetachCurrent
................................................................................................................ 2094
DeleteCurrent
................................................................................................................ 2095
Delete
................................................................................................................ 2096
Clear
................................................................................................................ 2097
IndexOf ................................................................................................................ 2098
GetNodeAtIndex
................................................................................................................ 2099
GetFirstNode
................................................................................................................ 2100
GetPrevNode
................................................................................................................ 2101
GetCurrentNode
................................................................................................................ 2102
GetNextNode
................................................................................................................ 2103
GetLastNode
................................................................................................................ 2104
Sort
................................................................................................................ 2105
MoveToIndex
................................................................................................................ 2106
Exchange ................................................................................................................ 2107
CompareList
................................................................................................................ 2108
Search
................................................................................................................ 2109
Save
................................................................................................................ 2110
Load
................................................................................................................ 2112
Type
................................................................................................................ 2114
CTreeNode
......................................................................................................................... 2115
Owner
................................................................................................................ 2120
Left
................................................................................................................ 2121
Right
................................................................................................................ 2122
Balance ................................................................................................................ 2123
BalanceL ................................................................................................................ 2124
BalanceR ................................................................................................................ 2125
CreateSample
................................................................................................................ 2126
RefreshBalance
................................................................................................................ 2127
GetNext ................................................................................................................ 2128
SaveNode ................................................................................................................ 2129
LoadNode ................................................................................................................ 2130
Type
................................................................................................................ 2131
CTree ......................................................................................................................... 2132
2000-2014, MetaQuotes Software Corp.

18

Contedo
Root
................................................................................................................ 2137
CreateElement
................................................................................................................ 2138
Insert
................................................................................................................ 2139
Detach
................................................................................................................ 2140
Delete
................................................................................................................ 2141
Clear
................................................................................................................ 2142
Find
................................................................................................................ 2143
Save
................................................................................................................ 2144
Load
................................................................................................................ 2145
Type
................................................................................................................ 2146
Classes for............................................................................................................................2147
Graphic Objects
CChartObject
......................................................................................................................... 2148
ChartId ................................................................................................................ 2151
Window ................................................................................................................ 2152
Name
................................................................................................................ 2153
NumPoints ................................................................................................................ 2154
Attach
................................................................................................................ 2155
SetPoint ................................................................................................................ 2156
Delete
................................................................................................................ 2157
Detach
................................................................................................................ 2158
ShiftObject................................................................................................................ 2159
ShiftPoint ................................................................................................................ 2160
Time
................................................................................................................ 2161
Price
................................................................................................................ 2163
Color
................................................................................................................ 2165
Style
................................................................................................................ 2166
Width
................................................................................................................ 2167
Background
................................................................................................................ 2168
Selected ................................................................................................................ 2169
Selectable ................................................................................................................ 2170
Description................................................................................................................ 2171
Tooltip
................................................................................................................ 2172
Timeframes................................................................................................................ 2173
Z_Order ................................................................................................................ 2174
CreateTime................................................................................................................ 2175
LevelsCount
................................................................................................................ 2176
LevelColor ................................................................................................................ 2177
LevelStyle ................................................................................................................ 2179
LevelWidth................................................................................................................ 2181
LevelValue ................................................................................................................ 2183
LevelDescription
................................................................................................................ 2185
GetInteger................................................................................................................ 2187
SetInteger................................................................................................................ 2189
GetDouble ................................................................................................................ 2191
SetDouble ................................................................................................................ 2193
GetString ................................................................................................................ 2195
SetString ................................................................................................................ 2197
Save
................................................................................................................ 2199
Load
................................................................................................................ 2200
Type
................................................................................................................ 2201
Objects.........................................................................................................................
Lines
2202
CChartObjectVLine
................................................................................................................ 2203
Create
........................................................................................................... 2204
Type
........................................................................................................... 2205
CChartObjectHLine
................................................................................................................ 2206
Create
........................................................................................................... 2207
Type
........................................................................................................... 2208
CChartObjectTrend
................................................................................................................ 2209
2000-2014, MetaQuotes Software Corp.

19

Contedo
Create
........................................................................................................... 2210
RayLeft ........................................................................................................... 2211
RayRight ........................................................................................................... 2212
Save
........................................................................................................... 2213
Load
........................................................................................................... 2214
Type
........................................................................................................... 2215
CChartObjectTrendByAngle
................................................................................................................ 2216
Create
........................................................................................................... 2217
Angle
........................................................................................................... 2218
Type
........................................................................................................... 2219
CChartObjectCycles
................................................................................................................ 2220
Create
........................................................................................................... 2221
Type
........................................................................................................... 2222
Objects.........................................................................................................................
Channels
2223
CChartObjectChannel
................................................................................................................ 2224
Create
........................................................................................................... 2225
Type
........................................................................................................... 2226
CChartObjectRegression
................................................................................................................ 2227
Create
........................................................................................................... 2228
Type
........................................................................................................... 2229
CChartObjectStdDevChannel
................................................................................................................ 2230
Create
........................................................................................................... 2231
Deviations........................................................................................................... 2232
Save
........................................................................................................... 2233
Load
........................................................................................................... 2234
Type
........................................................................................................... 2235
CChartObjectPitchfork
................................................................................................................ 2236
Create
........................................................................................................... 2237
Type
........................................................................................................... 2238
Gann Tools
......................................................................................................................... 2239
CChartObjectGannLine
................................................................................................................ 2240
Create
........................................................................................................... 2241
PipsPerBar........................................................................................................... 2242
Save
........................................................................................................... 2243
Load
........................................................................................................... 2244
Type
........................................................................................................... 2245
CChartObjectGannFan
................................................................................................................ 2246
Create
........................................................................................................... 2247
PipsPerBar........................................................................................................... 2248
Downtrend........................................................................................................... 2249
Save
........................................................................................................... 2250
Load
........................................................................................................... 2251
Type
........................................................................................................... 2252
CChartObjectGannGrid
................................................................................................................ 2253
Create
........................................................................................................... 2254
PipsPerBar........................................................................................................... 2255
Downtrend........................................................................................................... 2256
Save
........................................................................................................... 2257
Load
........................................................................................................... 2258
Type
........................................................................................................... 2259
Fibonacci
.........................................................................................................................
Tools
2260
CChartObjectFibo
................................................................................................................ 2261
Create
........................................................................................................... 2262
Type
........................................................................................................... 2263
CChartObjectFiboTimes
................................................................................................................ 2264
Create
........................................................................................................... 2265
Type
........................................................................................................... 2266
CChartObjectFiboFan
................................................................................................................ 2267
2000-2014, MetaQuotes Software Corp.

20

Contedo
Create
........................................................................................................... 2268
Type
........................................................................................................... 2269
CChartObjectFiboArc
................................................................................................................ 2270
Create
........................................................................................................... 2271
Scale
........................................................................................................... 2272
Ellipse
........................................................................................................... 2273
Save
........................................................................................................... 2274
Load
........................................................................................................... 2275
Type
........................................................................................................... 2276
CChartObjectFiboChannel
................................................................................................................ 2277
Create
........................................................................................................... 2278
Type
........................................................................................................... 2279
CChartObjectFiboExpansion
................................................................................................................ 2280
Create
........................................................................................................... 2281
Type
........................................................................................................... 2282
Elliott Tools
......................................................................................................................... 2283
CChartObjectElliottWave3
................................................................................................................ 2284
Create
........................................................................................................... 2285
Degree
........................................................................................................... 2286
Lines
........................................................................................................... 2287
Save
........................................................................................................... 2288
Load
........................................................................................................... 2289
Type
........................................................................................................... 2290
CChartObjectElliottWave5
................................................................................................................ 2291
Create
........................................................................................................... 2292
Type
........................................................................................................... 2294
Objects.........................................................................................................................
Shapes
2295
CChartObjectRectangle
................................................................................................................ 2296
Create
........................................................................................................... 2297
Type
........................................................................................................... 2298
CChartObjectTriangle
................................................................................................................ 2299
Create
........................................................................................................... 2300
Type
........................................................................................................... 2301
CChartObjectEllipse
................................................................................................................ 2302
Create
........................................................................................................... 2303
Type
........................................................................................................... 2304
Objects.........................................................................................................................
Arrows
2305
CChartObjectArrow
................................................................................................................ 2306
Create
........................................................................................................... 2307
ArrowCode........................................................................................................... 2309
Anchor
........................................................................................................... 2311
Save
........................................................................................................... 2313
Load
........................................................................................................... 2314
Type
........................................................................................................... 2315
Arrows with
................................................................................................................
fixed code
2316
Create
........................................................................................................... 2318
ArrowCode........................................................................................................... 2320
Type
........................................................................................................... 2321
Objects.........................................................................................................................
Controls
2322
CChartObjectText
................................................................................................................ 2323
Create
........................................................................................................... 2324
Angle
........................................................................................................... 2325
Font
........................................................................................................... 2326
FontSize ........................................................................................................... 2327
Anchor
........................................................................................................... 2328
Save
........................................................................................................... 2329
Load
........................................................................................................... 2330
Type
........................................................................................................... 2331
2000-2014, MetaQuotes Software Corp.

21

Contedo
CChartObjectLabel
................................................................................................................ 2332
Create
........................................................................................................... 2333
X_Distance........................................................................................................... 2334
Y_Distance........................................................................................................... 2335
X_Size
........................................................................................................... 2336
Y_Size
........................................................................................................... 2337
Corner
........................................................................................................... 2338
Time
........................................................................................................... 2339
Price
........................................................................................................... 2340
Save
........................................................................................................... 2341
Load
........................................................................................................... 2342
Type
........................................................................................................... 2343
CChartObjectEdit
................................................................................................................ 2344
Create
........................................................................................................... 2345
TextAlign ........................................................................................................... 2346
X_Size
........................................................................................................... 2347
Y_Size
........................................................................................................... 2348
BackColor ........................................................................................................... 2349
BorderColor
........................................................................................................... 2350
Angle
........................................................................................................... 2351
Save
........................................................................................................... 2352
Load
........................................................................................................... 2353
Type
........................................................................................................... 2354
CChartObjectButton
................................................................................................................ 2355
State
........................................................................................................... 2356
Save
........................................................................................................... 2357
Load
........................................................................................................... 2358
Type
........................................................................................................... 2359
CChartObjectSubChart
................................................................................................................ 2360
Create
........................................................................................................... 2362
X_Distance........................................................................................................... 2363
Y_Distance........................................................................................................... 2364
Corner
........................................................................................................... 2365
X_Size
........................................................................................................... 2366
Y_Size
........................................................................................................... 2367
Symbol
........................................................................................................... 2368
Period
........................................................................................................... 2369
Scale
........................................................................................................... 2370
DateScale ........................................................................................................... 2371
PriceScale ........................................................................................................... 2372
Time
........................................................................................................... 2373
Price
........................................................................................................... 2374
Save
........................................................................................................... 2375
Load
........................................................................................................... 2376
Type
........................................................................................................... 2377
CChartObjectBitmap
................................................................................................................ 2378
Create
........................................................................................................... 2379
BmpFile ........................................................................................................... 2380
X_Offset ........................................................................................................... 2381
Y_Offset ........................................................................................................... 2382
Save
........................................................................................................... 2383
Load
........................................................................................................... 2384
Type
........................................................................................................... 2385
CChartObjectBmpLabel
................................................................................................................ 2386
Create
........................................................................................................... 2388
X_Distance........................................................................................................... 2389
Y_Distance........................................................................................................... 2390
X_Offset ........................................................................................................... 2391
2000-2014, MetaQuotes Software Corp.

22

Contedo
Y_Offset ........................................................................................................... 2392
Corner
........................................................................................................... 2393
X_Size
........................................................................................................... 2394
Y_Size
........................................................................................................... 2395
BmpFileOn ........................................................................................................... 2396
BmpFileOff........................................................................................................... 2397
State
........................................................................................................... 2398
Time
........................................................................................................... 2399
Price
........................................................................................................... 2400
Save
........................................................................................................... 2401
Load
........................................................................................................... 2402
Type
........................................................................................................... 2403
CChartObjectRectLabel
................................................................................................................ 2404
Create
........................................................................................................... 2405
X_Size
........................................................................................................... 2406
Y_Size
........................................................................................................... 2407
BackColor ........................................................................................................... 2408
Angle
........................................................................................................... 2409
BorderType........................................................................................................... 2410
Save
........................................................................................................... 2411
Load
........................................................................................................... 2412
Type
........................................................................................................... 2413
............................................................................................................................2414
Class for creating
custom graphics
ChartObjectName
......................................................................................................................... 2417
Circle ......................................................................................................................... 2418
CircleAA......................................................................................................................... 2419
Create ......................................................................................................................... 2420
CreateBitmap
......................................................................................................................... 2421
CreateBitmapLabel
......................................................................................................................... 2423
Destroy......................................................................................................................... 2425
Erase ......................................................................................................................... 2426
Fill
......................................................................................................................... 2427
FillCircle......................................................................................................................... 2428
FillRectangle
......................................................................................................................... 2429
FillTriangle
......................................................................................................................... 2430
FontAngleGet
......................................................................................................................... 2431
FontAngleSet
......................................................................................................................... 2432
FontFlagsGet
......................................................................................................................... 2433
FontFlagsSet
......................................................................................................................... 2434
FontGet......................................................................................................................... 2435
FontNameGet
......................................................................................................................... 2436
FontNameSet
......................................................................................................................... 2437
FontSet......................................................................................................................... 2438
FontSizeGet
......................................................................................................................... 2439
FontSizeSet
......................................................................................................................... 2440
Height ......................................................................................................................... 2441
Line ......................................................................................................................... 2442
LineAA ......................................................................................................................... 2443
LineHorizontal
......................................................................................................................... 2444
LineStyleSet
......................................................................................................................... 2445
LineVertical
......................................................................................................................... 2446
LoadFromFile
......................................................................................................................... 2447
PixelGet......................................................................................................................... 2448
PixelSet......................................................................................................................... 2449
PixelSetAA
......................................................................................................................... 2450
Polygon......................................................................................................................... 2451
PolygonAA
......................................................................................................................... 2452
Polyline......................................................................................................................... 2453
2000-2014, MetaQuotes Software Corp.

23

Contedo
PolylineAA
......................................................................................................................... 2454
Rectangle
......................................................................................................................... 2455
Resize ......................................................................................................................... 2456
ResourceName
......................................................................................................................... 2457
TextHeight
......................................................................................................................... 2458
TextOut......................................................................................................................... 2459
TextSize
......................................................................................................................... 2460
TextWidth
......................................................................................................................... 2461
TransparentLevelSet
......................................................................................................................... 2462
Triangle......................................................................................................................... 2463
TriangleAA
......................................................................................................................... 2464
Update ......................................................................................................................... 2465
Width ......................................................................................................................... 2466
Class for w............................................................................................................................2467
orking w ith chart
ChartID......................................................................................................................... 2472
Mode ......................................................................................................................... 2473
Foreground
......................................................................................................................... 2474
Shift ......................................................................................................................... 2475
ShiftSize
......................................................................................................................... 2476
AutoScroll
......................................................................................................................... 2477
Scale ......................................................................................................................... 2478
ScaleFix......................................................................................................................... 2479
ScaleFix_11
......................................................................................................................... 2480
FixedMax
......................................................................................................................... 2481
FixedMin
......................................................................................................................... 2482
PointsPerBar
......................................................................................................................... 2483
ScalePPB
......................................................................................................................... 2484
ShowOHLC
......................................................................................................................... 2485
ShowLineBid
......................................................................................................................... 2486
ShowLineAsk
......................................................................................................................... 2487
ShowLastLine
......................................................................................................................... 2488
ShowPeriodSep
......................................................................................................................... 2489
ShowGrid
......................................................................................................................... 2490
ShowVolumes
......................................................................................................................... 2491
ShowObjectDescr
......................................................................................................................... 2492
ShowDateScale
......................................................................................................................... 2493
ShowPriceScale
......................................................................................................................... 2494
ColorBackground
......................................................................................................................... 2495
ColorForeground
......................................................................................................................... 2496
ColorGrid
......................................................................................................................... 2497
ColorBarUp
......................................................................................................................... 2498
ColorBarDown
......................................................................................................................... 2499
ColorCandleBull
......................................................................................................................... 2500
ColorCandleBear
......................................................................................................................... 2501
ColorChartLine
......................................................................................................................... 2502
ColorVolumes
......................................................................................................................... 2503
ColorLineBid
......................................................................................................................... 2504
ColorLineAsk
......................................................................................................................... 2505
ColorLineLast
......................................................................................................................... 2506
ColorStopLevels
......................................................................................................................... 2507
VisibleBars
......................................................................................................................... 2508
WindowsTotal
......................................................................................................................... 2509
WindowIsVisible
......................................................................................................................... 2510
WindowHandle
......................................................................................................................... 2511
FirstVisibleBar
......................................................................................................................... 2512
WidthInBars
......................................................................................................................... 2513
WidthInPixels
......................................................................................................................... 2514
HeightInPixels
......................................................................................................................... 2515
2000-2014, MetaQuotes Software Corp.

24

Contedo
PriceMin
......................................................................................................................... 2516
PriceMax
......................................................................................................................... 2517
Attach ......................................................................................................................... 2518
FirstChart
......................................................................................................................... 2519
NextChart
......................................................................................................................... 2520
Open ......................................................................................................................... 2521
Detach......................................................................................................................... 2522
Close ......................................................................................................................... 2523
BringToTop
......................................................................................................................... 2524
EventObjectCreate
......................................................................................................................... 2525
EventObjectDelete
......................................................................................................................... 2526
IndicatorAdd
......................................................................................................................... 2527
IndicatorDelete
......................................................................................................................... 2528
IndicatorsTotal
......................................................................................................................... 2529
IndicatorName
......................................................................................................................... 2530
Navigate
......................................................................................................................... 2531
Symbol ......................................................................................................................... 2532
Period ......................................................................................................................... 2533
Redraw......................................................................................................................... 2534
GetInteger
......................................................................................................................... 2535
SetInteger
......................................................................................................................... 2536
GetDouble
......................................................................................................................... 2537
SetDouble
......................................................................................................................... 2538
GetString
......................................................................................................................... 2539
SetString
......................................................................................................................... 2540
SetSymbolPeriod
......................................................................................................................... 2541
ApplyTemplate
......................................................................................................................... 2542
ScreenShot
......................................................................................................................... 2543
WindowOnDropped
......................................................................................................................... 2544
PriceOnDropped
......................................................................................................................... 2545
TimeOnDropped
......................................................................................................................... 2546
XOnDropped
......................................................................................................................... 2547
YOnDropped
......................................................................................................................... 2548
Save ......................................................................................................................... 2549
Load ......................................................................................................................... 2550
Type ......................................................................................................................... 2551
Classes for............................................................................................................................2552
file operations
CFile ......................................................................................................................... 2553
Handle
................................................................................................................ 2555
Filename ................................................................................................................ 2556
Flags
................................................................................................................ 2557
SetUnicode................................................................................................................ 2558
SetCommon................................................................................................................ 2559
Open
................................................................................................................ 2560
Close
................................................................................................................ 2561
Delete
................................................................................................................ 2562
IsExist
................................................................................................................ 2563
Copy
................................................................................................................ 2564
Move
................................................................................................................ 2565
Size
................................................................................................................ 2566
Tell
................................................................................................................ 2567
Seek
................................................................................................................ 2568
Flush
................................................................................................................ 2569
IsEnding ................................................................................................................ 2570
IsLineEnding
................................................................................................................ 2571
FolderCreate
................................................................................................................ 2572
FolderDelete
................................................................................................................ 2573
FolderClean................................................................................................................ 2574
2000-2014, MetaQuotes Software Corp.

25

Contedo
FileFindFirst
................................................................................................................ 2575
FileFindNext
................................................................................................................ 2576
FileFindClose
................................................................................................................ 2577
CFileBin......................................................................................................................... 2578
Open
................................................................................................................ 2580
WriteChar ................................................................................................................ 2581
WriteShort................................................................................................................ 2582
WriteInteger
................................................................................................................ 2583
WriteLong ................................................................................................................ 2584
WriteFloat................................................................................................................ 2585
WriteDouble
................................................................................................................ 2586
WriteString................................................................................................................ 2587
WriteCharArray
................................................................................................................ 2588
WriteShortArray
................................................................................................................ 2589
WriteIntegerArray
................................................................................................................ 2590
WriteLongArray
................................................................................................................ 2591
WriteFloatArray
................................................................................................................ 2592
WriteDoubleArray
................................................................................................................ 2593
WriteObject
................................................................................................................ 2594
ReadChar ................................................................................................................ 2595
ReadShort ................................................................................................................ 2596
ReadInteger
................................................................................................................ 2597
ReadLong ................................................................................................................ 2598
ReadFloat ................................................................................................................ 2599
ReadDouble................................................................................................................ 2600
ReadString................................................................................................................ 2601
ReadCharArray
................................................................................................................ 2602
ReadShortArray
................................................................................................................ 2603
ReadIntegerArray
................................................................................................................ 2604
ReadLongArray
................................................................................................................ 2605
ReadFloatArray
................................................................................................................ 2606
ReadDoubleArray
................................................................................................................ 2607
ReadObject................................................................................................................ 2608
CFileTxt......................................................................................................................... 2609
Open
................................................................................................................ 2610
WriteString................................................................................................................ 2611
ReadString................................................................................................................ 2612
............................................................................................................................2613
Class for String
operations
CString......................................................................................................................... 2614
Str
................................................................................................................ 2616
Len
................................................................................................................ 2617
Copy
................................................................................................................ 2618
Fill
................................................................................................................ 2619
Assign
................................................................................................................ 2620
Append
................................................................................................................ 2621
Insert
................................................................................................................ 2622
Compare ................................................................................................................ 2623
CompareNoCase
................................................................................................................ 2624
Left
................................................................................................................ 2625
Right
................................................................................................................ 2626
Mid
................................................................................................................ 2627
Trim
................................................................................................................ 2628
TrimLeft ................................................................................................................ 2629
TrimRight ................................................................................................................ 2630
Clear
................................................................................................................ 2631
ToUpper ................................................................................................................ 2632
ToLower ................................................................................................................ 2633
Reverse ................................................................................................................ 2634
2000-2014, MetaQuotes Software Corp.

26

Contedo
Find
................................................................................................................ 2635
FindRev ................................................................................................................ 2636
Remove ................................................................................................................ 2637
Replace ................................................................................................................ 2638
Classes for............................................................................................................................2639
w orking w ith Indicators
Base classes
......................................................................................................................... 2640
CSpreadBuffer
................................................................................................................ 2641
Size
........................................................................................................... 2642
SetSymbolPeriod
........................................................................................................... 2643
At
........................................................................................................... 2644
Refresh ........................................................................................................... 2645
RefreshCurrent
........................................................................................................... 2646
CTimeBuffer
................................................................................................................ 2647
Size
........................................................................................................... 2648
SetSymbolPeriod
........................................................................................................... 2649
At
........................................................................................................... 2650
Refresh ........................................................................................................... 2651
RefreshCurrent
........................................................................................................... 2652
CTickVolumeBuffer
................................................................................................................ 2653
Size
........................................................................................................... 2654
SetSymbolPeriod
........................................................................................................... 2655
At
........................................................................................................... 2656
Refresh ........................................................................................................... 2657
RefreshCurrent
........................................................................................................... 2658
CRealVolumeBuffer
................................................................................................................ 2659
Size
........................................................................................................... 2660
SetSymbolPeriod
........................................................................................................... 2661
At
........................................................................................................... 2662
Refresh ........................................................................................................... 2663
RefreshCurrent
........................................................................................................... 2664
CDoubleBuffer
................................................................................................................ 2665
Size
........................................................................................................... 2666
SetSymbolPeriod
........................................................................................................... 2667
At
........................................................................................................... 2668
Refresh ........................................................................................................... 2669
RefreshCurrent
........................................................................................................... 2670
COpenBuffer
................................................................................................................ 2671
Refresh ........................................................................................................... 2672
RefreshCurrent
........................................................................................................... 2673
CHighBuffer
................................................................................................................ 2674
Refresh ........................................................................................................... 2675
RefreshCurrent
........................................................................................................... 2676
CLowBuffer................................................................................................................ 2677
Refresh ........................................................................................................... 2678
RefreshCurrent
........................................................................................................... 2679
CCloseBuffer
................................................................................................................ 2680
Refresh ........................................................................................................... 2681
RefreshCurrent
........................................................................................................... 2682
CIndicatorBuffer
................................................................................................................ 2683
Offset
........................................................................................................... 2684
Name
........................................................................................................... 2685
At
........................................................................................................... 2686
Refresh ........................................................................................................... 2687
RefreshCurrent
........................................................................................................... 2688
CSeries
................................................................................................................ 2689
Name
........................................................................................................... 2690
BuffersTotal
........................................................................................................... 2691
Timeframe ........................................................................................................... 2692
2000-2014, MetaQuotes Software Corp.

27

Contedo
Symbol
........................................................................................................... 2693
Period
........................................................................................................... 2694
RefreshCurrent
........................................................................................................... 2695
BufferSize ........................................................................................................... 2696
BufferResize
........................................................................................................... 2697
Refresh ........................................................................................................... 2698
PeriodDescription
........................................................................................................... 2699
CPriceSeries
................................................................................................................ 2700
BufferResize
........................................................................................................... 2701
GetData ........................................................................................................... 2702
Refresh ........................................................................................................... 2703
MinIndex ........................................................................................................... 2704
MinValue ........................................................................................................... 2705
MaxIndex ........................................................................................................... 2706
MaxValue ........................................................................................................... 2707
CIndicator................................................................................................................ 2708
Handle
........................................................................................................... 2711
Status
........................................................................................................... 2712
FullRelease........................................................................................................... 2713
Create
........................................................................................................... 2714
BufferResize
........................................................................................................... 2715
BarsCalculated
........................................................................................................... 2716
GetData ........................................................................................................... 2717
Refresh ........................................................................................................... 2720
Minimum ........................................................................................................... 2721
MinValue ........................................................................................................... 2722
Maximum ........................................................................................................... 2723
MaxValue ........................................................................................................... 2724
MethodDescription
........................................................................................................... 2725
PriceDescription
........................................................................................................... 2726
VolumeDescription
........................................................................................................... 2727
AddToChart
........................................................................................................... 2728
DeleteFromChart
........................................................................................................... 2729
CIndicators................................................................................................................ 2730
Create
........................................................................................................... 2731
Refresh ........................................................................................................... 2732
Timeseries
.........................................................................................................................
classes
2733
CiSpread ................................................................................................................ 2734
Create
........................................................................................................... 2735
BufferResize
........................................................................................................... 2736
GetData ........................................................................................................... 2737
Refresh ........................................................................................................... 2739
CiTime
................................................................................................................ 2740
Create
........................................................................................................... 2741
BufferResize
........................................................................................................... 2742
GetData ........................................................................................................... 2743
Refresh ........................................................................................................... 2745
CiTickVolume
................................................................................................................ 2746
Create
........................................................................................................... 2747
BufferResize
........................................................................................................... 2748
GetData ........................................................................................................... 2749
Refresh ........................................................................................................... 2751
CiRealVolume
................................................................................................................ 2752
Create
........................................................................................................... 2753
BufferResize
........................................................................................................... 2754
GetData ........................................................................................................... 2755
Refresh ........................................................................................................... 2757
CiOpen
................................................................................................................ 2758
2000-2014, MetaQuotes Software Corp.

28

Contedo
Create
........................................................................................................... 2759
GetData ........................................................................................................... 2760
CiHigh
................................................................................................................ 2762
Create
........................................................................................................... 2763
GetData ........................................................................................................... 2764
CiLow
................................................................................................................ 2766
Create
........................................................................................................... 2767
GetData ........................................................................................................... 2768
CiClose
................................................................................................................ 2770
Create
........................................................................................................... 2771
GetData ........................................................................................................... 2772
Trend Indicators
......................................................................................................................... 2774
CiADX
................................................................................................................ 2775
MaPeriod ........................................................................................................... 2776
Create
........................................................................................................... 2777
Main
........................................................................................................... 2778
Plus
........................................................................................................... 2779
Minus
........................................................................................................... 2780
Type
........................................................................................................... 2781
CiADXWilder
................................................................................................................ 2782
MaPeriod ........................................................................................................... 2783
Create
........................................................................................................... 2784
Main
........................................................................................................... 2785
Plus
........................................................................................................... 2786
Minus
........................................................................................................... 2787
Type
........................................................................................................... 2788
CiBands ................................................................................................................ 2789
MaPeriod ........................................................................................................... 2790
MaShift ........................................................................................................... 2791
Deviation ........................................................................................................... 2792
Applied
........................................................................................................... 2793
Create
........................................................................................................... 2794
Base
........................................................................................................... 2795
Upper
........................................................................................................... 2796
Lower
........................................................................................................... 2797
Type
........................................................................................................... 2798
CiEnvelopes................................................................................................................ 2799
MaPeriod ........................................................................................................... 2800
MaShift ........................................................................................................... 2801
MaMethod ........................................................................................................... 2802
Deviation ........................................................................................................... 2803
Applied
........................................................................................................... 2804
Create
........................................................................................................... 2805
Upper
........................................................................................................... 2806
Lower
........................................................................................................... 2807
Type
........................................................................................................... 2808
CiIchimoku................................................................................................................ 2809
TenkanSenPeriod
........................................................................................................... 2810
KijunSenPeriod
........................................................................................................... 2811
SenkouSpanBPeriod
........................................................................................................... 2812
Create
........................................................................................................... 2813
TenkanSen........................................................................................................... 2814
KijunSen ........................................................................................................... 2815
SenkouSpanA
........................................................................................................... 2816
SenkouSpanB
........................................................................................................... 2817
ChinkouSpan
........................................................................................................... 2818
Type
........................................................................................................... 2819
CiMA
................................................................................................................ 2820
2000-2014, MetaQuotes Software Corp.

29

Contedo
MaPeriod ........................................................................................................... 2821
MaShift ........................................................................................................... 2822
MaMethod ........................................................................................................... 2823
Applied
........................................................................................................... 2824
Create
........................................................................................................... 2825
Main
........................................................................................................... 2826
Type
........................................................................................................... 2827
CiSAR
................................................................................................................ 2828
SarStep ........................................................................................................... 2829
Maximum ........................................................................................................... 2830
Create
........................................................................................................... 2831
Main
........................................................................................................... 2832
Type
........................................................................................................... 2833
CiStdDev ................................................................................................................ 2834
MaPeriod ........................................................................................................... 2835
MaShift ........................................................................................................... 2836
MaMethod ........................................................................................................... 2837
Applied
........................................................................................................... 2838
Create
........................................................................................................... 2839
Main
........................................................................................................... 2840
Type
........................................................................................................... 2841
CiDEMA ................................................................................................................ 2842
MaPeriod ........................................................................................................... 2843
IndShift ........................................................................................................... 2844
Applied
........................................................................................................... 2845
Create
........................................................................................................... 2846
Main
........................................................................................................... 2847
Type
........................................................................................................... 2848
CiTEMA
................................................................................................................ 2849
MaPeriod ........................................................................................................... 2850
IndShift ........................................................................................................... 2851
Applied
........................................................................................................... 2852
Create
........................................................................................................... 2853
Main
........................................................................................................... 2854
Type
........................................................................................................... 2855
CiFrAMA ................................................................................................................ 2856
MaPeriod ........................................................................................................... 2857
IndShift ........................................................................................................... 2858
Applied
........................................................................................................... 2859
Create
........................................................................................................... 2860
Main
........................................................................................................... 2861
Type
........................................................................................................... 2862
CiAMA
................................................................................................................ 2863
MaPeriod ........................................................................................................... 2864
FastEmaPeriod
........................................................................................................... 2865
SlowEmaPeriod
........................................................................................................... 2866
IndShift ........................................................................................................... 2867
Applied
........................................................................................................... 2868
Create
........................................................................................................... 2869
Main
........................................................................................................... 2870
Type
........................................................................................................... 2871
CiVIDyA ................................................................................................................ 2872
CmoPeriod........................................................................................................... 2873
EmaPeriod ........................................................................................................... 2874
IndShift ........................................................................................................... 2875
Applied
........................................................................................................... 2876
Create
........................................................................................................... 2877
Main
........................................................................................................... 2878
2000-2014, MetaQuotes Software Corp.

30

Contedo
Type
........................................................................................................... 2879
Oscillators
......................................................................................................................... 2880
CiATR
................................................................................................................ 2881
MaPeriod ........................................................................................................... 2882
Create
........................................................................................................... 2883
Main
........................................................................................................... 2884
Type
........................................................................................................... 2885
CiBearsPower
................................................................................................................ 2886
MaPeriod ........................................................................................................... 2887
Create
........................................................................................................... 2888
Main
........................................................................................................... 2889
Type
........................................................................................................... 2890
CiBullsPower
................................................................................................................ 2891
MaPeriod ........................................................................................................... 2892
Create
........................................................................................................... 2893
Main
........................................................................................................... 2894
Type
........................................................................................................... 2895
CiCCI
................................................................................................................ 2896
MaPeriod ........................................................................................................... 2897
Applied
........................................................................................................... 2898
Create
........................................................................................................... 2899
Main
........................................................................................................... 2900
Type
........................................................................................................... 2901
CiChaikin ................................................................................................................ 2902
FastMaPeriod
........................................................................................................... 2903
SlowMaPeriod
........................................................................................................... 2904
MaMethod ........................................................................................................... 2905
Applied
........................................................................................................... 2906
Create
........................................................................................................... 2907
Main
........................................................................................................... 2908
Type
........................................................................................................... 2909
CiDeMarker................................................................................................................ 2910
MaPeriod ........................................................................................................... 2911
Create
........................................................................................................... 2912
Main
........................................................................................................... 2913
Type
........................................................................................................... 2914
CiForce ................................................................................................................ 2915
MaPeriod ........................................................................................................... 2916
MaMethod ........................................................................................................... 2917
Applied
........................................................................................................... 2918
Create
........................................................................................................... 2919
Main
........................................................................................................... 2920
Type
........................................................................................................... 2921
CiMACD ................................................................................................................ 2922
FastEmaPeriod
........................................................................................................... 2923
SlowEmaPeriod
........................................................................................................... 2924
SignalPeriod
........................................................................................................... 2925
Applied
........................................................................................................... 2926
Create
........................................................................................................... 2927
Main
........................................................................................................... 2928
Signal
........................................................................................................... 2929
Type
........................................................................................................... 2930
CiMomentum
................................................................................................................ 2931
MaPeriod ........................................................................................................... 2932
Applied
........................................................................................................... 2933
Create
........................................................................................................... 2934
Main
........................................................................................................... 2935
Type
........................................................................................................... 2936
2000-2014, MetaQuotes Software Corp.

31

Contedo
CiOsMA ................................................................................................................ 2937
FastEmaPeriod
........................................................................................................... 2938
SlowEmaPeriod
........................................................................................................... 2939
SignalPeriod
........................................................................................................... 2940
Applied
........................................................................................................... 2941
Create
........................................................................................................... 2942
Main
........................................................................................................... 2943
Type
........................................................................................................... 2944
CiRSI
................................................................................................................ 2945
MaPeriod ........................................................................................................... 2946
Applied
........................................................................................................... 2947
Create
........................................................................................................... 2948
Main
........................................................................................................... 2949
Type
........................................................................................................... 2950
CiRVI
................................................................................................................ 2951
MaPeriod ........................................................................................................... 2952
Create
........................................................................................................... 2953
Main
........................................................................................................... 2954
Signal
........................................................................................................... 2955
Type
........................................................................................................... 2956
CiStochastic
................................................................................................................ 2957
Kperiod ........................................................................................................... 2958
Dperiod ........................................................................................................... 2959
Slowing
........................................................................................................... 2960
MaMethod ........................................................................................................... 2961
PriceField ........................................................................................................... 2962
Create
........................................................................................................... 2963
Main
........................................................................................................... 2964
Signal
........................................................................................................... 2965
Type
........................................................................................................... 2966
CiTriX
................................................................................................................ 2967
MaPeriod ........................................................................................................... 2968
Applied
........................................................................................................... 2969
Create
........................................................................................................... 2970
Main
........................................................................................................... 2971
Type
........................................................................................................... 2972
CiWPR
................................................................................................................ 2973
CalcPeriod........................................................................................................... 2974
Create
........................................................................................................... 2975
Main
........................................................................................................... 2976
Type
........................................................................................................... 2977
Volume .........................................................................................................................
Indicators
2978
CiAD
................................................................................................................ 2979
Applied
........................................................................................................... 2980
Create
........................................................................................................... 2981
Main
........................................................................................................... 2982
Type
........................................................................................................... 2983
CiMFI
................................................................................................................ 2984
MaPeriod ........................................................................................................... 2985
Applied
........................................................................................................... 2986
Create
........................................................................................................... 2987
Main
........................................................................................................... 2988
Type
........................................................................................................... 2989
CiOBV
................................................................................................................ 2990
Applied
........................................................................................................... 2991
Create
........................................................................................................... 2992
Main
........................................................................................................... 2993
Type
........................................................................................................... 2994
2000-2014, MetaQuotes Software Corp.

32

Contedo
CiVolumes ................................................................................................................ 2995
Applied
........................................................................................................... 2996
Create
........................................................................................................... 2997
Main
........................................................................................................... 2998
Type
........................................................................................................... 2999
Bill Williams
.........................................................................................................................
Indicators
3000
CiAC
................................................................................................................ 3001
Create
........................................................................................................... 3002
Main
........................................................................................................... 3003
Type
........................................................................................................... 3004
CiAlligator ................................................................................................................ 3005
JawPeriod ........................................................................................................... 3006
JawShift ........................................................................................................... 3007
TeethPeriod
........................................................................................................... 3008
TeethShift ........................................................................................................... 3009
LipsPeriod ........................................................................................................... 3010
LipsShift ........................................................................................................... 3011
MaMethod ........................................................................................................... 3012
Applied
........................................................................................................... 3013
Create
........................................................................................................... 3014
Jaw
........................................................................................................... 3015
Teeth
........................................................................................................... 3016
Lips
........................................................................................................... 3017
Type
........................................................................................................... 3018
CiAO
................................................................................................................ 3019
Create
........................................................................................................... 3020
Main
........................................................................................................... 3021
Type
........................................................................................................... 3022
CiFractals ................................................................................................................ 3023
Create
........................................................................................................... 3024
Upper
........................................................................................................... 3025
Lower
........................................................................................................... 3026
Type
........................................................................................................... 3027
CiGator ................................................................................................................ 3028
JawPeriod ........................................................................................................... 3029
JawShift ........................................................................................................... 3030
TeethPeriod
........................................................................................................... 3031
TeethShift ........................................................................................................... 3032
LipsPeriod ........................................................................................................... 3033
LipsShift ........................................................................................................... 3034
MaMethod ........................................................................................................... 3035
Applied
........................................................................................................... 3036
Create
........................................................................................................... 3037
Upper
........................................................................................................... 3038
Lower
........................................................................................................... 3039
Type
........................................................................................................... 3040
CiBWMFI ................................................................................................................ 3041
Applied
........................................................................................................... 3042
Create
........................................................................................................... 3043
Main
........................................................................................................... 3044
Type
........................................................................................................... 3045
Custom.........................................................................................................................
indicators
3046
NumBuffers................................................................................................................ 3047
NumParams................................................................................................................ 3048
ParamType................................................................................................................ 3049
ParamLong................................................................................................................ 3050
ParamDouble
................................................................................................................ 3051
ParamString
................................................................................................................ 3052
2000-2014, MetaQuotes Software Corp.

33

Contedo
Type
................................................................................................................ 3053
............................................................................................................................3054
Trade Classes
CAccountInfo
......................................................................................................................... 3055
Login
................................................................................................................ 3057
TradeMode................................................................................................................ 3058
TradeModeDescription
................................................................................................................ 3059
Leverage ................................................................................................................ 3060
MarginMode
................................................................................................................ 3061
MarginModeDescription
................................................................................................................ 3062
TradeAllowed
................................................................................................................ 3063
TradeExpert
................................................................................................................ 3064
LimitOrders
................................................................................................................ 3065
Balance ................................................................................................................ 3066
Credit
................................................................................................................ 3067
Profit
................................................................................................................ 3068
Equity
................................................................................................................ 3069
Margin
................................................................................................................ 3070
FreeMargin................................................................................................................ 3071
MarginLevel
................................................................................................................ 3072
MarginCall ................................................................................................................ 3073
MarginStopOut
................................................................................................................ 3074
Name
................................................................................................................ 3075
Server
................................................................................................................ 3076
Currency ................................................................................................................ 3077
Company ................................................................................................................ 3078
InfoInteger................................................................................................................ 3079
InfoDouble ................................................................................................................ 3080
InfoString ................................................................................................................ 3081
OrderProfitCheck
................................................................................................................ 3082
MarginCheck
................................................................................................................ 3083
FreeMarginCheck
................................................................................................................ 3084
MaxLotCheck
................................................................................................................ 3085
CSymbolInfo
......................................................................................................................... 3086
Refresh ................................................................................................................ 3090
RefreshRates
................................................................................................................ 3091
Name
................................................................................................................ 3092
Select
................................................................................................................ 3093
IsSynchronized
................................................................................................................ 3094
Volume
................................................................................................................ 3095
VolumeHigh................................................................................................................ 3096
VolumeLow................................................................................................................ 3097
Time
................................................................................................................ 3098
Spread
................................................................................................................ 3099
SpreadFloat................................................................................................................ 3100
TicksBookDepth
................................................................................................................ 3101
StopsLevel................................................................................................................ 3102
FreezeLevel
................................................................................................................ 3103
Bid
................................................................................................................ 3104
BidHigh ................................................................................................................ 3105
BidLow
................................................................................................................ 3106
Ask
................................................................................................................ 3107
AskHigh ................................................................................................................ 3108
AskLow
................................................................................................................ 3109
Last
................................................................................................................ 3110
LastHigh ................................................................................................................ 3111
LastLow ................................................................................................................ 3112
TradeCalcMode
................................................................................................................ 3113
TradeCalcModeDescription
................................................................................................................ 3114
2000-2014, MetaQuotes Software Corp.

34

Contedo
TradeMode................................................................................................................ 3115
TradeModeDescription
................................................................................................................ 3116
TradeExecution
................................................................................................................ 3117
TradeExecutionDescription
................................................................................................................ 3118
SwapMode ................................................................................................................ 3119
SwapModeDescription
................................................................................................................ 3120
SwapRollover3days
................................................................................................................ 3121
SwapRollover3daysDescription
................................................................................................................ 3122
MarginInitial
................................................................................................................ 3123
MarginMaintenance
................................................................................................................ 3124
MarginLong................................................................................................................ 3125
MarginShort
................................................................................................................ 3126
MarginLimit................................................................................................................ 3127
MarginStop................................................................................................................ 3128
MarginStopLimit
................................................................................................................ 3129
TradeTimeFlags
................................................................................................................ 3130
TradeFillFlags
................................................................................................................ 3131
Digits
................................................................................................................ 3132
Point
................................................................................................................ 3133
TickValue ................................................................................................................ 3134
TickValueProfit
................................................................................................................ 3135
TicksBookDepth
................................................................................................................ 3136
TickSize ................................................................................................................ 3137
ContractSize
................................................................................................................ 3138
LotsMin ................................................................................................................ 3139
LotsMax ................................................................................................................ 3140
LotsStep ................................................................................................................ 3141
LotsLimit ................................................................................................................ 3142
SwapLong ................................................................................................................ 3143
SwapShort ................................................................................................................ 3144
CurrencyBase
................................................................................................................ 3145
CurrencyProfit
................................................................................................................ 3146
CurrencyMargin
................................................................................................................ 3147
Bank
................................................................................................................ 3148
Description................................................................................................................ 3149
Path
................................................................................................................ 3150
SessionDeals
................................................................................................................ 3151
SessionBuyOrders
................................................................................................................ 3152
SessionSellOrders
................................................................................................................ 3153
SessionTurnover
................................................................................................................ 3154
SessionInterest
................................................................................................................ 3155
SessionBuyOrdersVolume
................................................................................................................ 3156
SessionSellOrdersVolume
................................................................................................................ 3157
SessionOpen
................................................................................................................ 3158
SessionClose
................................................................................................................ 3159
SessionAW ................................................................................................................ 3160
SessionPriceSettlement
................................................................................................................ 3161
SessionPriceLimitMin
................................................................................................................ 3162
SessionPriceLimitMax
................................................................................................................ 3163
InfoInteger................................................................................................................ 3164
InfoDouble ................................................................................................................ 3165
InfoString ................................................................................................................ 3166
NormalizePrice
................................................................................................................ 3167
COrderInfo
......................................................................................................................... 3168
Ticket
................................................................................................................ 3170
TimeSetup ................................................................................................................ 3171
TimeSetupMsc
................................................................................................................ 3172
OrderType................................................................................................................ 3173
2000-2014, MetaQuotes Software Corp.

35

Contedo
TypeDescription
................................................................................................................ 3174
State
................................................................................................................ 3175
StateDescription
................................................................................................................ 3176
TimeExpiration
................................................................................................................ 3177
TimeDone ................................................................................................................ 3178
TimeDoneMsc
................................................................................................................ 3179
TypeFilling ................................................................................................................ 3180
TypeFillingDescription
................................................................................................................ 3181
TypeTime ................................................................................................................ 3182
TypeTimeDescription
................................................................................................................ 3183
Magic
................................................................................................................ 3184
PositionId ................................................................................................................ 3185
VolumeInitial
................................................................................................................ 3186
VolumeCurrent
................................................................................................................ 3187
PriceOpen ................................................................................................................ 3188
StopLoss ................................................................................................................ 3189
TakeProfit ................................................................................................................ 3190
PriceCurrent
................................................................................................................ 3191
PriceStopLimit
................................................................................................................ 3192
Symbol
................................................................................................................ 3193
Comment ................................................................................................................ 3194
InfoInteger................................................................................................................ 3195
InfoDouble ................................................................................................................ 3196
InfoString ................................................................................................................ 3197
StoreState................................................................................................................ 3198
CheckState................................................................................................................ 3199
Select
................................................................................................................ 3200
SelectByIndex
................................................................................................................ 3201
CHistoryOrderInfo
......................................................................................................................... 3202
TimeSetup ................................................................................................................ 3204
TimeSetupMsc
................................................................................................................ 3205
OrderType................................................................................................................ 3206
TypeDescription
................................................................................................................ 3207
State
................................................................................................................ 3208
StateDescription
................................................................................................................ 3209
TimeExpiration
................................................................................................................ 3210
TimeDone ................................................................................................................ 3211
TimeDoneMsc
................................................................................................................ 3212
TypeFilling ................................................................................................................ 3213
TypeFillingDescription
................................................................................................................ 3214
TypeTime ................................................................................................................ 3215
TypeTimeDescription
................................................................................................................ 3216
Magic
................................................................................................................ 3217
PositionId ................................................................................................................ 3218
VolumeInitial
................................................................................................................ 3219
VolumeCurrent
................................................................................................................ 3220
PriceOpen ................................................................................................................ 3221
StopLoss ................................................................................................................ 3222
TakeProfit ................................................................................................................ 3223
PriceCurrent
................................................................................................................ 3224
PriceStopLimit
................................................................................................................ 3225
Symbol
................................................................................................................ 3226
Comment ................................................................................................................ 3227
InfoInteger................................................................................................................ 3228
InfoDouble ................................................................................................................ 3229
InfoString ................................................................................................................ 3230
Ticket
................................................................................................................ 3231
SelectByIndex
................................................................................................................ 3232
2000-2014, MetaQuotes Software Corp.

36

Contedo
CPositionInfo
......................................................................................................................... 3233
Time
................................................................................................................ 3235
TimeMsc ................................................................................................................ 3236
TimeUpdate................................................................................................................ 3237
TimeUpdateMsc
................................................................................................................ 3238
PositionType
................................................................................................................ 3239
TypeDescription
................................................................................................................ 3240
Magic
................................................................................................................ 3241
Identifier ................................................................................................................ 3242
Volume
................................................................................................................ 3243
PriceOpen ................................................................................................................ 3244
StopLoss ................................................................................................................ 3245
TakeProfit ................................................................................................................ 3246
PriceCurrent
................................................................................................................ 3247
Commission................................................................................................................ 3248
Swap
................................................................................................................ 3249
Profit
................................................................................................................ 3250
Symbol
................................................................................................................ 3251
Comment ................................................................................................................ 3252
InfoInteger................................................................................................................ 3253
InfoDouble ................................................................................................................ 3254
InfoString ................................................................................................................ 3255
Select
................................................................................................................ 3256
SelectByIndex
................................................................................................................ 3257
StoreState................................................................................................................ 3258
CheckState................................................................................................................ 3259
CDealInfo
......................................................................................................................... 3260
Order
................................................................................................................ 3262
Time
................................................................................................................ 3263
TimeMsc ................................................................................................................ 3264
DealType ................................................................................................................ 3265
TypeDescription
................................................................................................................ 3266
Entry
................................................................................................................ 3267
EntryDescription
................................................................................................................ 3268
Magic
................................................................................................................ 3269
PositionId ................................................................................................................ 3270
Volume
................................................................................................................ 3271
Price
................................................................................................................ 3272
Commision ................................................................................................................ 3273
Swap
................................................................................................................ 3274
Profit
................................................................................................................ 3275
Symbol
................................................................................................................ 3276
Comment ................................................................................................................ 3277
InfoInteger................................................................................................................ 3278
InfoDouble ................................................................................................................ 3279
InfoString ................................................................................................................ 3280
Ticket
................................................................................................................ 3281
SelectByIndex
................................................................................................................ 3282
CTrade ......................................................................................................................... 3283
LogLevel ................................................................................................................ 3287
SetExpertMagicNumber
................................................................................................................ 3288
SetDeviationInPoints
................................................................................................................ 3289
SetTypeFilling
................................................................................................................ 3290
SetAsyncMode
................................................................................................................ 3291
OrderOpen................................................................................................................ 3292
OrderModify
................................................................................................................ 3294
OrderDelete
................................................................................................................ 3295
PositionOpen
................................................................................................................ 3296
2000-2014, MetaQuotes Software Corp.

37

Contedo
PositionModify
................................................................................................................ 3297
PositionClose
................................................................................................................ 3298
Buy
................................................................................................................ 3299
Sell
................................................................................................................ 3300
BuyLimit ................................................................................................................ 3301
BuyStop ................................................................................................................ 3302
SellLimit ................................................................................................................ 3303
SellStop ................................................................................................................ 3304
Request ................................................................................................................ 3305
RequestAction
................................................................................................................ 3306
RequestActionDescription
................................................................................................................ 3307
RequestMagic
................................................................................................................ 3308
RequestOrder
................................................................................................................ 3309
RequestSymbol
................................................................................................................ 3310
RequestVolume
................................................................................................................ 3311
RequestPrice
................................................................................................................ 3312
RequestStopLimit
................................................................................................................ 3313
RequestSL ................................................................................................................ 3314
RequestTP ................................................................................................................ 3315
RequestDeviation
................................................................................................................ 3316
RequestType
................................................................................................................ 3317
RequestTypeDescription
................................................................................................................ 3318
RequestTypeFilling
................................................................................................................ 3319
RequestTypeFillingDescription
................................................................................................................ 3320
RequestTypeTime
................................................................................................................ 3321
RequestTypeTimeDescription
................................................................................................................ 3322
RequestExpiration
................................................................................................................ 3323
RequestComment
................................................................................................................ 3324
Result
................................................................................................................ 3325
ResultRetcode
................................................................................................................ 3326
ResultRetcodeDescription
................................................................................................................ 3327
ResultDeal ................................................................................................................ 3328
ResultOrder
................................................................................................................ 3329
ResultVolume
................................................................................................................ 3330
ResultPrice................................................................................................................ 3331
ResultBid ................................................................................................................ 3332
ResultAsk ................................................................................................................ 3333
ResultComment
................................................................................................................ 3334
CheckResult
................................................................................................................ 3335
CheckResultRetcode
................................................................................................................ 3336
CheckResultRetcodeDescription
................................................................................................................ 3337
CheckResultBalance
................................................................................................................ 3338
CheckResultEquity
................................................................................................................ 3339
CheckResultProfit
................................................................................................................ 3340
CheckResultMargin
................................................................................................................ 3341
CheckResultMarginFree
................................................................................................................ 3342
CheckResultMarginLevel
................................................................................................................ 3343
CheckResultComment
................................................................................................................ 3344
PrintRequest
................................................................................................................ 3345
PrintResult................................................................................................................ 3346
FormatRequest
................................................................................................................ 3347
FormatRequestResult
................................................................................................................ 3348
CTerminalInfo
......................................................................................................................... 3349
Build
................................................................................................................ 3351
IsConnected
................................................................................................................ 3352
IsDLLsAllowed
................................................................................................................ 3353
IsTradeAllowed
................................................................................................................ 3354
IsEmailEnabled
................................................................................................................ 3355
2000-2014, MetaQuotes Software Corp.

38

Contedo
IsFtpEnabled
................................................................................................................ 3356
MaxBars ................................................................................................................ 3357
CodePage ................................................................................................................ 3358
CPUCores ................................................................................................................ 3359
MemoryPhysical
................................................................................................................ 3360
MemoryTotal
................................................................................................................ 3361
MemoryAvailable
................................................................................................................ 3362
MemoryUsed
................................................................................................................ 3363
IsX64
................................................................................................................ 3364
OpenCLSupport
................................................................................................................ 3365
DiskSpace ................................................................................................................ 3366
Language ................................................................................................................ 3367
Name
................................................................................................................ 3368
Company ................................................................................................................ 3369
Path
................................................................................................................ 3370
DataPath ................................................................................................................ 3371
CommonDataPath
................................................................................................................ 3372
InfoInteger................................................................................................................ 3373
InfoString ................................................................................................................ 3374
............................................................................................................................3375
Trading Strategy
Classes
Base classes
.........................................................................................................................
for Expert Advisors
3378
CExpertBase
................................................................................................................ 3379
InitPhase ........................................................................................................... 3381
TrendType........................................................................................................... 3382
UsedSeries........................................................................................................... 3383
EveryTick ........................................................................................................... 3384
Open
........................................................................................................... 3385
High
........................................................................................................... 3386
Low
........................................................................................................... 3387
Close
........................................................................................................... 3388
Spread
........................................................................................................... 3389
Time
........................................................................................................... 3390
TickVolume........................................................................................................... 3391
RealVolume........................................................................................................... 3392
Init
........................................................................................................... 3393
Symbol
........................................................................................................... 3394
Period
........................................................................................................... 3395
Magic
........................................................................................................... 3396
ValidationSettings
........................................................................................................... 3397
SetPriceSeries
........................................................................................................... 3398
SetOtherSeries
........................................................................................................... 3399
InitIndicators
........................................................................................................... 3400
InitOpen ........................................................................................................... 3401
InitHigh ........................................................................................................... 3402
InitLow ........................................................................................................... 3403
InitClose ........................................................................................................... 3404
InitSpread ........................................................................................................... 3405
InitTime ........................................................................................................... 3406
InitTickVolume
........................................................................................................... 3407
InitRealVolume
........................................................................................................... 3408
PriceLevelUnit
........................................................................................................... 3409
StartIndex........................................................................................................... 3410
CompareMagic
........................................................................................................... 3411
CExpert ................................................................................................................ 3412
Init
........................................................................................................... 3416
Magic
........................................................................................................... 3417
InitSignal ........................................................................................................... 3418
InitTrailing........................................................................................................... 3419
2000-2014, MetaQuotes Software Corp.

39

Contedo
InitMoney ........................................................................................................... 3420
InitTrade ........................................................................................................... 3421
Deinit
........................................................................................................... 3422
OnTickProcess
........................................................................................................... 3423
OnTradeProcess
........................................................................................................... 3424
OnTimerProcess
........................................................................................................... 3425
OnChartEventProcess
........................................................................................................... 3426
OnBookEventProcess
........................................................................................................... 3427
MaxOrders........................................................................................................... 3428
Signal
........................................................................................................... 3429
ValidationSettings
........................................................................................................... 3430
InitIndicators
........................................................................................................... 3431
OnTick
........................................................................................................... 3432
OnTrade ........................................................................................................... 3433
OnTimer ........................................................................................................... 3434
OnChartEvent
........................................................................................................... 3435
OnBookEvent
........................................................................................................... 3436
InitParameters
........................................................................................................... 3437
DeinitTrade
........................................................................................................... 3438
DeinitSignal
........................................................................................................... 3439
DeinitTrailing
........................................................................................................... 3440
DeinitMoney
........................................................................................................... 3441
DeinitIndicators
........................................................................................................... 3442
Refresh ........................................................................................................... 3443
Processing........................................................................................................... 3444
CheckOpen........................................................................................................... 3446
CheckOpenLong
........................................................................................................... 3447
CheckOpenShort
........................................................................................................... 3448
OpenLong ........................................................................................................... 3449
OpenShort........................................................................................................... 3450
CheckReverse
........................................................................................................... 3451
CheckReverseLong
........................................................................................................... 3452
CheckReverseShort
........................................................................................................... 3453
ReverseLong
........................................................................................................... 3454
ReverseShort
........................................................................................................... 3455
CheckClose........................................................................................................... 3456
CheckCloseLong
........................................................................................................... 3457
CheckCloseShort
........................................................................................................... 3458
CloseAll ........................................................................................................... 3459
Close
........................................................................................................... 3460
CloseLong ........................................................................................................... 3461
CloseShort........................................................................................................... 3462
CheckTrailingStop
........................................................................................................... 3463
CheckTrailingStopLong
........................................................................................................... 3464
CheckTrailingStopShort
........................................................................................................... 3465
TrailingStopLong
........................................................................................................... 3466
TrailingStopShort
........................................................................................................... 3467
CheckTrailingOrderLong
........................................................................................................... 3468
CheckTrailingOrderShort
........................................................................................................... 3469
TrailingOrderLong
........................................................................................................... 3470
TrailingOrderShort
........................................................................................................... 3471
CheckDeleteOrderLong
........................................................................................................... 3472
CheckDeleteOrderShort
........................................................................................................... 3473
DeleteOrders
........................................................................................................... 3474
DeleteOrder
........................................................................................................... 3475
DeleteOrderLong
........................................................................................................... 3476
DeleteOrderShort
........................................................................................................... 3477
LotOpenLong
........................................................................................................... 3478
2000-2014, MetaQuotes Software Corp.

40

Contedo
LotOpenShort
........................................................................................................... 3479
LotReverse........................................................................................................... 3480
PrepareHistoryDate
........................................................................................................... 3481
HistoryPoint
........................................................................................................... 3482
CheckTradeState
........................................................................................................... 3483
WaitEvent........................................................................................................... 3484
NoWaitEvent
........................................................................................................... 3485
TradeEventPositionStopTake
........................................................................................................... 3486
TradeEventOrderTriggered
........................................................................................................... 3487
TradeEventPositionOpened
........................................................................................................... 3488
TradeEventPositionVolumeChanged
........................................................................................................... 3489
TradeEventPositionModified
........................................................................................................... 3490
TradeEventPositionClosed
........................................................................................................... 3491
TradeEventOrderPlaced
........................................................................................................... 3492
TradeEventOrderModified
........................................................................................................... 3493
TradeEventOrderDeleted
........................................................................................................... 3494
TradeEventNotIdentified
........................................................................................................... 3495
TimeframeAdd
........................................................................................................... 3496
TimeframesFlags
........................................................................................................... 3497
CExpertSignal
................................................................................................................ 3498
BasePrice ........................................................................................................... 3500
UsedSeries........................................................................................................... 3501
Weight
........................................................................................................... 3502
PatternsUsage
........................................................................................................... 3503
General ........................................................................................................... 3504
Ignore
........................................................................................................... 3505
Invert
........................................................................................................... 3506
ThresholdOpen
........................................................................................................... 3507
ThresholdClose
........................................................................................................... 3508
PriceLevel........................................................................................................... 3509
StopLevel ........................................................................................................... 3510
TakeLevel ........................................................................................................... 3511
Expiration........................................................................................................... 3512
Magic
........................................................................................................... 3513
ValidationSettings
........................................................................................................... 3514
InitIndicators
........................................................................................................... 3515
AddFilter ........................................................................................................... 3516
CheckOpenLong
........................................................................................................... 3517
CheckOpenShort
........................................................................................................... 3518
OpenLongParams
........................................................................................................... 3519
OpenShortParams
........................................................................................................... 3520
CheckCloseLong
........................................................................................................... 3521
CheckCloseShort
........................................................................................................... 3522
CloseLongParams
........................................................................................................... 3523
CloseShortParams
........................................................................................................... 3524
CheckReverseLong
........................................................................................................... 3525
CheckReverseShort
........................................................................................................... 3526
CheckTrailingOrderLong
........................................................................................................... 3527
CheckTrailingOrderShort
........................................................................................................... 3528
LongCondition
........................................................................................................... 3529
ShortCondition
........................................................................................................... 3530
Direction ........................................................................................................... 3531
CExpertTrailing
................................................................................................................ 3532
CheckTrailingStopLong
........................................................................................................... 3533
CheckTrailingStopShort
........................................................................................................... 3534
CExpertMoney
................................................................................................................ 3535
Percent ........................................................................................................... 3536
ValidationSettings
........................................................................................................... 3537
2000-2014, MetaQuotes Software Corp.

41

Contedo
CheckOpenLong
........................................................................................................... 3538
CheckOpenShort
........................................................................................................... 3539
CheckReverse
........................................................................................................... 3540
CheckClose........................................................................................................... 3541
Modules.........................................................................................................................
of Trade Signals
3542
Signals of the
................................................................................................................
Indicator Accelerator Oscillator
3545
Signals of the
................................................................................................................
Indicator Adaptive Moving Average
3548
Signals of the
................................................................................................................
Indicator Awesome Oscillator
3552
Signals of the
................................................................................................................
Oscillator Bears Power
3556
Signals of the
................................................................................................................
Oscillator Bulls Power
3558
Signals of the
................................................................................................................
Oscillator Commodity Channel Index
3560
Signals of the
................................................................................................................
Oscillator DeMarker
3564
Signals of the
................................................................................................................
Indicator Double Exponential Moving Average
3568
Signals of the
................................................................................................................
Indicator Envelopes
3572
Signals of the
................................................................................................................
Indicator Fractal Adaptive Moving Average
3575
Signals of the
................................................................................................................
Intraday Time Filter
3579
Signals of the
................................................................................................................
Oscillator MACD
3581
Signals of the
................................................................................................................
Indicator Moving Average
3587
Signals of the
................................................................................................................
Indicator Parabolic SAR
3591
Signals of the
................................................................................................................
Oscillator Relative Strength Index
3593
Signals of the
................................................................................................................
Oscillator Relative Vigor Index
3599
Signals of the
................................................................................................................
Oscillator Stochastic
3601
Signals of the
................................................................................................................
Oscillator Triple Exponential Average
3606
Signals of the
................................................................................................................
Indicator Triple Exponential Moving Average
3610
Signals of the
................................................................................................................
Oscillator Williams Percent Range
3614
Trailing.........................................................................................................................
Stop Classes
3617
CTrailingFixedPips
................................................................................................................ 3618
StopLevel ........................................................................................................... 3619
ProfitLevel........................................................................................................... 3620
ValidationSettings
........................................................................................................... 3621
CheckTrailingStopLong
........................................................................................................... 3622
CheckTrailingStopShort
........................................................................................................... 3623
CTrailingMA................................................................................................................ 3624
Period
........................................................................................................... 3625
Shift
........................................................................................................... 3626
Method ........................................................................................................... 3627
Applied
........................................................................................................... 3628
InitIndicators
........................................................................................................... 3629
ValidationSettings
........................................................................................................... 3630
CheckTrailingStopLong
........................................................................................................... 3631
CheckTrailingStopShort
........................................................................................................... 3632
CTrailingNone
................................................................................................................ 3633
CheckTrailingStopLong
........................................................................................................... 3634
CheckTrailingStopShort
........................................................................................................... 3635
CTrailingPSAR
................................................................................................................ 3636
Step
........................................................................................................... 3637
Maximum ........................................................................................................... 3638
InitIndicators
........................................................................................................... 3639
CheckTrailingStopLong
........................................................................................................... 3640
CheckTrailingStopShort
........................................................................................................... 3641
Money Management
.........................................................................................................................
Classes
3642
CMoneyFixedLot
................................................................................................................ 3643
Lots
........................................................................................................... 3644
ValidationSettings
........................................................................................................... 3645
CheckOpenLong
........................................................................................................... 3646
CheckOpenShort
........................................................................................................... 3647
CMoneyFixedMargin
................................................................................................................ 3648
CheckOpenLong
........................................................................................................... 3649
2000-2014, MetaQuotes Software Corp.

42

Contedo
CheckOpenShort
........................................................................................................... 3650
CMoneyFixedRisk
................................................................................................................ 3651
CheckOpenLong
........................................................................................................... 3652
CheckOpenShort
........................................................................................................... 3653
CMoneyNone
................................................................................................................ 3654
ValidationSettings
........................................................................................................... 3655
CheckOpenLong
........................................................................................................... 3656
CheckOpenShort
........................................................................................................... 3657
CMoneySizeOptimized
................................................................................................................ 3658
DecreaseFactor
........................................................................................................... 3659
ValidationSettings
........................................................................................................... 3660
CheckOpenLong
........................................................................................................... 3661
CheckOpenShort
........................................................................................................... 3662
Classes for............................................................................................................................3663
Control Panels and Dialogs
CPoint ......................................................................................................................... 3665
Move
................................................................................................................ 3666
Shift
................................................................................................................ 3667
Format
................................................................................................................ 3668
CRect ......................................................................................................................... 3669
Left
................................................................................................................ 3670
Top
................................................................................................................ 3671
Right
................................................................................................................ 3672
Bottom ................................................................................................................ 3673
Width
................................................................................................................ 3674
Height
................................................................................................................ 3675
SetBound ................................................................................................................ 3676
Move
................................................................................................................ 3677
Shift
................................................................................................................ 3678
Contains ................................................................................................................ 3679
Format
................................................................................................................ 3680
CWnd ......................................................................................................................... 3681
Create
................................................................................................................ 3684
Destroy ................................................................................................................ 3685
OnEvent ................................................................................................................ 3686
OnMouseEvent
................................................................................................................ 3687
Name
................................................................................................................ 3688
ControlsTotal
................................................................................................................ 3689
Control ................................................................................................................ 3690
ControlFind................................................................................................................ 3691
Rect
................................................................................................................ 3692
Left
................................................................................................................ 3693
Top
................................................................................................................ 3694
Right
................................................................................................................ 3695
Bottom ................................................................................................................ 3696
Width
................................................................................................................ 3697
Height
................................................................................................................ 3698
Move
................................................................................................................ 3699
Shift
................................................................................................................ 3700
Resize
................................................................................................................ 3701
Contains ................................................................................................................ 3702
Alignment ................................................................................................................ 3703
Align
................................................................................................................ 3704
Id
................................................................................................................ 3705
IsEnabled ................................................................................................................ 3706
Enable
................................................................................................................ 3707
Disable
................................................................................................................ 3708
IsVisible ................................................................................................................ 3709
Visible
................................................................................................................ 3710
2000-2014, MetaQuotes Software Corp.

43

Contedo
Show
................................................................................................................ 3711
Hide
................................................................................................................ 3712
IsActive ................................................................................................................ 3713
Activate ................................................................................................................ 3714
Deactivate................................................................................................................ 3715
StateFlags ................................................................................................................ 3716
StateFlagsSet
................................................................................................................ 3717
StateFlagsReset
................................................................................................................ 3718
PropFlags ................................................................................................................ 3719
PropFlagsSet
................................................................................................................ 3720
PropFlagsReset
................................................................................................................ 3721
MouseX
................................................................................................................ 3722
MouseY
................................................................................................................ 3723
MouseFlags................................................................................................................ 3724
MouseFocusKill
................................................................................................................ 3725
OnCreate ................................................................................................................ 3726
OnDestroy ................................................................................................................ 3727
OnMove ................................................................................................................ 3728
OnResize ................................................................................................................ 3729
OnEnable ................................................................................................................ 3730
OnDisable ................................................................................................................ 3731
OnShow ................................................................................................................ 3732
OnHide
................................................................................................................ 3733
OnActivate................................................................................................................ 3734
OnDeactivate
................................................................................................................ 3735
OnClick ................................................................................................................ 3736
OnChange ................................................................................................................ 3737
OnMouseDown
................................................................................................................ 3738
OnMouseUp................................................................................................................ 3739
OnDragStart
................................................................................................................ 3740
OnDragProcess
................................................................................................................ 3741
OnDragEnd................................................................................................................ 3742
DragObjectCreate
................................................................................................................ 3743
DragObjectDestroy
................................................................................................................ 3744
CWndObj
......................................................................................................................... 3745
OnEvent ................................................................................................................ 3747
Text
................................................................................................................ 3748
Color
................................................................................................................ 3749
ColorBackground
................................................................................................................ 3750
ColorBorder
................................................................................................................ 3751
Font
................................................................................................................ 3752
FontSize ................................................................................................................ 3753
ZOrder
................................................................................................................ 3754
OnObjectCreate
................................................................................................................ 3755
OnObjectChange
................................................................................................................ 3756
OnObjectDelete
................................................................................................................ 3757
OnObjectDrag
................................................................................................................ 3758
OnSetText ................................................................................................................ 3759
OnSetColor................................................................................................................ 3760
OnSetColorBackground
................................................................................................................ 3761
OnSetFont ................................................................................................................ 3762
OnSetFontSize
................................................................................................................ 3763
OnSetZOrder
................................................................................................................ 3764
OnDestroy ................................................................................................................ 3765
OnChange ................................................................................................................ 3766
CWndContainer
......................................................................................................................... 3767
Destroy ................................................................................................................ 3769
OnEvent ................................................................................................................ 3770
2000-2014, MetaQuotes Software Corp.

44

Contedo
OnMouseEvent
................................................................................................................ 3771
ControlsTotal
................................................................................................................ 3772
Control ................................................................................................................ 3773
ControlFind................................................................................................................ 3774
Add
................................................................................................................ 3775
Delete
................................................................................................................ 3776
Move
................................................................................................................ 3777
Shift
................................................................................................................ 3778
Id
................................................................................................................ 3779
Enable
................................................................................................................ 3780
Disable
................................................................................................................ 3781
Show
................................................................................................................ 3782
Hide
................................................................................................................ 3783
MouseFocusKill
................................................................................................................ 3784
Save
................................................................................................................ 3785
Load
................................................................................................................ 3786
OnResize ................................................................................................................ 3787
OnActivate................................................................................................................ 3788
OnDeactivate
................................................................................................................ 3789
CLabel ......................................................................................................................... 3790
Create
................................................................................................................ 3791
OnSetText ................................................................................................................ 3792
OnSetColor................................................................................................................ 3793
OnSetFont ................................................................................................................ 3794
OnSetFontSize
................................................................................................................ 3795
OnCreate ................................................................................................................ 3796
OnShow ................................................................................................................ 3797
OnHide
................................................................................................................ 3798
OnMove ................................................................................................................ 3799
CBmpButton
......................................................................................................................... 3800
Create
................................................................................................................ 3802
Border
................................................................................................................ 3803
BmpNames ................................................................................................................ 3804
BmpOffName
................................................................................................................ 3805
BmpOnName
................................................................................................................ 3806
BmpPassiveName
................................................................................................................ 3807
BmpActiveName
................................................................................................................ 3808
Pressed ................................................................................................................ 3809
Locking ................................................................................................................ 3810
OnSetZOrder
................................................................................................................ 3811
OnCreate ................................................................................................................ 3812
OnShow ................................................................................................................ 3813
OnHide
................................................................................................................ 3814
OnMove ................................................................................................................ 3815
OnChange ................................................................................................................ 3816
OnActivate................................................................................................................ 3817
OnDeactivate
................................................................................................................ 3818
OnMouseDown
................................................................................................................ 3819
OnMouseUp................................................................................................................ 3820
CButton......................................................................................................................... 3821
Create
................................................................................................................ 3823
Pressed ................................................................................................................ 3824
Locking ................................................................................................................ 3825
OnSetText ................................................................................................................ 3826
OnSetColor................................................................................................................ 3827
OnSetColorBackground
................................................................................................................ 3828
OnSetColorBorder
................................................................................................................ 3829
OnSetFont ................................................................................................................ 3830
2000-2014, MetaQuotes Software Corp.

45

Contedo
OnSetFontSize
................................................................................................................ 3831
OnCreate ................................................................................................................ 3832
OnShow ................................................................................................................ 3833
OnHide
................................................................................................................ 3834
OnMove ................................................................................................................ 3835
OnResize ................................................................................................................ 3836
OnMouseDown
................................................................................................................ 3837
OnMouseUp................................................................................................................ 3838
CEdit ......................................................................................................................... 3839
Create
................................................................................................................ 3841
ReadOnly ................................................................................................................ 3842
TextAlign ................................................................................................................ 3843
OnObjectEndEdit
................................................................................................................ 3844
OnSetText ................................................................................................................ 3845
OnSetColor................................................................................................................ 3846
OnSetColorBackground
................................................................................................................ 3847
OnSetColorBorder
................................................................................................................ 3848
OnSetFont ................................................................................................................ 3849
OnSetFontSize
................................................................................................................ 3850
OnSetZOrder
................................................................................................................ 3851
OnCreate ................................................................................................................ 3852
OnShow ................................................................................................................ 3853
OnHide
................................................................................................................ 3854
OnMove ................................................................................................................ 3855
OnResize ................................................................................................................ 3856
OnChange ................................................................................................................ 3857
OnClick ................................................................................................................ 3858
CPanel ......................................................................................................................... 3859
Create
................................................................................................................ 3860
BorderType................................................................................................................ 3861
OnSetText ................................................................................................................ 3862
OnSetColorBackground
................................................................................................................ 3863
OnSetColorBorder
................................................................................................................ 3864
OnCreate ................................................................................................................ 3865
OnShow ................................................................................................................ 3866
OnHide
................................................................................................................ 3867
OnMove ................................................................................................................ 3868
OnResize ................................................................................................................ 3869
OnChange ................................................................................................................ 3870
CPicture
......................................................................................................................... 3871
Create
................................................................................................................ 3872
Border
................................................................................................................ 3873
BmpName ................................................................................................................ 3874
OnCreate ................................................................................................................ 3875
OnShow ................................................................................................................ 3876
OnHide
................................................................................................................ 3877
OnMove ................................................................................................................ 3878
OnChange ................................................................................................................ 3879
CScroll ......................................................................................................................... 3880
Create
................................................................................................................ 3882
OnEvent ................................................................................................................ 3883
MinPos
................................................................................................................ 3884
MaxPos
................................................................................................................ 3885
CurrPos ................................................................................................................ 3886
CreateBack................................................................................................................ 3887
CreateInc ................................................................................................................ 3888
CreateDec................................................................................................................ 3889
CreateThumb
................................................................................................................ 3890
2000-2014, MetaQuotes Software Corp.

46

Contedo
OnClickInc................................................................................................................ 3891
OnClickDec................................................................................................................ 3892
OnShow ................................................................................................................ 3893
OnHide
................................................................................................................ 3894
OnChangePos
................................................................................................................ 3895
OnThumbDragStart
................................................................................................................ 3896
OnThumbDragProcess
................................................................................................................ 3897
OnThumbDragEnd
................................................................................................................ 3898
CalcPos ................................................................................................................ 3899
CScrollV......................................................................................................................... 3900
CreateInc ................................................................................................................ 3901
CreateDec................................................................................................................ 3902
CreateThumb
................................................................................................................ 3903
OnResize ................................................................................................................ 3904
OnChangePos
................................................................................................................ 3905
OnThumbDragStart
................................................................................................................ 3906
OnThumbDragProcess
................................................................................................................ 3907
OnThumbDragEnd
................................................................................................................ 3908
CalcPos ................................................................................................................ 3909
CScrollH......................................................................................................................... 3910
CreateInc ................................................................................................................ 3911
CreateDec................................................................................................................ 3912
CreateThumb
................................................................................................................ 3913
OnResize ................................................................................................................ 3914
OnChangePos
................................................................................................................ 3915
OnThumbDragStart
................................................................................................................ 3916
OnThumbDragProcess
................................................................................................................ 3917
OnThumbDragEnd
................................................................................................................ 3918
CalcPos ................................................................................................................ 3919
CWndClient
......................................................................................................................... 3920
Create
................................................................................................................ 3922
OnEvent ................................................................................................................ 3923
ColorBackground
................................................................................................................ 3924
ColorBorder
................................................................................................................ 3925
BorderType................................................................................................................ 3926
VScrolled ................................................................................................................ 3927
HScrolled ................................................................................................................ 3928
CreateBack................................................................................................................ 3929
CreateScrollV
................................................................................................................ 3930
CreateScrollH
................................................................................................................ 3931
OnResize ................................................................................................................ 3932
OnVScrollShow
................................................................................................................ 3933
OnVScrollHide
................................................................................................................ 3934
OnHScrollShow
................................................................................................................ 3935
OnHScrollHide
................................................................................................................ 3936
OnScrollLineDown
................................................................................................................ 3937
OnScrollLineUp
................................................................................................................ 3938
OnScrollLineLeft
................................................................................................................ 3939
OnScrollLineRight
................................................................................................................ 3940
Rebound ................................................................................................................ 3941
CListView
......................................................................................................................... 3942
Create
................................................................................................................ 3944
OnEvent ................................................................................................................ 3945
TotalView ................................................................................................................ 3946
AddItem ................................................................................................................ 3947
Select
................................................................................................................ 3948
SelectByText
................................................................................................................ 3949
SelectByValue
................................................................................................................ 3950
2000-2014, MetaQuotes Software Corp.

47

Contedo
Value
................................................................................................................ 3951
CreateRow................................................................................................................ 3952
OnResize ................................................................................................................ 3953
OnVScrollShow
................................................................................................................ 3954
OnVScrollHide
................................................................................................................ 3955
OnScrollLineDown
................................................................................................................ 3956
OnScrollLineUp
................................................................................................................ 3957
OnItemClick
................................................................................................................ 3958
Redraw
................................................................................................................ 3959
RowState ................................................................................................................ 3960
CheckView................................................................................................................ 3961
CComboBox
......................................................................................................................... 3962
Create
................................................................................................................ 3964
OnEvent ................................................................................................................ 3965
AddItem ................................................................................................................ 3966
ListViewItems
................................................................................................................ 3967
Select
................................................................................................................ 3968
SelectByText
................................................................................................................ 3969
SelectByValue
................................................................................................................ 3970
Value
................................................................................................................ 3971
CreateEdit................................................................................................................ 3972
CreateButton
................................................................................................................ 3973
CreateList................................................................................................................ 3974
OnClickEdit................................................................................................................ 3975
OnClickButton
................................................................................................................ 3976
OnChangeList
................................................................................................................ 3977
ListShow ................................................................................................................ 3978
ListHide ................................................................................................................ 3979
CCheckBox
......................................................................................................................... 3980
Create
................................................................................................................ 3981
OnEvent ................................................................................................................ 3982
Text
................................................................................................................ 3983
Color
................................................................................................................ 3984
Checked ................................................................................................................ 3985
Value
................................................................................................................ 3986
CreateButton
................................................................................................................ 3987
CreateLabel
................................................................................................................ 3988
OnClickButton
................................................................................................................ 3989
OnClickLabel
................................................................................................................ 3990
CCheckGroup
......................................................................................................................... 3991
Create
................................................................................................................ 3993
OnEvent ................................................................................................................ 3994
AddItem ................................................................................................................ 3995
Value
................................................................................................................ 3996
CreateButton
................................................................................................................ 3997
OnVScrollShow
................................................................................................................ 3998
OnVScrollHide
................................................................................................................ 3999
OnScrollLineDown
................................................................................................................ 4000
OnScrollLineUp
................................................................................................................ 4001
OnChangeItem
................................................................................................................ 4002
Redraw
................................................................................................................ 4003
RowState ................................................................................................................ 4004
CRadioButton
......................................................................................................................... 4005
Create
................................................................................................................ 4006
OnEvent ................................................................................................................ 4007
Text
................................................................................................................ 4008
Color
................................................................................................................ 4009
State
................................................................................................................ 4010
2000-2014, MetaQuotes Software Corp.

48

Contedo
CreateButton
................................................................................................................ 4011
CreateLabel
................................................................................................................ 4012
OnClickButton
................................................................................................................ 4013
OnClickLabel
................................................................................................................ 4014
CRadioGroup
......................................................................................................................... 4015
Create
................................................................................................................ 4017
OnEvent ................................................................................................................ 4018
AddItem ................................................................................................................ 4019
Value
................................................................................................................ 4020
CreateButton
................................................................................................................ 4021
OnVScrollShow
................................................................................................................ 4022
OnVScrollHide
................................................................................................................ 4023
OnScrollLineDown
................................................................................................................ 4024
OnScrollLineUp
................................................................................................................ 4025
OnChangeItem
................................................................................................................ 4026
Redraw
................................................................................................................ 4027
RowState ................................................................................................................ 4028
Select
................................................................................................................ 4029
CSpinEdit
......................................................................................................................... 4030
Create
................................................................................................................ 4031
OnEvent ................................................................................................................ 4032
MinValue ................................................................................................................ 4033
MaxValue ................................................................................................................ 4034
Value
................................................................................................................ 4035
CreateEdit................................................................................................................ 4036
CreateInc ................................................................................................................ 4037
CreateDec................................................................................................................ 4038
OnClickInc................................................................................................................ 4039
OnClickDec................................................................................................................ 4040
OnChangeValue
................................................................................................................ 4041
CDialog......................................................................................................................... 4042
Create
................................................................................................................ 4044
OnEvent ................................................................................................................ 4045
Caption ................................................................................................................ 4046
Add
................................................................................................................ 4047
CreateWhiteBorder
................................................................................................................ 4048
CreateBackground
................................................................................................................ 4049
CreateCaption
................................................................................................................ 4050
CreateButtonClose
................................................................................................................ 4051
CreateClientArea
................................................................................................................ 4052
OnClickCaption
................................................................................................................ 4053
OnClickButtonClose
................................................................................................................ 4054
ClientAreaVisible
................................................................................................................ 4055
ClientAreaLeft
................................................................................................................ 4056
ClientAreaTop
................................................................................................................ 4057
ClientAreaRight
................................................................................................................ 4058
ClientAreaBottom
................................................................................................................ 4059
ClientAreaWidth
................................................................................................................ 4060
ClientAreaHeight
................................................................................................................ 4061
OnDialogDragStart
................................................................................................................ 4062
OnDialogDragProcess
................................................................................................................ 4063
OnDialogDragEnd
................................................................................................................ 4064
CAppDialog
......................................................................................................................... 4065
Create
................................................................................................................ 4067
Destroy ................................................................................................................ 4068
OnEvent ................................................................................................................ 4069
Run
................................................................................................................ 4070
ChartEvent................................................................................................................ 4071
2000-2014, MetaQuotes Software Corp.

49

Contedo
Minimized ................................................................................................................ 4072
SaveIniFile ................................................................................................................ 4073
LoadIniFile................................................................................................................ 4074
IniFileName................................................................................................................ 4075
IniFileExt ................................................................................................................ 4076
CreateCommon
................................................................................................................ 4077
CreateExpert
................................................................................................................ 4078
CreateIndicator
................................................................................................................ 4079
CreateButtonMinMax
................................................................................................................ 4080
OnClickButtonClose
................................................................................................................ 4081
OnClickButtonMinMax
................................................................................................................ 4082
OnAnotherApplicationClose
................................................................................................................ 4083
Rebound ................................................................................................................ 4084
Minimize ................................................................................................................ 4085
Maximize ................................................................................................................ 4086
CreateInstanceId
................................................................................................................ 4087
ProgramName
................................................................................................................ 4088
SubwinOff ................................................................................................................ 4089

26

Migrando do .................................................................................................
MQL4
4090

2000-2014, MetaQuotes Software Corp.

50

Referncia MQL5
A linguagem MetaQuotes 5 (MQL5) uma linguagem incorporada para programao de estratgias de
negociao. Este linguagem desenvolvida pela MetaQuotes Software Corp. baseada em sua longa
experincia na criao de plataformas de negociao online. Usando esta linguagem, voc pode criar
seus prprios Expert Advisors que fazem gerenciamento automtico de negociao e so
perfeitamente adequados para implementar suas estratgias de negociao. Alm disso, usando MQL5
voc pode criar seus prprios indicadores tcnicos (indicadores customizados), scripts (cdigos
avulsos) e bibliotecas (libraries).
O MQL5 contm um grande nmero de funes necessrias para analisar as cotaes corrente e
previamente recebidas, e tem indicadores bsicos embutidos e funes para gerenciar posies de
negociao (trade) e control-las. O MetaEditor 5 (editor de texto), que destaca diferentes
construtores da linguagem MQL5, usado para escrever o cdigo do programa. Ele ajuda usurios a se
orientarem no texto do sistema especiado com bastante facilidade.
Um breve guia contm funes, operaes, palavras reservadas, e outras construes de linguagem
divididas em categorias, e permite encontrar a descrio de todos os elemento usados na linguagem.
Programas escritos na linguagem MetaQuotes 5 tm diferentes caractersticas e propsitos:
Expert Advisor um sistema de negociao mecnico associado a um certo grfico. Um Expert
Advisor comea a rodar quando um evento que pode ser manipulado por ele ocorre: eventos de
inicializao e desinicializao, evento de recepo de novo preo (tick), um evento de timer,
evento de mudana na Profundidade do Mercado, evento de grfico e eventos customizados.
Um Expert Advisor pode tanto informar sobre uma possibilidade de negociao quanto
automaticamente negociar sob uma conta enviando ordens diretamente ao servidor de negociao.
Expert Advisors so armazenados em terminal_directory\MQL5\Experts.
Indicador customizado um indicador tcnico escrito de forma independente, em acrscimo aos j
integrados ao terminal cliente. Como os indicadores embutidos, eles no podem negociar
automaticamente e so destinados a implementao de funes analticas somente.
Indicadores customizados so armazenados em terminal_directory\MQL5\Indicators
Script (Cdigo avulso) um programa destinado a uma nica execuo de algumas aes.
Diferentemente de Expert Advisors, scripts no processam quaisquer aes, exceto o evento start
(isso requer que a funo de manipulao OnStart() esteja presente no script). Scripts so
armazenados em terminal_directory\MQL5\Scripts
Library (Biblioteca) um conjunto de funes customizadas destinado a armazenar e distribuir
blocos de programas customizados usados frequentemente. Bibliotecas (libraries) no podem
comear uma execuo por si mesmas.
Bibliotecas so armazenadas em terminal_directory\MQL5\Libraries
Arquivo includo um texto fonte com blocos de programas customizados utilizados com mais
freqncia. Tais arquivos podem ser includos nos textos fonte de Expert Advisors, scripts,
indicadores customizados, e bibliotecas (libraries) na etapa de compilao. O uso de arquivos
includos mais prefervel ao o uso de bibliotecas (libraries) por causa da custo adicional que ocorre
na chamada de funes de biblioteca (library).
Include files podem ser armazenados no mesmo diretrio do arquivo fonte - neste caso a diretiva
#include com aspas duplas usado. Um outro lugar para armazenar include files terminal_directory
\MQL5\Include, neste caso a diretiva #include usado entre colchetes.

2000-2014, MetaQuotes Software Corp.

51

2000-2014, MetaQuotes Software Corp.

2000-2014, MetaQuotes Software Corp.

52

Elementos Bsicos da Linguagem

Elementos Bsicos da Linguagem


A Linguagem MetaQuotes 5 (MQL5) uma linguagem orientado a objetos de alto nvel destinado para
escrever estratgias de negociao automatizadas, e indicadores tcnicos customizados para a a
anlise de vrios mercados financeiros. Ele permite no somente escrever uma variedade de sistemas
especialistas, concebidos para operar em tempo real, mas tambm criar suas prprias ferramentas
grficas para ajudar voc a tomar decises de negociao (trade).
MQL5 baseado no conceito da popular linguagem de programao C++. Em comparao com MQL4, a
nova linguagem tem agora enumeradores, estruturas, classes e manipulao de evento. Ao aumentar
o nmero de tipos principais incorporados, a interao dos programas executveis em MQL5 com
outros aplicativos atravs de dll agora to fcil quanto possvel. A sintaxe do MQL5 similar
sintaxe do C++, e isso faz com que seja fcil traduzir para ele programas de linguagens modernas de
programao.
Para ajudar voc a estudar a linguagem MQL5, todos os tpicos esto agrupados nas seguintes sees:
Sintaxe
Tipos de Dados
Operaes e Expresses
Operadores
Funes
Variveis
Preprocessador
Programao Orientada a Objetos

2000-2014, MetaQuotes Software Corp.

53

Elementos Bsicos da Linguagem

Sintaxe
Quanto sintaxe, a linguagem MQL5 para programao de estratgias de negociao muito similar
linguagem de programao C++, com exceo de alguns recursos:
ausncia de aritmtica com endereo
ausncia do operador goto
um enumerador annimo no pode ser declarado
ausncia de herana mltipla
Tambm Veja
Enumeradores, Estruturas e Classes, Herana

2000-2014, MetaQuotes Software Corp.

54

Elementos Bsicos da Linguagem

Comentrios
Comentrios de mltiplas linhas comeam com o par de smbolos /* e terminam com o par */. Este
tipo de comentrio no pode ser aninhado. Comentrios de linha nica comeam com o par de
smbolos // e terminam com o caractere newline, eles podem ser aninhados em outros comentrios de
mltiplas linhas. Comentrios so permitidos em todos os lugares onde os espaos so permitidos,
eles podem conter qualquer nmero de espaos.
Exemplos:
//--- Comentrio de linha nica
/*

Comentrio

de mltiplas

linhas

// Comentrio de linha nica aninhada

*/

2000-2014, MetaQuotes Software Corp.

55

Elementos Bsicos da Linguagem

Identificadores
Identificadores so usados como nomes de variveis e funes. O comprimento de um identificador
no pode exceder 63 caracteres.
Caracteres permitidos na formao de um identificador: nmeros 0-9, as letras maisculas e
minsculas latinas a-z e A-Z, reconhecidos como caracteres diferentes, o caractere sublinhado (_). O
primeiro caractere no pode ser um dgito.
O identificador no deve coincidir com uma palavra reservada.
Exemplos:
NAME1 namel Total_5 Paper

Tambm Veja
Variveis, Funes

2000-2014, MetaQuotes Software Corp.

56

Elementos Bsicos da Linguagem

Palavras Reservadas
Os seguintes identificadores so registrados como palavras reservadas, cada uma delas corresponde a
uma certa ao, e no pode ser usada com outro significado:
Tipos de Dados
bool

enum

struct

char

float

uchar

class

int

uint

color

long

ulong

datetime

short

ushort

double

string

void

const

private

protected

public

virtual

Especificadores de Acesso

Classes de Memria
extern

input

static

break

do

operator

case

else

return

continue

for

sizeof

default

if

switch

delete

new

while

false

#define

#property

this

#import

template

true

#include

typename

Operadores

Outros

2000-2014, MetaQuotes Software Corp.

57

Elementos Bsicos da Linguagem

2000-2014, MetaQuotes Software Corp.

58

Elementos Bsicos da Linguagem

Tipos de Dados
Qualquer programa funciona com dados. Os dados podem ser de diferentes tipos dependendo da sua
finalidade. Por exemplo, dados inteiros so usados para acessar componentes de arrays. Dados de
preo pertencem ao tipo de dupla preciso com ponto flutuante. Isso est relacionado ao fato de que
nenhum tipo de dados especial para detalhes de preo fornecido pelo MQL5.
Dados de diferentes tipos so processados com diferentes taxas. Dados inteiros so os de
processamento mais rpido. Para processar dados de dupla preciso, um co-processador especial
utilizado. No entanto, por causa da complexidade da representao interna de dados com ponto
flutuante, eles so processados mais devagar que os dados inteiros.
Dados do tipo string so os de processamento mais lento por causa da alocao/realocao dinmica
de memria de computador.
Os tipos bsicos de dado so:
inteiros (char, short, int, long, uchar, ushort, uint, ulong);
lgico (bool);
literais (ushort);
strings (string);
nmeros com ponto flutuante (double, float);
cor (color);
data e hora(datetime);
enumeradores (enum).
Os tipos complexos de dado so:
estruturas;
classes.
Em termos de OOP tipos de dados complexos so chamados de tipos de dados abstratos.
Os tipos color e datetime fazem sentido apenas para facilitar a entrada e visualizao de parmetros
definidos do lado de fora - a partir da tabela de um Expert Advisor ou propriedades de um indicador
customizado (o guia Entradas). Dados de cor (color) e data e hora (datetime) so representados como
inteiros. Tipos inteiros e tipos de ponto flutuante so chamados tipos aritmticos (numricos).
Apenas converses de tipo (type casting) implcitas so usadas em expresses, a menos que uma
converso (casting) explcita seja especificado.
Tambm Veja
Converso de Tipo (Typecasting)

2000-2014, MetaQuotes Software Corp.

59

Elementos Bsicos da Linguagem

Tipos Inteiros
Em MQL5, os inteiros so representados por onze tipos. Alguns tipos podem ser utilizados em conjunto
com outros tipos, se exigido pela lgica do programa, mas neste caso necessrio lembrar as regras
de converso de tipos.
A tabela abaixo lista as caractersticas de cada tipo. Alm disso, a ltima coluna apresenta o tipo
correspondente em C++ para cada tipo.
Tipo

Tamanho
Bytes

char

em

Valor Mnimo

Valor Mximo

C++ Anlogo

-128

127

char

uchar

255

unsigned
BYTE

bool

0(false)

1(true)

bool

short

-32 768

32 767

short, wchar_t

ushort

65 535

unsigned
WORD

int

- 2 147 483 648

2 147 483 647

int

uint

4 294 967 295

unsigned
DWORD

color

-1

16 777 215

int, COLORREF

long

-9 223 372 036


854 775 808

9 223 372 036


854 775 807

__int64

ulong

18 446 744 073


709 551 615

unsigned __int64

datetime

0
(1970.01.01
0:00:00)

32 535 244 799


(3000.12.31
23:59:59)

__time64_t

char,

short,

int,

Valores do tipo integer podem ser apresentados como constantes numricas, literais de cor, literais de
data-hora, constantes de caractere e enumeradores.
Tambm Veja
Converso de Dados, Constantes de Tipos Numricos

2000-2014, MetaQuotes Software Corp.

60

Elementos Bsicos da Linguagem

Tipos char, short, int e long


char
O tipo char usa 1 byte de memria (8 bits) e permite expressar em notao binria 2^8=256 valores. O
tipo char pode conter tanto valores positivos quanto negativos. A faixa de valores de -128 a 127.

uchar
O tipo inteiro uchar tambm ocupa 1 byte de memria, assim como o tipo char , mas diferente dele
uchar destinado apenas para valores positivos. O valor mnimo zero, o valor mximo 255. A
primeira letra u no nome do tipo uchar abreviatura de unsigned (sem sinal).

short
O tamanho do tipo short de 2 bytes (16 bits) e, conseqentemente, ele permite expressar a faixa de
valores igual a 2 elevado a 16: 2^16 = 65 536. Como o tipo short um tipo com sinal, e contm tanto
valores positivos quanto negativos, a faixa de valores entre -32 768 e 32 767.

ushort
O tipo short sem sinal o tipo ushort, que tambm tem 2 bytes de tamanho. O valor mnimo 0, o
valor mximo 65 535.

int
O tamanho do tipo int de 4 bytes (32 bits). O valor mnimo -2 147 483 648, o valor mximo 2 147
483 647.

uint
O tipo integer sem sinal uint. Ele usa 4 bytes de memria e permite expressar inteiros de 0 a 4 294
967 295.

long
O tamanho do tipo long de 8 bytes (64 bits). O valor mnimo -9 223 372 036 854 775 808, o valor
mximo 9 223 372 036 854 775 807.

ulong
O tipo ulong tambm ocupa 8 bytes e pode armazenar valores de 0 a 18 446 744 073 709 551 615.
Exemplos:
char

ch=12;

short sh=-5000;
int

in=2445777;

2000-2014, MetaQuotes Software Corp.

61

Elementos Bsicos da Linguagem


Como os tipo inteiros sem sinal no so concebidos para armazenar valores negativos, a tentativa de
atribuir um valor negativo pode levar a conseqncias inesperadas. Este simples script levar a um
loop infinito:
//--- Loop infinito
void OnStart()
{
uchar

u_ch;

for(char ch=-128;ch<128;ch++)
{
u_ch=ch;
Print("ch = ",ch," u_ch = ",u_ch);
}
}

A variante correta :
//--- Variante correta
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;
}
}

Resultado:
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

2000-2014, MetaQuotes Software Corp.

62

Elementos Bsicos da Linguagem


ch= -111

u_ch= 145

...

Exemplos:
//--- Valores negativos no podem ser armazenados em tipos sem sinal
uchar

u_ch=-120;

ushort u_sh=-5000;
uint

u_in=-401280;

Hexadecimal: nmeros 0-9, as letras a-f ou A-F para os valores de 10-15; comeam com 0x ou 0X.
Exemplos:
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 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 one and up to 23 inclusively
for(int i=0;i<24;i++)

2000-2014, MetaQuotes Software Corp.

63

Elementos Bsicos da Linguagem


{
//--- receive bit state in number
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;
}

Tambm Veja
Converso de Tipo (Typecasting)

2000-2014, MetaQuotes Software Corp.

64

Elementos Bsicos da Linguagem

Constantes de Caracteres
Os caracteres como elementos de uma string,em MQL5, so ndices do conjunto de caracteres
Unicode. Eles so valores hexadecimais que podem ser convertidos para inteiros, e que podem ser
manipulados por operaes com inteiros como adio e subtrao.
Qualquer caractere nico entre aspas simples ou um cdigo hexadecimal ASCII de um caractere como
'\x10' um caractere constante e do tipo ushort. Por exemplo, uma anotao do tipo '0' representa o
valor numrico 30, que corresponde ao ndice do zero na tabela de caracteres.
Exemplo:
void OnStart()
{
//--- define constantes de caracteres
int symbol_0='0';
int symbol_9=symbol_0+9; // obtm o smbolo '9'
//--- valores de sada de constantes
printf("Num formato decimal: symbol_0 = %d,

symbol_9 = %d",symbol_0,symbol_9);

printf("Num formato hexadecimal: symbol_0 = 0x%x,

symbol_9 = 0x%x",symbol_0,symbol_9);

//--- entrada de constantes em uma string


string test="";
StringSetCharacter(test,0,symbol_0);
StringSetCharacter(test,1,symbol_9);
//--- isso como eles se apresentam em uma string
Print(test);
}

Uma barra invertida (\) um caractere de controle para o compilador ao lidar com strings constantes e
constantes caracteres no texto fonte de um programa. Alguns smbolos, por exemplo uma aspas
simples ('), aspas duplas ("), barra invertida (\) e caracteres de controle podem ser representados
como combinao de smbolos que comeam com uma barra invertida (\), de acordo com a tabela
abaixo:
Nome do Caractere

Cdigo Mnemnico
ou imagem

Anotao em MQL5

Valor Numrico

linha nova (line feed)

LF

'\n'

13

tab horizontal

HT

'\t'

retorno de carro

CR

'\r'

10

barra invertida

'\\'

92

aspas simples

'

'\''

39

aspas duplas

"

'\"'

34

cdigo hexadecimal

hhhh

'\xhhhh'

1 a 4 caracteres
hexadecimais

cdigo decimal

'\d'

nmero decimal de 0
a 65535

2000-2014, MetaQuotes Software Corp.

65

Elementos Bsicos da Linguagem


Caso uma barra invertida seja seguida por outro caractere no descrito acima, o resultado
indefinido.
Exemplo
void OnStart()
{
//--- declara constantes de caracteres
int a='A';
int b='$';
int c='';

// cdigo 0xA9

int d='\xAE';

// cdigo do smbolo

//--- sada imprime constantes


Print(a,b,c,d);
//--- acrescenta um caractere na string
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,b);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,c);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,d);
Print(test);
//--- representa caracteres como nmero
int a1=65;
int b1=36;
int c1=169;
int d1=174;
//--- acrescenta um caractere na string
StringSetCharacter(test,1,a1);
Print(test);
//--- acrescenta um caractere na string
StringSetCharacter(test,1,b1);
Print(test);
//--- acrescenta um caractere na string
StringSetCharacter(test,1,c1);
Print(test);
//--- acrescenta um caractere na string
StringSetCharacter(test,1,d1);
Print(test);
}

Como foi mencionado acima, o valor de uma constante caractere (ou varivel) o valor do ndice na
tabela de caracteres. Sendo o ndice um inteiro, pode ser escrito de diferentes maneiras.
void OnStart()

2000-2014, MetaQuotes Software Corp.

66

Elementos Bsicos da Linguagem


{
//--int a=0xAE;

// o cdigo de corresponde ao literal '\xAE'

int b=0x24;

// o cdigo de $ corresponde ao literal '\x24'

int c=0xA9;

// o cdigo de corresponde ao literal '\xA9'

int d=0x263A;

// o cdigo de corresponde ao literal '\x263A'

//--- mostrar valores


Print(a,b,c,d);
//--- acrescenta um caractere na string
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,b);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,c);
Print(test);
//--- substitui um caractere na string
StringSetCharacter(test,0,d);
Print(test);
//--- cdigo de terno carto
int a1=0x2660;
int b1=0x2661;
int c1=0x2662;
int d1=0x2663;
//--- acrescenta um caractere de espadas
StringSetCharacter(test,1,a1);
Print(test);
//--- acrescenta um caractere de copas
StringSetCharacter(test,2,b1);
Print(test);
//--- acrescenta um caractere de ouros
StringSetCharacter(test,3,c1);
Print(test);
//--- acrescenta um caractere de paus
StringSetCharacter(test,4,d1);
Print(test);
//--- Exemplo de literais de caractere em uma string
test="Rainha\x2660s\x2662";
printf("%s",test);
}

A representao internal de um literal de caractere do tipo ushort. Constantes de caracteres podem


aceitar valores de 0 a 65535.
Tambm Veja
StringSetCharacter(), StringGetCharacter(), ShortToString(), ShortArrayToString(),
StringToShortArray()

2000-2014, MetaQuotes Software Corp.

67

Elementos Bsicos da Linguagem

Tipo datetime
O tipo datetime destinado a armazenar data e hora como o nmero de segundos decorridos desde 01
de Janeiro de 1970. Este tipo ocupa 8 bytes de memria.
Constantes de data e hora podem ser representados como string literal, que consiste de 6 partes
mostrando o valor numrico do ano, ms, dia (ou dia, ms, ano), horas, minutos e segundos. A
constante colocado entre aspas simples e comea com o caractere D.
Os valores variam de 1 de Janeiro de 1970 a 31 de Dezembro de 3000. Tanto a data (ano, ms, dia)
quanto a hora (horas, minutos, segundos), ou ambos podem ser omitidos.
Na especificao da data literal , desejvel que voc especifique ano, ms e dia. Caso contrrio, o
compilador retorna um aviso sobre entrada incompleta.
Exemplos:
datetime NY=D'2015.01.01 00:00';

// Data Hora de comeo do ano 2015

datetime d1=D'1980.07.19 12:30:27';

// Ano Ms Dia Horas Minutos Segundos

datetime d2=D'19.07.1980 12:30:27';

// Igual a D'1980.07.19 12:30:27';

datetime d3=D'19.07.1980 12';

// Igual a D'1980.07.19 12:00:00'

datetime d4=D'01.01.2004';

// Igual a D'01.01.2004 00:00:00'

datetime compilation_date=__DATE__;

// Data de Compilao

datetime compilation_date_time=__DATETIME__;

// Data e Hora de Compilao

datetime compilation_time=__DATETIME__-__DATE__;// Hora de Compilao


//--- Exemplos de declaraes aps o qual avisos do compilador sero retornados
datetime warning1=D'12:30:27';

// Igual a D'[data de compilao] 12:30:27'

datetime warning2=D'';

// Igual a __DATETIME__

Tambm Veja
Estrutura do Tipo Data, Data e Hora, TimeToString, StringToTime

2000-2014, MetaQuotes Software Corp.

68

Elementos Bsicos da Linguagem

Tipo color
O tipo color destinado para armazenar informaes sobre cor e ocupa 4 bytes na memria. O
primeiro byte ignorado, os restantes 3 bytes contm os componentes RGB.
As constantes de cor podem ser representadas de trs formas: literalmente, por inteiros, ou por nome
(somente por Web-colors nomeados).
A representao literal consiste de trs partes representando os valores numricos das taxas dos trs
principais componentes de cor: vermelho, verde e azul. A constante comea com C e colocada entre
aspas simples. Os valores numricos da taxa de um componente de cor ficam entre 0 e 255.
A representao dos valores inteiros escrito na forma de um nmero hexadecimal ou decimal. Um
nmero hexadecimal tem a forma 0x00BBGGRR, onde RR a taxa do componente da cor vermelha
(Red), GG - da cor verde (Green), e BB - da cor azul (Blue). As constantes decimais no so
diretamente refletidos no RGB. Eles representam um valor decimal da representao hexadecimal de
inteiros.
Cores especficas refletem o chamado conjunto de Web-colors.
Exemplos:
//--- Literais
C'128,128,128'

// Cinza

C'0x00,0x00,0xFF' // Azul
//nomes de cores
clrRed

// Vermelho

clrYellow

// Amarelo

clrBlack

// Preto

//--- Representaes integrais


0xFFFFFF

// Branco

16777215

// Branco

0x008000

// Verde

32768

// Verde

Tambm Veja
Web Colors, ColorToString, StringToColor, Converso de Tipo (Typecasting)

2000-2014, MetaQuotes Software Corp.

69

Elementos Bsicos da Linguagem

Tipo bool
O tipo bool destinado para armazenar os valores lgicos true ou false, a representao numrica
deles 1 ou 0, respectivamente.
Exemplos:
bool a = true;
bool b = false;
bool c = 1;

A representao internal um nmero inteiro de 1 byte de tamanho. Deve-se notar que em expresses
lgicas possvel usar outros tipos reais ou inteiros ou expresses desses tipos - o compilador no ir
gerar qualquer erro. Neste caso, o valor zero ser interpretado como false (falso), e todos os outros
valores - como true (verdadeiro).
Exemplos:
int i=5;
double d=-2.5;
if(i) Print("i = ",i," e tem valor true");
else Print("i = ",i," e tem valor false");
if(d) Print("d = ",d," e tem o valor true");
else Print("d = ",d," e tem o valor false");
i=0;
if(i) Print("i = ",i," e tem o valor true");
else Print("i = ",i,"e tem o valor false");
d=0.0;
if(d) Print("d = ",d," e tem o valor true");
else Print("d = ",d," e tem o valor false");
//--- Resultados da execuo
//

i= 5 e tem o valor true

//

d= -2.5 e tem o valor true

//

i= 0 e tem o valor false

//

d= 0 e tem o valor false

Tambm Veja
Operaes Booleanas, Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

70

Elementos Bsicos da Linguagem

Enumeradores
Dados do tipo enum pertencem a um determinado conjunto limitado de dados. Definindo o tipo
enumerador:
enum nome do tipo enumervel
{
lista de valores
};

A lista de valores uma lista de identificadores de constantes nomeados separados por vrgulas.
Exemplo:
enum months

// enumerao de constantes nomeados

{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};

Aps a enumerao ser declarada, um novo tipo de dados de inteiro de 4 bytes aparece. A declarao
do novo tipo de dados permite ao compilador controlar rigidamente os tipos de parmetros passados,
porque a enumerao introduz novas constantes nomeadas. No exemplo acima, a constante nomeada
January tem valor igual a 0, February - 1, December - 11.
Rule: Se um certo valor no estiver atribudo a uma constante nomeada que membro da
enumerao, seu novo valor ser formado automaticamente. Se ele o primeiro membro da
enumerao, o valor 0 ser atribudo a ele. Para todos os subseqentes membros, os valores sero
calculados baseados no valor dos membros anteriores adicionando um.
Exemplo:
enum intervals

// Enumerao de constantes nomeadas

{
month=1,

// Intervalo de um ms

two_months,

// Dois meses

quarter,

// Trs meses - trimestre

halfyear=6,

// Semestre

year=12,

// Ano - 12 meses

};

2000-2014, MetaQuotes Software Corp.

71

Elementos Bsicos da Linguagem

Observaes
Diferente do C++, o tamanho da representao interna do tipo enumerado no MQL5 sempre igual a
4 bytes. Ou seja, sizeof(months) retorna o valor 4.
Diferente do C++, uma enumerao annima no pode ser declarada no MQL5. Ou seja, um nome
nico deve ser sempre especificado aps a palavra-chave enum.
Tambm Veja
Converso de Tipo (Typecasting)

2000-2014, MetaQuotes Software Corp.

72

Elementos Bsicos da Linguagem

Tipos Reais (double, float)


Tipos Reais (ou tipos de ponto flutuante) representam valores com um parte fracionria. Na linguagem
MQL5 existem dois tipos para nmeros de ponto flutuante. O mtodo de representao dos nmeros
reais na memria do computador definido pelo padro IEEE 754 e independente de plataformas,
sistemas operacionais ou linguagens de programao.
Tipo

Tamanho em
bytes

Valor
Positivo
Mnimo

Valor Mximo

Representa
o Preciso

C++ Anlogo

float

1.175494351
e-38

3.402823466e
+38

7 significant
digits

float

double

2.225073858
5072014e308

1.7976931348
623158e+308

15 significant
digits

double

O nome double significa que a preciso destes nmeros duas vezes a preciso dos nmeros do tipo
float. Na maioria dos casos, o tipo double o tipo mais conveniente. Em muitos casos a preciso
limitada de nmeros float no suficiente. O motivo do tipo float ser ainda utilizado a economia de
memria (isto importante para arrays grandes de nmeros reais).
Constantes de ponto flutuante consistem de um parte inteira, um ponto (.) e a parte fracionria. As
partes inteira e fracionria so seqncias de algarismos decimais.
Exemplos:
double a=12.111;
double b=-956.1007;
float

c =0.0001;

float

d =16;

Existe uma forma cientfica de escrever constantes reais, frequentemente este mtodo de notao
mais compacta que a forma tradicional.
Exemplo:
double c1=1.12123515e-25;
double c2=0.000000000000000000000000112123515; // 24 zeros aps o ponto decimal
Print("1. c1 =",DoubleToString(c1,16));
// Resultado: 1. c1 = 0.0000000000000000
Print("2. c1 =",DoubleToString(c1,-16));
// Resultado: 2. c1 = 1.1212351499999999e-025
Print("3. c2 =",DoubleToString(c2,-16));
// Resultado: 3. c2 = 1.1212351499999999e-025

Deve-se lembrar que nmeros reais so armazenados em memria com preciso limitada no sistema
binrio, apesar da notao decimal ser geralmente usada. por isso que muitos nmeros que so

2000-2014, MetaQuotes Software Corp.

73

Elementos Bsicos da Linguagem


precisamente representados no sistema decimal s podem ser escritos como frao infinita no sistema
binrio.
Por exemplo, os nmeros 0.3 e 0.7 so representados no computador como fraes infinitas, enquanto
o nmero 0.25 armazenado de forma exata, porque ele representa uma potncia de dois.
Neste sentido, recomenda-se fortemente no comparar dois nmeros com igualdade, porque tal
comparao no correta.
Exemplo:
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");
// Resultado: 1/3 + 4/3 != 5/3
}

Se voc ainda precisa comparar com igualdade dois nmeros reais, ento voc pode fazer isso de duas
maneiras diferentes. A primeira maneira comparar a diferena entre dois nmeros com alguma
quantidade pequena que especifica a preciso da comparao.
Exemplo:
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("Diferente: d_val = ",DoubleToString(d_val,16),
"

f_val = ",DoubleToString(f_val,16));

// Resultado: Diferente: d_val= 0.7000000000000000

f_val= 0.6999999880790710

Note que o valor de epsilon no exemplo acima pode ser menor que a constante predefinida
DBL_EPSILON. O valor desta constante 2.2204460492503131e-016. A constante correspondente ao

2000-2014, MetaQuotes Software Corp.

74

Elementos Bsicos da Linguagem


tipo float FLT_EPSILON = 1.192092896e-07. O significado destes valores o seguinte: o menor
valor que satisfaz a condio1.0 + DBL_EPSILON! = 1.0 (para nmeros do tipo float 1.0 +
FLT_EPSILON! = 1.0).
A segunda maneira compara a diferena normalizada de dois nmeros reais com zero. No faz sentido
comparar a diferena de nmeros normalizados com zero, porque qualquer operao matemtica com
nmeros normalizados d um resultado no normalizado.
Exemplo:
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," iguais ",f_val);


else Print("Diferente: d_val = ",DoubleToString(d_val,16),
"

f_val = ",DoubleToString(f_val,16));

// Resultado: Diferente: d_val= 0.3000000000000000

f_val= 0.3000000119209290

Algumas operaes do co-processador matemtico podem resultar em um nmero real invlido, o qual
no pode ser usado em operaes matemticas e operaes de comparao, porque o resultado de
operaes com nmeros reais invlidos indefinido. Por exemplo, quando tentar calcular o arco-seno
de 2, o resultado infinito negativo.
Exemplo:
double abnormal = MathArcsin(2.0);
Print("MathArcsin(2.0) =",abnormal);
// Resulto:

MathArcsin(2.0) = -1.#IND

Alm do menos infinito, existe o mais infinito e o NaN (not a number). Para determinar se um nmero
invlido, voc pode usar MathIsValidNumber(). De acordo com o padro IEEE, eles tem uma
representao de mquina especial. Por exemplo, mais infinito para o tipo double tem a representao
binria de 0x7FF0 0000 0000 0000.
Exemplos:
struct str1
{
double d;
};
struct str2
{
long l;
};

2000-2014, MetaQuotes Software Corp.

75

Elementos Bsicos da Linguagem


//--- Comeo
str1 s1;
str2 s2;
//--s1.d=MathArcsin(2.0);

// Obtm o nmero invlido -1.#IND

s2=s1;
printf("1.

%f %I64X",s1.d,s2.l);

//--s2.l=0xFFFF000000000000;

// nmero invlido -1.#QNAN

s1=s2;
printf("2.

%f %I64X",s1.d,s2.l);

//--s2.l=0x7FF7000000000000;

// maior sem-nmero SNaN

s1=s2;
printf("3.

%f %I64X",s1.d,s2.l);

//--s2.l=0x7FF8000000000000;

// menor sem-nmero QNaN

s1=s2;
printf("4.

%f %I64X",s1.d,s2.l);

//--s2.l=0x7FFF000000000000;

// maior sem-nmero QNaN

s1=s2;
printf("5.

%f %I64X",s1.d,s2.l);

//--s2.l=0x7FF0000000000000;

// // Infinito positivo 1.#INF e menor sem-nmero SNaN

s1=s2;
printf("6.

%f %I64X",s1.d,s2.l);

//--s2.l=0xFFF0000000000000;

// Infinito negativo -1.#INF

s1=s2;
printf("7.

%f %I64X",s1.d,s2.l);

//--s2.l=0x8000000000000000;

// Zero negativo -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;

// Maior nmero normalizado (MAX_DBL)

s1=s2;
printf("11.

%.16e %I64X",s1.d,s2.l);

//--s2.l=0x0010000000000000;

// Menor normalizado positivo (MIN_DBL)

2000-2014, MetaQuotes Software Corp.

76

Elementos Bsicos da Linguagem


s1=s2;
printf("12.

%.16e %.16I64X",s1.d,s2.l);

//--s1.d=0.7;

// Mostra que o nmero 0.7 uma frao sem fim

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

*/

Tambm Veja
DoubleToString, NormalizeDouble, Constantes de Tipos Numricos

2000-2014, MetaQuotes Software Corp.

77

Elementos Bsicos da Linguagem

Tipo string
O tipo string usado para armazenar cadeias de texto. Uma cadeia de texto uma seqncia de
caracteres no formato Unicode com zero no final do mesmo. Um constante string pode ser atribudo a
uma varivel string. Uma constante string uma seqncia de caracteres entre aspas duplas: "This is
a string constant".
Se for preciso incluir um aspas duplo (") em uma string, o caractere barra invertida (\) deve ser
colocada antes dele. Quaisquer constantes de caractere especial pode ser escrito em uma string, se o
caractere barra invertida (\) for digitado antes deles.
Exemplos:
string svar="Esta uma character string";
string svar2=StringSubstr(svar,0,4);
Print("Smbolo de direitos autorais\t\x00A9");
FileWrite(handle,"Esta string contm uma nova linha de smbolos \n");
string MT5path="C:\\Program Files\\MetaTrader 5";

Para tornar o cdigo fonte legvel, longas strings de constantes podem ser divididas em partes sem a
operao de adio. Durante a compilao, estas partes sero combinadas em uma string longa:
//--- Declare uma longa string constante
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>";
//---Sada da string constante no log
Print(HTML_head);
}

Tambm Veja
Funes de Converso, Funes de String, FileOpen, FileReadString, FileWriteString

2000-2014, MetaQuotes Software Corp.

78

Elementos Bsicos da Linguagem

Estruturas e Classes
Estruturas
Uma estrutura um conjunto de elementos de qualquer tipo (exceto o tipo void). Portanto, a estrutura
combina dados logicamente relacionados de diferentes tipos.

Declarao da Estrutura
O tipo de dados estrutura determinado pela seguinte descrio:
struct structure_name
{
elements_description
};

O nome da estrutura no pode ser usado como um identificador (nome de uma varivel ou funo).
Deve-se notar que em estruturas MQL5, os elementos seguem um ao outro diretamente, sem
alinhamento. Em C++ tal ordem feita pelo compilador usando a seguinte instruo:
#pragma pack(1)

Se voc quiser ter outro alinhamento na estrutura, use membros auxiliares, "fillers" (preenchedores)
para o tamanho certo.
Exemplo:
struct trade_settings
{
uchar

slippage;

// valor do tamanho do slippage admissvel - 1 byte

char

reserved1;

// pula 1 byte

short

reserved2;

// pula 2 bytes

int

reserved4;

// outros 4 bytes so pulados. garantir um alinhamento de 8 bytes de limite

double take;

// valores do preo de fixao de lucro

double stop;

// valor do preo de stop de proteo

};

Tal descrio de estruturas alinhadas necessrio somente para transferncia de dados para funes
de dll importadas.
Ateno: Este exemplo ilustra dados incorretamente esquematizados. Seria melhor primeiro declarar
o take e stop de grandes volumes de dados do tipo double, e ento declarar o membro slippage do
tipo uchar. Neste caso, a representao interna de dados ser sempre a mesma, independentemente
do valor especificado no #pragma pack().
Se a estrutura contm variveis do tipo string e/ou objeto de um array dinmico, o compilador atribui
um construtor implcito para tal estrutura. Este construtor redefine todos os membros de tipo string
da estrutura e corretamente inicializa objetos do array dinmico.

Estruturas Simples
Estruturas que no contm strings ou objetos de array dinmico so chamados estruturas simples;

2000-2014, MetaQuotes Software Corp.

79

Elementos Bsicos da Linguagem


variveis de tal estrutura podem ser copiados livremente de um para outro, mesmo se eles sejam
estruturas diferentes. Variveis de estruturas simples, bem como o seu array, podem ser passados
como parmetros para funes importadas de DLL.

Acesso a Membros de Estrutura


A estrutura um novo tipo de dados permitindo declarar variveis deste tipo. A estrutura pode ser
declarado somente um vez dentro de um projeto. Os membros de estrutura so acessados usando a
operao ponto (.).
Exemplo:
struct trade_settings
{
double take;

// valor do preo de fixao do lucro

double stop;

// valor do preo stop de proteo

uchar

// valor do slippage admissvel

slippage;

};
//--- cria e inicializa uma varivel do tipo trade_settings
trade_settings my_set={0.0,0.0,5};
if (input_TP>0) my_set.take=input_TP;

Classes
As classes diferem das estruturas no seguinte:
a palavra-chave class usado na declarao;
por default (padro), todos os membros da classe tm especificador de acesso private, a menos que
seja indicado o contrrio. Dados-membros da estrutura tm o tipo default de acesso como public, a
menos que seja indicado o contrrio;
objetos de classe sempre tem uma tabela de funes virtuais, mesmo que no existam funes
virtuais declaradas na classe. Estruturas no podem ter funes virtuais;
o operador new pode ser aplicado a objetos de classe; o operador this no pode ser aplicado a
estruturas;
classes pode ser herdados somente de classes, estruturas pode ser herdados somente de estruturas.
Classes e estruturas podem ter um construtor e destrutor explcitos. Se seu construtor for definido
explicitamente, a inicializao de uma varivel de estrutura ou classe usando a seqncia de
inicializao impossvel.
Exemplo:
struct trade_settings
{
double take;

// valor do preo de fixao do lucro

double stop;

// valor do preo stop de proteo

uchar

// valor do slippage admissvel

slippage;

//--- Construtor
trade_settings() { take=0.0; stop=0.0; slippage=5; }
//--- Destrutor

2000-2014, MetaQuotes Software Corp.

80

Elementos Bsicos da Linguagem


~trade_settings() { Print("Este o final"); }
};
//--- Compilador gerar uma mensagem de erro de que a inicializao impossvel
trade_settings my_set={0.0,0.0,5};

Construtores e Destrutores
Um construtor uma funo especial, que chamada automaticamente ao se criar um objeto de uma
estrutura ou classe e normalmente usado para inicializar membros da classe. Mais adiante,
falaremos sobre classes, tudo que for dito se aplica tambm a estruturas, a menos que seja indicado o
contrrio. O nome de um construtor deve corresponder ao nome da classe. O construtor no tem tipo
de retorno (voc pode especificar o tipo void).
Membros de classe definidos strings, arrays dinmicos e objetos que exigem inicializao sero
inicializados em qualquer caso,independentemente de haver ou no um construtor.
Cada classe pode ter mltiplos construtores, diferindo pelo nmero de parmetros e a lista de
inicializao. Um construtor que exige especificao de parmetros chamado um construtor
paramtrico.
Um construtor sem parmetros chamado um construtor default. Se nenhum construtor for
declarado em uma classe, o compilador cria um construtor default durante a compilao.
//+------------------------------------------------------------------+
//| Uma classe para trabalhar com uma data

//+------------------------------------------------------------------+
class MyDateClass
{
private:
int

m_year;

// Ano

int

m_month;

// Ms

int

m_day;

// Dia do ms

int

m_hour;

// Hora no dia

int

m_minute;

// Minutos

int

m_second;

// Segundos

public:
//--- Construtor default
MyDateClass(void);
//--- Construtor paramtrico
MyDateClass(int h,int m,int s);
};

Um construtor pode ser declarado na descrio da classe e ento seu corpo pode ser definido. Por
exemplo, dois construtores de MyDateClasse podem ser definidos da seguinte maneira:
//+------------------------------------------------------------------+
//| Construtor default

//+------------------------------------------------------------------+
MyDateClass::MyDateClass(void)
{

2000-2014, MetaQuotes Software Corp.

81

Elementos Bsicos da Linguagem


//--MqlDateTime mdt;
datetime t=TimeCurrent(mdt);
m_year=mdt.year;
m_month=mdt.mon;
m_day=mdt.day;
m_hour=mdt.hour;
m_minute=mdt.min;
m_second=mdt.sec;
Print(__FUNCTION__);
}
//+------------------------------------------------------------------+
//| Construtor paramtrico

//+------------------------------------------------------------------+
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__);
}

No construtor default, todos os membros da classes so preenchidos usando a funo TimeCurrent(),


no construtor paramtrico somente os valores de hora so preenchidos. Outros membros da classe
(m_year, m_month and m_day) sero inicializados automaticamente com a data corrente.
O construtor default tem um propsito especial ao inicializar um array de objetos de sua classe. Um
construtor, o qual todos o parmetros tm valores default, no um construtor default. Aqui est um
exemplo:
//+------------------------------------------------------------------+
//| Uma classe com um construtor default

//+------------------------------------------------------------------+
class CFoo
{
datetime

m_call_time;

// Hora da ltima chamada ao objeto

public:
//--- Um construtor com um parmetro que tem um valor default no um construtor default
CFoo(const datetime t=0){m_call_time=t;};
//--- Um construtor copiador
CFoo(const CFoo &foo){m_call_time=foo.m_call_time;};
string ToString(){return(TimeToString(m_call_time,TIME_DATE|TIME_SECONDS));};
};
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

82

Elementos Bsicos da Linguagem


//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
// CFoo foo; // Esta variao no pode ser utilizada - um construtor default no foi definido
//--- Possveis opes para criar o objeto CFoo
CFoo foo1(TimeCurrent());

// Uma explicita chamada de um construtor paramtrico

CFoo foo2();

// Uma explcita chamada de um construtor paramtrico com parmetr

CFoo foo3=D'2009.09.09';

// Uma implcita chamada de um construtor paramtrico

CFoo foo40(foo1);

// Uma explicita chamada de um construtor copiador

CFoo foo41=foo1;

// Uma implcita chamada de um construtor copiador

CFoo foo5;

// Uma explcita chamada de um construtor default (se no existir

// ento um construtor paramtrico com um valor default chamado)


//--- Possveis opes para criar o objeto CFoo
CFoo *pfoo6=new CFoo();

// Criao dinmica de um objeto e recepo de um ponteiro para el

CFoo *pfoo7=new CFoo(TimeCurrent());// Outra opes de criao dinmica de objeto


CFoo *pfoo8=GetPointer(foo1); // Agora pfoo8 aponta para o objeto foo1
CFoo *pfoo9=pfoo7;

// pfoo9 e pfoo7 apontam para o mesmo objeto

// CFoo foo_array[3];

// Esta opo no pode ser usado - um construtor default no foi e

//--- Mostra os valores de 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());
//--- Exclui dinamicamente arrays criados
delete pfoo6;
delete pfoo7;
//delete pfoo8;

// Voc no precisa excluir pfoo8 explicitamente, j que ele aponta para o obje

//delete pfoo9;

// Voc no precisa excluir pfoo9 explicitamente, j que ele aponta para o mesm

Se voc descomentar estas strings


//CFoo foo_array[3];

// Esta variante no pode ser usada - um construtor default no est def

ou
//CFoo foo_dyn_array[];

// Esta variante no pode ser usada - um construtor default no est def

ento o compilar retorn um erro para eles "default constructor is not defined" (construtor default no
definido).
Se uma classe tiver um construtor definido pelo usurio, o construtor padro no gerado pelo
compilador. Isso significa que se um construtor paramtrico declarado em uma classe, mas um
construtor default no declarado, voc no pode declarar arrays de objetos desta classe. O
compilador retorn um erro para este script:

2000-2014, MetaQuotes Software Corp.

83

Elementos Bsicos da Linguagem


//+------------------------------------------------------------------+
//| Uma classe sem um construtor default

//+------------------------------------------------------------------+
class CFoo
{
string

m_name;

public:
CFoo(string name) { m_name=name;}
};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Obtm o erro "default constructor is not defined" durante compilao
CFoo badFoo[5];
}

Neste exemplo, a classe CFoo tem um construtor paramtrico declarado - em tais casos, o compilador
no cria um construtor default automaticamente durante compilao. Ao mesmo tempo quando voc
declara um array de objetos, presume-se que todos os objetos devam se criados e inicializados
automaticamente. Durante a auto-inicializao de um objeto, necessrio chamar um construtor
default, mas j que o construtor default no foi explicitamente declarado e nem automaticamente
gerado pelo compilador, impossvel criar tal objeto. Por esta razo, o compilador gerou um error na
etapa de compilao.
Existe uma sintaxe especial para inicializar um objeto usando um construtor. Inicializadores de
membros de uma estrutura ou classe (construes especiais para inicializao) podem ser
especificados na lista de inicializao.
Uma lista de inicializao uma lista de inicializadores separados por vrgulas, que seguem depois do
dois pontos (:), depois da lista de parmetros de um construtor e precede o corpo (antes da abertura
de chave). H vrios requisitos:
Listas de inicializao podem ser usados somente em construtores;
Membros paternos no podem ser inicializados na lista de inicializao;
A lista de inicializao deve ser seguida por uma definio (implementao) de uma funo.
Aqui est um exemplo de vrios construtores para inicializaes de membros de uma classe.
//+------------------------------------------------------------------+
//| Uma classe para armazenar o nome de um caractere

//+------------------------------------------------------------------+
class CPerson
{
string

m_first_name;

// Primeiro nome

string

m_second_name;

// Segundo nome

public:
//--- Um construtor default vazio
CPerson() {Print(__FUNCTION__);};
//--- Um construtor paramtrico

2000-2014, MetaQuotes Software Corp.

84

Elementos Bsicos da Linguagem


CPerson(string full_name);
//--- Um construtor com uma lista de inicializao

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);};
};
//+------------------------------------------------------------------+
//|

//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Obtm o erro "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

//--- Valores de sida


Tom.PrintName();
Huck.PrintName();
Pooh.PrintName();
//--- Apaga um objeto criado dinamicamente
delete Pooh;
}

Neste caso, a classe CPerson tem trs construtores:


1. Um construtor default explcito, que permite a criao de um array de objetos desta classe;
2. Um construtor com um parmetro, que recebe um nome completo como um parmetro e divide com
o nome e segundo nome de acordo com o espao encontrado;
3. Um construtor com dois parmetros que contem uma lista de inicializao. Inicializadores m_second_name(surname) e m_first_name(name).
Note que a inicializao usando uma lista substitui uma atribuio. Membros individuais devem ser
inicializados como:
class_member (uma lista de expresses)

Na lista de inicializao, membros podem aparecer em qualquer ordem, mas todos os membros da

2000-2014, MetaQuotes Software Corp.

85

Elementos Bsicos da Linguagem


classe sero inicializados de acordo com a ordem de sua apario. Isso significa que no terceiro
construtor, primeiro o membro m_first_name ser inicializado, j que ele aparece primeiro, e
somente depois m_second_name ser inicializado. Isto ser tomado em conta nos casos onde a
inicializao de alguns membros da classe depende dos valores em outros membros da classe.
Se um construtor default no for declarado na base base, e ao mesmo tempo um ou mais construtores
com parmetros forem declarados, voc deve sempre chamar um dos construtores da classe base na
lista de inicializao. Ele passado com vrgula da mesma forma que membros comuns da lista e ser
chamado primeiro durante a inicializao do objeto, no importando onde ele colocado na lista de
inicializao.
//+------------------------------------------------------------------+
//| A classe base

//+------------------------------------------------------------------+
class CFoo
{
string

m_name;

public:
//--- Um construtor com uma lista de inicializao
CFoo(string name) : m_name(name) { Print(m_name);}
};
//+------------------------------------------------------------------+
//| Uma classe derivada a partir de CFoo

//+------------------------------------------------------------------+
class CBar : CFoo
{
CFoo

m_member;

// Um membro de classe um objeto do pai

public:
//--- O construtor default na lista de inicializao chama o construtor do pai
CBar(): m_member(_Symbol), CFoo("CBAR") {Print(__FUNCTION__);}
};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
CBar bar;
}

Neste exemplo, ao criar o objeto bar, um construtor default CBar() ser chamado, no qual primeiro um
construtor do pai de CFoo chamado, e ento vem um construtor para o membro de classe
m_member.
Um destrutor uma funo especial que chamado automaticamente quando um objeto de classe
destrudo. O nome do destrutor escrito como nome de classe precedido de (~). Strings, arrays
dinmicos e objetos, exigindo desinicializao, sero desinicializados de qualquer forma, no
importando se o destrutor estiver presente ou ausente. Se existir um destrutor, essas aes sero
executadas aps chamar o destrutor.
Destrutores so sempre virtuais, no importando se eles so declarados com a palavra-chave virtual
ou no.

2000-2014, MetaQuotes Software Corp.

86

Elementos Bsicos da Linguagem

Definindo Mtodos de Classe


Mtodos de funes de classe podem ser definidos tanto dentro quanto fora da declarao de classe.
Se o mtodo definido dentro de uma classe, ento seu corpo vem logo aps a declarao do mtodo.
Exemplo:
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;

virtual bool

CheckDown(int& pad_array[]);

virtual bool

CheckLeft(int& side_row[]);

virtual bool

CheckRight(int& side_row[]);

};

Funes a partir de SetRightBorder(int border) at Draw() so declarados e definidos diretamente


dentro da classe CTetrisShape.
O construtor CTetrisShape() e os mtodos CheckDown(int& pad_array[]), CheckLeft(int& side_row[]) e
CheckRight(int& side_row[]) so declarados somente dentro da classe, mas ainda no definidos. As
definies destas funes sero feitas mais adiante no cdigo. A fim de definir o mtodo do lado de
fora da classe, o operador de resoluo de scope usado, o nome da classe usado como o escopo.
Exemplo:
//+------------------------------------------------------------------+
//| Construtor da classe bsica

//+------------------------------------------------------------------+
void CTetrisShape::CTetrisShape()

2000-2014, MetaQuotes Software Corp.

87

Elementos Bsicos da Linguagem


{
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;
}
//+--------------------------------------------------------------------+
//| Verificao da capacidade de move para baixo (para a varra e cubo) |
//+--------------------------------------------------------------------+
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);
}

Modificadores de Acesso Public, Protected e Private


Quando desenvolver um nova classe, recomendvel restringir o acesso do lado de fora aos membros
da classe. So usadas palavras-chave privateouprotected para esta finalidade. Neste caso, dados
escondidos podem ser acessados somente a partir de mtodos-funes da mesma classe. Se a palavrachave protected usada, dados escondidos podem ser acessados tambm a partir de mtodos de
classes herdeiras desta classe. O mesmo mtodo pode ser usado para restringir o acesso de mtodosfunes de uma classe.
Se voc precisar de acesso com abertura completa aos membros e/ou mtodos de uma classe, use a
palavra-chave public.
Exemplo:
class CTetrisField
{
private:
int

m_score;

// Contagem

int

m_ypos;

// Posio corrente das figuras

int

m_field[FIELD_HEIGHT][FIELD_WIDTH]; // Boa matriz

int

m_rows[FIELD_HEIGHT];

// Numerao das linhas boas

int

m_last_row;

// ltima linha livre

CTetrisShape
bool

*m_shape;
m_bover;

// Figura Tetris
// Fim de jogo

public:

2000-2014, MetaQuotes Software Corp.

88

Elementos Bsicos da Linguagem


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();

void

LabelOver();

};

Quaisquer membros de classe e mtodos declarados aps o especificador public: (e antes do prximo
especificador de acesso) ficam disponveis para qualquer referncia ao objeto da classe pelo
programa. Neste exemplo, existem os seguintes membros: funes CTetrisField(), Init(), Deinit(),
Down(), Left(), Right(), Rotate() e Drop().
Quaisquer membros de classe e mtodos declarados aps o especificador private: (e antes do prximo
especificador de acesso) ficam disponveis somente para as funes-membros desta classe.
Especificadores de acesso a elementos sempre terminam com um dois pontos (:) e podem aparecer na
definio da classe vrias vezes.
O acesso aos membros de uma classe base pode ser redefinido durante a herana nas classes
derivadas.
Tambm Veja
Programao Orientada a Objetos

2000-2014, MetaQuotes Software Corp.

89

Elementos Bsicos da Linguagem

Objeto Array Dinmico


Arrays Dinmicos
No mximo pode-se declarar arrays de 4 dimenses. Quando declarar um array dinmico (um array
sem valor especificado no primeiro par de colchetes), o compilador automaticamente cria uma
varivel da estrutura acima (um objeto array dinmico) e fornece um cdigo para a correta
inicializao.
Arrays dinmicos so automaticamente liberados quando ficam alm da rea de visibilidade do bloco
em que eles foram declarados.
Exemplo:
double matrix[][10][20]; // array dinmico de 3 dimenses
ArrayResize(matrix,5);

// define o tamanha da primeira dimenso

Arrays Estticos
Quando todas as dimenses significantes do array so explicitamente especificadas, o compilador praloca o tamanho de memria necessrio. Tal array chamado esttico. Contudo, o compilador aloca
memria adicional para o array dinmico, que associado ao buffer esttico pr-alocado (parte da
memria para armazenar o array).
A criao de um objeto array dinmico devido a possvel necessidade de passar este array esttico
como parmetro para alguma funo.
Exemplos:
double stat_array[5]; // array esttico de uma dimenso
some_function(stat_array);
...
bool some_function(double& array[])
{
if(ArrayResize(array,100)<0) return(false);
...
return(true);
}

Arrays em Estruturas
Quando um array esttico declarado como membro de uma estrutura, um objeto array dinmico no
criado. Isso assim para assegurar compatibilidade com estruturas de dados usados em API's do
Windows.
Contudo, arrays estticos que so declarados como membros de estruturas, podem tambm serem
passados para funes em MQL5. Neste caso, quando passar o parmetro um objeto temporrio de um
array dinmico, conectado com o array esttico - membro da estrutura, ser criado.
Tambm Veja
Funes com Arrays, Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis,
Criando e Excluindo Objetos
2000-2014, MetaQuotes Software Corp.

90

Elementos Bsicos da Linguagem

Converso de Tipo (Typecasting)


Converso de Tipos Numricos
Frequentemente surge a necessidade de converter um tipo numrico em outro. Nem todos os tipos
numricos podem ser convertidos em outro. Aqui est o esquema de converso permitida:

Linhas slidas com setas indicam mudanas que so realizadas quase sem nenhuma perda de
informao. Ao invs do tipo char, o tipo bool pode ser usado (ambos ocupam 1 byte de memria), ao
invs do tipo int, o tipo color pode ser usado (4 bytes), ao invs do tipo long, datetime pode ser usado
(ocupa 8 bytes). As quatro linhas cinzentas tracejadas, tambm com setas, denotam converso em
que a perda de preciso pode ocorrer. Por exemplo, o nmero de algarismos em um inteiro igual a
123456789 (int) maior que o nmero de algarismos que podem ser representados por um float.
int n=123456789;
float f=n;

// o contedo de f igual a 1.234567892E8

Print("n = ",n,"

f = ",f);

// resultado n= 123456789

f= 123456792.00000

O nmero convertido em float tem a mesma ordem de grandeza, mas menos preciso. Converses,
no sentido contrrio das setas pretas, podem ser realizadas com possvel perda de dados. Converses
entre char e uchar, short e ushort, int e uint, long e ulong (converses para ambos os lados), podem
levar a perda de dados.
Como resultado da converso de valores de ponto flutuante para o tipo inteiro, a parte fracionria
sempre excluda. Se voc quiser arredondar um float para o inteiro mais prximo (que em muitos
casos mais til), voc deve usar MathRound().
Exemplo:
//--- Acelerao gravitacional
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);
/*
Resultado:
round_g = 9
math_round_g = 10
*/

2000-2014, MetaQuotes Software Corp.

91

Elementos Bsicos da Linguagem


Se dois valores so combinados por um operador binrio, antes da execuo da operao, o operando
do tipo mais baixo convertido para o do tipo mais alto, em concordncia com a prioridade dada no
esquema abaixo:

Os tipos de dados char, uchar, short, e ushort incondicionalmente so convertido para o tipo int.
Exemplos:
char

c1=3;

//--- Primeiro exemplo


double d2=c1/2+0.3;
Print("c1/2 + 0.3 = ",d2);
// Resultado:

c1/2+0.3 = 1.3

//--- Segundo exemplo


d2=c1/2.0+0.3;
Print("c1/2.0 + 0.3 = ",d2);
// Resultado:

c1/2.0+0.3 = 1.8

A expresso calculada consiste de duas operaes. No primeiro exemplo, a varivel c1 do tipo char
convertida para uma varivel temporria do tipo int, porque o segundo operando da operao de
diviso, a constante 2, do tipo mais alto, int. Como resultado da diviso de inteiros, 3/2, ns
obtemos o valor 1, que do tipo inteiro.
Na segunda operao do primeiro exemplo, o segundo operando a constante 0.3, que do tipo
double, ento o resultado da primeira operao convertido em uma varivel temporria para o tipo
double com o valor 1.0.
No segundo exemplo, a varivel c1 do tipo char convertida para uma varivel temporria do tipo
double, porque o segundo operando da operao de diviso, a constante 2.0, do tipo double;
nenhuma converso adicional feita.

Converso de Tipos Numricos


Nas expresses da linguagem MQL5 tanto converso explicita quanto implcita podem ser usadas. A
converso explcita escrita da seguinte forma:
var_1 = (type)var_2;

Uma expresso ou resultado de execuo de uma funo podem ficar no lugar da varivel var_2. A
notao funcional de uma converso explcita tambm possvel:
var_1 = type(var_2);

Vamos considerar uma converso explcita com base no primeiro exemplo.


//--- Terceiro exemplo

2000-2014, MetaQuotes Software Corp.

92

Elementos Bsicos da Linguagem


double d2=(double)c1/2+0.3;
Print("(double)c1/2 + 0.3 = ",d2);
// Resultado:

(double)c1/2+0.3 = 1.80000000

Antes da operao de diviso ser realizada, a varivel c1 explicitamente convertida para o tipo
double. Agora a constante inteira 2 convertida no valor 2.0 do tipo double, pois o resultado da
converso do primeiro operando assumiu o tipo double. De fato, a converso explcita uma operao
unria.
Alm disso, quanto tentar converter tipos, o resultado pode ir alm da faixa permitida. Neste caso, o
truncamento ocorre. Por exemplo:
char c;
uchar u;
c=400;
u=400;
Print("c = ",c); // Resultado c=-112
Print("u = ",u); // Resultado u=144

Antes de operaes (exceto operaes de atribuio) serem realizadas, os dados so convertidos para
o tipo de mxima prioridade. Antes de operaes de atribuio serem realizadas, os dados so
convertidos para o tipo destino.
Exemplos:
int

i=1/2;

Print("i = 1/2

// nenhuma converso, o resultado 0


",i);

int k=1/2.0;
Print("k = 1/2

// a expresso convertida para o tipo double,


",k);

double d=1.0/2.0;

// ento convertido para o tipo destino, o resultado 0

// nenhuma converso de tipos, o resultado 0.5

Print("d = 1/2.0; ",d);


double e=1/2.0;

// a expresso convertida para o tipo double,

Print("e = 1/2.0; ",e);// que o mesmo do tipo destino, o resultado 0.5


double x=1/2;

// a expresso do tipo inteiro convertido para o tipo destino double,

Print("x = 1/2; ",x);

// o resultado 0.0

Ao converter o tipo long/ulong em double, a preciso pode ser perdida caso o valor inteiro seja maior
do que 223372036854774784 ou menor do que -9223372036854774784.
void OnStart()
{
long l_max=LONG_MAX;
long l_min=LONG_MIN+1;
//--- definir o valor inteiro maior, que no perde a preciso ao ser lanado para double
while(l_max!=long((double)l_max))
l_max--;
//--- definir o valor inteiro menor, que no perde a preciso ao ser lanado para double
while(l_min!=long((double)l_min))

2000-2014, MetaQuotes Software Corp.

93

Elementos Bsicos da Linguagem


l_min++;
//--- resulta no intervalo encontrado para valores inteiro
PrintFormat("Ao converter um valor inteiro para double, ele deve ser "
"dentro [%I64d, %I64d] do intervalo",l_min,l_max);
//--- agora, vamos ver o que acontece se o valor fica fora deste intervalo
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)));
//--- receber o seguinte resultado

// Ao converter um valor integer para double, ele deve estar dentro do intervalo [-9223372036854774

// l_max+1=9223372036854774785, double(l_max+1)=9223372036854774800, ulong(double(l_max+1))=9223372

// l_min-1=-9223372036854774785, double(l_min-1)=-9223372036854774800, ulong(double(l_min-1))=-9223


}

Converso para o tipo String


O tipo string tem a mais alta prioridade entre os tipos simples. Portanto, se um dos operandos de uma
operao do tipo string, o segundo operando ser convertido para uma string automaticamente.
Observe que para uma string, uma nica operao de dois-lugares didicos de adio possvel. A
converso explicita de string para qualquer tipo numrico permitida.
Exemplos:
string s1=1.0/8;

// a expresso convertida para o tipo double,

Print("s1 = 1.0/8; ",s1);

//

da convertida para o tipo string,

// resultado "0.12500000" (uma string contm 10 caracteres)


string s2=NULL;

// string desinicializao

Print("s2 = NULL; ",s2);

// o resultado uma string vazia

string s3="Ticket N"+12345; // a expresso convertida para o tipo string


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));

Converso de Tipos Estrutura Simples


Dados do tipo estrutura simples podem ser atribudos um ao outro desde que todos os membros de
ambas as estruturas forem de tipos numricos. Neste caso ambos os operandos da operao de

2000-2014, MetaQuotes Software Corp.

94

Elementos Bsicos da Linguagem


atribuio (lado esquerdo e direito) devem ser do tipo estrutura. A converso membro a membro no
realizada, uma simples cpia feita. Se as estruturas so de tamanhos diferentes, o nmero de
bytes do menor tamanho copiado. Portanto, a ausncia do unio (union) em MQL5 compensada.
Exemplos:
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);

// obtm o nmero invlido -1. # IND

s2=s1;
printf("1.

%f

%I64X",s1.d,s2.l);

//--s3=s2;
printf("2.

parte alta de long %.8X

parte baixa de long %.8X",

s3.high_part,s3.low_part);
//--s4.s="alguma string constante";
s3=s4;
printf("3.

buffer len %d

endereo da string constante 0x%.8X",

s3.low_part,s3.high_part);
}

Outro exemplo ilustra o mtodo de organizar uma funo customizada para receber a representao

2000-2014, MetaQuotes Software Corp.

95

Elementos Bsicos da Linguagem


RGB (red, green, blue) a partir do tipo color. Crie duas estruturas de mesmo tamanho mas de
contedos diferentes. Por convenincia, vamos adicionar uma funo retornando a representao RGB
de uma cor como string.
#property script_show_inputs
input color

testColor=clrBlue;// defina cor para testar

//--- estrutura para representar cor como RGB


struct RGB
{
uchar

blue;

// componente azul da cor

uchar

green;

// componente verde da color

uchar

red;

// componente vermelho da corr

uchar

empty;

// este byte no usado

string

toString();

// funo para receber uma string

};
//--- funo para exibir cor como uma string
string RGB::toString(void)
{
string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
return out;
}
//--- estrutura para armazenar o tipo de cor incorporada (built-in)
struct builtColor
{
color

c;

};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- uma varivel para armazenar em RGB
RGB colorRGB;
//--- uma varivel para armazenar o tipo color
builtColor test;
test.c=testColor;
//--- convertendo duas estruturas por cpia de contedo
colorRGB=test;
Print("color ",test.c,"=",colorRGB.toString());
//--}

Converso de Ponteiros de Classe Base para Ponteiros de Classes Derivadas


Objetos de classe derivada podem ser vistos como objetos da correspondente classe base. Isso leva a
algumas conseqncias interessantes. Por exemplo, apesar do fato que objetos de diferentes classes,
gerados a partir de uma nica classe base, poderem diferir significativamente um do outro, podemos

2000-2014, MetaQuotes Software Corp.

96

Elementos Bsicos da Linguagem


criar uma lista ligada (List) com eles, j que vemos eles como objetos do tipo base. Mas o inverso no
verdade: objetos da classe base no so automaticamente objetos da classe derivada.
Voc pode usar a converso explicita para converter ponteiros da classe base para ponteiros da classe
derivada. Mas voc deve estar totalmente confiante na admissibilidade de tal transformao, porque
seno um erro crtico de execuo ocorrer e o programa MQL5 ser interrompido.
Tambm Veja
Tipos de Dados

2000-2014, MetaQuotes Software Corp.

97

Elementos Bsicos da Linguagem

Tipo void e constante NULL


Sintaticamente o tipo void um tipo fundamental, juntamente com os tipos char, uchar, bool, short,
ushort, int, uint, color, long, ulong, datetime, float, double e string. Este tipo usado tanto para
indicar que a funo no retorna nenhum valor ou, como um parmetro de funo, para indicar
ausncia de parmetros.
A predefinida varivel constante NULL do tipo void. Ele pode ser atribudo a variveis de qualquer
outro tipo fundamental sem converso. A comparao de variveis de tipo fundamental com o valor
NULL permitida..
Exemplo:
//--- Se a string no inicializada, ento atribua nosso valor predefinido a ela
if(some_string==NULL) some_string="empty";

Tambm NULL pode ser comparado com ponteiros de objetos criados com o operador new.
Tambm Veja
Variveis, Funes

2000-2014, MetaQuotes Software Corp.

98

Elementos Bsicos da Linguagem

Ponteiros de Objeto
Em MQL5, existe a possibilidade de dinamicamente criar objetos de tipo complexo. Isso feito por
meio do operador new, que retorno um descritor do objeto criado. Descritores tm 8 bytes de
tamanho. Sintaticamente, descritores de objeto em MQL5 so similares aos ponteiros em C++.
Exemplos:
MyObject* hobject= new MyObject();

Novamente, diferentemente do C++, a varivel hobject do exemplo acima no um ponteiro de


memria, ele um descritor do objeto.
Tambm Veja
Variveis, Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e
Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

99

Elementos Bsicos da Linguagem

Referncia, Modificador & e Palavra-chave this


Passando Parmetros por Referncia
Em MQL5, parmetros de tipos simples podem ser passados tanto por valor como por referncia,
enquanto que parmetros de tipos compostos so sempre passados por referncia. Para informar ao
compilador que um parmetro deve ser passado por referncia, o caractere "e comercial" &
adicionado antes do nome do parmetro.
Passar um parmetro por referncia significa passar o endereo da varivel, por isso que todas as
mudanas no parmetro que passado por referncia ser imediatamente refletida na varivel
origem. Usando parmetros passados por referncia, pode-se implementar o retorno de vrios
resultados de uma funo ao mesmo tempo. A fim de evitar alterao de um parmetro passado por
referncia, use o modificador const.
Assim, se o parmetro de entrada de uma funo for um array, um objeto de classe ou estrutura, o
smbolo '&' colocado no cabealho da funo aps o tipo da varivel e antes de seu nome.
Exemplo
class CDemoClass
{
private:
double

m_array[];

public:
void

setArray(double &array[]);

};
//+------------------------------------------------------------------+
//| Preenchendo o array

//+------------------------------------------------------------------+
void

CDemoClass::setArray(double &array[])

{
if(ArraySize(array)>0)
{
ArrayResize(m_array,ArraySize(array));
ArrayCopy(m_array, array);
}
}

No exemplo acima, a classe CDemoClass declarada, e contm o membro array private - m_array[] de
tipo double. A funo setArray() declarada, e o parmetro array[] passado por referncia. Se o
cabealho da funo no contm a indicao de passar por referncia, isto , no contm o caractere
"e comercial" (&), uma mensagem de erro ser gerada na tentativa de compilar tal cdigo.
Apesar do fato de que um array passado por referncia, no se pode atribuir um array ao outro. Ns
precisamos realizar a cpia elemento a elemento de contedo do array origem para o array destino. A
presena de & nas descries de funo uma condio obrigatria para array e estruturas quando
passado como parmetro de funo.

Palavra-chave this
2000-2014, MetaQuotes Software Corp.

100

Elementos Bsicos da Linguagem


Uma varivel de tipo de classe (objeto) pode ser passado tanto por referncia como por ponteiro.
Assim como referncia, o ponteiro permite ter acesso a um objeto. Aps o ponteiro de objeto ser
declarado, o operador new deve ser aplicado nele para cri-lo e inicializ-lo.
A palavra reservada this destinado para obter a referncia do objeto para si mesmo, que fica
disponvel dentro de mtodos de classe e estrutura. this sempre referencia o objeto, dentro do
mtodo em que ele usado, e a expresso GetPointer(this) retorna o ponteiro do objeto, cujo
membro a funo na qual a chamada ao GetPointer() realizado. Em funes MQL5 no se pode
retornar objetos, mas eles podem retornar ponteiro de objeto.
Assim, se precisamos de uma funo para retornar um objeto, ns podemos retornar o ponteiro deste
objeto na forma de GetPointer(this). Vamos adicionar a funo getDemoClass() que retorna o ponteiro
do objeto para este classe, na descrio de CDemoClass.
class CDemoClass
{
private:
double

m_array[];

public:
void
CDemoClass

setArray(double &array[]);
*getDemoClass();

};
//+------------------------------------------------------------------+
//| Preenchendo o array

//+------------------------------------------------------------------+
void

CDemoClass::setArray(double &array[])

{
if(ArraySize(array)>0)
{
ArrayResize(m_array,ArraySize(array));
ArrayCopy(m_array,array);
}
}
//+------------------------------------------------------------------+
//| Retorna seu prprio ponteiro

//+------------------------------------------------------------------+
CDemoClass *CDemoClass::getDemoClass(void)
{
return(GetPointer(this));
}

Estruturas no tm ponteiros, os operadores newedeleteno podem ser aplicados a eles,


GetPointer(this) no pode ser usado.
Tambm Veja
Ponteiros de Objetos, Criando e Excluindo Objetos, Visibilidade Escopo e Tempo de Vida de
Variveis

2000-2014, MetaQuotes Software Corp.

101

Elementos Bsicos da Linguagem

Operaes e Expresses
Alguns caracteres e seqncias de caractere so de uma importncia especial. Existem os chamados
smbolos de operao, por exemplo:
+ - * / %

Smbolos de operaes aritmticas

&& ||

Smbolos de operaes lgicas

= += *=

Caracteres de operador de atribuio

Os smbolos de operao so usados em expresses e tm sentido quando operandos apropriados so


dados a eles. Sinais de pontuao so enfatizados, da mesma forma. Existem parnteses, chaves,
vrgula, dois pontos, e ponto e vrgula.
Smbolos de operao, sinais de pontuao, e espaos so usados para separar elementos de
linguagem uns dos outros.
Esta seo contm a descrio dos seguintes tpicos:
Expresses
Operaes Aritmticas
Operaes de Atribuio
Operaes de Relao
Operaes Booleanas
Operaes Binrias
Outras Operaes
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

102

Elementos Bsicos da Linguagem

Expresses
Uma expresso consiste de um ou mais operandos e smbolos de operao. Uma expresso pode ser
escrita em vrias linhas.
Exemplos:
a++; b = 10;
//---

// vrias expresses esto localizados em uma linha

uma expresso est dividida em vrias linhas

x = (y * z) /
(w + 2) + 127;

Uma expresso que termina com um ponto e vrgula (;) um operador.


Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

103

Elementos Bsicos da Linguagem

Operaes Aritmticas
Operaes aritmticas incluem operaes aditivas e multiplicativas:
Soma de variveis

i = j + 2;

Diferena de variveis

i = j - 3;

Mudana de sinal

x = - x;

Produto de variveis

z = 3 * x;

Quociente de diviso

i = j / 5;

Resto de diviso

minutes = time % 60;

Adicionando 1 ao valor da varivel

i++;

Adicionando 1 ao valor da varivel

++i;

Subtraindo 1 ao valor da varivel

k--;

Subtraindo 1 do valor da varivel

--k;

Operaes de incremento e decremento so aplicadas somente a variveis, elas no podem ser


aplicadas a constantes. O prefixo de incremento (++i) e decremento (--k) so aplicados varivel
imediatamente antes desta varivel ser usada em uma expresso.
Ps-incremento (a++) e ps-decremento (k--) so aplicados varivel imediatamente depois da
varivel ser usado em uma expresso.
Observao importante
int i=5;
int k = i++ + ++i;

Problemas computacionais podem ocorrer na movimentao da expresso acima de um ambiente de


programao para outro (por exemplo, do Borland C++ para MQL5). Geralmente, a ordem de
computao depende da implementao do compilador. Na prtica, existem duas formas de
implementar o ps-decremento (ps-incremento):
1. O ps-decremento (ps-incremento) aplicado varivel depois de se calcular a expresso toda.
2. O ps-decremento (ps-incremento) aplicado varivel imediatamente na operao.
Atualmente, a primeira forma de calcular o ps-decremento (ps-incremento) est implementado no
MQL5. Mas mesmo conhecendo esta peculiaridade, no se recomenda experincias com seu uso.
Exemplos:
int a=3;
a++;

// expresso vlida

int b=(a++)*3;

// expresso invlida

Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

104

Elementos Bsicos da Linguagem

Operaes de Atribuio
O valor da expresso que inclui uma dada operao o valor a esquerda do operando aps a
atribuio:
Atribuindo o valor x para a varivel y

y = x;

As seguintes operaes unem operaes arimticas e binrias com operaes de atribuio:


Adicionando x varivel y

y += x;

Subtraindo x da varivel y

y -= x;

Multiplicando a varivel y por x

y *= x;

Dividindo a varivel y por x

y /= x;

Resto da diviso da varivel y por x

y %= x;

Operao AND bit a bit de representaes binrias de y e x

y &= x;

Operao AND bit a bit de representaes binrias de y e x

y &= x;

Operao AND bit a bit de representaes binrias de y e x

y &= x;

Operao OR bit a bit de representaes binrias de y e x

y |= x;

Operao OR Exclusivo bit a bit de representaes binrias de y e x

y ^= x;

Operaes bit a bit podem ser aplicados somente em inteiros. Ao realizar a operao de deslocamento
lgico da representao de y para direita/esquerda em x bits, os 5 menores dgitos binrios do valor
de x so usados, os bits maiores so descartados, isto , o deslocamento feito para 0-31 bits.
Pela operao %= (resto da diviso de y por x), o sinal resultante igual ao sinal do nmero dividido.
O operador de atribuio pode ser usado vrias vezes em uma expresso. Neste caso o processamento
da expresso realizado da esquerda para direta:
y=x=3;

Primeiro, a varivel x ser atribuda o valor 3, ento a varivel y ser atribuda o valor de x, isto ,
tambm 3.
Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

105

Elementos Bsicos da Linguagem

Operaes de Relao
A booleana FALSE representada pelo valor zero inteiro, enquanto que a booleana TRUE
representada por qualquer valor no inteiro.
O valor de expresses contendo operaes de relao ou operaes lgicas FALSE (0) ou TRUE (1).
True se a igual a b

a == b;

True se a no igual a b

a != b;

True se a menor que b

a < b;

True se a no menor que b

a > b;

True se a menor ou igual a b

a <= b;

True se a maior ou igual a b

a >= b;

A igualdade de dois nmeros reais no pode ser comparada. Na maioria dos casos, dois nmeros
aparentemente idnticos podem ser desiguais por causa da diferena de valores na 15 casa decimal. A
fim de comparar corretamente dois nmeros reais, compare a diferena normalizada destes nmeros
com zero.
Exemplo:
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 e %.16f so iguais",first,third);
}
}
// Resultado: 0.3000000000000000

0.2999999999999998

so iguais

Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

106

Elementos Bsicos da Linguagem

Operaes Booleanas
Negao Lgica NOT (!)
Operando da negao lgia (!) deve ser de tipo aritmtico. O resultado TRUE (1), se o valor do
operando FALSE (0); e igual a FALSE (0), se o operando difere de FALSE (0).
if(!a) Print("no 'a'");

Operao lgica OR (||)


Operao OR lgico (||) entre valores x e y. O valor da expresso TRUE (1), se os valores x ou y so
verdadeiros (not null). Seno - FALSE (0).
if(x<0 || x>=max_bars) Print("fora da faixa");

Operao lgica AND (&&)


Operao lgica AND (&&) entre valores de x e y. O valor da expresso TRUE (1), se os valores de x
e y so verdadeiros (not null). Seno - FALSE (0).

Estimao breve de Operaes Booleanas


O esquema do chamado "brief estimate" (estimao breve) aplicado a operaes booleanas, isto , o
clculo da expresso finalizado quando o resultado da expresso pode ser precisamente estimado.
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- o primeiro exemplo de estimao breve
if(func_false() && func_true())
{
Print("Operao &&: Voc nunca ver esta expresso");
}
else
{

Print("Operao &&: Resultado da primeira expresso falso, ento a segunda no calculada"


}
//--- o segundo exemplo da estimao breve
if(!func_false() || !func_true())
{

Print("Operao ||: Resultado da primeira expresso verdadeiro,ento a segunda no calcul


}
else
{
Print("Operao ||: Voc nunca ver esta expresso");
}
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

107

Elementos Bsicos da Linguagem


//| a funo sempre retorna false

//+------------------------------------------------------------------+
bool func_false()
{
Print("Funo func_false()");
return(false);
}
//+------------------------------------------------------------------+
//| a funo sempre retorna true

//+------------------------------------------------------------------+
bool func_true()
{
Print("Funo func_true()");
return(true);
}

Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

108

Elementos Bsicos da Linguagem

Operaes Binrias
Complementar de Um
Complementar do valor da varivel at um. O valor da expresso contm 1 em todos os dgitos onde o
valor da varivel contem 0, e 0 em todos os demais dgitos onde a varivel contem 1.
b = ~n;

Exemplo:
char a='a',b;
b=~a;
Print("a = ",a, "

b = ",b);

// O resultado ser:
// a = 97

b = -98

Deslocamento para Direita


A representao binria de x deslocada para direita em y dgitos. Se o valor a ser deslocado de um
tipo sem sinal (unsigned type), o deslocamento lgico para a direita feito, isto , os bits do lado
esquerdo liberados sero preenchido com zeros.
Se o valor a ser desloca de um tipo com sinal (signed type), o deslocamento aritmtico para direita
feito, isto , os dgitos do lado esquerdo liberados sero preenchidos com o valor do bit de sinal (sign
bit) (se o nmero positivo, o valor do bit de sinal 0, se o nmero negativo, o valor do bit de sinal
1).
x = x >> y;

Exemplo:
char a='a',b='b';
Print("Antes:

a = ",a, "

b = ",b);

//--- deslocamento para direita


b=a>>1;
Print("Aps:

a = ",a, "

b = ",b);

// O resultado ser:
// Antes:

a = 97

b = 98

// Aps:

a = 97

b = 48

Deslocamento para Esquerda


A representao binria de x deslocada para esquerda em y dgitos, os dgitos do lado direito
liberados so preenchidos com zero.
x = x << y;

Exemplo:
char a='a',b='b';
Print("Antes:

a = ",a, "

b = ",b);

//--- deslocamento para a esquerda

2000-2014, MetaQuotes Software Corp.

109

Elementos Bsicos da Linguagem


b=a<<1;
Print("Aps:

a = ",a, "

b = ",b);

// O resultado ser:
// Antes:

a = 97

b = 98

// Aps:

a = 97

b = -62

No recomendvel deslocar um nmero maior ou igual de bits que o comprimento da varivel


deslocada, porque o resultado de tal operao indefinido.

Operao AND bit a bit


A operao AND bit a bit em representaes binrias de x e y. O valor da expresso contem 1 (TRUE)
em todos os dgitos onde ambos x e y contm no-zero, e contem 0 (FALSE) em todos os demais
dgitos.
b = ((x & y) != 0);

Exemplo:
char a='a',b='b';
//--- operao AND
char c=a&b;
Print("a = ",a,"

b = ",b);

Print("a & b = ",c);


// O resultado ser:
// a = 97

b = 98

// a & b = 96

Operao OR bit a bit


A operao OR bit a bit de representaes binrias de x e y. O valor da expresso contem 1 em todos
os dgitos onde x ou y no contm 0, e contm 0 em todos os demais dgitos.
b = x | y;

Exemplo:
char a='a',b='b';
//--- operao OR
char c=a|b;
Print("a = ",a,"

b = ",b);

Print("a | b = ",c);
// O resultado ser:
// a = 97

b = 98

// a | b = 99

Operao OR Exclusivo bit a bit


A operao OR exclusivo bit a bit (eXclusive OR) de representaes binrias de x e y. O valor da
expresso contem 1 em todos os dgitos onde x e y tem valores binrios diferentes, e contm 0 em
todos os demais dgitos.
b = x ^ y;

2000-2014, MetaQuotes Software Corp.

110

Elementos Bsicos da Linguagem


Exemplo:
char a='a', b='b';
//--- operao OR Exclusivo
char c=a^b;
Print("a = ",a,"

b = ",b);

Print("a ^ b = ",c);
// O resultado ser:
// a = 97

b = 98

// a ^ b = 99

Operaes bit a bit so realizadas somente com inteiros.


Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

111

Elementos Bsicos da Linguagem

Outras Operaes
Indexao ( [] )
Ao enderear o i-simo elemento de um array, o valor da expresso o valor da varivel com o
nmero serial i.
Exemplo:
array[i] = 3; // Atribui o valor de 3 ao i-simo elemento do array.

Somente um inteiro pode ser ndice de um array. So permitidos arrays com 4 dimenses ou menos.
Cada medida indexada de 0 ao tamanho da medida - 1. Em particular, para um array de uma
dimenso consistindo de 50 elementos, a referncia ao primeiro elemento se assemelhar a array[0],
e a referncia ao ltimo elemento ser array[49].
Ao enderear alm do array, o subsistema em execuo gerar um erro crtico, e o programa ser
interrompido.

Chamando Funo com argumentos x1, x2 ,..., xn


Cada argumento pode representar uma constante, varivel, ou expresso do correspondente tipo. Os
argumentos passados so separados por vrgula e devem estar dentro dos parnteses, o parntese de
abertura deve seguir o nome da funo chamada.
O valor da expresso o valor retornado pela funo. Se o valor retornado do do tipo void, a
chamada da funo no pode ser colocada a direita de um operador de atribuio. Por favor, esteja
certo de que as expresses x1, ..., xn so executadas exatamente neste ordem.
Exemplo:
int length=1000000;
string a="a",b="b",c;
//--- Outras Operaes
int start=GetTickCount(),stop;
long i;
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("tempo para 'c = a + b' = ",(stop-start)," milissegundos, i = ",i);

Operao Vrgula ( , )
Expresses separadas por vrgulas so executadas da esquerda para direita. Todos os efeitos
colaterais do clculo da expresso a esquerda podem aparecer antes da expresso a direita ser
calculada. O tipo do resultado e o valor coincidem com aqueles da expresso a direita. A lista de
parmetros a ser passada (seja acima) pode ser considerada como um exemplo.
Exemplo:

2000-2014, MetaQuotes Software Corp.

112

Elementos Bsicos da Linguagem


for(i=0,j=99; i<100; i++,j--) Print(array[i][j]);

Operador Ponto ( . )
Para o acesso direto a membros pblicos de estruturas e classes, a operao ponto usada. Sintaxe:
Nome_da_varivel_do_tipo_estrutura.Nome_do_membro

Exemplo:
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;

Operao de Resoluo de Escopo ( :: )


Cada funo em um programa MQL5 tem seu prprio escopo de execuo. Por exemplo, a funo de
sistema Print() realizada em um escopo global. Funes Importadas so chamadas no escopo do
correspondente import. Mtodos de funes de classes tm o escopo da correspondente classe. A
sintaxe do operador de resoluo de escopo o seguinte:
[Scope_name]::Function_name(parameters)

Se no existir nenhum nome de escopo, isto uma orientao explcita para usar o escopo global. Se
no existir nenhuma operao de resoluo de escopo, a funo procurada no escopo mais prximo.
Se no existir nenhuma funo no escopo local, a procura conduzida no escopo global.
A resoluo de escopo tambm usada para definir funes membros de classe.
type Class_name::Function_name(parameters_description)
{
// corpo da funo
}

Exemplo:
#property script_show_inputs
#import "kernel32.dll"
int GetLastError(void);
#import
class CCheckContext

2000-2014, MetaQuotes Software Corp.

113

Elementos Bsicos da Linguagem


{
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());
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--CCheckContext2 test;
test.Print();
}
//+------------------------------------------------------------------+

Operao de Obteno do Tamanho do Tipo de Dados ou Tamanho


do Objeto de Qualquer Tipo de Dados ( sizeof )
Usando a operao sizeof o tamanho de memria correspondente a um identificador ou tipo pode ser
definido. A operao sizeof do seguinte formato:
Exemplo:
sizeof(expression)

Qualquer identificador, ou nome de tipo entre colchetes pode ser usado como uma expresso. Observe
que o nome tipo void no pode ser usado, e o identificar no pode pertencer ao campo de bits, ou ser
um nome de funo.
Se a expresso for o nome de um array esttico (isto , a primeira dimenso dada), ento o
resultado o tamanho do array inteiro (isto , o produto do nmero de elementos e o comprimento do

2000-2014, MetaQuotes Software Corp.

114

Elementos Bsicos da Linguagem


tipo. Se a expresso o nome de um array dinmico (a primeira dimenso no especificada), o
resultado ser o tamanho do objeto do array dinmico.
Quando sizeof aplicado ao nome de um tipo de estrutura ou classe, ou ao identificador do tipo de
uma estrutura ou classe, o resultado tamanho real da estrutura ou classe.
Exemplo:
struct myStruct
{
char

h;

int

b;

double f;
} str;
Print("sizeof(str) = ",sizeof(str));
Print("sizeof(myStruct) = ",sizeof(myStruct));

O tamanho calculado na etapa de compilao.


Tambm Veja
Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

115

Elementos Bsicos da Linguagem

Regras de Precedncia
Cada grupo de operaes na tabela tem a mesma prioridade. Quanto mais alta a prioridade de
operaes, mais alta a posio do grupo na tabela. As regras de precedncia determinar o
agrupamento de operaes e operandos.
Ateno: A precedncia de operaes na linguagem MQL5 corresponde prioridade adotada em C++, e
difere da prioridade dada na linguagem MQL4.
Operao

Descrio

Ordem de Execuo

()
[]
.

Chamada de Funo
Referenciando um elemento de
array
Referenciando um elemento de
estrutura

Da esquerda para direita

!
~

++
-(tipo)
sizeof

Negao lgica
Negao
bit
a
bit
(complemento)
Mudana de Sinal
Incremento por um
Decremento por um
Converso
de
Tipo
(Typecasting)
Determinao de tamanho em
bytes

Direita para esquerda

*
/
%

Multiplicao
Diviso
Quociente de diviso

Da esquerda para direita

Adio
Subtrao

Da esquerda para direita

<<
>>

Deslocamento para esquerda


Deslocamento para direita

Da esquerda para direita

<
<=
>
>=

Menor que
Menor ou igual a
Maior que
Maior ou igual a

Da esquerda para direita

==
!=

Igual
No igual

Da esquerda para direita

&

Operao AND bit a bit

Da esquerda para direita

OR exclusivo bit a bit

Da esquerda para direita

Operao OR bit a bit

Da esquerda para direita

&&

Operao lgica AND

Da esquerda para direita

||

Operao lgica OR

Da esquerda para direita

2000-2014, MetaQuotes Software Corp.

116

Elementos Bsicos da Linguagem

?:

Operador condicional

Direita para esquerda

=
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=

Atribuio
Multiplicao com atribuio
Diviso com atribuio
Quociente de diviso com
atribuio
Adio com atribuio
Subtrao com atribuio
Deslocamento para esquerda
com atribuio
Deslocamento para direita com
atribuio
AND bit a bit com atribuio
OR Exclusivo com atribuio
OR bit a bit com atribuio

Direita para esquerda

Vrgula

Da esquerda para direita

Para mudar a ordem de execuo de operao, so usados parnteses, que so de prioridade mais
alta.

2000-2014, MetaQuotes Software Corp.

117

Elementos Bsicos da Linguagem

Operadores
Operadores de linguagem descrevem algumas operaes algortmicas que devem ser executadas para
se realizar uma tarefa. O corpo do programa uma seqncia de tais operadores. Operadores, um a
um, so separados por ponto e vrgula.
Operador

Descrio

Operador Composto {}

Um ou mais operadores de qualquer tipo, entre


chaves {}

Operador de Expresso (;)

Qualquer expresso que termina com ponto e


vrgula (;)

return operador

Finaliza a funo corrente e retorna o controle


para o programa chamador

if-else operador condicional

usado quando necessrio fazer uma escolha

?: operador condicional

Um anlogo simples do operador condicional ifelse

switch operador de seleo

Passa o controle para o operador


corresponde ao valor da expresso

while operador de loop

Realiza uma operao at que a expresso


verificada se torne falsa. A expresso
verificada antes de cada iterao

for operador de loop

Realiza uma operao at que a expresso


verificada se torne falsa. A expresso
verificada antes de cada iterao

do-while operador de loop

Realiza uma operao at que a expresso


verificada se torne falsa. A condio de
finalizao verificada, aps cada loop. O
corpo do loop executado pelo menos uma vez.

break operador

Finaliza a execuo do operador externo


adjunto mais prximo: switch, while, do-while
ou for.

continue operador

Passa controle para o comeo do loop do


operador externo mais prximo: while, do-while
ou for

new operador

Cria um objeto de tamanho apropriado e


retorna um descritor do objeto criado.

delete operador

Exclui o objeto criado pelo operador new

que

Um operador pode ocupar uma ou mais linhas. Dois ou mais operadores podem ser colocados na
mesma linha. Operadores que controlam a ordem de execuo (if, if-else, switch, while e for) podem
ser aninhados (encaixados) um no outro.
Exemplo:

2000-2014, MetaQuotes Software Corp.

118

Elementos Bsicos da Linguagem


if(Month() == 12)
if(Day() == 31) Print("Feliz Ano Novo!");

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

119

Elementos Bsicos da Linguagem

Operador Composto
Um operador composto (um bloco) consiste de um ou mais operadores de qualquer tipo, entre chaves
{}. A chave de fechamento deve ser seguida por dois pontos (;).
Exemplo:
if(x==0)
{
Print("posio invlida x = ",x);
return;
}

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

120

Elementos Bsicos da Linguagem

Operador de Expresso
Qualquer expresso seguida por ponto e vrgula (;) o operador. Aqui esto alguns exemplos de
operadores de expresso.

Operador de Atribuio
Identificador = expresso;
x=3;
y=x=3;
bool equal=(x==y);

Um operador de atribuio pode ser usado muitas vezes em uma expresso. Neste caso, a expresso
processada da esquerda para direita:

Operador de Chamada de Funo


Function_name (argument1,..., argumentN);
FileClose(file);

Operador Empty
Consiste somente de um ponto e vrgula (;) e usado para denotar um corpo vazio de um operador de
controle.
Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

121

Elementos Bsicos da Linguagem

Operador return
O operador return finaliza a execuo da funo corrente e retorna o controle para o programa
chamador. O resultado do clculo da expresso retornado para a funo chamadora. A expresso
pode conter um operador de atribuio.
Exemplo:
int CalcSum(int x, int y)
{
return(x+y);
}

Em funes com o tipo de retorno void, o operador return sem expresso deve ser usada:
void SomeFunction()
{
Print("Ol!");
return;

// este operador pode ser removido

A chave direita da funo ("}") significa execuo implcita do operador return sem expresso.
Pode ser retornado: tipos simples, estruturas simples, ponteiros de objetos. Com o operador return
no se pode retornar arrays, objetos de classe, variveis de tipo estrutura composta.
Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

122

Elementos Bsicos da Linguagem

Operador Condicional If-Else


O operador IF - ELSE usado quando uma escolha deve ser feita. Formalmente, a sintaxe a
seguinte:
if (expresso)

operador1

else

operador2

Se a expresso verdadeira, o operador1 executado e o controle dado ao operador que segue o


operador2. Se a expresso falsa, o operador2 executado.
A parte else do operador if pode ser omitida. Assim, uma divergncia pode aparecer em operadores
aninhados (encaixados) if com omisso da parte else. Neste caso, o else se refere ao operador
anterior if mais prximo no mesmo bloco que no tem a parte else.
Exemplos:
//--- A parte else refere-se ao segundo operador if:
if(x>1)
if(y==2) z=5;
else

z=6;

//--- A parte else refere-se ao primeiro operador if:


if(x>l)
{
if(y==2) z=5;
}
else

z=6;

//--- Operadores aninhados


if(x=='a')
{
y=1;
}
else if(x=='b')
{
y=2;
z=3;
}
else if(x=='c')
{
y=4;
}
else Print("ERROR");

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

123

Elementos Bsicos da Linguagem

Operador Ternrio ?
A forma geral do operador ternrio a seguinte:
expresso1 ? expresso2 : expresso3

Para o primeiro operando - "expresso1" - qualquer expresso que resulte em um valor do tipo bool
pode ser usado. Se o resultado true, ento o operador definido pelo segundo operando, isto ,
"expresso2", executado.
Se o primeiro operando false, o terceiro operando - "expresso3" executado. Os segundo e terceiro
operandos, isto , "expresso2" e "expresso3" devem retornar valores de algum tipo e no devem ser
do tipo void. O resultado da execuo do operador condicional o resultado de expresso2 ou o
resultado de expresso3, dependendo do resultado de expresso1.
//--- diferena normalizada entre preos de abertura e fechamento para intervalo de um dia
double true_range = (High==Low)?0:(Close-Open)/(High-Low);

Esta entrada equivalente ao seguinte:


double true_range;
if(High==Low)true_range=0;

// se o Mximo e o Mnimo so iguais

else true_range=(Close-Open)/(High-Low); // se a faixa no nula

Restries ao Uso do Operador


Baseado no valor da "expresso1", o operador deve retornar um dentre dois valores - ou "expresso2"
ou "expresso3". Existem vrias limitaes nessas expresses:
1. No confunda o tipo user-defined (definida pelo usurio) com o tipo simples ou enumerador. NULL
pode ser usado para ponteiro.
2. Se os tipos dos valores so simples, o operador ser do tipo mximo (veja Converso de Tipos (type
casting)).
3. Se algum dos valores uma enumerao e o segundo valor de um tipo numrico, a enumerao
substituda por int e a segunda regra aplicada.
4. Se ambos os valores so enumeraes, seus tipos devem ser idnticos, e o operador ser do tipo
enumerao.
Restries ao tipos user-defined (classes ou estruturas definidas pelo usurio):
a) Os tipos devem ser idnticos ou um deve ser derivado do outro.
b) Se os tipo no forem idnticos (herana), ento a filha implicitamente convertida para o pai, isto
, o operador ser do tipo paterno.
c) No confunda objetos com ponteiros - ambas as expresso ou so objetos ou so ponteiros. NULL
pode ser usado para ponteiro.
Observao
Cuidado ao usar o operador condicional como um argumento de uma funo de sobrecarga, porque o
tipo do resultado de um operador condicional definido na durante a compilao do programa. E este

2000-2014, MetaQuotes Software Corp.

124

Elementos Bsicos da Linguagem


tipo definido como a maior dos tipos "expression2" e "expression3".
Exemplo:
void func(double d) { Print("double argumento: ",d); }
void func(string s) { Print("string argumento: ",s); }
bool

Expression1=true;

double Expression2=M_PI;
string Expression3="3.1415926";
void OnStart()
{
func(Expression2);
func(Expression3);
func(Expression1?Expression2:Expression3);

// aviso sobre converso implcita para string

func(!Expression1?Expression2:Expression3);

// aviso sobre converso implcita para string

}
//

Resultado:

//

double argumento: 3.141592653589793

//

string argumento: 3.1415926

//

string argumento: 3.141592653589793

//

string argumento: 3.1415926

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

125

Elementos Bsicos da Linguagem

Operador switch
Compara o valor da expresso com constantes em todas as variantes de case e passa o controle para o
operador, que corresponde ao valor da expresso. Cada variante de case pode ser marcada com uma
constante inteira, uma constante literal ou uma expresso constante. A expresso constante no pode
conter variveis ou chamadas de funo. A expresso do operador switch deve ser do tipo inteiro.
switch(expresso)
{
case constantes: operadores
case constantes: operadores
...
default: operadores
}

Operadores marcados pelo rtulo default so executados se nenhuma das constantes nos operadores
case forem iguais ao valor da expresso. A variante default no precisa ser necessariamente
declarada e no precisa ser necessariamente ser a ltimo. Se nenhuma das constantes corresponder ao
valor da expresso e a variante default no estiver presente, nenhuma ao ser executada.
A palavra-chave case com uma constante so apenas rtulos, e se operadores forem executados para
alguma variante case, o programa continuar a executar os operadores de todas as subseqentes
variantes at que o operador break ocorra. Isso permite vincular uma seqncia de operadores com
vrias variantes.
Uma expresso constante calculada durante a compilao. Duas constantes em um operador switch
no podem ter o mesmo valor.
Exemplos:
//--- Primeiro exemplo
switch(x)
{
case 'A':
Print("CASE A");
break;
case 'B':
case 'C':
Print("CASE B ou C");
break;
default:
Print("NOT A, B ou C");
break;
}
//---

Segundo exemplo

string res="";
int i=0;
switch(i)
{
case 1:

2000-2014, MetaQuotes Software Corp.

126

Elementos Bsicos da Linguagem


res=i;break;
default:
res="default";break;
case 2:
res=i;break;
case 3:
res=i;break;
}
Print(res);
/*
Result
default
*/

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

127

Elementos Bsicos da Linguagem

Operador de Loop while


O operador while consiste de uma expresso verificada e um operador:
while(expression)
operador;

Se a expresso verdadeira, o operador executado at que a expresso se torne falsa. Se a


expresso falsa, o controle passado para o prximo operador. O valor da expresso definido
antes do operador ser executado. Portanto se a expresso falsa logo no comeo, o operador no ser
executado.
Observao
Se esperado que um grande nmero de iteraes seja tratado por um loop, recomendvel que se
verifique a ocorrncia de uma finalizao de programa forada usando a funo IsStopped().
Exemplo:
while(k<n && !IsStopped())
{
y=y*x;
k++;
}

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

128

Elementos Bsicos da Linguagem

Operador de Loop For


O operador for consiste de trs expresses e um operador executvel:
for(expresso1; expresso2; expresso3)
operador;

Expresso1 descreve a inicializao do loop. Expression2 verifica as condies de finalizao do loop.


Se for verdadeira, o corpo do loop do for executado. Realiza uma operao at que a expresso
verificada se torne falsa. Se a expresso verdadeira, o operador1 executado e o controle dado ao
operador que segue o operador2. Expression3 calculado aps cada iterao.
O operador for equivalente seguinte sucesso de operadores:
expresso1;
while(expresso2)
{
operador;
expresso3;
};

Quaisquer das trs ou todas as trs expresses podem estar ausentes no operador for, mas o ponto e
vrgula (;) que as separada no pode ser omitido. Se expresso2 omitida, ela considerada como
verdadeira. O operador for(;;) um loop contnuo, equivalente ao operador while(1). As expresses 1
e 3 podem consistir de vrias expresses combinadas por um operador vrgula ','.
Observao
Se esperado que um grande nmero de iteraes seja tratado por um loop, recomendvel que se
verifique a ocorrncia de uma finalizao de programa forada usando a funo IsStopped().
Exemplos:
for(x=1;x<=7000; x++)
{
if(IsStopped())
break;
Print(MathPower(x,2));
}
//--- Outro exemplo
for(;!IsStopped();)
{
Print(MathPower(x,2));
x++;
if(x>10) break;
}
//--- Terceiro exemplo
for(i=0,j=n-l;i<n && !IsStopped();i++,j--) a[i]=a[j];

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo

2000-2014, MetaQuotes Software Corp.

129

Elementos Bsicos da Linguagem


Objetos

2000-2014, MetaQuotes Software Corp.

130

Elementos Bsicos da Linguagem

Operador de loop do while


Os loops for e while verificam o trmino no comeo, no no fim de um loop. O terceiro operador de
loop do - while verifica a condio de trmino no fim, aps cada interao do loop. O corpo do loop
sempre executado pelo menos uma vez.
do
operador;
while(expression)

Primeiro o operador executado, ento a expresso calculada. Se a expresso for verdadeira, ento
o operador executado novamente, e assim por diante. Se a expresso se tornar falsa, o loop
termina.
Observao
Se esperado que um grande nmero de iteraes seja tratado por um loop, recomendvel que se
verifique a ocorrncia de uma finalizao de programa forada usando a funo IsStopped().
Exemplo:
//--- Calcula a srie de Fibonacci
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++; // Sem este operador um loop infinito aparecer!
}
while(i<counterFibonacci && !IsStopped());

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

131

Elementos Bsicos da Linguagem

Operador break
O operador break finaliza a execuo do operador aninhado (encaixado) switch, while, do-while ou for
mais prximo. O controle passado ao operador que se segue a aquele finalizado. Um dos propsitos
deste operador finalizar a execuo de loop quando um certo valor atribudo a uma varivel.
Exemplo:
//--- buscando pelo primeiro elemento zero
for(i=0;i<array_size;i++)
if(array[i]==0)
break;

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

132

Elementos Bsicos da Linguagem

Operador continue
O operador continue passa o controle para o comeo do prximo loop do operador while, do-while ou
for mais prximo, executando a prxima iterao. O propsito deste operador oposto ao do
operador break.
Exemplo:
//--- Soma de todos os elementos no-zero
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);
}

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

133

Elementos Bsicos da Linguagem

Operador de Criao de Objeto new


O operador new automaticamente cria um objeto de tamanho correspondente, chama o construtor do
objeto e retorna um descritor do objeto criado. Em caso de falha, o operador retorna um descritor de
null que pode ser comparado com a constante NULL.
O operador new pode ser aplicado somente a objetos de classe. Ele no pode ser aplicado a estruturas.
O operador no deve ser usado para criar arrays de objetos. Para fazer isso, use a funo
ArrayResize().
Exemplo:
//+------------------------------------------------------------------+
//| Criao de Figura

//+------------------------------------------------------------------+
void CTetrisField::NewShape()
{
m_ypos=HORZ_BORDER;
//--- cria aleatoriamente uma das 7 possveis formas
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;
}
//--- desenhar
if(m_shape!=NULL)
{
//--- pr-configuraes
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();
}
//--}

Deve ser notado que um descritor do objeto no um ponteiro para um endereo de memria.
Um objeto criado com o operador new deve ser explicitamente removido usando o operador delete.
Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo

2000-2014, MetaQuotes Software Corp.

134

Elementos Bsicos da Linguagem


Objetos

2000-2014, MetaQuotes Software Corp.

135

Elementos Bsicos da Linguagem

Operao de Excluso de Objeto delete


O operador delete exclui um objeto criado pelo operador new, chama o destrutor da classe
correspondente e libera memria ocupada pelo objeto. Um descritor real de um objeto existente
usado como um operando. Aps a operao de excluso (delete) ser executada, o descritor do objeto
torna-se invlido.
Exemplo:
//--- exclui figura
delete m_shape;
m_shape=NULL;
//--- criar uma nova figura
NewShape();

Tambm Veja
Inicializao de Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo
Objetos

2000-2014, MetaQuotes Software Corp.

136

Elementos Bsicos da Linguagem

Funes
Toda tarefa pode ser dividida em sub-tarefas, cada qual podendo ser representada tanto na forma de
cdigo, como ser divida em sub-tarefas ainda menores. Este mtodo chamado de refinamento passo
a passo.. Funes so usadas para escrever o cdigo das sub-tarefas a serem resolvidas. O cdigo que
descreve o que uma funo faz chamado de definio de funo:
function_header
{
instrues
}

Tudo que est antes da primeira chave o cabealho (header) da definio de funo, e o que est
entre as chaves o corpo (body) da definio de funo. O cabealho de funo (function header)
inclui a descrio do tipo de valor de retorno, o nome (identificador) e os parmetros formais. O
nmero de parmetros passados para a funo limitado e no pode exceder 64.
A funo pode ser chamada de outras partes do programa quantas vezes forem necessrias. Na
verdade, o tipo de retorno, o identificador da funo e os tipos de parmetros constituem o prottipo
da funo.
Prottipo de funo a declarao da funo, mas no a sua definio. Devido a declarao explcita
do tipo de retorno e da lista dos tipos de argumentos, a verificao estrita de tipo e a implcita
converso de tipo (typecasting) so possveis durante as chamadas de funo. Muito freqentemente
declaraes de funes so usadas em classes para melhorar a legibilidade do cdigo.
As definies de funo devem corresponder exatamente sua declarao. Cada funo declarada
deve ser definida.
Exemplo:
double

// tipo do valor de retorno

linfunc (double a, double b) // nome da funo e lista de parmetros


{
// operador composto
return (a + b);

// valor do retorno

O operador return pode retornar o valor de uma expresso localizada neste operador. Se necessrio, o
valor da expresso convertido para o tipo do resultado da funo. Pode ser retornado: tipos simples,
estruturas simples, ponteiros de objetos. Com o operador return no se pode retornar arrays, objetos
de classe, variveis de tipo estrutura composta.
Uma funo que no retorna nenhum valor deve ser descrita como do tipo void.
Exemplo:
void errmesg(string s)
{
Print("erro: "+s);
}

2000-2014, MetaQuotes Software Corp.

137

Elementos Bsicos da Linguagem


Parmetros passado para a funo podem ter valores default (padro), que so definidos por
constantes daquele tipo.
Exemplo:
int somefunc(double a,
double d=0.0001,
int n=5,
bool b=true,
string s="string transmitida")
{
Print("Parmetro obrigatrio a = ",a);
Print("Transmitir os seguintes parmetros: d = ",d," n = ",n," b = ",b," s = ",s);
return(0);
}

Se algum dos parmetros tem um valor default, todos os parmetros subseqentes devem tambm ter
valores default.
Exemplo de declarao incorreta:
int somefunc(double a,
double d=0.0001,

// valor padro declarado 0.0001

int n,

// no determinado o valor padro!

bool b,

// no determinado o valor padro!

string s="string transmitida")


{
}

Tambm Veja
Sobrecarga (Overload), Funes Virtuais, Polimorfismo

2000-2014, MetaQuotes Software Corp.

138

Elementos Bsicos da Linguagem

Chamada de Funo
Se um nome, que no foi descrito antes, aparece em uma expresso e seguido pelo parntesis de
abertura, ele considerado contextualmente como o nome de uma funo.
function_name (x1, x2,..., xn)

Argumentos (parmetros formais) so passados por valor, isto , cada expresso x1,.., xn
calculada, e os valores so passados para a funo. A ordem de clculo das expresses e a ordem de
carregamento dos valores no so garantidos. Durante a execuo, o sistema verifica o nmero e o
tipo dos argumentos passados para a funo. Tal forma de abordar uma funo chamada de uma
chamada de valor.
Chamada de funo uma expresso, cujo valor o valor retornado pela funo. O tipo da funo
descrito acima deve corresponder com o tipo do valor de retorno. Uma funo pode ser declarada ou
descrita em qualquer parte do programa no escopo global, isto , fora de outras funes. Uma funo
no pode ser declarada ou descrita dentro de outra funo.
Exemplos:
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);
}

Na chamada de uma funo com parmetros default, a lista de parmetros a serem passados pode ser
limitada, mas no antes do primeiro parmetro default.
Exemplos:
void somefunc(double init,
double sec=0.0001, //define valores default
int level=10);
//...
somefunc();

// Chamada errada. O primeiro parmetro deve estar presente.

somefunc(3.14);

// Chamada correta

somefunc(3.14,0.0002);

// Chamada correta

somefunc(3.14,0.0002,10);

// Chamada correta

Ao chamar uma funo, no se pode pular parmetros, mesmo aqueles que tm valores default:
somefunc(3.14, , 10);

// Chamada errada -> o segundo parmetros foi pulado.

Tambm Veja
Sobrecarga (Overload), Funes Virtuais, Polimorfismo

2000-2014, MetaQuotes Software Corp.

139

Elementos Bsicos da Linguagem

Passando Parmetros
Existem pois mtodos pelo qual a linguagem de mquina pode passar argumentos para um
subprograma (funo). O primeiro mtodo enviar um parmetro por valor. Este mtodo copia o valor
do argumento para um parmetro formal de funo. Portanto, quaisquer mudanas neste parmetro
ocorridas dentro da funo no tm influncia no correspondente argumento usado na chamada da
funo.
//+------------------------------------------------------------------+
//| Passando parmetros por valor

//+------------------------------------------------------------------+
double FirstMethod(int i,int j)
{
double res;
//--i*=2;
j/=2;
res=i+j;
//--return(res);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--int a=14,b=8;
Print("a e b antes chamada:",a," ",b);
double d=FirstMethod(a,b);
Print("a e b aps chamada:",a," ",b);
}
//--- Resultado da execuo do script
//

a e b antes chamada: 14 8

//

a e b aps chamada: 14 8

O segundo mtodo passar por referncia. Neste caso, a referncia para um parmetro (no seu
valor) passada para um parmetro de funo. Dentro da funo, ele usado para referenciar o
verdadeiro parmetro especificado na chamada. Isso significa que mudanas no parmetro afetaro o
argumento usado na chamada da funo.
//+------------------------------------------------------------------+
//| Passando parmetros por referncia

//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
{
double res;
//--i*=2;
j/=2;

2000-2014, MetaQuotes Software Corp.

140

Elementos Bsicos da Linguagem


res=i+j;
//--return(res);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--int a=14,b=8;
Print("a e b antes chamada:",a," ",b);
double d=SecondMethod(a,b);
Print("a e b aps chamada:",a," ",b);
}
//+------------------------------------------------------------------+
//--- resultado da execuo do script
//

a e b antes chamada: 14 8

//

a e b aps chamada: 28 4

MQL5 usa ambos os mtodos, com uma exceo, arrays, variveis tipo estrutura e objetos de classe
so sempre passados por referncia. A fim de evitar modificaes nos parmetros reais (argumentos
passados na chamada da funo) use o especificador de acesso const. Ao se tentar modificar o
contedo de uma varivel declarada com o especificador const, o compilador gerar um erro.

Observao
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.
Exemplo:
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
// Second call (i = 1) : par1 = 1

par2 = 0
par2 = 1

}
//+------------------------------------------------------------------+
//|

//+------------------------------------------------------------------+
void func(int par1,int par2,string comment)

2000-2014, MetaQuotes Software Corp.

141

Elementos Bsicos da Linguagem


{
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.
Tambm Veja
Visibility Scope and Lifetime of Variables, Overload, Virtual Functions, Polymorphism

2000-2014, MetaQuotes Software Corp.

142

Elementos Bsicos da Linguagem

Sobrecarga de Funo
Geralmente, o nome da funo tende a refletir seu propsito principal. Como regra, programas
legveis contm vrios identificadores bem selecionados. s vezes, funes diferentes so usados
para os mesmos propsitos. Vamos considerar, por exemplo, uma funo que calcula o valor mdio de
um array de nmeros de dupla preciso e a mesma funo, mas operando com um array de inteiros.
Ambas so convenientemente chamadas de AverageFromArray:
//+------------------------------------------------------------------+
//| O clculo de mdia de um array de tipo double

//+------------------------------------------------------------------+
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];

// Soma para o tipo double

}
aver=sum/size;

// Apenas divide a soma pelo nmero

//--Print("Clculo da mdia para um array do tipo double");


return aver;
}
//+------------------------------------------------------------------+
//| O clculo de mdia para um array de tipo int

//+------------------------------------------------------------------+
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];

// Soma para o tipo int

}
aver=(double)sum/size;// Fornece uma quantidade de tipo double, e divide
//--Print("Clculo da mdia para um array do tipo int");
return aver;
}

Cada funo contm a sada da mensagem via a funo Print();


Print("Clculo da mdia para um array do tipo int");

O compilador seleciona a funo necessria de acordo com os tipos dos argumentos e suas

2000-2014, MetaQuotes Software Corp.

143

Elementos Bsicos da Linguagem


quantidades. A regra, que define a escolha a ser feita, chamada de algoritmo de correspondncia de
assinatura. Um assinatura uma lista de tipos usados na declarao da funo.
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
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);

}
//--- Resultado do script
// Calcula a mdia para um array de tipo int
// Calcula a mdia para um array de tipo double
// int_aver= 3.00000000

double_aver= 3.30000000

Sobrecarga de funo um processo de criar vrias funes com o mesmo nome, mas com diferentes
parmetros. Isso significa que em variantes sobrecarregadas de uma funo, o nmero de argumentos
e/ou seus tipos devem ser diferentes. Um variante de funo especfica selecionada baseada na
correspondncia entre lista de argumentos ao chamar a funo com a lista de parmetros na
declarao da funo.
Quando uma funo sobrecarregada chamada, o compilador deve ter uma algoritmo para selecionar
a funo apropriada. O algoritmo que realiza esta escolha depende da converso de quais tipos
estiverem presentes. A melhor correspondncia deve ser nica. Uma funo sobrecarregada deve ser a
melhor correspondncia dentre todas as outras variantes para ao menos um argumento. Ao mesmo
tempo, ela no deve ser pior que as outras variantes para todos os outros argumentos.
Abaixo est um algoritmo de correspondncia para cada argumento.

Algoritmo de Escolha de uma Funo Sobrecarregada


1. Use estrita correspondncia (se possvel).
2. Tente incremento de tipo padro.
3. Tente converso de tipo padro.
O incremento de tipo padro melhor que outras converses padro. Incremento a converso de
float para double, de bool, char, short ou enum para int. Converso de tipo de arrays de tipos inteiros
similares tambm pertencem a converso de tipo. Tipos similares so: bool, char, uchar, j que todos
os trs tipo so inteiros de nico bytes, inteiros de duplo byte short e ushort; inteiros de 4 bytes int,
uint, e color; long, ulong e datetime.
Claro que a estrita correspondncia a melhor. Para alcanar tal consistncia converso de tipo
(typecasting) pode ser usada. O compilador no pode lidar com situaes ambguas. Portanto voc no
deve confiar em diferenas sutis de tipos e converses implcitas que tornam a funo sobrecarregada

2000-2014, MetaQuotes Software Corp.

144

Elementos Bsicos da Linguagem


no clara.
No caso de dvida, use converso explcita para assegurar estrita adequao.
Exemplos de funes sobrecarregadas no MQL5 podem ser vistas no exemplo de funes
ArrayInitialize().
Regras de sobrecarga de funo para sobrecarga de mtodos de classe.

A sobrecarga de funes de sistema permitida, mas deve-se observar que o compilador capaz de
selecionar com preciso a funo necessria. Por exemplo, podemos sobrecarregar o sistema da
funo MathMax() de 4 maneiras diferentes, mas apenas duas variantes so corretas.
Exemplo:
// 1. sobrecarga permitida - funo difere da funo embutida MathMax() em nmero de parmetros
double MathMax(double a,double b,double c);
// 2. sobrecarga no permitida!
// nmero de parmetros diferente, mas o ltimo tem um valor default
// isso leva ao ocultamento da funo de sistema ao chamar-lo, o que inaceitvel
double MathMax(double a,double b,double c=DBL_MIN);
// 3. sobrecarga permitida - sobrecarga normal para tipos de parmetros 'a' e 'b'
double MathMax(int a,int b);
// 4. sobrecarga no permitida!
// o nmero e tipos de parmetros so os mesmos que no original double MathMax (double a,double b)
int MathMax(double a,double b);

Tambm Veja
Sobrecarga (Overload), Funes Virtuais, Polimorfismo

2000-2014, MetaQuotes Software Corp.

145

Elementos Bsicos da Linguagem

Sobrecarga de Operao
Para facilitar a leitura e escrita de cdigo, a sobrecarga de algumas operaes permitida. O
operador de sobrecarga escrito usando a palavra-chave operator. Os seguintes operadores podem
ser sobrecarregados:
binrio +,-,/,*,%,<<,>>,==,!=,<,>,<=,>=,=,+=,-=,/=,*=,%=,&=,|=,^=,<<=,>>=,&&,||,&,|,^
unrio +,-,++,--,!,~
operador de atribuio =
operador de indexao []

Sobrecarga de operao permite o uso da notao de operao (escrita na forma de expresses


simples) para objetos complexos - estruturas e classes. Escrevendo expresses usando operaes de
sobrecarga simplifica a visualizao do cdigo fonte, porque uma implementao mais complexa fica
escondida.
Por exemplo, considere nmeros complexos, que consistem de partes real e imaginria. Eles so
amplamente utilizados na matemtica. A linguagem MQL5 no tem um tipo de dado que represente
nmeros complexos, mas possvel criar um novo tipo de dado na forma de uma estrutura ou classe.
Declare a estrutura complexa e defina quatro mtodos que implementam as quatro operaes
aritmticas:
//+------------------------------------------------------------------+
//| Uma estrutura para operaes com nmeros complexos

//+------------------------------------------------------------------+
struct complex
{
double

re; // Parte real

double

im; // Parte imaginrio

//--- Construtores
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) { }


//--- Operaes Aritmticas
complex

Add(const complex &l,const complex &r) const;

// Adio

complex

Sub(const complex &l,const complex &r) const;

// Subtrao

complex

Mul(const complex &l,const complex &r) const;

// Multiplicao

complex

Div(const complex &l,const complex &r) const;

// Diviso

};

Agora, em nosso cdigo ns podemos declarar variveis representando nmeros complexos, e


trabalhar com eles.
Por exemplo:
void OnStart()
{
//--- Declara e inicialize variveis de um tipo complexo
complex a(2,4),b(-4,-2);

2000-2014, MetaQuotes Software Corp.

146

Elementos Bsicos da Linguagem


PrintFormat("a=%.2f+i*%.2f,

b=%.2f+i*%.2f",a.re,a.im,b.re,b.im);

//--- Soma dois nmeros


complex z;
z=a.Add(a,b);
PrintFormat("a+b=%.2f+i*%.2f",z.re,z.im);
//--- Multiplica dois nmeros
z=a.Mul(a,b);
PrintFormat("a*b=%.2f+i*%.2f",z.re,z.im);
//--- Dividir dois nmeros
z=a.Div(a,b);
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//--}

Mas seria mais conveniente usar os operadores usuais "+", "-", "*" e "/" para operaes aritmticas
comuns com nmeros complexos.
A palavra-chave operator usado para definir uma funo membro que realiza converso de tipo.
Operaes unrias e binrias para variveis de objeto de classe podem ser sobrecarregadas como
funes membro no estticas. Elas implicitamente agem nos objetos de classe.
A maioria das operaes binrias podem ser sobrecarregadas como funes regulares que tomam uma
varivel de classe e/ou um ponteiro de objeto desta classe como argumento. Para o nosso tipo
complexo, a sobrecarga na declarao se parecer como:
//--- Operadores
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)); }

O exemplo completo do script:


//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Declara e inicialize variveis de um tipo complexo
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;
//--- Soma dois nmeros
complex z=a+b;
PrintFormat("a+b=%.2f+i*%.2f",z.re,z.im);
//--- Multiplica dois nmeros
z=a*b;

2000-2014, MetaQuotes Software Corp.

147

Elementos Bsicos da Linguagem


PrintFormat("a*b=%.2f+i*%.2f",z.re,z.im);
//--- Dividir dois nmeros
z=a/b;
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//--}
//+------------------------------------------------------------------+
//| Uma estrutura para operaes com nmeros complexos

//+------------------------------------------------------------------+
struct complex
{
double

re; // Parte real

double

im; // Parte imaginrio

//--- Construtores
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) { }


//--- Operaes Aritmticas
complex

Add(const complex &l,const complex &r) const;

// Adio

complex

Sub(const complex &l,const complex &r) const;

// Subtrao

complex

Mul(const complex &l,const complex &r) const;

// Multiplicao

complex

Div(const complex &l,const complex &r) const;

// Diviso

//--- Operadores binrias


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)); }
};
//+------------------------------------------------------------------+
//| Adio

//+------------------------------------------------------------------+
complex complex::Add(const complex &l,const complex &r) const
{
complex res;
//--res.re=l.re+r.re;
res.im=l.im+r.im;
//--- Resultado
return res;
}
//+------------------------------------------------------------------+
//| Subtrao

//+------------------------------------------------------------------+
complex complex::Sub(const complex &l,const complex &r) const
{
complex res;
//--res.re=l.re-r.re;

2000-2014, MetaQuotes Software Corp.

148

Elementos Bsicos da Linguagem


res.im=l.im-r.im;
//--- Resultado
return res;
}
//+------------------------------------------------------------------+
//| Multiplicao

//+------------------------------------------------------------------+
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;
//--- Resultado
return res;
}
//+------------------------------------------------------------------+
//| Diviso

//+------------------------------------------------------------------+
complex complex::Div(const complex &l,const complex &r) const
{
//--- Numero complexo vazio
complex res(EMPTY_VALUE,EMPTY_VALUE);
//--- Verificar se zero
if(r.re==0 && r.im==0)
{
Print(__FUNCTION__+": nmero zero");
return(res);
}
//--- Variveis auxiliares
double e;
double f;
//--- Selecionando a variante de clculo
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;
}
//--- Resultado
return res;

2000-2014, MetaQuotes Software Corp.

149

Elementos Bsicos da Linguagem


}

A maioria das operaes unrias para classes podem ser sobrecarregadas como funes comuns que
aceitam um nico argumento de objeto de classe ou ponteiro dele. Adicione sobrecarga de operaes
unrias "-" e "!".
//+------------------------------------------------------------------+
//| Uma estrutura para operaes com nmeros complexos

//+------------------------------------------------------------------+
struct complex
{
double

re;

// Parte real

double

im;

// Parte imaginrio

...
//--- Operadores unrios
complex operator-()

const; // Unary minus

bool

const; // Negao

operator!()

};
...
//+------------------------------------------------------------------+
//| Sobrecarregar operador de "menos unrio"

//+------------------------------------------------------------------+
complex complex::operator-() const
{
complex res;
//--res.re=-re;
res.im=-im;
//--- Resultado
return res;
}
//+------------------------------------------------------------------+
//| Sobrecarregar operador de "negao lgica"

//+------------------------------------------------------------------+
bool complex::operator!() const
{
//--- So as partes real e imaginria do nmero complexo igual a zero?
return (re!=0 && im!=0);
}

Agora ns podemos verificar se valor de um nmero complexo zero e obter um valor negativo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Declara e inicialize variveis de um tipo complexo

2000-2014, MetaQuotes Software Corp.

150

Elementos Bsicos da Linguagem


complex a(2,4),b(-4,-2);
PrintFormat("a=%.2f+i*%.2f,

b=%.2f+i*%.2f",a.re,a.im,b.re,b.im);

//--- Dividir dois nmeros


complex z=a/b;
PrintFormat("a/b=%.2f+i*%.2f",z.re,z.im);
//--- Um nmero complexo igual a zero por padro (no construtor padro re==0 e im==0
complex zero;
Print("!zero=",!zero);
//--- Atribuir um valor negativo
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);
//--- Verificar se zero mais uma vez
Print("!zero=",!zero);
//--}

Note que ns no tivemos que sobrecarregar o operador de atribuio "=", j que estruturas de tipos
simples pode ser diretamente copiadas uma no outra. Assim, ns agora podemos escrever um cdigo
para clculos envolvendo nmeros complexos de maneira usual.
Sobrecarga de operador de indexao permite obter os valores dos arrays fechados em um objeto, de
uma maneira simples e familiar, e isso tambm contribui para uma melhor legibilidade do cdigo
fonte. Por exemplo, ns precisamos fornecer acesso a um smbolo dentro de uma string em uma
posio especfica. Uma string em MQL5 um tipo string separado, que no um array de smbolos,
mas com a ajuda de uma operao de indexao sobrecarregada podemos fornecer um trabalho
simples e transparente na classe CString gerada:
//+----------------------------------------------------------------------+
//| Uma classe para acessar smbolos em string como na array de smbolos |
//+----------------------------------------------------------------------+
class CString
{
string

m_string;

public:
CString(string str=NULL):m_string(str) { }
ushort operator[] (int x) { return(StringGetCharacter(m_string,x)); }
};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Um array para receber os smbolos a partir de uma 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;

//--- Fazer um frase usando smbolos da varivel str

2000-2014, MetaQuotes Software Corp.

151

Elementos Bsicos da Linguagem


for(int i=0,n=ArraySize(x);i<n;i++)
{
res+=ShortToString(str[x[i]]);
}
//--- Mostrar o resultado
Print(res);
}

Um outro exemplo de sobrecarga do operador de indexao so operaes com matrizes. A matriz


representa um array dinmico de duas dimenses, o tamanho do array no definido com
antecedncia. Portanto, voc no pode declarar um array da forma array[][] sem especificar o
tamanho da segunda dimenso, e ento passar este array como um parmetro. Uma possvel soluo
uma classe especial CMatrix, que contm um array de objetos de classe CRow.
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Operaes de adio e multiplicao de matrizes
CMatrix A(3),B(3),C();
//--- Preparar um array para as linhas
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};
//--- Preencher as matrizes
A[0]=a1; A[1]=a2; A[2]=a3;
B[0]=b1; B[1]=b2; B[2]=b3;
//--- Sada de matrizes no log Experts
Print("---- Os elementos da matriz A");
Print(A.String());
Print("---- Os elementos da matriz B");
Print(B.String());
//--- Adio de matrizes
Print("---- Adio das matrizes A e B");
C=A+B;
//--- Sada da representao da string formatada
Print(C.String());
//--- Multiplicao de matrizes
Print("---- Multiplicao das matrizes A e B");
C=A*B;
Print(C.String());
//--- Agora mostraremos como obter valores no estilo dos arrays dinmicos matrix[i][j]
Print("Sada de valores da matriz C elemento a elemento");
//--- Atravessar as linhas da matriz - objetos CRow - num loop
for(int i=0;i<3;i++)
{

2000-2014, MetaQuotes Software Corp.

152

Elementos Bsicos da Linguagem


string com="| ";
//--- Formar linhas a partir da matriz para o valor
for(int j=0;j<3;j++)
{
//--- Obter o elemento da matriz pelo nmero de linha e coluna
double element=C[i][j];// [i] - Acesso para CRow no array m_rows[] ,
// [j] - Operador sobrecarregado da indexao em CRow
com=com+StringFormat("a(%d,%d)=%G ; ",i,j,element);
}
com+="|";
//--- Sada dos valores da linha
Print(com);
}
}
//+------------------------------------------------------------------+
//| Class "Row"

//+------------------------------------------------------------------+
class CRow
{
private:
double

m_array[];

public:
//--- Construtores e um destrutor
CRow(void)

{ ArrayResize(m_array,0);

CRow(const CRow &r) { this=r;

}
}

CRow(const double &array[]);


~CRow(void){};
//--- Nmero de elementos na linha
int

Size(void) const

{ return(ArraySize(m_array));}

//--- Retorna uma string com valores


string

String(void) const;

//--- Operador de indexao


double

operator[](int i) const

{ return(m_array[i]);

//--- Operadores de atribuio


void

operator=(const double

&array[]); // Uma array

void

operator=(const CRow & r);

// Outro objeto CRow

double

operator*(const CRow &o);

// Objeto CRow para multiplicao

};
//+------------------------------------------------------------------+
//| Construtor para inicializar uma linha com um array

//+------------------------------------------------------------------+
void

CRow::CRow(const double &array[])

{
int size=ArraySize(array);
//--- Se o array no est vazio
if(size>0)
{
ArrayResize(m_array,size);
//--- Preencher com valores

2000-2014, MetaQuotes Software Corp.

153

Elementos Bsicos da Linguagem


for(int i=0;i<size;i++)
m_array[i]=array[i];
}
//--}
//+------------------------------------------------------------------+
//| Atribuir operao para o array

//+------------------------------------------------------------------+
void CRow::operator=(const double &array[])
{
int size=ArraySize(array);
if(size==0) return;
//--- Preencher array com valores
ArrayResize(m_array,size);
for(int i=0;i<size;i++) m_array[i]=array[i];
//--}
//+------------------------------------------------------------------+
//| Operao de atribuio para CRow

//+------------------------------------------------------------------+
void CRow::operator=(const CRow

&r)

{
int size=r.Size();
if(size==0) return;
//--- Preencher array com valores
ArrayResize(m_array,size);
for(int i=0;i<size;i++) m_array[i]=r[i];
//--}
//+------------------------------------------------------------------+
//| Operador de multiplicao por outra linha

//+------------------------------------------------------------------+
double CRow::operator*(const CRow &o)
{
double res=0;
//--- Verificaes
int size=Size();
if(size!=o.Size() || size==0)
{
Print(__FUNCSIG__,": Falha ao multiplicar duas matrizes, elas so de tamanhos diferentes");
return(res);
}
//--- Multiplicar arrays elemento a elemento e adicionar os produtos
for(int i=0;i<size;i++)
res+=m_array[i]*o[i];
//--- Resultado
return(res);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

154

Elementos Bsicos da Linguagem


//| Retorno da representao da string formatada

//+------------------------------------------------------------------+
string CRow::String(void) const
{
string out="";
//--- Se o tamanho do array maior do que zero
int size=ArraySize(m_array);
//--- Trabalhamos apenas com nmeros diferentes de zero dos elementos array
if(size>0)
{
out="{";
for(int i=0;i<size;i++)
{
//--- Recolher os valores para a string
out+=StringFormat(" %G;",m_array[i]);
}
out+=" }";
}
//--- Resultado
return(out);
}
//+------------------------------------------------------------------+
//| Class "Matrix"

//+------------------------------------------------------------------+
class CMatrix
{
private:
CRow

m_rows[];

public:
//--- Construtores e um destrutor
CMatrix(void);
CMatrix(int rows)

{ ArrayResize(m_rows,rows);

~CMatrix(void){};
//--- Obter os tamanhos de matriz
int

Rows()

const { return(ArraySize(m_rows));

int

Cols()

const { return(Rows()>0? m_rows[0].Size():0); }

//--- Retorna o valor da coluna na forma da linha Crow


CRow

GetColumnAsRow(const int col_index) const;

//--- Retorna uma string com valores de matriz


string

String(void) const;

//--- O operador de indexao retorna uma string pelo seu nmero


CRow *operator[](int i) const

{ return(GetPointer(m_rows[i]));

//--- Operador de adio


CMatrix

operator+(const CMatrix &m);

//--- Operador de multiplicao


CMatrix

operator*(const CMatrix &m);

//--- Operador de atribuio


CMatrix

*operator=(const CMatrix &m);

2000-2014, MetaQuotes Software Corp.

155

Elementos Bsicos da Linguagem


};
//+------------------------------------------------------------------+
//| Um construtor padro, cria um array de linhas de tamanho zero

//+------------------------------------------------------------------+
CMatrix::CMatrix(void)
{
//--- O nmero zero das linhas na matriz
ArrayResize(m_rows,0);
//--}
//+------------------------------------------------------------------+
//| Retorna o valor da coluna na forma de CRow

//+------------------------------------------------------------------+
CRow

CMatrix::GetColumnAsRow(const int col_index) const

{
//--- A varivel para obter os valores a partir da coluna
CRow row();
//--- O nmero de linhas na matriz
int rows=Rows();
//--- Se o nmero de linhas maior do que zero, executar a operao
if(rows>0)
{
//--- Um array para receber os valores da coluna com ndice col_indez
double array[];
ArrayResize(array,rows);
//--- Preenchendo o array
for(int i=0;i<rows;i++)
{

//--- Verificar o nmero da coluna para a linha i - que podem ultrapassar os limites da ma
if(col_index>=this[i].Size())
{
Print(__FUNCSIG__,": Erro! Nmero da coluna ",col_index,"> tamanho da linha ",i);
break; // linha no inicializar o objeto
}
array[i]=this[i][col_index];
}
//--- Criar uma linha CRow baseada nos valores do array
row=array;
}
//--- Resultado
return(row);
}
//+------------------------------------------------------------------+
//| Adicionar duas matrizes

//+------------------------------------------------------------------+
CMatrix CMatrix::operator+(const CMatrix &m)
{
//--- O nmero de linha e colunas na matriz passada
int cols=m.Cols();

2000-2014, MetaQuotes Software Corp.

156

Elementos Bsicos da Linguagem


int rows=m.Rows();
//--- A matriz recebe os resultados da adio
CMatrix res(rows);
//--- Os tamanhos de matriz devem coincidir
if(cols!=Cols() || rows!=Rows())
{
//--- Adio impossvel
Print(__FUNCSIG__,": Falha para adicionar duas matrizes, seus tamanhos so diferentes");
return(res);
}
//--- Array auxiliar
double arr[];
ArrayResize(arr,cols);
//--- Atravessar as linhas para adicionar
for(int i=0;i<rows;i++)
{
//--- Escrever os resultados da adio das strings matriz no array
for(int k=0;k<cols;k++)
{
arr[k]=this[i][k]+m[i][k];
}
//--- Colocar o array para a linha matriz
res[i]=arr;
}
//--- retorna o resultado da adio de matrizes
return(res);
}
//+------------------------------------------------------------------+
//| Multiplicao de duas matrizes

//+------------------------------------------------------------------+
CMatrix CMatrix::operator*(const CMatrix &m)
{
//--- Nmero de colunas da primeira matriz, nmero de linhas transmitidas na matriz
int cols1=Cols();
int rows2=m.Rows();
int rows1=Rows();
int cols2=m.Cols();
//--- Matriz para receber o resultado da adio
CMatrix res(rows1);
//--- Matrizes devem ser coordenadas
if(cols1!=rows2)
{
//--- Multiplicao impossvel
Print(__FUNCSIG__,": Falha para multiplicar duas matrizes, formato no compatvel "

"- o nmero de colunas no primeiro fator deveria ser igual ao nmero de linhas na segun
return(res);
}
//--- Array auxiliar
double arr[];

2000-2014, MetaQuotes Software Corp.

157

Elementos Bsicos da Linguagem


ArrayResize(arr,cols1);
//--- Preencher as linhas na multiplicao da matriz
for(int i=0;i<rows1;i++)// Atravessar as linhas
{
//--- Restabelecer o array recebido
ArrayInitialize(arr,0);
//--- Atravessar elementos na linha
for(int k=0;k<cols1;k++)
{
//--- Levar valores da coluna k da matriz m para CRow
CRow column=m.GetColumnAsRow(k);
//--- Multiplicar duas linhas e escrever o resultado da multiplicao escalar dos vetroes
arr[k]=this[i]*column;
}
//--- colocar array arr[] na linha i-th da matriz
res[i]=arr;
}
//--- Retornar o produto das duas matrizes
return(res);
}
//+------------------------------------------------------------------+
//| Operao de atribuio

//+------------------------------------------------------------------+
CMatrix *CMatrix::operator=(const CMatrix &m)
{
//--- Preencher e defineir o nmero de linhas
int rows=m.Rows();
ArrayResize(m_rows,rows);
//--- Preencher nossas linhas com valores das linhas da matriz anterior
for(int i=0;i<rows;i++) this[i]=m[i];
//--return(GetPointer(this));
}
//+------------------------------------------------------------------+
//| Representao string da matriz

//+------------------------------------------------------------------+
string CMatrix::String(void) const
{
string out="";
int rows=Rows();
//--- Formar string por string
for(int i=0;i<rows;i++)
{
out=out+this[i].String()+"\r\n";
}
//--- Resultado
return(out);
}

2000-2014, MetaQuotes Software Corp.

158

Elementos Bsicos da Linguagem

Tambm Veja
Sobrecarga, Operaes Aritmticas, Sobrecarga de Funo, Regras de Precedncia

2000-2014, MetaQuotes Software Corp.

159

Elementos Bsicos da Linguagem

Descrio de Funes Externas


Tipo de funes externas definidas em outro mdulo devem ser explicitamente descritas. A ausncia
de tal descrio pode levar a erros ao compilar, construir e executar um programa. Ao descrever um
objeto externo, use a palavra-chave #import indicando o mdulo.
Exemplos:
#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

Com a ajuda do import, fcil descrever funes que so chamadas de DLL externas ou de bibliotecas
(libraries) EX5 compiladas. Bibliotecas (libraries) EX5 so arquivos ex5 compilados, que tm a
propriedade library. Somente funes descritas com o modificador export pode ser importadas de
bibliotecas (libraries) EX5.
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();
}

2000-2014, MetaQuotes Software Corp.

160

Elementos Bsicos da Linguagem

Tambm Veja
Sobrecarga (Overload), Funes Virtuais, Polimorfismo

2000-2014, MetaQuotes Software Corp.

161

Elementos Bsicos da Linguagem

Exportao de Funes
Uma funo declarada em um programa MQL5 com o ps-modificador export pode ser usada em um
outro programa MQL5. Tal funo chamada exportvel, e ela pode ser chamada de outros programas
aps compilao.
int Function() export
{
}

Este modificador ordena o compilador a adicionar a funo na tabela de funes EX5 exportada por
este arquivo ex5. Somente funes com tal modificador podem ser acessveis ("visveis") a partir de
outros programas MQL5.
A propriedade library diz ao compilador que o arquivo-EX5 ser uma biblioteca (library), e o compilador
o exibir no cabealho da EX5.
Todas as funo que so planejadas a serem exportveis devem ser marcadas com o modificador
export.
Tambm Veja
Sobrecarga (Overload), Funes Virtuais, Polimorfismo

2000-2014, MetaQuotes Software Corp.

162

Elementos Bsicos da Linguagem

Funes de Manipulao de Evento


A linguagem MQL5 fornece processamento de alguns eventos pr-definidos. Funes para manipulao
destes eventos devem ser definidas em um programa MQL5; nome da funo, tipo de retorno,
composio dos parmetros (se existir algum) e seus tipos devem estar rigorosamente em
conformidade com a descrio da funo de handler (manipulador) de evento.
O handler (manipulador) de evento do terminal cliente identifica funes, manipulando este ou aquela
evento, pelo tipo de valor de retorno e tipo de parmetros. Se outros parmetros, que no
correspondem s descries abaixo, so especificadas para uma funo correspondente, ou outro tipo
de retorno indicado para ela, tal funo no ser usada como um handler (manipulador) de evento.

OnStart
A funo OnStart() o handler (manipulador) do evento Start ,que automaticamente gerado
somente para execues de scripts. Ela dever ser do tipo void, sem parmetros:
void OnStart();

Para a funo OnStart(), o tipo de retorno int pode ser especificado.

OnInit
A funo OnInit() o handler (manipulador) do evento Init. Ela deve ser do tipo void ou int, sem
parmetros:
void OnInit();

O evento Init gerado imediatamente aps um Expert Advisor ou um indicador ser baixado; este
evento no gerado para scripts. A funo OnInit() usada para inicializao. Se OnInit() tiver o tipo
int de valor de retorno, o cdigo de retorno no-zero significa inicializao sem sucesso e gerado o
evento Deinit com o cdigo do motivo da desinicializao REASON_INITFAILED.
Para otimizar os parmetros de entrada de um Expert Advisor, recomendado usar valores da
enumerao ENUM_INIT_RETCODE como cdigo de retorno. Esses valores so usados para organizar o
curso da otimizao, incluindo a seleo dos mais apropriados agentes de teste. Durante a
inicializao de um Expert Advisor, antes do incio do teste, voc pode solicitar informao sobre a
configurao e recursos de um agente (o nmero de cores, quantidade de memria livre, etc) usando a
funo TerminalInfoInteger(). Baseado nestas informaes obtidas, pode-se tanto permitir usar este
agente de teste, ou rejeitar us-lo durante a otimizao deste Expert Advisor.
ENUM_INIT_RETCODE
Identificador

Descrio

INIT_SUCCEEDED

Inicializao bem sucedida, teste do Expert


Advisor pode continuar.
Este cdigo significa o mesmo que um valor null
= o Expert Advisor foi inicializado com sucesso
no Provador de Estratgia.

INIT_FAILED

Inicializao com falha; no existe motivo para


continuar testando por cause de erros fatais.

2000-2014, MetaQuotes Software Corp.

163

Elementos Bsicos da Linguagem

Por exemplo, falha em criar um indicador que


requerido para o funcionamento do Expert
Advisor.
Este valor de retorno significa o mesmo que um
valor diferente de zero - inicializao do Expert
Advisor pelo Provador de Estratgia falhou. O
teste para o dado conjunto de parmetros do
Expert Advisor no ser executado, o agente
liberado para receber uma nova tarefa.
INIT_PARAMETERS_INCORRECT

Este valor significa a incorreta definio da


entrada de parmetros. A seqncia de
resultado contendo o cdigo de retorno
destacado em vermelho na tabela de otimizao
geral.
Depois de receber este valor, o testador de
estratgia com segurana no vai passar essa
tarefa para que outros agentes tentem
novamente.

INIT_AGENT_NOT_SUITABLE

Nenhum erro durante a inicializao, mas por


alguma razo o agente no adequado para o
teste. Por exemplo, ausncia de memria
suficiente, sem support ao OpenCL, etc.
Aps este cdigo de retorno, o agente no
receber tarefas at o fim desta otimizao.

A funo OnInit() do tipo void sempre indica inicializao bem sucedida.

OnDeinit
A funo OnDeinit() chamada durante a desinicializao e o handler (manipulador) do evento
Deinit. Ela deve ser declarada com o tipo void e ter um parmetro do tipo const int, que contm o
cdigo do motivo da desinicializao. Se um tipo diferente declarado, o compilador gerar um aviso
e a funo no ser chamada. Para scripts o evento Deinit no gerado e portanto a funo
OnDeInit() no pode ser usada em scripts.
void OnDeinit(const int reason);

O evento Deinit gerado para Expert Advisors e indicadores nos seguintes casos:
antes de uma reinicializao devido mudana de ativo (symbol) ou perodo do grfico no qual o
programa MQL5 est anexado;
antes de uma reinicializao devido mudana de parmetros de entrada;
antes de descarregar o programa MQL5.

OnTick
O evento NewTick gerado para Expert Advisors somente quanto um novo preo (tick) para um ativo
recebido pelo grfico no qual o Expert Advisor est anexado. intil definir a funo OnTick() num
indicador personalizado ou script, porque o evento NewTick no gerado para eles.

2000-2014, MetaQuotes Software Corp.

164

Elementos Bsicos da Linguagem


O evento Tick gerado apenas para Expert Advisors, mas isso no significa que Expert Advisors
requer a funo OnTick(), uma vez que no so apenas os eventos NewTick gerados para Expert
Advisors, mas tambm so gerados os eventos de Timer, BookEvent e ChartEvent. Ela deve ser
declarada com o tipo void, sem parmetros:
void OnTick();

OnTimer
A funo OnTimer() chamada quando o evento Timer ocorre, que gerado pelo timer do sistema
somente para Expert Advisors e indicadores - ela no pode ser usada em scprits. A freqncia de
ocorrncia do evento definida na subscrio de notificaes deste evento atravs da funo
EventSetTimer().
Voc pode desfazer a subscrio de receber eventos de timer para um Expert Advisor particular usando
a funo EventKillTimer(). A funo de ser definida com o tipo void, sem parmetros:
void OnTimer();

recomendvel chamar a funo EventSetTimer() uma vez na funo OnInit(), e a funo


EventKillTimer() deve ser chamada uma vez em OnDeinit().
Todo Expert Advisor, assim como todo indicador funciona com seu prprio timer e recebe eventos
apenas a partir dele. To logo um programa MQL5 para de funcionar, o timer destrudo de forma
forada, se ele foi criado mas no desabilitado pela funo EventKillTimer().

OnTrade
A funo chamada quando o evento Trade ocorre, que surge quando voc muda a lista de ordens
postadas e posies abertas, o histrico de ordens e histrico de operaes (deals). Quando uma
atividade de negociao (trade) realizada (abertura de ordem pendente, abertura/fechamento de
posio, definio de stop, disparo de ordem pendente, etc.) o histrico de ordens e operaes (deals)
e/ou a lista de posies e ordens correntes so por conseqncia alterados.
void OnTrade();

Os usurios devem implementar de forma independente no cdigo a verificao do estado de uma


conta de negociao quanto tal evento recebido (se isto requerido pelas condies da estratgia de
negcio). Se a chamada da funo OrderSend() foi concluda com sucesso e retornou um valor de true,
isso significa que o servidor de negociao postou a ordem na fila de execuo e atribuiu um nmero
de bilhetagem (ticket number) nele. To logo o servidor processe esta ordem, o evento Trade ser
gerado. E se um usurio lembrar valor da bilhetagem (ticket), ele/ela ser capaz de descobrir o que
aconteceu com a ordem usando este valor na funo OnTrade().

OnTradeTransaction
Ao realizar algumas aes especficas em uma conta de negociao, seu estado muda. Tais aes
includem:
Envio de uma solicitao de negociao a partir de algum aplicativo MQL5 no terminal usando as
funes OrderSend e OrderSendAsync e sua posterior execuo.
Envio de uma solicitao de negociao por meio da interface grfica do terminal e sua posterior
execuo.

2000-2014, MetaQuotes Software Corp.

165

Elementos Bsicos da Linguagem


Ativao de ordens pendentes e ordens de stop no servidor.
Realizao de operaes no lado de um servidor de negociao.
As seguintes transaes de negociao so realizadas como resultado destas aes:
tratamento de uma solicitao de negociao
mudana de ordens de abertura
mudana de histrico de ordens
mudana de histrico de operaes (deals)
mudana de posies
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal) adicionada
ao histrico e uma nova posio criada. Todas estas aes so transaes de negociao. A chegada
de tal transao no terminal um evento TradeTransaction. Ele chama o handler (manipulador) de
evento OnTradeTransaction.
void OnTradeTransaction(
MqlTradeTransaction&

trans,

// estrutura das transaes de negcios

MqlTradeRequest&

request,

// estrutura solicitada

MqlTradeResult&

result

// resultado da estrutura

);

O handler (manipulador) contm trs parmetros:


trans - este parmetro obtm a estrutura MqlTradeTransaction descrevendo uma transao de
negociao aplicada a uma conta de negcio.
request - este parmetro obtm a estrutura MqlTradeRequest descrevendo uma solicitao de
negcio;
result - este parmetro obtm a estrutura MqlTradeResult descrevendo o resultado da execuo de
uma solicitao de negociao.
Os ltimos dois parmetros, request e result, so preenchidos por valores somente para uma
transao de tipo TRADE_TRANSACTION_REQUEST, dados sobre uma transao podem ser recebidos a
partir do parmetro do tipo da varivel trans. Note que neste caso, o campo request_id na varivel
result contm o ID da solicitao de negcio, aps a execuo da transao de negociao, descrita
na varivel trans, ter sido realizada. O identificador da solicitao (Request ID) permite associar a
ao realizada (chamada de funes OrderSend ou OrderSendAsync) com o resultado da ao enviado
para OnTradeTransaction().
Uma solicitao de negociao manualmente enviada a partir do terminal ou via funes OrderSend()/
OrderSendAsync() podem gerar vrias transaes consecutivas no servidor de negcios. A prioridade
de chegada dessas transaes no terminal no garantida. Assim, voc no deve esperar que um
grupo de transaes chegar aps um outro grupo ao desenvolver seu algoritmo de negociao. Alm
disso, transaes podem ser perdidas durante a entrega do servidor para o terminal.

2000-2014, MetaQuotes Software Corp.

166

Elementos Bsicos da Linguagem

Todos os tipo de transaes de negociao so descritas na enumerao


ENUM_TRADE_TRANSACTION_TYPE.
A estrutura MqlTradeTransaction descrevendo um transao de negociao preenchida de
diferentes formas dependendo do tipo de transao. Por exemplo, somente o campo de tipo
(tipo de transao de negociao) deve ser analisado para transaes do tipo
TRADE_TRANSACTION_REQUEST. O segundo e terceiro parmetros (request e result) da funo
OnTradeTransaction deve ser analisado para dados adicionais. Para informaes adicionais,
veja Estrutura de uma Transao de Negociao.
Uma descrio de transao de negociao no entrega todas as informaes disponveis
relativas a ordens, operaes (deals) e posies (por exemplo, comentrios). As funes
OrderGet*, HistoryOrderGet*, HistoryDealGet* e PositionGet* devem ser usadas para obter
informaes adicionais.
Aps aplicar transaes de negociao em uma conta de cliente, elas so consistentemente postadas
na fila de transaes de negcio do terminal, a partir da qual so consistentemente enviados para o
ponto de entrada OnTradeTransaction na ordem de chegada no terminal.
Ao tratar transaes de negociao por um Expert Advisor usando o handler OnTradeTransaction
(Manipulador sobre Transao de Comrcio), o terminal continua manipulando as transaes de
negociao recm chegadas. Portanto, o estado de uma conta de negociao pode mudar durante uma
operao OnTradeTransaction. Por exemplo, enquanto um programa MQL5 manipula um evento para
adicionar uma nova ordem, ela pode ser executada, deletada da lista das abertas e movida para o
histrico. Mais adiante, o aplicativo ser notificado destes eventos.
O comprimento da fila de transaes compreende 1024 elementos. Se OnTradeTransaction tratar uma
nova transao por muito tempo, as transaes mais antigas na fila podem ser substitudas pelas
novas.
De forma geral, no existe um proporo precisa entre o nmero de chamadas de OnTrade e
OnTradeTransactions. Uma chamada OnTrade corresponde a uma ou vrias chamadas
OnTradeTransactions.
OnTrade chamada aps apropriadas chamadas OnTradeTransaction.

OnTester
A funo OnTester() o handler (manipulador) do evento Tester que automaticamente gerado aps
um teste de histrico de um Expert Advisor no intervalo escolhido ter terminado. A funo deve estar
definida com o tipo double, sem parmetros:
double OnTester();

A funo chamada logo antes da chamada de OnDeinit() e tem o mesmo tipo do valor de retorno double. OnTester() pode ser usado apenas no teste de Expert Advisors. Seu principal propsito
calcular um certo valor que usado como o critrio max customizado na otimizao gentica de
parmetros de entrada.
Na otimizao gentica, a ordenao descendente aplica aos resultados de uma gerao. Isto , do
ponto de vista do critrio de otimizao, os melhores resultados so aqueles com o maiores valores
(os valores do critrio de otimizao max customizado retornados pela funo OnTester so levados
em considerao). Em tal ordenao, os piores valores so posicionados no final e posteriormente

2000-2014, MetaQuotes Software Corp.

167

Elementos Bsicos da Linguagem


jogados fora e no participam na formao da nova gerao.

OnTesterInit
A funo OnTesterInit() o handler( manipulador) do evento TesterInit, que automaticamente
gerado antes de iniciar a otimizao do Expert Advisor no Provador de Estratgia. A funo deve ser
definida com o tipo void. Ele no tem parmetros:
void OnTesterInit();

Com o incio da otimizao, um Expert Advisor com o handler (manipulador) OnTesterInit() ou


OnTesterPass() automaticamente carregado em um grfico separado do terminal com o ativo e
perodo especificados no Provador de Estratgia, e recebe o evento TesterInit. A funo usada para
inicializar o Expert Advisor antes de iniciar a otimizao para posterior processamento dos resultados
da otimizao.

OnTesterPass
A funo OnTesterPass() um handler (manipulador) do evento TesterPass, que automaticamente
gerado quanto um plano recebido durando a otimizao de um Expert Advisor no Provador de
Estratgia. A funo deve ser definida com o tipo void. Ele no tem parmetros:
void OnTesterPass();

Um Expert Advisor com o handler (manipulador) OnTesterPass() automaticamente carregado em um


grfico separado do terminal com o ativo/perodo especificados para teste, e obtm eventos
TesterPass quando um plano recebido durante uma otimizao. A funo usada para tratamento
dinmico dos resultados de otimizao "no local" sem precisar esperar pela sua concluso. Planos so
adicionados usando a funo FrameAdd(), que pode ser chamada aps o fim de um passo nico no
handler (manipulador) OnTester() .

OnTesterDeinit
OnTesterDeinit() um handler (manipulador) do TesterDeinit, que automaticamente gerada aps o
fim da optimizao de um Expert Advisor no Provador de Estratgia. A funo deve ser definida com o
tipo void. Ele no tem parmetros:
void OnTesterDeinit();

Um Expert Advisor com o handler (manipulador) TesterDeinit() automaticamente carregada em um


grfico no incio da otimizao, e recebe TesterDeinit aps sua concluso. A funo usada para um
processamento final de todos os resultados da otimizao.

OnBookEvent
A funo OnBookEvent() o handler (manipulador) do BookEvent. BookEvent gerado para Expert
Advisors somente quando a Profundidade do Mercado muda. Ela deve do tipo void e ter um parmetro
do tipo string:
void OnBookEvent (const string& symbol);

Para receber eventos BookEvent para qualquer ativo (symbol), voc apenas precisa fazer uma prsubscrio pra receber eventos para este ativo usando a funo MarketBookAdd(). A fim de desfazer a

2000-2014, MetaQuotes Software Corp.

168

Elementos Bsicos da Linguagem


subscrio de recebimento
MarketBookRelease().

de

eventos

BookEvent

para

um

particular

ativo,

chame

Diferente de outros eventos, o evento BookEvent por difuso (broadcast). Isso significa que se um
Expert Advisor subscreve para receber eventos BookEvent usando MarketBookAdd, todos os outros
Experts Advisors que tem o handler (manipulador) OnBookEvent() recebero este evento. portanto
necessrio analisar o nome do ativo, que passado para o handler (manipulador) atravs dos
parmetros const string& symbol.

OnChartEvent
OnChartEvent() o handler (manipulador) de um grupo de eventos ChartEvent:
CHARTEVENT_KEYDOWN evento de uma teclada, quando a janela do grfico est com foco;
CHARTEVENT_MOUSE_MOVE eventos de movimento de mouse e eventos de click de mouse (se
CHART_EVENT_MOUSE_MOVE=true definido para o grfico);
CHARTEVENT_OBJECT_CREATE

evento
de
criao
CHART_EVENT_OBJECT_CREATE=true definido para o grfico);

de

objeto

grfico

(se

CHARTEVENT_OBJECT_CHANGE evento de mudana de um propriedade de objeto via janela


dilogo de propriedades;
CHARTEVENT_OBJECT_DELETE

evento
de
excluso
CHART_EVENT_OBJECT_DELETE=true definido para o grfico);

de

objeto

grfico

(se

CHARTEVENT_CLICK evento de um click de mouse no grfico;


CHARTEVENT_OBJECT_CLICK evento de um click de mouse em um objeto grfico pertencente ao
grfico;
CHARTEVENT_OBJECT_DRAG evento de um movimento de objeto grfico usando o mouse;
CHARTEVENT_OBJECT_ENDEDIT evento da edio de texto finalizada na caixa de entrada do
objeto grfico LabelEdit;
CHARTEVENT_CHART_CHANGE evento de mudanas de grfico;
CHARTEVENT_CUSTOM+n ID do evento do usurio, onde n est na faixa de 0 a 65535.
CHARTEVENT_CUSTOM_LAST
(CHARTEVENT_CUSTOM+65535).

ltimo

ID

aceitvel

de

um

evento

customizado

A funo pode ser chamada somente em Expert Advisors e indicadores. A funo deve ser de tipo void
com 4 parmetros:
void OnChartEvent(const int id,

// Evento ID

const long& lparam,

// Parmetro de evento de tipo long

const double& dparam, // Parmetro de evento de tipo double


const string& sparam

// Parmetro de evento de tipo string

);

Para cada tipo de evento, os parmetros de entrada da funo OnChartEvent() tm valores definidos
que so requeridos para o processamento deste evento. Os eventos e valores passados atravs destes
parmetros so listados na tabela abaixo.
Evento

Valor
do
parmetro id

Valor
parmetro

do

Valor
parmetro

2000-2014, MetaQuotes Software Corp.

do

Valor
parmetro

do

169

Elementos Bsicos da Linguagem

lparam

dparam

sparam

Evento de uma
teclada

CHARTEVENT_KE
YDOWN

cdigo de uma
tecla pressionada

Repita
a
contagem
(o
nmero de vezes
que a tecla
repetida
como
um resultado de
que o usurio
pressiona
a
tecla)

O valor da string
de uma pequena
mscara
de
descrever
o
estado de botes
do teclado

Eventos
de
mouse (se a
propriedade
CHART_EVENT_
MOUSE_MOVE=tr
ue est definida
para o grfico)

CHARTEVENT_MO
USE_MOVE

a coordenada X

a coordenada Y

O valor de string
de uma mscara
de
bites
descrevendo
o
estado de botes
de mouse

Evento
de
criao
de
objeto
grfico
(se
CHART_EVENT_O
BJECT_CREATE=t
rue, ento
definido para o
grfico)

CHARTEVENT_OB
JECT_CREATE

Nome do objeto
grfico criado

Evento
de
mudana de uma
propriedade de
objeto via janela
de dilogo de
propriedades

CHARTEVENT_OB
JECT_CHANGE

Nome do objeto
grfico
modificado

Evento
de
excluso
de
objeto
grfico
(se
CHART_EVENT_O
BJECT_DELETE=t
rue est definido
para o grfico)

CHARTEVENT_OB
JECT_DELETE

Nome do objeto
grfico excludo

Evento de um
click de mouse
no grfico

CHARTEVENT_C
LICK

a coordenada X

a coordenada Y

Evento de um
click de mouse
num
objeto

CHARTEVENT_OB
JECT_CLICK

a coordenada X

a coordenada Y

Nome do objeto
grfico, na qual
o evento ocorreu

2000-2014, MetaQuotes Software Corp.

170

Elementos Bsicos da Linguagem

grfico
pertencente
grfico

ao

Evento de um
objeto
grfico
arrastado usando
o mouse

CHARTEVENT_OB
JECT_DRAG

Nome do objeto
grfico movido

Evento da edio
de
texto
finalizada
na
caixa de entrada
do objeto grfico
LabelEdit

CHARTEVENT_OB
JECT_ENDEDIT

Nome do objeto
grfico
LabelEdit, cuja
edio de texto
foi concluda

Evento
mudanas
grfico

CHARTEVENT_C
HART_CHANGE

CHARTEVENT_CU
STOM+N

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

de
de

ID do evento de
usurio sob N
nmero

OnCalculate
A funo OnCalculate() chamada somente em indicadores customizados quando necessrio calcular
os valores do indicador pelo evento Calculate. Isso geralmente acontece quando um novo preo (tick)
recebido para o ativo, de cujo indicador calculado. No necessrio que este indicador esteja
anexado a qualquer grfico de preo deste ativo.
A funo OnCalculate() deve retornar um tipo int. Existem duas possveis definies. Dentro de um
indicador voc no pode usar ambas as verses da funo.
A primeira forma destinado para aqueles indicadores que podem ser calculados com um nico buffer
de dados. Um exemplo de tal indicador a Mdia Mvel Customizada (Custom Moving Average).
int OnCalculate (const int rates_total,

// tamanho do array price[]

const int prev_calculated,

// barras tratadas na chamada anterior

const int begin,

// a partir de onde comeam os dados significativos

const double& price[]

// array a ser calculado

);

Assim como o array price[], uma das srie de preo ou um buffer calculado de algum indicador pode
ser passado. Para determinar a direo da indexao no array price[], chame ArrayGetAsSeries(). A
fim de no depender de valores default, voc deve incondicionalmente chamar a funo
ArraySetAsSeries() para aqueles arrays que voc espera utilizar.
Uma srie de tempo necessria ou um indicador, para ser usado como o array price[], deve ser
selecionado pelo usurio na guia "Parmetros" ao iniciar o indicador. Para fazer isso, voc deve
especificar o necessrio item no lista drop-down do campo "Aplicar a".

2000-2014, MetaQuotes Software Corp.

171

Elementos Bsicos da Linguagem

Para receber valores de um indicador customizado a partir outros programas mql5, a funo iCustom()
usada, que retorna o manuseio do indicador para operaes subseqentes. Voc pode tambm
especificar o price[] array apropriado ou o manuseio de outro indicador. Este parmetro deve ser
transmitido por ltimo na lista de variveis de entrada do indicador customizado.
Exemplo:
void OnStart()
{
//--string terminal_path=TerminalInfoString(STATUS_TERMINAL_PATH);

int handle_customMA=iCustom(Symbol(),PERIOD_CURRENT, "Custom Moving Average",13,0, MODE_EMA,PRIC


if(handle_customMA>0)
Print("handle_customMA = ",handle_customMA);
else

Print("Pode abrir ou no o arquivo EX5 '"+terminal_path+"\\MQL5\\Indicators\\"+"Custom Moving


}

Neste exemplo, o ltimo parmetro passado o valor PRICE_TYPICAL (da enumerao


ENUM_APPLIED_PRICE), que indica que o indicador customizado ser construdo baseado em preos
tpicos obtidos como (High+Low+Close)/3. Se este parmetro no for especificado, o indicador
construdo baseado em valores de PRICE_CLOSE, isto , preos de fechamento de cada barra.
Outro exemplo que mostra a passagem de um handler (manipulador) de indicador como o ltimo
parmetro para especificar o array price[], dado na descrio da funo iCustom().

A segunda forma destinada para todos os outros indicadores, na qual mais de uma srie de tempo
usada nos clculos.
int OnCalculate (const int rates_total,

// tamanho da srie de preos de entrada series

const int prev_calculated,

// barras tratadas na chamada anterior

const datetime& time[],

// Hora

const double& open[],

// Open (abertura)

const double& high[],

// High (mximo)

const double& low[],

// Low (mnimo)

const double& close[],

// Close (fechamento)

2000-2014, MetaQuotes Software Corp.

172

Elementos Bsicos da Linguagem


const long& tick_volume[],

// Volume de Tick

const long& volume[],

// Volume Real

const int& spread[]

// Spread

);

Os parmetros open[], high[], low[] and close[] contm os arrays com preos de abertura, preos de
mximo e mnimo e preos de fechamento da janela de tempo corrente. O parmetro time[] contm
um array com valores de hora de abertura, o parmetro spread[] tem um array contendo o histrico de
spreads (se algum spread fornecido para o ativo negociado). Os parmetros volume[] e
tick_volume[] contm o histrico de volume de negociao e tick, respectivamente.
Par determinar a direo de indexao de time[], open[], high[], low[], close[], tick_volume[],
volume[] e spread[], chame ArrayGetAsSeries(). A fim de no depender de valores default, voc deve
incondicionalmente chamar a funo ArraySetAsSeries() para aqueles arrays que voc esperar utilizar.
O primeiro parmetro rates_total contm o nmero de barras disponveis no indicador para clculo, e
corresponde ao nmero de barras disponveis no grfico.
Devemos notat a conexo entre o valor de retorno de OnCalculate() e o segundo parmetro de entrada
prev_calculated. Durante a chamada da funo, o parmetro prev_calculated contm um valor
retornado pelo OnCalculate() durante a chamada anterior. Isso permite que algoritmos eficientes
calculem o indicador customizado de forma a evitar clculos repetidos naquelas barras que no
tiveram mudana deste a execuo anterior desta funo.
Para isso, geralmente suficiente retornar o valor do parmetro rates_total, que contm o nmero de
barras da chamada corrente da funo. Se desde a ltima chamada da funo OnCalculate() os dados
de preo mudarem (um histrico mais antigo baixado ou brancos no histrico preenchidos), o valor do
parmetro de entrada prev_calculated ser definido para zero pelo terminal.
Observao: se OnCalculate retornar zero, ento os valores do indicador no so mostrados na Janela
de Dados do terminal cliente.
Para entender isso melhor, seria til iniciar o indicador, cujo cdigo est anexado abaixo.
Exemplo indicador:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar Linha


#property indicator_label1

"Line"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrDarkBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- buffers do indicador


double

LineBuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{

2000-2014, MetaQuotes Software Corp.

173

Elementos Bsicos da Linguagem


//--- mapeamento de buffers do indicador
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- Obteno do nmero de barras disponveis para o ativo corrente e perodo do grfico
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]);


//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

Tambm Veja
Programas em Execuo, Eventos do Terminal Cliente, Trabalhando com Eventos

2000-2014, MetaQuotes Software Corp.

174

Elementos Bsicos da Linguagem

Variveis
Declarando Variveis
Variveis devem ser declaradas antes de serem usadas. Nomes nicos so usados para identificar
variveis. Para declarar uma varivel, voc deve especificar o seu tipo e um nico nome. Declarao
de varivel no um operador.
Os tipos simples so:
char, short, int, long, uchar, ushort, uint, ulong inteiros;
color inteiro representando a cor-RGB (red, green, blue);
datetime a data e hora, um inteiro sem sinal (unsigned) contendo o nmero de segundos desde a 0
hora de 1 de Janeiro de 1970;
bool valores booleanos true e false;
double nmero de ponto flutuante de dupla preciso;
float nmero de ponto flutuante de preciso simples;
string strings de caractere.
Exemplos:
string szInfoBox;
int

nOrders;

double dSymbolPrice;
bool

bLog;

datetime tBegin_Data
color

= D'2004.01.01 00:00';

cModify_Color = C'0x44,0xB9,0xE6';

Tipos compostos ou complexos:


Estruturas so tipos de dados compostos construdos usando outros tipos.
struct MyTime
{
int hour;

// 0-23

int minute;

// 0-59

int second;

// 0-59

};
...
MyTime strTime; // Varivel previamente declarada da estrutura MyTime

No se pode declarar variveis do tipo estrutura at que se declare a estrutura.


Arrays
Array uma seqncia indexada de dados de tipos idnticos:
int

a[50];

double m[7][50];

// Array de uma dimenso de 50 inteiros.


// Array de duas dimenses de sete arrays,
// cada um deles constitudo de 50 nmeros.

MyTime t[100];

// Array contendo elementos como MyTime

2000-2014, MetaQuotes Software Corp.

175

Elementos Bsicos da Linguagem


Somente um inteiro pode ser um ndice de array. No so permitidos arrays com mais que quatro
dimenses. A numerao de elementos de um array comea com 0. O ltimo elemento de um array de
uma dimenso tem o nmero do ndice que 1 a menos que o tamanho do array. Isso significa que
chamar pelo ltimo elemento de um array constitudo de 50 aparecer como a[49]. O mesmo acontece
a arrays multidimensionais: Um dimenso indexada de 0 ao tamanho da dimenso menos 1. O ltimo
elemento de um array de duas dimenses do exemplo aparecer como m[6][49].
Arrays estticos no podem ser representados como sries de tempo, isto , a
funoArraySetAsSeries(), que defini o acesso aos elementos de um array do fim para o comeo, no
pode ser aplicado a eles. Se voc desejar ter acesso a um array da mesma forma que uma srie de
tempo, use o objeto de array dinmico.
Se houver uma tentativa de acesso fora da faixa do array, a execuo do subsistema gerar um erro
crtico e o programa ser interrompido.

Especificadores de Acesso
Especificadores de acesso definem como o compilador pode acessar variveis, membros de estruturas
ou classes.
O especificador const declara uma varivel como uma constante, e no permite modificar esta
varivel durante o tempo de execuo. Uma inicializao simples de uma varivel permitida ao
declar-la. O especificador const no pode ser aplicado a membros de estruturas e classes.
Exemplo:
int OnCalculate (const int rates_total,

// tamanho do array price[]

const int prev_calculated,

// barras tratadas na chamada anterior

const int begin,

// a partir de onde comeam os dados significativos

const double& price[]

// array a ser calculado

);

Para acessar membros de estruturas e classes use os seguintes qualificadores:


public permite acesso irrestrito s variveis ou mtodos da classe
protected permite acesso a partir dos mtodos desta classe, bem como a partir dos mtodos de
classes publicamente herdadas. Outro acesso impossvel;
private permite acesso s variveis e mtodos da classe somente a partir dos mtodos da mesma
classe.
virtual aplica-se apenas a mtodos de classe (no a mtodos de estrutura) e diz ao compilador que
este mtodo deve se colocado na tabela de funes virtuais da classe.

Classes de Armazenamento
Existem trs classes de armazenamento: static, input e extern. Estes modificadores de classe de
armazenamento explicitamente indicam ao compilador que as variveis correspondentes esto
distribudas em uma rea pr-alocada de memria, que chamada de global pool. Alm disso, estes
modificadores indicam um processamento especial dos dados da varivel. Se uma varivel declarada
em nvel local no for uma varivel esttica, a memria para tal varivel alocada automaticamente
em uma pilha de programa. A liberao de memria alocada para um array no esttico (non-static)
tambm realizada automaticamente quando se passa alm da rea de visibilidade do bloco em que o
array est declarado.

2000-2014, MetaQuotes Software Corp.

176

Elementos Bsicos da Linguagem

Tambm Veja
Tipos de Dados, Encapsulamento e Extensibilidade de Tipos,Inicializao de Variveis, Visibilidade
Escopo e Tempo de Vida de Variveis, Criao e Excluso de Objetos, Membros Estticos de uma
Classe

2000-2014, MetaQuotes Software Corp.

177

Elementos Bsicos da Linguagem

Variveis Locais
Uma varivel declarada dentro de uma funo local. O escopo de uma varivel local limitado a
regio dentro da funo na qual a varivel est declarada. Uma varivel local pode ser inicializada pelo
resultado de qualquer expresso. Toda chamada da funo inicializa uma varivel local. Variveis
locais so armazenadas na rea de memria da correspondente funo.
Exemplo:
int somefunc()
{
int ret_code=0;
...
return(ret_code);
}

Escopo de uma varivel uma parte de um programa, na qual uma varivel pode ser referenciada.
Variveis declaradas dentro de um bloco (a nvel interno), possuem o bloco como seu escopo. O escopo
de bloco comea com a declarao da varivel e termina com a chave direita final.
Variveis locais declaradas no comeo de uma funo tambm tm escopo de bloco, bem como
parmetros de funo, que so variveis locais. Qualquer bloco pode conter declaraes de variveis.
Se blocos estiverem aninhados e um identificador no bloco externo tiver o mesmo nome que um
identificador no bloco interno, o identificador no bloco externo oculto, at que a operao do bloco
interno seja finalizado.
Exemplo:
void OnStart()
{
//--int i=5;

// varivel local da funo

{
int i=10;

// varivel de funo

Print("Dentro do bloco i = ",i); // resultado i=10;


}
Print("Fora do bloco i = ",i);

// resultado i=5;

Isso significa que enquanto o bloco interno est rodando, ele v os valores de seus prprios
identificadores locais, e no os valores dos identificadores com nomes idnticos no bloco externo.
Exemplo:
void OnStart()
{
//--int i=5;

// varivel local da funo

for(int i=0;i<3;i++)
Print("Dentro for i = ",i);
Print("Fora do bloco i = ",i);
}

2000-2014, MetaQuotes Software Corp.

178

Elementos Bsicos da Linguagem


/* Resultado da execuo
Dentro for i = 0
Dentro for i = 1
Dentro for i = 2
Fora do bloco i = 5
*/

Variveis locais declaradas como estticas (static) tm escopo de bloco, apesar do fato de elas
existirem desde o incio do programa.

Pilha (Stack)
Em todo programa MQL5, uma rea especial de memria chamada pilha alocada para armazenar
variveis locais de funes que so criadas automaticamente. Um pilha alocada para todas as
funes. O tamanho default da pilha 256 kb, o tamanho da pilha pode ser gerenciada usando a
diretiva de compilao #property stacksize.
Variveis locais estticas (static) so armazenadas no mesmo lugar onde outras variveis estticas e
globais so armazenadas - em uma rea especial de memria, que existe separadamente da pilha.
Variveis criadas dinamicamente tambm usam uma rea de memria separada da pilha.
A cada chamada de funo, um lugar na pilha alocado para variveis internas no estticas. Aps
sair da funo, a memria fica disponvel para uso novamente.
Se da primeira funo, uma segunda funo for chamada, ento a segunda funo ocupa o tamanho
requerido da memria restante da pilha para suas variveis. Portanto, ao usar funes includas, a
memria da pilha ser seqencialmente ocupada por cada funo. Isso pode levar a uma falta de
memria durante uma das chamadas de funo, tal situao chamada de estouro de pilha (stack
overflow).
Portanto, para grandes dados melhor usar memria dinmica - ao entrar em uma funo, aloque a
memria que requerida para as necessidades locais (new, ArrayResize()), e ao sair da funo, libere
a memria (delete, ArrayFree()).
Tambm Veja
Tipos de Dados, Encapsulamento e Extensibilidade de Tipos, Inicializao de Variveis, Visibilidade
Escopo e Tempo de Vida de Variveis, Criando e Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

179

Elementos Bsicos da Linguagem

Parmetros Formais
Parmetros passados para a funo so locais. O escopo de bloco de funo. Parmetros formais
devem ter nomes diferentes de variveis externas e variveis locais definidas dentro de uma funo.
Alguns valores podem ser atribudos a parmetros formais no bloco de funo. Se um parmetro
formal declarado com o modificador const , seu valor no pode ser modificado dentro da funo.
Exemplo:
void func(const int & x[], double y, bool z)
{
if(y>0.0 && !z)
Print(x[0]);
...
}

Parmetros formais podem ser inicializados por constantes. Neste caso, o valor de inicializao
considerado como o valor default (padro). Parmetros, prximos ao parmetro inicializado, tambm
devem ser inicializados.
Exemplo:
void func(int x, double y = 0.0, bool z = true)
{
...
}

Ao chamar tal funo, os parmetros inicializados podem ser omitidos, os valores default sero usados
no lugar deles.
Exemplo:
func(123, 0.5);

Parmetros de tipos simples so passados por valor, isto , modificaes da correspondente varivel
local deste tipo dentro da funo chamada no ir se refletir na funo chamadora. Arrays de qualquer
tipo e dados do tipo estrutura so passados sempre por referncia. Se for necessrio proibir
modificaes no contedo de um array ou estrutura, os parmetros destes tipos devem ser declarados
com a palavra-chava const.
Existe a possibilidade de passar parmetros de tipos simples por referncia. Neste caso, modificaes
nestes parmetros de dentro da funo chamada afetaro as variveis correspondentes passadas por
referncia. A fim de indicar que um parmetro passado por referncia, coloque o modificador & aps
do tipo do parmetro.
Exemplo:
void func(int& x, double& y, double & z[])
{
double calculated_tp;
...
for(int i=0; i<OrdersTotal(); i++)
{

2000-2014, MetaQuotes Software Corp.

180

Elementos Bsicos da Linguagem


if(i==ArraySize(z))

break;

if(OrderSelect(i)==false) break;
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}

Parmetros passados por referncia no podem ser inicializados por valores default.
No mximo 64 parmetros podem ser passado para um funo.
Tambm Veja
Variveis de Entrada, Tipo de Dados, Encapsulamento e Extensibilidade de Tipos, Inicializao de
Variveis, Visibilidade Escopo e Tempo de Vida de Variveis, Criando e Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

181

Elementos Bsicos da Linguagem

Variveis Estticas
A classe de armazenamento esttico (static) define uma varivel esttica. O modificador static
indicado antes do tipo do dado.
Exemplo:
int somefunc()
{
static int flag=10;
...
return(flag);
}

Uma varivel esttica pode ser inicializada por uma constante ou expresso constante correspondente
ao seu tipo, diferentemente de uma varivel local simples, que pode ser inicializada por qualquer
expresso.
Variveis estticas existem a partir do momento de execuo do programa e so inicializados somente
uma vez antes que a funo especializada OnInit() seja chamada. Se valores iniciais no forem
especificados, variveis da classe de armazenamento esttico assumem valores iniciais zero.
Variveis locais declarados com a palavra-chave static retm seus valores durante todo o tempo de
vida da funo. A cada prxima chamada da funo, tais variveis locais contm os valores que elas
tinham durante a chamada anterior.
Quaisquer variveis em um bloco, exceto parmetros formais de uma funo, podem ser definidas
como estticas. Se uma varivel declarada em nvel local no for uma varivel esttica, a memria
para tal varivel alocada automaticamente em uma pilha de programa.
Exemplo:
int Counter()
{
static int count;
count++;
if(count%100==0) Print("A funo Counter tem sido chamada ",count," tempos");
return count;
}
void OnStart()
{
//--int c=345;
for(int i=0;i<1000;i++)
{
int c=Counter();
}
Print("c =",c);
}

Tambm Veja

2000-2014, MetaQuotes Software Corp.

182

Elementos Bsicos da Linguagem


Tipos de Dados, Encapsulamento e Extensibilidade de Tipos, Inicializao de Variveis, Visibilidade
Escopo e Tempo de Vida de Variveis, Criao e Excluso de Objetos, Membros de Classe Estticos

2000-2014, MetaQuotes Software Corp.

183

Elementos Bsicos da Linguagem

Variveis Globais
Variveis globais so criadas colocando suas declaraes fora de descries da funo. Variveis
globais so definidas no mesmo nvel que funes, isto , elas no so locais de algum bloco.
Exemplo:
int GlobalFlag=10;

// Varivel global

int OnStart()
{
...
}

O escopo de variveis globais o programa inteiro. Variveis globais so acessveis a partir de todas
as funes definidas no programa. Elas so inicializadas com zero a menos que um outro valor inicial
seja explicitamente definido. Uma varivel global pode ser inicializada somente por uma constante, ou
expresso de constante que corresponde ao tipo dela.
Variveis globais so inicializadas somente um vez logo aps o programa ser carregado no memria do
terminal cliente.
Observao: Variveis declaradas em nvel global no devem ser confundidas com variveis globais do
terminal cliente que podem ser acessadas usando as funes GlobalVariable...().
Tambm Veja
Tipos de Dados, Encapsulamento e Extensibilidade de Tipos, Inicializao de Variveis, Visibilidade
Escopo e Tempo de Vida de Variveis, Criando e Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

184

Elementos Bsicos da Linguagem

Variveis de Entrada
A classe de armazenamento input define uma varivel externa. O modificador input indicada antes
do tipo de dado. Uma varivel com o modificador input no pode ser modificada dentro de programas
mql5, tais variveis podem ser acessadas somente para leitura. Valores de variveis de entrada
podem ser modificados pelo usurio somente a partir da janela de propriedades do programa.
Exemplo:
//--- parmetros de entrada
input int

MA_Period=13;

input int

MA_Shift=0;

input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Variveis de entrada determinam a entrada de parmetros de um programa. Eles esto disponveis a


partir da janela de Propriedades de um programa.

possvel definir uma outra forma de exibir nomes de parmetros de entrada na aba Parmetros de
Entrada. Para fazer isso, um comentrio string usado, que deve estar localizado aps a descrio de
um parmetro de entrada na mesma linha. Assim, nomes mais compreensivos para o usurio podem
ser associados aos parmetros de entrada.
Exemplo:
//--- parmetros de entrada
input int

InpMAPeriod=13;

// Perodo suavizado

input int

InpMAShift=0;

// Deslocamento da linha horizontal

input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;

// Mtodo de Suavizao

2000-2014, MetaQuotes Software Corp.

185

Elementos Bsicos da Linguagem

Observao:Arrays e variveis de tipos complexos no podem agir como variveis de entrada.


Observao:O comprimento de um comentrio string para as variveis de entrada no pode exceder
63 caracteres.

Passando Parmetros Ao Chamar Indicadores Customizados a partir de


Programas MQL5
Indicadores Customizados so chamados usando a funo iCustom(). Aps o nome do indicador
customizado, os parmetros devem aparecer em estrita conformidade com a declarao das variveis
de entrada deste indicador customizado. Se os parmetros indicados so em nmero menor que as
variveis de entrada declaradas no indicador customizado chamado, os parmetros faltantes so
preenchidos com os valores especificados durante a declarao de variveis.
Se o indicador customizado usar a funo OnCalculate do primeiro tipo (isto , o indicador calculado
usando o mesmo array dos dados), ento um dos valores ENUM_APPLIED_PRICE ou o manuseio de um
outro indicador deve ser usado como o ltimo parmetro ao chamar tal indicador customizado. Todos
os parmetros correspondentes s variveis de entrada devem ser claramente indicados.

Enumeraes como Parmetros de Entrada


No apenas enumeraes internas fornecidos no MQL5, mas tambm variveis definidas pelo usurio
podem ser usadas como variveis de entrada (parmetros de entrada para programas MQL5). No
apenas enumeraes internas fornecidos no MQL5, mas tambm variveis definidas pelo usurio
podem ser usadas como variveis de entrada (parmetros de entrada para programas MQL5).
Exemplo:
#property script_show_inputs
//--- dias da semana
enum dayOfWeek
{
S=0,

// Domingo

M=1,

// Segunda-feira

2000-2014, MetaQuotes Software Corp.

186

Elementos Bsicos da Linguagem


T=2,

// Tera-feira

W=3,

// Quarta-feira

Th=4,

// Quinta-feira

Fr=5,

// Sexta-feira,

St=6,

// Sbado

};
//--- parmetros de entrada
input dayOfWeek swapday=W;

A fim de permitir a um usurio selecionar um valor necessrio da janela de propriedades durante o


incio da execuo de um script, ns usamos o comando de pr-processamento #property script show
inputs. Iniciamos o script e podemos escolher um dos valores da enumerao dayOfWeek da lista.
Iniciamos o script EnumInInput e vamos para a aba Parmetros de Entrada. Por default, o valor de
swapday (dia de cobrana tripla de swap) Wednesday (W = 3), mas ns podemos especificar qualquer
outro valor, e usar este valor para mudar a operao do programa.

O nmero de possveis valores de uma enumerao limitada. A fim de obter o cdigo de erro, a
funo GetLastError() deve ser chamada. Nomes mnemnicos de membros da enumerao so usados
para valores exibidos na lista. Se um comentrio associado com um nome mnemnico, como
mostrado no exemplo, o contedo do comentrio usado ao invs do nome mnemnico.
Cada valor da enumerao dayOfWeek tem seu valor de 0 a 6, mas na lista de parmetros, os
comentrios especificados para cada valor ser exibido. Isso fornece flexibilidade adicional para
escrever programas com descries mais claras dos parmetros de entrada.

Variveis com Modificador sinput


Variveis com modificador input no apenas permitem definir parmetros externos ao iniciar
programas mas tambm so necessrias na otimizao de estratgias de negociao no Provador de
Estratgia. Cada varivel de entrada excluindo-se o do tipo string pode ser usada em optimizao.
Algumas vezes, necessrio excluir alguns parmetros externos do programa da rea total de passos

2000-2014, MetaQuotes Software Corp.

187

Elementos Bsicos da Linguagem


do Provador de Estratgia. O modificador de memria sinput foi introduzido para tais casos. sinput
significa declarao de varivel externa esttica (sinput = static input). Significa que a declarao
seguinte em um cdigo Expert Advisor
sinput

int layers=6;

// Nmero de camadas

ser equivalente a declarao completa


static input int layers=6;

// Nmero de camadas

A varivel declarada com o modificador sinput um parmetro de entrada de um programa MQL5. O


valor deste parmetro pode ser modificado ao iniciar o programa. Entretanto, esta varivel no pode
ser usado na otimizao de parmetros de entrada. Em outras palavras, seu valor no enumerado ao
procurar pelo melhor conjunto ajustado de parmetros a uma condio especfica.

O Expert Advisor mostrado acima tem 5 parmetros externos. "Nmero de camadas" declarado para
ser sinput e igual a 6. Este parmetro no pode ser modificado durante um otimizao de estratgia
de negociao. Podemos especificar o valor necessrio para ele ser usado mais adiante. Os campos
Iniciar, Passo, Parar no ficam disponveis para tal varivel.
Portanto, usurios no sero capazes de otimizar este parmetro aps especificarmos o modificador
sinput para a varivel. Em outras palavras, o usurio do terminal no ser capaz de definir os valores
inicial e final para ele no Provador de Estratgia para enumerao automtica na faixa especificada
durante uma otimizao.
Porm, existe uma exceo a esta regra: variveis sinput podem variar em tarefas de optimizao
usando a funo ParameterSetRange(). Esta funo foi introduzida especificamente para o programa
controlar os conjuntos de valores disponveis para qualquer varivel input, incluindo aquelas
declaradas como static input (sinput). A funo ParameterGetInput() permite receber os valores
variveis de entrada quando a otimizao iniciada (com o manipulador OnTesterInit()) e redefine
uma alterao do valor do passo e um intervalo, no qual uma otimizao dos valores dos parmetros
sero enumerados.
Desta forma, ao combinando o modificador sinput com duas funes que trabalham com parmetros
de entrada, isso permite criar regras flexveis para definir intervalos de otimizao de parmetros de
entrada que dependem dos valores de outros parmetros de entrada.
Tambm Veja
iCustom, Enumeraes, Propriedades de Programas

2000-2014, MetaQuotes Software Corp.

188

Elementos Bsicos da Linguagem

Variveis Externas
A palavra-chave extern usado para declarar identificadores de variveis como identificadores da
classe de armazenamento esttica (esttico) com tempo de vida global. Estas variveis existem a
partir do inicio do programa e a memria para elas alocada e inicializada imediatamente aps o
inicio do programa.
Voc pode criar programas que consistem de mltiplos arquivos fontes; neste caso a diretiva para o
preprocessador #include usada. Variveis declaradas como extern com o mesmo tipo e identificador
podem existir em arquivos fontes diferentes de um projeto.
Ao compilar o projeto inteiro, todas as variveis
associados com uma parte da memria do conjunto
teis para compilao separada de arquivos fontes.
apenas uma vez - a existncia de vrias variveis
mesmo identificador proibida.

extern com o mesmo tipo e identificador so


(pool) de variveis globais. Variveis extern so
Variveis externas podem ser inicializadas, mas
externas inicializadas do mesmo tipo e com o

Tambm Veja
Tipos de Dados, Encapsulamento e Extensibilidade de Tipos, Inicializao de Variveis, Visibilidade
Escopo e Tempo de Vida de Variveis, Criando e Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

189

Elementos Bsicos da Linguagem

Inicializao de Variveis
Qualquer varivel pode ser inicializada durante a definio. Se uma varivel no inicializada
explicitamente, o valor armazenado nesta varivel pode ser qualquer coisa. Inicializao implcita no
usada.
Variveis globais e estticas podem ser inicializadas uma vez por uma constante do tipo
correspondente ou uma expresso constante. Variveis locais podem ser inicializados por qualquer
expresso, no apenas por uma constante.
A inicializao de variveis globais e estticas realizada apenas uma vez. A inicializao de
variveis locais feita toda a vez que se chama as funes correspondentes.
Exemplos:
int

= 1;

string s

= "Ol";

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 } };

//--- de tetris
int

right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};

//--- inicializao de todos os campos da estrutura com valores zero


MqlTradeRequest request={0};

A lista de valores dos elementos de um array devem estar entre chaves. Seqncias de inicializaes
faltantes so consideradas iguais a 0. A seqncia de inicializao deve ter ao menos um valor: este
valor inicializado para o primeiro elemento da estrutura correspondente ou array, elementos
faltantes so considerados iguais a zero.
Se o tamanho do array inicializado no especificado, ele determinado pelo compilador, baseado no
tamanho da seqncia de inicializao. Arrays multi-dimensionais no podem ser inicializados por uma
seqncia unidimensional (uma seqncia sem chaves adicionais), exceto para o caso quando apenas
um elemento inicializante especificado (zero, como regra).
Arrays (incluindo aqueles declarados no nvel local) podem ser inicializados apenas por constantes.
Exemplos:
struct str3
{
int

low_part;

int

high_part;

};
struct str10
{
str3

s3;

double

d1[10];

int

i3;

};
void OnStart()
{

2000-2014, MetaQuotes Software Corp.

190

Elementos Bsicos da Linguagem


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};
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]);

Para varivel de tipo estrutura, inicializao parcial permitida, bem como para arrays estticos.
Pode-se inicializar um ou mais primeiros elementos de uma estrutura ou array, os demais elementos
sero inicializados com zeros neste caso.
Tambm Veja
Tipos de Dados, Encapsulamento e Tipo de Extensibilidade, Visibilidade Escopo e Tempo de Vida de
Variveis, Criando e Excluindo Objetos

2000-2014, MetaQuotes Software Corp.

191

Elementos Bsicos da Linguagem

Visibilidade Escopo e Tempo de Vida de Variveis


Existem dois tipos bsicos de escopo: escopo local e escopo global.
Uma varivel declarada fora de todas as funes est localizada no escopo global. O acesso a tais
variveis pode ser feito de qualquer lugar no programa. Estas variveis so localizadas no conjunto
(pool) global de memria, assim seus tempos de vida coincidem com o tempo de vida do programa.
Uma varivel declarada dentro de um bloco (parte do cdigo entre chaves) pertence ao escopo local.
Tal varivel no visvel (e portanto no disponvel) fora do bloco no qual est definida. O caso
mais comum de declarao local uma varivel declarada dentro de uma funo. Uma varivel
declarada localmente est localizada na pilha (stack), e o tempo de vida de tal varivel igual ao
tempo de vida da funo.
J que o escopo de uma varivel local o bloco em que ela est declarada, possvel declarar
variveis com o mesmo nome que variveis declaradas em outros blocos, mesmo aquelas declaradas
em nveis mais acima, at o nvel global.
Exemplo:
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;
//--- define valor vazio para primeiras barras limite
for(i=0; i<limit; i++) LineBuffer[i]=0.0;
//--- calcula primeiro valor visvel
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;

2000-2014, MetaQuotes Software Corp.

192

Elementos Bsicos da Linguagem


for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
LineBuffer[i]=sum/weightsum;
}
//--}

Preste ateno na varivel i, declarada na linha


for(int i=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}

Seu escopo somente o ciclo do for; fora deste ciclo existe uma outra varivel com o mesmo nome,
declarada no comeo da funo. Alm disso, a varivel k est declarada no corpo do loop, seu escopo
o corpo do loop.
Variveis locais podem ser declarados com o especificador de acesso static. Neste caso, o compilador
tem uma varivel no conjunto (pool) global de memria. Portanto, o tempo de vida de uma varivel
esttica igual ao tempo de vida do programa. Aqui o escopo de tal varivel limitado ao bloco no
qual ela est declarada.
Tambm Veja
Data Types, Encapsulation and Extensibility of Types,Initialization of Variables, Creating and
Deleting Objects

2000-2014, MetaQuotes Software Corp.

193

Elementos Bsicos da Linguagem

Criao e Excluso de Objetos


Aps um programa MQL5 ser carregado para execuo, memria alocada para cada varivel de
acordo com seu tipo. De acordo com o nvel de acesso, todas as variveis so dividas em dois tipos variveis globais e variveis locais. De acordo com a classe de memria, elas pode ser parmetros de
entrada de um programa MQL5, estticas (static) e automticas. Se necessrio, cada varivel
inicializada por um valor correspondente. Aps ser usada, uma varivel desinicializada e a memria
usada por ela retornada ao sistema executvel MQL5.

Inicializao e Desinicializao de Variveis Globais


Variveis globais so inicializados automaticamente logo aps um programa mql5 ser carregado e
antes de qualquer funo ser chamada. Durante a inicializao valores iniciais so atribudos a
variveis de tipos simples e um construtor (se existir algum) chamado para objetos. Variveis de
entrada so sempre declarados em um nvel global, e so inicializados por valores definidos pelo
usurio na janela de dilogo durante o comeo do programa.
Apesar do fato de que variveis estticas serem geralmente declaradas em um nvel local, a memria
para estas variveis pr-alocada, e a inicializao realizada logo aps um programa ser carregado;
o mesmo para variveis globais.
A ordem de inicializao corresponde a ordem de declarao da varivel no programa. A
desinicializao realizada em ordem inversa. Este regra verdadeira apenas para as variveis que
no foram criadas pelo operador new. Tais variveis so criadas e inicializadas automaticamente logo
aps carregamento, e so desinicializadas depois do descargamento do programa.

Inicializao e Desinicializao de Variveis Locais


Se uma varivel declarada em um nvel local no esttica, memria alocada automaticamente para
tal varivel. Variveis locais, bem como variveis globais, so inicializados automaticamente no
momento que a execuo do programa encontra a declarao de uma varivel local. Assim, a ordem de
inicializao corresponde ordem de declarao.
Variveis locais so desinicializados no final do bloco do programa, no qual elas foram declaradas, e na
ordem oposta de suas declaraes. Um bloco de programa um operador de composio que pode ser
uma parte de um operador de seleo switch, operador de ciclo (for, while, do-while), um corpo de
funo ou uma parte do operador if-else.
Variveis locais so inicializados somente no momento em que a execuo do programa encontra a
declarao da varivel. Se durante a execuo do programa o bloco, no qual a varivel est declarada,
no for executada, tal varivel no inicializada.

Inicializao e Desinicializao de Objetos Colocados


Um caso especial aquele com ponteiros de objeto, porque a declarao de um ponteiro no implica
em inicializao de objetos correspondentes. Objetos colocados dinamicamente so inicializados
somente no momento em que a instncia da classe criada pelo operador new. Inicializao de
objetos pressupe chamada de um construtor da classe correspondente. Se no existir construtor
correspondente na classe, seus membros de tipo simples no sero automaticamente inicializados;
membros de tipos string, array dinmico e objeto complexo sero automaticamente inicializados.

2000-2014, MetaQuotes Software Corp.

194

Elementos Bsicos da Linguagem


Ponteiros podem ser declarados em nvel local ou global; e eles podem ser inicializados pelo valor vazio
de NULL ou pelo valor do ponteiro do mesmo ou herdado tipo. Se o operador new chamado para um
ponteiro declarado em um nvel local, o operador delete para este ponteiro deve ser chamado antes de
sair do nvel. Caso contrrio, o ponteiro estar perdido e a excluso explcita do objeto falhar.
Todos os objetos criados pela expresso object_pointer=new Class_name, devem ser ento excludos
pelo operador delete(object_pointer). Se por algum razo tal varivel no for excluda por meio do
operador delete quando o programa estiver concludo, a correspondente entrada aparecer no dirio
"Experts". Pode-se declarar vrias variveis e atribuir um ponteiro de um objeto para todas elas.
Se um objeto criado dinamicamente tiver um construtor, este construtor ser chamado no momento
da execuo do operador new. Se um objeto tiver um destrutor, ele ser chamado durante a execuo
do operador delete.
Assim objetos colocados dinamicamente so criados somente no momento em que so criados pelo
operador new, e so certamente excludos tanto pelo operador delete ou automaticamente pelo
sistema de execuo do MQL5 durante a descarga do programa.A ordem de declarao de ponteiros
criados dinamicamente no influenciam na ordem de suas inicializaes. A ordem de inicializao e
desinicializao totalmente controlada pelo programador.

Caractersticas Transitrias de Variveis


A principal informao sobre a ordem de criao, excluso, sobre chamadas de construtores e
destrutores dada na tabela a baixo.
Varivel automtica
global
Inicializao

Ordem
inicializao

logo
aps
programa MQL5
carregado

de

na
ordem
declarao

um
ser

da

Varivel automtica
local

Objeto criado
dinamicamente

quando a linha de
cdigo onde ela est
declarada alcanada
durante execuo

na
execuo
operador new

do

na
ordem
declarao

da

independente
da
ordem de declarao

Desinicializao

antes de um programa
MQL5
ser
descarregado

quando a execuo sai


do bloco da declarao

quando o operador
delete executado ou
antes de um programa
mql5 ser descarregado

Ordem
de
desinicializao

na ordem oposta da
ordem de inicializao

na ordem oposta da
ordem de inicializao

independente
da
ordem de inicializao

Chamada
construtor

de

no carregamento do
programa MQL5

na inicializao

na
execuo
operador new

do

Chamada
destrutor

de

na
descarga
programa MQL5

do

quando sair do bloco


onde a varivel foi
inicializada

na
execuo
operador delete

do

mensagem de log no
dirio "Experts" sobre
a tentativa de excluir

mensagem de log no
dirio "Experts" sobre
a tentativa de excluir

mensagem de logo no
dirio "Experts" sobre
objetos
criados

Logs de Erro

2000-2014, MetaQuotes Software Corp.

195

Elementos Bsicos da Linguagem

um
objeto
criado
automaticamente

um
objeto
criado
automaticamente

dinamicamente
no
excludos na descarga
de um programa mql5

Tambm Veja
Tipos de Dados, Encapsulamento e Tipos de Extensibilidade, Inicializao de Variveis, Visibilidade
Escope e Tempo de Vida de Variveis

2000-2014, MetaQuotes Software Corp.

196

Elementos Bsicos da Linguagem

Preprocessador
Preprocessador um subsistema especial do compilador MQL5 que destinado preparao do cdigo
fonte do programa imediatamente antes do programa ser compilado.
O preprocessador permite melhorar a legibilidade do cdigo fonte. O cdigo pode ser estruturado por
meio de incluso de arquivos especficos contendo cdigos fonte de programas-mql5. A possibilidade
de atribuir nomes mnemnicos a constantes especficas contribui para melhoria da legibilidade do
cdigo.
O preprocessador tambm permite determinar parmetros especficos de programas MQL5:
Declarar constantes
Definir propriedades de programa
Incluir arquivos no texto do programa
Importar funes
Conditional compilation
Se o smbolo # for usado na primeira linha do programa, esta linha uma diretiva de preprocessador.
Um diretiva de preprocessador termina com o caractere quebra de linha.

2000-2014, MetaQuotes Software Corp.

197

Elementos Bsicos da Linguagem

Declarao de Constantes (#define)


A diretiva #define pode ser usada para atribuir nomes mnemnicos a constantes. Existem duas
formas:
#define identificador expresso

// forma sem parmetro

#define identificador(par1,... par8) expresso // forma paramtrica

A diretiva #define substitui em expresso todas as entradas encontradas adiante do identificador no


texto fonte. O identificador substitudo somente se ele um smbolo (token) separado. O
identificador no substitudo se ele parte de um comentrio, parte de uma string, ou parte de um
outro identificador mais longo.
O identificador de constante governado pelas mesmas regras de nomes de variveis. O valor pode
ser de qualquer tipo:
#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");
}

Uma expresso pode consistir de vrios smbolos (tokens), tais como palavras chave, constantes,
expresses constantes e no-constantes. Uma expresso termina com o fim da linha e no pode ser
transferida para a prxima linha.
Exemplo:
#define TWO

#define THREE

#define INCOMPLETE TWO+THREE


#define COMPLETE

(TWO+THREE)

void OnStart()
{
Print("2 + 3*2 = ",INCOMPLETE*2);
Print("(2 + 3)*2 = ",COMPLETE*2);
}
// Resultado
// 2 + 3*2 = 8
// (2 + 3)*2 = 10

Forma paramtrica do #define


Na forma paramtrica, todas as subseqentes entradas encontradas do identificador sero
substitudas pela expresso levando em conta os respectivos parmetros. Por exemplo:

2000-2014, MetaQuotes Software Corp.

198

Elementos Bsicos da Linguagem


// exemplo com dois parmetros a e b
#define A 2+3
#define B 5-1
#define MUL(a, b) ((a)*(b))
double c=MUL(A,B);
Print("c=",c);
/*
expresso double c=MUL(A,B);
equivalente a double c=((2+3)*(5-1));
*/
// Resultado
// c=20

Se assegure de colocar os parmetros entre parnteses ao usar os parmetros na expresso, uma vez
que isso ajudar a evitar erros no bvios que so difceis de encontrar. Se reescrevermos o cdigo
sem o uso de parntesis, o resultado ser diferente:
// exemplo com dois parmetros a e b
#define A 2+3
#define B 5-1
#define MUL(a, b) a*b
double c=MUL(A,B);
Print("c=",c);
/*
expresso double c=MUL(A,B);
equivalente a double c=2+3*5-1;
*/
// Resultado
// c=16

Ao usar a forma paramtrica, so permitidos no mximo 8 parmetros.


// forma paramtrica correta
#define LOG(text)

Print(__FILE__,"(",__LINE__,") :",text)

// um parmetro - 'text'

// forma paramtrica incorreta


#define WRONG_DEF(p1, p2, p3, p4, p5, p6, p7, p8, p9)

p1+p2+p3+p4 // mais do que 8 parmetros a p

Tambm Veja
Identificador, Constantes de Caractere

2000-2014, MetaQuotes Software Corp.

199

Elementos Bsicos da Linguagem

Propriedades de Programa (#property)


Todo programa-mql5 permite especificar parmetros especficos adicionais denominados #property
que ajudam o terminal cliente em prover adequadamente servios a programas sem a necessidade de
lan-los explicitamente. Isso diz respeito a configuraes externas de indicadores, em primeiro lugar.
Propriedades descritas em arquivos includos (included files) so completamente ignorados.
Propriedades devem ser especificadas no principal arquivo MQL5.
#property identifier value

O compilador escrever valores declarados na configurao do mdulo executado.


Constante

Tipo

Descrio

icon

string

Caminho para o arquivo de


uma imagem que ser usada
como um cone do programa
EX5. Regras de especificao
de caminho so as mesmas
para recursos. A propriedade
deve ser especificada no
mdulo principal com o cdigo
fonte MQL5. O arquivo de
cone deve estar no formato
ICO.

link

string

Link para
empresa

copyright

string

O nome da empresa

version

string

Verso do programa, mximo


de 31 caracteres

description

string

Breve descrio em texto do


programa
MQL5.
Vrios
description
podem
ser
presentes,
cada
uma
descrevendo uma linha do
texto. O comprimento total de
todo description no pode
exceder
511
caracteres
incluindo a quebra de linha.

stacksize

int

Tamanho da pilha (stack) para


chamadas recursivas

library

website

da

Uma
biblioteca
(library);
nenhuma funo start
atribuda, funes com o
modificador export podem ser
importadas
em
outros
programas-mql5

2000-2014, MetaQuotes Software Corp.

200

Elementos Bsicos da Linguagem

indicator_applied_price

int

Especifica o valor default para


o campo "Aplicar a". Pode-se
especificar um dos valores de
ENUM_APPLIED_PRICE. Se a
propriedade
no

especificada, o valor default


PRICE_CLOSE

indicator_chart_window

Exibe o indicador na janela do


grfico

indicator_separate_window

Exibe o indicador em uma


janela separada

indicator_height

int

Altura (height) fixa da subjanela do indicador em pixels


(property INDICATOR_HEIGHT)

indicator_buffers

int

Nmero de buffers para clculo


do indicador

indicator_plots

int

Nmero de sries grficas no


indicador

indicator_minimum

double

O limite de escala inferior


para uma janela de indicador
separada

indicator_maximum

double

O limite de escala superior


para uma janela de indicador
separada

indicator_labelN

string

Define o rtulo para a Nsima srie grfica exibida na


Janela de Dados. Para sries
grficas
que
requerem
mltiplos buffers de indicador
(DRAW_CANDLES,
DRAW_FILLING e outros), os
nomes de rtulos so definidos
por meio do separador ';'.

indicator_colorN

color

A cor de exibio da linha N,


onde N o nmero da srie
grfica;
numerao
comeando em 1

indicator_widthN

int

Espessura de linha na srie


grfica, onde N - nmero da
srie
grfica,
numerao
comeando em 1

indicator_styleN

int

Estilo da linha na srie


grfica, especificado a partir
dos
valores
de

2000-2014, MetaQuotes Software Corp.

201

Elementos Bsicos da Linguagem

ENUM_LINE_STYLE.
N
nmero de sries grficas,
numerao comeando em 1
indicator_typeN

int

Tipo de plotagem grfica,


especificado a partir de
valores de ENUM_DRAW_TYPE.
N - nmero de sries grficas,
numerao comeando em 1

indicator_levelN

double

Nvel horizontal de N em uma


janela de indicador separada

indicator_levelcolor

color

Cor do nveis horizontais do


indicador

indicator_levelwidth

int

Espessura
dos
nveis
horizontais do indicador

indicator_levelstyle

int

Estilo dos nveis horizontais do


indicador

script_show_confirm

Exibe
uma
janela
de
confirmao antes de executar
o script

script_show_inputs

Exibe uma janela com as


propriedades
antes
de
executar o script e desabilita
esta janela de confirmao

tester_indicator

string

Nome
de
um
indicador
customizado no formato de
"nome_indicador.ex5".
Indicadores que requeiram
teste
so
definidos
automaticamente a partir da
funo
iCustom(), se o
correspondente parmetro
definido atravs de uma string
constante. Para todos os
demais casos (uso da funo
IndicatorCreate() ou uso de
uma string no-constante no
parmetro que define o nome
do indicador) esta propriedade
requerida

tester_file

string

Nome de arquivo para um


testador com a indicao de
extenso, entre aspas duplas
(como uma string constante).
O arquivo especificado ser
passado para o Provador de

2000-2014, MetaQuotes Software Corp.

202

Elementos Bsicos da Linguagem

Estratgia.
Arquivos
de
entrada para serem testados,
se houver necessidade de
algum, devem sempre ser
especificados.
tester_library

string

Nome da biblioteca (library)


com a extenso, entre aspas
duplas. Uma biblioteca pode ter
extenso dll ou ex5. Bibliotecas
que requeiram teste so
definidos
automaticamente.
Contudo, se alguma biblioteca
for usada por um indicador
customizado, esta propriedade
requerida

Exemplo de Descrio e Nmero de Verso


#property version

"3.70"

// Verso corrente do Expert Advisor

#property description "ZigZag universal com Pesavento Patterns"

#property description "No momento no indicador vrios ZigZags com diferentes algorismos esto inclu
#property description " possvel embutir um grande nmero de outros indicadores exibindo os picos

#property description "fundos e automaticamente construir a partir destes topos e fundos vrias fer

Exemplos especificando um rtulo separado para cada buffer do indicador ( "C open; C high; C
low; C close")
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots

#property indicator_type1

DRAW_CANDLES

2000-2014, MetaQuotes Software Corp.

203

Elementos Bsicos da Linguagem


#property indicator_width1

#property indicator_label1

"C open;C high;C low;C close"

2000-2014, MetaQuotes Software Corp.

204

Elementos Bsicos da Linguagem

Incluindo Arquivos (#include)


A linha de comando #include pode ser colocada em qualquer lugar no programa, mas geralmente todas
as incluses so colocadas no comeo do cdigo fonte. Formato da chamada:
#include <file_name>
#include "file_name"

Exemplos:
#include <WinUser32.mqh>
#include "mylib.mqh"

O preprocessador substitui a linha #include <file_name> com o contedo do arquivo WinUser32.mqh.


Colchetes angulares ("<>") indicam que o arquivo WinUser32.mqh file ser obtido a partir do diretrio
padro (geralmente terminal_installation_directory\MQL5\Include). O diretrio corrente no visvel.
Se o nome do arquivo colocado entre aspas, a procura feita no diretrio corrente (que contm o
arquivo fonte principal). O diretrio padro no visvel.
Tambm Veja
Standard Library, Importando Funes

2000-2014, MetaQuotes Software Corp.

205

Elementos Bsicos da Linguagem

Importando Funes (#import)


Funes so importadas a partir de mdulos MQL5 compilados (arquivos *. ex5) e a partir de mdulos
do sistema operacional (arquivos *. dll). O nome do mdulo especificado na diretiva #import. Para o
compilador ser capaz de corretamente formular a chamada da funo importada e organizar
apropriadamente a transmisso de parmetros, a descrio completa das funes necessria.
Descries de funo seguem imediatamente a diretiva #import "nome do mdulo". Um novo comando
#import (pode ser sem parmetros) completa o bloco de descries de funes importadas.
#import "file_name"
func1 define;
func2 define;
...
funcN define;
#import

Funes importadas podem ter qualquer nome. Funes que tm o mesmo nome, mas de mdulos
diferentes, podem ser importadas ao mesmo tempo. Funes importadas podem ter nomes que
coincidem com os nomes de funes internas. A operao de resoluo de escope define quais as
funes que devem ser chamadas.
A ordem de busca para um arquivo especificado aps a palavra-chave #import descrita em Chamada
de Funes Importadas.
J que funes importadas esto do lado de fora do mdulo compilado, o compilador no pode
verificar a validade dos parmetros passados. Portanto, para evitar erros em tempo de execuo,
deve-se descrever com preciso a composio e ordem dos parmetros passados para funes
importadas. Parmetros passados para funes importadas (tanto de EX5, como de mdulo DLL)
podem ter valores default.
O que se segue no pode ser usado para parmetros em funes importadas:
pointers (*);
links de objetos que contenham arrays dinmicos e/ou ponteiros.
Classes, arrays de string ou objetos complexos que contm strings e/ou arrays dinmicos de qualquer
tipo no podem ser passados como um parmetro de funes importadas a partir de DLL.
Exemplos:
#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);

2000-2014, MetaQuotes Software Corp.

206

Elementos Bsicos da Linguagem


bool

SetArrayItemValue(double &arr[],int,int,double);

double GetRatesItemValue(double &rates[][6],int,int,int);


#import

Para importar funes durante a execuo de um programa mql5, vinculao inicial (early binding)
usada. Isso significa que a biblioteca (library) carregada durante a carga de um programa usando seu
programa ex5.
No recomendado que se use nomes com qualificao completa para carregar mdulo, como Drive:
\Directory\FileName.Ext. Bibiliotecas MQ5 so carregados a partir da pasta terminal_dir\MQL5
\Libraries.
Tambm Veja
Incluindo Arquivos

2000-2014, MetaQuotes Software Corp.

207

Elementos Bsicos da Linguagem

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 identifier has already been defined for the preprocessor
#endif
#ifndef identifier

// the code located here is compiled if identifier is not currently defined by #define preproces
#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()
{

2000-2014, MetaQuotes Software Corp.

208

Elementos Bsicos da Linguagem


#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
}

2000-2014, MetaQuotes Software Corp.

209

Elementos Bsicos da Linguagem

Programao Orientada a Objetos


Programao orientada a objetos (OOP) programar basicamente focada em dados, enquanto dados e
comportamento esto inseparavelmente ligados. Juntos, dados e comportamento, constituem uma
classe, enquanto objetos so instncias de classe.
Os componentes da abordagem orientada a objetos so:
Encapsulamento e extensibilidade de tipo
Herana
Polimorfismo
Sobrecarga
Funes virtuais
OOP considera computao como modelagem de comportamento. O item modelado o objeto
representado pelas abstraes computacionais. Suponha que ns quisssemos escrever "Tetris", um
jogo bem conhecido. Para fazer isso, ns devemos aprender como modelar a aparncia de uma forma
aleatrias compostas de quatro quadrados ligados nas bordas. Tambm ns precisaramos regular a
velocidade de queda das figuras e definir operaes de rotao e deslocamento. A movimentao das
formas na tela limitada pelas bordas da pea, este requerimento tambm deve ser modelado. Alm
disso, linhas preenchidas de cubos devem ser destrudas e pontos conseguidos devem ser contados.
Assim, este jogo de fcil entendimento requer a criao de vrios modelos - modelo de forma, modelo
de pea, modelo de movimentao da figura, e assim por diante. Todas estes modelos so abstraes,
representadas por clculos no computador. Para descrever estes modelos, o conceito de Tipo de Dados
Abstratos, ADT (tipo de dados complexos), usado. Estritamente falando, o modelo do movimento
das "formas" no jogo no um tipo de dado, mas um conjunto de operaes sobre o tipo de dado
"forma", usando as restries do tipo de dado "pea".
Objetos so variveis de classe. A programao orientada a objetos permite a voc facilmente criar e
usar ADT. A programao orientada a objetos usa o mecanismo de herana. O benefcio da herana
est no fato de permitir obter tipos derivados a partir de tipos de dados j definidos por um usurio.
Por exemplo, para criar formas Tetris, conveniente primeiro criar uma classe base Forma. As outras
classes representando todos os sete possveis tipos de forma podem ser derivadas desta base. O
comportamento das figuras definido na classe base, enquanto que a implementao do
comportamento de cada figura separada definida em classes derivadas.
Em OOP, objetos so responsveis por seu comportamento. O desenvolvedor de ADT deve incluir um
cdigo para descrever qualquer comportamento que normalmente seria esperado dos objetos
correspondentes. O fato do objeto ser responsvel por seu comportamento, simplifica enormemente a
tarefa de programao deste objeto pelo usurio.
Se quisssemos desenhar uma figura na tela, precisaramos conhecer onde o centro desta figura
estaria e como desenh-la. Se um forma separada sabe como se desenhar, o programador deve enviar
uma mensagem de "desenhe" ao usar tal forma.
A linguagem MQL5 semelhante ao C++, e ela tambm tem mecanismos de encapsulamento para a
implementao de ADT. Por um lado, o encapsulamento esconde os detalhes internos da
implementao de um tipo particular, e por outro lado, torna acessvel externamente funes que
podem influenciar objetos deste tipo. Detalhes de implementao podem ser inacessveis a um
programa que usa este tipo.

2000-2014, MetaQuotes Software Corp.

210

Elementos Bsicos da Linguagem

O conceito de OOP tem um conjunto de conceitos relacionados, incluindo o seguinte:


Simulao de aes do mundo real
Tipos de dados definidos pelo usurio
Ocultamente de detalhes de implementao
Possibilidade de reutilizao de cdigo atravs de herana
Interpretao de chamadas de funo durante execuo
Alguns destes conceitos so bastante vagos, alguns so abstratos, outros so gerais.

2000-2014, MetaQuotes Software Corp.

211

Elementos Bsicos da Linguagem

Encapsulamento e Extensibilidade de Tipo


OOP uma abordagem balanceada para escrever software. Dados e comportamento so empacotados
juntos. Este encapsulamento cria tipos de dados definidos pelo usurio, estendendo os tipos de dados
da linguagem e interagindo com eles. Extensibilidade de tipos uma oportunidade de adicionar
linguagem tipos de dados definidos pelo usurio, que so tambm fceis de usar, tanto quanto os
tipos bsicos.
Um tipo de dado abstrato (ADT), por exemplo, uma string, uma descrio do ideal, bem conhecido
tipo de comportamento.
O usurio de string sabe que as operaes de string, tais como concatenao ou impresso, tm um
certo comportamento. Operaes de concatenao e impresso so chamados mtodos.
Uma certa implementao de ADT pode ter algumas restries, por exemplo, strings podem ser
limitados no comprimento. Estas limitaes afetam o comportamento aberto a todos. Ao mesmo
tempo, detalhes da implementao privada ou interna no afetam diretamente a jeito como o usurio
v o objeto. Por exemplo, a string freqentemente implementado como um array, enquanto o
endereo de base interno deste array e seu nome no so essenciais para o usurio.
Encapsulamento a habilidade de ocultar os detalhes de implementao quando a interface aberta
para o tipo definido pelo usurio fornecida. Em MQL5, assim como em in C++, definies de classe e
estrutura (class e struct) so usadas para as provises de encapsulamento em combinao com as
palavras-chave de acesso private, protected e public.
A palavra-chave public mostra que o acesso aos membros que ficam depois dela, aberto sem
restries. Sem esta palavra-chave, membros de classe ficariam bloqueados por default. Membros
privados so acessveis somente por funes membro de sua prpria classe.
Funes de classe protegidas so disponveis para funes de classe no apenas em sua classe, mas
tambm em suas classes herdeiras. Funes de classe publicas so disponveis para qualquer funo
dentro do escopo da declarao da classe. A proteo torna possvel ocultar parte da implementao
da classe, evitando assim mudanas inesperadas na estrutura dos dados. Restrio de acesso ou
ocultamento de dados uma caracterstica da programao orientada a objetos.
Geralmente, funes de classe so protegidas e declaradas com o modificador protected, a leitura e a
escrita de valores so realizadas por meio do uso de mtodos especiais chamados set e get que so
definidos por meio do modificador de acesso public.

Exemplo:
class CPerson
{
protected:
string

first_name;

// nome

public:
void

SetName(string n){m_name=n;}// atribui o nome

string

GetName(){return (m_name);} // retorna o nome

};

2000-2014, MetaQuotes Software Corp.

212

Elementos Bsicos da Linguagem


Esta abordagem oferece vrias vantagens. Primeiro, por meio do nome da funo ns podemos
entender o que ela faz - define (sets) ou obtm (gets) o valor de um membro de classe. Segundo,
talvez no futuro precisemos modificar o tipo da varivel m_name na classe CPerson ou em qualquer de
suas classes derivadas.
Neste caso, necessitaramos apenas alterar a implementao das funes SetName() e GetName(),
enquanto que objetos da classe CPerson estariam disponveis para uso em um programa sem nenhuma
alterao de cdigo, porque o usurio nem ao menos saberia que o tipo de dado do m_name foi
alterado.
Exemplo:
struct Name
{
string

first_name;

// nome

string

last_name;

// ltimo nome

m_name;

// nome

};
class CPerson
{
protected:
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);

2000-2014, MetaQuotes Software Corp.

213

Elementos Bsicos da Linguagem


}

Tambm Veja
Tipos de Dados

2000-2014, MetaQuotes Software Corp.

214

Elementos Bsicos da Linguagem

Herana
O principal caracterstica da OOP o incentivo reutilizao de cdigo atravs de herana. Uma nova
classe feita a partir de uma j existente, que chamada de classe base. A classe derivada usa os
membros da classe base, mas tambm pode modificar e complement-los.
Muitos tipos so variaes de tipos j existentes. muitas vezes tedioso desenvolver um novo cdigo
para cada um deles. Alm disso, um novo cdigo implica em novos erros. A classe derivada herda a
descrio da classe base, assim qualquer re-desenvolvimento e re-teste de cdigo desnecessrio. As
relaes de herana so hierrquicas.
Hierarquia um mtodo que permite copiar os elementos em toda a sua diversidade e complexidade.
Ela introduz a classificao de objetos. Por exemplo, a tabela peridica de elementos tem gases. Eles
possuem propriedades inerentes a todos os elementos peridicos.
Gases inertes constituem a prxima importante subclasse. A hierarquia que o gs inerte, como
rgon, um gs, e um gs, por sua vez, parte do sistema. Tal hierarquia permite interpretar o
comportamento dos gases inertes com facilidade. Sabemos que seus tomos contm prtons e
eltrons, o que verdade para todos os outros elementos.
Sabemos que eles esto no estado gasoso temperatura ambiente, como todos os gases. Sabemos
que nenhum gs da subclasse de gases inertes entra usualmente em reaes qumicas com outros
elementos, e isso uma propriedade de todos os gases inertes.
Considere um exemplo de herana de formas geomtricas. Para descrever a completa variedade de
formas simples (crculos, tringulos, retngulos, quadrados, etc.), a melhor forma criar uma classe
base (ADT), que o predecessor de todas as classes derivadas.
Vamos criar uma classe base CShape, que contm apenas a maioria dos membros comuns que
descrevem a forma. Estes membros descrevem propriedades que so caractersticas de qualquer
forma - o tipo da forma e as coordenadas do ponto de ancoragem principal.
Exemplo:
//--- A classe base da forma (Shape)
class CShape
{
protected:
int

m_type;

// Tipo de Forma

int

m_xpos;

// X - coordenada do ponto base

int

m_ypos;

// Y - coordenada do ponto base

public:
CShape(){m_type=0; m_xpos=0; m_ypos=0;} // construtor
void

SetXPos(int x){m_xpos=x;} // define X

void

SetYPos(int y){m_ypos=y;} // define Y

};

Sem seguida, criamos novas classes derivadas da classe base, nas quais adicionaremos campos
necessrios, cada um especificando uma certa classe. Para a forma Crculo, necessrio adicionar um
membro que contm o valor do raio. A forma Quadrado caracterizada pelo valor do lado. Portanto,
classes derivadas, herdadas da classe base CShape, sero declaradas como se segue:

2000-2014, MetaQuotes Software Corp.

215

Elementos Bsicos da Linguagem


//--- A classe derivada crculo (Circle)
class CCircle : public CShape
{

// Depois de um dois pontos, ns definimos a classe base


// a partir da qual a herana feita

private:
int

m_radius;

// raio do crculo

public:
CCircle(){m_type=1;}// construtor, tipo 1
};

Para a classe do Quadrado, a declarao semelhante:


//--- a classe derivada quadrado (Square)
class CSquare : public CShape
{

// Depois de um dois pontos, ns definimos a classe base


// a partir da qual a herana feita

private:
int

m_square_side;

// lado do quadrado

public:
CSquare(){m_type=2;} // construtor, tipo 2
};

Deve-se notar que enquanto um objeto criado, o construtor da classe base chamado primeiro, e
ento o construtor da classe derivada chamado. Quando um objeto destrudo, primeiro o destrutor
da classe derivada chamado, e ento o destrutor da classe base chamado.
Assim, ao declarar a maioria do membros gerais na classe base, podemos acrescentar membros
adicionais nas classes derivadas que especificam uma classe particular. A herana permite criar
bibliotecas de cdigo poderosas que podem ser reutilizadas muitas vezes.
A sintaxe para criar uma classe derivada a partir de uma classe j existente a seguinte:
class class_name :
(public | protected | private) opt

base_class_name

declarao de membros de classe


};

Um dos aspectos da classe derivada a visibilidade (abertura) de seus sucessores membros


(herdeiros). As palavras-chave public, protected e private so usadas para indicar quo disponveis os
membros da classe base estaro disponveis para a classe derivada. A palavra-chave public aps um
dois pontos no cabealho de uma classe derivada indica que os membros protegidos e pblicos da
classe base CShape devem ser herdados como membros protegidos e pblicos da classe derivada
CCircle.
Os membros privados da classe base no so disponveis para a classe derivada. A herana pblica
tambm significa que classes derivadas (CCircle e CSquare) so CShapes. Isto , o Quadrado
(CSquare) uma Forma (CShape), mas a Forma no necessariamente tem que ser um Quadrado.
A classe derivada uma modificao da classe base, ele herda os membros protegidos e pblicos da

2000-2014, MetaQuotes Software Corp.

216

Elementos Bsicos da Linguagem


classe base. Os construtores e destrutores da classe base no podem ser herdados. Alm de membros
da classe base, novos membros so adicionados em uma classe derivada.
A classe derivada pode incluir a implementao de funes membro, diferentes da classe base. Isso
no tem nada a ver com uma sobrecarga, quando o significado de um mesmo nome de uma funo
pode ser diferente para diferentes assinaturas.
Em herana protegida, membros pblicos e protegidos da classe base tornam-se membros protegidos
da classe derivada. Em herana privada, os membros pblicos e protegidos da classe base tornam-se
membros privados da classe derivada.
Em herana protegida e privada, a relao "o objeto de uma classe derivada objeto da classe base"
no verdade. Os tipos protegido e privado de herana so raros, e cada um deles precisam ser
usados com cautela.
Deve ser entendido que o tipo de herana (public, protected ou private) no afeta a forma de acessar
os membros de classes base na hierarquia de herana a partir de uma classe derivada. Para
qualquer tipo de herana, somente membros da classe base declarados com especificadores de acesso
public e protected estaro disponveis fora das classes derivadas. Vamos verificar isso no seguinte
exemplo:
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//+------------------------------------------------------------------+
//| Exemplo de classe com alguns tipos de acesso

//+------------------------------------------------------------------+
class CBaseClass
{
private:
int
protected:
int
public:

//--- O membro privado no disponvel a partir de classe derivada


m_member;

//--- O mtodo protegido disponvel a partir da classe base e suas classes d


Member(){return(m_member);}
// O construtor de classe disponvel para todos os membros
CBaseClass(){m_member=5;return;};

private:
void

//--- Um mtodo particular para atribuir um valor para m_member


Member(int value) { m_member=value;};

};
//+------------------------------------------------------------------+
//| Classe derivada com erros

//+------------------------------------------------------------------+

class CDerived: public CBaseClass // especificao da herena pblica pode ser omitido, uma vez que
{
public:
void Func() // Na classe derivada, defina uma funo com chamadas aos membros da classe base
{
//--- Uma tentativa de alterar um membro privado da classe base
m_member=0;

// Erro, o membro privado da classe base no disponvel

Member(0);

// Erro, o mtodo privado da classe base no disponvel em classes deriv

2000-2014, MetaQuotes Software Corp.

217

Elementos Bsicos da Linguagem


//--- Leitura do membro da classe base
Print(m_member);

// Erro, o membro privado da classe base no disponvel

Print(Member());

// Sem erro, mtodo protegido acessvel a partir da classe base e suas c

}
};

No exemplo acima, CBaseClass tem apenas um mtodo pblico - o construtor. Construtores so


chamados automaticamente na criao de um objeto de classe. Portanto, o membro privado
m_member e o mtodo protegido Member() no podem ser chamados do lado de fora. Mas no caso de
herana pblica, o membro Member() da classe base estar disponvel a partir de classes derivadas.
No caso de herana protegida, todos os membros da classe base com acessos pblico e protegido
tornam-se protegidos. Isso significa que membros de dados e mtodos pblicos da classe base, com
herana protegida eles passam a ser disponveis somente a partir de classes derivadas e de suas
derivadas seguintes.
//+------------------------------------------------------------------+
//| Exemplo de classe com alguns tipos de acesso

//+------------------------------------------------------------------+
class CBaseMathClass
{
private:
double
public:

//--- O membro privado no disponvel a partir de classe derivada


m_Pi;
//--- Obtendo e definindo um valor para m_Pi

void

SetPI(double v){m_Pi=v;return;};

double

GetPI(){return m_Pi;};

public:

// O construtor de classe disponvel para todos os membros


CBaseMathClass() {SetPI(3.14);

PrintFormat("%s",__FUNCTION__);};

};
//+------------------------------------------------------------------+
//| Uma classe derivada, em que m_Pi no pode ser modificada

//+------------------------------------------------------------------+
class CProtectedChildClass: protected CBaseMathClass // Herana protegida
{
private:
double
public:

m_radius;
//--- Mtodos pblicos na classe derivada

void

SetRadius(double r){m_radius=r; return;};

double

GetCircleLength(){return GetPI()*m_radius;};

};
//+------------------------------------------------------------------+
//| Funo de inicializao de script

//+------------------------------------------------------------------+
void OnStart()
{
//--- Ao criar uma classe derivada, o construtor da classe base ser chamada automaticamente
CProtectedChildClass pt;
//--- Especifica o raio
pt.SetRadius(10);
PrintFormat("Length=%G",pt.GetCircleLength());

2000-2014, MetaQuotes Software Corp.

218

Elementos Bsicos da Linguagem

//--- Se comentar a string abaixo, obteremos um erro na etapa de compilao, j que SetPi() agora
// pt.SetPI(3);
//--- Agora declare um varivel da classe base e tente definir a constante Pi igual a 10
CBaseMathClass bc;
bc.SetPI(10);
//--- Aqui est o resultado
PrintFormat("bc.GetPI()=%G",bc.GetPI());
}

O exemplo mostra que os mtodos SetPI() e GetPI() na classe base CBaseMathClasse esto abertos e
disponveis para chamadas a partir de qualquer lugar do programa. Mas ao mesmo tempo, para
CProtectedChildClasse, que derivada dela, estes mtodos podem ser chamados somente a partir de
mtodos da classe CProtectedChildClass ou suas classes derivadas.
No caso de herana privada, todos os membros da classe base com acesso pblico e protegido tornamse privados, e cham-los torn-se impossvel em herana posterior.
MQL5 no tem herana mltipla.
Tambm Veja
Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

219

Elementos Bsicos da Linguagem

Polimorfismo
Polimorfismo uma oportunidade para diferentes classes de objetos, relacionadas atravs de herana,
de responder de vrias formas quando o mesmo elemento de funo for chamado. Isso ajuda a criar
um mecanismo universal descrevendo o comportamento no apenas da classe base, mas tambm das
classes descendentes.
Vamos continuar a desenvolver uma classe base CShape, e definir uma funo membro GetArea(),
destinado a calcular a rea de uma forma. Em todas as classes descendentes, produzidas por herana
a partir da classe base, ns redefinimos esta funo de acordo com as regras de clculo de rea de
uma forma (shape) particular.
Para um quadrado (classe CSquare), a rea calculada atravs de seu lado, para um crculo (classe
CCircle), a rea expressa atravs de seu raio, etc. Ns podemos criar um array para armazenas
objetos do tipo CShape, no qual tanto objetos da classe base como todos os objetos de classes
descendentes podem ser armazenados. Mais adiante, podemos chamar a mesma funo para cada
elemento do array.
Exemplo:
//--- Classe Base
class CShape
{
protected:
int

m_type;

// tipo da forma

int

m_xpos;

// X - coordenada do ponto base

int

m_ypos;

// Y - coordenada do ponto de base

void

CShape(){m_type=0;};

// construtor, tipo=0

int

GetType(){return(m_type);};// retorna o tipo da forma

public:

virtual
double

GetArea(){return (0); }// retorna a rea da forma

};

Agora, todas as classes derivadas tm uma funo membro getArea(), que retorna o valor zero. A
implementao desta funo em cada descendente no ser a mesma.
//--- A classe derivada Circle
class CCircle : public CShape
{

// Depois do dois pontos definimos a classe base


// a partir do qual a herana feita

private:
double

m_radius;

// raio do crculo

void

CCircle(){m_type=1;};

// construtor, tipo=1

void

SetRadius(double r){m_radius=r;};

public:

virtual double GetArea(){return (3.14*m_radius*m_radius);}// rea do crculo


};

Para a classe Square, a declarao a mesma:


//--- A classe derivada Square

2000-2014, MetaQuotes Software Corp.

220

Elementos Bsicos da Linguagem


class CSquare : public CShape
{

// Depois do dois pontos definimos a classe base


// a partir do qual a herana feita

private:
double

m_square_side;

// lado do quadrado

public:
void

CSquare(){m_type=2;}; // construtor, tipo=2

void

SetSide(double s){m_square_side=s;};

virtual double

GetArea(){return (m_square_side*m_square_side);}// rea quadrada

};

Para calcular a rea do quadrado e crculo, precisamos dos correspondentes valores de m_radius e
m_square_side, por isso ns adicionamos as funes SetRadius() e SetSide() na declarao da
correspondente classe.
Assumimos que objetos de diferentes tipos (CCircle e CSquare) derivados do tipo base CShape so
usados em nosso programa. Polimorfismo permite criar um array de objetos da classe base CShape,
mas ao declarar este array, estes objetos so desconhecidos e o tipo deles indefinido.
A deciso sobre que tipo de objeto estar contido em cada elemento do array ser tomada
diretamente durante a execuo do programa. Isso envolve a criao dinmica de objetos das classes
apropriadas, e portanto a necessidade do uso de ponteiros de objeto ao invs de objetos.
O operador new usado para criao dinmica de objetos. Cada um destes objetos devem ser
individualmente e explicitamente excludos usando o operador delete. Portanto declararemos um array
de ponteiros do tipo CShape, e criaremos um objeto de um tipo apropriado para cada elemento (new
Class_Name), como mostrado no exemplo de script seguinte:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Declararmos um array de ponteiros de objeto do tipo base
CShape *shapes[5];

// Um array de ponteiros para objetos CShape

//--- Aqui preenchemos o array com objetos derivados


//--- Declaramos um ponteiro para o objeto de tipo CCircle
CCircle *circle=new CCircle();
//--- Definimos propriedades do objeto usando o ponteiro do crculo
circle.SetRadius(2.5);
//--- Colocamos o valor do ponteiro em shapes[0]
shapes[0]=circle;
//--- Criamos um outro objeto CCircle e escrevemos seu ponteiro em shapes[1]
circle=new CCircle();
shapes[1]=circle;
circle.SetRadius(5);
//--- Aqui ns intencionalmente "esquecemos" de definir um valor para shapes[2]
//circle=new CCircle();

2000-2014, MetaQuotes Software Corp.

221

Elementos Bsicos da Linguagem


//circle.SetRadius(10);
//shapes[2]=circle;
//--- Definimos NULL para o elemento que no usado
shapes[2]=NULL;
//--- Criamos um objeto CSquare e escrevemos seu ponteiro em shapes[3]
CSquare *square=new CSquare();
square.SetSide(5);
shapes[3]=square;
//--- Criamos um objeto CSquare e escrevemos seu ponteiro em shapes[4]
square=new CSquare();
square.SetSide(10);
shapes[4]=square;
//--- Temos um array de ponteiros, obtemos seu tamanho
int total=ArraySize(shapes);
//--- Passamos em um loop atravs de todos os ponteiros no array
for(int i=0; i<5;i++)
{
//--- Se o ponteiro no ndice especificado vlido
if(CheckPointer(shapes[i])!=POINTER_INVALID)
{
//--- Imprimi o tipo e rea da forma
PrintFormat("O objeto do tipo %d tem a rea %G",
shapes[i].GetType(),
shapes[i].GetArea());
}
//--- Se o ponteiro tem o tipo POINTER_INVALID
else
{
//--- Notificamos um erro
PrintFormat("Objeto shapes[%d] no foi inicializado! Seu ponteiro pe %s",
i,EnumToString(CheckPointer(shapes[i])));
}
}
//--- Devemos excluir todos os objetos criados dinamicamente
for(int i=0;i<total;i++)
{
//--- Ns podemos excluir somente objetos com ponteiros do tipo POINTER_DYNAMIC
if(CheckPointer(shapes[i])==POINTER_DYNAMIC)
{
//--- Notificao de excluso
PrintFormat("Excluindo shapes[%d]",i);
//--- Exclumos um objeto por meio de seu ponteiro
delete shapes[i];
}

2000-2014, MetaQuotes Software Corp.

222

Elementos Bsicos da Linguagem


}
}

Favor notar que ao excluir um objeto usando o operador delete, o tipo de seu ponteiro deve ser
verificado. Somente objetos com ponteiro do tipo POINTER_DYNAMIC podem ser excludos usando
delete. Para ponteiros de outros tipos, um erro ser retornado.
Alm da redefinio de funes durante herana, o polimorfismo tambm inclui a implementao de
uma mesma funo com diferentes conjuntos de parmetros dentro de uma classe. Isso significa que a
classe pode ter vrias funes com o mesmo nome, mas com um tipo e/ou conjunto de parmetros
diferentes. Neste caso, o polimorfismo implementado atravs de sobrecarga de funo.
Tambm Veja
Standard Library

2000-2014, MetaQuotes Software Corp.

223

Elementos Bsicos da Linguagem

Sobrecarga (Overload)
Dentro de uma classe possvel definir dois ou mais mtodos que usam o mesmo nome, mas tem
nmero diferente de parmetros. Quando isso ocorre, estes mtodos so chamados de
sobrecarregados e tal processo referido como sobrecarga de mtodo.
Sobrecarga de mtodo uma forma de realizao de polimorfismo. Sobrecarga de mtodos realizado
em concordncia com as mesmas regras da sobrecarga de funo.
Se a funo chamada no tem correspondncia exata, o compilador busca por uma funo adequada
em trs nveis seqencialmente:
1. busca dentre os mtodos da classe;
2. busca dentre os mtodos da classe base, consistentemente a partir do ancestral mais prximo at o
mais distante.
3. busca entre outras funes.
Se no houver correspondncia exata em todos os nveis, mas vrias funes adequadas em
diferentes nveis foram encontradas, a funo encontrada no menor nvel usada. Dentro de um nvel,
no pode haver mais de uma funo adequada.
Tambm Veja
Recarregando Funes

2000-2014, MetaQuotes Software Corp.

224

Elementos Bsicos da Linguagem

Funes Virtuais
A palavra-chave virtual o especificador de funo que fornece um mecanismo para selecionar
dinamicamente em tempo de execuo uma funo-membro apropriada entre as funes de classes
base e derivadas. Estrutura no podem ter funes virtuais. Pode ser usado para alterar as
declaraes de funes-membro somente.
A funo virtual, assim como uma funo comum, deve ter um corpo executvel. Ao ser chamada, sua
semntica a mesma que das outras funes.
Uma funo virtual pode ser sobreposta (overridden) em um classe derivada. A escolha de qual
definio de funo deve ser chamada para uma funo virtual feita dinamicamente (em tempo de
execuo). Um caso tpico quando uma classe base contm uma funo virtual, e as classes
derivadas tm sua prpria verso desta funo.
O ponteiro para a classe base pode indicar tanto um objeto da classe base quanto um objeto de uma
classe derivada. A escolha da funo-membro a ser chamada ser executada em tempo de execuo e
depender do tipo do objeto, no do tipo do ponteiro. Se no houver nenhum membro de um tipo
derivado, a funo virtual da classe base usada por default.
Destrutores so sempre virtuais, independentemente se elas esto declaradas com a palavra-chave
virtual ou no.
Vamos considerar o uso de funes virtuais no exemplo do MT5_Tetris.mq5. A classe base
CTetrisShape com a funo virtual de desenhar definjida na incluso do arquivo
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);

2000-2014, MetaQuotes Software Corp.

225

Elementos Bsicos da Linguagem


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[]);

};

Mais adiante, para cada classe derivada, esta funo implementada de acordo com as caractersticas
da classe descendente. Por exemplo, a primeira forma CTetrisShape1 tem sua implementao prpria
da funo Draw():
class CTetrisShape1 : public CTetrisShape
{
public:
//--- desenhando formato
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);
}
}
}
}

A forma Quadrado descrita por meio da classe CTetrisShape6 e tem sua implementao prpria do
mtodo Draw():
class CTetrisShape6 : public CTetrisShape
{

2000-2014, MetaQuotes Software Corp.

226

Elementos Bsicos da Linguagem


public:
//--- desenhando formato
virtual void

Draw()

{
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);
}
}
};

Dependendo da classe da qual o objeto criado pertence, chamada a funo virtual desta ou daquela
classe derivada.
void CTetrisField::NewShape()
{
//--- criando uma dos 7 possveis formas aleatoriamente
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;
}
//--- desenhar
m_shape.Draw();
//--}

Tambm Veja
Standard Library

2000-2014, MetaQuotes Software Corp.

227

Elementos Bsicos da Linguagem

Membros Estticos de uma Classe/Estrutura


Membros Estticos
Os membros de uma classe podem ser declarados usando o modificador de classe de armazenamento
static. Esses membros de dados so compartilhados por todos as instncias desta classe e so
armazenados em um lugar. Membros de dados no estticos so criados para cada varivel de objeto
de classe.
A incapacidade de declarar membros estticos de uma classe teria levado a necessidade de declarar
estes dados no nvel global do programa. Isso quebraria a relao entre os dados e a classe deles, e
no seria consistente com o paradigma bsico da OOP - juntar dados e mtodos para manipul-los em
uma classe. O membro esttico permite que dados de classe no especficos a uma particular instncia
existam no escopo da classe.
Desde que um membro de classe esttica no dependa de uma particular instncia, a referncia a ele
como se segue:
class_name::variable

onde class_name o nome da classe, e variable o nome do membro da classe.


Como se v, para acessar o membro esttico de uma classe, o operador de resoluo de contexto ::
usado. Ao acessar um membro esttico de dentro de mtodos da classe, o operador de contexto
opcional.
No preciso inicializar membros de classe esttica explicitamente no nvel global, eles sero
inicializados automaticamente quando iniciar o programa. O membro esttico do tipos inteiro e real
so automaticamente inicializados com zero, para o tipo string atribudo NULL. Para membros
estticos de tipos complexos o construtor default chamado; se no existir nenhum, ento um
construtor com parmetros default chamado.
Os membros estticos de uma classe podem ser explicitamente inicializados com um valor desejado.
Para fazer isso, deve ser definido e inicializado no nvel global. Por exemplo, temos a classe CParser
usado para separar o texto, e precisamos contar o nmero total de palavras e caracteres processados.
Ns s precisamos declarar os membros de classe necessrios como estticos e inicializ-los no nvel
global. Ento todas as instncias da classe usaro um contador comum para palavras e caracteres.
//+------------------------------------------------------------------+
//| Classe "Analisador de Texto"

//+------------------------------------------------------------------+
class CParser
{
public:
static int

s_words;

static int

s_symbols;

//--- Construtor e destrutor


Parser(void);
~Parser(void){};
};
...

2000-2014, MetaQuotes Software Corp.

228

Elementos Bsicos da Linguagem


//--- Inicializao de membros estticos da classe Parser no nvel global
int CParser::s_words=0;
int CParser::s_symbols=0;

Um membro de classe esttico pode ser declarado com a palavra-chave const. Tais constantes
estticas devem ser inicializadas no nvel global com a palavra-chave const:
//+------------------------------------------------------------------+
//| Classe "Stack" para armazenar dados processados

//+------------------------------------------------------------------+
class CStack
{
public:
CStack(void);
~CStack(void){};
...
private:
static const int

s_max_length; // Capacidade mxima da pilha

};
//--- Inicializao da constante esttica da classe CStack
const int CStack::s_max_length=1000;

Ponteiro this
A palavra-chave this denota um ponteiro implicitamente declarado para si mesmo para uma instncia
especfica da classe, no contexto do qual o mtodo executado. Pode ser usado somente em mtodos
no estticos da classe. O ponteiro this um membro no esttico implcito de qualquer classe.
Em funes estticas voc pode acessar somente membros/mtodos estticos de uma classe.

Mtodos Estticos
Em MQL5, funes membro do tipo esttico podem ser usadas. O modificador static deve preceder o
tipo do retorno de uma funo na declarao dentro de uma classe.
class CStack
{
public:
//--- Construtor e destrutor
CStack(void){};
~CStack(void){};
//--- Capacidade mxima da pilha
static int

Capacity();

private:
int

m_length;

static const int

s_max_length; // Capacidade mxima da pilha

// O nmero de elementos na pilha

};
//+------------------------------------------------------------------+
//| Retorna o nmero mximo de elementos armazenados na pilha

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

229

Elementos Bsicos da Linguagem


int CStack::Capacity(void)
{
return(s_max_length);
}
//--- Inicializao da constante esttica da classe CStack
const int CStack::s_max_length=1000;
//+------------------------------------------------------------------+
//| 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 pre
Print("CStack.s_max_length=",CStack::Capacity());
}

Um mtodo com o modificador const chamado de constante e no pode alterar membros implcitos
de sua classe. A declarao de funes constantes de uma classe e parmetros constantes chamado
de controle const-correo. Atravs deste controle pode-se assegurar que o compilador garantir a
consistncia de valores de objetos e retornar um erro durante a compilao se existir algo errado.
O modificador const colocado aps a lista de argumentos dentro de uma declarao de classe. A
definio do lado de fora de uma classe deve tambm incluir o modificador const:
//+------------------------------------------------------------------+
//| Class "Retngulo"

//+------------------------------------------------------------------+
class CRectangle
{
private:
double

m_width;

// Largura

double

m_height;

// Altura

public:
//--- Construtor e destrutor
CRectangle(void):m_width(0),m_height(0){};
CRectangle(const double w,const double h):m_width(w),m_height(h){};
~CRectangle(void){};
//--- Calculando a rea
double

Square(void) const;

static double

Square(const double w,const double h);// { return(w*h); }

};
//+------------------------------------------------------------------+
//| Retorna a rea do objeto "Retngulo"

//+------------------------------------------------------------------+
double CRectangle::Square(void) const
{
return(Square(m_width,m_height));

2000-2014, MetaQuotes Software Corp.

230

Elementos Bsicos da Linguagem


}
//+------------------------------------------------------------------+
//| Retorna o produto de duas variveis

//+------------------------------------------------------------------+
static double CRectangle::Square(const double w,const double h)
{
return(w*h);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Criar um retngulo reto com os lados iguais a 5 e 6
CRectangle rect(5,6);
//--- Procurar a rea do retngulo usando um mtodo constante
PrintFormat("rect.Square()=%.2f",rect.Square());
//--- Procurar o produto de nmeros usando o mtodo esttico da classe CRectangle
PrintFormat("CRectangle::Square(2.0,1.5)=%f",CRectangle::Square(2.0,1.5));
}

Um argumento adicional a favor do uso do controle de constncia o fato de que neste caso, o
compilador gera uma otimizao especial, por exemplo, coloca um objeto constante na memria de
somente-leitura.
Uma funo esttica no pode ser determinada com o modificador const, porque este modificar
garante a constncia dos membros de instncia quando chamar esta funo. Mas, como mencionado
acima, a funo esttica no pode acessar membros de classe no esttica.
Tambm Veja
Variveis Estticas, Variveis, Referncias. Modificador & e Palavra-chave this

2000-2014, MetaQuotes Software Corp.

231

Elementos Bsicos da Linguagem

Templates de Funo
Funes sobrecarregadas so normalmente usadas para realizar operaes similares em vrios tipos
de dados. ArraySize() um exemplo simples de tal funo em MQL5. Ela retorna o tamanho de
qualquer tipo de array. De fato, esta funo de sistema sobrecarregada e a implementao completa
de tal sobrecarga escondida dos desenvolvedores de aplicativos MQL5:
int ArraySize(
void& array[]

// array verificado

);

Isso significa que o compilador da linguagem MQL5 insere a implementao necessria para cada
chamada desta funo. Por exemplo, assim que implementado para arrays de tipo inteiro:
int ArraySize(
int& array[]

// array com elementos de tipo int

);

A funo ArraySize() pode ser exibida da seguinte forma para array de tipo MqlRates para trabalhar
com cotaes em formato de dados histricos:
int ArraySize(
MqlRates& array[]// array preenchido com valores de tipo MqlRates
);

Assim, muito conveniente usar a mesma funo para trabalhar com tipos diferentes. No entanto,
todo trabalho preliminar deve ser realizado - a funo necessria deve ser sobrecarregada para todos
os tipos de dados com os quais a funo deve trabalhar corretamente.
Existe uma soluo conveniente. Se operaes similares devem ser executadas para cada tipo de
dado, possvel usar templates de funo. Neste caso, um programador precisa escrever somente
uma descrio de template de funo. Ao descrever o template de tal forma, ns devemos especificar
somente alguns parmetros formais ao invs de alguns tipos de dados definidos com os quais a funo
deve trabalhar. O compilador automaticamente gerar vrias funes para o apropriado handling de
cada tipo baseado nos tipos de argumentos usados ao chamar a funo.
A definio de template de funo comea com a palavra-chave template seguida pela lista de
parmetros entre chaves angulares. Cada parmetro formal precedido pela palavra-chave typename.
Tipos de parmetros formais so tipos incorporados ou definidos pelo usurio. Eles so usados:
para especificar os tipos de argumentos da funo,
para especificar o tipo de valor de retorno da funo,
para declarar as variveis dentro da definio da funo

O nmero de parmetros de template no pode exceder oito. Cada parmetro formal na definio de
template deve aparecer na lista de parmetros da funo pelo menos uma vez. Cada nome de um
parmetro formal deve ser nico.
Abaixo est um exemplo de um template de funo para buscar do valor mais alto em um array de
qualquer tipo numrico (nmeros inteiros ou reais):

2000-2014, MetaQuotes Software Corp.

232

Elementos Bsicos da Linguagem


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);
}

Este template define a funo que encontra o valor mais alto no array passado e retorna este valor
como resultado. Lembre-se que a funo ArrayMaximum() construda em MQL5 retorna apenas o
ndice do valor mais alto que pode ser usado para encontrar o valor em si. Por exemplo:
//--- criar array
double array[];
int size=50;
ArrayResize(array,size);
//--- preenche com valores aleatrios
for(int i=0;i<size;i++)
{
array[i]=MathRand();
}
//--- encontra a posio do valor mais alto no array
int max_position=ArrayMaximum(array);
//--- agora, obtm o valor mais alto propriamente no array
double max=array[max_position];
//--- exibe o valor encontrado
Print("Valor max = ",max);

Assim, ns realizamos dois passos para obter obter o valor mais alto no array. Com o template de
funo ArrayMax(), ns podemos obter o resultado do tipo necessrio apenas passando o array de tipo
apropriado para esta funo. Isso significa que ao invs das ltimas duas linhas:
//--- encontra a posio do valor mais alto no array
int max_position=ArrayMaximum(array);
//--- agora, receber o valor mais alto propriamente no array
double max=array[max_position];

ns podemos usar somente uma linha, cujo resultado retornado tem o mesmo tipo que o array passado
para a funo:
//--- encontra o valor mais alto
double max=ArrayMax(array);

Neste caso, o tipo do resultado retornado pela funo ArrayMax() corresponder automaticamente ao
tipo do array.

2000-2014, MetaQuotes Software Corp.

233

Elementos Bsicos da Linguagem

Use a palavra chave typename para obter o tipo do argumento como uma string a fim de criar mtodos
de propsito geral para trabalhar com vrios tipos de dados. Vamos considerar um exemplo especfico
da funo que retorna tipo de dado como uma string:
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//|

//+------------------------------------------------------------------+
void OnStart()
{
//--CTrade trade;
double d_value=M_PI;
int i_value=INT_MAX;
Print("d_value: tipo=",GetTypeName(d_value), ",

valor=", d_value);

Print("i_value: tipo=",GetTypeName(i_value), ",

valor=", i_value);

Print("trade: tipo=",GetTypeName(trade));
//--}
//+------------------------------------------------------------------+
//| Tipo retornado como uma linha

//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
{
//--- retorna o tipo como uma linha
return(typename(T));
//--}

Templates de funo podem tambm serem usados para mtodos de classe, por exemplo:
class CFile
{
...
public:
...
template<typename T>
uint WriteStruct(T &data);
};
template<typename T>
uint CFile::WriteStruct(T &data)
{
...
return(FileWriteStruct(m_handle,data));
}

2000-2014, MetaQuotes Software Corp.

234

Elementos Bsicos da Linguagem

Os templates de funo no deve ser declarados com as palavras-chave export, virtual e #import.

2000-2014, MetaQuotes Software Corp.

235

Constantes Padro, Enumeradores e Estruturas

Constantes Padro, Enumeradores e Estruturas


Para simplificar a escrita do programa e tornar os textos do programa mais convenientes para
percepo, a linguagem MQL5 fornece constantes e enumeradores padres pr-definidos. Alm disso,
estruturas de servio so usados para armazenar informao.
Constantes padro so similares a macros e so do tipo int.
As constantes so agrupadas por seus propsitos:
Constantes de Grfico so usadas ao trabalhar com grficos de preos: abertura, navegao,
definio de parmetros;
Constantes de objetos so destinadas para processar objetos grficos que podem ser criados e
exibidos em grficos;
Constantes de indicadores so usadas para trabalhar com indicadores padres ou customizadas;
Constantes do estado do ambiente descrevem propriedades do programa MQL5, mostram
informaes sobre o terminal do cliente, instrumentos financeiros e conta corrente;
Constantes de negociao permite especificar uma variedade de informaes no decorrer da
negociao;
Constantes nomeadas so constantes da linguagem MQL5;
Estruturas de dados descrevem formatos de armazenamento de dados utilizados;
Cdigos de erros e avisos descrevem mensagens do compilador e respostas do servidor de
negociao a solicitaes de negociao;
Constantes de entrada/sada so projetados para trabalhar com funes de arquivo e exibir de
mensagens na tela atravs da funo MessageBox().

2000-2014, MetaQuotes Software Corp.

236

Constantes Padro, Enumeradores e Estruturas

Constantes de Grfico
As constantes descrevendo vrias propriedades de grficos so agrupadas na seguinte forma:
Tipos de eventos eventos que ocorrem quando se trabalha com grficos;
Janelas de tempo (timeframes) de grfico perodos incorporados padro;
Propriedades de grfico identificadores que so usados como parmetros de funes de grfico;
Constantes de posicionamento - valor de um parmetro da funo ChartNavigate();
Exibio de grficos - definio da aparncia do grfico.

2000-2014, MetaQuotes Software Corp.

237

Constantes Padro, Enumeradores e Estruturas

Tipos de Eventos de Grficos


Existem 9 tipos de eventos que podem ser processados usando a funo pr-definida OnChartEvent().
Para eventos customizados 65536 identificadores so fornecidos na faixa de CHARTEVENT_CUSTOM a
CHARTEVENT_CUSTOM_LAST inclusive. Para gerar um evento customizado, a funo
EventChartCustom() deve ser usada.
ENUM_CHART_EVENT
ID

Descrio

CHARTEVENT_KEYDOWN

Teclada

CHARTEVENT_MOUSE_MOVE

Movimento de mouse, cliques de mouse (se


CHART_EVENT_MOUSE_MOVE=true definido
para o grfico)

CHARTEVENT_OBJECT_CREATE

Objeto
grfico
criado
(se
CHART_EVENT_OBJECT_CREATE=true definido
para o grfico)

CHARTEVENT_OBJECT_CHANGE

Propriedade do objeto grfico alterada via


janela de dilogo de propriedades

CHARTEVENT_OBJECT_DELETE

Objeto
grficoexcludo
(se
CHART_EVENT_OBJECT_DELETE=true definido
para o grfico)

CHARTEVENT_CLICK

Dar um clique em um grfico

CHARTEVENT_OBJECT_CLICK

Dar um clique em um objeto grfico

CHARTEVENT_OBJECT_DRAG

Arrastar e soltar um objeto grfico

CHARTEVENT_OBJECT_ENDEDIT

Fim de edio de texto no objeto grfico Edit

CHARTEVENT_CHART_CHANGE

Alterao do tamanho do grfico ou modificao


das propriedades do grfico atravs da janela de
Propriedades

CHARTEVENT_CUSTOM

O nmero inicial de um evento de uma faixa de


eventos customizados

CHARTEVENT_CUSTOM_LAST

O nmero final de um evento de uma faixa de


eventos customizados

Para cada tipo de evento, os parmetros de entrada da funo OnChartEvent() tm valores definidos
que so requeridos para o processamento deste evento. Os eventos e valores passados atravs destes
parmetros so listados na tabela abaixo.
Evento

Valor
do
parmetro id

Valor
parmetro
lparam

do

Evento de uma

CHARTEVENT_KE

cdigo de uma

Valor
parmetro
dparam
Repita

2000-2014, MetaQuotes Software Corp.

do

Valor
parmetro
sparam

do

O valor da string

238

Constantes Padro, Enumeradores e Estruturas

teclada

YDOWN

tecla pressionada

contagem
(o
nmero de vezes
que a tecla
repetida
como
um resultado de
que o usurio
pressiona
a
tecla)

de uma pequena
mscara
de
descrever
o
estado de botes
do teclado

Eventos
de
mouse(se
CHART_EVENT_
MOUSE_MOVE=tr
ue definido
para o grfico)

CHARTEVENT_MO
USE_MOVE

a coordenada X

a coordenada Y

O valor de string
de uma mscara
de
bites
descrevendo
o
estado de botes
de mouse

evento
de
criao
de
objeto grfico(se
CHART_EVENT_O
BJECT_CREATE=t
rue definido
para o grfico)

CHARTEVENT_OB
JECT_CREATE

Nome do objeto
grfico criado

Evento
de
mudana de uma
propriedade de
objeto via janela
de dilogo de
propriedades

CHARTEVENT_OB
JECT_CHANGE

Nome do objeto
grfico
modificado

Evento
de
excluso
de
objeto
grfico
(se
CHART_EVENT_O
BJECT_DELETE=t
rue est definido
para o grfico)

CHARTEVENT_OB
JECT_DELETE

Nome do objeto
grfico excludo

Evento de um
click de mouse
no grfico

CHARTEVENT_C
LICK

a coordenada X

a coordenada Y

Evento de um
click de mouse
num
objeto
grfico
pertencente ao
grfico

CHARTEVENT_OB
JECT_CLICK

a coordenada X

a coordenada Y

Nome do objeto
grfico, na qual
o evento ocorreu

Evento
objeto

CHARTEVENT_OB
JECT_DRAG

Nome do objeto
grfico movido

de um
grfico

2000-2014, MetaQuotes Software Corp.

239

Constantes Padro, Enumeradores e Estruturas

arrastado usando
o mouse
Evento da edio
de
texto
finalizada
na
caixa de entrada
do objeto grfico
LabelEdit

CHARTEVENT_OB
JECT_ENDEDIT

Nome do objeto
grfico
LabelEdit, cuja
edio de texto
foi concluda

Evento
de
alterao
do
tamanho
do
grfico
ou
modificao das
propriedades do
grfico atravs
da janela de
Propriedades

CHARTEVENT_C
HART_CHANGE

ID do evento de
usurio sob N
nmero

CHARTEVENT_CU
STOM+N

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

Exemplo:
#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

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--Print("O expert com nome ",MQL5InfoString(MQL5_PROGRAM_NAME)," est executando");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|

//+------------------------------------------------------------------+
void OnChartEvent(const int id,

// Identificador de evento

2000-2014, MetaQuotes Software Corp.

240

Constantes Padro, Enumeradores e Estruturas


const long& lparam,

// Parmetro de evento de tipo long

const double& dparam, // Parmetro de evento de tipo double


const string& sparam

// Parmetro de evento de tipo string

)
{
//--- o boto esquerdo do mouse foi pressionado no grfico
if(id==CHARTEVENT_CLICK)
{
Print("As coordenadas do clique do mouse sobre o grfico so: x = ",lparam,"

y = ",dparam);

}
//--- o mouse foi clicado sobre o objeto grfico
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("O mouse foi clicado sobre o objeto com o nome '"+sparam+"'");
}
//--- a tecla foi pressionada
if(id==CHARTEVENT_KEYDOWN)
{
switch(lparam)
{
case KEY_NUMLOCK_LEFT:

Print("O KEY_NUMLOCK_LEFT foi pressionado");

break;

case KEY_LEFT:

Print("O KEY_LEFT foi pressionado");

break;

case KEY_NUMLOCK_UP:

Print("O KEY_NUMLOCK_UP foi pressionado");

break;

case KEY_UP:

Print("O KEY_UP foi pressionado");

break;

case KEY_NUMLOCK_RIGHT: Print("O KEY_NUMLOCK_RIGHT foi pressionado");

break;

case KEY_RIGHT:

Print("O KEY_RIGHT foi pressionado");

break;

case KEY_NUMLOCK_DOWN:

Print("O KEY_NUMLOCK_DOWN foi pressionado");

break;

case KEY_DOWN:

Print("O KEY_DOWN foi pressionado");

break;

case KEY_NUMPAD_5:

Print("O KEY_NUMPAD_5 foi pressionado");

break;

case KEY_NUMLOCK_5:

Print("O KEY_NUMLOCK_5 foi pressionado");

break;

default:

Print("Algumas teclas no listadas foram pressionadas");

}
ChartRedraw();
}
//--- o objeto foi excludo
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("O objeto com o nome ",sparam," foi excludo");
}
//--- o objeto foi criado
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("O objeto com o nome ",sparam," foi criado");
}
//--- o objeto foi movido ou suas coordenadas de ponto de ancoragem foram alteradas
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("O ponto de ancoragem das coordenadas do objeto com o nome ",sparam," foi alterado");
}

2000-2014, MetaQuotes Software Corp.

241

Constantes Padro, Enumeradores e Estruturas


//--- o texto na Edio do objeto foi alterado
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("O texto no campo da Edio do objeto com o nome ",sparam," foi alterado");
}
}

Tambm Veja
Funes de Manipulao de Evento, Trabalhando com eventos

2000-2014, MetaQuotes Software Corp.

242

Constantes Padro, Enumeradores e Estruturas

Janela temporal de Grfico


Todas as janelas de tempo (timeframes) pr-definidas de grficos tm identificadores nicos. O
identificador PERIOD_CURRENT significa o perodo corrente de um grfico, no qual um programa MQL5
est rodando.
ENUM_TIMEFRAMES
ID

Descrio

PERIOD_CURRENT

Janela de tempo corrente

PERIOD_M1

1 minuto

PERIOD_M2

2 minutos

PERIOD_M3

3 minutos

PERIOD_M4

4 minutos

PERIOD_M5

5 minutos

PERIOD_M6

6 minutos

PERIOD_M10

10 minutos

PERIOD_M12

12 minutos

PERIOD_M15

15 minutos

PERIOD_M20

20 minutos

PERIOD_M30

30 minutos

PERIOD_H1

1 hora

PERIOD_H2

2 horas

PERIOD_H3

3 horas

PERIOD_H4

4 horas

PERIOD_H6

6 horas

PERIOD_H8

8 horas

PERIOD_H12

12 horas

PERIOD_D1

1 dia

PERIOD_W1

1 semana

PERIOD_MN1

1 ms

Exemplo:
string chart_name="test_Object_Chart";
Print("Vamos tentar criar um objeto grfico com o nome ",chart_name);
//--- Se tal objeto no existir - cri-lo

2000-2014, MetaQuotes Software Corp.

243

Constantes Padro, Enumeradores e Estruturas


if(ObjectFind(0,chart_name)<0)ObjectCreate(0,chart_name,OBJ_CHART,0,0,0,0,0);
//--- Define o ativo
ObjectSetString(0,chart_name,OBJPROP_SYMBOL,"EURUSD");
//--- Define a coordenada X do ponto de ancoragem
ObjectSetInteger(0,chart_name,OBJPROP_XDISTANCE,100);
//--- Define a coordenada Y do ponto de ancoragem
ObjectSetInteger(0,chart_name,OBJPROP_YDISTANCE,100);
//--- Define a largura do grfico
ObjectSetInteger(0,chart_name,OBJPROP_XSIZE,400);
//--- Define a altura
ObjectSetInteger(0,chart_name,OBJPROP_YSIZE,300);
//--- Define a janela de tempo
ObjectSetInteger(0,chart_name,OBJPROP_PERIOD,PERIOD_D1);
//--- Define escala (de 0 a 5)
ObjectSetDouble(0,chart_name,OBJPROP_SCALE,4);
//--- Desativa a seleo por mouse
ObjectSetInteger(0,chart_name,OBJPROP_SELECTABLE,false);

Tambm Veja
PeriodSeconds, Period, Data e Hora, Visibilidade de objetos

2000-2014, MetaQuotes Software Corp.

244

Constantes Padro, Enumeradores e Estruturas

Propriedades de Grfico
Identificadores de enumeradores ENUM_CHART_PROPERTY so usados como parmetros de funes
para trabalhar com grficos. A abreviatura de r/o na coluna "Tipo de Propriedade" significa que esta
propriedade somente leitura e no pode ser alterada. A abreviatura w/o na coluna "Tipo de
Propriedade" significa que esta propriedade somente leitura e no pode ser recebida. Ao acessar
certas propriedades, necessrio especificar um parmetro adicional, que serve para indicar o
nmero da sub-janela do grfico. 0 significa a janela principal.
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.
Para funes ChartSetInteger() e ChartGetInteger()
ENUM_CHART_PROPERTY_INTEGER
ID

Descrio

Tipo de Propriedade

CHART_IS_OBJECT

Identificado
objeto
de
"Grfico"
(OBJ_CHART)
retorna verdadeiro para um
objeto grfico. Retorna falso
para um grfico real

bool r/o

CHART_BRING_TO_TOP

Exibe o grfico no topo de


outros grficos

bool w/o

CHART_MOUSE_SCROLL

Rolagem
do
grfico
horizontalmente
usando
o
boto esquerdo do mouse.
Rolagem vertical tambm est
disponvel se for definido como
verdadeiro o valor de todas as
seguintes
propriedades:
CHART_SCALEFIX,
CHART_SCALEFIX_11
ou
CHART_SCALE_PT_PER_BAR

bool

CHART_EVENT_MOUSE_MOVE

Eventos
CHARTEVENT_MOUSE_MOVE)
envia
notificaes
de
movimento de mouse e clique
de mouse a todos os programas
MQL5 num grfico

bool

CHART_EVENT_OBJECT_CREAT
E

Envia uma notificao de um


evento de criao de novo

bool

2000-2014, MetaQuotes Software Corp.

245

Constantes Padro, Enumeradores e Estruturas

objeto
(CHARTEVENT_OBJECT_CREAT
E) para todos os programas
MQL5 em um grfico
CHART_EVENT_OBJECT_DELET
E

Envia uma notificao de um


evento de excluso de objeto
(CHARTEVENT_OBJECT_DELETE
) para todos os programas
MQL5 em um grfico

bool

CHART_MODE

Tipo de grfico
barras ou linha)

enum

CHART_FOREGROUND

Grfico de preos no primeiro


plano

bool

CHART_SHIFT

Modo de encaixe do grfico de


preo a partir da borda direita

bool

CHART_AUTOSCROLL

Modo
de
movimentao
automtica para a borda
direita do grfico

bool

CHART_SCALE

Escala

int

CHART_SCALEFIX

Modo de escala fixo

bool

CHART_SCALEFIX_11

Modo de escala 1:1

bool

CHART_SCALE_PT_PER_BAR

Escala para ser especificada


em pontos por barra

bool

CHART_SHOW_OHLC

Exibe valores OHLC no canto


superior esquerdo

bool

CHART_SHOW_BID_LINE

Exibe valores de preo de


venda
como
uma
linha
horizontal em um grfico

bool

CHART_SHOW_ASK_LINE

Exibe valores de preo de


compra como
uma
linha
horizontal em um grfico

bool

CHART_SHOW_LAST_LINE

Exibe valores de ltimo preo


como uma linha horizontal em
um grfico

bool

CHART_SHOW_PERIOD_SEP

Exibe separadores verticais


entre perodos adjacentes

bool

CHART_SHOW_GRID

Exibe grade no grfico

bool

CHART_SHOW_VOLUMES

Exibe volume no grfico

enum
ENUM_CHART_VOLUME_MODE

CHART_SHOW_OBJECT_DESCR

Descries pop-up de objetos


grficos

bool

(candles,

2000-2014, MetaQuotes Software Corp.

ENUM_CHART_MODE

de 0 a 5

246

Constantes Padro, Enumeradores e Estruturas

CHART_VISIBLE_BARS

O nmero de barras no grfico


que podem ser exibidas

int r/o

CHART_WINDOWS_TOTAL

O nmero total de janelas de


grficos, incluindo sub-janelas
de indicadores

int r/o

CHART_WINDOW_IS_VISIBLE

Visibilidade de sub-janelas

bool r/o modificador - nmero


de sub-janela

CHART_WINDOW_HANDLE

Manuseio da janela do grfico


(HWND)

int r/o

CHART_WINDOW_YDISTANCE

A distncia entre a moldura


superior da sub-janela do
indicador e a moldura superior
da janela do grfico principal,
ao longo do eixo Y vertical, in
pixels. No caso de um evento
de mouse, as coordenadas do
cursor so passadas em termos
das coordenadas da janela do
grfico principal, enquanto que
as coordenadas de objetos
grficos em uma sub-janela do
indicador so definidas em
relao ao canto superior
esquerdo da sub-janela.
O valor requerido para
converter
as
coordenadas
absolutas do grfico principal
em coordenadas locais da subjanela para correto trabalho
com os objetos grficos, cujas
coordenadas so definidas em
relao ao canto superior
esquerdo da moldura da subjanela.

int r/o
modificador - nmero
de sub-janela

CHART_FIRST_VISIBLE_BAR

Nmero das primeiras barras


visveis
no
grfico.
A
indexao de barras a mesma
para sries de tempo.

int r/o

CHART_WIDTH_IN_BARS

Largura de grfico em barras

int r/o

CHART_WIDTH_IN_PIXELS

Largura de grfico em pixels

int r/o

CHART_HEIGHT_IN_PIXELS

Altura de grfico em pixels

int
modificador - nmero de
sub-janela

CHART_COLOR_BACKGROUND

Cor de fundo do grfico

color

CHART_COLOR_FOREGROUND

Cor dos eixos, escalas e linha


OHLC

color

2000-2014, MetaQuotes Software Corp.

247

Constantes Padro, Enumeradores e Estruturas

CHART_COLOR_GRID

Cor da grade

color

CHART_COLOR_VOLUME

Cor dos volumes e nveis de


abertura de posio

color

CHART_COLOR_CHART_UP

Cor para a barra de alta,


sombras e bordas de candles de
alta

color

CHART_COLOR_CHART_DOWN

Cor para a barra de baixa,


sombras e bordas de candles de
baixa

color

CHART_COLOR_CHART_LINE

Cor de grfico de linha e cor de


candles "Doji" japoneses

color

CHART_COLOR_CANDLE_BULL

Cor de corpo de um candle de


alta

color

CHART_COLOR_CANDLE_BEAR

Cor de corpo de um candle de


baixa

color

CHART_COLOR_BID

Cor de nvel de preo de venda

color

CHART_COLOR_ASK

Cor de nvel de preo de


compra

color

CHART_COLOR_LAST

Cor de linha do ltimo preo de


operao executada

color

CHART_COLOR_STOP_LEVEL

Cor de nveis de ordem de stop


(Stop Loss e Take Profit)

color

CHART_SHOW_TRADE_LEVELS

Exibio
de
nveis
de
negociao no grfico (nveis
de abertura de posio, Stop
Loss, Take Profit e ordens
pendentes

bool

CHART_DRAG_TRADE_LEVELS

Permisso para arrastar os


nveis de negociao num
grfico com um mouse. O
modo de arrastar ativado
pelo padro (valor verdadeiro)

bool

CHART_SHOW_DATE_SCALE

Exibio da escala de tempo


em um grfico

bool

CHART_SHOW_PRICE_SCALE

Exibio da escala de preo em


um grfico

bool

Para funes ChartSetDouble() e ChartGetDouble()


ENUM_CHART_PROPERTY_DOUBLE
ID

Descrio

2000-2014, MetaQuotes Software Corp.

Tipo de Propriedade

248

Constantes Padro, Enumeradores e Estruturas


CHART_SHIFT_SIZE

O tamanho da barra zero


encaixada a partir da borda
direita em porcentagens

double (de 10 to 50 porcento)

CHART_FIXED_POSITION

Posio fixa do grfico a partir


da borda esquerda em valor
percentual. A posio fixa do
grfico marcada por um
pequeno tringulo cinza no eixo
do tempo horizontal. Ele
exibido somente se a rolagem
automtica do grfico para a
direita na chegada de um tick
(preo
novo)
estiver
desabilitada
(veja
a
propriedade
CHART_AUTOSCROLL). A barra
em
uma
posio
fixa
permanece no mesmo lugar ao
se ampliar e reduzir o grfico.

double

CHART_FIXED_MAX

Mximo fixo do grfico

double

CHART_FIXED_MIN

Mnimo fixo do grfico

double

CHART_POINTS_PER_BAR

Escala em pontos por barra

double

CHART_PRICE_MIN

Mnimo do grfico

double r/o
modificador nmero de sub-janela

CHART_PRICE_MAX

Mximo do grfico

double r/o
modificador nmero de sub-janela

Para funes ChartSetString() e ChartGetString()


ENUM_CHART_PROPERTY_STRING
ID

Descrio

CHART_COMMENT

Tipo de Propriedade

Texto de um comentrio em
um grfico

Exemplo:
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");

2000-2014, MetaQuotes Software Corp.

string

249

Constantes Padro, Enumeradores e Estruturas


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);
}
}

Tambm Veja
Exemplos de como trabalhar com um grfico

2000-2014, MetaQuotes Software Corp.

250

Constantes Padro, Enumeradores e Estruturas

Constantes de Posicionamento
Trs identificadores a partir da lista ENUM_CHART_POSITION so os possveis valores do parmetro
de posio para a funo ChartNavigate().
ENUM_CHART_POSITION
ID

Descrio

CHART_BEGIN

Comeo do grfico (o preo mais antigo)

CHART_CURRENT_POS

Posio corrente

CHART_END

Final do grfico (os preos mais recentes)

Exemplo:
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("Navegar falhou. Erro = ",GetLastError());
ChartRedraw();
}

2000-2014, MetaQuotes Software Corp.

251

Constantes Padro, Enumeradores e Estruturas

Representao de Grfico
Os grficos de preo podem ser exibidos de trs maneiras:
como barras;
como candles;
como um linha.
A maneira especfica de exibir o grfico de preo definida definida pela funo
ChartSetInteger(chart_handle,CHART_MODE, chart_mode), onde chart_mode um dos valores da
enumerao ENUM_CHART_MODE.
ENUM_CHART_MODE
ID

Descrio

CHART_BARS

Exibe como uma seqncia de barras

CHART_CANDLES

Exibe como candles japoneses

CHART_LINE

Exibe como uma linha desenha por preos de


fechamento

Para especificar o modo de exibio de volumes em um grfico de preos a funo


ChartSetInteger(chart_handle, CHART_SHOW_VOLUMES, volume_mode) usada, onde volume_mode
um dos valores da enumerao ENUM_CHART_VOLUME_MODE.

ENUM_CHART_VOLUME_MODE
ID

Descrio

CHART_VOLUME_HIDE

Volumes no so exibidos

CHART_VOLUME_TICK

Volumes de tick (mudana de preo)

CHART_VOLUME_REAL

Volume de negociao

Exemplo:
//--- Obtm o manuseio do grfico corrente
long handle=ChartID();
if(handle>0) // Se bem sucedido, customiza adicionalmente
{
//--- Desativa auto-rolagem
ChartSetInteger(handle,CHART_AUTOSCROLL,false);
//--- Define o encaixe da borda direita do grfico
ChartSetInteger(handle,CHART_SHIFT,true);
//--- Exibe como candles
ChartSetInteger(handle,CHART_MODE,CHART_CANDLES);
//--- Rola por 100 barras a partir do comeo do histrico
ChartNavigate(handle,CHART_CURRENT_POS,100);
//--- Define o modo de exibio de volume de tick

2000-2014, MetaQuotes Software Corp.

252

Constantes Padro, Enumeradores e Estruturas


ChartSetInteger(handle,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
}

Tambm Veja
ChartOpen, ChartID

2000-2014, MetaQuotes Software Corp.

253

Constantes Padro, Enumeradores e Estruturas

Exemplos de como trabalhar com um grfico


Exemplos de como trabalhar com propriedades do grfico. Uma ou duas funes completas so
exibidas para cada propriedade. Estas funes permitem configurar/receber o valor da propriedade.
Essas funes podem ser utilizadas "como esto" em aplicativos personalizados MQL5.
a imagem abaixo mostra o painel grfico ilustrando como modificara propriedade do grficomudando
sua aparncia. Clicando prximo boto permite definir o novo valor da propriedade apropriada e
visualizar as alteraes na janela do grfico.

O cdigo fonte do painel est localizado abaixo.

Propriedades do Grfico e Exemplos de Funes para Trabalhar


com Eles
CHART_IS_OBJECT define se um objeto um grfico real ou um objeto grfico.
//+-------------------------------------------------------------------------+
//| Definir se um objeto um grfico. Se ele for

//| um objeto grfico, o resultado verdadeiro. Se ele for um grfico real|


//| o resultado da varivel foi o valor falso.

//+-------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

254

Constantes Padro, Enumeradores e Estruturas


bool ChartIsObject(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- obter a propriedade do grfico
if(!ChartGetInteger(chart_ID,CHART_IS_OBJECT,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
//--- retorna false
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}

CHART_BRING_TO_TOP exibe o grfico no topo de outros grficos.


//+-------------------------------------------------------------------------+
//| Enviar comando para o terminal para exibir o grfico acima dos outros.

//+-------------------------------------------------------------------------+
bool ChartBringToTop(const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- exibe o grfico no topo de outros grficos
if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_MOUSE_SCROLL uma propriedade para rolagem do grfico usando boto esquerdo do


mouse.
//+--------------------------------------------------------------------------+
//| A funo define se a rolagem do grfico usando o boto esquerdo do mouse|
//| est habilitado.

//+--------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

255

Constantes Padro, Enumeradores e Estruturas


bool ChartMouseScrollGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------+
//| A funo habilita/desabilita a rolagem do grfico usando boto

//| esquerdo do mouse.

//+--------------------------------------------------------------------+
bool ChartMouseScrollSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_MOUSE_SCROLL,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_EVENT_MOUSE_MOVE uma propriedade de enviar mensagens sobre mudana de eventos


e cliques de mouse para aplicaes MQL5 CHARTEVENT_MOUSE_MOVE).
//+------------------------------------------------------------------+
//| Verificar se mudana de eventos e cliques de mouse

//| so enviadas para todas as aplicaes mql5 no grfico.

//+------------------------------------------------------------------+
bool ChartEventMouseMoveGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;

2000-2014, MetaQuotes Software Corp.

256

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de envio de mensagens sobre mudana

//| de eventos e cliques de mouse para aplicaes no

//| grfico.

//+------------------------------------------------------------------------------+
bool ChartEventMouseMoveSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_EVENT_OBJECT_CREATE uma propriedade de enviar mensagens sobre o evento da


criao do objeto grfico para aplicaes MQL5 (CHARTEVENT_OBJECT_CREATE).
//+---------------------------------------------------------------------+
//| Verificar se mensagens do evento da criao de um objeto grfico |
//| so enviadas para todas as aplicaes mql5 no grfico.

//+---------------------------------------------------------------------+
bool ChartEventObjectCreateGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade

2000-2014, MetaQuotes Software Corp.

257

Constantes Padro, Enumeradores e Estruturas


if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de envio de mensagens sobre

//| o evento da criao do objeto grfico para aplicaes mql5 no

//| grfico.

//+--------------------------------------------------------------------------+
bool ChartEventObjectCreateSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_CREATE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_EVENT_OBJECT_DELETE uma propriedade de enviar mensagens sobre o evento da


excluso do objeto grfico para aplicaes MQL5 (CHARTEVENT_OBJECT_DELETE).
//+---------------------------------------------------------------------+
//| Verificar se mensagens do evento da excluso de um objeto grfico |
//| so enviadas para todas as aplicaes mql5 no grfico.

//+---------------------------------------------------------------------+
bool ChartEventObjectDeleteGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
{
//--- exibe uma mensagem para o dirio Experts

2000-2014, MetaQuotes Software Corp.

258

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de envio de mensagens sobre

//| o evento da excluso do objeto grfico para aplicaes mql5 no

//| grfico.

//+--------------------------------------------------------------------------+
bool ChartEventObjectDeleteSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_EVENT_OBJECT_DELETE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_MODE tipo de grfico (candles, barras ou linha).


//+------------------------------------------------------------------+
//| Obter tipo de grfico (candles, barras ou

//| linha).

//+------------------------------------------------------------------+
ENUM_CHART_MODE ChartModeGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=WRONG_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_MODE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((ENUM_CHART_MODE)result);

2000-2014, MetaQuotes Software Corp.

259

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Define tipo de grfico (candles, barras ou

//| linha).

//+------------------------------------------------------------------+
bool ChartModeSet(const long value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_MODE,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_FOREGROUND uma propriedade de exibio do grfico de preo no primeiro plano.


//+------------------------------------------------------------------+
//| A funo define se um grfico de preo exibido no

//| primeiro plano.

//+------------------------------------------------------------------+
bool ChartForegroundGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+---------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio do grfico de preo no

//| primeiro plano.

//+---------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

260

Constantes Padro, Enumeradores e Estruturas


bool ChartForegroundSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHIFT modo de encaixe do grfico de preo a partir da borda direita.


//+------------------------------------------------------------------------------------+
//| A funo define se o modo de deslocamento do grfico de preo do limite direito

//| est habilitado.

//+------------------------------------------------------------------------------------+
bool ChartShiftGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHIFT,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio do grfico de preo com |
//| deslocamento do limite direito.

//+--------------------------------------------------------------------------+
bool ChartShiftSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade

2000-2014, MetaQuotes Software Corp.

261

Constantes Padro, Enumeradores e Estruturas


if(!ChartSetInteger(chart_ID,CHART_SHIFT,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_AUTOSCROLL modo de movimentao automtica para a borda direita do grfico.


//+---------------------------------------------------------------------+
//| A funo define o modo de auto-rolamento do grfico

//| para a direita no caso de chegada de novos ticks estar habilitado. |


//+---------------------------------------------------------------------+
bool ChartAutoscrollGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de auto-rolamento do grfico |
//| para a direita no caso da chegada de novos ticks.

//+------------------------------------------------------------------+
bool ChartAutoscrollSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_AUTOSCROLL,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);

2000-2014, MetaQuotes Software Corp.

262

Constantes Padro, Enumeradores e Estruturas


}
//--- sucesso na execuo
return(true);
}

CHART_SCALE chart scale property.


//+------------------------------------------------------------------+
//| Obter escala do grfico (de 0 a 5).

//+------------------------------------------------------------------+
int ChartScaleGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SCALE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}
//+------------------------------------------------------------------+
//| Definir escala do grfico (de 0 a 5).

//+------------------------------------------------------------------+
bool ChartScaleSet(const long value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SCALE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SCALEFIX o modo de especificar a escala do grfico em pontos por barra.


//+------------------------------------------------------------------+
//| A funo define se o modo de fixar a escala est habilitado.

2000-2014, MetaQuotes Software Corp.

263

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
bool ChartScaleFixGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SCALEFIX,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de fixar a escala.

//+------------------------------------------------------------------+
bool ChartScaleFixSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SCALEFIX,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SCALEFIX_11 modo de escala 1:1.


//+------------------------------------------------------------------+
//| A funo define se a escala "1:1" est habilitada.

//+------------------------------------------------------------------+
bool ChartScaleFix11Get(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();

2000-2014, MetaQuotes Software Corp.

264

Constantes Padro, Enumeradores e Estruturas


//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de escala "1:1"

//+------------------------------------------------------------------+
bool ChartScaleFix11Set(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SCALEFIX_11,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SCALE_PT_PER_BAR o modo de especificar a escala do grfico em pontos por barra.


//+------------------------------------------------------------------------------+
//| A funo define se o modo de especificar a escala do grfico por pontos

//| barra est habilitada.

//+------------------------------------------------------------------------------+
bool ChartScalePerBarGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);

2000-2014, MetaQuotes Software Corp.

265

Constantes Padro, Enumeradores e Estruturas


}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de definir a escala do grfico em pontos por

//| barra.

//+------------------------------------------------------------------------------------+
bool ChartScalePerBarSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_OHLC propriedade de exibe valores OHLC no canto superior esquerdo.


//+------------------------------------------------------------------+
//| A funo define se o modo de exibio dos valores OHLC

//| no canto superior esquerdo est habilitado.

//+------------------------------------------------------------------+
bool ChartShowOHLCGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

266

Constantes Padro, Enumeradores e Estruturas


}
//+--------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio dos valores OHLC no

//| canto superior esquerdo do grfico.

//+--------------------------------------------------------------------------+
bool ChartShowOHLCSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_OHLC,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_BID_LINE a propriedade mostra o valor Bid como uma linha horizontal no grfico.
//+-----------------------------------------------------------------------------+
//| A funo define se o modo de exibio da linha do valor Bid no grfico

//| est habilitado.

//+-----------------------------------------------------------------------------+
bool ChartShowBidLineGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio da linha Bid no

//| grfico.

//+--------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

267

Constantes Padro, Enumeradores e Estruturas


bool ChartShowBidLineSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_BID_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_ASK_LINE a propriedade de mostrar o valor Ask como uma linha horizontal no


grfico.
//+-----------------------------------------------------------------------+
//| A funo define se o modo de exibio da linha de valor Ask no

//| grfico.

//+-----------------------------------------------------------------------+
bool ChartShowAskLineGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+-----------------------------------------------------------------------+
//| A funo habibita/desabilita o modo de exibio da linha ASk no

//| grfico.

//+-----------------------------------------------------------------------+
bool ChartShowAskLineSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();

2000-2014, MetaQuotes Software Corp.

268

Constantes Padro, Enumeradores e Estruturas


//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_ASK_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_LAST_LINE a propriedade de exibir ltimo valor como uma linha horizontal no


grfico.
//+---------------------------------------------------------------------------------+
//| A funo define se o modo da exibio da linha para a ltima execuo

//| do preo de negociao est habilitada.

//+---------------------------------------------------------------------------------+
bool ChartShowLastLineGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo da exibio da linha para a ltima execuo

//| do preo de negociao.

//+--------------------------------------------------------------------------------------+
bool ChartShowLastLineSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_LAST_LINE,0,value))
{
//--- exibe uma mensagem para o dirio Experts

2000-2014, MetaQuotes Software Corp.

269

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_PERIOD_SEP a propriedade de exibir separadores verticais entre os perodos


adjacentes.
//+------------------------------------------------------------------+
//| A funo define se o modo da exibio dos separadores vertical

//| entre os perodos adjacentes est habilitado.

//+------------------------------------------------------------------+
bool ChartShowPeriodSeparatorGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio dos separadores |
//| vertical entre os perodos adjacentes.

//+------------------------------------------------------------------+
bool ChartShowPeriodSepapatorSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_PERIOD_SEP,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo

2000-2014, MetaQuotes Software Corp.

270

Constantes Padro, Enumeradores e Estruturas


return(true);
}

CHART_SHOW_GRID a propriedade de mostrar a grade do grfico.


//+------------------------------------------------------------------+
//| A funo define se a grade do grfico exibida.

//+------------------------------------------------------------------+
bool ChartShowGridGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_GRID,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo habilita/desabilita a grade do grfico.

//+------------------------------------------------------------------+
bool ChartShowGridSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- definir o valor da propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_GRID,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_VOLUMES a propriedade de mostrar os volumes num grfico.


//+------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

271

Constantes Padro, Enumeradores e Estruturas


//| A funo define se os volumes so exibidos no grfico (ou no so

//| mostrados, ticks so mostrados, os atuais so mostrados).

//+------------------------------------------------------------------------+
ENUM_CHART_VOLUME_MODE ChartShowVolumesGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=WRONG_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_VOLUMES,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((ENUM_CHART_VOLUME_MODE)result);
}
//+------------------------------------------------------------------+
//| A funo define o mode de exibio dos volumes no grfico.

//+------------------------------------------------------------------+
bool ChartShowVolumesSet(const long value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_VOLUMES,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_OBJECT_DESCR a propriedade mostrar descries pop-up do objeto grfico.


//+-------------------------------------------------------------------+
//| A funo define se descries pop-up de objetos grficos so

//| exibidas quando colocado o cursor do mouse sobre eles.

//+-------------------------------------------------------------------+
bool ChartShowObjectDescriptionGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();

2000-2014, MetaQuotes Software Corp.

272

Constantes Padro, Enumeradores e Estruturas


//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio de descries pop-up

//| de objetos grficos quando colocado o cursor do mouse sobre eles.

//+--------------------------------------------------------------------------+
bool ChartShowObjectDescriptionSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_VISIBLE_BARS define o nmero de barras no grfico que so disponibilizadas para exibio.


//+-----------------------------------------------------------------------+
//| A funo recebe o nmero de barras que so mostradas (visveis)

//| na janela do grfico.

//+-----------------------------------------------------------------------+
int ChartVisibleBars(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());

2000-2014, MetaQuotes Software Corp.

273

Constantes Padro, Enumeradores e Estruturas


}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

CHART_WINDOWS_TOTAL define o nmero total de janelas do grfico incluindo sub-janelas do


indicador.
//+--------------------------------------------------------------------------+
//| A funo obtm o nmero total de janelas do grfico incluindo

//| subjanelas do indicador.

//+--------------------------------------------------------------------------+
int ChartWindowsTotal(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

CHART_WINDOW_IS_VISIBLE define a visibilidade da sub-janela.


//+------------------------------------------------------------------+
//| A funo define se a atual janela do grfico ou sub-janela

//| est visvel.

//+------------------------------------------------------------------+
bool ChartWindowsIsVisible(bool &result,const long chart_ID=0,const int sub_window=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WINDOW_IS_VISIBLE,sub_window,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

274

Constantes Padro, Enumeradores e Estruturas


//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}

CHART_WINDOW_HANDLE retorna o manipulador do grfico.


//+------------------------------------------------------------------+
//| A funo obtm o manipulador do grfico

//+------------------------------------------------------------------+
int ChartWindowsHandle(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WINDOW_HANDLE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

CHART_WINDOW_YDISTANCE define a distncia em pixels entre a quadro superior do sub-janela do


indicador e o quadro superior da janela principal do grfico.
//+------------------------------------------------------------------+
//| A funo obtm a distncia em pixels entre a quadro superior da |
//| sub-janela e o quadro superior da janela principal do grfico.

//+------------------------------------------------------------------+
int ChartWindowsYDistance(const long chart_ID=0,const int sub_window=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WINDOW_YDISTANCE,sub_window,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico

2000-2014, MetaQuotes Software Corp.

275

Constantes Padro, Enumeradores e Estruturas


return((int)result);
}

CHART_FIRST_VISIBLE_BAR retorna o nmero da primeira barra visvel no grfico (barra de


indexao que corresponde a srie temporal).
//+---------------------------------------------------------------------------------------+
//| A funo recebe o nmero da primeira barra visvel no grfico.

//| Indexao executada como em sries temporais, as ltimas barras tm ndices menores |
//+---------------------------------------------------------------------------------------+
int ChartFirstVisibleBar(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WINDOW_YDISTANCE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

CHART_WIDTH_IN_BARS retorna a largura do grfico de barras.


//+------------------------------------------------------------------+
//| A funo recebe a largura do grfico de barras.

//+------------------------------------------------------------------+
int ChartWidthInBars(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_BARS,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

2000-2014, MetaQuotes Software Corp.

276

Constantes Padro, Enumeradores e Estruturas

CHART_WIDTH_IN_PIXELS retorna a largura da do grfico em pixels.


//+------------------------------------------------------------------+
//| A funo recebe a largura da do grfico em pixels.

//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}

CHART_HEIGHT_IN_PIXELS propriedade em pixels da altura do grfico.


//+------------------------------------------------------------------+
//| A funo recebe o valor da altura do grfico em pixels.

//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
{
//--- preparar a varivel para obter o valor da propriedade
long result=-1;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((int)result);
}
//+------------------------------------------------------------------+
//| A funo define o valor da altura do grfico em pixels.

//+------------------------------------------------------------------+
bool ChartHeightInPixelsSet(const int value,const long chart_ID=0,const int sub_window=0)
{

2000-2014, MetaQuotes Software Corp.

277

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_BACKGROUND - cor do fundo do grfico.


//+------------------------------------------------------------------+
//| A funo recebe a cor do fundo do grfico.

//+------------------------------------------------------------------+
color ChartBackColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor do fundo do grfico
if(!ChartGetInteger(chart_ID,CHART_COLOR_BACKGROUND,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo define a cor de fundo do grfico.

//+------------------------------------------------------------------+
bool ChartBackColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- definir a cor do fundo do grfico
if(!ChartSetInteger(chart_ID,CHART_COLOR_BACKGROUND,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo

2000-2014, MetaQuotes Software Corp.

278

Constantes Padro, Enumeradores e Estruturas


return(true);
}

CHART_COLOR_FOREGROUND Cor dos eixos, escala e linha OHLC.


//+------------------------------------------------------------------+
//| A funo recebe a cor dos eixos, da escala e da linha OHLC.

//+------------------------------------------------------------------+
color ChartForeColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber cor dos eixos, escala e linha OHLC
if(!ChartGetInteger(chart_ID,CHART_COLOR_FOREGROUND,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor dos eixos, da escala e da linha OHLC.

//+------------------------------------------------------------------+
bool ChartForeColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- definir cor dos eixos, escala e linha OHLC
if(!ChartSetInteger(chart_ID,CHART_COLOR_FOREGROUND,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_GRID cor da grade do grfico.


//+------------------------------------------------------------------+
//| A funo recebe a cor da grade do grfico.

//+------------------------------------------------------------------+
color ChartGridColorGet(const long chart_ID=0)

2000-2014, MetaQuotes Software Corp.

279

Constantes Padro, Enumeradores e Estruturas


{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor da grade do grfico
if(!ChartGetInteger(chart_ID,CHART_COLOR_GRID,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor da grade do grfico.

//+------------------------------------------------------------------+
bool ChartGridColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da grade do grfico
if(!ChartSetInteger(chart_ID,CHART_COLOR_GRID,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_VOLUME - cor dos volumes e nveis de abertura de posio.


//+------------------------------------------------------------------+
//| A funo recebe cor de volumes e nveis de entrada
//| no mercado.

|
|

//+------------------------------------------------------------------+
color ChartVolumeColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- recebe cor de volumes e nveis de entrada no mercado
if(!ChartGetInteger(chart_ID,CHART_COLOR_VOLUME,0,result))
{
//--- exibe uma mensagem para o dirio Experts

2000-2014, MetaQuotes Software Corp.

280

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor de volumes e entrada

//| no mercado.

//+------------------------------------------------------------------+
bool ChartVolumeColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar cor de volumes e nveis de entrada no mercado
if(!ChartSetInteger(chart_ID,CHART_COLOR_VOLUME,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_CHART_UP cor da barra de alta, sombra e borda da barra de alta (tambm


denominado como castial ou vela de alta).
//+------------------------------------------------------------------+
//| A funo recebe cor da barra de alta, a sua sombra e

//| o limite do corpo do candlestick de alta.

//+------------------------------------------------------------------+
color ChartUpColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- recebe cor da barra de alta, a sua sombra e o limite do corpo do candlestick de alta
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_UP,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura cor da barra de alta, sua sombra e

2000-2014, MetaQuotes Software Corp.

281

Constantes Padro, Enumeradores e Estruturas


//| o limite do corpo do candlestick de alta.

//+------------------------------------------------------------------+
bool ChartUpColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da barra de alta, a sua sombra e o limite do corpo do candlestick de alta
if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_UP,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_CHART_DOWN cor da barra de baixa, a sua sombra e limite do corpo do


candlestick de baixa.
//+------------------------------------------------------------------+
//| A funo recebe cor da barra de alta, a sua sombra e

//| limite do corpo do candlestick de baixa.

//+------------------------------------------------------------------+
color ChartDownColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- recebe cor da barra de baixa, a sua sombra e o limite do corpo do candlestick de baixa
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_DOWN,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor da barra de baixa, sua sombra e

//| limite do corpo do candlestick de baixa.

//+------------------------------------------------------------------+
bool ChartDownColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da barra de baixa, sua sombra e e o limite do corpo do candlestick de baixa

2000-2014, MetaQuotes Software Corp.

282

Constantes Padro, Enumeradores e Estruturas


if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_DOWN,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_CHART_LINE Cor da linha do grfico e barra Doji (tambm denominado como


castial ou vela Doji).
//+------------------------------------------------------------------------+
//| A funo recebe cor da linha do grfico e candlesticks Doji.

//+------------------------------------------------------------------------+
color ChartLineColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber cor da linha do grfico e candlesticks Doji.
if(!ChartGetInteger(chart_ID,CHART_COLOR_CHART_LINE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor da linha do grfico e

//| candlesticks Doji.

//+------------------------------------------------------------------+
bool ChartLineColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da linha do grfico e candlesticks Doji
if(!ChartSetInteger(chart_ID,CHART_COLOR_CHART_LINE,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

283

Constantes Padro, Enumeradores e Estruturas


}

CHART_COLOR_CANDLE_BULL cor do corpo da barra de alta (tambm denominado como castial


ou vela de alta).
//+------------------------------------------------------------------+
//| A funo recebe a cor do corpo do candlestick de alta.

//+------------------------------------------------------------------+
color ChartBullColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor do corpo do candlestick de alta
if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor do corpo do candlestick de alta.

//+------------------------------------------------------------------+
bool ChartBullColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor do corpo do candlestick de alta.
if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BULL,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_CANDLE_BEAR cor do corpo da barra de baixa (tambm denominado como castial


ou vela de baixa).
//+------------------------------------------------------------------+
//| A funo recebe a cor do corpo do candlestick de baixa.

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

284

Constantes Padro, Enumeradores e Estruturas


color ChartBearColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor do corpo do candlestick de baixa
if(!ChartGetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor do corpo do candlestick de baixa.

//+------------------------------------------------------------------+
bool ChartBearColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor do corpo do candlestick de baixa
if(!ChartSetInteger(chart_ID,CHART_COLOR_CANDLE_BEAR,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_BID Cor de linha de preo de venda.


//+------------------------------------------------------------------+
//| A funo recebe a cor da linha Bid.

//+------------------------------------------------------------------+
color ChartBidColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor da linha Bid
if(!ChartGetInteger(chart_ID,CHART_COLOR_BID,0,result))
{
//--- exibe uma mensagem para o dirio Experts

2000-2014, MetaQuotes Software Corp.

285

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor da linha Bid.

//+------------------------------------------------------------------+
bool ChartBidColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da linha Bid.
if(!ChartSetInteger(chart_ID,CHART_COLOR_BID,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_ASK Cor de linha de preo de compra.


//+------------------------------------------------------------------+
//| A funo recebe a cor da linha Ask.

//+------------------------------------------------------------------+
color ChartAskColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor da linha Ask
if(!ChartGetInteger(chart_ID,CHART_COLOR_ASK,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor da linha Ask.

//+------------------------------------------------------------------+
bool ChartAskColorSet(const color clr,const long chart_ID=0)
{

2000-2014, MetaQuotes Software Corp.

286

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da linha Ask
if(!ChartSetInteger(chart_ID,CHART_COLOR_ASK,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_COLOR_LAST cor de linha do ltimo preo de operao executada.


//+----------------------------------------------------------------------+
//| A funo recebe a cor da linha do preo do ltimo negcio realizado. |
//+----------------------------------------------------------------------+
color ChartLastColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber cor de linha do ltimo preo de operao executada.
if(!ChartGetInteger(chart_ID,CHART_COLOR_LAST,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura a cor do preo do ltimo negcio realizado

//| linha.

//+------------------------------------------------------------------+
bool ChartLastColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- configurar a cor da linha do preo do ltimo negcio realizado (Last)
if(!ChartSetInteger(chart_ID,CHART_COLOR_LAST,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

287

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}

CHART_COLOR_STOP_LEVEL cor de nveis de ordem de stop (Stop Loss e Take Profit).


//+--------------------------------------------------------------------+
//| A funo recebe as cores dos nveis de Stop Loss e Take Profit.

//+--------------------------------------------------------------------+
color ChartStopLevelColorGet(const long chart_ID=0)
{
//--- preparar a varivel para receber a cor
long result=clrNONE;
//--- redefine o valor de erro
ResetLastError();
//--- receber a cor de nveis de ordem de stop (Stop Loss e Take Profit)
if(!ChartGetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return((color)result);
}
//+------------------------------------------------------------------+
//| A funo configura cores dos nveis de Stop Loss e Take Profit.

//+------------------------------------------------------------------+
bool ChartStopLevelColorSet(const color clr,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- definir a cor de nveis de ordem de stop (Stop Loss e Take Profit)
if(!ChartSetInteger(chart_ID,CHART_COLOR_STOP_LEVEL,clr))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_TRADE_LEVELS propriedade de exibio de nveis de negociao no grfico (nveis


de abertura de posio, Stop Loss, Take Profit e ordens pendentes.
//+---------------------------------------------------------------------+
//| A funo define se nveis de negociao so exibidos no grfico.

2000-2014, MetaQuotes Software Corp.

288

Constantes Padro, Enumeradores e Estruturas


//+---------------------------------------------------------------------+
bool ChartShowTradeLevelsGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+----------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibio nveis de negociao |
//+----------------------------------------------------------------------+
bool ChartShowTradeLevelsSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_TRADE_LEVELS,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_DRAG_TRADE_LEVELS propriedade de habilitar a capacidade de arrastar os nveis de


negociao no grfico usando o mouse.
//+---------------------------------------------------------------------------+
//| Funo define se arrastar os nveis de negociao no grfico com o mouse |
//| permitido.

//+---------------------------------------------------------------------------+
bool ChartDragTradeLevelsGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;

2000-2014, MetaQuotes Software Corp.

289

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Funo habilita/desabilita o modo arrastar os nveis de negcios|
//| no grfico usando o mouse.

//+------------------------------------------------------------------+
bool ChartDragTradeLevelsSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_DRAG_TRADE_LEVELS,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_DATE_SCALE propriedade de exibio da escala de tempo em um grfico.


//+--------------------------------------------------------------------+
//| A funo configura se a escala de tempo exibida no grfico.

//+--------------------------------------------------------------------+
bool ChartShowDateScaleGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
{
//--- exibe uma mensagem para o dirio Experts

2000-2014, MetaQuotes Software Corp.

290

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibir a escala de tempo no |
//| grfico.

//+--------------------------------------------------------------------+
bool ChartShowDateScaleSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_DATE_SCALE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHOW_PRICE_SCALE propriedade de mostrar a escala de preos no grfico.


//+--------------------------------------------------------------------+
//| A funo define se a escala de preos exibida no grfico.

//+--------------------------------------------------------------------+
bool ChartShowPriceScaleGet(bool &result,const long chart_ID=0)
{
//--- preparar a varivel para obter o valor da propriedade
long value;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- armazenar o valor da propriedade do grfico na memria
result=value;
//--- sucesso na execuo

2000-2014, MetaQuotes Software Corp.

291

Constantes Padro, Enumeradores e Estruturas


return(true);
}
//+----------------------------------------------------------------------------+
//| A funo habilita/desabilita o modo de exibir a escala de preos no

//| grfico.

//+----------------------------------------------------------------------------+
bool ChartShowPriceScaleSet(const bool value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetInteger(chart_ID,CHART_SHOW_PRICE_SCALE,0,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_SHIFT_SIZE o tamanho da barra zero encaixada a partir da borda direita em porcentagens.


//+---------------------------------------------------------------------------+
//| A funo recebe a tamanho do deslocamento da barra zero do limite direito |
//| do grfico em valores percentuais (de 10% at 50%).

//+---------------------------------------------------------------------------+
double ChartShiftSizeGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_SHIFT_SIZE,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}
//+--------------------------------------------------------------------------------------+
//| A funo configura o tamanho do deslocamento da barra zero da direita

//| limite do grfico em valores percentuais (de 10% at 50%).

//| Para habilitar o deslocamento modo, valor da propriedade CHART_SHIFT

//| ser configurada para true.

//+--------------------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

292

Constantes Padro, Enumeradores e Estruturas


bool ChartShiftSizeSet(const double value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetDouble(chart_ID,CHART_SHIFT_SIZE,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_FIXED_POSITION posio fixa do grfico a partir da borda esquerda em valor percentual.


//+--------------------------------------------------------------------------+
//| A funo recebe a a localizao da posio fixa do grfico de limite

//| esquerdo em valor percentual.

//+--------------------------------------------------------------------------+
double ChartFixedPositionGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_FIXED_POSITION,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}
//+---------------------------------------------------------------------+
//| Funo configura a localizao da posio fixa do grfico de limite|
//| esquerdo em valor percentual.

Para visualizar a localizao da

//| posio fixa do grfico, o valor de propriedade

//| CHART_AUTOSCROLL deve ser definida como falsa.

//+---------------------------------------------------------------------+
bool ChartFixedPositionSet(const double value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetDouble(chart_ID,CHART_FIXED_POSITION,value))

2000-2014, MetaQuotes Software Corp.

293

Constantes Padro, Enumeradores e Estruturas


{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_FIXED_MAX propriedade para fixao mxima do grfico.


//+------------------------------------------------------------------+
//| A funo recebe o valor de fixao mxima do grfico.

//+------------------------------------------------------------------+
double ChartFixedMaxGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_FIXED_MAX,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}
//+------------------------------------------------------------------+
//| A funo configura o valor de fixao mxima do grfico.

//| Para alterar o valor da propriedade, valor da propriedade

//| CHART_SCALEFIX ser preliminarmente definida para

//| true.

//+------------------------------------------------------------------+
bool ChartFixedMaxSet(const double value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetDouble(chart_ID,CHART_FIXED_MAX,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

294

Constantes Padro, Enumeradores e Estruturas


}

CHART_FIXED_MIN propriedade para fixao mnima do grfico.


//+------------------------------------------------------------------+
//| A funo recebe o valor de fixao mnima do grfico.

//+------------------------------------------------------------------+
double ChartFixedMinGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_FIXED_MIN,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}
//+------------------------------------------------------------------+
//| A funo configura o valor de fixao mnima do grfico.

//| Para alterar o valor da propriedade, valor da propriedade

//| CHART_SCALEFIX ser preliminarmente definida para

//| true.

//+------------------------------------------------------------------+
bool ChartFixedMinSet(const double value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetDouble(chart_ID,CHART_FIXED_MIN,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_POINTS_PER_BAR valor da escala em pontos por barra.


//+---------------------------------------------------------------------------+
//| A funo recebe a o valor da escala do grfico em pontos por barra.

2000-2014, MetaQuotes Software Corp.

295

Constantes Padro, Enumeradores e Estruturas


//+---------------------------------------------------------------------------+
double ChartPointsPerBarGet(const long chart_ID=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_POINTS_PER_BAR,0,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}
//+----------------------------------------------------------------------+
//| Funo configura o valor da escala do grfico em pontos por barra.

//| Para ver o resultado da mudana do valor dessa propriedade,

//| o valor de propriedade

//| CHART_SCALE_PT_PER_BAR deve ser preliminarmente definido como true. |


//+----------------------------------------------------------------------+
bool ChartPointsPerBarSet(const double value,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetDouble(chart_ID,CHART_POINTS_PER_BAR,value))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

CHART_PRICE_MIN retorna o valor do mnimo do grfico.


//+---------------------------------------------------------------------------------+
//| A funo recebe a o valor mnimo do grfico na janela principal, ou numa

//| subjanela.

//+---------------------------------------------------------------------------------+
double ChartPriceMin(const long chart_ID=0,const int sub_window=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro

2000-2014, MetaQuotes Software Corp.

296

Constantes Padro, Enumeradores e Estruturas


ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}

CHART_PRICE_MAX retorna o valor do mximo do grfico.


//+--------------------------------------------------------------------------------+
//| A funo recebe a o valor mximo grfico na janela principal, ou numa

//| subjanela.

//+--------------------------------------------------------------------------------+
double ChartPriceMax(const long chart_ID=0,const int sub_window=0)
{
//--- preparar a varivel para obter o resultado
double result=EMPTY_VALUE;
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
}
//--- retorna o valor da propriedade do grfico
return(result);
}

CHART_COMMENT comentar sobre o grfico.


//+----------------------------------------------------------------------+
//| A funo recebe comentrio no canto superior esquerdo do grfico.

//+----------------------------------------------------------------------+
bool ChartCommentGet(string &result,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- receber o valor da propriedade
if(!ChartGetString(chart_ID,CHART_COMMENT,result))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());

2000-2014, MetaQuotes Software Corp.

297

Constantes Padro, Enumeradores e Estruturas


return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo configura comentrio no canto superior esquerda do

//| grfico.

//+------------------------------------------------------------------+
bool ChartCommentSet(const string str,const long chart_ID=0)
{
//--- redefine o valor de erro
ResetLastError();
//--- define valor de propriedade
if(!ChartSetString(chart_ID,CHART_COMMENT,str))
{
//--- exibe uma mensagem para o dirio Experts
Print(__FUNCTION__+", Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

Painel para propriedades do grfico


//--- conectar a biblioteca de elementos de controle
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//--- constantes predefinidas
#define X_PROPERTY_NAME_1

10

#define X_PROPERTY_VALUE_1

225 // coordenadas do valor da propriedade na primeira coluna

// coordenadas do nome da propriedade na primeira coluna

#define X_PROPERTY_NAME_2

345 // coordenadas do nome da propriedade na segunda e terceira colu

#define X_PROPERTY_VALUE_2

550 // coordenadas do valor da propriedade na segunda e terceira col

#define X_BUTTON_1

285 // coordenadas do boto na primeira coluna

#define X_BUTTON_2

700 // coordenadas do boto na segunda coluna

#define Y_PROPERTY_1

30

#define Y_PROPERTY_2

286 // y coordenadas do incio da terceira coluna

#define Y_DISTANCE

16

// y coordenadas do do incio da primeira e segunda coluna


// eixo y da distncia entre as linhas

#define LAST_PROPERTY_NUMBER 111 // nmero da ltima propriedade grfica


//--- parmetros de entrada
input color InpFirstColor=clrDodgerBlue; // Cor de linhas mpares
input color InpSecondColor=clrGoldenrod; // Cor de linhas pares
//--- variveis e arrays
CChartObjectLabel

ExtLabelsName[];

// etiquetas para exibir nomes das propriedades

CChartObjectLabel

ExtLabelsValue[]; // etiquetas para exibio dos valores da propriedade

CChartObjectButton ExtButtons[];

// botes

int

ExtNumbers[];

// ndices das propriedades

string

ExtNames[];

// nomes das propriedades

2000-2014, MetaQuotes Software Corp.

298

Constantes Padro, Enumeradores e Estruturas


uchar

ExtDataTypes[];

// tipos de dados de propriedade (integer, double, string)

uint

ExtGroupTypes[];

// array que armazena os dados de propriedades pertencente a u

uchar

ExtDrawTypes[];

// array que armazena os dados sobre o tipo de exibio da pro

double

ExtMaxValue[];

// valores mximos possveis das propriedades para se trabalha

double

ExtMinValue[];

// valores mnimos possveis das propriedades para se trabalha

double

ExtStep[];

// passos para alterar as propriedades

int

ExtCount;

// nmero total de todas as propriedades

color

ExtColors[2];

// array de cores para exibio das linhas

string

ExtComments[2];

// array de comentrios (para propriedade CHART_COMMENT)

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- exibir a comentrio no grfico
Comment("SomeComment");
//--- armazenam cores no array para alternarem entre eles mais tarde
ExtColors[0]=InpFirstColor;
ExtColors[1]=InpSecondColor;
//--- armazenam comentrios no array para alternarem entre eles mais tarde
ExtComments[0]="FirstComment";
ExtComments[1]="SecondComment";
//--- preparar e exibir o painel de controle para o gerenciamento das propriedades do grfico
if(!PrepareControls())
return(INIT_FAILED);
//--- sucesso na execuo
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de finalizao do expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- remover o comentrio no grfico
Comment("");
}
//+------------------------------------------------------------------+
//| Manipular eventos de um grfico

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- verificar o evento clicando no objeto do grfico
if(id==CHARTEVENT_OBJECT_CLICK)
{
//--- divide o nome do objeto pelo separador
string obj_name[];

2000-2014, MetaQuotes Software Corp.

299

Constantes Padro, Enumeradores e Estruturas


StringSplit(sparam,'_',obj_name);
//--- verifica se o objeto um boto
if(obj_name[0]=="Button")
{
//--- receber ndice de boto
int index=(int)StringToInteger(obj_name[1]);
//--- desfazer pressionando o boto
ExtButtons[index].State(false);
//--- definir o novo valor da propriedade dependendo do seu tipo
if(ExtDataTypes[index]=='I')
ChangeIntegerProperty(index);
if(ExtDataTypes[index]=='D')
ChangeDoubleProperty(index);
if(ExtDataTypes[index]=='S')
ChangeStringProperty(index);
}
}
//--- re-desenhar valores de propriedades
RedrawProperties();
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Alterar a propriedade inteira do grfico

//+------------------------------------------------------------------+
void ChangeIntegerProperty(const int index)
{
//--- receber o valor atual da propriedade
long value=ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index]);
//--- definir o seguinte valor da propriedade
switch(ExtDrawTypes[index])
{
case 'C':
value=GetNextColor((color)value);
break;
default:
value=(long)GetNextValue((double)value,index);
break;
}
//--- definir o novo valor de propriedade
ChartSetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[index],0,value);
}
//+------------------------------------------------------------------+
//| Alterar a propriedade double do grfico

//+------------------------------------------------------------------+
void ChangeDoubleProperty(const int index)
{
//--- receber o valor atual da propriedade
double value=ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index]);
//--- definir o seguinte valor da propriedade

2000-2014, MetaQuotes Software Corp.

300

Constantes Padro, Enumeradores e Estruturas


value=GetNextValue(value,index);
//--- definir o novo valor de propriedade
ChartSetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[index],value);
}
//+------------------------------------------------------------------+
//| Alterar a propriedade string do grfico

//+------------------------------------------------------------------+
void ChangeStringProperty(const int index)
{
//--- varivel esttica para comutao dentro do array ExtComments
static uint comment_index=1;
//--- alterar o ndice para receber outro comentrio
comment_index=1-comment_index;
//--- definir o novo valor de propriedade
ChartSetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[index],ExtComments[comment_index]);
}
//+------------------------------------------------------------------+
//| Definir o prximos valor da propriedade

//+------------------------------------------------------------------+
double GetNextValue(const double value,const int index)
{
if(value+ExtStep[index]<=ExtMaxValue[index])
return(value+ExtStep[index]);
else
return(ExtMinValue[index]);
}
//+------------------------------------------------------------------+
//| Receber a prxima cor para a propriedade tipo color

//+------------------------------------------------------------------+
color GetNextColor(const color clr)
{
//--- retornar o seguinte valor de cor
switch(clr)
{
case clrWhite: return(clrRed);
case clrRed:

return(clrGreen);

case clrGreen: return(clrBlue);


case clrBlue:

return(clrBlack);

default:

return(clrWhite);

}
}
//+------------------------------------------------------------------+
//| Re-desenhar valores de propriedades

//+------------------------------------------------------------------+
void RedrawProperties(void)
{
//--- texto de valor da propriedade
string text;
long

value;

2000-2014, MetaQuotes Software Corp.

301

Constantes Padro, Enumeradores e Estruturas


//--- loop do nmero de propriedades
for(int i=0;i<ExtCount;i++)
{
text="";
switch(ExtDataTypes[i])
{
case 'I':
//--- receber o valor atual da propriedade
if(!ChartGetInteger(0,(ENUM_CHART_PROPERTY_INTEGER)ExtNumbers[i],0,value))
break;
//--- texto de propriedade inteiro
switch(ExtDrawTypes[i])
{
//--- propriedade color
case 'C':
text=(string)((color)value);
break;
//--- propriedade boolean
case 'B':
text=(string)((bool)value);
break;
//--- propriedade do enumerador ENUM_CHART_MODE
case 'M':
text=EnumToString((ENUM_CHART_MODE)value);
break;
//--- propriedade do enumerador ENUM_CHART_VOLUME_MODE
case 'V':
text=EnumToString((ENUM_CHART_VOLUME_MODE)value);
break;
//--- nmero tipo int
default:
text=IntegerToString(value);
break;
}
break;
case 'D':
//--- texto de propriedade double
text=DoubleToString(ChartGetDouble(0,(ENUM_CHART_PROPERTY_DOUBLE)ExtNumbers[i]),4);
break;
case 'S':
//--- texto de propriedade string
text=ChartGetString(0,(ENUM_CHART_PROPERTY_STRING)ExtNumbers[i]);
break;
}
//--- mostrar valor de propriedade
ExtLabelsValue[i].Description(text);
}
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

302

Constantes Padro, Enumeradores e Estruturas


//| Criar o painel para o gerenciamento das propriedades do grfico |
//+------------------------------------------------------------------+
bool PrepareControls(void)
{
//--- alocar memria para arrays com uma reserva
MemoryAllocation(LAST_PROPERTY_NUMBER+1);
//--- variveis
int i=0;

// loop varivel

int col_1=0; // nmero de propriedades na primeira coluna


int col_2=0; // nmero de propriedade na segunda coluna
int col_3=0; // mmero de propriedade na terceira coluna
//--- nmero atual de propriedades - 0
ExtCount=0;
//--- observando propriedades no loop
while(i<=LAST_PROPERTY_NUMBER)
{
//--- armazenar o nmero atual de propriedades
ExtNumbers[ExtCount]=i;
//--- incrementar o valor da varivel do loop
i++;
//--- verificar se existe uma propriedade com tal nmero

if(CheckNumber(ExtNumbers[ExtCount],ExtNames[ExtCount],ExtDataTypes[ExtCount],ExtGroupTypes[E
{
//--- criar elementos de controle para a propriedade
switch(ExtGroupTypes[ExtCount])
{
case 1:
//--- criar etiquetas e um boto para a propriedade

if(!ShowProperty(ExtCount,0,X_PROPERTY_NAME_1,X_PROPERTY_VALUE_1,X_BUTTON_1,Y_PROPER
return(false);
//--- nmero de elementos na primeira coluna foi incrementado
col_1++;
break;
case 2:
//--- criar etiquetas e um boto para a propriedade

if(!ShowProperty(ExtCount,1,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,X_BUTTON_2,Y_PROPER
return(false);
//--- nmero de elementos na segunda coluna foi incrementado
col_2++;
break;
case 3:
//--- criar apenas etiquetas para a propriedade

if(!ShowProperty(ExtCount,2,X_PROPERTY_NAME_2,X_PROPERTY_VALUE_2,0,Y_PROPERTY_2+col_
return(false);
//--- nmero de elementos na terceira coluna foi incrementado
col_3++;
break;
}
//--- definir o mximo e o mnimo do valor e da etapa da propriedade

2000-2014, MetaQuotes Software Corp.

303

Constantes Padro, Enumeradores e Estruturas

GetMaxMinStep(ExtNumbers[ExtCount],ExtMaxValue[ExtCount],ExtMinValue[ExtCount],ExtStep[Ext
//--- incrementar o nmero de propriedades
ExtCount++;
}
}
//--- liberar a memria no usada pelos arrays
MemoryAllocation(ExtCount);
//--- re-desenhar valores de propriedades
RedrawProperties();
ChartRedraw();
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alocar memria para os 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);
}
//+------------------------------------------------------------------+
//| Verificar se o ndice de propriedade pertence a um de

//| enumerador ENUM_CHART_PROPERTIES

//+------------------------------------------------------------------+
bool CheckNumber(const int ind,string &name,uchar &data_type,uint &group_type,uchar &draw_type)
{
//--- verificar se a propriedade do tipo integer
ResetLastError();
name=EnumToString((ENUM_CHART_PROPERTY_INTEGER)ind);
if(_LastError==0)
{
data_type='I';

// propriedade do enumerador ENUM_CHART_PROPERTY_INTEGER

GetTypes(ind,group_type,draw_type); // definir parmetros da propriedade display


return(true);
}
//--- verificar se a propriedade do tipo double
ResetLastError();
name=EnumToString((ENUM_CHART_PROPERTY_DOUBLE)ind);
if(_LastError==0)

2000-2014, MetaQuotes Software Corp.

304

Constantes Padro, Enumeradores e Estruturas


{
data_type='D';

// propriedade do enumerador ENUM_CHART_PROPERTY_DOUBLE

GetTypes(ind,group_type,draw_type); // definir parmetros da propriedade display


return(true);
}
//--- verificar se a proprieade do tipo string
ResetLastError();
name=EnumToString((ENUM_CHART_PROPERTY_STRING)ind);
if(_LastError==0)
{
data_type='S';

// propriedade do enumerador ENUM_CHART_PROPERTY_STRING

GetTypes(ind,group_type,draw_type); // definir parmetros da propriedade display


return(true);
}
//--- propriedade no pertence a qualquer enumerao
return(false);
}
//+------------------------------------------------------------------+
//| Definir o grupo que a propriedade ser armazenada em

//| bem como seu tipo de exibio

//+------------------------------------------------------------------+
void GetTypes(const int property_number,uint &group_type,uchar &draw_type)
{
//--- verificar se a propriedade pertence ao terceiro grupo

//--- propriedades terceiro grupo so apresentados na segunda coluna, a partir de CHART_BRING_TO_TO


if(CheckThirdGroup(property_number,group_type,draw_type))
return;
//--- verificar se a propriedade pertence ao segundo grupo
//--- propriedades terceiro grupo so apresentados no incio da segunda coluna
if(CheckSecondGroup(property_number,group_type,draw_type))
return;
//--- se voc est aqui, a propriedade pertence ao primeiro grupo (primeira coluna)
CheckFirstGroup(property_number,group_type,draw_type);
}
//+----------------------------------------------------------------------+
//| A funo verifica se a propriedade pertence ao terceiro grupo e

//| define o seu tipo display no caso de uma resposta positiva

//+----------------------------------------------------------------------+
bool CheckThirdGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- verificar se a propriedade pertence ao terceiro grupo
switch(property_number)
{
//--- propriedades boolean
case CHART_IS_OBJECT:
case CHART_WINDOW_IS_VISIBLE:
draw_type='B';
break;
//--- propriedades inteiro

2000-2014, MetaQuotes Software Corp.

305

Constantes Padro, Enumeradores e Estruturas


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;
//--- propriedades double
case CHART_PRICE_MIN:
case CHART_PRICE_MAX:
draw_type='D';
break;
//--- na verdade, esta propriedade um comando para exibir o grfico em cima de todos os
//--- no h necessidade de aplicar este painel, como a janela sempre ser
//--- em cima das outras antes de a usarmos
case CHART_BRING_TO_TOP:
draw_type=' ';
break;
//--- propriedade no pertencem ao terceiro grupo
default:
return(false);
}
//--- propriedade pertencem ao terceiro grupo
group_type=3;
return(true);
}
//+----------------------------------------------------------------------+
//| A funo verifica se a propriedade pertence ao segundo grupo e

//| define o seu tipo display no caso de uma resposta positiva

//+----------------------------------------------------------------------+
bool CheckSecondGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- verificar se a propriedade pertence ao segundo grupo
switch(property_number)
{
//--- propriedade de tipo ENUM_CHART_MODE
case CHART_MODE:
draw_type='M';
break;
//--- propriedade de tipo ENUM_CHART_VOLUME_MODE
case CHART_SHOW_VOLUMES:
draw_type='V';
break;
//--- propriedade string
case CHART_COMMENT:
draw_type='S';
break;

2000-2014, MetaQuotes Software Corp.

306

Constantes Padro, Enumeradores e Estruturas


//--- propriedade color
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;
//--- propriedade no pertence ao segundo grupo
default:
return(false);
}
//--- propriedade pertence ao segundo grupo
group_type=2;
return(true);
}
//+-----------------------------------------------------------------------+
//| Esta funo chamada apenas se ela j conhecida

//| a propriedade no do segundo e terceiro grupos de propriedades

//+-----------------------------------------------------------------------+
void CheckFirstGroup(const int property_number,uint &group_type,uchar &draw_type)
{
//--- a propriedade pertence ao primeiro grupo
group_type=1;
//--- definir a propriedade tipo display
switch(property_number)
{
//--- propriedades inteiro
case CHART_SCALE:
case CHART_HEIGHT_IN_PIXELS:
draw_type='I';
return;
//--- propriedades double
case CHART_SHIFT_SIZE:
case CHART_FIXED_POSITION:
case CHART_FIXED_MAX:
case CHART_FIXED_MIN:
case CHART_POINTS_PER_BAR:
draw_type='D';
return;
//--- ficaram apenas as propriedades boolean

2000-2014, MetaQuotes Software Corp.

307

Constantes Padro, Enumeradores e Estruturas


default:
draw_type='B';
return;
}
}
//+------------------------------------------------------------------+
//| Criar uma etiqueta e um boto para a propriedade

//+------------------------------------------------------------------+
bool ShowProperty(const int ind,const int type,const int x1,const int x2,
const int xb,const int y,const bool btn)
{
//--- array esttico para comutar dentro do array de cor ExtColors
static uint color_index[3]={1,1,1};
//--- alterar o ndice para receber uma outra cor
color_index[type]=1-color_index[type];
//--- etiquetas display e um boto (se btn = true) para a propriedade

if(!LabelCreate(ExtLabelsName[ind],"name_"+(string)ind,ExtNames[ind],ExtColors[color_index[type]
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);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| criar um rtulo

//+------------------------------------------------------------------+
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);

//--- sucesso na execuo


return(true);
}
//+------------------------------------------------------------------+
//| Criar o boto

//+------------------------------------------------------------------+
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("Prximo"))

return(false);

if(!btn.FontSize(10))

return(false);

if(!btn.Color(clrBlack))

return(false);

if(!btn.BackColor(clrWhite))

return(false);

2000-2014, MetaQuotes Software Corp.

308

Constantes Padro, Enumeradores e Estruturas


if(!btn.BorderColor(clrBlack))

return(false);

//--- sucesso na execuo


return(true);
}
//+------------------------------------------------------------------+
//| Definir o mximo e o mnimo do valor e da etapa propriedade

//+------------------------------------------------------------------+
void GetMaxMinStep(const int property_number,double &max,double &min,double &step)
{
double value;
//--- definir os valores dependendo do tipo de propriedade
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);
max=value;
min=value*0.75;

2000-2014, MetaQuotes Software Corp.

309

Constantes Padro, Enumeradores e Estruturas


step=value/32;
break;
case CHART_HEIGHT_IN_PIXELS:
max=700;
min=520;
step=30;
break;
//--- valores default
default:
max=1;
min=0;
step=1;
}
}

2000-2014, MetaQuotes Software Corp.

310

Constantes Padro, Enumeradores e Estruturas

Constantes de Objetos
Existem 44 objetos grficos que podem ser criados e exibidos no grfico de preos. Todas as
constantes para se trabalhar com objetos esto divididos em 9 grupos:
Tipos de Objetos Identificadores de objetos grficos;
Propriedades de objeto atribuio e obteno de propriedades de objetos grficos;
Mtodos de vinculao de objeto constantes de posicionamento no grfico;
Canto de vinculao uma indicao do ngulo da tabela, que est posicionada sobre o objeto;
Visibilidade de objetos definio de janelas de tempo em que um objeto visvel;
Nveis de Ondas de Elliott marcao de gradao de onda;
Objetos Gann constantes de tendncia para ventilador de Gann e grade de Gann;
Cores Web constantes de cores Web pr-definidos;
Wingdings cdigos de caracteres da fonte Wingdings.

2000-2014, MetaQuotes Software Corp.

311

Constantes Padro, Enumeradores e Estruturas

Tipos de Objeto
Quando um objeto grfico criado usando a funo ObjectCreate(), necessrio especificar o tipo de
objeto a ser criado, que pode ser um dos valores da enumerao ENUM_OBJECT. Especificaes
adicionais de propriedades de objetos so possveis usando funes para trabalhar com objetos
grficos.
ENUM_OBJECT
ID

Descrio

OBJ_VLINE

Linha Vertical

OBJ_HLINE

Linha Horizontal

OBJ_TREND

Linha de Tendncia

OBJ_TRENDBYANGLE

Linha de Tendncia por ngulo

OBJ_CYCLES

Linhas de Ciclo

OBJ_ARROWED_LINE

Linha de Seta

OBJ_CHANNEL

Canal Eqidistante

OBJ_STDDEVCHANNEL

Canal de Desvio Padro

OBJ_REGRESSION

Canal de Regresso Linear

OBJ_PITCHFORK

Forquilha de Andrews

OBJ_GANNLINE

Linha Gann

OBJ_GANNFAN

Ventilador Gann

OBJ_GANNGRID

Grade Gann

OBJ_FIBO

Retrao de Fibonacci

OBJ_FIBOTIMES

Fusos Horrios de Fibonacci

OBJ_FIBOFAN

Fibonacci Fan

OBJ_FIBOARC

Arcos de Fibonacci

OBJ_FIBOCHANNEL

Canal de Fibonacci

OBJ_EXPANSION

Expanso de Fibonacci

OBJ_ELLIOTWAVE5

Onda Motriz de Elliott

OBJ_ELLIOTWAVE3

Onde de Correo de Elliott

OBJ_RECTANGLE

Retngulo

OBJ_TRIANGLE

Tringulo

OBJ_ELLIPSE

Elipse

OBJ_ARROW_THUMB_UP

Polegares para cima

OBJ_ARROW_THUMB_DOWN

Polegar para Baixo

2000-2014, MetaQuotes Software Corp.

312

Constantes Padro, Enumeradores e Estruturas


OBJ_ARROW_UP

Seta para cima

OBJ_ARROW_DOWN

Seta para baixo

OBJ_ARROW_STOP

Sinal Stop

OBJ_ARROW_CHECK

Conferido

OBJ_ARROW_LEFT_PRICE

Etiqueta de Preo Esquerda

OBJ_ARROW_RIGHT_PRICE

Rtulo de Preo Direito

OBJ_ARROW_BUY

Comprar

OBJ_ARROW_SELL

Vender

OBJ_ARROW

Seta

OBJ_TEXT

Texto

OBJ_LABEL

Rtulo

OBJ_BUTTON

Boto

OBJ_CHART

Grfico

OBJ_BITMAP

Bitmap

OBJ_BITMAP_LABEL

Rtulo Bitmap

OBJ_EDIT

Edio

OBJ_EVENT

O
objeto
"Evento"
correspondendo a um evento
no calendrio econmico

OBJ_RECTANGLE_LABEL

O objeto "Rtulo de Retngulo"


para criao e design de
interface grfico customizada.

2000-2014, MetaQuotes Software Corp.

313

Constantes Padro, Enumeradores e Estruturas

OBJ_VLINE
Linha vertical.

Observao
Ao desenhar uma linha vertical, possvel definir o modo de exibio de linha para todas as janelas
do (propriedade OBJPROP_RAY).
Exemplo
O seguinte script cria e move a linha vertical no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.
//--- descrio
#property description "Script desenha objeto grfico \" Linha Vertical\"."
#property description "Coordenadas do ponto de ancoragem configurado em porcentagem da"
#property description "largura da janela do grfico em barras."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="VLine";

// Nome da Linha

input int

InpDate=25;

// Data do Evento, %

input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo da linha


input int

InpWidth=3;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRay=true;

// Continuao da linha para baixo

2000-2014, MetaQuotes Software Corp.

314

Constantes Padro, Enumeradores e Estruturas


input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar a linha vertical

//+------------------------------------------------------------------+
bool VLineCreate(const long

chart_ID=0,

// ID do grfico

const string

name="VLine",

// nome da linha

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// tempo da linha

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha


const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray=true,

// continuao da linha para baixo

const bool

hidden=true,

//ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- se o tempo de linha no est definido, desenh-lo atravs da ltima barra
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- criar uma linha vertical
if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
{
Print(__FUNCTION__,
": falha ao criar uma linha vertical! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor da linha
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de exibio da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (verdadeiro) ou desabilitar (falso) o modo de exibio da linha no grfico sub-jane
ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico

2000-2014, MetaQuotes Software Corp.

315

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover a linha vertical

//+------------------------------------------------------------------+
bool VLineMove(const long

chart_ID=0,

// ID do grfico

const string name="VLine", // nome da linha


datetime

time=0)

// tempo da linha

{
//--- se o tempo de linha no est definido, mover a linha para a ltima barra
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- mover a linha vertical
if(!ObjectMove(chart_ID,name,0,time,0))
{
Print(__FUNCTION__,
": falhou ao mover a linha vertical! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir a linha vertical

//+------------------------------------------------------------------+
bool VLineDelete(const long

chart_ID=0,

// ID do grfico

const string name="VLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a linha vertical
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao deletar a linha vertical! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{

2000-2014, MetaQuotes Software Corp.

316

Constantes Padro, Enumeradores e Estruturas


//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- array para armazenar a data de valores a serem utilizados
//--- para definir e alterar as coordenadas de pontos de ancoragem
datetime date[];
//--- alocao de memria
ArrayResize(date,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- definir os pontos para desenhar a linha
int d=InpDate*(bars-1)/100;
//--- criar uma linha vertical
if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack,
InpSelection,InpRay,InpHidden,InpZOrder))
return;
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover a linha
//--- contador de loop
int h_steps=bars/2;
//--- mover a linha
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!VLineMove(0,InpName,date[d]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.03 segundos de atraso
Sleep(30);
}

2000-2014, MetaQuotes Software Corp.

317

Constantes Padro, Enumeradores e Estruturas


//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
VLineDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

318

Constantes Padro, Enumeradores e Estruturas

OBJ_HLINE
Linha Horizontal.

Exemplo
O seguinte script cria e move uma linha horizontal no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha o objeto grfico \"Linha Horizontal\"."
#property description "Ponto de ancoragem do preo est definido em percentagem da altura do"
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="HLine";

// Nome da linha

input int

InpPrice=25;

// Preo da linha, %

input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo da linha


input int

InpWidth=3;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar a linha horizontal

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

319

Constantes Padro, Enumeradores e Estruturas


bool HLineCreate(const long

chart_ID=0,

// ID de grfico

const string

name="HLine",

// nome da linha

const int

sub_window=0,

// ndice da sub-janela

double

price=0,

// line price

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha


const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

//ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- se o preo no est definido, defina-o no atual nvel de preo Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- criar um linha horizontal
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
{
Print(__FUNCTION__,
": falha ao criar um linha horizontal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor da linha
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de exibio da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover linha horizontal

//+------------------------------------------------------------------+
bool HLineMove(const long

chart_ID=0,

// ID do grfico

2000-2014, MetaQuotes Software Corp.

320

Constantes Padro, Enumeradores e Estruturas


const string name="HLine", // nome da linha
double

price=0)

// preo da linha

{
//--- se o preo no est definido, defina-o no atual nvel de preo Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover um linha horizontal
if(!ObjectMove(chart_ID,name,0,0,price))
{
Print(__FUNCTION__,
": falha ao mover um linha horizontal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir uma linha horizontal

//+------------------------------------------------------------------+
bool HLineDelete(const long

chart_ID=0,

// ID do grfico

const string name="HLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir uma linha horizontal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao Excluir um linha horizontal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- tamanho do array de preo
int accuracy=1000;

2000-2014, MetaQuotes Software Corp.

321

Constantes Padro, Enumeradores e Estruturas


//--- array para armazenar data de valores a serem utilizados
//--- para definir e alterar as coordenadas de pontos de ancoragem
double price[];
//--- alocao de memria
ArrayResize(price,accuracy);
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a linha
int p=InpPrice*(accuracy-1)/100;
//--- criar um linha horizontal
if(!HLineCreate(0,InpName,0,price[p],InpColor,InpStyle,InpWidth,InpBack,
InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover a linha
//--- contador de loop
int v_steps=accuracy/2;
//--- mover a linha
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p<accuracy-1)
p+=1;
//--- mover o ponto
if(!HLineMove(0,InpName,price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a partir do grfico
HLineDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);

2000-2014, MetaQuotes Software Corp.

322

Constantes Padro, Enumeradores e Estruturas


//--}

2000-2014, MetaQuotes Software Corp.

323

Constantes Padro, Enumeradores e Estruturas

OBJ_TREND
Linha de Tendncia.

Observao
Para Linha de Tendncia, possvel especificar o modo de continuao da sua exibio para a
direita e/ou esquerda (de acordo com as propriedadesOBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT).
Exemplo
O script a seguir cria e movimenta a linha de tendncia no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha o objeto grfico \"Linha de Tendncia\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Trend";

// Nome da linha

input int

InpDate1=35;

// Data do 1 ponto, %

input int

InpPrice1=60;

// Preo do 1 ponto, %

input int

InpDate2=65;

// Data do 2 ponto, %

input int

InpPrice2=40;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor da linha

2000-2014, MetaQuotes Software Corp.

324

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo da linha
input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao da Linha para a esquerda

input bool

InpRayRight=false;

// Continuao da Linha para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar uma linha de tendncia pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool TrendCreate(const long

chart_ID=0,

// ID do grfico

const string

name="TrendLine",

// nome da linha

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha


const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao da linha para a esquerda

const bool

ray_right=false,

// continuao da linha para a direita

const bool

hidden=true,

//ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeTrendEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma linha de tendncia pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar uma linha de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor da linha
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de exibio da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser

2000-2014, MetaQuotes Software Corp.

325

Constantes Padro, Enumeradores e Estruturas


//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover o ponto de ancoragem da linha de tendncia

//+------------------------------------------------------------------+
bool TrendPointChange(const long

chart_ID=0,

// ID do grfico

const string name="TrendLine", // nome da linha


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem da linha de tendncia
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo exclui a linha de tendncia do grfico.

//+------------------------------------------------------------------+
bool TrendDelete(const long

chart_ID=0,

// ID do grfico

const string name="TrendLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();

2000-2014, MetaQuotes Software Corp.

326

Constantes Padro, Enumeradores e Estruturas


//--- excluir uma linha de tendncia
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir uma linha de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verifique os valores de pontos de ancoragem da linha de tendncia|
//| e definir padres valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do segundo ponto no est definido, igual ao primeiro ponto
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico

2000-2014, MetaQuotes Software Corp.

327

Constantes Padro, Enumeradores e Estruturas


int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem da linha
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a linha
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar uma linha de tendncia
if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem da linha
//--- contador de loop
int v_steps=accuracy/5;
//--- mover o primeiro ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto

2000-2014, MetaQuotes Software Corp.

328

Constantes Padro, Enumeradores e Estruturas


if(!TrendPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- mover o segundo ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2<accuracy-1)
p2+=1;
//--- mover o ponto
if(!TrendPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- meio segundo de atraso
Sleep(500);
//--- contador de loop
int h_steps=bars/2;
//--- mover ambos os pontos de ancoragem na horizontal, ao mesmo tempo
for(int i=0;i<h_steps;i++)
{
//--- usar os seguintes valores
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- deslocar os pontos
if(!TrendPointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!TrendPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.03 segundos de atraso
Sleep(30);
}
//--- 1 segundo de atraso

2000-2014, MetaQuotes Software Corp.

329

Constantes Padro, Enumeradores e Estruturas


Sleep(1000);
//--- excluir uma linha de tendncia
TrendDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

330

Constantes Padro, Enumeradores e Estruturas

OBJ_TRENDBYANGLE
Linha de Tendncia Por ngulo.

Observao
Para Linha de Tendncia Por Angulo, possvel determinar o modo de continuao da sua exibio
para a direita e/ou esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT).
Tanto ngulo e coordenadas do segundo ponto de ancoragem podem ser usados para definir a
inclinao da linha.
Exemplo
O script a seguir cria e movimenta a linha de tendncia no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Linha de Tendncia Por ngulo\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Trend";

// Nome da linha

input int

InpDate1=50;

// Data do 1 ponto, %

input int

InpPrice1=75;

// Preo do 1 ponto, %

input int

InpAngle=0;

// ngulo de inclinao da linha

2000-2014, MetaQuotes Software Corp.

331

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao da Linha para a esquerda

input bool

InpRayRight=true;

// Continuao da Linha para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar uma linha de tendncia por ngulo

//+------------------------------------------------------------------+
bool TrendByAngleCreate(const long

chart_ID=0,

// ID do grfico

const string

name="TrendLine",

// nome da linha

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// tempo do ponto

double

price=0,

// preo do ponto

const double

angle=45.0,

// ngulo de inclinao

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha


const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao da linha para a esq

const bool

ray_right=true,

// continuao da linha para a dir

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- criar o segundo ponto para facilitar, arrastando a linha de tendncia com o mouse
datetime time2=0;
double

price2=0;

//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos


ChangeTrendEmptyPoints(time,price,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma linha de tendncia usando dois pontos
if(!ObjectCreate(chart_ID,name,OBJ_TRENDBYANGLE,sub_window,time,price,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar uma linha de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}

//--- alterar o ngulo de inclinao da linha de tendncia, quando se muda o ngulo, as coordenadas
//--- ponto da linha so redefinidos automaticamente de acordo com o novo valor do ngulo
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- definir cor da linha
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir estilo de linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

2000-2014, MetaQuotes Software Corp.

332

Constantes Padro, Enumeradores e Estruturas


//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar ponto de ancoragem das coordenadas da linha de tendncia|
//+------------------------------------------------------------------+
bool TrendPointChange(const long

chart_ID=0,

// ID do grfico

const string name="TrendLine", // nome da linha


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem da linha de tendncia
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mudar o ngulo de inclinao da linha de tendncia

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

333

Constantes Padro, Enumeradores e Estruturas


bool TrendAngleChange(const long

chart_ID=0,

// ID do grafico

const string name="TrendLine", // nome da linha de tendncia


const double angle=45)

// inclinao do ngulo da linha de tendncia

{
//--- redefine o valor de erro
ResetLastError();
//--- mudar o ngulo de inclinao da linha de tendncia
if(!ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle))
{
Print(__FUNCTION__,
": falha ao mudar a inclinao da linha! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir a linha de tendncia

//+------------------------------------------------------------------+
bool TrendDelete(const long

chart_ID=0,

// ID do grfico

const string name="TrendLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir uma linha de tendncia
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir uma linha de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verifique os valores de pontos de ancoragem da linha de tendncia|
//| e definir padres valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- coordenadas do segundo ponto auxiliar
//--- o segundo ponto ser 9 barras a esquerda e tendo o mesmo preo

2000-2014, MetaQuotes Software Corp.

334

Constantes Padro, Enumeradores e Estruturas


datetime second_point_time[10];
CopyTime(Symbol(),Period(),time1,10,second_point_time);
time2=second_point_time[0];
price2=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem da linha
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a linha
int d1=InpDate1*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- criar uma linha de tendncia
if(!TrendByAngleCreate(0,InpName,0,date[d1],price[p1],InpAngle,InpColor,InpStyle,
InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{

2000-2014, MetaQuotes Software Corp.

335

Constantes Padro, Enumeradores e Estruturas


return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover e girar a linha
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o ponto de ancoragem e alterar o ngulo de inclinao da linha
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto
if(!TrendPointChange(0,InpName,date[d1],price[p1]))
return;
if(!TrendAngleChange(0,InpName,18*(i+1)))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a partir do grfico
TrendDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

336

Constantes Padro, Enumeradores e Estruturas

OBJ_CYCLES
Linhas Cycle.

Observao
A distncia entre as linhas definida por coordenadas de tempo de dois pontos de ancoragem do
objeto.
Exemplo
O seguinte script cria e move a linha cycle no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "script cria a linha cycle no grfico."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Cycles";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=45;

// Preo do 1 ponto, %

input int

InpDate2=20;

// Data do 2 ponto, %

input int

InpPrice2=55;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor das linhas cycle

input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Estilo das linhas cycle

2000-2014, MetaQuotes Software Corp.

337

Constantes Padro, Enumeradores e Estruturas


input int

InpWidth=1;

// Largura das linhas cycle

input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criao das linhas cycle

//+------------------------------------------------------------------+
bool CyclesCreate(const long

chart_ID=0,

// ID de grfico

const string

name="Cycles",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor das linhas cycle

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas cycle


const int

width=1,

// largura das linhas cycle

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetot

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeCyclesEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar linhas cycle pelas coordenadas dadas
if(!ObjectCreate(chart_ID,name,OBJ_CYCLES,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar linhas cycle! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a exibio do estilo das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento das linhas com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto

2000-2014, MetaQuotes Software Corp.

338

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool CyclesPointChange(const long

chart_ID=0,

// ID do grfico

const string name="Cycles", // nome do objeto


const int

point_index=0, // ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem do tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir as linhas cycle

//+------------------------------------------------------------------+
bool CyclesDelete(const long

chart_ID=0,

// ID do grfico

const string name="Cycles") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir as linhas cycle
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir linhas cycle! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

339

Constantes Padro, Enumeradores e Estruturas


}
//+-----------------------------------------------------------------------+
//| Ver os valores de pontos de ancoragem das linhas cycle e definir

//| valores padro para valores vazios

//+-----------------------------------------------------------------------+
void ChangeCyclesEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do segundo ponto no est definido, igual ao primeiro ponto
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem das linhas cycle
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);

2000-2014, MetaQuotes Software Corp.

340

Constantes Padro, Enumeradores e Estruturas


ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar as linhas cycle
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar uma linha de tendncia
if(!CyclesCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int h_steps=bars/5;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
//--- mover o ponto
if(!CyclesPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);

2000-2014, MetaQuotes Software Corp.

341

Constantes Padro, Enumeradores e Estruturas


}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
h_steps=bars/4;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d1<bars-1)
d1+=1;
//--- mover o ponto
if(!CyclesPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
CyclesDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

342

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROWED_LINE
Linha de seta.

Exemplo
O seguinte script cria e move uma linha de seta no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \" linha Arrowed\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ArrowedLine"; // Nome da linha

input int

InpDate1=35;

// Data do 1 ponto, %

input int

InpPrice1=60;

// Preo do 1 ponto, %

input int

InpDate2=65;

// Data do 2 ponto, %

input int

InpPrice2=40;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASH;

// Estilo da linha

input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

2000-2014, MetaQuotes Software Corp.

343

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
//| Criar uma linha de setas pelas coordenadas determinadas

//+------------------------------------------------------------------+
bool ArrowedLineCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ArrowedLine", // nome da linha

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID,

// estilo da linha

const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destacar para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowedLineEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma linha de setas pelas coordenadas determinadas
if(!ObjectCreate(chart_ID,name,OBJ_ARROWED_LINE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar uma linha de seta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor da linha
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de exibio da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

344

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Mover o ponto de ancoragem da linha de seta

//+------------------------------------------------------------------+
bool ArrowedLinePointChange(const long

chart_ID=0,

// ID do grfico

const string name="ArrowedLine", // nome da linha


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de

double

price=0)

// coordenada do ponto de ancoragem de

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem da linha
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo remove a linha de setas a partir do grfico

//+------------------------------------------------------------------+
bool ArrowedLineDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowedLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();
//--- deletar uma linha de seta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao criar uma linha de seta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Conferir valores dos pontos de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

345

Constantes Padro, Enumeradores e Estruturas


void ChangeArrowedLineEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do segundo ponto no est definido, igual ao primeiro ponto
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem da linha
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{

2000-2014, MetaQuotes Software Corp.

346

Constantes Padro, Enumeradores e Estruturas


Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a linha
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar uma linha de seta
if(!ArrowedLineCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem da linha
//--- contador de loop
int v_steps=accuracy/5;
//--- mover o segundo ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2<accuracy-1)
p2+=1;
//--- mover o ponto
if(!ArrowedLinePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- mover o primeiro ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;

2000-2014, MetaQuotes Software Corp.

347

Constantes Padro, Enumeradores e Estruturas


//--- mover o ponto
if(!ArrowedLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- meio segundo de atraso
Sleep(500);
//--- contador de loop
int h_steps=bars/2;
//--- mover ambos os pontos de ancoragem na horizontal, ao mesmo tempo
for(int i=0;i<h_steps;i++)
{
//--- usar os seguintes valores
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- deslocar os pontos
if(!ArrowedLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ArrowedLinePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.03 segundos de atraso
Sleep(30);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar uma linha de seta
ArrowedLineDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

348

Constantes Padro, Enumeradores e Estruturas

OBJ_CHANNEL
Canal Eqidistante

Observao
Para um canal eqidistante, possvel especificar o modo de sua continuao para a direita e/ou
esquerda (de acordo com as propriedades (OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT). O modo de
preenchimento colorido do canal tambm pode ser definido.
Exemplo
O seguinte script cria e move um canal eqidistante no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha um objeto grfico tipo \"canal eqidistante\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Channel";

// Nome do canal

input int

InpDate1=25;

// Data do 1 ponto, %

input int

InpPrice1=60;

// Preo do 1 ponto, %

input int

InpDate2=65;

// Data do 2 ponto, %

input int

InpPrice2=80;

// Preo do 2 ponto, %

input int

InpDate3=30;

// Data do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

349

Constantes Padro, Enumeradores e Estruturas


input int

InpPrice3=40;

// Data do 3 ponto, %

input color

InpColor=clrRed;

// Cor do canal

input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo das linhas do canal


input int

InpWidth=2;

// Largura da linha do canal

input bool

InpBack=false;

// Canal de Fundo

input bool

InpFill=false;

// Preenchendo o canal com cor

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do canal para a esquerda

input bool

InpRayRight=false;

// Continuao do canal para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar um canal eqidistante pelas coordenadas dadas

//+------------------------------------------------------------------+
bool ChannelCreate(const long

chart_ID=0,

// ID de grfico

const string

name="Channel",

// nome do canal

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do canal


const int

width=1,

// largura das linhas do canal

const bool

fill=false,

// preenchendo o canal cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do canal para a esquerda

const bool

ray_right=false,

// continuao do canal para a direita

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- criar um canal pelas coordenadas dadas
if(!ObjectCreate(chart_ID,name,OBJ_CHANNEL,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": falha ao criar um canal eqidistante! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor do canal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

2000-2014, MetaQuotes Software Corp.

350

Constantes Padro, Enumeradores e Estruturas


//--- definir a largura da linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ChannelPointChange(const long

chart_ID=0,

// ID do grfico

const string name="Channel", // nome do canal


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}

2000-2014, MetaQuotes Software Corp.

351

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
//| Excluir o canal

//+------------------------------------------------------------------+
bool ChannelDelete(const long

chart_ID=0,

// ID do grfico

const string name="Channel") // nome do canal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o canal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+-------------------------------------------------------------------------+
//| Ver os valores de pontos de ancoragem do canal e definir valores padro|
//| para aqueles que esto vazios

//+-------------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- se o tempo do segundo ponto (a direita)no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto (a esquerda) no est definido, est localizado 9 barras a esque
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price1)
price1=price2+300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do terceiro ponto no est definido,ele coincide com o tempo do primeiro ponto
if(!time3)
time3=time1;
//--- se o preo do terceiro ponto no est definido, igual ao preo do segundo ponto
if(!price3)
price3=price2;

2000-2014, MetaQuotes Software Corp.

352

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do canal
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o canal
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;
//--- criar o canal eqidistante

if(!ChannelCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],InpColor,

2000-2014, MetaQuotes Software Corp.

353

Constantes Padro, Enumeradores e Estruturas


InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do canal
//--- contador de loop
int h_steps=bars/6;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
//--- mover o ponto
if(!ChannelPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d1>1)
d1-=1;
//--- mover o ponto
if(!ChannelPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop

2000-2014, MetaQuotes Software Corp.

354

Constantes Padro, Enumeradores e Estruturas


int v_steps=accuracy/10;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p3>1)
p3-=1;
//--- mover o ponto
if(!ChannelPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
ChannelDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

355

Constantes Padro, Enumeradores e Estruturas

OBJ_STDDEVCHANNEL
Desvio Padro do Canal.

Observao
Para Desvio Padro do Canal, possvel determinar o modo da continuao da sua exibio para a
direita e/ou esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT). O modo de preenchimento colorido do canal tambm pode ser definido.
Propriedade OBJPROP_DEVIATION usada para alterar o valor do desvio do canal.
Exemplo
O seguinte script cria e move um Desvio Padro do Canal no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Desvio Padro do Canal\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="StdDevChannel";

// Nome do canal

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpDate2=40;

// Data do 2 ponto, %

input double

InpDeviation=1.0;

// Desvio

input color

InpColor=clrRed;

// Cor do canal

2000-2014, MetaQuotes Software Corp.

356

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas do canal
input int

InpWidth=2;

// Largura das linhas do canal

input bool

InpFill=false;

// Preenchendo o canal com cor

input bool

InpBack=false;

// Canal de Fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do Canal para a esquerda

input bool

InpRayRight=false;

// Continuao do Canal para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Regresso Linear do Canal pelas coordenadas dadas

//+------------------------------------------------------------------+
bool StdDevChannelCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Channel",

// nome do canal

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

datetime

time2=0,

// segundo ponto de tempo

const double

deviation=1.0,

// desvio

const color

clr=clrRed,

// cor do canal

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do canal


const int

width=1,

// largura das linhas do canal

const bool

fill=false,

// preenchendo o canal cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do canal para a es

const bool

ray_right=false,

// continuao do canal para a di

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mous

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeChannelEmptyPoints(time1,time2);
//--- redefine o valor de erro
ResetLastError();
//--- criar um canal pelas coordenadas dadas
if(!ObjectCreate(chart_ID,name,OBJ_STDDEVCHANNEL,sub_window,time1,0,time2,0))
{
Print(__FUNCTION__,
": falha ao criar o desvio padro do canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir o valor de desvio que afeta a largura do canal
ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATION,deviation);
//--- definir a cor do canal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal

2000-2014, MetaQuotes Software Corp.

357

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool StdDevChannelPointChange(const long

chart_ID=0,

// Id do Grfico

const string name="Channel", // nome do canal


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0)

// coordenada do ponto de ancoragem do t

{
//--- se o tempo de ponto no est definido, mover o ponto para o barra atual
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,0))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o desvio do canal

//+------------------------------------------------------------------+
bool StdDevChannelDeviationChange(const long

chart_ID=0,

// ID do grfico

const string name="Channel", // nome do canal


const double deviation=1.0)

2000-2014, MetaQuotes Software Corp.

// desvio

358

Constantes Padro, Enumeradores e Estruturas


{
//--- redefine o valor de erro
ResetLastError();
//--- mudar o ngulo de inclinao da linha de tendncia
if(!ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATION,deviation))
{
Print(__FUNCTION__,
": falha ao mudar o desvio de canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o canal

//+------------------------------------------------------------------+
bool StdDevChannelDelete(const long

chart_ID=0,

// ID do grfico

const string name="Channel") // nome do canal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o canal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+-------------------------------------------------------------------------+
//| Ver os valores de pontos de ancoragem do canal e definir valores padro|
//| para aqueles que esto vazios

//+-------------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,datetime &time2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}

2000-2014, MetaQuotes Software Corp.

359

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do canal
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o canal
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
//--- criar desvio padro do canal
if(!StdDevChannelCreate(0,InpName,0,date[d1],date[d2],InpDeviation,InpColor,InpStyle,
InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo

2000-2014, MetaQuotes Software Corp.

360

Constantes Padro, Enumeradores e Estruturas


ChartRedraw();
Sleep(1000);
//--- agora, o canal horizontal para a direita e expandi-lo
//--- contador de loop
int h_steps=bars/2;
//--- mover o canal
for(int i=0;i<h_steps;i++)
{
//--- usar os seguintes valores
if(d1<bars-1)
d1+=1;
if(d2<bars-1)
d2+=1;
//--- mover os pontos de ancoragem
if(!StdDevChannelPointChange(0,InpName,0,date[d1]))
return;
if(!StdDevChannelPointChange(0,InpName,1,date[d2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
double v_steps=InpDeviation*2;
//--- expandir o canal
for(double i=InpDeviation;i<v_steps;i+=10.0/accuracy)
{
if(!StdDevChannelDeviationChange(0,InpName,i))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
StdDevChannelDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//---

2000-2014, MetaQuotes Software Corp.

361

Constantes Padro, Enumeradores e Estruturas


}

2000-2014, MetaQuotes Software Corp.

362

Constantes Padro, Enumeradores e Estruturas

OBJ_REGRESSION
Regresso Linear do Canal.

Observao
Para Regresso Linear do Canal, possvel determinar o modo da continuao da sua exibio para
a direita e/ou esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT). O modo de preenchimento colorido do canal tambm pode ser definido.
Exemplo
O seguinte script cria e move uma Regresso Linear do Canal no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Regresso Linear do Canal\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Regression"; // Nome do canal

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpDate2=40;

// Data do 2 ponto, %

input color

InpColor=clrRed;

// Cor do canal

input ENUM_LINE_STYLE InpStyle=STYLE_DASH;

// Estilo das linhas do canal

input int

// Largura das linhas do canal

InpWidth=2;

2000-2014, MetaQuotes Software Corp.

363

Constantes Padro, Enumeradores e Estruturas


input bool

InpFill=false;

// Preenchendo o canal com cor

input bool

InpBack=false;

// Canal de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do canal para a esquerda

input bool

InpRayRight=false;

// Continuao do canal para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Regresso Linear do Canal pelas coordenadas dadas

//+------------------------------------------------------------------+
bool RegressionCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Regression", // nome do canal

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

datetime

time2=0,

// segundo ponto de tempo

const color

clr=clrRed,

// cor do canal

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do canal


const int

width=1,

// largura das linhas do canal

const bool

fill=false,

/// preenchendo o canal com cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do canal para a esque

const bool

ray_right=false,

// continuao do canal para a direi

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeRegressionEmptyPoints(time1,time2);
//--- redefine o valor de erro
ResetLastError();
//--- criar um canal pelas coordenadas dadas
if(!ObjectCreate(chart_ID,name,OBJ_REGRESSION,sub_window,time1,0,time2,0))
{
Print(__FUNCTION__,
": falha ao criar a regresso linear do canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor do canal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser

2000-2014, MetaQuotes Software Corp.

364

Constantes Padro, Enumeradores e Estruturas


//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool RegressionPointChange(const long

chart_ID=0,

// ID do grfico

const string name="Channel", // nome do canal


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0)

// coordenada do ponto de ancoragem do temp

{
//--- se o tempo de ponto no est definido, mover o ponto para o barra atual
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,0))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o canal

//+------------------------------------------------------------------+
bool RegressionDelete(const long

chart_ID=0,

// ID do grfico

const string name="Channel") // nome do canal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o canal
if(!ObjectDelete(chart_ID,name))
{

2000-2014, MetaQuotes Software Corp.

365

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__,
": falha ao excluir o canal! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+-------------------------------------------------------------------------+
//| Ver os valores de pontos de ancoragem do canal e definir valores padro|
//| para aqueles que esto vazios

//+-------------------------------------------------------------------------+
void ChangeRegressionEmptyPoints(datetime &time1,datetime &time2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do canal
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);

2000-2014, MetaQuotes Software Corp.

366

Constantes Padro, Enumeradores e Estruturas


//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o canal
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
//--- criar regresso linear do canal
if(!RegressionCreate(0,InpName,0,date[d1],date[d2],InpColor,InpStyle,InpWidth,
InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, o canal horizontal para a direita
//--- contador de loop
int h_steps=bars/2;
//--- mover o canal
for(int i=0;i<h_steps;i++)
{
//--- usar os seguintes valores
if(d1<bars-1)
d1+=1;
if(d2<bars-1)
d2+=1;
//--- mover os pontos de ancoragem
if(!RegressionPointChange(0,InpName,0,date[d1]))
return;
if(!RegressionPointChange(0,InpName,1,date[d2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso

2000-2014, MetaQuotes Software Corp.

367

Constantes Padro, Enumeradores e Estruturas


Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
RegressionDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

368

Constantes Padro, Enumeradores e Estruturas

OBJ_PITCHFORK
Tridente Andrews.

Observao
Para Tridente Andrews, possvel determinar o modo da continuao da sua exibio para a direita
e/ou esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT).
Voc tambm pode especificar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move o Tridente Andrews no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.
//--- descrio
#property description "Script desenha o objeto grfico \"Tridente Andrews\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Pitchfork";

// Nome do Tridente

input int

InpDate1=14;

// Data do 1 ponto, %

input int

InpPrice1=40;

// Preo do 1 ponto, %

input int

InpDate2=18;

// Data do 2 ponto, %

input int

InpPrice2=50;

// Preo do 2 ponto, %

input int

InpDate3=18;

// Data do 3 ponto, %

input int

InpPrice3=30;

// Preo do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

369

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor do tridente

input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Estilo de linhas do tridente


input int

InpWidth=1;

// Largura das linhas do tridente

input bool

InpBack=false;

// Tridente de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do Tridente para a esquerda

input bool

InpRayRight=false;

// Continuao do Tridente para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Tridente Andrews pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool PitchforkCreate(const long

chart_ID=0,

// ID de grfico

const string

name="Pitchfork",

// nome do tridente

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor das linhas do tridente

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do tridente


const int

width=1,

// largura das linhas do tridente

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do tridente para a esq

const bool

ray_right=false,

// continuao do tridente para a dir

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- criar tridente Andrews pelas coordenadas fornecidas

if(!ObjectCreate(chart_ID,name,OBJ_PITCHFORK,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": falha ao criar \" Tridente Andrews\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)

2000-2014, MetaQuotes Software Corp.

370

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover o tridente
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do tridente esque
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do tridente direi
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis do Andrews e seus parmetros

//+------------------------------------------------------------------+
bool PitchforkLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="Pitchfork") // nome do tridente

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);

2000-2014, MetaQuotes Software Corp.

371

Constantes Padro, Enumeradores e Estruturas


//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Movimentar ponto de ancoragem do Tridente Andrews

//+------------------------------------------------------------------+
bool PitchforkPointChange(const long

chart_ID=0,

// ID do grfico

const string name="Pitchfork", // nome do canal


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tem

double

price=0)

// coordenada do ponto de ancoragem de pre

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Tridente Andrews

//+------------------------------------------------------------------+
bool PitchforkDelete(const long

chart_ID=0,

// ID do grfico

const string name="Pitchfork") // nome do canal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o canal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \" Tridente Andrews\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

372

Constantes Padro, Enumeradores e Estruturas


}
//+----------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem do Tridente Andrews e definir

//| valores para aqueles vazios

//+----------------------------------------------------------------------+
void ChangeChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- se o tempo do segundo ponto (acima direita) no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto (a esquerda) no est definido, est localizado 9 barras a esque
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 200 pontos a mais do que o segundo
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do terceiro ponto no est definido, ele coincide com o tempo do segundo ponto
if(!time3)
time3=time2;
//--- se o preo do primeiro ponto no est definido, mover 200 pontos a mais do que o primeiro
if(!price3)
price3=price1-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo

2000-2014, MetaQuotes Software Corp.

373

Constantes Padro, Enumeradores e Estruturas


int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem do Tridente Andrews
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o Tridente Andrews
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;
//--- criar o tridente
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do tridente
//--- contador de loop
int v_steps=accuracy/10;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto

2000-2014, MetaQuotes Software Corp.

374

Constantes Padro, Enumeradores e Estruturas


if(!PitchforkPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars/8;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d3<bars-1)
d3+=1;
//--- mover o ponto
if(!PitchforkPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy/10;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2>1)
p2-=1;
//--- mover o ponto
if(!PitchforkPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();

2000-2014, MetaQuotes Software Corp.

375

Constantes Padro, Enumeradores e Estruturas


}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a tridente do grfico
PitchforkDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

376

Constantes Padro, Enumeradores e Estruturas

OBJ_GANNLINE
Linha Gann.

Observao
Para Linha Gann, possvel determinar o modo da continuao da sua exibio para a direita e/ou
esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT).
Ambos ngulo de Gann com uma escala e as coordenadas do segundo ponto de ancoragem podem ser
usados para definir a inclinao da linha.
Exemplo
O seguinte script cria e move o Linha Gann no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Linha Gann\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="GannLine";

// Nome da linha

input int

InpDate1=20;

// Data do 1 ponto, %

input int

InpPrice1=75;

// Preo do 1 ponto, %

input int

InpDate2=80;

// Data do 2 ponto, %

input double

InpAngle=0.0;

// Angulo Gann

2000-2014, MetaQuotes Software Corp.

377

Constantes Padro, Enumeradores e Estruturas


input double

InpScale=1.0;

// Escala

input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Linha de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao da Linha para a esquerda

input bool

InpRayRight=true;

// Continuao da Linha para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Linha Gann pelas coordenadas, ngulo e escala

//+------------------------------------------------------------------+
bool GannLineCreate(const long

chart_ID=0,

// ID de grfico

const string

name="GannLine",

// nome da linha

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

const double

angle=1.0,

// angulo Gann

const double

scale=1.0,

// escala

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha


const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao da linha para a esquerd

const bool

ray_right=true,

// continuao da linha para a direita

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para o clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeGannLineEmptyPoints(time1,price1,time2);
//--- redefine o valor de erro
ResetLastError();
//--- criar Linha Gann pelas coordenadas fornecidas
//--- corretas coordenadas do segundo ponto de ancoragem so redefinida
//--- automaticamente aps o angulo Gann e/ou as mudanas de escala,
if(!ObjectCreate(chart_ID,name,OBJ_GANNLINE,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": falha ao criar \"Linha Gann\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- alterar angulo Gann
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- alterar a escala (nmero de pips por barra)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- definir cor da linha

2000-2014, MetaQuotes Software Corp.

378

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de exibio da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover as linhas
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio da linha direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem do Linha Gann

//+------------------------------------------------------------------+
bool GannLinePointChange(const long

chart_ID=0,

// ID do grfico

const string name="GannLine", // nome da linha


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem da linha
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

379

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Alterar angulo Gann

//+------------------------------------------------------------------+
bool GannLineAngleChange(const long

chart_ID=0,

// ID do grfico

const string name="GannLine", // nome da linha


const double angle=1.0)

// angulo Gann

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar angulo Gann
if(!ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle))
{
Print(__FUNCTION__,
": falha ao alterar o angulo Gann! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar escala Gann Line

//+------------------------------------------------------------------+
bool GannLineScaleChange(const long

chart_ID=0,

// ID do grfico

const string name="GannLine", // nome da linha


const double scale=1.0)

// escala

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a escala (nmero de pips por barra)
if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
{
Print(__FUNCTION__,
": falha ao alterar a escala! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo remove a Linha Gann grfico

//+------------------------------------------------------------------+
bool GannLineDelete(const long

chart_ID=0,

// ID do grfico

const string name="GannLine") // nome da linha


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir linha Gann
if(!ObjectDelete(chart_ID,name))

2000-2014, MetaQuotes Software Corp.

380

Constantes Padro, Enumeradores e Estruturas


{
Print(__FUNCTION__,
": falha ao excluir \"Linha Gann\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores pontos de ancoragem da linha Gann e definir

//| valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeGannLineEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem da linha
datetime date[];

2000-2014, MetaQuotes Software Corp.

381

Constantes Padro, Enumeradores e Estruturas


double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a linha Gann
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- criar Linha Gann
if(!GannLineCreate(0,InpName,0,date[d1],price[p1],date[d2],InpAngle,InpScale,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem da linha e mudar o angulo
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o primeiro ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto
if(!GannLinePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();

2000-2014, MetaQuotes Software Corp.

382

Constantes Padro, Enumeradores e Estruturas


}
//--- meio segundo de atraso
Sleep(500);
//--- definir o valor atual de angulo Gann (alterar
//--- depois de mover o primeiro ponto de ancoragem)
double curr_angle;
if(!ObjectGetDouble(0,InpName,OBJPROP_ANGLE,0,curr_angle))
return;
//--- contador de loop
v_steps=accuracy/8;
//--- alterar angulo Gann
for(int i=0;i<v_steps;i++)
{
if(!GannLineAngleChange(0,InpName,curr_angle-0.05*i))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a linha do grfico
GannLineDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

383

Constantes Padro, Enumeradores e Estruturas

OBJ_GANNFAN
Gann Fan.

Observao
Para Gann Fan, possvel determinar o tipo de tendncia a partir enumerao
ENUM_GANN_DIRECTION. Ao ajustar o valor da escala(OBJPROP_SCALE), possvel alterar o ngulo
de inclinao das linhas do fan.
Exemplo
O seguinte script cria e move o Gann Fan no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script desenha o objeto grfico tipo \"Gann Fan\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="GannFan";

// Nome do fan

input int

InpDate1=15;

// Data do 1 ponto, %

input int

InpPrice1=25;

// Preo do 1 ponto, %

input int

InpDate2=85;

// Data do 2 ponto, %

input double

InpScale=2.0;

// Escala

input bool

InpDirection=false;

// Direo da tendncia

2000-2014, MetaQuotes Software Corp.

384

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor da linha fan

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas fan


input int

InpWidth=1;

// Largura das linhas fan

input bool

InpBack=false;

// Canal de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Gann Fan

//+------------------------------------------------------------------+
bool GannFanCreate(const long

chart_ID=0,

// ID de grfico

const string

name="GannFan",

// nome do fan

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

const double

scale=1.0,

// escala

const bool

direction=true,

// direo da tendncia

const color

clr=clrRed,

// cor da linha fan

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas fan


const int

width=1,

// largura das linhas fan

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeGannFanEmptyPoints(time1,price1,time2);
//--- redefine o valor de erro
ResetLastError();
//--- criar Gann Fan pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_GANNFAN,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": falha ao criar \"Gann Fan\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- alterar a escala (nmero de pips por barra)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- mudar a direo de tendncia Gann Fan (true - descendente, false - ascendente)
ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction);
//--- definir cor do fan
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a exibio do estilo das linhas fan
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha do fan
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

2000-2014, MetaQuotes Software Corp.

385

Constantes Padro, Enumeradores e Estruturas


//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover o fan
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem do Gann Fan

//+------------------------------------------------------------------+
bool GannFanPointChange(const long

chart_ID=0,

// ID do grfico

const string name="GannFan", // nome do fan


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem do fan
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar a escala Gann Fan

//+------------------------------------------------------------------+
bool GannFanScaleChange(const long

chart_ID=0,

// ID do grfico

const string name="GannFan", // nome do fan


const double scale=1.0)

// escala

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a escala (nmero de pips por barra)

2000-2014, MetaQuotes Software Corp.

386

Constantes Padro, Enumeradores e Estruturas


if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
{
Print(__FUNCTION__,
": falha ao alterar a escala! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar a direo de tendncia Gann Fan

//+------------------------------------------------------------------+
bool GannFanDirectionChange(const long

chart_ID=0,

// ID do grfico

const string name="GannFan", // nome do fan


const bool

direction=true) // direo da tendncia

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a direo de tendncia Gann Fan
if(!ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction))
{
Print(__FUNCTION__,
": falha ao alterar a direo de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo remove o Gann Fan do grfico

//+------------------------------------------------------------------+
bool GannFanDelete(const long

chart_ID=0,

// ID do grfico

const string name="GannFan") // nome do fan


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir Gann Fan
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Gann Fan\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem do Gann Fan e definir

//| valores padro para aqueles vazios

2000-2014, MetaQuotes Software Corp.

387

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
void ChangeGannFanEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem do fan
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}

2000-2014, MetaQuotes Software Corp.

388

Constantes Padro, Enumeradores e Estruturas


//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar Gann Fan
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- criar Gann Fan
if(!GannFanCreate(0,InpName,0,date[d1],price[p1],date[d2],InpScale,InpDirection,
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do fan
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o primeiro ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1<accuracy-1)
p1+=1;
//--- mover o ponto
if(!GannFanPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar a direo tendncia do fan para um descendente
GannFanDirectionChange(0,InpName,true);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o fan do grfico
GannFanDelete(0,InpName);

2000-2014, MetaQuotes Software Corp.

389

Constantes Padro, Enumeradores e Estruturas


ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

390

Constantes Padro, Enumeradores e Estruturas

OBJ_GANNGRID
Grade Gann.

Observao
Para Grade Gann, possvel determinar o tipo de tendncia a partir do enumerador
ENUM_GANN_DIRECTION. Ao ajustar o valor da escala(OBJPROP_SCALE), possvel alterar o ngulo
de inclinao das linhas do grade.
Exemplo
O seguinte script cria e move o Grade Gann no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha o objeto grfico tipo \"Grade Gann\"."

#property description "Coordenadas dos pontos de ancoragem do grade so definidos em percentagem do


#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="GannGrid";

// Nome do grade

input int

InpDate1=15;

// Data do 1 ponto, %

input int

InpPrice1=25;

// Preo do 1 ponto, %

input int

InpDate2=35;

// Data do 2 ponto, %

input double

InpScale=3.0;

// Escala

input bool

InpDirection=false;

// Direo da tendncia

2000-2014, MetaQuotes Software Corp.

391

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor do grade

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas do grade


input int

InpWidth=1;

// Largura das linhas fan

input bool

InpBack=false;

// Grade de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Grade Gann

//+------------------------------------------------------------------+
bool GannGridCreate(const long

chart_ID=0,

// ID de grfico

const string

name="GannGrid",

// nome do grade

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

const double

scale=1.0,

// escala

const bool

direction=true,

// direo da tendncia

const color

clr=clrRed,

// cor do grade

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas grade


const int

width=1,

// largura das linhas grade

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para o clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeGannGridEmptyPoints(time1,price1,time2);
//--- redefine o valor de erro
ResetLastError();
//--- Criar Grade Gann pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_GANNGRID,sub_window,time1,price1,time2,0))
{
Print(__FUNCTION__,
": falha ao criar \"Grade Gann\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- alterar a escala (nmero de pips por barra)
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- mudar a direo de tendncia Gann Fan (true - descendente, false - ascendente)
ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction);
//--- definir cor do grade
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a exibio do estilo das linhas grade
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha do grade
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

2000-2014, MetaQuotes Software Corp.

392

Constantes Padro, Enumeradores e Estruturas


//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover o grid
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem do Grade Gann

//+------------------------------------------------------------------+
bool GannGridPointChange(const long

chart_ID=0,

// ID do grfico

const string name="GannGrid", // nome do grade


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover ponto de ancoragem do grade
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar a escala Grade Gann

//+------------------------------------------------------------------+
bool GannGridScaleChange(const long

chart_ID=0,

// ID do grfico

const string name="GannGrid", // nome do grade


const double scale=1.0)

// escala

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a escala (nmero de pips por barra)

2000-2014, MetaQuotes Software Corp.

393

Constantes Padro, Enumeradores e Estruturas


if(!ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale))
{
Print(__FUNCTION__,
": falha ao alterar a escala! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar a direo de tendncia Grade Gann

//+------------------------------------------------------------------+
bool GannGridDirectionChange(const long

chart_ID=0,

// ID do grfico

const string name="GannGrid", // nome do grade


const bool

direction=true)

// direo da tendncia

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a direo de tendncia Grade Gann
if(!ObjectSetInteger(chart_ID,name,OBJPROP_DIRECTION,direction))
{
Print(__FUNCTION__,
": falha ao alterar a direo de tendncia! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| A funo remove o Gann Fan do grfico

//+------------------------------------------------------------------+
bool GannGridDelete(const long

chart_ID=0,

// ID do grfico

const string name="GannGrid") // nome do grade


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir Grade Gann
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Grade Gann\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem do Grade Gann e definir

//| valores padro para aqueles vazios

2000-2014, MetaQuotes Software Corp.

394

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
void ChangeGannGridEmptyPoints(datetime &time1,double &price1,datetime &time2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do grade
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}

2000-2014, MetaQuotes Software Corp.

395

Constantes Padro, Enumeradores e Estruturas


//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar Grade Gann
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- criar Grade Gann
if(!GannGridCreate(0,InpName,0,date[d1],price[p1],date[d2],InpScale,InpDirection,
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do grade
//--- contador de loop
int v_steps=accuracy/4;
//--- mover o primeiro ponto de ancoragem vertical
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1<accuracy-1)
p1+=1;
if(!GannGridPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars/4;
//--- mover o segundo ponto de ancoragem vertical
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
if(!GannGridPointChange(0,InpName,1,date[d2],0))

2000-2014, MetaQuotes Software Corp.

396

Constantes Padro, Enumeradores e Estruturas


return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar a direo tendncia do grade para um descendente
GannGridDirectionChange(0,InpName,true);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o grade do grfico
GannGridDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

397

Constantes Padro, Enumeradores e Estruturas

OBJ_FIBO
Retrao Fibonacci.

Observao
Para "Retrao Fibonacci", possvel determinar o modo da continuao da sua exibio para a
direita e/ou esquerda (de acordo com a propriedade OBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT).
Voc tambm pode especificar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move a Retrao Fibonacci no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
[parcial]#property description "Script desenha objeto grfico \"Retrao Fibonacci\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboLevels";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=65;

// Preo do 1 ponto, %

input int

InpDate2=90;

// Data do 2 ponto, %

input int

InpPrice2=85;

// Preo do 2 ponto, %

2000-2014, MetaQuotes Software Corp.

398

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor do objeto

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do objeto para a esquerda

input bool

InpRayRight=false;

// Continuao do objeto para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Retrao Fibonacci pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboLevelsCreate(const long

chart_ID=0,

// ID de grfico

const string

name="FiboLevels", // nome do objeto

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor do objeto

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha do objeto


const int

width=1,

// largura da linha do objeto

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do objeto para a esqu

const bool

ray_right=false,

// continuao do objeto para a dire

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboLevelsEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- Criar Retrao Fibonacci pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_FIBO,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha para criar \"Retrao Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir estilo de linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal

2000-2014, MetaQuotes Software Corp.

399

Constantes Padro, Enumeradores e Estruturas


//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do objeto esquerd
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do objeto direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboLevels") // nome do objeto

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));

2000-2014, MetaQuotes Software Corp.

400

Constantes Padro, Enumeradores e Estruturas


}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem da Retrao Fibonacci

//+------------------------------------------------------------------+
bool FiboLevelsPointChange(const long

chart_ID=0,

// ID do grfico

const string name="FiboLevels", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem do t

double

price=0)

// coordenada do ponto de ancoragem de p

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Retrao Fibonacci

//+------------------------------------------------------------------+
bool FiboLevelsDelete(const long

chart_ID=0,

// ID do grfico

const string name="FiboLevels") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Retrao Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

401

Constantes Padro, Enumeradores e Estruturas


//|V valores dos pontos de ancoragem da Retrao Fibonacci e

//| definir os valores padres estabelecidos para os pontos vazio

//+------------------------------------------------------------------+
void ChangeFiboLevelsEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 200 pontos a mais do que o segundo
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem da Retrao Fibonacci
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas

2000-2014, MetaQuotes Software Corp.

402

Constantes Padro, Enumeradores e Estruturas


ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar Retrao Fibonacci
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar um objeto
if(!FiboLevelsCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int v_steps=accuracy*2/5;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto
if(!FiboLevelsPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop

2000-2014, MetaQuotes Software Corp.

403

Constantes Padro, Enumeradores e Estruturas


v_steps=accuracy*4/5;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2>1)
p2-=1;
//--- mover o ponto
if(!FiboLevelsPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
FiboLevelsDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

404

Constantes Padro, Enumeradores e Estruturas

OBJ_FIBOTIMES
Fibonacci Zonas de Tempo.

Observao
Para "Fibonacci Zonas de Tempo", possvel determinar o nmero de linhas de nveis, os seus
valores e cores.
Exemplo
O seguinte script cria e move a Fibonacci Zonas de Tempo no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.
//--- descrio
#property description "Script desenha objeto grfico \"Fibonacci Zonas de Tempo\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboTimes";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=45;

// Preo do 1 ponto, %

input int

InpDate2=20;

// Data do 2 ponto, %

input int

InpPrice2=55;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor do objeto

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

2000-2014, MetaQuotes Software Corp.

405

Constantes Padro, Enumeradores e Estruturas


input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Fibonacci Zonas de Tempo pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboTimesCreate(const long

chart_ID=0,

// ID de grfico

const string

name="FiboTimes",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor do objeto

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha do objeto


const int

width=1,

// largura da linha do objeto

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboTimesEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar Fibonacci Zonas de Tempo pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_FIBOTIMES,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar \"Fibonacci Zonas de Tempo\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir estilo de linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

2000-2014, MetaQuotes Software Corp.

406

Constantes Padro, Enumeradores e Estruturas


//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboTimesLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboTimes") // nome do objeto

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(values[i],1));
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover pontos de ancoragem da Fibonacci Zonas de Tempo

//+------------------------------------------------------------------+
bool FiboTimesPointChange(const long

chart_ID=0,

// ID grfico

const string name="FiboTimes", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tem

2000-2014, MetaQuotes Software Corp.

407

Constantes Padro, Enumeradores e Estruturas


double

price=0)

// coordenada do ponto de ancoragem de pre

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Fibonacci Zonas de Tempo

//+------------------------------------------------------------------+
bool FiboTimesDelete(const long

chart_ID=0,

// ID grfico

const string name="FiboTimes") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Fibonacci Zonas de Tempo\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar os valores da Fibonacci Zonas de Tempo e

//| definir os valores padres estabelecidos para aqueles vazios

//+------------------------------------------------------------------+
void ChangeFiboTimesEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)

2000-2014, MetaQuotes Software Corp.

408

Constantes Padro, Enumeradores e Estruturas


price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- se o tempo do segundo ponto no est definido, est localizado 2 barras deixadas a partir da
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 3 barras
datetime temp[3];
CopyTime(Symbol(),Period(),time1,3,temp);
//--- definir o primeiro ponto 2 barras a esquerda do segundo
time2=temp[0];
}
//--- se o preo do segundo ponto no est definido, igual ao primeiro ponto
if(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem da Fibonacci Zonas de Tempo
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array

2000-2014, MetaQuotes Software Corp.

409

Constantes Padro, Enumeradores e Estruturas


double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- define pontos para desenhar Fibonacci Zonas de Tempo
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar um objeto
if(!FiboTimesCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int h_steps=bars*2/5;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
//--- mover o ponto
if(!FiboTimesPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
h_steps=bars*3/5;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d1<bars-1)
d1+=1;
//--- mover o ponto
if(!FiboTimesPointChange(0,InpName,0,date[d1],price[p1]))

2000-2014, MetaQuotes Software Corp.

410

Constantes Padro, Enumeradores e Estruturas


return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
FiboTimesDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

411

Constantes Padro, Enumeradores e Estruturas

OBJ_FIBOFAN
Fibonacci Fan.

Observao
Para "Fibonacci Fan", possvel determinar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move o Fibonacci Fan no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha o objeto grfico tipo \"Fibonacci Fan\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboFan";

// Nome do fan

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=25;

// Preo do 1 ponto, %

input int

InpDate2=30;

// Data do 2 ponto, %

input int

InpPrice2=50;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor da linha fan

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

2000-2014, MetaQuotes Software Corp.

412

Constantes Padro, Enumeradores e Estruturas


input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Fibonacci Fan pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboFanCreate(const long

chart_ID=0,

// ID de grfico

const string

name="FiboFan",

// nome do fan

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor da linha fan

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha fan


const int

width=1,

// largura da linha fan

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboFanEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar Fibonacci Fan pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_FIBOFAN,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha para criar \" Fibonacci Fan\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir estilo de linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover o fan
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

2000-2014, MetaQuotes Software Corp.

413

Constantes Padro, Enumeradores e Estruturas


//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboFanLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboFan") // nome do fan

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem da Fibonacci Fan

//+------------------------------------------------------------------+
bool FiboFanPointChange(const long

chart_ID=0,

// ID do grfico

const string name="FiboFan", // nome do fan


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

2000-2014, MetaQuotes Software Corp.

414

Constantes Padro, Enumeradores e Estruturas


double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir nome da Fibo

//+------------------------------------------------------------------+
bool FiboFanDelete(const long

chart_ID=0,

// ID do grfico

const string name="FiboFan") // nome do fan


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir Gann Fan
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \" Fibonacci Fan\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem Fibonacci Fan e

//| definir os valores padres estabelecidos para os pontos vazio

//+------------------------------------------------------------------+
void ChangeFiboFanEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)

2000-2014, MetaQuotes Software Corp.

415

Constantes Padro, Enumeradores e Estruturas


price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 200 pontos a mais do que o segundo
if(!price1)
price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem da Fibonacci Fan
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array

2000-2014, MetaQuotes Software Corp.

416

Constantes Padro, Enumeradores e Estruturas


double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a 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;
//--- criar um objeto
if(!FiboFanCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do fan
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1<accuracy-1)
p1+=1;
//--- mover o ponto
if(!FiboFanPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars/4;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
//--- mover o ponto
if(!FiboFanPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora

2000-2014, MetaQuotes Software Corp.

417

Constantes Padro, Enumeradores e Estruturas


if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
FiboFanDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

418

Constantes Padro, Enumeradores e Estruturas

OBJ_FIBOARC
Arcos Fibonacci.

Observao
Para "Arcos Fibonacci Arcs", possvel determinar o modo de exibio da elipse inteira. O raio de
curvatura pode ser especificado, alterando a escala e as coordenadas dos pontos de ancoragem.
Voc tambm pode especificar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move a Arcos Fibonacci no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Arcos Fibonacci\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboArc";

// Nome do objeto

input int

InpDate1=25;

// Data do 1 ponto, %

input int

InpPrice1=25;

// Preo do 1 ponto, %

input int

InpDate2=35;

// Data do 2 ponto, %

input int

InpPrice2=55;

// Preo do 2 ponto, %

input double

InpScale=3.0;

// Escala

2000-2014, MetaQuotes Software Corp.

419

Constantes Padro, Enumeradores e Estruturas


input bool

InpFullEllipse=true;

// Formas dos arcos

input color

InpColor=clrRed;

// Cor da linha

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo da linha


input int

InpWidth=2;

// Largura da linha

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Arcos Fibonacci pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboArcCreate(const long

chart_ID=0,

// ID do grfico

const string

name="FiboArc",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const double

scale=1.0,

// escala

const bool

full_ellipse=false, // forma dos arcos

const color

clr=clrRed,

// cor da linha

const ENUM_LINE_STYLE style=STYLE_SOLID,

// estilo da linha

const int

width=1,

// largura da linha

const bool

back=false,

// no fundo

const bool

selection=true,

// destacar para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboArcEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar Arcos Fibonacci pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_FIBOARC,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar \"Arcos Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a escala
ObjectSetDouble(chart_ID,name,OBJPROP_SCALE,scale);
//--- definir visualizao dos arcos como uma elipse completa (true) ou a metade dela (false)
ObjectSetInteger(chart_ID,name,OBJPROP_ELLIPSE,full_ellipse);
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir estilo de linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);

2000-2014, MetaQuotes Software Corp.

420

Constantes Padro, Enumeradores e Estruturas


//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover os arcos
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboArcLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboArc") // nome do objeto

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}

2000-2014, MetaQuotes Software Corp.

421

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem dos Arcos Fibonacci

//+------------------------------------------------------------------+
bool FiboArcPointChange(const long

chart_ID=0,

// ID do grfico

const string name="FiboArc", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Arcos Fibonacci

//+------------------------------------------------------------------+
bool FiboArcDelete(const long

chart_ID=0,

// ID do grfico

const string name="FiboArc") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir\"Arcos Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem dos Arcos Fibonacci e definir|

2000-2014, MetaQuotes Software Corp.

422

Constantes Padro, Enumeradores e Estruturas


//| valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeFiboArcEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto no est definido, est localizado 9 barras a esquerda partir da
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price1)
price1=price2-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem dos Arcos Fibonacci
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();

2000-2014, MetaQuotes Software Corp.

423

Constantes Padro, Enumeradores e Estruturas


if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar Arcos Fibonacci
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar um objeto
if(!FiboArcCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpScale,
InpFullEllipse,InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int v_steps=accuracy/5;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1<accuracy-1)
p1+=1;
//--- mover o ponto
if(!FiboArcPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars/5;

2000-2014, MetaQuotes Software Corp.

424

Constantes Padro, Enumeradores e Estruturas


//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2<bars-1)
d2+=1;
//--- mover o ponto
if(!FiboArcPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
FiboArcDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

425

Constantes Padro, Enumeradores e Estruturas

OBJ_FIBOCHANNEL
Canal Fibonacci.

Observao
Para "Canal Fibonacci", possvel determinar o modo da continuao da sua exibio para a direita
e/ou esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT).
Voc tambm pode especificar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move o Canal Fibonacci no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha um objeto grfico tipo \"Canal Fibonacci\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboChannel";

// Nome do canal

input int

InpDate1=20;

// Data do 1 ponto, %

input int

InpPrice1=10;

// Preo do 1 ponto, %

input int

InpDate2=60;

// Data do 2 ponto, %

input int

InpPrice2=30;

// Preo do 2 ponto, %

input int

InpDate3=20;

// Data do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

426

Constantes Padro, Enumeradores e Estruturas


input int

InpPrice3=25;

// Preo do 3 ponto, %

input color

InpColor=clrRed;

// Cor do canal

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas do canal


input int

InpWidth=2;

// Largura das linhas do canal

input bool

InpBack=false;

// Canal de Fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do Canal para a esquerda

input bool

InpRayRight=false;

// Continuao do Canal para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Canal Fibonacci pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboChannelCreate(const long

chart_ID=0,

// ID do grfico

const string

name="FiboChannel", // nome do canal

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE style=STYLE_SOLID,

// estilo das linhas do canal

const int

width=1,

// largura das linhas do canal

const bool

back=false,

// no fundo

const bool

selection=true,

// destacar para mover

const bool

ray_left=false,

// continuao do canal para a esq

const bool

ray_right=false,

// continuao do canal para a dir

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboChannelEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- criar um canal pelas coordenadas dadas

if(!ObjectCreate(chart_ID,name,OBJ_FIBOCHANNEL,sub_window,time1,price1,time2,price2,time3,price3
{
Print(__FUNCTION__,
": falha ao criar \"Canal Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor do canal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha do canal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);

2000-2014, MetaQuotes Software Corp.

427

Constantes Padro, Enumeradores e Estruturas


//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a esquerda
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do canal a direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboChannelLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboChannel") // nome do objeto

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
//--- largura de nvel

2000-2014, MetaQuotes Software Corp.

428

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem do Canal Fibonacci

//+------------------------------------------------------------------+
bool FiboChannelPointChange(const long

chart_ID=0,

// ID do grfico

const string name="FiboChannel", // nome do canal


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de

double

price=0)

// coordenada do ponto de ancoragem de

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o canal

//+------------------------------------------------------------------+
bool FiboChannelDelete(const long

chart_ID=0,

// ID do grfico

const string name="FiboChannel") // nome do canal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o canal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Canal Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo

2000-2014, MetaQuotes Software Corp.

429

Constantes Padro, Enumeradores e Estruturas


return(true);
}
//+------------------------------------------------------------------+
//| Ver valores dos pontos de ancoragem do Canal Fibonacci e

//| definir os valores padres estabelecidos para os pontos vazio

//+------------------------------------------------------------------+
void ChangeFiboChannelEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- se o tempo do segundo ponto (a direita)no est definido, ser na barra atual
if(!time2)
time2=TimeCurrent();
//--- se o preo do segundo ponto no est definido, ele ter valor Bid
if(!price2)
price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto (a esquerda) no est definido, est localizado 9 barras a esque
if(!time1)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time2,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price1)
price1=price2+300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do terceiro ponto no est definido,ele coincide com o tempo do primeiro ponto
if(!time3)
time3=time1;
//--- se o preo do terceiro ponto no est definido, igual ao preo do segundo ponto
if(!price3)
price3=price2;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);

2000-2014, MetaQuotes Software Corp.

430

Constantes Padro, Enumeradores e Estruturas


//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do canal
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o canal
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;
//--- criar Canal Fibonacci
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do canal
//--- contador de loop
int h_steps=bars/10;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d1>1)
d1-=1;

2000-2014, MetaQuotes Software Corp.

431

Constantes Padro, Enumeradores e Estruturas


//--- mover o ponto
if(!FiboChannelPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int v_steps=accuracy/10;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2>1)
p2-=1;
//--- mover o ponto
if(!FiboChannelPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy/15;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p3<accuracy-1)
p3+=1;
//--- mover o ponto
if(!FiboChannelPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}

2000-2014, MetaQuotes Software Corp.

432

Constantes Padro, Enumeradores e Estruturas


//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
FiboChannelDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

433

Constantes Padro, Enumeradores e Estruturas

OBJ_EXPANSION
Fibonacci Expansion.

Observao
Para "Expanso Fibonacci", possvel determinar o modo da continuao da sua exibio para a
direita e/ou esquerda (de acordo com a propriedade OBJPROP_RAY_RIGHT e
OBJPROP_RAY_LEFT).
Voc tambm pode especificar o nmero de linhas de nveis, os seus valores e cores.
Exemplo
O seguinte script cria e move a Expanso Fibonacci no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Expanso Fibonacci\"."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="FiboExpansion";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=55;

// Preo do 1 ponto, %

input int

InpDate2=30;

// Data do 2 ponto, %

input int

InpPrice2=10;

// Preo do 2 ponto, %

2000-2014, MetaQuotes Software Corp.

434

Constantes Padro, Enumeradores e Estruturas


input int

InpDate3=80;

// Data do 3 ponto, %

input int

InpPrice3=75;

// Preo do 3 ponto, %

input color

InpColor=clrRed;

// Cor do objeto

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas


input int

InpWidth=2;

// Largura das linha

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpRayLeft=false;

// Continuao do objeto para a esquerda

input bool

InpRayRight=false;

// Continuao do objeto para a direita

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Extenso Fibonacci pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool FiboExpansionCreate(const long

chart_ID=0,

// ID de grfico

const string

name="FiboExpansion", // nome do canal

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor do objeto

const ENUM_LINE_STYLE style=STYLE_SOLID,

// estilo das linhas

const int

width=1,

// largura das linhas

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

ray_left=false,

// continuao do objeto para

const bool

ray_right=false,

// continuao do objeto para

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no m

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeFiboExpansionEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- Criar Extenso Fibonacci pelas coordenadas fornecidas

if(!ObjectCreate(chart_ID,name,OBJ_EXPANSION,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": falha para criar \"Extenso Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir cor do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas

2000-2014, MetaQuotes Software Corp.

435

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do objeto esquerd
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);

//--- habilitar (true) ou desabilitar (false) o modo de continuao da exibio do objeto direita
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o nmero de nveis e seus parmetros

//+------------------------------------------------------------------+
bool FiboExpansionLevelsSet(int

levels,

// nmero de linhas dos nveis

double

&values[],

// valores de linhas dos nveis

color

&colors[],

// cor das linhas dos nveis

ENUM_LINE_STYLE &styles[],

// estilo das linhas dos nveis

int

&widths[],

// largura das linhas dos nveis

const long

chart_ID=0,

// ID do grfico

const string

name="FiboExpansion") // nome do objeto

{
//--- verificar tamanhos do array
if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
levels!=ArraySize(widths) || levels!=ArraySize(widths))
{
Print(__FUNCTION__,": comprimento do array no corresponder ao nmero de nveis, erro!");
return(false);
}
//--- definir o nmero de nveis
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- definir as propriedades de nveis no loop
for(int i=0;i<levels;i++)
{
//--- valor do nvel
ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
//--- cor do nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
//--- estilo de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);

2000-2014, MetaQuotes Software Corp.

436

Constantes Padro, Enumeradores e Estruturas


//--- largura de nvel
ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
//--- descrio de nvel
ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,"FE "+DoubleToString(100*values[i],1));
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem da Expanso Fibonacci

//+------------------------------------------------------------------+
bool FiboExpansionPointChange(const long

chart_ID=0,

// ID do grfico

const string name="FiboExpansion", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancorage

double

price=0)

// coordenada do ponto de ancorage

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Expanso Fibonacci

//+------------------------------------------------------------------+
bool FiboExpansionDelete(const long

chart_ID=0,

// ID do grfico

const string name="FiboExpansion") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \"Expanso Fibonacci\"! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

437

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| V valores dos pontos de ancoragem da Expanso Fibonacci e

//| definir os valores padres estabelecidos para os pontos vazio

//+------------------------------------------------------------------+
void ChangeFiboExpansionEmptyPoints(datetime &time1,double &price1,datetime &time2,
double &price2,datetime &time3,double &price3)
{
//--- se o tempo do terceiro ponto (a direita)no est definido, ser na barra atual
if(!time3)
time3=TimeCurrent();
//--- se o preo do terceiro ponto no est definido, ele ter valor Bid
if(!price3)
price3=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do primeiro ponto (a esquerda) no est definido, ele est localizado 9 barras a e
//--- array para receber o tempo de abertura das ltimas 10 barras
datetime temp[];
ArrayResize(temp,10);
if(!time1)
{
CopyTime(Symbol(),Period(),time3,10,temp);
//--- definir o primeiro ponto 9 barras a esquerda do segundo
time1=temp[0];
}
//--- se o preo do primeiro ponto no est definido, igual ao terceiro ponto
if(!price1)
price1=price3;

//--- se o tempo do segundo ponto no est definido, est localizado a 7 barras deixadas a partir d
if(!time2)
time2=temp[2];
//--- se o preo do primeiro ponto no est definido, mover 250 pontos a mais do que o primeiro
if(!price2)
price2=price1-250*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}

2000-2014, MetaQuotes Software Corp.

438

Constantes Padro, Enumeradores e Estruturas


//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar Expanso Fibonacci
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;
//--- criar Expanso Fibonacci
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int v_steps=accuracy/10;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor

2000-2014, MetaQuotes Software Corp.

439

Constantes Padro, Enumeradores e Estruturas


if(p1>1)
p1-=1;
//--- mover o ponto
if(!FiboExpansionPointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy/2;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p3>1)
p3-=1;
//--- mover o ponto
if(!FiboExpansionPointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy*4/5;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p2<accuracy-1)
p2+=1;
//--- mover o ponto
if(!FiboExpansionPointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}

2000-2014, MetaQuotes Software Corp.

440

Constantes Padro, Enumeradores e Estruturas


//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
FiboExpansionDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

441

Constantes Padro, Enumeradores e Estruturas

OBJ_ELLIOTWAVE5
Onda Mvel Elliott.

Observao
Para "Onda Mvel Elliott", possvel habilitar/desabilitar o modo de pontos de conexo das linhas
(propriedade OBJPROP_DRAWLINES), bem como definir o nvel de posicionamento da onda (a partir
da enumerao ENUM_ELLIOT_WAVE_DEGREE).
Exemplo
[parcial]O seguinte script cria e move onda mvel Elliott no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha \"Onda Mvel Elliott\"."
#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem do tamanho
#property description "janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ElliotWave5";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=90;

// Preo do 1 ponto, %

input int

InpDate2=20;

// Data do 2 ponto, %

input int

InpPrice2=40;

// Preo do 2 ponto, %

input int

InpDate3=30;

// Data do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

442

Constantes Padro, Enumeradores e Estruturas


input int

InpPrice3=60;

// Preo do 3 ponto, %

input int

InpDate4=40;

// Data do 4 ponto, %

input int

InpPrice4=10;

// Preo do 4 ponto, %

input int

InpDate5=60;

// Data do 5 ponto, %

input int

InpPrice5=40;

// Preo do 5 ponto, %

input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR; // Nvel


input bool

InpDrawLines=true;

// Exibindo as linhas

input color

InpColor=clrRed;

// Cor das linhas

input ENUM_LINE_STYLE

InpStyle=STYLE_DASH;

// Estilo das linhas

input int

InpWidth=2;

// Largura das linha

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar "Onda Mvel Elliott" pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool ElliotWave5Create(const long

chart_ID=0,

// ID do grfico

name="ElliotWave3",

// nome da onda

const int

sub_window=0,

// ndice da sub-jane

datetime

time1=0,

// primeiro ponto de

double

price1=0,

//primeiro ponto de p

datetime

time2=0,

// segundo ponto de t

double

price2=0,

// segundo ponto de p

datetime

time3=0,

// terceiro ponto de

double

price3=0,

// terceiro ponto de

datetime

time4=0,

// quarto ponto de te

double

price4=0,

// quarto ponto de pr

datetime

time5=0,

// quinto ponto de te

double

price5=0,

// quinto ponto de pr

const string

const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE, // grau


const bool

draw_lines=true,

// exibindo as linhas

const color

clr=clrRed,

// cor do objeto

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo das linhas

const int

width=1,

// largura das linhas

const bool

back=false,

// no fundo

const bool

selection=true,

// destacar para move

const bool

hidden=true,

// ocultar na lista d

const long

z_order=0)

// prioridade para cl

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeElliotWave5EmptyPoints(time1,price1,time2,price2,time3,price3,time4,price4,time5,price5);
//--- redefine o valor de erro
ResetLastError();
//--- Criar "Onda Mvel Elliott" pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE5,sub_window,time1,price1,time2,price2,time3,
price3,time4,price4,time5,price5))
{
Print(__FUNCTION__,

2000-2014, MetaQuotes Software Corp.

443

Constantes Padro, Enumeradores e Estruturas


": falha ao criar \""Onda Mvel Elliott"\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir grau (tamanho da onda)
ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degree);
//--- habilitar (true) ou desabilitar (false) o modo de exibio das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,draw_lines);
//--- definir cor do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Move o ponto de ancoragem da Onda Mvel Elliott

//+------------------------------------------------------------------+
bool ElliotWave5PointChange(const long

chart_ID=0,

// ID do grfico

const string name="ElliotWave5", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de

double

price=0)

// coordenada do ponto de ancoragem de

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());

2000-2014, MetaQuotes Software Corp.

444

Constantes Padro, Enumeradores e Estruturas


return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Onda Mvel Elliott

//+------------------------------------------------------------------+
bool ElliotWave5Delete(const long

chart_ID=0,

// ID do grfico

const string name="ElliotWave5") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir \""Onda Mvel Elliott"\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de pontos de ancoragem da Onda Mvel Elliott

//| definir os valores padres estabelecidos para aqueles vazios

//+------------------------------------------------------------------+
void ChangeElliotWave5EmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3,
datetime &time4,double &price4,
datetime &time5,double &price5)
{
//--- array para receber o tempo de abertura das ltimas 10 barras
datetime temp[];
ArrayResize(temp,10);
//--- receber dados
CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
//--- receber o valor de um ponto no grfico atual
double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do primeiro ponto no est definido, sero 9 barras a esquerda a partir da ltima
if(!time1)
time1=temp[0];
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- se o tempo do primeiro ponto no est definido, sero 7 barras a esquerda a partir da ltima
if(!time2)
time2=temp[2];

2000-2014, MetaQuotes Software Corp.

445

Constantes Padro, Enumeradores e Estruturas


//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price2)
price2=price1-300*point;
//--- se o tempo do primeiro ponto no est definido, sero 5 barras a esquerda a partir da ltima
if(!time3)
time3=temp[4];
//--- se o preo do primeiro ponto no est definido, mover 250 pontos a mais do que o primeiro
if(!price3)
price3=price1-250*point;
//--- se o tempo do primeiro ponto no est definido, sero 3 barras a esquerda a partir da ltima
if(!time4)
time4=temp[6];
//--- se o preo do primeiro ponto no est definido, mover 550 pontos a mais do que o primeiro
if(!price4)
price4=price1-550*point;
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time5)
time5=temp[9];
//--- se o preo do primeiro ponto no est definido, mover 450 pontos a mais do que o primeiro
if(!price5)
price5=price1-450*point;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas

2000-2014, MetaQuotes Software Corp.

446

Constantes Padro, Enumeradores e Estruturas


ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a Onda Mvel Elliott
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;
//--- Criar Onda Mvel Elliott
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int v_steps=accuracy/5;
//--- mover o quinto ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p5<accuracy-1)
p5+=1;
//--- mover o ponto
if(!ElliotWave5PointChange(0,InpName,4,date[d5],price[p5]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())

2000-2014, MetaQuotes Software Corp.

447

Constantes Padro, Enumeradores e Estruturas


return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy/5;
//--- mover o segundo e terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar os seguintes valores
if(p2<accuracy-1)
p2+=1;
if(p3>1)
p3-=1;
//--- deslocar os pontos
if(!ElliotWave5PointChange(0,InpName,1,date[d2],price[p2]))
return;
if(!ElliotWave5PointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy*4/5;
//--- mover o primeiro e quarto ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar os seguintes valores
if(p1>1)
p1-=1;
if(p4<accuracy-1)
p4+=1;
//--- deslocar os pontos
if(!ElliotWave5PointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ElliotWave5PointChange(0,InpName,3,date[d4],price[p4]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();

2000-2014, MetaQuotes Software Corp.

448

Constantes Padro, Enumeradores e Estruturas


}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
ElliotWave5Delete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

449

Constantes Padro, Enumeradores e Estruturas

OBJ_ELLIOTWAVE3
Correo Onda Elliott.

Observao
Para "Correo Onda Elliott", possvel habilitar/desabilitar o modo de pontos de conexo das linhas
(propriedade OBJPROP_DRAWLINES), bem como definir o nvel de posicionamento da onda (a partir
da enumerao ENUM_ELLIOT_WAVE_DEGREE).
Exemplo
O seguinte script cria e move a correo da onda Elliott no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Correo da Onda Elliott\"."

#property description "Coordenadas dos pontos de ancoragem so definidos em percentagem da janela d


#property description "tamanho."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ElliotWave3";

// Nome do objeto

input int

InpDate1=10;

// Data do 1 ponto, %

input int

InpPrice1=90;

// Preo do 1 ponto, %

input int

InpDate2=30;

// Data do 2 ponto, %

input int

InpPrice2=10;

// Preo do 2 ponto, %

input int

InpPrice2=10;

// Data do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

450

Constantes Padro, Enumeradores e Estruturas


input int

InpPrice3=40;

// Preo do 3 ponto, %

input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR; // Nvel


input bool

InpDrawLines=true;

// Exibindo as linhas

input color

InpColor=clrRed;

// Cor das linhas

input ENUM_LINE_STYLE

InpStyle=STYLE_DASH;

// Estilo das linhas

input int

InpWidth=2;

// Largura das linha

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar "Correo da Onda Elliott" pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool ElliotWave3Create(const long

chart_ID=0,

// ID do grfico

const string

name="ElliotWave3",

// nome da onda

const int

sub_window=0,

// ndice da sub-jane

datetime

time1=0,

// primeiro ponto de

double

price1=0,

//primeiro ponto de p

datetime

time2=0,

// segundo ponto de t

double

price2=0,

// segundo ponto de p

datetime

time3=0,

// terceiro ponto de

double

price3=0,

// terceiro ponto de

const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE, // grau


const bool

draw_lines=true,

// exibindo as linhas

const color

clr=clrRed,

// cor do objeto

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo das linhas

const int

width=1,

// largura das linhas

const bool

back=false,

// no fundo

const bool

selection=true,

// destacar para move

const bool

hidden=true,

// ocultar na lista d

const long

z_order=0)

// prioridade para cl

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeElliotWave3EmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- Criar "Correo da Onda Elliott" pelas coordenadas fornecidas

if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE3,sub_window,time1,price1,time2,price2,time3,price3
{
Print(__FUNCTION__,
": falha ao criar \""Correo da Onda Elliott"\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir grau (tamanho da onda)
ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degree);
//--- habilitar (true) ou desabilitar (false) o modo de exibio das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,draw_lines);
//--- definir cor do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

2000-2014, MetaQuotes Software Corp.

451

Constantes Padro, Enumeradores e Estruturas


//--- definir o estilo da linha
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Move o ponto de ancoragem de Correo da Elliott

//+------------------------------------------------------------------+
bool ElliotWave3PointChange(const long

chart_ID=0,

// ID do grfico

const string name="ElliotWave3", // nome do objeto


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de

double

price=0)

// coordenada do ponto de ancoragem de

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir Correo da Onda Elliott

//+------------------------------------------------------------------+
bool ElliotWave3Delete(const long

chart_ID=0,

// ID do grfico

2000-2014, MetaQuotes Software Corp.

452

Constantes Padro, Enumeradores e Estruturas


const string name="ElliotWave3") // nome do objeto
{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,

": falha ao excluir \""Correo da Onda Elliott"\"! Cdigo de erro = ",GetLastError());


return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de pontos de ancoragem da Correo Onda Elliott|
//| e os valores padro estabelecidos para os pontos vazios

//+------------------------------------------------------------------+
void ChangeElliotWave3EmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- array para receber o tempo de abertura das ltimas 10 barras
datetime temp[];
ArrayResize(temp,10);
//--- receber dados
CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
//--- receber o valor de um ponto no grfico atual
double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do primeiro ponto no est definido, sero 9 barras a esquerda a partir da ltima
if(!time1)
time1=temp[0];
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- se o tempo do primeiro ponto no est definido, sero 5 barras a esquerda a partir da ltima
if(!time2)
time2=temp[4];
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price2)
price2=price1-300*point;
//--- se o tempo do primeiro ponto no est definido, ser uma barra a esquerda a partir da ltima
if(!time3)
time3=temp[8];
//--- se o preo do primeiro ponto no est definido, mover 200 pontos a mais do que o primeiro
if(!price3)
price3=price1-200*point;
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

453

Constantes Padro, Enumeradores e Estruturas


//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
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("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar a Correo da Onda Elliott
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;
//--- Criar Correo da Onda Elliott
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))
{

2000-2014, MetaQuotes Software Corp.

454

Constantes Padro, Enumeradores e Estruturas


return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem
//--- contador de loop
int v_steps=accuracy/5;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p3<accuracy-1)
p3+=1;
//--- mover o ponto
if(!ElliotWave3PointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy*4/5;
//--- movimentar o primeiro e segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar os seguintes valores
if(p1>1)
p1-=1;
if(p2<accuracy-1)
p2+=1;
//--- deslocar os pontos
if(!ElliotWave3PointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!ElliotWave3PointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico

2000-2014, MetaQuotes Software Corp.

455

Constantes Padro, Enumeradores e Estruturas


ElliotWave3Delete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

456

Constantes Padro, Enumeradores e Estruturas

OBJ_RECTANGLE
Retngulo.

Observao
Para retngulo, o modo de preenchimento com a cor pode ser definida usando a propriedade
OBJPROP_FILL.
Exemplo
O seguinte script cria e move o retngulo no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script cria o retngulo no grfico."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Rectangle"; // Nome do retngulo

input int

InpDate1=40;

// Data do 1 ponto, %

input int

InpPrice1=40;

// Preo do 1 ponto, %

input int

InpDate2=60;

// Data do 2 ponto, %

input int

InpPrice2=60;

// Preo do 2 ponto, %

input color

InpColor=clrRed;

// Cor do retngulo

input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo das linhas do retngulo

2000-2014, MetaQuotes Software Corp.

457

Constantes Padro, Enumeradores e Estruturas


input int

InpWidth=2;

// Largura das linhas do retngulo

input bool

InpFill=true;

// Preenchendo o retngulo com cor

input bool

InpBack=false;

// Retngulo de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar retngulo pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool RectangleCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Rectangle",

// nome do retngulo

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

const color

clr=clrRed,

// cor do retngulo

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do retngulo


const int

width=1,

// largura das linhas do retngulo

const bool

fill=false,

// preenchimento do retngulo com cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- redefine o valor de erro
ResetLastError();
//--- criar um retngulo pelas coordenadas dadas
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": falha ao criar um retngulo! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor do retngulo
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linhas do retngulo
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas do retngulo
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento do retngulo
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover o retngulo
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo

2000-2014, MetaQuotes Software Corp.

458

Constantes Padro, Enumeradores e Estruturas


//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem do retngulo

//+------------------------------------------------------------------+
bool RectanglePointChange(const long

chart_ID=0,

// ID do grfico

const string name="Rectangle", // nome do retngulo


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tem

double

price=0)

// coordenada do ponto de ancoragem de pre

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o retngulo

//+------------------------------------------------------------------+
bool RectangleDelete(const long

chart_ID=0,

// ID do grfico

const string name="Rectangle") // nome do retngulo


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o retngulo
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o retngulo! Cdigo de erro = ",GetLastError());

2000-2014, MetaQuotes Software Corp.

459

Constantes Padro, Enumeradores e Estruturas


return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores pontos de ancoragem do retngulo e definir

//| valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeRectangleEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem do retngulo

2000-2014, MetaQuotes Software Corp.

460

Constantes Padro, Enumeradores e Estruturas


datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar o retngulo
int d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- criar o retngulo
if(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem do retngulo
//--- contador de loop
int h_steps=bars/2;
//--- mover os pontos de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar os seguintes valores
if(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- deslocar os pontos
if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))

2000-2014, MetaQuotes Software Corp.

461

Constantes Padro, Enumeradores e Estruturas


return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int v_steps=accuracy/2;
//--- mover os pontos de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar os seguintes valores
if(p1<accuracy-1)
p1+=1;
if(p2>1)
p2-=1;
//--- deslocar os pontos
if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o retngulo do grfico
RectangleDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

462

Constantes Padro, Enumeradores e Estruturas

OBJ_TRIANGLE
Tringulo.

Observao
Para tringulo, o modo de preenchimento com pode ser definido usando a propriedade
OBJPROP_FILL.
Exemplo
O seguinte script cria e movimenta o tringulo no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script cria o tringulo no grfico."
#property description "Coordenadas de ponto de ancoragem so definidas em porcentagem de"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Triangle";

// Nome do tringulo

input int

InpDate1=25;

// Data do 1 ponto, %

input int

InpPrice1=50;

// Preo do 1 ponto, %

input int

InpDate2=70;

// Data do 2 ponto, %

input int

InpPrice2=70;

// Preo do 2 ponto, %

input int

InpDate3=65;

// Data do 3 ponto, %

input int

InpPrice3=20;

// Preo do 3 ponto, %

2000-2014, MetaQuotes Software Corp.

463

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor do tringulo

input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo das linhas triangulo


input int

InpWidth=2;

// Largura das linhas do tringulo

input bool

InpFill=false;

// Preenchendo tringulos com cor

input bool

InpBack=false;

// Tringulo de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar tringulo pelas coordenadas determinadas

//+------------------------------------------------------------------+
bool TriangleCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Triangle",

// nome do tringulo

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor do tringulo

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do tringulo


const int

width=1,

// largura das linhas do tringulo

const bool

fill=false,

// preenchendo tringulo com cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para o clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeTriangleEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- criar tringulo pelas coordenadas determinadas
if(!ObjectCreate(chart_ID,name,OBJ_TRIANGLE,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": falha ao criar tringulo! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor do tringulo
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo das linhas do tringulo
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da linha dos tringulos
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preencher o tringulo
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)

2000-2014, MetaQuotes Software Corp.

464

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de destacar o tringulo para mover
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover a ponto de ancoragem do tringulo

//+------------------------------------------------------------------+
bool TrianglePointChange(const long

chart_ID=0,

// ID do grafico

const string name="Triangle", // nome do tringulo


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o tringulo

//+------------------------------------------------------------------+
bool TriangleDelete(const long

chart_ID=0,

// ID do grfico

const string name="Triangle") // nome do tringulo


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o tringulo

2000-2014, MetaQuotes Software Corp.

465

Constantes Padro, Enumeradores e Estruturas


if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao deletar o tringulo! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Confira valores dos pontos de ancoragem do tringulo

//| e definir padro valores padro para aqueles vazios

//+------------------------------------------------------------------+
void ChangeTriangleEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do terceiro ponto no est definido,ele coincide com o tempo do segundo ponto
if(!time3)
time3=time2;
//--- se o preo do terceiro ponto no est definido, igual aquele do primeiro ponto
if(!price3)
price3=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||

2000-2014, MetaQuotes Software Corp.

466

Constantes Padro, Enumeradores e Estruturas


InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas dos pontos de ancoragem do tringulo
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o tringulo
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;
//--- criar um tringulo
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem da elipse

2000-2014, MetaQuotes Software Corp.

467

Constantes Padro, Enumeradores e Estruturas


//--- contador de loop
int v_steps=accuracy*3/10;
//--- mover o primeiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p1>1)
p1-=1;
//--- mover o ponto
if(!TrianglePointChange(0,InpName,0,date[d1],price[p1]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars*9/20-1;
//--- mover o segundo ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d2>1)
d2-=1;
//--- mover o ponto
if(!TrianglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
v_steps=accuracy/4;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p3<accuracy-1)
p3+=1;
//--- mover o ponto

2000-2014, MetaQuotes Software Corp.

468

Constantes Padro, Enumeradores e Estruturas


if(!TrianglePointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir tringulo do grfico
TriangleDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

469

Constantes Padro, Enumeradores e Estruturas

OBJ_ELLIPSE
Elipse.

Observao
Para elipse, o modo de preenchimento com a cor pode ser definida usando a propriedade
OBJPROP_FILL.
Exemplo
O seguinte script cria e move a Elipse no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.
//--- descrio
#property description "Script cria a Elipse no grfico."
#property description "Coordenadas dos pontos de ancoragem so definidas"
#property description "em porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Ellipse";

// Nome da elipse

input int

InpDate1=30;

// Data do 1 ponto, %

input int

InpPrice1=20;

// Preo do 1 ponto, %

input int

InpDate2=70;

// Data do 2 ponto, %

input int

InpPrice2=80;

// Preo do 2 ponto, %

input int

InpDate3=50;

// Data do 3 ponto, %

input int

InpPrice3=60;

// Preo do 3 ponto, %

input color

InpColor=clrRed;

// Cor da elipse

2000-2014, MetaQuotes Software Corp.

470

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas da elipse
input int

InpWidth=2;

// Largura das linhas da elipse

input bool

InpFill=false;

// Preenchendo elipse com cor

input bool

InpBack=false;

// Elipse de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar uma elipse pelas coordenadas fornecidas

//+------------------------------------------------------------------+
bool EllipseCreate(const long

chart_ID=0,

// ID de grfico

const string

name="Ellipse",

// nome da elipse

const int

sub_window=0,

// ndice da sub-janela

datetime

time1=0,

// primeiro ponto de tempo

double

price1=0,

// primeiro ponto de preo

datetime

time2=0,

// segundo ponto de tempo

double

price2=0,

// segundo ponto de preo

datetime

time3=0,

// terceiro ponto de tempo

double

price3=0,

// terceiro ponto de preo

const color

clr=clrRed,

// cor da elipse

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas da elipse


const int

width=1,

// largura das linhas da elipse

const bool

fill=false,

// preenchimento da elipse com cor

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeEllipseEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma elipse pelas coordenadas fornecidas
if(!ObjectCreate(chart_ID,name,OBJ_ELLIPSE,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": falha ao criar uma elipse! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir uma cor de elipse
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linhas da elipse
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura das linhas da elipse
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- habilitar (true) ou desabilitar (false) o modo de preenchimento da elipse
ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

2000-2014, MetaQuotes Software Corp.

471

Constantes Padro, Enumeradores e Estruturas


//--- habilitar (true) ou desabilitar (false) o modo de destaque para mover a elipse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem da elipse

//+------------------------------------------------------------------+
bool EllipsePointChange(const long

chart_ID=0,

// ID do grfico

const string name="Ellipse", // nome da elipse


const int

point_index=0,

// ndice do ponto de ancoragem

datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir elipse

//+------------------------------------------------------------------+
bool EllipseDelete(const long

chart_ID=0,

// ID do grfico

const string name="Ellipse") // nome da elipse


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir uma elipse
if(!ObjectDelete(chart_ID,name))

2000-2014, MetaQuotes Software Corp.

472

Constantes Padro, Enumeradores e Estruturas


{
Print(__FUNCTION__,
": falha ao excluir uma elipse! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Ver valores de pontos ncora da elipse e definir valores padres|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeEllipseEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2,
datetime &time3,double &price3)
{
//--- se o tempo do primeiro ponto no est definido, ser na barra atual
if(!time1)
time1=TimeCurrent();
//--- se o preo do primeiro ponto no est definido, ele ter valor Bid
if(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- se o tempo do segundo ponto no est definido, est localizado a 9 barras deixadas a partir d
if(!time2)
{
//--- array para receber o tempo de abertura das ltimos 10 barras
datetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- definir o segundo ponto 9 barras a esquerda do primeiro
time2=temp[0];
}
//--- se o preo do primeiro ponto no est definido, mover 300 pontos a mais do que o segundo
if(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- se o tempo do terceiro ponto no est definido,ele coincide com o tempo do segundo ponto
if(!time3)
time3=time2;
//--- se o preo do terceiro ponto no est definido, igual aquele do primeiro ponto
if(!price3)
price3=price1;
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||

2000-2014, MetaQuotes Software Corp.

473

Constantes Padro, Enumeradores e Estruturas


InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar as coordenadas de pontos de ancoragem da elipse
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar a elipse
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;
//--- criar uma elipse
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;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover os pontos de ancoragem da elipse
//--- contador de loop

2000-2014, MetaQuotes Software Corp.

474

Constantes Padro, Enumeradores e Estruturas


int v_steps=accuracy/5;
//--- movimentar o primeiro e segundo ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar os seguintes valores
if(p1<accuracy-1)
p1+=1;
if(p2>1)
p2-=1;
//--- deslocar os pontos
if(!EllipsePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!EllipsePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int h_steps=bars/5;
//--- mover o terceiro ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d3>1)
d3-=1;
//--- mover o ponto
if(!EllipsePointChange(0,InpName,2,date[d3],price[p3]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir elipse a partir do grfico
EllipseDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//---

2000-2014, MetaQuotes Software Corp.

475

Constantes Padro, Enumeradores e Estruturas


}

2000-2014, MetaQuotes Software Corp.

476

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_THUMB_UP
Sinal Thumbs Up.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O seguinte script cria e move sinal Thumbs Up no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha sinal \"Thumbs Up\"."
#property description "Coordenadas do ponto de ancoragem configurado em porcentagem do"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ThumbUp";

// Nome do sinal

input int

InpDate=75;

// Ponto de ancoragem da data em %

input int

InpPrice=25;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Tipo de ancoragem


input color

InpColor=clrRed;

// Cor do sinal

2000-2014, MetaQuotes Software Corp.

477

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo da linha da borda

input int

InpWidth=5;

// Tamanho do sinal

input bool

InpBack=false;

// Sinal do fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar sinal Thumbs Up

//+------------------------------------------------------------------+
bool ArrowThumbUpCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ThumbUp",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do temp

double

price=0,

// ponto de ancoragem do pre

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo de linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_UP,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar sinal \"Thumbs Up\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

2000-2014, MetaQuotes Software Corp.

478

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowThumbUpMove(const long

chart_ID=0,

// ID do grfico

const string name="ThumbUp", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tipo de ancoragem do sinal Thumbs Up

//+------------------------------------------------------------------+
bool ArrowThumbUpAnchorChange(const long
const string

chart_ID=0,

// ID do Grfico

name="ThumbUp",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

479

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Thumbs Up

//+------------------------------------------------------------------+
bool ArrowThumbUpDelete(const long

chart_ID=0,

// ID do grfico

const string name="ThumbUp") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Thumbs Up\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;

2000-2014, MetaQuotes Software Corp.

480

Constantes Padro, Enumeradores e Estruturas


//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar sinal Thumbs Up no grfico
if(!ArrowThumbUpCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int h_steps=bars/4;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d>1)
d-=1;
//--- mover o ponto
if(!ArrowThumbUpMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;

2000-2014, MetaQuotes Software Corp.

481

Constantes Padro, Enumeradores e Estruturas


//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int v_steps=accuracy/4;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p<accuracy-1)
p+=1;
//--- mover o ponto
if(!ArrowThumbUpMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowThumbUpAnchorChange(0,InpName,ANCHOR_BOTTOM);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowThumbUpDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

482

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_THUMB_DOWN
Sinal Thumbs Down.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O seguinte script cria e move o sinal Thumbs Down no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script desenha sinal \"Thumbs Down\"."
#property description "Coordenadas do ponto de ancoragem configurado em porcentagem do"
#property description "tamanho da janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ThumbDown";

// nome do sinal

input int

InpDate=25;

// Ponto de ancoragem da data em %

input int

InpPrice=75;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Tipo de ancoragem

2000-2014, MetaQuotes Software Corp.

483

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor do sinal

input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo de linha da borda

input int

InpWidth=5;

// Tamanho do Sinal

input bool

InpBack=false;

// Fundo do sinal

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar sinal Thumbs Down

//+------------------------------------------------------------------+
bool ArrowThumbDownCreate(const long

chart_ID=0,

// ID do grfico

name="ThumbDown",

// nome do sinal

const int

sub_window=0,

// ndice de sub-janela

datetime

time=0,

// ponto de ancoragem do te

double

price=0,

// ponto de ancoragem do pr

const string

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo de linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de obje

const long

z_order=0)

// prioridade para clicar n

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_DOWN,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar sinal \"Thumbs Down\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto

2000-2014, MetaQuotes Software Corp.

484

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowThumbDownMove(const long

chart_ID=0,

// ID do grfico

const string name="ThumbDown", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de tempo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tipo de ancoragem do sinal Thumbs Down

//+------------------------------------------------------------------+
bool ArrowThumbDownAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="ThumbDown",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);

2000-2014, MetaQuotes Software Corp.

485

Constantes Padro, Enumeradores e Estruturas


}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Thumbs Down

//+------------------------------------------------------------------+
bool ArrowThumbDownDelete(const long

chart_ID=0,

// ID do grfico

const string name="ThumbDown") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Thumbs Down\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo

2000-2014, MetaQuotes Software Corp.

486

Constantes Padro, Enumeradores e Estruturas


int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar sinal Thumbs Down no grfico
if(!ArrowThumbDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int h_steps=bars/4;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!ArrowThumbDownMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())

2000-2014, MetaQuotes Software Corp.

487

Constantes Padro, Enumeradores e Estruturas


return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- contador de loop
int v_steps=accuracy/4;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p>1)
p-=1;
//--- mover o ponto
if(!ArrowThumbDownMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowThumbDownAnchorChange(0,InpName,ANCHOR_TOP);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowThumbDownDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

488

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_UP
Sinal Arrow Up.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O seguinte script cria e move sinal Arrow Up no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha sinal \"Arrow Up\"."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ArrowUp";

// Nome do sinal

input int

InpDate=25;

// Ponto de ancoragem da data em %

input int

InpPrice=25;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Tipo de ancoragem


input color

InpColor=clrRed;

// Cor do sinal

2000-2014, MetaQuotes Software Corp.

489

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo da linha da borda

input int

InpWidth=5;

// Tamanho do sinal

input bool

InpBack=false;

// Sinal do fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar sinal Arrow Up

//+------------------------------------------------------------------+
bool ArrowUpCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ArrowUp",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo de linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_UP,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar o sinal \"Arrow Up\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

2000-2014, MetaQuotes Software Corp.

490

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowUpMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowUp", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tipo de ancoragem do sinal Arrow Down

//+------------------------------------------------------------------+
bool ArrowUpAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="ArrowUp",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a ancoragem do ponto de locao
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

491

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Arrow Up

//+------------------------------------------------------------------+
bool ArrowUpDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowUp") // nome sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Arrow Up\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;

2000-2014, MetaQuotes Software Corp.

492

Constantes Padro, Enumeradores e Estruturas


//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar sinal Arrow Up no grfico
if(!ArrowUpCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p<accuracy-1)
p+=1;
//--- mover o ponto
if(!ArrowUpMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;

2000-2014, MetaQuotes Software Corp.

493

Constantes Padro, Enumeradores e Estruturas


//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowUpAnchorChange(0,InpName,ANCHOR_BOTTOM);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowUpDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

494

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_DOWN
Sinal Arrow Down.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O seguinte script cria e move sinal Arrow Down no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.
//--- descrio
#property description "Script desenha sinal \"Arrow Down\"."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ArrowDown";

// Nome do Sinal

input int

InpDate=75;

// Ponto de ancoragem da data em %

input int

InpPrice=75;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Tipo de Ancoragem


input color

InpColor=clrRed;

// Cor do sinal

input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo de linha da borda

2000-2014, MetaQuotes Software Corp.

495

Constantes Padro, Enumeradores e Estruturas


input int

InpWidth=5;

// Tamanho do Sinal

input bool

InpBack=false;

// Fundo do sinal

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar sinal Arrow Down

//+------------------------------------------------------------------+
bool ArrowDownCreate(const long

chart_ID=0,

// ID do grfico

name="ArrowDown",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const string

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// Ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mou

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_DOWN,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar o sinal \"Arrow Down\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

2000-2014, MetaQuotes Software Corp.

496

Constantes Padro, Enumeradores e Estruturas


//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowDownMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowDown", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tipo de ancoragem do sinal Arrow Down

//+------------------------------------------------------------------+
bool ArrowDownAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="ArrowDown",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar a ancoragem do ponto de locao
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo

2000-2014, MetaQuotes Software Corp.

497

Constantes Padro, Enumeradores e Estruturas


return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Arrow Down

//+------------------------------------------------------------------+
bool ArrowDownDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowDown") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal\"Arrow Down\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados

2000-2014, MetaQuotes Software Corp.

498

Constantes Padro, Enumeradores e Estruturas


//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar o sinal Arrow Down no grfico
if(!ArrowDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int v_steps=accuracy/2;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p>1)
p-=1;
//--- mover o ponto
if(!ArrowDownMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico

2000-2014, MetaQuotes Software Corp.

499

Constantes Padro, Enumeradores e Estruturas


ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowDownAnchorChange(0,InpName,ANCHOR_TOP);
//--- redesenhar o grfico
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowDownDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

500

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_STOP
Sinal Stop.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O seguinte script cria e move sinal Stop no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script desenha sinal\"Stop\"."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ArrowStop";

// Nome do sinal

input int

InpDate=10;

// Ponto de ancoragem da data em %

input int

InpPrice=50;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Tipo de ancoragem


input color

InpColor=clrRed;

// Cor do sinal

2000-2014, MetaQuotes Software Corp.

501

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo de linha da borda

input int

InpWidth=5;

// Tamanho do Sinal

input bool

InpBack=false;

// Fundo do sinal

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar sinal Stop

//+------------------------------------------------------------------+
bool ArrowStopCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ArrowStop",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// Ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mou

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_STOP,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar o sinal\"Stop\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

2000-2014, MetaQuotes Software Corp.

502

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowStopMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowStop", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tipo de ancoragem do sinal Stop

//+------------------------------------------------------------------+
bool ArrowStopAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="ArrowStop",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // posio do ponto de ancora


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

503

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Stop

//+------------------------------------------------------------------+
bool ArrowStopDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowStop") // nome da etiqueta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Stop\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;

2000-2014, MetaQuotes Software Corp.

504

Constantes Padro, Enumeradores e Estruturas


//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar sinal Stop no grfico
if(!ArrowStopCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int h_steps=bars*2/5;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!ArrowStopMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;

2000-2014, MetaQuotes Software Corp.

505

Constantes Padro, Enumeradores e Estruturas


//--- redesenhar o grfico
ChartRedraw();
// 0.025 segundos de atraso
Sleep(25);
}
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowStopAnchorChange(0,InpName,ANCHOR_TOP);
//--- redesenhar o grfico
ChartRedraw();
//--- contador de loop
h_steps=bars*2/5;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!ArrowStopMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.025 segundos de atraso
Sleep(25);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowStopDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

506

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_STOP
Check sign.

Observao
Posio do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador
ENUM_ARROW_ANCHOR.
Sinais de grande porte (mais de 5) somente sero criados, definindo corretamente o valor da
propriedade OBJPROP_WIDTH ao escrever um cdigo no MetaEditor.
Exemplo
O script seguinte cria e move o sinal Check no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha o sinal \"Check\"."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="ArrowCheck"; // Nome do sinal

input int

InpDate=10;

// Ponto de ancoragem da data em %

input int

InpPrice=50;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Tipo de ancoragem


input color

InpColor=clrRed;

// Cor do sinal

2000-2014, MetaQuotes Software Corp.

507

Constantes Padro, Enumeradores e Estruturas


input ENUM_LINE_STYLE

InpStyle=STYLE_DOT;

// Estilo da linha da borda

input int

InpWidth=5;

// Tamanho do sinal

input bool

InpBack=false;

// Sinal do fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar sinal Check

//+------------------------------------------------------------------+
bool ArrowCheckCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ArrowCheck",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem de tempo

double

price=0,

// ponto de ancoragem de preo

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem


const color

clr=clrRed,

// cor do sinal

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo a linha da borda

const int

width=3,

// tamanho do sinal

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// Ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mo

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_CHECK,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar o sinal\"Check\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- tamanho da definio do sinal
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

2000-2014, MetaQuotes Software Corp.

508

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowCheckMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowCheck", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem do tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tipo de ancoragem Check

//+------------------------------------------------------------------+
bool ArrowCheckAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="ArrowCheck", // nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

509

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir os sinal Check

//+------------------------------------------------------------------+
bool ArrowCheckDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowCheck") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Check\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;

2000-2014, MetaQuotes Software Corp.

510

Constantes Padro, Enumeradores e Estruturas


//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos para desenhar o sinal
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar o sinal Check no grfico
if(!ArrowCheckCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem e alterar sua posio em relao ao sinal
//--- contador de loop
int h_steps=bars*2/5;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!ArrowCheckMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;

2000-2014, MetaQuotes Software Corp.

511

Constantes Padro, Enumeradores e Estruturas


//--- redesenhar o grfico
ChartRedraw();
// 0.025 segundos de atraso
Sleep(25);
}
//--- alterar a localizao do ponto de ancoragem relativa ao sinal
ArrowCheckAnchorChange(0,InpName,ANCHOR_BOTTOM);
//--- redesenhar o grfico
ChartRedraw();
//--- contador de loop
h_steps=bars*2/5;
//--- mover o ponto de ancoragem
for(int i=0;i<h_steps;i++)
{
//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!ArrowCheckMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.025 segundos de atraso
Sleep(25);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- deletar o sinal do grfico
ArrowCheckDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

512

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_LEFT_PRICE
Etiqueta de Preo Esquerda

Exemplo
O seguinte script cria e move a Etiqueta Preo Lado Esquerdo no grfico. Funes especiais tm
sido desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script cria a Etiqueta Preo Lado Esquerdo no grfico."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="LeftPrice";

// Nome da Etiqueta Preo

input int

InpDate=100;

// Ponto de ancoragem da data em %

input int

InpPrice=10;

// Ponto de ancoragem do preo em %

input color

InpColor=clrRed;

// Cor da Etiqueta Preo

input ENUM_LINE_STYLE

InpStyle=STYLE_SOLID; // Estilo de linha da borda

input int

InpWidth=2;

// Tamanho da Etiqueta Preo

input bool

InpBack=false;

// Fundo Etiqueta

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar Etiqueta Preo Lado Esquerdo

2000-2014, MetaQuotes Software Corp.

513

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
bool ArrowLeftPriceCreate(const long

chart_ID=0,

// ID do grfico

const string

name="LeftPrice",

// nome da etiqueta de preo

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const color

clr=clrRed,

// cor da etiqueta de preo

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha da borda


const int

width=1,

// tamanho da etiqueta de preo

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mou

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma etiqueta de preo
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_LEFT_PRICE,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar a etiqueta preo lado esquerdo! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

514

Constantes Padro, Enumeradores e Estruturas


bool ArrowLeftPriceMove(const long

chart_ID=0,

// ID do grfico

const string name="LeftPrice", // nome da etiqueta


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de tempo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir a etiqueta preo lado esquerdo do grfico

//+------------------------------------------------------------------+
bool ArrowLeftPriceDelete(const long

chart_ID=0,

// ID grfico

const string name="LeftPrice") // nome etiqueta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,

": falha ao excluir a etiqueta preo lado esquerda! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();

2000-2014, MetaQuotes Software Corp.

515

Constantes Padro, Enumeradores e Estruturas


//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para configurao e alterao das coordenadas do ponto de ancoragem da etiqueta
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos por desenhar a etiqueta
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar etiqueta preo lado esquerdo no grfico
if(!ArrowLeftPriceCreate(0,InpName,0,date[d],price[p],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;

2000-2014, MetaQuotes Software Corp.

516

Constantes Padro, Enumeradores e Estruturas


}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem
//--- contador de loop
int v_steps=accuracy*4/5;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p<accuracy-1)
p+=1;
//--- mover o ponto
if(!ArrowLeftPriceMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
ArrowLeftPriceDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

517

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_RIGHT_PRICE
Etiqueta Preo Lado Direito.

Exemplo
O seguinte script cria e move a Etiqueta Preo Lado Direito no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script cria a Etiqueta Preo Lado Direito no grfico."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="RightPrice"; // Nome da Etiqueta Preo

input int

InpDate=0;

// Ponto de ancoragem da data em %

input int

InpPrice=90;

// Ponto de ancoragem do preo em %

input color

InpColor=clrRed;

// Cor da Etiqueta Preo

input ENUM_LINE_STYLE

InpStyle=STYLE_SOLID; // Estilo de linha da borda

input int

InpWidth=2;

// Tamanho da Etiqueta Preo

input bool

InpBack=false;

// Fundo Etiqueta

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar a etiqueta preo lado direito

2000-2014, MetaQuotes Software Corp.

518

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
bool ArrowRightPriceCreate(const long

chart_ID=0,

// ID do grfico

const string

name="RightPrice", // nome do preo da etiqueta

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const color

clr=clrRed,

// cor da etiqueta de preo

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha da borda


const int

width=1,

// tamanho da etiqueta de preo

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mo

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma etiqueta de preo
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price))
{
Print(__FUNCTION__,

": falha ao criar a etiqueta de preo lado direito! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir a cor da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

519

Constantes Padro, Enumeradores e Estruturas


bool ArrowRightPriceMove(const long

chart_ID=0,

// ID do grfico

const string name="RightPrice", // nome da etiqueta


datetime

time=0,

// coordenada do ponto de ancoragem de tem

double

price=0)

// coordenada do ponto de ancoragem de pre

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir a etiqueta de preo lado direito do grfico

//+------------------------------------------------------------------+
bool ArrowRightPriceDelete(const long

chart_ID=0,

// ID Grfico

const string name="RightPrice") // nome da etiqueta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,

": falha ao excluir a etiqueta de preo lado direito! Cdigo de erro = ",GetLastError()
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();

2000-2014, MetaQuotes Software Corp.

520

Constantes Padro, Enumeradores e Estruturas


//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para configurao e alterao das coordenadas do ponto de ancoragem da etiqueta
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir os pontos por desenhar a etiqueta
int d=InpDate*(bars-1)/100;
int p=InpPrice*(accuracy-1)/100;
//--- criar a etiqueta de preo lado direito
if(!ArrowRightPriceCreate(0,InpName,0,date[d],price[p],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;

2000-2014, MetaQuotes Software Corp.

521

Constantes Padro, Enumeradores e Estruturas


}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o ponto de ancoragem
//--- contador de loop
int v_steps=accuracy*4/5;
//--- mover o ponto de ancoragem
for(int i=0;i<v_steps;i++)
{
//--- usar o seguinte valor
if(p>1)
p-=1;
//--- mover o ponto
if(!ArrowRightPriceMove(0,InpName,date[d],price[p]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta do grfico
ArrowRightPriceDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

522

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_BUY
Sinal Buy.

Exemplo
O seguinte script cria e move o sinal Buy no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script desenha sinais \"Buy\" na janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input color InpColor=C'3,95,172'; // Cores dos sinais
//+------------------------------------------------------------------+
//| Criar sinal Buy

//+------------------------------------------------------------------+
bool ArrowBuyCreate(const long

chart_ID=0,

// ID de grfico

const string

name="ArrowBuy",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const color

clr=C'3,95,172',

// cor do sinal

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha (quando destacada)


const int

width=1,

// tamanho da linha (quando destacada)

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

2000-2014, MetaQuotes Software Corp.

523

Constantes Padro, Enumeradores e Estruturas


const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para o clique do mouse

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_BUY,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar sinal \"Buy\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir um estilo de linha (quando destacado)
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir um tamanho de linha (quando destacado)
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowBuyMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowBuy", // nome do objeto


datetime

time=0,

// coordenar o ponto de ancoragem do tempo

double

price=0)

// coordenar o ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))

2000-2014, MetaQuotes Software Corp.

524

Constantes Padro, Enumeradores e Estruturas


{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Buy

//+------------------------------------------------------------------+
bool ArrowBuyDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowBuy") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal \"Buy\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date[]; // array para armazenar datas das barras visveis
double

low[];

// array para armazenar preos Baixos das barras visveis

double

high[]; // array para armazenar preos Altos das barras visveis

//--- nmero de barras visveis na janela do grfico


int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);

2000-2014, MetaQuotes Software Corp.

525

Constantes Padro, Enumeradores e Estruturas


//--- alocao de memria
ArrayResize(date,bars);
ArrayResize(low,bars);
ArrayResize(high,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Baixos
if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
{
Print("Falha ao copiar os valores dos preos Baixos! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Altos
if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
{
Print("Falha ao copiar os valores dos preos Altos! Cdigo de erro = ",GetLastError());
return;
}
//--- criar sinais Buy de ponto de baixa para cada barra visvel
for(int i=0;i<bars;i++)
{
if(!ArrowBuyCreate(0,"ArrowBuy_"+(string)i,0,date[i],low[i],InpColor))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- mover sinal Buy de ponto alto para cada barra visvel
for(int i=0;i<bars;i++)
{
if(!ArrowBuyMove(0,"ArrowBuy_"+(string)i,date[i],high[i]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}

2000-2014, MetaQuotes Software Corp.

526

Constantes Padro, Enumeradores e Estruturas


//--- excluir sinais Buy
for(int i=0;i<bars;i++)
{
if(!ArrowBuyDelete(0,"ArrowBuy_"+(string)i))
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--}

2000-2014, MetaQuotes Software Corp.

527

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW_SELL
Sell sign.

Exemplo
O seguinte script cria e move o sinal Sell no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script desenha sinal \"Sell\" na janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input color InpColor=C'225,68,29'; // Cor do sinal
//+------------------------------------------------------------------+
//| Criar sinal Sell

//+------------------------------------------------------------------+
bool ArrowSellCreate(const long

chart_ID=0,

// ID do grfico

const string

name="ArrowSell",

// nome do sinal

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const color

clr=C'225,68,29',

// cor do sinal

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha (quando destacado)


const int

width=1,

// tamanho da linha (quando destacada

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

2000-2014, MetaQuotes Software Corp.

528

Constantes Padro, Enumeradores e Estruturas


const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar o sinal
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_SELL,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar sinal \"Sell\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir uma cor de sinal
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir um estilo de linha (quando destacado)
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir um tamanho de linha (quando destacado)
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowSellMove(const long

chart_ID=0,

// ID do grfico

const string name="ArrowSell", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))

2000-2014, MetaQuotes Software Corp.

529

Constantes Padro, Enumeradores e Estruturas


{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir sinal Sell

//+------------------------------------------------------------------+
bool ArrowSellDelete(const long

chart_ID=0,

// ID do grfico

const string name="ArrowSell") // nome do sinal


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o sinal
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o sinal\"Sell\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date[]; // array para armazenar datas das barras visveis
double

low[];

// array para armazenar preos Baixos das barras visveis

double

high[]; // array para armazenar preos Altos das barras visveis

//--- nmero de barras visveis na janela do grfico


int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);

2000-2014, MetaQuotes Software Corp.

530

Constantes Padro, Enumeradores e Estruturas


//--- alocao de memria
ArrayResize(date,bars);
ArrayResize(low,bars);
ArrayResize(high,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Baixos
if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
{
Print("Falha ao copiar os valores dos preos Baixos! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Altos
if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
{
Print("Falha ao copiar os valores dos preos Altos! Cdigo de erro = ",GetLastError());
return;
}
//--- criar sinais Sell no ponto Alto para cada barra visvel
for(int i=0;i<bars;i++)
{
if(!ArrowSellCreate(0,"ArrowSell_"+(string)i,0,date[i],high[i],InpColor))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- mover sinais Sell para ponto Baixo em cada barra visvel
for(int i=0;i<bars;i++)
{
if(!ArrowSellMove(0,"ArrowSell_"+(string)i,date[i],low[i]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}

2000-2014, MetaQuotes Software Corp.

531

Constantes Padro, Enumeradores e Estruturas


//--- excluir sinal Sell
for(int i=0;i<bars;i++)
{
if(!ArrowSellDelete(0,"ArrowSell_"+(string)i))
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--}

2000-2014, MetaQuotes Software Corp.

532

Constantes Padro, Enumeradores e Estruturas

OBJ_ARROW
Objeto Seta.

Observao
Posio do ponto de
ENUM_ARROW_ANCHOR.

ancoragem

relativo

ao

objeto

ser

selecionado

partir

do

As setas grandes (mais do que 5) somente sero criadas pela configurao de valores apropriados da
propriedade OBJPROP_WIDTH quando escrever um cdigo no MetaEditor.
O tipo de seta necessrio podem ser selecionado, definindo um dos cdigos dos smbolos da fonte
Wingdings.
Exemplo
O seguinte script cria um objeto Seta no grfico e altera seu tipo. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script cria uma seta aleatria na janela do grfico."
#property description "Coordenadas do ponto de ancoragem definido em"
#property description "porcentagem do tamanho da janela de grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Arrow";

// Nome da seta

input int

InpDate=50;

// Ponto de ancoragem da data em %

2000-2014, MetaQuotes Software Corp.

533

Constantes Padro, Enumeradores e Estruturas


input int

InpPrice=50;

// Ponto de ancoragem do preo em %

input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP;

// Tipo de ancoragem

input color

InpColor=clrDodgerBlue; // Cor da seta

input ENUM_LINE_STYLE

InpStyle=STYLE_SOLID;

// Estilo de linha da borda

input int

InpWidth=10;

// Tamanho da seta

input bool

InpBack=false;

// Seta do fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar a seta

//+------------------------------------------------------------------+
bool ArrowCreate(const long

chart_ID=0,

// ID do grfico

name="Arrow",

// nome da seta

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tmepo

double

price=0,

// ponto de ancoragem do preo

const uchar

arrow_code=252,

// cdigo da seta

const string

const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // posio do ponto de ancoragem


const color

clr=clrRed,

// cor da seta

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da linha da borda

const int

width=3,

// tamanho da seta

const bool

back=false,

// no fundo

const bool

selection=true,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeArrowEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar uma seta
if(!ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar uma seta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir o cdigo da seta
ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,arrow_code);
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir a cor da seta
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho da seta
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)

2000-2014, MetaQuotes Software Corp.

534

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (true) o modo do movimento da seta com o mouse
//--- ao criar um objeto grfico usando a funo ObjectCreate, o objeto no pode ser
//--- destacado e movimentado por padro. Dentro deste mtodo, o parmetro de seleo
//--- verdade por padro, tornando possvel destacar e mover o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool ArrowMove(const long

chart_ID=0,

// ID do grfico

const string name="Arrow", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem de tempo

double

price=0)

// coordenada do ponto de ancoragem de preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o cdigo da seta

//+------------------------------------------------------------------+
bool ArrowCodeChange(const long

chart_ID=0,

// ID do grfico

const string name="Arrow", // nome do objeto


const uchar

code=252)

// cdigo da seta

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar o cdigo da seta

2000-2014, MetaQuotes Software Corp.

535

Constantes Padro, Enumeradores e Estruturas


if(!ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,code))
{
Print(__FUNCTION__,
": falha ao alterar o cdigo da seta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tipo de ancoragem

//+------------------------------------------------------------------+
bool ArrowAnchorChange(const long
const string

chart_ID=0,

// ID do grfico

name="Arrow",

// nome do objeto

const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
{
Print(__FUNCTION__,
": falha para alterar o tipo de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir uma seta

//+------------------------------------------------------------------+
bool ArrowDelete(const long

chart_ID=0,

// ID do grfico

const string name="Arrow") // nome da seta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir uma seta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir uma seta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

2000-2014, MetaQuotes Software Corp.

536

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tamanho do array de preo
int accuracy=1000;
//--- arrays para armazenar data e valores de preo para serem usados
//--- para definir e alterar sinal das coordenadas do ponto de ancoragem
datetime date[];
double

price[];

//--- alocao de memria


ArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array de preos
//--- encontrar os maiores e menores valores do grfico
double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- definir uma etapa de mudana de um preo e preencher o array
double step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- definir pontos para desenhar a seta
int d=InpDate*(bars-1)/100;

2000-2014, MetaQuotes Software Corp.

537

Constantes Padro, Enumeradores e Estruturas


int p=InpPrice*(accuracy-1)/100;
//--- criar uma seta no grfico
if(!ArrowCreate(0,InpName,0,date[d],price[p],32,InpAnchor,InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico
ChartRedraw();
//--- analisar todos os casos de criao de setas no loop
for(int i=33;i<256;i++)
{
if(!ArrowCodeChange(0,InpName,(uchar)i))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// meio segundo de atraso
Sleep(500);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a seta do grfico
ArrowDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

538

Constantes Padro, Enumeradores e Estruturas

OBJ_TEXT
Objeto Texto.

Observao
Posio de ponto de ancoragem em relao ao texto pode ser selecionado a partir do enumerador
ENUM_ANCHOR_POINT. Voc tambm pode alterar o ngulo de inclinao de texto usando a
propriedade OBJPROP_ANGLE.
Exemplo
O seguinte o script cria vrios objetos de texto no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script cria objeto grfico de \"Texto\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpFont="Arial";

// Fonte

input int

InpFontSize=10;

// Tamanho da fonte

input color

InpColor=clrRed;

// Cor

input double

InpAngle=90.0;

// ngulo de inclinao em graus

input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_BOTTOM; // Tipo de ancoragem


input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

2000-2014, MetaQuotes Software Corp.

539

Constantes Padro, Enumeradores e Estruturas


input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criando objeto Texto

//+------------------------------------------------------------------+
bool TextCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Text",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const string

text="Text",

// o prprio texto

const string

font="Arial",

// fonte

const int

font_size=10,

// tamanho da fonte

const color

clr=clrRed,

// cor

const double

angle=0.0,

// inclinao do texto

const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // tipo de ancoragem


const bool

back=false,

/ no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mous

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeTextEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar objeto Texto
if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar objeto \"Texto\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir o texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir o texto fonte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- definir tamanho da fonte
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- definir o ngulo de inclinao do texto
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo de mover o objeto com o mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto

2000-2014, MetaQuotes Software Corp.

540

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem

//+------------------------------------------------------------------+
bool TextMove(const long

chart_ID=0,

// ID do grfico

const string name="Text", // nome do objeto


datetime

time=0,

// coordenada do ponto de ancoragem do tempo

double

price=0)

// coordenada do ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o texto do objeto

//+------------------------------------------------------------------+
bool TextChange(const long

chart_ID=0,

// ID do Grfico

const string name="Text", // nome do objeto


const string text="Text") // texto
{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);

2000-2014, MetaQuotes Software Corp.

541

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Excluir objeto Texto

//+------------------------------------------------------------------+
bool TextDelete(const long

chart_ID=0,

// Id do Grfico

const string name="Text") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o objeto \"Texto\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeTextEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date[]; // array para armazenar datas das barras visveis
double

low[];

// array para armazenar preos Baixos das barras visveis

double

high[]; // array para armazenar preos Altos das barras visveis

//--- nmero de barras visveis na janela do grfico


int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- alocao de memria
ArrayResize(date,bars);
ArrayResize(low,bars);
ArrayResize(high,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)

2000-2014, MetaQuotes Software Corp.

542

Constantes Padro, Enumeradores e Estruturas


{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Baixos
if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
{
Print("Falha ao copiar os valores dos preos Baixos! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Altos
if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
{
Print("Falha ao copiar os valores dos preos Altos! Cdigo de erro = ",GetLastError());
return;
}
//--- definir a forma como muitas vezes os textos sero exibidos
int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- definir o passo
int step=1;
switch(scale)
{
case 0:
step=12;
break;
case 1:
step=6;
break;
case 2:
step=4;
break;
case 3:
step=2;
break;
}
//--- criar textos para os valores de barras de Alta e de Baixa (com intervalos)
for(int i=0;i<bars;i+=step)
{
//--- criar os textos

if(!TextCreate(0,"TextHigh_"+(string)i,0,date[i],high[i],DoubleToString(high[i],5),InpFont,In
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}

if(!TextCreate(0,"TextLow_"+(string)i,0,date[i],low[i],DoubleToString(low[i],5),InpFont,InpFo
InpColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}

2000-2014, MetaQuotes Software Corp.

543

Constantes Padro, Enumeradores e Estruturas


//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- meio segundo de atraso
Sleep(500);
//--- excluir os textos
for(int i=0;i<bars;i+=step)
{
if(!TextDelete(0,"TextHigh_"+(string)i))
return;
if(!TextDelete(0,"TextLow_"+(string)i))
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--}

2000-2014, MetaQuotes Software Corp.

544

Constantes Padro, Enumeradores e Estruturas

OBJ_LABEL
Objeto Etiqueta.

Observao
Posio do ponto de ancoragem relativa a etiqueta pode ser selecionada do enumerador
ENUM_ANCHOR_POINT. Coordenadas do ponto de ancoragem so em pixels.
Voc tambm pode selecionar uma ancoragem de etiqueta de texto no canto a partir do enumerador
ENUM_BASE_CORNER.
Exemplo
O seguinte script cria e move o objeto Edit no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script cria objeto grfico \"Etiqueta\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Label";

// Nome etiqueta

input int

InpX=150;

// distncia do eixo X

input int

InpY=150;

// distncia do eixo Y

input string

InpFont="Arial";

// Fonte

input int

InpFontSize=14;

// Tamanho da fonte

input color

InpColor=clrRed;

// Cor

input double

InpAngle=0.0;

// ngulo de inclinao em graus

2000-2014, MetaQuotes Software Corp.

545

Constantes Padro, Enumeradores e Estruturas


input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // Tipo de ancoragem
input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objetos

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar um a etiqueta de texto

//+------------------------------------------------------------------+
bool LabelCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Label",

// nome da etiqueta

const int

sub_window=0,

// ndice da sub-janela

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const ENUM_BASE_CORNER

corner=CORNER_LEFT_UPPER, // canto do grfico para ancorag

const string

text="Label",

// texto

const string

font="Arial",

// fonte

const int

font_size=10,

// tamanho da fonte

const color

clr=clrRed,

// cor

const double

angle=0.0,

// inclinao do texto

const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // tipo de ancoragem


const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clicar no mou

{
//--- redefine o valor de erro
ResetLastError();
//--- criar um a etiqueta de texto
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar uma etiqueta de texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- determinar o canto do grfico onde as coordenadas do ponto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir o texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir o texto fonte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- definir tamanho da fonte
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- definir o ngulo de inclinao do texto
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

2000-2014, MetaQuotes Software Corp.

546

Constantes Padro, Enumeradores e Estruturas


//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover a etiqueta de texto

//+------------------------------------------------------------------+
bool LabelMove(const long

chart_ID=0,

// ID do grfico

const string name="Label", // nome da etiqueta


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover a etiqueta de texto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar canto do grfico para vinculao da etiqueta

//+------------------------------------------------------------------+
bool LabelChangeCorner(const long
const string

chart_ID=0,

// ID do grfico

name="Label",

// nome da etiqueta

const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // canto do grfico para an


{
//--- redefine o valor de erro
ResetLastError();

2000-2014, MetaQuotes Software Corp.

547

Constantes Padro, Enumeradores e Estruturas


//--- alterar canto de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": falha ao alterar canto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o texto do objeto

//+------------------------------------------------------------------+
bool LabelTextChange(const long

chart_ID=0,

// ID do grfico

const string name="Label", // nome do objeto


const string text="Text")

// texto

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Apagar uma etiqueta de texto

//+------------------------------------------------------------------+
bool LabelDelete(const long

chart_ID=0,

// ID do grfico

const string name="Label") // nome da etiqueta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir a etiqueta de texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

2000-2014, MetaQuotes Software Corp.

548

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
void OnStart()
{
//--- armazenar as coordenadas das etiquetas nas variveis locais
int x=InpX;
int y=InpY;
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- verificar a exatido dos parmetros de entrada
if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- preparar texto inicial para a etiqueta
string text;
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
//--- criar uma etiqueta de texto no grfico
if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(500);
//--- mover a etiqueta e alterar o seu texto simultaneamente
//--- nmero de iteraes por eixos
int h_steps=(int)(x_distance/2-InpX);
int v_steps=(int)(y_distance/2-InpY);
//--- mover a etiqueta para baixo
for(int i=0;i<v_steps;i++)
{
//--- alterar a coordenada
y+=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");

2000-2014, MetaQuotes Software Corp.

549

Constantes Padro, Enumeradores e Estruturas


}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para a direita
for(int i=0;i<h_steps;i++)
{
//--- alterar a coordenada
x+=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para cima
for(int i=0;i<v_steps;i++)
{
//--- alterar a coordenada
y-=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para a esquerda
for(int i=0;i<h_steps;i++)
{
//--- alterar a coordenada
x-=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- agora, mover o ponto para mudar o canto de ancoragem
//--- mover para o canto inferior esquerdo
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o grfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto inferior direito
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto direito inferior: ",x,",",y);

2000-2014, MetaQuotes Software Corp.

550

Constantes Padro, Enumeradores e Estruturas


if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o grfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto superior direito
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o grfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto superior esquerdo
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o grfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- excluir a etiqueta
LabelDelete(0,InpName);
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(500);
//--}
//+------------------------------------------------------------------+
//| A funo movimenta o objeto e altera o seu texto

//+------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
{
//--- mover a etiqueta
if(!LabelMove(0,InpName,x,y))
return(false);
//--- alterar texto da etiqueta
StringConcatenate(text,text,x,",",y);
if(!LabelTextChange(0,InpName,text))
return(false);
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return(false);
//--- redesenhar o grfico
ChartRedraw();

2000-2014, MetaQuotes Software Corp.

551

Constantes Padro, Enumeradores e Estruturas


// 0.01 segundos de atraso
Sleep(10);
//--- sair da funo
return(true);
}

2000-2014, MetaQuotes Software Corp.

552

Constantes Padro, Enumeradores e Estruturas

OBJ_BUTTON
Objeto Boto.

Observao
Coordenadas do ponto de ancoragem so em pixels. Voc pode selecionar o boto de ancoragem de
canto a partir da ENUM_BASE_CORNER.
Exemplo
O seguinte script cria e move o objeto Boto no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.
//--- descrio
#property description "Script cria o Boto no grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Button";

// Nome do Boto

input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Canto do grfico para ancoragem


input string

InpFont="Arial";

// Fonte

input int

InpFontSize=14;

// Tamanho da fonte

input color

InpColor=clrBlack;

// Cor do texto

input color

InpBackColor=C'236,233,216'; // Fundo da cor

input color

InpBorderColor=clrNONE;

// Cor da Borda

input bool

InpState=false;

// Pressionado/Liberado

input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=false;

// Destaque para mover

2000-2014, MetaQuotes Software Corp.

553

Constantes Padro, Enumeradores e Estruturas


input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar o boto

//+------------------------------------------------------------------+
bool ButtonCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Button",

// nome do boto

const int

sub_window=0,

// ndice da sub-janela

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const int

width=50,

// largura do boto

const int

height=18,

// altura do boto

const ENUM_BASE_CORNER

corner=CORNER_LEFT_UPPER, // canto do grfico para ancora

const string

text="Button",

// texto

const string

font="Arial",

// fonte

const int

font_size=10,

// tamanho da fonte

const color

clr=clrBlack,

// cor do texto

const color

back_clr=C'236,233,216',

// cor do fundo

const color

border_clr=clrNONE,

// cor da borda

const bool

state=false,

// pressionada/liberada

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mo

{
//--- redefine o valor de erro
ResetLastError();
//--- criar o boto
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar o boto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas do boto
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- definir tamanho do boto
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- determinar o canto do grfico onde as coordenadas do ponto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir o texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir o texto fonte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- definir tamanho da fonte
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- definir a cor do texto

2000-2014, MetaQuotes Software Corp.

554

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a cor de fundo
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- definir a cor da borda
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- habilitar (true) ou desabilitar (false) o modo do movimento do boto com o mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover o boto

//+------------------------------------------------------------------+
bool ButtonMove(const long

chart_ID=0,

// ID do grfico

const string name="Button", // nome do boto


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover o boto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do boto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada Y do boto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tamanho do boto

//+------------------------------------------------------------------+
bool ButtonChangeSize(const long

chart_ID=0,

// ID do grfico

const string name="Button", // nome do boto


const int

width=50,

// largura do boto

2000-2014, MetaQuotes Software Corp.

555

Constantes Padro, Enumeradores e Estruturas


const int

height=18)

// altura do boto

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar o tamanho do boto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": falha ao alterar a largura do boto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": falha ao alterar a altura do boto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar canto do grfico para vinculao do boto

//+------------------------------------------------------------------+
bool ButtonChangeCorner(const long
const string

chart_ID=0,

// ID do grfico

name="Button",

// nome do boto

const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // canto do grfico para a


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar canto de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": falha ao alterar canto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar texto do boto

//+------------------------------------------------------------------+
bool ButtonTextChange(const long

chart_ID=0,

// ID do grfico

const string name="Button", // nome do boto


const string text="Text")

// texto

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto

2000-2014, MetaQuotes Software Corp.

556

Constantes Padro, Enumeradores e Estruturas


if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o boto

//+------------------------------------------------------------------+
bool ButtonDelete(const long

chart_ID=0,

// ID do grfico

const string name="Button") // nome do boto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o boto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir o boto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- definir a etapa de alterar o tamanho do boto
int x_step=(int)x_distance/32;
int y_step=(int)y_distance/32;

2000-2014, MetaQuotes Software Corp.

557

Constantes Padro, Enumeradores e Estruturas


//--- definir as coordenadas boto e seu tamanho
int x=(int)x_distance/32;
int y=(int)y_distance/32;
int x_size=(int)x_distance*15/16;
int y_size=(int)y_distance*15/16;
//--- criar o boto
if(!ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner,"Press",InpFont,InpFontSize,
InpColor,InpBackColor,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico
ChartRedraw();
//--- reduzir o boto no loop
int i=0;
while(i<13)
{
//--- meio segundo de atraso
Sleep(500);
//--- mudar o boto para o estado pressionado
ObjectSetInteger(0,InpName,OBJPROP_STATE,true);
//--- redesenhar o grfico e esperar por 0.2 segundos
ChartRedraw();
Sleep(200);
//--- redefinir as coordenadas e tamanho do boto
x+=x_step;
y+=y_step;
x_size-=x_step*2;
y_size-=y_step*2;
//--- reduzir o boto
ButtonMove(0,InpName,x,y);
ButtonChangeSize(0,InpName,x_size,y_size);
//--- trazer o boto de volta ao estado liberado
ObjectSetInteger(0,InpName,OBJPROP_STATE,false);
//--- redesenhar o grfico
ChartRedraw();
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- incrementar um contador de loop
i++;
}
//--- meio segundo de atraso
Sleep(500);
//--- excluir o boto
ButtonDelete(0,InpName);
ChartRedraw();
//--- esperar por um segundo
Sleep(1000);

2000-2014, MetaQuotes Software Corp.

558

Constantes Padro, Enumeradores e Estruturas


//--}

2000-2014, MetaQuotes Software Corp.

559

Constantes Padro, Enumeradores e Estruturas

OBJ_CHART
Objeto Chart.

Observao
Coordenadas do ponto de ancoragem so em pixels. Voc tambm pode selecionar uma ancoragem
do bitmap no canto a partir do enumerador ENUM_BASE_CORNER.
Smbolo, perodo e escala podem ser selecionados para o objeto Chart. Escala de preo e modo de
exibio de data tambm pode ser habilitado/desabilitado.
Exemplo
O seguinte script cria e move o objeto Chart no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script cria objeto \"Chart\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Chart";

// Nome do objeto

input string

InpSymbol="EURUSD";

// Smbolo

input ENUM_TIMEFRAMES

InpPeriod=PERIOD_H1;

// Perodo

input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Canto de ancoragem


input int

InpScale=2;

// Escala

input bool

InpDateScale=true;

// Exibio da escala de tempo

input bool

InpPriceScale=true;

// Exibio da escala de preo

2000-2014, MetaQuotes Software Corp.

560

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// Cor da borda quando destacada

input ENUM_LINE_STYLE

InpStyle=STYLE_DASHDOTDOT;

// Estilo da linha quando destacada

input int

InpPointWidth=1;

// Tamanho do ponto para movimento

input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criando objeto Chart

//+------------------------------------------------------------------+
bool ObjectChartCreate(const long

chart_ID=0,

// ID do grfico

name="Chart",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

const string

symbol="EURUSD",

// smbolo

const ENUM_TIMEFRAMES

period=PERIOD_H1,

// perodo

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const int

width=300,

// largura

const int

height=200,

// altura

const string

const ENUM_BASE_CORNER

corner=CORNER_LEFT_UPPER, // canto de ancoragem

const int

scale=2,

// escala

const bool

date_scale=true,

// exibio escala de temp

const bool

price_scale=true,

// exibio escala de pre

const color

clr=clrRed,

// a cor da borda quando d

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da linha quando

const int

point_width=1,

// mover tamanho do ponto

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de obj

const long

z_order=0)

// prioridade para clicar

{
//--- redefine o valor de erro
ResetLastError();
//--- criar objeto Chart
if(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar objeto \"Chart\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- definir tamanho do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- determinar o canto do grfico onde as coordenadas do ponto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir o smbolo

2000-2014, MetaQuotes Software Corp.

561

Constantes Padro, Enumeradores e Estruturas


ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol);
//--- definir o perodo
ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period);
//--- definir a escala
ObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale);
//--- exibir (true) ou ocultar (false) a escala de tempo
ObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale);
//--- exibir (true) ou ocultar (false) a escala de preo
ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale);
//--- definir a cor da borda quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho do ponto de ancoragem para movimentar o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir o smbolo e perodo de tempo do objeto Chart

//+------------------------------------------------------------------+
bool ObjectChartSetSymbolAndPeriod(const long

chart_ID=0,

// ID do grfico (no ob

const string

name="Chart",

// nome do objeto

const string

symbol="EURUSD",

// smbolo

const ENUM_TIMEFRAMES period=PERIOD_H1) // perodo de tempo


{
//--- redefine o valor de erro
ResetLastError();
//--- definir smbolo e perodo de tempo do objeto Chart
if(!ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol))
{
Print(__FUNCTION__,

": falha para definir o smbolo do objeto \"Chart\"! Cdigo de erro = ",GetLastError())
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period))
{
Print(__FUNCTION__,

": falha para definir o smbolo do objeto \"Chart\"! Cdigo de erro = ",GetLastError())
return(false);

2000-2014, MetaQuotes Software Corp.

562

Constantes Padro, Enumeradores e Estruturas


}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover objeto Chart

//+------------------------------------------------------------------+
bool ObjectChartMove(const long

chart_ID=0,

// ID do grfico (no objeto de um Grfico)

const string name="Chart", // nome do objeto


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover o objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,

": falha ao mover coordenada X do objeto \"Chart\"! Cdigo de erro = ",GetLastError());


return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,

": falha ao mover coordenada Y do objeto \"Chart\"! Cdigo de erro = ",GetLastError());


return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tamanho do objeto Chart

//+------------------------------------------------------------------+
bool ObjectChartChangeSize(const long

chart_ID=0,

// ID do grfico (no objeto de um Grfico)

const string name="Chart", // nome do objeto


const int

width=300,

// largura

const int

height=200)

// altura

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar o tamanho do objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,

": falha ao alterar a largura do objeto \"Chart\" ! Cdigo de erro = ",GetLastError());


return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{

2000-2014, MetaQuotes Software Corp.

563

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__,
": falha ao alterar a altura do objeto \"Chart\" ! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Retorno do ID do objeto Chart

//+------------------------------------------------------------------+
long ObjectChartGetID(const long

chart_ID=0,

// ID do grfico (no objeto de um Grfico)

const string name="Chart") // nome do objeto


{
//--- preparar a varivel para obter o ID do objeto Chart
long id=-1;
//--- redefine o valor de erro
ResetLastError();
//--- obter ID
if(!ObjectGetInteger(chart_ID,name,OBJPROP_CHART_ID,0,id))
{
Print(__FUNCTION__,
": falha ao obter o ID do objeto \"Chart\"! Cdigo de erro = ",GetLastError());
}
//--- retorno do resultado
return(id);
}
//+------------------------------------------------------------------+
//| Deletar o objeto Chart

//+------------------------------------------------------------------+
bool ObjectChartDelete(const long

chart_ID=0,

// ID do grfico (no objeto de um Grfico)

const string name="Chart") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o boto
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao deletar objeto \"Chart\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{

2000-2014, MetaQuotes Software Corp.

564

Constantes Padro, Enumeradores e Estruturas


//--- obter o nmero de smbolos na Observao do Mercado
int

symbols=SymbolsTotal(true);

//--- verificar se o smbolo com um nome especifico est presente na lista de smbolo
bool exist=false;
for(int i=0;i<symbols;i++)
if(InpSymbol==SymbolName(i,true))
{
exist=true;
break;
}
if(!exist)
{
Print("Erro! ",InpSymbol," smbolo no est presente na \"Observao do Mercado\"!");
return;
}
//--- verificar a validade dos parmetros de entrada
if(InpScale<0 || InpScale>5)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- definir as coordenadas do objeto grfico e seu tamanho
int x=(int)x_distance/16;
int y=(int)y_distance/16;
int x_size=(int)x_distance*7/16;
int y_size=(int)y_distance*7/16;
//--- criar objeto Chart

if(!ObjectChartCreate(0,InpName,0,InpSymbol,InpPeriod,x,y,x_size,y_size,InpCorner,InpScale,InpDa
InpPriceScale,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();

2000-2014, MetaQuotes Software Corp.

565

Constantes Padro, Enumeradores e Estruturas


Sleep(1000);
//--- estender objeto Chart
int steps=(int)MathMin(x_distance*7/16,y_distance*7/16);
for(int i=0;i<steps;i++)
{
//--- redimensionar
x_size+=1;
y_size+=1;
if(!ObjectChartChangeSize(0,InpName,x_size,y_size))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico e esperar por 0.01 segundos
ChartRedraw();
Sleep(10);
}
//--- meio segundo de atraso
Sleep(500);
//--- alterar perodo de tempo do grfico
if(!ObjectChartSetSymbolAndPeriod(0,InpName,InpSymbol,PERIOD_M1))
return;
ChartRedraw();
//--- trs segundos de atraso
Sleep(3000);
//--- excluir o objeto
ObjectChartDelete(0,InpName);
ChartRedraw();
//--- esperar por um segundo
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

566

Constantes Padro, Enumeradores e Estruturas

OBJ_BITMAP
Objeto Bitmap.

Observao
Para objeto Bitmap, voc pode selecionar o escopo de visibilidade de uma imagem.
Exemplo
O seguinte script cria vrios bitmaps no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.

//--- descrio
#property description "Script cria um bitmap na janela do grfico."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpFile="\\Images\\dollar.bmp"; // Nome do arquivo Bitmap

input int

InpWidth=24;

// Coordenada X do escopo de visibilidade

input int

InpHeight=24;

// Coordenada Y do escopo de visibilidade

input int

InpXOffset=4;

// Deslocamento do escopo de visibilidade pel

input int

InpYOffset=4;

// Deslocamento do escopo de visibilidade pel

input color

InpColor=clrRed;

// Cor da borda quando destacada

input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;

// Estilo de linha quando destacada

input int

InpPointWidth=1;

// Tamanho do ponto para movimento

input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=false;

// Destaque para mover

2000-2014, MetaQuotes Software Corp.

567

Constantes Padro, Enumeradores e Estruturas


input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar um bitmap na janela do grfico

//+------------------------------------------------------------------+
bool BitmapCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Bitmap",

// nome do bitmap

const int

sub_window=0,

// ndice da sub-janela

datetime

time=0,

// ponto de ancoragem do tempo

double

price=0,

// ponto de ancoragem do preo

const string

file="",

// nome do arquivo bitmap

const int

width=10,

// coordenada X do escopo de visibilidad

const int

height=10,

// coordenada Y do escopo de visibilidad

const int

x_offset=0,

// escopo de visibilidade deslocado pelo

const int

y_offset=0,

// escopo de visibilidade deslocado pelo

const color

clr=clrRed,

// cor da borda quando destacada

const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha quando destacada


const int

point_width=1,

// mover tamanho do ponto

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objetot

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- definir as coordenadas de pontos de ancoragem, se eles no esto definidos
ChangeBitmapEmptyPoint(time,price);
//--- redefine o valor de erro
ResetLastError();
//--- criar um bitmap
if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
{
Print(__FUNCTION__,
": falha ao criar um bitmap na janela do grfico! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir o caminho para o arquivo da imagem
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
{
Print(__FUNCTION__,
": falha ao carregar a imagem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir escopo de visibilidade para a imagem, se os valores da largura ou altura
//--- excederem a largura e a altura (respectivamente) de uma imagem de origem,
//--- no ser desenhada, no caso oposto
//--- apenas a parte correspondente a esses valores ser desenhada
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- definir a parte de uma imagem que est sendo exibida no escopo de visibilidade,
//--- a parte padro a rea superior esquerda de uma imagem, os valores permitem

2000-2014, MetaQuotes Software Corp.

568

Constantes Padro, Enumeradores e Estruturas


//--- realizar uma mudana a partir desta rea de exibio de uma outra parte da imagem
ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- definir a cor da borda quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho do ponto de ancoragem para movimentar o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir uma nova imagem para o bitmap

//+------------------------------------------------------------------+
bool BitmapSetImage(const long

chart_ID=0,

// ID do grfico

const string name="Bitmap", // nome do bitmap


const string file="")

// caminho para o arquivo

{
//--- redefine o valor de erro
ResetLastError();
//--- definir o caminho para o arquivo da imagem
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
{
Print(__FUNCTION__,
": falha ao carregar a imagem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Criar um bitmap na janela do grfico

//+------------------------------------------------------------------+
bool BitmapMove(const long

chart_ID=0,

// ID do grfico

const string name="Bitmap", // nome do bitmap


datetime

time=0,

// ponto de ancoragem do tempo

double

price=0)

// ponto de ancoragem do preo

{
//--- se a posio do ponto no est definida, mover para a barra atual tendo o preo Bid

2000-2014, MetaQuotes Software Corp.

569

Constantes Padro, Enumeradores e Estruturas


if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- redefine o valor de erro
ResetLastError();
//--- mover o ponto de ancoragem
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": falha ao mover o ponto de ancoragem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tamanho do escopo de visibilidade (objeto)

//+------------------------------------------------------------------+
bool BitmapChangeSize(const long

chart_ID=0,

// ID do grfico

const string name="Bitmap", // nome do bitmap


const int

width=0,

// largura do bitmap

const int

height=0)

// altura do bitmap

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tamanho do bitmap
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": falha ao alterar a largura do bitmap! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": falha ao alterar a altura do bitmap! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------+
//| Mudar coordenada canto superior esquerdo do escopo de visibilidade |
//+--------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long

chart_ID=0,

// ID do grfico

const string name="Bitmap", // nome do bitmap


const int

x_offset=0,

// coordenada X do escopo de visibilidade

const int

y_offset=0)

// coordenada Y do escopo de visibilidade

2000-2014, MetaQuotes Software Corp.

570

Constantes Padro, Enumeradores e Estruturas


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar as coordenadas do escopo de visibilidade do bitmap
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
{
Print(__FUNCTION__,

": falha para alterar coordenada X do escopo de visibilidade! Cdigo de erro = ",GetLas
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
{
Print(__FUNCTION__,

": falha para alterar coordenada Y do escopo de visibilidade! Cdigo de erro = ",GetLas
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir um bitmap

//+------------------------------------------------------------------+
bool BitmapDelete(const long

chart_ID=0,

// ID do grfico

const string name="Bitmap") // nome do bitmap


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir um bitmap! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padro|
//| para aqueles vazios

//+------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(datetime &time,double &price)
{
//--- se o tempo do ponto no est definido, ser na barra atual
if(!time)
time=TimeCurrent();
//--- se o preo do ponto no est definido, ele ter valor Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);

2000-2014, MetaQuotes Software Corp.

571

Constantes Padro, Enumeradores e Estruturas


}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date[];
double

// array para armazenar datas das barras visveis

close[]; // array para armazenar Fechamento de preos

//--- nome do arquivo bitmap


string

file="\\Images\\dollar.bmp";

//--- nmero de barras visveis na janela do grfico


int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- alocao de memria
ArrayResize(date,bars);
ArrayResize(close,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- preencher o array dos preos Baixos
if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
{
Print("Falha ao copiar os valores dos preos Baixos! Cdigo de erro = ",GetLastError());
return;
}
//--- definir como frequentemente as imagens devem ser exibidas
int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- definir o passo
int step=1;
switch(scale)
{
case 0:
step=27;
break;
case 1:
step=14;
break;
case 2:
step=7;
break;
case 3:
step=4;
break;
case 4:
step=2;
break;

2000-2014, MetaQuotes Software Corp.

572

Constantes Padro, Enumeradores e Estruturas


}
//--- criar bitmaps para valores de barra Alta e Baixa (com intervalos)
for(int i=0;i<bars;i+=step)
{
//--- criar os bitmaps

if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffs
InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- meio segundo de atraso
Sleep(500);
//--- excluir sinal Sell
for(int i=0;i<bars;i+=step)
{
if(!BitmapDelete(0,"Bitmap_"+(string)i))
return;
if(!BitmapDelete(0,"Bitmap_"+(string)i))
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--}

2000-2014, MetaQuotes Software Corp.

573

Constantes Padro, Enumeradores e Estruturas

OBJ_BITMAP_LABEL
Objeto Etiqueta Bitmap.

Observao
Posio do ponto de ancoragem relativa a etiqueta pode ser selecionada do enumerador
ENUM_ANCHOR_POINT. Coordenadas do ponto de ancoragem so em pixels.
Voc tambm pode selecionar uma ancoragem do bitmap no canto a partir da enumerao
ENUM_BASE_CORNER.
Para etiqueta bitmap, voc pode selecionar no escopo de visibilidade de uma imagem.
Exemplo
O seguinte script cria vrios bitmaps no grfico. Funes especiais tm sido desenvolvidas para
criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em seus
prprios aplicativos.
//--- descrio
#property description "Script criando objeto \"Bitmap Label\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="BmpLabel";

input string

InpFileOn="\\Images\\dollar.bmp"; // O nome do arquivo para o modo On

input string

InpFileOff="\\Images\\euro.bmp";

// O nome do arquivo para o modo Off

input bool

InpState=false;

// Etiqueta pressionada/liberada

input ENUM_BASE_CORNER

InpCorner=CORNER_LEFT_UPPER;

// Canto do grfico para ancoragem

input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER;

2000-2014, MetaQuotes Software Corp.

// Nome etiqueta

// Tipo de ancoragem

574

Constantes Padro, Enumeradores e Estruturas


input color

InpColor=clrRed;

// A cor da borda quando destacada

input ENUM_LINE_STYLE

InpStyle=STYLE_SOLID;

// Estilo da linha quando destacada

input int

InpPointWidth=1;

// Tamanho do ponto para mover

input bool

InpBack=false;

// Objeto de fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Criar objeto Etiqueta Bitmap

//+------------------------------------------------------------------+
bool BitmapLabelCreate(const long

chart_ID=0,

// ID do grfico

const string

name="BmpLabel",

// nome da etiqueta

const int

sub_window=0,

// ndice da sub-janela

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const string

file_on="",

// imagem em modo On

const string

file_off="",

// imagem em modo Off

const int

width=0,

// coordenada X do escopo

const int

height=0,

// coordenada Y do escopo

const int

x_offset=10,

// escopo de visibilidade

const int

y_offset=10,

// escopo de visibilidade

const bool

state=false,

// pressionada/liberada

const ENUM_BASE_CORNER

corner=CORNER_LEFT_UPPER, // canto do grfico para a

const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // tipo de ancoragem


const color

clr=clrRed,

// a cor da borda quando d

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da linha quando

const int

point_width=1,

// mover tamanho do ponto

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de obj

const long

z_order=0)

// prioridade para clicar

{
//--- redefine o valor de erro
ResetLastError();
//--- criar uma etiqueta bitmap
if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar objeto \"Etiqueta Bitmap\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir as imagens para os modos ligar (On) e desligar (Off)
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
{
Print(__FUNCTION__,
": falha para carregar a imagem para o modo On! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))

2000-2014, MetaQuotes Software Corp.

575

Constantes Padro, Enumeradores e Estruturas


{
Print(__FUNCTION__,
": falha para carregar a imagem para o modo Off! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- definir escopo de visibilidade para a imagem, se os valores da largura ou altura
//--- excederem a largura e a altura (respectivamente) de uma imagem de origem,
//--- no ser desenhada, no caso oposto
//--- apenas a parte correspondente a esses valores ser desenhada
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- definir a parte de uma imagem que est sendo exibida no escopo de visibilidade,
//--- a parte padro a rea superior esquerda de uma imagem, os valores permitem
//--- realizar uma mudana a partir desta rea de exibio de uma outra parte da imagem
ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- definir os status da etiqueta(pressionada ou liberada)
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- determinar o canto do grfico onde as coordenadas do ponto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- tipo de definio de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir a cor da borda quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo de linha quando o modo de destaque do objeto habilitado
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir o tamanho do ponto de ancoragem para movimentar o objeto
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Definir uma nova imagem para objeto etiqueta Bitmap

//+------------------------------------------------------------------+
bool BitmapLabelSetImage(const long

chart_ID=0,

// ID do grfico

const string name="BmpLabel", // nome da etiqueta


const int

on_off=0,

// modificador (On ou Off)

2000-2014, MetaQuotes Software Corp.

576

Constantes Padro, Enumeradores e Estruturas


const string file="")

// caminho para o arquivo

{
//--- redefine o valor de erro
ResetLastError();
//--- definir o caminho para o arquivo da imagem
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,on_off,file))
{
Print(__FUNCTION__,
": falha para carregar a imagem! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover objeto Etiqueta Bitmap

//+------------------------------------------------------------------+
bool BitmapLabelMove(const long

chart_ID=0,

// ID do grfico

const string name="BmpLabel", // nome da etiqueta


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover o objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada Y do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar tamanho do escopo de visibilidade (objeto)

//+------------------------------------------------------------------+
bool BitmapLabelChangeSize(const long

chart_ID=0,

// ID do grfico

const string name="BmpLabel", // nome da etiqueta


const int

width=0,

// largura da etiqueta

const int

height=0)

// altura da etiqueta

{
//--- redefine o valor de erro

2000-2014, MetaQuotes Software Corp.

577

Constantes Padro, Enumeradores e Estruturas


ResetLastError();
//--- alterar o tamanho do objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": falha ao alterar a largura do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": falha ao alterar a altura do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------+
//| Mudar coordenada canto superior esquerdo do escopo de visibilidade |
//+--------------------------------------------------------------------+
bool BitmapLabelMoveVisibleArea(const long

chart_ID=0,

// ID do grafico

const string name="BmpLabel", // nome da etiqueta


const int

x_offset=0,

// coordenada X do escopo de visibili

const int

y_offset=0)

// coordenada Y do escopo de visibili

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar as coordenadas do escopo de visibilidade do objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
{
Print(__FUNCTION__,

": falha para alterar coordenada X do escopo de visibilidade! Cdigo de erro = ",GetLas
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
{
Print(__FUNCTION__,

": falha para alterar coordenada Y do escopo de visibilidade! Cdigo de erro = ",GetLas
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir o Objeto "Bitmap label"

//+------------------------------------------------------------------+
bool BitmapLabelDelete(const long

chart_ID=0,

// ID do grfico

const string name="BmpLabel") // nome da etiqueta


{

2000-2014, MetaQuotes Software Corp.

578

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir objeto \"Bitmap label\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- definir coordenadas da etiqueta bitmap
int x=(int)x_distance/2;
int y=(int)y_distance/2;
//--- definir o tamanho da etiqueta e a coordenada do escopo de visibilidade
int width=32;
int height=32;
int x_offset=0;
int y_offset=0;
//--- local da etiqueta bitmap no centro da janela

if(!BitmapLabelCreate(0,InpName,0,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpSta

InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder)
{
return;
}
//--- redesenhar o grfico e esperar um segundo
ChartRedraw();
Sleep(1000);
//--- alterar tamanho do escopo de visibilidade da etiqueta em loop

2000-2014, MetaQuotes Software Corp.

579

Constantes Padro, Enumeradores e Estruturas


for(int i=0;i<6;i++)
{
//--- alterar o tamanho do escopo
width--;
height--;
if(!BitmapLabelChangeSize(0,InpName,width,height))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.3 segundos de atraso
Sleep(300);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar as coordenadas do escopo de visibilidade da etiqueta em loop
for(int i=0;i<2;i++)
{
//--- alterar coordenadas do escopo de visibilidade
x_offset++;
y_offset++;
if(!BitmapLabelMoveVisibleArea(0,InpName,x_offset,y_offset))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.3 segundos de atraso
Sleep(300);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir a etiqueta
BitmapLabelDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

580

Constantes Padro, Enumeradores e Estruturas

OBJ_EDIT
Objeto Edit.

Observao
Coordenadas do ponto de ancoragem so em pixels. Voc tambm pode selecionar uma ancoragem
do Edit no canto a partir do enumerador ENUM_BASE_CORNER.
Voc tambm pode selecionar um dos tipos de alinhamento de texto dentro de Edit a partir da
enumerao ENUM_ALIGN_MODE.
Exemplo
O seguinte script cria e move o objeto Edit no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.
//--- descrio
#property description "Script cria objeto \"Edit\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Edit";

// Nome do objeto

input string

InpText="Text";

// Texto de objeto

input string

InpFont="Arial";

// Fonte

input int

InpFontSize=14;

// Tamanho da fonte

input ENUM_ALIGN_MODE

InpAlign=ALIGN_CENTER;

// Tipo de alinhamento de texto

input bool

InpReadOnly=false;

// Habilidade de editar

input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Canto do grfico para ancoragem


input color

InpColor=clrBlack;

// Cor do texto

2000-2014, MetaQuotes Software Corp.

581

Constantes Padro, Enumeradores e Estruturas


input color

InpBackColor=clrWhite;

// Fundo da cor

input color

InpBorderColor=clrBlack;

// Cor da borda

input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=false;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar o objeto Edit

//+------------------------------------------------------------------+
bool EditCreate(const long

chart_ID=0,

// ID do grfico

const string

name="Edit",

// nome do objeto

const int

sub_window=0,

// ndice da sub-janela

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const int

width=50,

// largura

const int

height=18,

// altura

const string

text="Text",

// texto

const string

font="Arial",

// fonte

const int

font_size=10,

// tamanho da fonte

const ENUM_ALIGN_MODE

align=ALIGN_CENTER,

// tipo de alinhamento

const bool

read_only=false,

// habilidade para editar

const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // canto do grfico para ancoragem


const color

clr=clrBlack,

// cor do texto

const color

back_clr=clrWhite,

// cor do fundo

const color

border_clr=clrNONE,

// cor da borda

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no mouse

{
//--- redefine o valor de erro
ResetLastError();
//--- criar campo de edio
if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar objeto \"Edit\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- definir tamanho do objeto
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- definir o texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir o texto fonte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

2000-2014, MetaQuotes Software Corp.

582

Constantes Padro, Enumeradores e Estruturas


//--- definir tamanho da fonte
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- definir o tipo de alinhamento do texto no objeto
ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- habilitar (true) ou cancelar (false) modo de somente leitura
ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- definir o canto do grfico onde as coordenadas do objeto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir a cor do texto
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a cor de fundo
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- definir a cor da borda
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover objeto Edit

//+------------------------------------------------------------------+
bool EditMove(const long

chart_ID=0,

// ID do grfico

const string name="Edit", // nome do objeto


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover o objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada Y do objeto! Cdigo de erro = ",GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

583

Constantes Padro, Enumeradores e Estruturas


//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Redimensionar objeto Edit

//+------------------------------------------------------------------+
bool EditChangeSize(const long

chart_ID=0,

// ID do grfico

const string name="Edit", // nome do objeto


const int

width=0,

// largura

const int

height=0)

// altura

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar o tamanho do objeto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": falha ao alterar a largura do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": falha ao alterar a altura do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar texto do objeto Edit

//+------------------------------------------------------------------+
bool EditTextChange(const long

chart_ID=0,

// ID do grfico

const string name="Edit", // nome do objeto


const string text="Text") // texto
{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

584

Constantes Padro, Enumeradores e Estruturas


//| Retornar texto de objeto

//+------------------------------------------------------------------+
bool EditTextGet(string
const long

&text,
chart_ID=0,

// texto
// ID do grfico

const string name="Edit") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- obter texto do objeto
if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
{
Print(__FUNCTION__,
": falha ao obter o texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir objeto Edit

//+------------------------------------------------------------------+
bool EditDelete(const long

chart_ID=0,

// ID do grfico

const string name="Edit") // nome do objeto


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao deletar objeto \"Edit\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;

2000-2014, MetaQuotes Software Corp.

585

Constantes Padro, Enumeradores e Estruturas


}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- definir o passo para mudar o campo edit
int x_step=(int)x_distance/64;
//--- definir coordenadas do campo edit e seu tamanho
int x=(int)x_distance/8;
int y=(int)y_distance/2;
int x_size=(int)x_distance/8;
int y_size=InpFontSize*2;
//--- armazenar o texto na varivel local
string text=InpText;
//--- criar campo de edio
if(!EditCreate(0,InpName,0,x,y,x_size,y_size,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- estender o campo edit
while(x_size-x<x_distance*5/8)
{
//--- aumentar a largura do campo edit
x_size+=x_step;
if(!EditChangeSize(0,InpName,x_size,y_size))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico e esperar por 0.05 segundos
ChartRedraw();
Sleep(50);
}
//--- meio segundo de atraso
Sleep(500);
//--- alterar o texto
for(int i=0;i<20;i++)
{
//--- adicionar "+" no incio e no final
text="+"+text+"+";
if(!EditTextChange(0,InpName,text))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())

2000-2014, MetaQuotes Software Corp.

586

Constantes Padro, Enumeradores e Estruturas


return;
//--- redesenhar o grfico e esperar por 0.1 segundos
ChartRedraw();
Sleep(100);
}
//--- meio segundo de atraso
Sleep(500);
//--- excluir campo edit
EditDelete(0,InpName);
ChartRedraw();
//--- esperar por um segundo
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

587

Constantes Padro, Enumeradores e Estruturas

OBJ_EVENT
Objeto Evento.

Observao
Quando mover o mouse sobre o evento, o texto aparece.
Exemplo
O seguinte script cria e move o objeto Evento no grfico. Funes especiais tm sido desenvolvidas
para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas funes "as is" em
seus prprios aplicativos.

//--- descrio
#property description "Script desenha objeto grfico \"Evento\"."
#property description "Coordenadas do ponto de ancoragem configurado em porcentagem da"
#property description "largura da janela do grfico em barras."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="Event";

// Nome do evento

input int

InpDate=25;

// Data do Evento, %

input string

InpText="Text";

// Texto do Evento

input color

InpColor=clrRed;

// Cor do Evento

input int

InpWidth=1;

// Tamanho do ponto quando destacado

input bool

InpBack=false;

// Evento de Fundo

input bool

InpSelection=false; // Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

2000-2014, MetaQuotes Software Corp.

588

Constantes Padro, Enumeradores e Estruturas


input long

InpZOrder=0;

// Prioridade para clicar no mouse

//+------------------------------------------------------------------+
//| Create objeto Evento no grfico

//+------------------------------------------------------------------+
bool EventCreate(const long

chart_ID=0,

// ID de grfico

const string

name="Event",

// nome do evento

const int

sub_window=0,

// ndice da sub-janela

const string

text="Text",

// texto do evento

datetime

time=0,

// tempo

const color

clr=clrRed,

// cor

const int

width=1,

// largura do ponto quando em destaque

const bool

back=false,

// no fundo

const bool

selection=false, // destaque para mover

const bool

hidden=true,

// ocultar na lista de objetos

const long

z_order=0)

// prioridade para clique do mouse

{
//--- se o tempo no estiver definido, criar o objeto no ltimo bar
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- criar objeto Evento
if(!ObjectCreate(chart_ID,name,OBJ_EVENT,sub_window,time,0))
{
Print(__FUNCTION__,
": falha ao criar objeto \"Evento\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir texto do evento
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir a largura de ponto de ancoragem se o objeto destacado
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- permitir (true) ou desabilitar (false) o modo de movimento do evento com o mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o texto do objeto Evento

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

589

Constantes Padro, Enumeradores e Estruturas


bool EventTextChange(const long

chart_ID=0,

// ID do grfico

const string name="Event", // nome do evento


const string text="Text")

// texto

{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover objeto Evento

//+------------------------------------------------------------------+
bool EventMove(const long

chart_ID=0,

// ID do grfico

const string name="Event", // nome do evento


datetime

time=0)

// tempo

{
//--- se o tempo no estiver definido, mover evento at o ltimo bar
if(!time)
time=TimeCurrent();
//--- redefine o valor de erro
ResetLastError();
//--- mover o objeto
if(!ObjectMove(chart_ID,name,0,time,0))
{
Print(__FUNCTION__,
": falha ao mover objeto \"Evento\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir objeto Evento

//+------------------------------------------------------------------+
bool EventDelete(const long

chart_ID=0,

// ID do grfico

const string name="Event") // nome do evento


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir o objeto
if(!ObjectDelete(chart_ID,name))
{

2000-2014, MetaQuotes Software Corp.

590

Constantes Padro, Enumeradores e Estruturas


Print(__FUNCTION__,
": falha ao deletar objeto \"Evento\"! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- verificar a exatido dos parmetros de entrada
if(InpDate<0 || InpDate>100)
{
Print("Erro! Valores incorretos dos parmetros de entrada!");
return;
}
//--- nmero de barras visveis na janela do grfico
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- array para armazenar a data de valores a serem utilizados
//--- para definir e alterar as coordenadas de pontos de ancoragem
datetime date[];
//--- alocao de memria
ArrayResize(date,bars);
//--- preencher o array das datas
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Falha ao copiar valores de tempo! Cdigo de erro = ",GetLastError());
return;
}
//--- definir os pontos para criar um objeto
int d=InpDate*(bars-1)/100;
//--- criar objeto Evento
if(!EventCreate(0,InpName,0,InpText,date[d],InpColor,InpWidth,
InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- agora, mover o objeto
//--- contador de loop
int h_steps=bars/2;
//--- mover o objeto
for(int i=0;i<h_steps;i++)
{

2000-2014, MetaQuotes Software Corp.

591

Constantes Padro, Enumeradores e Estruturas


//--- usar o seguinte valor
if(d<bars-1)
d+=1;
//--- mover o ponto
if(!EventMove(0,InpName,date[d]))
return;
//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico
ChartRedraw();
// 0.05 segundos de atraso
Sleep(50);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- excluir o canal do grfico
EventDelete(0,InpName);
ChartRedraw();
//--- 1 segundo de atraso
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

592

Constantes Padro, Enumeradores e Estruturas

OBJ_RECTANGLE_LABEL
Objeto Etiqueta Retangular.

Observao
Coordenadas do ponto de ancoragem so em pixels. possvel a ancoragem no canto de uma
etiqueta retangular a partir do enumerador ENUM_BASE_CORNER. O tipo de borda da etiqueta
retangular pode ser selecionado a partir do enumerador ENUM_BORDER_TYPE.
O objeto usado para criar e projetar a interface grfica personalizada.
Exemplo
O seguinte script cria e move o objeto Etiqueta Retangular no grfico. Funes especiais tm sido
desenvolvidas para criar e alterar as propriedades do objeto grfico. Voc pode utilizar estas
funes "as is" em seus prprios aplicativos.

//--- descrio
#property description "Script cria objeto grfico \"Etiqueta Retangular\"."
//--- janela de exibio dos parmetros de entrada durante inicializao do script
#property script_show_inputs
//--- entrada de parmetros do script
input string

InpName="RectLabel";

// Nome etiqueta

input color

InpBackColor=clrSkyBlue;

// Fundo da cor

input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT;

// Tipo de Borda

input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Canto do grfico para ancoragem


input color

InpColor=clrDarkBlue;

// Cor da borda plana (Flat)

input ENUM_LINE_STYLE

InpStyle=STYLE_SOLID;

// Estilo da borda plana (Flat)

input int

InpLineWidth=3;

// Largura da borda plana (Flat)

2000-2014, MetaQuotes Software Corp.

593

Constantes Padro, Enumeradores e Estruturas


input bool

InpBack=false;

// Objeto de Fundo

input bool

InpSelection=true;

// Destaque para mover

input bool

InpHidden=true;

// Ocultar na lista de objeto

input long

InpZOrder=0;

// Prioridade para clique do mouse

//+------------------------------------------------------------------+
//| Criar etiqueta retangular

//+------------------------------------------------------------------+
bool RectLabelCreate(const long

chart_ID=0,

// ID do grfico

const string

name="RectLabel",

// nome da etiqueta

const int

sub_window=0,

// ndice da sub-janela

const int

x=0,

// coordenada X

const int

y=0,

// coordenada Y

const int

width=50,

// largura

const int

height=18,

// altura

const color

back_clr=C'236,233,216',

// cor do fundo

const ENUM_BORDER_TYPE border=BORDER_SUNKEN,

// tipo de borda

const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // canto do grfico para anco


const color

clr=clrRed,

// cor da borda plana (Flat)

const ENUM_LINE_STYLE

style=STYLE_SOLID,

// estilo da borda plana

const int

line_width=1,

// largura da borda plana

const bool

back=false,

// no fundo

const bool

selection=false,

// destaque para mover

const bool

hidden=true,

// ocultar na lista de objeto

const long

z_order=0)

// prioridade para clicar no

{
//--- redefine o valor de erro
ResetLastError();
//--- criar uma etiqueta retangular
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar uma etiqueta retangular! Cdigo de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- definir tamanho da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- definir a cor de fundo
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- definir o tipo de borda
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- determinar o canto do grfico onde as coordenadas do ponto so definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir a cor da borda plana (no modo Flat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- definir o estilo da linha da borda plana

2000-2014, MetaQuotes Software Corp.

594

Constantes Padro, Enumeradores e Estruturas


ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- definir a largura da borda plana
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto grfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no grfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Mover a etiqueta retangular

//+------------------------------------------------------------------+
bool RectLabelMove(const long

chart_ID=0,

// ID do grfico

const string name="RectLabel", // nome da etiqueta


const int

x=0,

// coordenada X

const int

y=0)

// coordenada Y

{
//--- redefine o valor de erro
ResetLastError();
//--- mover a etiqueta retangular
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tamanho da etiqueta retangular

//+------------------------------------------------------------------+
bool RectLabelChangeSize(const long

chart_ID=0,

// ID do grfico

const string name="RectLabel", // nome da etiqueta


const int

width=50,

// largura da etiqueta

const int

height=18)

// altura da etiqueta

2000-2014, MetaQuotes Software Corp.

595

Constantes Padro, Enumeradores e Estruturas


//--- redefine o valor de erro
ResetLastError();
//--- alterar tamanho da etiqueta
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": falha ao alterar a largura da etiqueta! Cdigo de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": falha ao alterar a altura da etiqueta! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o tipo de borda da etiqueta retangular

//+------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long
const string

chart_ID=0,

// ID do grfico

name="RectLabel",

// nome da etiqueta

const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // tipo de borda


{
//--- redefine o valor de erro
ResetLastError();
//--- alterar tipo de borda
if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
{
Print(__FUNCTION__,
": falha ao alterar tipo de borda! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Excluir etiqueta retangular

//+------------------------------------------------------------------+
bool RectLabelDelete(const long

chart_ID=0,

// ID do grfico

const string name="RectLabel") // nome da etiqueta


{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,

2000-2014, MetaQuotes Software Corp.

596

Constantes Padro, Enumeradores e Estruturas


": falha ao excluir a etiqueta retangular! Cdigo de erro = ",GetLastError());
return(false);
}
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- tamanho da janela do grfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do grfico! Cdigo de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do grfico! Cdigo de erro = ",GetLastError());
return;
}
//--- definir as coordenadas da etiqueta retangular
int x=(int)x_distance/4;
int y=(int)y_distance/4;
//--- definir tamanho da etiqueta
int width=(int)x_distance/4;
int height=(int)y_distance/4;
//--- criar uma etiqueta retangular
if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o grfico e esperar um segundo
ChartRedraw();
Sleep(1000);
//--- alterar o tamanho da etiqueta retangular
int steps=(int)MathMin(x_distance/4,y_distance/4);
for(int i=0;i<steps;i++)
{
//--- redimensionar
width+=1;
height+=1;
if(!RectLabelChangeSize(0,InpName,width,height))
return;

2000-2014, MetaQuotes Software Corp.

597

Constantes Padro, Enumeradores e Estruturas


//--- verificar se o funcionamento do script foi desativado a fora
if(IsStopped())
return;
//--- redesenhar o grfico e esperar por 0.01 segundos
ChartRedraw();
Sleep(10);
}
//--- 1 segundo de atraso
Sleep(1000);
//--- alterar tipo de borda
if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
return;
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- alterar tipo de borda
if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
return;
//--- redesenhar o grfico e esperar por um segundo
ChartRedraw();
Sleep(1000);
//--- excluir a etiqueta
RectLabelDelete(0,InpName);
ChartRedraw();
//--- esperar por um segundo
Sleep(1000);
//--}

2000-2014, MetaQuotes Software Corp.

598

Constantes Padro, Enumeradores e Estruturas

Propriedades do Objeto
Todo objeto em um grfico de preo tm um certo conjunto de propriedades. Os valores de
propriedades de objetos so configurados e recebidos por funes correspondentes para trabalhar com
objetos grficos. Para cada tipo de objeto existe seu prprio conjunto de propriedades. Aqui todas os
possveis valores da famlia de enumerao ENUM_OBJECT_PROPERTY so listados. Algumas
propriedades requerem esclarecimento, tais como o nmero de nvel para o objeto de extenso de
Fibonacci. Em tais casos necessrio especificar o valor do parmetro modificador nas funes
ObjectSet...() e ObjectGet...().
The functions defining the properties of graphical objects, as well as ObjectCreate() and ObjectMove()
operations for creating and moving objects along the chart are actually used for sending commands to
the chart. If these functions are executed successfully, the command is included in the common queue
of the chart events. Visual changes in the properties of graphical objects are implemented when
handling the queue of the chart events.
Thus, do not expect an immediate visual update of graphical objects after calling these functions.
Generally, the graphical objects on the chart are 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 graphical objects.
Para funes ChartSetDouble() e ChartGetDouble()
ENUM_OBJECT_PROPERTY_INTEGER
Identificador

Descrio

Tipo de Propriedade

OBJPROP_COLOR

Cor

color

OBJPROP_STYLE

Estilo

ENUM_LINE_STYLE

OBJPROP_WIDTH

Espessura de linha

int

OBJPROP_BACK

Objeto no pano de fundo

bool

OBJPROP_ZORDER

Prioridade de um objeto
grfico para receber eventos
de clickagem em um grfico
(CHARTEVENT_CLICK). O valor
zero default definido ao se
criar um objeto; a prioridade
pode ser
aumentada
se
necessrio. Ao colocar objetos
um sobre o outro, somente
aquele com a maior prioridade
receber
o
evento
CHARTEVENT_CLICK.

long

OBJPROP_FILL

Preenche um objeto com cor


(para
OBJ_RECTANGLE,
OBJ_TRIANGLE, OBJ_ELLIPSE,
OBJ_CHANNEL,
OBJ_STDDEVCHANNEL,
OBJ_REGRESSION)

bool

2000-2014, MetaQuotes Software Corp.

599

Constantes Padro, Enumeradores e Estruturas


OBJPROP_HIDDEN

Probe exibir o nome de um


objeto grfico na lista de
objetos do menu do terminal
"Grficos" - "Objetos" - "Lista
de objetos". O valor true
permite ocultar um objeto da
lista. Por default, true
definido para os objetos que
exibem eventos de calendrio,
histrico de negociao e para
objetos criados a partir de
programas MQL5. Para ver
tais objetos grficos e acessar
suas propriedades, clique no
boto "TODOS" na janela "Lista
de objetos".

bool

OBJPROP_SELECTED

Objeto selecionado

bool

OBJPROP_READONLY

Capacidade de editar texto no


objeto Edit

bool

OBJPROP_TYPE

Tipo de objeto

ENUM_OBJECT r/o

OBJPROP_TIME

Coordenada de tempo

datetime modificador=nmero
do ponto de ancoragem

OBJPROP_SELECTABLE

Disponibilidade de objeto

bool

OBJPROP_CREATETIME

Hora de criao do objeto

datetime

OBJPROP_LEVELS

Nmero de nveis

int

OBJPROP_LEVELCOLOR

Cor das linhas de nvel

color
nvel

OBJPROP_LEVELSTYLE

Estilo da linha de nvel

ENUM_LINE_STYLE
modificador=nmero de nvel

OBJPROP_LEVELWIDTH

Espessura do nvel de linha

texto
objeto

int
nvel

OBJPROP_ALIGN

Alinhamento
de
horizontal
no
"Edit" (OBJ_EDIT)

OBJPROP_FONTSIZE

Tamanho de fonte

int

OBJPROP_RAY_LEFT

Raios indo para esquerda

bool

OBJPROP_RAY_RIGHT

Raios indo para direita

bool

OBJPROP_RAY

Uma linha vertical indo atravs


de todas as janelas de um
grfico

bool

OBJPROP_ELLIPSE

Exibio da elipse completa do


objeto Arco de Fibonacci

bool

2000-2014, MetaQuotes Software Corp.

r/o

modificador=nmero de

modificador=nmero de

ENUM_ALIGN_MODE

600

Constantes Padro, Enumeradores e Estruturas


(OBJ_FIBOARC)
OBJPROP_ARROWCODE

Cdigo de seta para o objeto


Seta

char

OBJPROP_TIMEFRAMES

Visibilidade de um objeto nas


janelas de tempo

conjunto de flags

OBJPROP_ANCHOR

Localizao
ancoragem
grfico

ENUM_ARROW_ANCHOR
OBJ_ARROW),
ENUM_ANCHOR_POINT
OBJ_LABEL,
OBJ_BITMAP_LABEL
OBJ_TEXT)

do ponto
de
de um objeto

(for
(for
and

OBJPROP_XDISTANCE

A distncia em pixels ao longo


do eixo X a partir do canto de
vinculao

int

OBJPROP_YDISTANCE

A distncia em pixels ao longo


do eixo Y a partir do canto de
vinculao

int

OBJPROP_DIRECTION

Tendncia do objeto Gann

ENUM_GANN_DIRECTION

OBJPROP_DEGREE

Nvel de marcao da Onda de


Elliott

ENUM_ELLIOT_WAVE_DEGREE

OBJPROP_DRAWLINES

Exibio
de
linhas
para
marcao da Onda de Elliott

bool

OBJPROP_STATE

Estado de boto (pressionado /


no pressionado)

bool

OBJPROP_CHART_ID

ID
do
objeto
"Chart" (OBJ_CHART). Permite
trabalhar com as propriedades
deste objeto como um grfico
normal usando as funes
descritas em Operaes de
Grfico, mas existem algumas
excees.

long r/o

OBJPROP_XSIZE

O tamanho do objeto Chart ao


longo do eixo X (largura em
pixels)
Especificado
para
objetos
OBJ_LABEL,
OBJ_BUTTON,
OBJ_CHART,
OBJ_BITMAP,
OBJ_BITMAP_LABEL, OBJ_EDIT,
OBJ_RECTANGLE_LABEL.

int

OBJPROP_YSIZE

O tamanho do objeto Chart ao


longo do eixo X (largura em
pixels)
Especificado
para
objetos
OBJ_LABEL,

int

2000-2014, MetaQuotes Software Corp.

601

Constantes Padro, Enumeradores e Estruturas


OBJ_BUTTON,
OBJ_CHART,
OBJ_BITMAP,
OBJ_BITMAP_LABEL, OBJ_EDIT,
OBJ_RECTANGLE_LABEL.
OBJPROP_XOFFSET

A coordenada X do canto
superior esquerdo da rea
visvel retangular nos objetos
grficos "Bitmap Label" e
"Bitmap" (OBJ_BITMAP_LABEL
e OBJ_BITMAP). O valor
definido em pixels em relao
ao canto superior esquerdo da
imagem original.

int

OBJPROP_YOFFSET

A coordenada X do canto
superior esquerdo da rea
visvel retangular nos objetos
grficos "Bitmap Label" e
"Bitmap" (OBJ_BITMAP_LABEL
e OBJ_BITMAP). O valor
definido em pixels em relao
ao canto superior esquerdo da
imagem original.

int

OBJPROP_PERIOD

Janela de tempo para o objeto


Chart

ENUM_TIMEFRAMES

OBJPROP_DATE_SCALE

Exibio da escala de tempo


para o objeto Chart

bool

OBJPROP_PRICE_SCALE

Exibio da escala de preo


para o objeto Chart

bool

OBJPROP_CHART_SCALE

A escala para o objeto Chart

int valor na faixa de 05

OBJPROP_BGCOLOR

A cor de fundo para OBJ_EDIT,


OBJ_BUTTON,
OBJ_RECTANGLE_LABEL

color

OBJPROP_CORNER

O canto do grfico para linkar


um objeto grfico

ENUM_BASE_CORNER

OBJPROP_BORDER_TYPE

Tipo de borda para o objeto


"Rectangle label"

ENUM_BORDER_TYPE

OBJPROP_BORDER_COLOR

Cor de borda para os objetos


OBJ_EDIT e OBJ_BUTTON

color

Ao usar operaes de grfico para o objeto "Chart" (OBJ_CHART), as seguintes limitaes so


impostas:
Ele no pode ser fechado usando ChartClose();
Ativo/perodo no podem ser alterados usando a funo ChartSetSymbolPeriod();
As

seguintes

propriedades

so

sem

efeito:

CHART_SCALE,

2000-2014, MetaQuotes Software Corp.

CHART_BRING_TO_TOP,

602

Constantes Padro, Enumeradores e Estruturas


CHART_SHOW_DATE_SCALE e CHART_SHOW_PRICE_SCALE (ENUM_CHART_PROPERTY_INTEGER).

Para os objetos OBJ_BITMAP_LABEL e OBJ_BITMAP, um modo especial de exibio de imagem pode


ser definido por programao. Neste modo, somente parte da imagem original (na qual uma rea
visvel retangular aplicada) exibida, enquanto o resto da imagem fica invisvel. O tamanho desta
rea deve ser definido usando a propriedade OBJPROP_XSIZE e OBJPROP_YSIZE. A rea visvel pode
ser "movida" somente dentro da imagem original usando as propriedades OBJPROP_XOFFSET e
OBJPROP_YOFFSET.

Para as funes ObjectSetDouble() e ObjectGetDouble()


ENUM_OBJECT_PROPERTY_DOUBLE
Identificador

Descrio

Tipo de Propriedade

OBJPROP_PRICE

Coordenada de Preo

double
modificador=nmero
do ponto de ancoragem

OBJPROP_LEVELVALUE

Valor de nvel

double
de nvel

OBJPROP_SCALE

Escala
(propriedades
objetos Gann e Arcos
Fibonnacci)

de
de

double

OBJPROP_ANGLE

ngulo. Para os objetos sem


ngulo especificado, criado a
partir de um programa, o valor
igual a EMPTY_VALUE

double

OBJPROP_DEVIATION

Desvio para o Canal de Desvio


Padro

double

modificador=nmero

Para as funes ObjectSetString() e ObjectGetString()


ENUM_OBJECT_PROPERTY_STRING
Identificador

Descrio

Tipo de Propriedade

OBJPROP_NAME

Nome de objeto

string

OBJPROP_TEXT

Descrio do objeto (o texto


contido no objeto)

string

OBJPROP_TOOLTIP

O texto de um "tooltip" (dica).


Se a propriedade no
definida, ento o "tooltip"
gerado automaticamente pelo
terminal
exibido.
Um
"tooltip" pode ser desabilitado

string

2000-2014, MetaQuotes Software Corp.

603

Constantes Padro, Enumeradores e Estruturas


atravs da atribuio do valor
"\n" (quebra de linha) a ele
OBJPROP_LEVELTEXT

Nvel de descrio

string
de nvel

modificador=nmero

OBJPROP_FONT

Font

string

OBJPROP_BMPFILE

O nome do arquivo BMP para


rtulo Bitmap. Veja tambm
Recursos

string
modificador: 0-estado
Ligado, 1-estado Desligado

OBJPROP_SYMBOL

Ativo para o objeto Chart

string

Para o objeto OBJ_RECTANGLE_LABEL ("Rtulo de Retngulo") um dentre os trs modos de design


podem ser definidos, correspondendo aos valores de ENUM_BORDER_TYPE.
ENUM_BORDER_TYPE
Identificador

Descrio

BORDER_FLAT

Forma lisa

BORDER_RAISED

Forma em relevo

BORDER_SUNKEN

Forma cavada

Para o objeto OBJ_EDIT ("Edit") e para a funo ChartScreenShot(), pode-se especificar o tipo de
alinhamento horizontal usando os valores da enumerao ENUM_ALIGN_MODE.
ENUM_ALIGN_MODE
Identificador

Descrio

ALIGN_LEFT

Alinhamento a esquerda

ALIGN_CENTER

Centrado (somente para o objeto Edit)

ALIGN_RIGHT

Alinhamento a direita

Exemplo:
#define

UP

"\x0431"

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--string label_name="my_OBJ_LABEL_object";
if(ObjectFind(0,label_name)<0)
{

2000-2014, MetaQuotes Software Corp.

604

Constantes Padro, Enumeradores e Estruturas


Print("Objeto ",label_name," no encontrado. Cdigo de erro = ",GetLastError());
//--- cria objeto Rtulo
ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);
//--- define coordenada X
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
//--- define coordenada Y
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
//--- define cor de texto
ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrWhite);
//--- define texto para objeto Rtulo
ObjectSetString(0,label_name,OBJPROP_TEXT,UP);
//--- define fonte
ObjectSetString(0,label_name,OBJPROP_FONT,"Wingdings");
//--- define tamanho de fonte
ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,10);
//--- rotao de 45 graus no sentido horrio
ObjectSetDouble(0,label_name,OBJPROP_ANGLE,-45);
//--- desabilita seleo de mouse
ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
//--- desenha o objeto no grfico
ChartRedraw(0);
}
}

2000-2014, MetaQuotes Software Corp.

605

Constantes Padro, Enumeradores e Estruturas

Mtodos de Vinculao de Objeto


Objetos grficos de Texto e Rtulo (OBJ_TEXT, OBJ_BITMAP_LABEL e OBJ_LABEL) podem ter uma
dentre 9 diferentes formas de vinculao de coordenada. A variante necessria pode ser especificada
usando
a
funo
ObjectSetInteger(chart_handle,
object_name,
OBJPROP_ANCHOR,
anchor_point_mode), onde anchor_point_mode um dos valores de ENUM_ANCHOR_POINT.
ENUM_ANCHOR_POINT
ID

Descrio

ANCHOR_LEFT_UPPER

Ponto de ancoragem no canto superior esquerdo

ANCHOR_LEFT

Ponto de ancoragem para a esquerda no centro

ANCHOR_LEFT_LOWER

Ponto de ancoragem no canto inferior esquerdo

ANCHOR_LOWER

Ponto de ancoragem abaixo no centro

ANCHOR_RIGHT_LOWER

Ponto de ancoragem no canto inferior direito

ANCHOR_RIGHT

Ponto de ancoragem para a direita no centro

ANCHOR_RIGHT_UPPER

Ponto de ancoragem no canto superior direito

ANCHOR_UPPER

Ponto de ancoragem acima no centro

ANCHOR_CENTER

Ponto de ancoragem rigorosamente no centro


do objeto

Exemplo:
string text_name="my_OBJ_TEXT_object";
if(ObjectFind(0,text_name)<0)
{
Print("Objeto ",text_name," no encontrado. Cdigo de erro = ",GetLastError());
//--- Obtm o preo mximo do grfico
double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
//--- Cria o objeto Label (Rtulo)
ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
//--- Define cor do texto
ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
//--- Define cor de fundo
ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
//--- Define texto para o objeto Label (Rtulo)
ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
//--- Define fonte de texto
ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
//--- Define tamanho de fonte
ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
//--- Vincula no canto superior direito
ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
//--- Gira 90 graus anti-horrio
ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);

2000-2014, MetaQuotes Software Corp.

606

Constantes Padro, Enumeradores e Estruturas


//--- Probe a seleo do objeto pelo mouse
ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
//--- redesenha objeto
ChartRedraw(0);
}

Objetos grficos de Seta (OBJ_ARROW) tm somente 2 formas de linkar suas coordenadas. Os


identificadores esto listados em ENUM_ARROW_ANCHOR.
ENUM_ARROW_ANCHOR
ID

Descrio

ANCHOR_TOP

Ancoragem no lado de cima

ANCHOR_BOTTOM

Ancoragem no lado de baixo

Exemplo:
void OnStart()
{
//--- Arrays auxiliares
double Ups[],Downs[];
datetime Time[];
//--- Define os arrays como sries de tempo
ArraySetAsSeries(Ups,true);
ArraySetAsSeries(Downs,true);
ArraySetAsSeries(Time,true);
//--- Cria handle do Indicador Fractais
int FractalsHandle=iFractals(NULL,0);
Print("FractalsHandle = ",FractalsHandle);
//--- Define valor do ltimo erro para Zero
ResetLastError();
//--- Tenta copiar os valores do indicador
int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Print("No possvel copiar os fractais de alta. Erro = ",GetLastError());
return;
}
ResetLastError();
//--- Tenta copiar os valores do indicador
copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
if(copied<=0)
{
Print("No possvel copiar os fractais de baixa. Erro = ",GetLastError());
return;
}
ResetLastError();

2000-2014, MetaQuotes Software Corp.

607

Constantes Padro, Enumeradores e Estruturas


//--- Copia a srie de tempo contendo as barras de abertura das ltimas 1000 barras
copied=CopyTime(NULL,0,0,1000,Time);
if(copied<=0)
{
Print("No possvel copiar o tempo de abertura das ltimas 1000 barras");
return;
}
int upcounter=0,downcounter=0; // conta o nmero de setas
bool created;// recebe o resultado das tentativas de criar um objeto
for(int i=2;i<copied;i++)// Passa pelos valores do indicador iFractals
{
if(Ups[i]!=EMPTY_VALUE)// Encontrado o fractal de cima
{
if(upcounter<10)// No cria mais que 10 setas "Up"
{
//--- Tenta criar um objeto "Up"
created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
if(created)// Se construdo - vamos fazer ajuste nele
{
//--- Ponto de ancoragem em baixo, a fim de no cobrir a barra
ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
//--- Toque final - colorido
ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
upcounter++;
}
}
}
if(Downs[i]!=EMPTY_VALUE)// Encontrado o menor fractal
{
if(downcounter<10)// No cria mais que 10 setas "Down"
{
//--- Tenta criar um objeto "Down"
created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
if(created)// Se construdo - vamos fazer ajuste nele
{
//--- Ponto de ancoragem em acima, a fim de no cobrir a barra
ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
//--- Toque final - colorido
ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
downcounter++;
}
}
}
}
}

Aps a execuo do script o grfico se parecer com esta figura.

2000-2014, MetaQuotes Software Corp.

608

Constantes Padro, Enumeradores e Estruturas

2000-2014, MetaQuotes Software Corp.

609

Constantes Padro, Enumeradores e Estruturas

O Canto do Grfico no Qual um Objeto Fica Ligado


H um nmero de objetos grficos, para o qual voc pode definir o canto de um grfico, no qual as
coordenadas so especificadas em pixels. Existem os seguintes tipos de objetos (entre parnteses
esto especificados os identificadores do tipo do objeto):
Rtulo (OBJ_LABEL);
Boto (OBJ_BUTTON);
Grfico (OBJ_CHART);
Rtulo Bitmap (OBJ_BITMAP_LABEL);
Rtulo Rectngulo (OBJ_RECTANGLE_LABEL);
Edit (OBJ_EDIT).
A fim de especificar o canto do grfico, a partir do qual as coordenadas X e Y sero medidas em
pixels, use ObjectSetInteger(chartID, name, OBJPROP_CORNER, chart_corner), onde:
chartID - identificador do grfico;
name nome de um objeto grfico;
OBJPROP_CORNER propriedade ID para especificar o canto para vinculao;
chart_corner o canto desejado do grfico, pode ser um dos valores da enumerao
ENUM_BASE_CORNER.
ENUM_BASE_CORNER
ID

Descrio

CORNER_LEFT_UPPER

Centro de coordenadas est no canto superior


esquerdo do grfico

CORNER_LEFT_LOWER

Centro de coordenadas est no canto inferior


esquerdo do grfico

CORNER_RIGHT_LOWER

Centro de coordenadas est no canto inferior


direito do grfico

CORNER_RIGHT_UPPER

Centro de coordenadas est no canto superior


direito do grfico

Exemplo:
void CreateLabel(long

chart_id,

string name,
int

chart_corner,

string text_label,
int

x_ord,

int

y_ord)

{
//--ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0);
ResetLastError();
if(!ObjectSetInteger(chart_id,name,OBJPROP_CORNER,chart_corner))

2000-2014, MetaQuotes Software Corp.

610

Constantes Padro, Enumeradores e Estruturas


Print("No possvel definir o ngulo para vincular o objeto ",
name,", cdigo de erro ",GetLastError());
ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_ord);
ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_ord);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text_label);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
int width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
string arrows[4]={"LEFT_UPPER","RIGHT_UPPER","RIGHT_LOWER","LEFT_LOWER"};
CreateLabel(0,arrows[0],CORNER_LEFT_UPPER,"0",50,50);
CreateLabel(0,arrows[1],CORNER_RIGHT_UPPER,"1",50,50);
CreateLabel(0,arrows[2],CORNER_RIGHT_LOWER,"2",50,50);
CreateLabel(0,arrows[3],CORNER_LEFT_LOWER,"3",50,50);
}

2000-2014, MetaQuotes Software Corp.

611

Constantes Padro, Enumeradores e Estruturas

Visibilidade de Objetos
A combinao de flags de visibilidade de objeto determina as janelas de tempo de grfico, onde o
objeto visvel. Para definir/obter o valor da propriedade OBJPROP_TIMEFRAMES, voc pode usar as
funes ObjectSetInteger()/ObjectGetInteger().
ID

Valor

Descrio

OBJ_NO_PERIODS

O objeto no desenhado em
nenhuma janela de tempo

OBJ_PERIOD_M1

0x00000001

O objeto desenhado em
grficos de 1 minuto

OBJ_PERIOD_M2

0x00000002

O objeto desenhado em
grficos de 2 minutos

OBJ_PERIOD_M3

0x00000004

O objeto desenhado em
grficos de 3 minutos

OBJ_PERIOD_M4

0x00000008

O objeto desenhado em
grficos de 4 minutos

OBJ_PERIOD_M5

0x00000010

O objeto desenhado em
grficos de 5 minutos

OBJ_PERIOD_M6

0x00000020

O objeto desenhado em
grficos de 6 minutos

OBJ_PERIOD_M10

0x00000040

O objeto desenhado em
grficos de 10 minutos

OBJ_PERIOD_M12

0x00000080

O objeto desenhado em
grficos de 12 minutos

OBJ_PERIOD_M15

0x00000100

O objeto desenhado em
grficos de 15 minutos

OBJ_PERIOD_M20

0x00000200

O objeto desenhado em
grficos de 20 minutos

OBJ_PERIOD_M30

0x00000400

O objeto desenhado em
grficos de 30 minutos

OBJ_PERIOD_H1

0x00000800

O objeto desenhado em
grficos de 1 hora

OBJ_PERIOD_H2

0x00001000

O objeto desenhado em
grficos de 2 horas

OBJ_PERIOD_H3

0x00002000

O objeto desenhado em
grficos de 3 horas

OBJ_PERIOD_H4

0x00004000

O objeto desenhado em
grficos de 4 horas

OBJ_PERIOD_H6

0x00008000

O objeto desenhado em
grficos de 6 horas

2000-2014, MetaQuotes Software Corp.

612

Constantes Padro, Enumeradores e Estruturas


OBJ_PERIOD_H8

0x00010000

O objeto desenhado em
grficos de 8 horas

OBJ_PERIOD_H12

0x00020000

O objeto desenhado em
grficos de 12 horas

OBJ_PERIOD_D1

0x00040000

O objeto desenhado em
grficos dirios

OBJ_PERIOD_W1

0x00080000

O objeto desenhado em
grficos semanais

OBJ_PERIOD_MN1

0x00100000

O objeto desenhado em
grficos mensais

OBJ_ALL_PERIODS

0x001fffff

O objeto desenhado em
todas das janelas de tempo

Os flags de visibilidade podem ser combinados usando o smbolo "|", por exemplo, a combinao de
flags OBJ_PERIOD_M10|OBJ_PERIOD_H4 significa que o objeto ser visvel nas janelas de tempo de
10-minutos e 4-horas.
Exemplo:
void OnStart()
{
//--string highlevel="PreviousDayHigh";
string lowlevel="PreviousDayLow";
double prevHigh;

// O Mxima do dia anterior

double prevLow;

// O Mnimo do dia anterior

double highs[],lows[];

// Arrays de Mximo e Mnimo

//--- redefine o cdigo de erro


ResetLastError();
//--- Obtm os 2 ltimos valores de Mximo na janela de tempo diria
int highsgot=CopyHigh(Symbol(),PERIOD_D1,0,2,highs);
if(highsgot>0) // Se cpia foi bem sucedida
{
Print("Os preos em alta dos ltimos dois dias foram obtidos com sucesso");
prevHigh=highs[0]; // O Mximo do dia anterior
Print("prevHigh = ",prevHigh);
if(ObjectFind(0,highlevel)<0) // Objeto com o mesmo highlevel no encontrado
{
ObjectCreate(0,highlevel,OBJ_HLINE,0,0,0); // Cria o objeto de linha Horizontal
}
//--- Define valor para nvel de preo para a linha highlevel
ObjectSetDouble(0,highlevel,OBJPROP_PRICE,0,prevHigh);
//--- Define a visibilidade apenas para PERIOD_M10 e PERIOD_H4
ObjectSetInteger(0,highlevel,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M10|OBJ_PERIOD_H4);
}
else

2000-2014, MetaQuotes Software Corp.

613

Constantes Padro, Enumeradores e Estruturas


{

Print("No foi possvel obter preos em lata nos ltimos dois dias, Erro = ",GetLastError());
}
//--- redefine o cdigo de erro
ResetLastError();
//--- Obtm os 2 ltimos valores de Mnimo na janela de tempo diria
int lowsgot=CopyLow(Symbol(),PERIOD_D1,0,2,lows);
if(lowsgot>0) // Se cpia foi bem sucedida
{
Print("Os preos em baixa dos ltimos dois dias foram obtidos com sucesso");
prevLow=lows[0]; // O Mnimo do dia anterior
Print("prevLow = ",prevLow);
if(ObjectFind(0,lowlevel)<0) // Objeto com o mesmo lowlevel no encontrado
{
ObjectCreate(0,lowlevel,OBJ_HLINE,0,0,0); // Cria o objeto linha Horizontal
}
//--- Define valor para o nvel de preo para a linha lowlevel
ObjectSetDouble(0,lowlevel,OBJPROP_PRICE,0,prevLow);
//--- Define a visibilidade apenas para PERIOD_M10 e PERIOD_H4
ObjectSetInteger(0,lowlevel,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M10|OBJ_PERIOD_H4);
}

else Print("No foi possvel obter preos em baixa nos ltimos dois dias, Erro = ",GetLastError(
ChartRedraw(0); // redesenha o grfico de forma forada
}

Tambm Veja
PeriodSeconds, Period, Janela de Tempo de Grfico, Data e Hora

2000-2014, MetaQuotes Software Corp.

614

Constantes Padro, Enumeradores e Estruturas

Nveis de Onda de Elliott


Ondas de Elliott so representadas por dois objetos grficos do tipo OBJ_ELLIOTWAVE5 e
OBJ_ELLIOTWAVE3. Para definir o tamanho da onda (mtodo de rotulao de onda), a propriedade
OBJPROP_DEGREE usada, para a qual os valores da enumerao ENUM_ELLIOT_WAVE_DEGREE
podem ser atribudos.
ENUM_ELLIOT_WAVE_DEGREE
ID

Descrio

ELLIOTT_GRAND_SUPERCYCLE

Grande Super-ciclo

ELLIOTT_SUPERCYCLE

Super-ciclo

ELLIOTT_CYCLE

Ciclo

ELLIOTT_PRIMARY

Primrio

ELLIOTT_INTERMEDIATE

Intermedirio

ELLIOTT_MINOR

Menor

ELLIOTT_MINUTE

Minuto

ELLIOTT_MINUETTE

Minuette

ELLIOTT_SUBMINUETTE

Subminuette

Exemplo:
for(int i=0;i<ObjectsTotal(0);i++)
{
string currobj=ObjectName(0,i);
if((ObjectGetInteger(0,currobj,OBJPROP_TYPE)==OBJ_ELLIOTWAVE3) ||
((ObjectGetInteger(0,currobj,OBJPROP_TYPE)==OBJ_ELLIOTWAVE5)))
{
//--- define o nvel de marcao para INTERMEDIRIO
ObjectSetInteger(0,currobj,OBJPROP_DEGREE,ELLIOTT_INTERMEDIATE);
//--- exibe linhas entre topos de ondas
ObjectSetInteger(0,currobj,OBJPROP_DRAWLINES,true);
//--- define cor de linha
ObjectSetInteger(0,currobj,OBJPROP_COLOR,clrBlue);
//--- define largura de linha
ObjectSetInteger(0,currobj,OBJPROP_WIDTH,5);
//--- define descrio
ObjectSetString(0,currobj,OBJPROP_TEXT,"test script");
}
}

2000-2014, MetaQuotes Software Corp.

615

Constantes Padro, Enumeradores e Estruturas

Objetos Gann
Para objetos Gann Fan (OBJ_GANNFAN) e Gann Grade (OBJ_GANNGRID) voc pode especificar dois
valores da enumerao ENUM_GANN_DIRECTION que definem a direo da tendncia.
ENUM_GANN_DIRECTION
ID

Descrio

GANN_UP_TREND

Linha correspondente tendncia de alta

GANN_DOWN_TREND

Linha correspondente tendncia de baixa

Para definir a escala da linha principal como 1x1, use a funo ObjectSetDouble(chart_handle,
gann_object_name, OBJPROP_SCALE, scale), onde:
chart_handle janela do grfico onde o objeto est localizado;
gann_object_name nome do objeto;
OBJPROP_SCALE identificador da propriedade "Escala";
scale escala requerida em unidades de Pips/Barra.

Exemplo de criao de um Ventilador Gann:


void OnStart()
{
//--string my_gann="OBJ_GANNFAN object";
if(ObjectFind(0,my_gann)<0)// Objeto no encontrado
{
//--- Informe sobre a falha
Print("Objeto ",my_gann," no encontrado. Cdigo de erro = ",GetLastError());
//--- Obtm o preo mximo do grfico
double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
//--- Obtm o preo mnimo do grfico
double chart_min_price=ChartGetDouble(0,CHART_PRICE_MIN,0);
//--- Quantas barras esto exibidas no grfico

2000-2014, MetaQuotes Software Corp.

616

Constantes Padro, Enumeradores e Estruturas


int bars_on_chart=ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Cria um array, para escrever nele a hora de abertura de cada barra
datetime Time[];
//--- Arruma acesso ao array como o de srie de tempo
ArraySetAsSeries(Time,true);
//--- Agora copia dados de barras visveis no grfico para dentro deste array
int times=CopyTime(NULL,0,0,bars_on_chart,Time);
if(times<=0)
{
Print("No foi possvel copiar o array com o tempo aberto!");
return;
}
//--- Preparaes preliminares concludas
//--- ndice da barra central no grfico
int center_bar=bars_on_chart/2;
//--- Equador do grfico - entre o mximo e mnimo
double mean=(chart_max_price+chart_min_price)/2.0;
//--- Define as coordenadas do primeiro ponto de ancoragem para o centro
ObjectCreate(0,my_gann,OBJ_GANNFAN,0,Time[center_bar],mean,
//--- Segundo ponto de ancoragem para a direita
Time[center_bar/2],(mean+chart_min_price)/2.0);
Print("Time[center_bar] = "+(string)Time[center_bar]+"
//Print("Time[center_bar]/="+Time[center_bar]+"

Time[center_bar/2] = "+(string)Time[c

Time[center_bar/2]="+Time[center_bar/2]);

//--- Define a escala em unidades de Pips / Barra


ObjectSetDouble(0,my_gann,OBJPROP_SCALE,10);
//--- Define a tendncia da linha
ObjectSetInteger(0,my_gann,OBJPROP_DIRECTION,GANN_UP_TREND);
//--- Define a largura da linha
ObjectSetInteger(0,my_gann,OBJPROP_WIDTH,1);
//--- Define o estilo da linha
ObjectSetInteger(0,my_gann,OBJPROP_STYLE,STYLE_DASHDOT);
//--- Define a cor da linha
ObjectSetInteger(0,my_gann,OBJPROP_COLOR,clrYellowGreen);
//--- Permite ao usurio selecionar um objeto
ObjectSetInteger(0,my_gann,OBJPROP_SELECTABLE,true);
//--- Seleciona ele voc mesmo
ObjectSetInteger(0,my_gann,OBJPROP_SELECTED,true);
//--- Desenha ele no grfico
ChartRedraw(0);
}
}

2000-2014, MetaQuotes Software Corp.

617

Constantes Padro, Enumeradores e Estruturas

Cores Web
As seguintes contantes de cor so definidas para o tipo color:
clrBlack

clrDarkGre
en

clrDarkSlat
eGray

clrOlive

clrGreen

clrTeal

clrNavy

clrPurple

clrM aroon

clrIndigo

clrM idnigh
tBlue

clrDarkBlu
e

clrDarkOliv
eGreen

clrSaddleB
rown

clrForestG
reen

clrOliveDra
b

clrSeaGre
en

clrDarkGol
denrod

clrDarkSlat
eBlue

clrSienna

clrM edium
Blue

clrBrown

clrDarkTur
quoise

clrDimGray

clrLightSe
aGreen

clrDarkViol
et

clrFireBric
k

clrM edium
VioletRed

clrM edium
SeaGreen

clrChocola
te

clrCrimson

clrSteelBlu
e

clrGoldenr
od

clrM edium
SpringGre
en

clrLawnGr
een

clrCadetBl
ue

clrDarkOrc
hid

clrYellowG
reen

clrLimeGre
en

clrOrange
Red

clrDarkOra
nge

clrOrange

clrGold

clrYellow

clrChartre
use

clrLime

clrSpringG
reen

clrAqua

clrDeepSk
yBlue

clrBlue

clrM agent
a

clrRed

clrGray

clrSlateGra
y

clrPeru

clrBlueViol
et

clrLightSla
teGray

clrDeepPin
k

clrM edium
Turquoise

clrDodgerB
lue

clrTurquoi
se

clrRoyalBlu
e

clrSlateBlu
e

clrDarkKha
ki

clrIndianR
ed

clrM edium
Orchid

clrGreenY
ellow

clrM edium
Aquamarin
e

clrDarkSea
Green

clrTomato

clrRosyBro
wn

clrOrchid

clrM edium
Purple

clrPaleViol
etRed

clrCoral

clrCornflo
werBlue

clrDarkGra
y

clrSandyBr
own

clrM edium
SlateBlue

clrTan

clrDarkSal
mon

clrBurlyWo
od

clrHotPink

clrSalmon

clrViolet

clrLightCor
al

clrSkyBlue

clrLightSal
mon

clrPlum

clrKhaki

clrLightGr
een

clrAquama
rine

clrSilver

clrLightSky
Blue

clrLightSte
elBlue

clrLightBlu
e

clrPaleGre
en

clrThistle

clrPowder
Blue

clrPaleGol
denrod

clrPaleTur
quoise

clrLightGra
y

clrWheat

clrNavajoW
hite

clrM occasi
n

clrLightPin
k

clrGainsbo
ro

clrPeachP
uff

clrPink

clrBisque

clrLightGol
denrod

clrBlanche
dAlmond

clrLemonC
hiffon

clrBeige

clrAntique
White

clrPapaya
Whip

clrCornsilk

clrLightYel
low

clrLightCya
n

clrLinen

clrLavende
r

clrM istyRo
se

clrOldLace

clrWhiteS
moke

clrSeashell

clrIvory

clrHoneyd
ew

clrAliceBlu
e

clrLavend
erBlush

clrM intCre
am

clrSnow

clrWhite

A cor pode ser definida para um objeto usando a funo ObjectSetInteger(). Para definir a cor de um
indicador customizado a funo PlotIndexSetInteger() usada. Para obter valores de cor existem
funes similares ObjectGetInteger() e PlotIndexGetInteger().

2000-2014, MetaQuotes Software Corp.

618

Constantes Padro, Enumeradores e Estruturas


Exemplo:
//---- configurando um indicador
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots

#property indicator_type1

DRAW_LINE

#property indicator_type2

DRAW_LINE

#property indicator_type3

DRAW_LINE

#property indicator_color1

clrBlue

#property indicator_color2

clrRed

#property indicator_color3

clrLime

2000-2014, MetaQuotes Software Corp.

619

Constantes Padro, Enumeradores e Estruturas

Wingdings
Caracteres de Wingdings usados com o objeto OBJ_ARROW:

Um caractere necessrio pode ser definido usando a funo ObjectSetInteger().


Exemplo:
void OnStart()
{
//--string up_arrow="up_arrow";
datetime time=TimeCurrent();
double lastClose[1];
int close=CopyClose(Symbol(),Period(),0,1,lastClose);

// Obtm o preo de Fechamento

//--- Se o preo foi obtido


if(close>0)
{
ObjectCreate(0,up_arrow,OBJ_ARROW,0,0,0,0,0);

// Cria uma seta

ObjectSetInteger(0,up_arrow,OBJPROP_ARROWCODE,241);

// Define o cdigo da seta

ObjectSetInteger(0,up_arrow,OBJPROP_TIME,time);

// Define hora

ObjectSetDouble(0,up_arrow,OBJPROP_PRICE,lastClose[0]);// Define preo


ChartRedraw(0);

// Desenha a seta agora

}
else
Print("No foi possvel obter o ltimo Fechamento de preo!");
}

2000-2014, MetaQuotes Software Corp.

620

Constantes Padro, Enumeradores e Estruturas

Constantes de Indicador
Existem 37 indicadores tcnicos pr-definidos, que podem ser usados em programas escritos na
linguagem MQL5. Alm disso, existe uma oportunidade para criar indicadores customizados usando a
funo iCustom(). Todas as constantes requeridas para isso esto divididas em 5 grupos:
Constantes de preo para seleo do tipo de preo ou volume, sob o qual um indicador calculado;
Mtodos de suavizao mtodos de suavizao internos usados em indicadores;
Linhas de indicador identificadores de buffers do indicador ao acessar valores do indicador usando
CopyBuffer();
Estilos de desenho para indicar um dos 18 tipos de desenhos e configuraes de estilo de desenho
da linha;
Propriedades de indicadores customizados so usados em funes para trabalhar com indicadores
customizados;
Tipos de indicadores so usados para especificar o tipo de indicador tcnico ao criar um handle
usando IndicatorCreate();
Identificadores de tipos de dado so usados para especificar o tipo de dado passado em um array do
tipo MqlParam para dentro de uma funo IndicatorCreate().

2000-2014, MetaQuotes Software Corp.

621

Constantes Padro, Enumeradores e Estruturas

Constantes de Preo
Clculos de indicatores tcnicos requerem valores de preo e/ou valores de volumes, sob os quais
clculos sero realizados. Existem 7 indicadores pr-definidos a partir da enumerao
ENUM_APPLIED_PRICE, usados para especificar o preo base desejado para os clculos.
ENUM_APPLIED_PRICE
ID

Descrio

PRICE_CLOSE

Preo de Fechamento

PRICE_OPEN

Preo de Abertura

PRICE_HIGH

O preo mximo para o perodo

PRICE_LOW

O preo mnimo para o perodo

PRICE_MEDIAN

O preo mediano, (mximo + mnimo)/2

PRICE_TYPICAL

Preo
tpico,
fechamento)/3

PRICE_WEIGHTED

Preo mdio, (mximo + mnimo + fechamento +


fechamento)/4

(mximo

mnimo

Caso o volume seja usado nos clculos, necessrio especificar um dos dois valores a partir da
enumerao ENUM_APPLIED_VOLUME.
ENUM_APPLIED_VOLUME
ID

Descrio

VOLUME_TICK

Volume de Tick

VOLUME_REAL

Volume de negociao

O indicador tcnico iStochastic() pode ser calculado de duas formas usando:


ou somente preos de Fechamento;
ou preos de Mximo e Mnimo.
Para selecionar uma variante necessria para o clculo, especifique um dos valores da enumerao
ENUM_STO_PRICE.
ENUM_STO_PRICE
ID

Descrio

STO_LOWHIGH

Clculo baseado em preos Mnimo/Mximo

STO_CLOSECLOSE

Clculo baseado em preos Fechamento/


Fechamento

Se um indicador tcnico usa nos clculos dados de preo, seu tipo definido por
ENUM_APPLIED_PRICE, ento o handle de qualquer indicador (incorporado no terminal ou escrito por
um usurio) pode ser usado como a srie de preo de entrada. Neste caso, os valores do buffer zero

2000-2014, MetaQuotes Software Corp.

622

Constantes Padro, Enumeradores e Estruturas


do indicador sero utilizados para os clculos. Isso torna fcil construir valores de um indicador usando
valores de um outro indicador. O handle de um indicador customizado criado por meio de chamada
da funo iCustom().
Exemplo:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- parmetros de entrada


input int

RSIperiod=14;

// Perodo para clculo do RSI

input int

Smooth=8;

// Perodo de suavizao do RSI

input ENUM_MA_METHOD meth=MODE_SMMA; // Mtodo de suavizao


//---- plotar RSI
#property indicator_label1

"RSI"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//---- plotar RSI_Smoothed


#property indicator_label2

"RSI_Smoothed"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrNavy

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- buffers do indicador


double

RSIBuffer[];

// Aqui ns armazenamos os valores do RSI

double

RSI_SmoothedBuffer[]; // Aqui estaro os valores suavizados dos RSI

int

RSIhandle;

// Handle do indicador RSI

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
IndicatorSetInteger(INDICATOR_DIGITS,2);
//--RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,

2000-2014, MetaQuotes Software Corp.

623

Constantes Padro, Enumeradores e Estruturas


const double &price[]
)
{
//---

Redefine o valor do ltimo erro

ResetLastError();
//--- Obtm dados do indicador RSI em um array RSIBuffer[]
int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
if(copied<=0)
{
Print("No possvel copiar os valores do indicador RSI. Erro = ",
GetLastError(),",

copiado =",copied);

return(0);
}
//--- Cria o indicador de valores mdios usando valores do RSI
int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
if(copied<=0)
{
Print("No possvel copiar o indicador suavizado do RSI. Erro = ",
GetLastError(),",

copiado =",copied);

return(0);
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

624

Constantes Padro, Enumeradores e Estruturas

Mtodos de Suavizao
Muitos indicadores tcnicos so baseados em vrios mtodos de suavizao de sries de preo. Alguns
indicadores tcnicos padres requerem especificao da tipo de suavizao como um parmetro de
entrada. Para especificar o tipo desejado de suavizao, identificadores listados na enumerao
ENUM_MA_METHOD so usados.
ENUM_MA_METHOD
ID

Descrio

MODE_SMA

Mdia simples

MODE_EMA

Mdia exponencial

MODE_SMMA

Mdia suavizada

MODE_LWMA

Mdia linear-ponderada

Exemplo:
double ExtJaws[];
double ExtTeeth[];
double ExtLips[];
//---- handles para mdias mveis
int

ExtJawsHandle;

int

ExtTeethHandle;

int

ExtLipsHandle;

//--- obtm handles de MA's


ExtJawsHandle=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN);
ExtTeethHandle=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN);
ExtLipsHandle=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN);

2000-2014, MetaQuotes Software Corp.

625

Constantes Padro, Enumeradores e Estruturas

Linhas de Indicadores
Alguns indicadores tcnicos tm vrios buffers desenhados no grfico. A numerao de buffers de um
indicador comea com 0. Ao copiar valores de indicador usando a funo CopyBuffer() em um array do
tipo double, para alguns indicadores, pode-se indicar o identificador de um buffer copiado ao invs de
seu nmero.

Identificadores de linhas de indicador permitidos ao copiar valores de iMACD(), iRVI() e iStochastic().


Constante

Valor

Descrio

MAIN_LINE

Linha principal

SIGNAL_LINE

Linha de sinal

Identificadores de linhas de indicador permitidos ao copiar valores de ADX() e ADXW().


Constante

Valor

Descrio

MAIN_LINE

Linha principal

PLUSDI_LINE

Linha +DI

MINUSDI_LINE

Linha DI

Identificadores de linhas de indicador permitidos ao copiar valores de iBands().


Constante

Valor

Descrio

BASE_LINE

Linha principal

UPPER_BAND

Limite superior

LOWER_BAND

Limite inferior

Identificadores de linhas de indicador permitidos ao copiar valores de iEnvelopes() e iFractals().


Constante

Valor

Descrio

UPPER_LINE

Linha de cima

LOWER_LINE

Linha de baixo

Identificadores de linhas de indicador permitidos ao copiar valores de iGator()


Constante

Valor

Descrio

UPPER_HISTOGRAM

Histograma superior

LOWER_HISTOGRAM

Histograma inferior

Identificadores de linhas de indicador permitidos ao copiar valores de iAlligator().


Constante

Valor

2000-2014, MetaQuotes Software Corp.

Descrio

626

Constantes Padro, Enumeradores e Estruturas


GATORJAW_LINE

Linha Jaw

GATORTEETH_LINE

Linha Teeth

GATORLIPS_LINE

Linha Lips

Identificadores de linhas de indicador permitidos ao copiar valores de iIchimoku().


Constante

Valor

Descrio

TENKANSEN_LINE

Linha Tenkan-sen

KIJUNSEN_LINE

Linha Kijun-sen

SENKOUSPANA_LINE

Linha Senkou Span A

SENKOUSPANB_LINE

Linha Senkou Span B

CHINKOUSPAN_LINE

Linha Chinkou Span

2000-2014, MetaQuotes Software Corp.

627

Constantes Padro, Enumeradores e Estruturas

Estilos de Desenho
Ao criarum indicador customizado, pode-se especificar um dos 18 tipos de plotagem grfica (como
exibidos na janela do grfico principal ou em uma sub-janela do grfico), cujos valores so
especificados na enumerao ENUM_DRAW_TYPE.
Em um indicador customizado, permitido usar quaisquer tipos de indicador construdo/desenho.
Cada tipo de construo requer especificao de um a cinco arrays globais para armazenar dados
necessrios para o desenho. Estes arrays de dados devem ser associados com buffers de indicador
usando a funo SetIndexBuffer(). O tipo de dados de ENUM_INDEXBUFFER_TYPE deve ser especificado
para cada buffer.
Dependendo do estilo de desenho, pode-se necessitar de um a quatro buffers de valor (marcados como
INDICADOR_DATA). Se um estilo admite alternao dinmica de cores (todos os estilos contm COLOR
nos seus nomes), ento voc precisar de um buffer adicional de cor (tipo indicado
INDICATOR_COLOR_INDEX). Os buffers de cor so sempre vinculados aps os buffers de valores
correspondendo ao estilo.
ENUM_DRAW_TYPE
ID

Descrio

Estruturas de Dados

Buffers de cor

DRAW_NONE

No desenhado

DRAW_LINE

Linha

DRAW_SECTION

Seo

DRAW_HISTOGRAM

Histograma a partir da
linha zero

DRAW_HISTOGRAM2

Histograma de dois
buffers do indicador

DRAW_ARROW

Desenha setas

DRAW_ZIGZAG

Estilo Zigzag permite


diviso vertical na
barra

DRAW_FILLING

Preenchimento de cor
entre dos dois nveis

DRAW_BARS

Exibe
como
uma
seqncia de barras

DRAW_CANDLES

Exibe
como
um
seqncia de candles

DRAW_COLOR_LINE

Linha Multicolorida

DRAW_COLOR_SECTIO
N

Diviso Multicolorida

DRAW_COLOR_HISTO
GRAM

Histograma
multicolorida a partir
da linha zero

2000-2014, MetaQuotes Software Corp.

628

Constantes Padro, Enumeradores e Estruturas


DRAW_COLOR_HISTO
GRAM2

Histograma
multicolorido dos dois
buffers do indicador

DRAW_COLOR_ARRO
W

Desenho
de
multicoloridas

DRAW_COLOR_ZIGZAG

ZigZag Multicolorido

DRAW_COLOR_BARS

Barras multicoloridas

DRAW_COLOR_CANDL
ES

Candles multicoloridos

Para refinar a exibio dos tipos


ENUM_PLOT_PROPERTY so usados.

setas

de desenho selecionados, identificadores

listados

em

Para funes PlotIndexSetInteger() e PlotIndexGetInteger()


ENUM_PLOT_PROPERTY_INTEGER
ID

Descrio

Tipo da Propriedade

PLOT_ARROW

Cdigo de seta para estilo


DRAW_ARROW

uchar

PLOT_ARROW_SHIFT

Deslocamento vertical de setas


para estilo DRAW_ARROW

int

PLOT_DRAW_BEGIN

Nmero de barras iniciais sem


desenho e valores na Janela de
Dados

int

PLOT_DRAW_TYPE

Tipo de construo grfica

ENUM_DRAW_TYPE

PLOT_SHOW_DATA

Sinal de exibio de valores de


construo na Janela de Dados

bool

PLOT_SHIFT

Deslocamento da plotagem do
indicador ao longo do eixo
tempo em barras

int

PLOT_LINE_STYLE

Estilo de linha de desenho

ENUM_LINE_STYLE

PLOT_LINE_WIDTH

A espessura
desenho

PLOT_COLOR_INDEXES

O nmero de cores

int

PLOT_LINE_COLOR

O ndice de um buffer contendo


a cor de desenho

color
modificador = nmero
de ndice de cores

da

linha

de

Para a funo PlotIndexSetDouble()


ENUM_PLOT_PROPERTY_DOUBLE

2000-2014, MetaQuotes Software Corp.

int

629

Constantes Padro, Enumeradores e Estruturas


ID

Descrio

PLOT_EMPTY_VALUE

Tipo da Propriedade

Um valor vazio para plotagem,


para a qual no h desenho

double

Para a funo PlotIndexSetString()


ENUM_PLOT_PROPERTY_STRING
ID

Descrio

PLOT_LABEL

Tipo da Propriedade

O nome da srie grfica do


indicador para exibir na Janela
de Dados Ao trabalhar com
estilos
grficos
complexos
exigindo vrios buffers de
indicador para a exposio, os
nomes para cada buffer pode
ser especificado utilizando ";"
como separador. O cdigo de
exemplo
mostrado
na
DRAW_CANDLES

string

5 estilos podem ser usados para desenhar linhas em indicadores customizados. Eles so vlidos
somente para a espessura de linha 0 ou 1.
ENUM_LINE_STYLE
ID

Descrio

STYLE_SOLID

Linha slida

STYLE_DASH

Linha tracejada

STYLE_DOT

Linha pontilhada

STYLE_DASHDOT

Linha trao-ponto

STYLE_DASHDOTDOT

Trao - dois pontos

Para definir o estilo de desenho de linha e o tipo de desenho, a funo PlotIndexSetInteger() usada.
Para as extenses de Fibonacci, a espessura e o estilo de desenho dos nveis podem ser indicados
usando a funo ObjectSetInteger().
Exemplo:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- buffers do indicador


double

MABuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

630

Constantes Padro, Enumeradores e Estruturas


void OnInit()
{
//--- Associa o array ao buffer do indicador com ndice 0
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//--- Define o desenho da linha
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//--- Define o estilo da linha
PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//--- Define cor de linha
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
//--- Define espessura de linha
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//--- Define rtulos para a linha
PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--for(int i=prev_calculated;i<rates_total;i++)
{
MABuffer[i]=close[i];
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

631

Constantes Padro, Enumeradores e Estruturas

Propriedades de Indicador Customizado


O nmero de buffers de indicador que podem ser usados em um indicador customizado ilimitado.
Mas para cada array que designado como um buffer de indicador usando a funo SetIndexBuffer(),
necessrio especificar o tipo de dado que ele armazenar. Este pode ser um dos valores da
enumerao ENUM_INDEXBUFFER_TYPE.
ENUM_INDEXBUFFER_TYPE
ID

Descrio

INDICATOR_DATA

Dados para desenho

INDICATOR_COLOR_INDEX

Cor

INDICATOR_CALCULATIONS

Buffers auxiliares para clculos intermedirios

Um indicador customizado tem muitas configuraes para fornecer uma exibio conveniente. Estas
configuraes so feitas atravs da atribuio de propriedades de indicador correspondentes usando a
funes IndicatorSetDouble(), IndicatorSetInteger() e IndicatorSetString(). Identificadores de
propriedades de indicador so listados na enumerao ENUM_CUSTOMIND_PROPERTY.
ENUM_CUSTOMIND_PROPERTY_INTEGER
ID

Descrio

Tipo da Propriedade

INDICATOR_DIGITS

Acuracidade de desenho de
valores de indicador

int

INDICATOR_HEIGHT

Altura fixa da janela do


indicador (o comando de prprocessador
#property
indicator_height)

int

INDICATOR_LEVELS

Nmero de nveis na janela do


indicador

int

INDICATOR_LEVELCOLOR

Cor da linha de nvel

color
modificador
= nmero de nvel

INDICATOR_LEVELSTYLE

Estilo da linha de nvel

ENUM_LINE_STYLE
modificador = nmero de nvel

INDICATOR_LEVELWIDTH

Espessura da linha de nvel

int
modificador
= nmero de nvel

ENUM_CUSTOMIND_PROPERTY_DOUBLE
ID

Descrio

Tipo da Propriedade

INDICATOR_MINIMUM

Mnimo da janela do indicador

double

INDICATOR_MAXIMUM

Mximo da janela do indicador

double

INDICATOR_LEVELVALUE

Valor de nvel

double
modificador = nmero de nvel

2000-2014, MetaQuotes Software Corp.

632

Constantes Padro, Enumeradores e Estruturas


ENUM_CUSTOMIND_PROPERTY_STRING
ID

Descrio

Tipo da Propriedade

INDICATOR_SHORTNAME

Nome do indicador abreviado

string

INDICATOR_LEVELTEXT

Nvel de descrio

string
modificador
= nmero de nvel

Exemplos:
//--- configuraes do indicador
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots

#property indicator_type1

DRAW_LINE

#property indicator_type2

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_color2

clrRed

//--- parmetros de entrada


extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//--- buffers do indicador
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,HighesBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,LowesBuffer,INDICATOR_CALCULATIONS);
//--- define acuracidade
IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- define nveis
IndicatorSetInteger(INDICATOR_LEVELS,2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,80);
//--- define mximo e mnimo para sub-janela
IndicatorSetDouble(INDICATOR_MINIMUM,0);
IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- define a primeira barra a partir do qual o ndice ser desenhado
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,KPeriod+Slowing-2);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,KPeriod+Slowing+DPeriod);

2000-2014, MetaQuotes Software Corp.

633

Constantes Padro, Enumeradores e Estruturas


//--- define estilo STYLE_DOT para a segunda linha
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);
//--- nome para Janela de Dados e rtulo da sub-janela do indicador
IndicatorSetString(INDICATOR_SHORTNAME,"Stoch("+KPeriod+","+DPeriod+","+Slowing+")");
PlotIndexSetString(0,PLOT_LABEL,"Main");
PlotIndexSetString(1,PLOT_LABEL,"Signal");
//--- define valor vazio para linha de desenho
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- inicializao concluda
}

2000-2014, MetaQuotes Software Corp.

634

Constantes Padro, Enumeradores e Estruturas

Indicadores Tcnicos
Existem duas formas de criar via programao um indicador para posteriormente acessar seus
valores. A primeira forma especificar diretamente um nome de funo da lista de indicadores
tcnicos. A segunda forma , usando a funo IndicatorCreate(), criar de forma uniforme um handle
de qualquer indicador atravs da atribuio de um identificador da enumerao ENUM_INDICATOR.
Ambos as formas de criar handles so iguais, voc pode usar aquela que for mais conveniente em um
caso particular ao escrever um programa em MQL5.
Ao criar um indicador do tipo IND_CUSTOM, o campo type do primeiro elemento de um array de
parmetros de entrada MqlParam deve ter valor TYPE_STRING da enumerao ENUM_DATATYPE,
enquanto que o campo string_value do primeiro elemento deve conter o nome do indicador
customizado.
ENUM_INDICATOR
Identificador

Indicador

IND_AC

Accelerator Oscillator

IND_AD

Accumulation/Distribution

IND_ADX

Average Directional Index

IND_ADXW

ADX by Welles Wilder

IND_ALLIGATOR

Alligator

IND_AMA

Adaptive Moving Average

IND_AO

Awesome Oscillator

IND_ATR

Average True Range

IND_BANDS

Bollinger Bands

IND_BEARS

Bears Power

IND_BULLS

Bulls Power

IND_BWMFI

Market Facilitation Index

IND_CCI

Commodity Channel Index

IND_CHAIKIN

Chaikin Oscillator

IND_CUSTOM

Custom indicator

IND_DEMA

Double Exponential Moving Average

IND_DEMARKER

DeMarker

IND_ENVELOPES

Envelopes

IND_FORCE

Force Index

IND_FRACTALS

Fractals

IND_FRAMA

Fractal Adaptive Moving Average

IND_GATOR

Gator Oscillator

2000-2014, MetaQuotes Software Corp.

635

Constantes Padro, Enumeradores e Estruturas


IND_ICHIMOKU

Ichimoku Kinko Hyo

IND_MA

Moving Average

IND_MACD

MACD

IND_MFI

Money Flow Index

IND_MOMENTUM

Momentum

IND_OBV

On Balance Volume

IND_OSMA

OsMA

IND_RSI

Relative Strength Index

IND_RVI

Relative Vigor Index

IND_SAR

Parabolic SAR

IND_STDDEV

Standard Deviation

IND_STOCHASTIC

Stochastic Oscillator

IND_TEMA

Triple Exponential Moving Average

IND_TRIX

Triple Exponential Moving Averages Oscillator

IND_VIDYA

Variable Index Dynamic Average

IND_VOLUMES

Volumes

IND_WPR

Williams' Percent Range

2000-2014, MetaQuotes Software Corp.

636

Constantes Padro, Enumeradores e Estruturas

Identificadores de Tipo de Dados


Quando criar um indicador usando a funo IndicatorCreate(), um array de tipo MqlParam deve ser
especificado como o ltimo parmetro. Por sua vez, a estrutura MqlParam, descrevendo o indicador,
contm um tipo de campo especial. Este campo contm informao sobre o tipo de dado (real, integer
pi string type) que passado por um elemento especfico do array. O valor deste campo da estrutura
MqlParam pode ser um dos valores ENUM_DATATYPE.
ENUM_DATATYPE
Identificador

Tipo de dado

TYPE_BOOL

bool

TYPE_CHAR

char

TYPE_UCHAR

uchar

TYPE_SHORT

short

TYPE_USHORT

ushort

TYPE_COLOR

color

TYPE_INT

int

TYPE_UINT

uint

TYPE_DATETIME

datetime

TYPE_LONG

long

TYPE_ULONG

ulong

TYPE_FLOAT

float

TYPE_DOUBLE

double

TYPE_STRING

string

Cada elemento do array descreve o correspondente parmetro de entrada de um indicador tcnico


criado, assim o tipo e a ordem dos elementos no array devem ser rigorosamente mantidos em
concordncia com a descrio.

2000-2014, MetaQuotes Software Corp.

637

Constantes Padro, Enumeradores e Estruturas

Estado de Ambiente
As constantes que descrevem o ambiente de execuo corrente de um programa MQL5 esto divididas
em grupos:
Propriedades do terminal cliente informaes sobre o terminal cliente;
Propriedades do programa-MQL5 executado propriedades do programa MQL5, que ajuda a
controlar sua execuo;
Propriedades do ativo obteno de informaes sobre um ativo;
Propriedades da conta informaes sobre a conta atual;
Estatsticas de teste resultados de teste de um Expert Advisor.

2000-2014, MetaQuotes Software Corp.

638

Constantes Padro, Enumeradores e Estruturas

Propriedades do Terminal Cliente


Informaes sobre o terminal cliente podem ser obtidos atravs de duas funes:
TerminalInfoInteger() e TerminalInfoString(). Por parmetros, estas funes aceitam valores do
ENUM_TERMINAL_INFO_INTEGER e ENUM_TERMINAL_INFO_STRING respectivamente.
ENUM_TERMINAL_INFO_INTEGER
Identificador

Descrio

Tipo

TERMINAL_BUILD

O nmero de compilao (build)


do terminal cliente

int

TERMINAL_CONNECTED

Conexo com um servidor de


negociao

bool

TERMINAL_DLLS_ALLOWED

Permisso para usar DLL

bool

TERMINAL_TRADE_ALLOWED

Permisso para negociar

bool

TERMINAL_EMAIL_ENABLED

Permisso para enviar e-mails


usando servidor-SMTP e login,
especificado nas configuraes
do terminal

bool

TERMINAL_FTP_ENABLED

Permisso
para
enviar
relatrios usando servidor-FTP
e login, especificado nas
configuraes do terminal

bool

TERMINAL_MAXBARS

A quantidade mxima
barras no grfico

de

int

TERMINAL_CODEPAGE

Nmero do cdigo de pgina da


linguagem
instalado
no
terminal cliente

int

TERMINAL_CPU_CORES

O nmero de ncleos de CPU no


sistema

int

TERMINAL_DISK_SPACE

Espao livre de disco para a


pasta MQL5\Files do terminal
(agente), MB

int

TERMINAL_MEMORY_PHYSICAL

Memria fsica no sistema, MB

int

TERMINAL_MEMORY_TOTAL

Memria disponvel para o


processo do terminal (agente),
MB

int

TERMINAL_MEMORY_AVAILABL
E

Memria livre do processo do


terminal (agente), MB

int

TERMINAL_MEMORY_USED

Memria usada pelo terminal


(agente), MB

int

TERMINAL_X64

Indicao do "terminal 64-bit"

bool

2000-2014, MetaQuotes Software Corp.

639

Constantes Padro, Enumeradores e Estruturas


TERMINAL_OPENCL_SUPPORT

A verso do OpenCL suportado


no formato 0x00010002 = 1.2.
"0" significa que OpenCL no
suportado

int

Operaes de arquivopodem ser realizadas somente em dois diretrios; os caminhos correspondentes


podem ser obtidos usando solicitao para as propriedades TERMINAL_DATA_PATH e
TERMINAL_COMMONDATA_PATH.
ENUM_TERMINAL_INFO_STRING
Identificador

Descrio

Tipo

TERMINAL_LANGUAGE

Linguagem do terminal

string

TERMINAL_COMPANY

Nome da empresa

string

TERMINAL_NAME

Nome do terminal

string

TERMINAL_PATH

Pasta a partir da
terminal foi iniciado

TERMINAL_DATA_PATH

Pasta na qual dados


terminal so armazenados

do

string

TERMINAL_COMMONDATA_PAT
H

Caminho comum para todos os


terminais instalados em um
computador

string

qual o

string

Para um melhor entendimento dos caminhos armazenados nas propriedades dos parmetros
TERMINAL_PATH, TERMINAL_DATA_PATH e TERMINAL_COMMONDATA_PATH, recomendado executar
o script, que retornar estes valores para a cpia corrente do terminal cliente, instalado em seu
computador.
Example: Script retorna informaes sobre os caminhos do terminal cliente
//+------------------------------------------------------------------+
//|

Check_TerminalPaths.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--Print("TERMINAL_PATH = ",TerminalInfoString(TERMINAL_PATH));
Print("TERMINAL_DATA_PATH = ",TerminalInfoString(TERMINAL_DATA_PATH));

2000-2014, MetaQuotes Software Corp.

640

Constantes Padro, Enumeradores e Estruturas


Print("TERMINAL_COMMONDATA_PATH = ",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
}

Como resultado da execuo do script no Dirio de Experts, voc ver mensagens, como as seguintes:

2000-2014, MetaQuotes Software Corp.

641

Constantes Padro, Enumeradores e Estruturas

Propriedades do Programa MQL5 em Execuo


Para obter informaes sobre o programa mql5 em execuo no momento, as constantes
ENUM_MQL_INFO_INTEGER e ENUM_MQL_INFO_STRING so usadas.
Para a funo MQLInfoInteger
ENUM_MQL_INFO_INTEGER
Identificador

Descrio

Tipo

MQL_MEMORY_LIMIT

Maximum possible amount of


dynamic memory for MQL5
program in MB

int

MQL_MEMORY_USED

The memory size used by MQL5


program in MB

int

MQL_PROGRAM_TYPE

Tipo do programa MQL5

ENUM_PROGRAM_TYPE

MQL_DLLS_ALLOWED

A permisso para usar DLL


para
o
dado
programa
executado

bool

MQL_TRADE_ALLOWED

A permisso para negociar


para
o
dado
programa
executado

bool

MQL_DEBUG

O flag, que indica o modo de


depurao

bool

MQL_PROFILER

O flag, que indica que o


programa est operando em
modo de profiling de cdigo

bool

MQL_TESTER

O flag, que indica o processo


do testador

bool

MQL_OPTIMIZATION

O flag, que indica o processo


de otimizao

bool

MQL_VISUAL_MODE

O flag, que indica o processo


de testador visual

bool

MQL_FRAME_MODE

O sinalizador, indicando que o


Expert Advisor est operando
na coleta de resultado no modo
de otimizao dos quadros

bool

MQL_LICENSE_TYPE

Tipo de licena do mdulo EX5.


A licena refere-se ao mdulo
EX5, a partir do qual feita
uma
solicitao
usando
MQLInfoInteger(MQL_LICENSE_
TYPE).

ENUM_LICENSE_TYPE

2000-2014, MetaQuotes Software Corp.

642

Constantes Padro, Enumeradores e Estruturas


Para a funo MQLInfoString
ENUM_MQL_INFO_STRING
Identificador

Descrio

Tipo

MQL_PROGRAM_NAME

Nome do
executado

programa

MQL5

string

MQL_PROGRAM_PATH

Caminho
para
o
programa executado

dado

string

Para obter informaes sobre o tipo do programa em execuo, so utilizados valores de


ENUM_PROGRAM_TYPE.
ENUM_PROGRAM_TYPE
Identificador

Descrio

PROGRAM_SCRIPT

Script

PROGRAM_EXPERT

Expert

PROGRAM_INDICATOR

Indicador

ENUM_LICENSE_TYPE
Identificador

Descrio

LICENSE_FREE

Um verso gratuita ilimitada

LICENSE_DEMO

Um verso trial de um produto pago do Market.


Funciona somente no Provador de Estratgia

LICENSE_FULL

Um verso de licena comprada permite no


mais que trs ativaes

LICENSE_TIME

Tempo de expirao de licena

Exemplo:
ENUM_PROGRAM_TYPE mql_program=(ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE);
switch(mql_program)
{
case PROGRAM_SCRIPT:
{
Print(__FILE__+" um script");
break;
}
case PROGRAM_EXPERT:
{

2000-2014, MetaQuotes Software Corp.

643

Constantes Padro, Enumeradores e Estruturas


Print(__FILE__+" um Expert Advisor");
break;
}
case PROGRAM_INDICATOR:
{
Print(__FILE__+" um indicador customizado");
break;
}
default:Print("Valor do tipo MQL5 ",mql_program);
}

2000-2014, MetaQuotes Software Corp.

644

Constantes Padro, Enumeradores e Estruturas

Propriedades do Ativo
Para obter as informaes correntes do mercado existem vrias funes: SymbolInfoInteger(),
SymbolInfoDouble() e SymbolInfoString(). O primeiro parmetro o nome do ativo, os valores do
segundo parmetro da funo podem ser um dos identificadores de ENUM_SYMBOL_INFO_INTEGER,
ENUM_SYMBOL_INFO_DOUBLE e ENUM_SYMBOL_INFO_STRING.
Para a funo SymbolInfoInteger()
ENUM_SYMBOL_INFO_INTEGER
Identificador

Descrio

Tipo

SYMBOL_SELECT

O ativo (smbolo) selecionado


na janela Observao de
Mercador

bool

SYMBOL_SESSION_DEALS

Nmero de operaes (deals)


na sesso corrente

long

SYMBOL_SESSION_BUY_ORDERS

Nmero de ordens de Compra


no momento

long

SYMBOL_SESSION_SELL_ORDER
S

Nmero de ordens de Venda no


momento

long

SYMBOL_VOLUME

Volume da ltima
(deal)

long

SYMBOL_VOLUMEHIGH

Volume dirio mximo

long

SYMBOL_VOLUMELOW

Volume dirio mnimo

long

SYMBOL_TIME

Hora da ltima cotao

datetime

SYMBOL_DIGITS

Dgitos aps um ponto decimal

int

SYMBOL_SPREAD_FLOAT

Indicao
flutuante

bool

SYMBOL_SPREAD

Valor do spread em pontos

int

SYMBOL_TICKS_BOOKDEPTH

Nmero mximo de solicitaes


exibidas na Profundidade do
Mercado. Para ativos que no
tem fila de solicitaes, o valor
igual a zero.

int

SYMBOL_TRADE_CALC_MODE

Modo de clculo de preo de


contrato

ENUM_SYMBOL_CALC_MODE

SYMBOL_TRADE_MODE

Tipo de execuo de ordem

ENUM_SYMBOL_TRADE_MODE

SYMBOL_START_TIME

Data do incio de negociao do


ativo (geralmente usado para
futuros)

datetime

SYMBOL_EXPIRATION_TIME

Data do fim de negociao do

datetime

de

um

operao

spread

2000-2014, MetaQuotes Software Corp.

645

Constantes Padro, Enumeradores e Estruturas


ativo (geralmente usado para
futuros)
SYMBOL_TRADE_STOPS_LEVEL

Mnima distncia em pontos a


partir do preo de fechamento
corrente para colocar ordens de
Stop

int

SYMBOL_TRADE_FREEZE_LEVEL

Distncia
para
congelar
operaes de negociao em
pontos

int

SYMBOL_TRADE_EXEMODE

Modo de execuo de operao


(deal)

ENUM_SYMBOL_TRADE_EXECUT
ION

SYMBOL_SWAP_MODE

Modelo de clculo de Swap

ENUM_SYMBOL_SWAP_MODE

SYMBOL_SWAP_ROLLOVER3DA
YS

Dia da semana para cobrar


rolagem de swap de 3 dias

ENUM_DAY_OF_WEEK

SYMBOL_EXPIRATION_MODE

Flags de modos de expirao


de ordens permitidas

int

SYMBOL_FILLING_MODE

Flags
de
preenchimento
permitidas

modos
de
de
ordens

int

SYMBOL_ORDER_MODE

Flags
de
preenchimento
permitidas

modos
de
de
ordens

int

Para a funo SymbolInfoDouble()


ENUM_SYMBOL_INFO_DOUBLE
Identificador

Descrio

Tipo

SYMBOL_BID

Preo de Venda (Bid) - melhor


oferta de venda

double

SYMBOL_BIDHIGH

Mximo Preo de Venda do dia

double

SYMBOL_BIDLOW

Mnimo Preo de Venda do dia

double

SYMBOL_ASK

Preo de Compra (Ask)


melhor oferta de compra

double

SYMBOL_ASKHIGH

Mximo Preo de Compra do


dia

double

SYMBOL_ASKLOW

Mnimo Preo de Compra do dia

double

SYMBOL_LAST

Preo da ltimo operao (deal)

double

SYMBOL_LASTHIGH

Mximo dos preos negociados


do dia

double

SYMBOL_LASTLOW

Mnimo dos preos negociados


do dia

double

2000-2014, MetaQuotes Software Corp.

646

Constantes Padro, Enumeradores e Estruturas


SYMBOL_POINT

Valor de um ponto do ativo

double

SYMBOL_TRADE_TICK_VALUE

Valor
do
SYMBOL_TRADE_TICK_VALUE_P
ROFIT

double

SYMBOL_TRADE_TICK_VALUE_P
ROFIT

Preo de tick calculado para


uma posio lucrativa

double

SYMBOL_TRADE_TICK_VALUE_L
OSS

Preo de tick calculado para um


posio perdedora

double

SYMBOL_TRADE_TICK_SIZE

Mnima mudana de preo

double

SYMBOL_TRADE_CONTRACT_SI
ZE

Tamanho do
negociao

SYMBOL_VOLUME_MIN

Mnimo volume
operao (deal)

SYMBOL_VOLUME_MAX

Mximo volume
operao (deal)

contrato

de

double

para

uma

double

para

uma

double

SYMBOL_VOLUME_STEP

Mnimo passo de mudana de


volume para execuo de uma
operao (deal)

double

SYMBOL_VOLUME_LIMIT

Mximo
volume
agregado
permitido de uma posio
aberta e ordens pendentes em
uma direo (compra ou venda)
para um ativo. Por exemplo,
com a limitao de 5 lotes,
voc pode ter uma posio
comprada aberta com o volume
de 5 lotes e colocar uma ordem
pendente de Sell Limit com o
volume de 5 lotes. Mas neste
caso voc no pode colocar um
ordem pendente de Buy Limite
(j que o total de volume em
uma direo excederia o
limite) ou colocar Sell Limit
com o volume maior que 5
lotes.

double

SYMBOL_SWAP_LONG

Valor de swap comprado

double

SYMBOL_SWAP_SHORT

Valor de swap vendido

double

SYMBOL_MARGIN_INITIAL

Margem inicial significa a


quantia de moeda de margem
requerida para abrir uma
posio com o volume de um
lote. usada para verificar os
ativos de um cliente quando ele

double

2000-2014, MetaQuotes Software Corp.

647

Constantes Padro, Enumeradores e Estruturas


ou ele entra no mercado.
SYMBOL_MARGIN_MAINTENANC
E

A margem de manuteno. Se
for definida, ele representa a
quantia de margem na moeda
de margem do ativo cobrada de
um lote. usada parar
verificar os ativos de um
cliente quando o estado da
conta dele/dela muda. Se a
margem de manuteno igual
a 0, a margem inicial usada.

double

SYMBOL_MARGIN_LONG

Taxa de cobrana de margem


sobre posies compradas

double

SYMBOL_MARGIN_SHORT

Taxa de cobrana de margem


sobre posies vendidas

double

SYMBOL_MARGIN_LIMIT

Taxa de cobrana de margem


sobre ordens do tipo Limit

double

SYMBOL_MARGIN_STOP

Taxa de cobrana de margem


sobre orders do tipo Stop

double

SYMBOL_MARGIN_STOPLIMIT

Taxa de cobrana de margem


sobre ordens do tipo Stop Limit

double

SYMBOL_SESSION_VOLUME

Volume resumo de operaes


da sesso corrente

double

SYMBOL_SESSION_TURNOVER

Rotatividade resumo da sesso


corrente

double

SYMBOL_SESSION_INTEREST

Juros de abertura resumo

double

SYMBOL_SESSION_BUY_ORDERS
_VOLUME

Volume atual de ordens de


Compra

double

SYMBOL_SESSION_SELL_ORDER
S_VOLUME

Volume atual de ordens de


Venda

double

SYMBOL_SESSION_OPEN

Preo de abertura da sesso


atual

double

SYMBOL_SESSION_CLOSE

Preo de fechamento da sesso


atual

double

SYMBOL_SESSION_AW

Preo mdio
sesso atual

da

double

SYMBOL_SESSION_PRICE_SETT
LEMENT

Preo de liquidao da sesso


atual

double

SYMBOL_SESSION_PRICE_LIMIT
_MIN

Mnimo preo da sesso atual

double

SYMBOL_SESSION_PRICE_LIMIT

Mximo preo da sesso atual

double

ponderado

2000-2014, MetaQuotes Software Corp.

648

Constantes Padro, Enumeradores e Estruturas


_MAX
Para a funo SymbolInfoString()
ENUM_SYMBOL_INFO_STRING
Identificador

Descrio

Tipo

SYMBOL_CURRENCY_BASE

Moeda base de um ativo

string

SYMBOL_CURRENCY_PROFIT

Moeda de lucro

string

SYMBOL_CURRENCY_MARGIN

Moeda de margem

string

SYMBOL_BANK

Fornecedor da cotao corrente

string

SYMBOL_DESCRIPTION

Descrio do ativo

string

SYMBOL_ISIN

O nome de um ativo no
sistema ISIN (International
Securities
Identification
Number).
O
International
Securities
Identification
Number um cdigo de 12
dgitos
alfanumrico
que
identifica de forma nica um
ativo financeiro. A presena
desta propriedade de ativo
determinada
no
lado
do
servidor de negociao.

string

SYMBOL_PATH

Caminho da rvore de ativos

string

Para cada ativo vrios modos de expirao de ordens pendentes podem ser especificados. Um flag
associado a cada modo. Flags pode ser combinados usando a operao de OR lgico (|), por exemplo,
SYMBOL_EXPIRATION_GTC|SYMBOL_EXPIRATION_SPECIFIED. A fim de verificar se um certo modo
permitido para um ativo, o resultado doAND(&)deve ser comparado ao flag do modo.
Se o flag SYMBOL_EXPIRATION_SPECIFIED for especificado para um ativo, ento ao enviar uma ordem
pendente, voc pode especificar at que momento esta ordem pendente vlida.
Identificador

Valor

Descrio

SYMBOL_EXPIRATION_GTC

A ordem vlida durante um


perodo de tempo ilimitado,
at que ela seja explicitamente
cancelada

SYMBOL_EXPIRATION_DAY

A ordem vlida at o fim do


dia

SYMBOL_EXPIRATION_SPECIFIE
D

A hora de expirao
especificada na ordem

2000-2014, MetaQuotes Software Corp.

649

Constantes Padro, Enumeradores e Estruturas


SYMBOL_EXPIRATION_SPECIFIE
D_DAY

A data de expirao
especificada na ordem

Exemplo:
//+------------------------------------------------------------------+
//| Verifica se um modo de expirao especifico permitido

//+------------------------------------------------------------------+
bool IsExpirationTypeAllowed(string symbol,int exp_type)
{
//--- Obtm o valor da propriedade que descreve os modos de expirao permitidos
int expiration=(int)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_MODE);
//--- Retorna true, se o modo exp_type permitido
return((expiration&exp_type)==exp_type);
}

Ao enviar um ordem, voc pode especificar a poltica de preenchimento para o volume definido na
ordem. Modos de preenchimento de ordem permitidos para cada ativo so especificados na tabela.
Voc pode definir vrios modos para um ativo atravs da combinao de flags. Os flags podem ser
combinados atravs da operao do OR lgico (|), por exemplo, SYMBOL_FILLING_ALL_OR_NONE|
SYMBOL_CANCEL_REMAIND. A fim de verificar se um certo modo permitido para o ativo, o resultado
doANDlgico (&)deve ser comparado com o flag do modo.
Poltica de
Preenchimento

Identificador

Valor

Descrio

Fill or Kill

SYMBOL_FILLING_FOK

Esta poltica significa


que uma transao
somente pode ser
executada
com
o
volume especificado.
Se
a
quantidade
desejada do ativo no
est disponvel no
mercado, a ordem no
ser executada. O
volume requerido pode
ser preenchido usando
vrias
ofertas
disponveis
no
mercado no momento.

Immediate or Cancel

SYMBOL_FILLING_IOC

Neste
caso,
o
investidor
concorda
em
executar
uma
transao
com
o
volume
mximo
disponvel no mercado,
em que foi indicado na
ordem. No caso da

2000-2014, MetaQuotes Software Corp.

650

Constantes Padro, Enumeradores e Estruturas


ordem no poder ser
completamente
preenchida, o volume
disponvel da ordem
ser executado, e o
volume remanescente
ser
cancelado.
A
possibilidade
de
utilizao de ordens
"IOC" determinado
no servidor.
Return

No identificador

Esta
poltica

utilizada apenas para


as ordens (compra e
venda), ordens limit e
stop limit, e somente
para os ativos com
execuo de Mercado
ou Exchange. No caso
de um preenchimento
parcial, uma ordem a
mercado ou do tipo
limit
com
volume
remanescente no
cancelada,
mas
processada
posteriormente.

No Pedido e modos de execuo Instantnea a poltica Fill or Kill sempre usado para ordens de
mercado, a poltica de Return sempre usado para ordens de limite. Neste caso, ao enviar ordens
atravs de OrderSend ou OrderSendAsync, no h necessidade de especificar uma poltica de
preenchimento para elas.
Nos modos de execuo de Mercado e de Cmbio a poltica Return sempre permitida para todos os
tipos de pedidos. Para saber se as outras polticas so permitidas, use as propriedades
SYMBOL_FILLING_FOK e SYMBOL_FILLING_IOC.
Exemplo:
//+------------------------------------------------------------------+
//| Verifica se um modo de preenchimento especfico permitido

//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(string symbol,int fill_type)
{
//--- Obtm o valor da propriedade que descreve os modos de preenchimento permitidos
int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- Retorna true, se o modo fill_type permitido
return((filling & fill_type)==fill_type);
}

2000-2014, MetaQuotes Software Corp.

651

Constantes Padro, Enumeradores e Estruturas


Ao enviar um pedido de comrcio usando a funo OrderSend(), um tipo de ordem do enumerador
ENUM_ORDER_TYPE enumeration deve ser especificada para algumas operaes. Nem todos os tipos
de ordens podem ser autorizadas por um smbolo especfico. Propriedade SYMBOL_ORDER_MODE
descreve os sinalizadores dos tipos de ordens permitidas.
Identificador

Valor

Descrio

SYMBOL_ORDER_MARKET

Ordens
de mercado
permitidas (Buy e Sell)

SYMBOL_ORDER_LIMIT

Ordens
de
limite
so
permitidas (Buy Limit e Sell
Limit)

SYMBOL_ORDER_STOP

Ordens
de
parada
so
permitidas (Buy Stop e Sell
Stop)

SYMBOL_ORDER_STOP_LIMIT

Ordens de limite de parada so


permitidas (Buy Stop Limit e
Sell Stop Limit)

SYMBOL_ORDER_SL

16

Stop Loss permitido

SYMBOL_ORDER_TP

32

Take Profit permitido

Exemplo:
//+------------------------------------------------------------------+
//| A funo imprime tipos de ordens permitidas para um smbolo

//+------------------------------------------------------------------+
void Check_SYMBOL_ORDER_MODE(string symbol)
{
//--- receber o valor da propriedade descrevendo os tipos de ordens permitidas
int symbol_order_mode=(int)SymbolInfoInteger(symbol,SYMBOL_ORDER_MODE);
//--- verificar se h ordens de mercado (Execuo de Mercado)
if((SYMBOL_ORDER_MARKET&symbol_order_mode)==SYMBOL_ORDER_MARKET)
Print(symbol+": Ordens de mercado so permitidas (Buy e Sell)");
//--- verificar se h ordens de Limite
if((SYMBOL_ORDER_LIMIT&symbol_order_mode)==SYMBOL_ORDER_LIMIT)
Print(symbol+": Ordens Buy Limit e Sell Limit so permitidas");
//--- verificar se h ordens de Parada
if((SYMBOL_ORDER_STOP&symbol_order_mode)==SYMBOL_ORDER_STOP)
Print(symbol+": Ordens Buy Stop e Sell Stop so permitidas");
//--- verificar se h ordens Stop Limit
if((SYMBOL_ORDER_STOP_LIMIT&symbol_order_mode)==SYMBOL_ORDER_STOP_LIMIT)
Print(symbol+": Ordens Buy Stop Limit e Sell Stop Limit so permitidas");
//--- verificar se a colocao de uma ordem Stop Loss permitida
if((SYMBOL_ORDER_SL&symbol_order_mode)==SYMBOL_ORDER_SL)
Print(symbol+": Ordens de Stop Loss so permitidas");
//--- Verificar se a colocao de uma ordem Take Profit permitida
if((SYMBOL_ORDER_TP&symbol_order_mode)==SYMBOL_ORDER_TP)
Print(symbol+": Ordens de Take Profit so permitidas");

2000-2014, MetaQuotes Software Corp.

so

652

Constantes Padro, Enumeradores e Estruturas


//--}

A enumerao ENUM_SYMBOL_CALC_MODE usada para obter informao sobre como os


requerimentos de margem para um ativo so calculados.
ENUM_SYMBOL_CALC_MODE
Identificador

Descrio

Frmula

SYMBOL_CALC_MODE_FOREX

Modo Forex - clculo de lucro e


margem para Forex

Margin: Lots*Contract_Size/
Leverage
Profit:
(close_priceopen_price)
*Contract_Size*Lots

SYMBOL_CALC_MODE_FUTUR
ES

Modo Futuros - clculo de margem


e lucro para futuros

Margin:
Lots
*InitialMargin*Percentage/100
Profit:
(close_priceopen_price)*TickPrice/
TickSize*Lots

SYMBOL_CALC_MODE_CFD

Modo CFD - clculo de margem e


lucro para CFD

Margin:
Lots
*ContractSize*MarketPrice*Per
centage/100
Profit:
(close_priceopen_price)
*Contract_Size*Lots

SYMBOL_CALC_MODE_CFDIND
EX

Modo ndice CFD - clculo de


margem e lucro para CFD por
ndices

Margin:
(Lots*ContractSize*MarketPric
e)*TickPrice/TickSize
Profit:
(close_priceopen_price)
*Contract_Size*Lots

SYMBOL_CALC_MODE_CFDLEV
ERAGE

Modo Alavancado CFD - clculo de


margem e lucro para CFD em
negociao alavancada

Margin:
(Lots*ContractSize*MarketPric
e*Percentage)/Leverage
Profit:
(close_priceopen_price)
*Contract_Size*Lots

SYMBOL_CALC_MODE_EXCH_S
TOCKS

Modo Exchange - clculo de


margem e lucro para negociao
de ttulos na bolsa de valores

Margin:
Lots*ContractSize*OpenPrice
Profit:
(close_priceopen_price)
*Contract_Size*Lots

SYMBOL_CALC_MODE_EXCH_F
UTURES

Modo Futures - clculo da margem


e lucro para os contratos futuros
de negociao na bolsa de valores

Margin: Lots*InitialMargin or
Lots*MaintenanceMargin
Profit:
(close_priceopen_price)*Lots*TickPrice/

2000-2014, MetaQuotes Software Corp.

653

Constantes Padro, Enumeradores e Estruturas


TickSize
SYMBOL_CALC_MODE_EXCH_F
UTURES_FORTS

Modo FORTS Futures - clculo de


margem e lucro para futuros
contratos de comercializao nos
FORTS. A margem pode ser
reduzida pela quantidade de
desvio MarginDiscount de acordo
com as regras seguintes:
1. Se o preo de uma posio long
(ordem BUY) menor do que o
preo estimado, MarginDiscount =
Lots*((PriceSettle-PriceOrder)
*TickPrice/TickSize)
2. Se o preo de uma posio
short (ordem SELL) superior ao
preo estimado, MarginDiscount =
Lots*((PriceOrder-PriceSettle)
*TickPrice/TickSize)
onde:
o PriceSettle preo estimado
(limpando)
da
sesso
anterior;
o PriceOrder - preo mdio
ponderado de posio ou
preo de abertura definido na
ordem (pedido);
o TickPrice - Preo de tick
(custo da mudana do preo
por um ponto)
o TickSize - tamanho tick
(passo de alterao de preo
mnima)

Margin: Lots*InitialMargin or
Lots*MaintenanceMargin
Profit:
(close_priceopen_price)*Lots*TickPrice/
TickSize

Existem vrios modos de negociao de ativos. Informao sobre modos de negociao de um certo
ativo refletido nos valores da enumerao ENUM_SYMBOL_TRADE_MODE.
ENUM_SYMBOL_TRADE_MODE
Identificador

Descrio

SYMBOL_TRADE_MODE_DISABLED

Negociao est desabilitada para o ativo

SYMBOL_TRADE_MODE_LONGONLY

Permitido somente posies compradas

SYMBOL_TRADE_MODE_SHORTONLY

Permitido somente posies vendidas

SYMBOL_TRADE_MODE_CLOSEONLY

Permitido somente operaes de fechamento de


posio

SYMBOL_TRADE_MODE_FULL

Sem restries de negociao

2000-2014, MetaQuotes Software Corp.

654

Constantes Padro, Enumeradores e Estruturas

Os possveis modos de execuo de uma operao (deal) para um certo ativo so definidos na
enumerao ENUM_SYMBOL_TRADE_EXECUTION.
ENUM_SYMBOL_TRADE_EXECUTION
Identificador

Descrio

SYMBOL_TRADE_EXECUTION_REQUEST

Execuo por solicitao

SYMBOL_TRADE_EXECUTION_INSTANT

Execuo instantnea

SYMBOL_TRADE_EXECUTION_MARKET

Execuo a Mercado

SYMBOL_TRADE_EXECUTION_EXCHANGE

Execuo em um sistema de negociao externo


(Exchange)

Mtodos de clculo de swap na transferncia de posio so especificados na enumerao


ENUM_SYMBOL_SWAP_MODE. O mtodo de clculo de swap determina a unidade de medida dos
parmetros SYMBOL_SWAP_LONG e SYMBOL_SWAP_SHORT. Por exemplo, se swaps so cobrados na
moeda de depsito do cliente, ento os valores destes parmetros so especificados como uma
quantia de dinheiro na moeda de depsito do cliente.
ENUM_SYMBOL_SWAP_MODE
Identificador

Descrio

SYMBOL_SWAP_MODE_DISABLED

Desabilita swaps (sem swaps)

SYMBOL_SWAP_MODE_POINTS

Swaps so cobrados em pontos

SYMBOL_SWAP_MODE_CURRENCY_SYMBOL

Swaps so cobrados em dinheiro na moeda base


do ativo

SYMBOL_SWAP_MODE_CURRENCY_MARGIN

Swaps so cobrados em dinheiro na moeda de


margem do ativo

SYMBOL_SWAP_MODE_CURRENCY_DEPOSIT

Swaps so cobrados em dinheiro na moeda de


depsito do cliente

SYMBOL_SWAP_MODE_INTEREST_CURRENT

Swaps so cobrados como juro anual


especificado a partir do preo de instrumento no
clculo do swap (ano bancrio padro 360 dias)

SYMBOL_SWAP_MODE_INTEREST_OPEN

Swaps so cobradas como juro anual


especificado a partir do preo de abertura da
posio (ano bancrio padro 360 dias)

SYMBOL_SWAP_MODE_REOPEN_CURRENT

Swaps so cobradas atravs de posies


reabertas Ao final de um dia de negociao a
posio encerrada. No dia seguinte ela
reaberta atravs do preo de fechamento +/um nmero especfico de pontos (parmetros
SYMBOL_SWAP_LONG e SYMBOL_SWAP_SHORT)

2000-2014, MetaQuotes Software Corp.

655

Constantes Padro, Enumeradores e Estruturas


SYMBOL_SWAP_MODE_REOPEN_BID

Swaps so cobradas atravs de posies


reabertas Ao final de um dia de negociao a
posio encerrada. No dia seguinte ela
reaberta atravs do preo de Venda (Bid)
corrente +/- um nmero especfico de pontos
(parmetros
SYMBOL_SWAP_LONG
e
SYMBOL_SWAP_SHORT)

Os valores da enumerao ENUM_DAY_OF_WEEK so usados para especificar dias da semana.


ENUM_DAY_OF_WEEK
Identificador

Descrio

SUNDAY

Domingo

MONDAY

Segunda-feira

TUESDAY

Tera-feira

WEDNESDAY

Quarta-feira

THURSDAY

Quinta-feira

FRIDAY

Sexta-feira

SATURDAY

Sbado

2000-2014, MetaQuotes Software Corp.

656

Constantes Padro, Enumeradores e Estruturas

Propriedades da Conta
Para obter informaes sobre a conta atual existem vrias funes: AccountInfoInteger(),
AccountInfoDouble() e AccountInfoString(). Os valores dos parmetros destas funes podem aceitar
valores das enumeraes de ENUM_ACCOUNT_INFO.
Para a funo AccountInfoInteger()
ENUM_ACCOUNT_INFO_INTEGER
Identificador

Descrio

Tipo

ACCOUNT_LOGIN

Nmero da conta

long

ACCOUNT_TRADE_MODE

Modo de negociao da conta

ENUM_ACCOUNT_TRADE_MODE

ACCOUNT_LEVERAGE

Alavancagem da conta

long

ACCOUNT_LIMIT_ORDERS

Nmero permitido mximo de


ordens pendentes ativas

int

ACCOUNT_MARGIN_SO_MODE

Modo para definir a margem


permitida mnima

ENUM_ACCOUNT_STOPOUT_MO
DE

ACCOUNT_TRADE_ALLOWED

Negociao permitida para a


conta atual

bool

ACCOUNT_TRADE_EXPERT

Negociao permitida para um


Expert Advisor

bool

Para a funo AccountInfoDouble()


ENUM_ACCOUNT_INFO_DOUBLE
Identificador

Descrio

Tipo

ACCOUNT_BALANCE

Saldo da conta na moeda de


depsito

double

ACCOUNT_CREDIT

Crdito da conta na moeda de


depsito

double

ACCOUNT_PROFIT

Lucro atual de uma conta na


moeda de depsito

double

ACCOUNT_EQUITY

Saldo a mercado da conta na


moeda de depsito

double

ACCOUNT_MARGIN

Margem da conta usada na


moeda de depsito

double

ACCOUNT_FREEMARGIN

Margem livre de uma conta na


moeda de depsito

double

ACCOUNT_MARGIN_LEVEL

Nvel de margem de conta em


percentagem

double

ACCOUNT_MARGIN_SO_CALL

Nvel de chamada de margem.

double

2000-2014, MetaQuotes Software Corp.

657

Constantes Padro, Enumeradores e Estruturas


Dependendo
da
definio,
ACCOUNT_MARGIN_SO_MODE
expresso em percentagem ou
em moeda de depsito
ACCOUNT_MARGIN_SO_SO

Nvel de margem de Stop Out


(encerramento
forado).
Dependendo
da
definio,
ACCOUNT_MARGIN_SO_MODE
expresso em percentagem ou
em moeda de depsito

double

Para a funo AccountInfoString()


ENUM_ACCOUNT_INFO_STRING
Identificador

Descrio

Tipo

ACCOUNT_NAME

Nome do cliente

string

ACCOUNT_SERVER

Nome
do
negociao

ACCOUNT_CURRENCY

Moeda da conta

string

ACCOUNT_COMPANY

Nome de uma empresa que


serve a conta

string

servidor

de

string

Existem vrios tipos de contas que podem ser abertos em um servidor de negociao. O tipo de conta
sobre o qual um programa MQL5 est sendo executado pode ser encontrado usando a enumerao
ENUM_ACCOUNT_TRADE_MODE.
ENUM_ACCOUNT_TRADE_MODE
Identificador

Descrio

ACCOUNT_TRADE_MODE_DEMO

Conta de Demonstrao

ACCOUNT_TRADE_MODE_CONTEST

Conta de torneio

ACCOUNT_TRADE_MODE_REAL

Conta real

No caso do saldo a mercado no ser suficiente para manter posies em aberto ocorre a situao de
Stop Out, ou seja o encerramento forado. O nvel de margem mnimo no qual o Stop Out ocorre pode
ser definido em percentagem ou em termos monetrios. Para descobrir a configurao de modo da
conta use a enumerao ENUM_ACCOUNT_STOPOUT_MODE.
ENUM_ACCOUNT_STOPOUT_MODE
Identificador

Descrio

ACCOUNT_STOPOUT_MODE_PERCENT

Modo stop out da conta em percentagem

ACCOUNT_STOPOUT_MODE_MONEY

Modo stop out da conta em dinheiro

Dados do tipo float so exibidos com 5 dgitos aps o ponto decimal.

2000-2014, MetaQuotes Software Corp.

658

Constantes Padro, Enumeradores e Estruturas


//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Nome da empresa
string company=AccountInfoString(ACCOUNT_COMPANY);
//--- Nome do cliente
string name=AccountInfoString(ACCOUNT_NAME);
//--- Nmero da conta
long login=AccountInfoInteger(ACCOUNT_LOGIN);
//--- Nome do servidor
string server=AccountInfoString(ACCOUNT_SERVER);
//--- Moeda da conta
string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- Conta demo, de torneio ou real

ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_M
//--- Agora transforma o valor da enumerao em uma forma inteligvel
string trade_mode;
switch(account_type)
{
case

ACCOUNT_TRADE_MODE_DEMO:

trade_mode="demo";
break;
case

ACCOUNT_TRADE_MODE_CONTEST:

trade_mode="concurso";
break;
default:
trade_mode="real";
break;
}
//--- Stop Out definida em percentagem ou dinheiro

ENUM_ACCOUNT_STOPOUT_MODE stop_out_mode=(ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MA

//--- Obtm os valores dos nveis quando a Chamada de Margem e Stop Out (encerramento forado) ocor
double margin_call=AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL);
double stop_out=AccountInfoDouble(ACCOUNT_MARGIN_SO_SO);
//--- Exibe informaes resumidas sobre a conta
PrintFormat("A conta do do cliente '%s' #%d %s aberta em '%s' no servidor '%s'",
name,login,trade_mode,company,server);
PrintFormat("Moeda da conta - %s, nveis de MarginCall e StopOut so configurados em %s",
currency,(stop_out_mode==ACCOUNT_STOPOUT_MODE_PERCENT)?"porcentagem":" dinheiro");
PrintFormat("MarginCall=%G, StopOut=%G",margin_call,stop_out);
}

2000-2014, MetaQuotes Software Corp.

659

Constantes Padro, Enumeradores e Estruturas

Estatsticas de Teste
Depois que o teste finalizado, diferentes parmetros das estatsticas dos resultados das negociaes
so calculados. Os valores dos parmetros podem ser obtidos usando a funo TesterStatistics(),
atravs da especificao do parmetro ID a partir da enumerao ENUM_STATISTICS.
Embora dois tipo de parmetros (int e double) serem usados nos clculos das estticas, a funo
retorna todos os valores na forma double. Todos os valores estatsticos do tipo double so expressos
na moeda corrente por default, a mesmo que especificado de outro modo.
ENUM_STATISTICS
ID

Descrio do parmetro
estatstico

Tipo

STAT_INITIAL_DEPOSIT

O valor do depsito inicial

double

STAT_WITHDRAWAL

Dinheiro sacado da conta

double

STAT_PROFIT

Lucro lquido aps o teste, a


soma de STAT_GROSS_PROFIT
e
STAT_GROSS_LOSS
(STAT_GROSS_LOSS sempre
menor ou igual a zero)

double

STAT_GROSS_PROFIT

Lucro total, a soma de todas as


negociaes
lucrativas
(positivas). O valor maior ou
igual a zero

double

STAT_GROSS_LOSS

Prejuzo total, a soma de todas


as negociaes negativas. O
valor menor ou igual a zero

double

STAT_MAX_PROFITTRADE

Lucro mximo - o maior valor


dentre todas as negociaes
lucrativas O valor maior ou
igual a zero

double

STAT_MAX_LOSSTRADE

Prejuzo Mximo - o menor


valor
dentre
todos
as
negociaes
(trades)
perdedoras O valor menor ou
igual a zero

double

STAT_CONPROFITMAX

Lucro mximo em uma srie de


negociaes lucrativas. O valor
maior ou igual a zero

double

STAT_CONPROFITMAX_TRADES

O nmero de negociaes que


formaram
oSTAT_CONPROFITMAX(lucro
mximo em uma srie de
negociaes lucrativas)

int

STAT_MAX_CONWINS

O lucro total da mais longa

double

2000-2014, MetaQuotes Software Corp.

660

Constantes Padro, Enumeradores e Estruturas


srie de negociaes lucrativas
STAT_MAX_CONPROFIT_TRADE
S

O nmero de negociaes na
mais
longa
srie
de
negociaes
lucrativasSTAT_MAX_CONWINS

int

STAT_CONLOSSMAX

Prejuzo mximo em uma srie


de negociaes perdedoras. O
valor menor ou igual a zero

double

STAT_CONLOSSMAX_TRADES

O nmero de negociaes
(trades)
que
formaram
oSTAT_CONLOSSMAX(mximo
prejuzo em uma srie de
negociaes perdedoras)

int

STAT_MAX_CONLOSSES

O total de prejuzo da mais


longa srie de negociaes
perdedoras

double

STAT_MAX_CONLOSS_TRADES

O nmero de negociaes na
mais
longa
srie
de
negociaes
perdedoras
STAT_MAX_CONLOSSES

int

STAT_BALANCEMIN

Valor do saldo mnimo

double

STAT_BALANCE_DD

Mxima queda de saldo em


termos monetrios Em um
processo de negociao, um
saldo pode sofrer numerosas
quedas; aqui o maior valor
tomado

double

STAT_BALANCEDD_PERCENT

Queda de saldo como uma


percentagem que foi registrada
no momento da mxima queda
do saldo em termos monetrios
(STAT_BALANCE_DD).

double

STAT_BALANCE_DDREL_PERCE
NT

Mxima queda de saldo com


uma percentagem. Em um
processo de negociao, um
saldo pode sofrer numerosas
quedas, para cada qual a valor
da
queda
relativa
em
percentagem calculada. O
maior valor retornado

double

STAT_BALANCE_DD_RELATIVE

Queda de saldo em termos


monetrios que foi registrada
no momento da mxima queda
do
saldo
como
uma
percentagem

double

2000-2014, MetaQuotes Software Corp.

661

Constantes Padro, Enumeradores e Estruturas


(STAT_BALANCE_DDREL_PERCE
NT).
STAT_EQUITYMIN

Mnimo valor
mercado

do

double

STAT_EQUITY_DD

Mxima queda do saldo a


mercado
em
termos
monetrios. Em um processo
de negociao, numerosas
quedas podem ocorrer no saldo
a mercado; aqui o maior valor
tomado

double

STAT_EQUITYDD_PERCENT

Queda em percentagem que foi


registrada no momento da
mxima queda do saldo a
mercado
em
termos
monetrios
(STAT_EQUITY_DD).

double

STAT_EQUITY_DDREL_PERCENT

Mxima queda do saldo a


mercado
como
uma
percentagem. Em um processo
de negociao, um saldo a
mercado
pode
sofrer
numerosas quedas, para cada
qual o valor da queda relativa
em percentagem calculado. O
maior valor retornado

double

STAT_EQUITY_DD_RELATIVE

Queda do saldo a mercado em


termos monetrios que foi
registrada no momento da
mxima queda do saldo a
mercado
em
percentagem
(STAT_EQUITY_DDREL_PERCEN
T).

double

STAT_EXPECTED_PAYOFF

Recompensa esperada

double

STAT_PROFIT_FACTOR

Fator de lucro, igual a razo


de
STAT_GROSS_PROFIT/
STAT_GROSS_LOSS.
Se
STAT_GROSS_LOSS=0, o fator
de lucro igual aDBL_MAX

double

STAT_RECOVERY_FACTOR

Fator de recuperao, igual a


razo
de
STAT_PROFIT/
STAT_BALANCE_DD

double

STAT_SHARPE_RATIO

Razo Sharpe

double

STAT_MIN_MARGINLEVEL

Valor mnimo
margem

do

saldo

nvel

de

2000-2014, MetaQuotes Software Corp.

double

662

Constantes Padro, Enumeradores e Estruturas


STAT_CUSTOM_ONTESTER

O valor do critrio
de
otimizao
customizado
calculado retornado atravs da
funo OnTester()

double

STAT_DEALS

Nmero de operaes (deals)

int

STAT_TRADES

Nmero
(trades)

negociaes

int

STAT_PROFIT_TRADES

Negociaes
lucrativas

compradas

int

STAT_LOSS_TRADES

Negociaes perdedoras

int

STAT_SHORT_TRADES

Negociaes Vendidas

int

STAT_LONG_TRADES

Negociaes Compradas

int

STAT_PROFIT_SHORTTRADES

Negociaes
lucrativas

vendidas

int

STAT_PROFIT_LONGTRADES

Negociaes
lucrativas

compradas

int

STAT_PROFITTRADES_AVGCON

Comprimento mdio de uma


srie de negociaes lucrativas

int

STAT_LOSSTRADES_AVGCON

Comprimento mdio de uma


srie
de
negociaes
perdedores

int

de

2000-2014, MetaQuotes Software Corp.

663

Constantes Padro, Enumeradores e Estruturas

Constantes de Negociao (Trade)


As vrias constantes usadas para programar estratgias de negociao esto divididas nos seguintes
grupos:
Propriedades de banco de dados de histrico recebimento de informaes gerais sobre um ativo;
Propriedades de ordem obteno de informaes sobre ordens de negociao;
Propriedades de posio obteno de informaes sobre posies correntes;
Propriedades de uma operao (deal) obteno de informaes sobre operaes (deals);
Tipos de operaes de negociao (trade) descrio das operaes de negociao disponveis;
Tipos de transao de negociao - descrio dos possveis tipos de transaes de negociao;
Ordens de negociao no DOM (Profundidade de Mercado) separao de ordens de acordo com a
direo de uma operao solicitada.

2000-2014, MetaQuotes Software Corp.

664

Constantes Padro, Enumeradores e Estruturas

Propriedades de uma Base Histrica de Dados


Ao acessar uma srie de tempo a funo SeriesInfoInteger() usada para obter informaes adicionais
de um ativo (symbol). Um identificador de uma propriedade solicitada passada como parmetro da
funo. O identificar pode ser um dos valores do ENUM_SERIES_INFO_INTEGER.
ENUM_SERIES_INFO_INTEGER
Identificador

Descrio

Tipo

SERIES_BARS_COUNT

Quantidade de barras para o


ativo-perodo para o momento
corrente

long

SERIES_FIRSTDATE

A primeira data para o ativoperodo para o momento


corrente

datetime

SERIES_LASTBAR_DATE

Hora de abertura da ltima


barra do ativo-perodo

datetime

SERIES_SERVER_FIRSTDATE

A primeira data no histrico do


ativo
no
servidor
independentemente da janela
de tempo

datetime

SERIES_TERMINAL_FIRSTDATE

A primeira data no histrico do


ativo no terminal cliente,
independentemente da janela
de tempo

datetime

SERIES_SYNCHRONIZED

Flag de sincronizao de dados


de um ativo/perodo para o
momento corrente

bool

2000-2014, MetaQuotes Software Corp.

665

Constantes Padro, Enumeradores e Estruturas

Propriedades de uma Ordem


As solicitaes para executar operaes de negociao so formalizadas como ordens. Cada ordem
tem uma variedade de propriedades para leitura. As informaes sobre elas podem ser obtidas usando
as funes OrderGet...() e HistoryOrderGet...().
Para as funes OrderGetInteger() e HistoryOrderGetInteger()
ENUM_ORDER_PROPERTY_INTEGER
Identificador

Descrio

Tipo

ORDER_TIME_SETUP

Hora de configurao de uma


ordem

datetime

ORDER_TYPE

Tipo de ordem

ENUM_ORDER_TYPE

ORDER_STATE

Estado de uma ordem

ENUM_ORDER_STATE

ORDER_TIME_EXPIRATION

Hora de expirao de uma


ordem

datetime

ORDER_TIME_DONE

Hora
de
execuo
ou
cancelamento de uma ordem

datetime

ORDER_TIME_SETUP_MSC

O tempo para colocar uma


ordem
de
execuo
em
milissegundos
desde
01.01.1970

long

ORDER_TIME_DONE_MSC

Tempo
de
execuo
e
cancelamento de ordens em
milissegundos
desde
01.01.1970

long

ORDER_TYPE_FILLING

Type de preenchimento de uma


ordem

ENUM_ORDER_TYPE_FILLING

ORDER_TYPE_TIME

tempo de durao de uma


ordem

ENUM_ORDER_TYPE_TIME

ORDER_MAGIC

ID de um Expert Advisor que


colocou a ordem (projetado
para garantir que cada Expert
Advisor coloque seu prprio
nmero nico)

long

ORDER_POSITION_ID

Identificador de posio que


definido para uma ordem to
logo ela executada. Cada
ordem executada resulta em
uma operao que abre ou
modifica uma posio j
existente.
O
identificador
desta exata posio atribuda
ordem executada neste

long

2000-2014, MetaQuotes Software Corp.

666

Constantes Padro, Enumeradores e Estruturas


momento.
Para as funes OrderGetDouble() e HistoryOrderGetDouble()
ENUM_ORDER_PROPERTY_DOUBLE
Identificador

Descrio

Tipo

ORDER_VOLUME_INITIAL

Volume inicial de uma ordem

double

ORDER_VOLUME_CURRENT

Volume corrente de uma ordem

double

ORDER_PRICE_OPEN

Preo especificado na ordem

double

ORDER_SL

Valor de Stop Loss

double

ORDER_TP

Valor de Take Profit

double

ORDER_PRICE_CURRENT

O preo corrente do ativo de


uma ordem

double

ORDER_PRICE_STOPLIMIT

O preo de ordem Limit para


uma ordem StopLimit

double

Para as funes OrderGetString() e HistoryOrderGetString()


ENUM_ORDER_PROPERTY_STRING
Identificador

Descrio

Tipo

ORDER_SYMBOL

Ativo (symbol) de uma ordem

string

ORDER_COMMENT

Comentrio sobre a ordem

string

Ao enviar uma solicitao de negociao usando a funo OrderSend(), algumas operaes requerem a
indicao do tipo da ordem. O tipo de uma ordem especificado no campo type da estrutura especial
MqlTradeRequest, e pode aceitar valores da enumerao ENUM_ORDER_TYPE.
ENUM_ORDER_TYPE
Identificador

Descrio

ORDER_TYPE_BUY

Ordem de Comprar a Mercado

ORDER_TYPE_SELL

Ordem de Vender a Mercado

ORDER_TYPE_BUY_LIMIT

Ordem pendente Buy Limit

ORDER_TYPE_SELL_LIMIT

Ordem pendente Sell Limit

ORDER_TYPE_BUY_STOP

Ordem pendente Buy Stop

ORDER_TYPE_SELL_STOP

Ordem pendente Sell Stop

ORDER_TYPE_BUY_STOP_LIMIT

Ao alcanar o preo da ordem, uma ordem


pendente Buy Limit colocada no preo
StopLimit

2000-2014, MetaQuotes Software Corp.

667

Constantes Padro, Enumeradores e Estruturas


ORDER_TYPE_SELL_STOP_LIMIT

Ao alcanar o preo da ordem, uma ordem


pendente Sell Limit colocada no preo
StopLimit

Cada ordem tem um status que descreve seu estado. Para obter informaes, use OrderGetInteger()
ou HistoryOrderGetInteger() com o modificador ORDER_STATE. Valores permitidos so armazenados
na enumerao ENUM_ORDEM_STATE.
ENUM_ORDER_STATE
Identificador

Descrio

ORDER_STATE_STARTED

Ordem verificada, mas ainda no aceita pela


corretora (broker)

ORDER_STATE_PLACED

Ordem aceita

ORDER_STATE_CANCELED

Ordem cancelada pelo cliente

ORDER_STATE_PARTIAL

Ordem executada parcialmente

ORDER_STATE_FILLED

Ordem executada completamente

ORDER_STATE_REJECTED

Ordem rejeitada

ORDER_STATE_EXPIRED

Ordem expirada

ORDER_STATE_REQUEST_ADD

Ordem est sendo registrada (aplicao para o


sistema de negociao)

ORDER_STATE_REQUEST_MODIFY

Ordem est sendo modificada (alterando seus


parmetros)

ORDER_STATE_REQUEST_CANCEL

Ordem est sendo excluda (excluindo a partir


do sistema de negociao)

Ao enviar uma solicitao de negociao usando a funo OrderSend(), a poltica de preenchimento


pode ser atribuda para uma ordem no campo type_filling da estrutura especial MqlTradeRequest.
Valores da enumerao ENUM_ORDER_TYPE_FILLING so permitidos. Para obter o valor desta
propriedade, usa a funo OrderGetInteger() ou HistoryOrderGetInteger() com o modificador
ORDER_TYPE_FILLING.
ENUM_ORDER_TYPE_FILLING
Identificador
ORDER_FILLING_FOK

Descrio
Esta poltica de preenchimento significa que
uma ordem pode ser preenchida somente na
quantidade especificada. Se a quantidade
desejada do ativo no est disponvel no
mercado, a ordem no ser executada. O
volume requerido pode ser preenchido usando

2000-2014, MetaQuotes Software Corp.

668

Constantes Padro, Enumeradores e Estruturas


vrias ofertas
momento.

disponveis

no mercado no

ORDER_FILLING_IOC

Este modo significa que um negociador concorda


em executar uma operao com o volume
mximo disponvel no mercado conforme
indicado na ordem. No caso do volume integral
de uma ordem no puder ser preenchido, o
volume disponvel dele ser preenchido, e o
volume restante ser cancelado.

ORDER_FILLING_RETURN

Esta poltica usada somente para ordens a


mercado
(ORDER_TYPE_BUY
e
ORDER_TYPE_SELL), ordens limit e stop limit
(ORDER_TYPE_BUY_LIMIT,
ORDER_TYPE_SELL_LIMIT,
ORDER_TYPE_BUY_STOP_LIMIT
e
ORDER_TYPE_SELL_STOP_LIMIT ) e somente
para os ativos com execuo a Mercado ou
execuo em um sistema de negociao externo
(Exchange)***. No caso de um preenchimento
parcial, uma ordem a mercado ou do tipo limit
com volume remanescente no cancelada, mas
processada posteriormente.
Para
a
ativao
das
ordens
ORDER_TYPE_BUY_STOP_LIMIT
e
ORDER_TYPE_SELL_STOP_LIMIT, uma ordem
limit correspondente, ORDER_TYPE_BUY_LIMIT/
ORDER_TYPE_SELL_LIMIT com o tipo de
execuo ORDER_FILLING_RETURN, criada.

O perodo de validade de uma ordem pode ser definida no campo type_time da estrutura especial
MqlTradeRequest ao enviar uma solicitao de negociao usando a funo OrderSend(). Valores da
enumerao ENUM_ORDER_TYPE_TIME enumeration so permitidos. Para obter o valor desta
propriedade use a funo OrderGetInteger() ou HistoryOrderGetInteger() com o modificador
ORDER_TYPE_TIME.
ENUM_ORDER_TYPE_TIME
Identificador

Descrio

ORDER_TIME_GTC

Ordem vlida at cancelamento

ORDER_TIME_DAY

Ordem vlida at o final do dia corrente de


negociao

ORDER_TIME_SPECIFIED

Ordem vlida at expirao

ORDER_TIME_SPECIFIED_DAY

A ordem permanecer efetiva at 00:00 do dia


especificado. Se esta hora est fora de uma
sesso de negociao, a ordem expira na hora
de negociao mais prxima.

2000-2014, MetaQuotes Software Corp.

669

Constantes Padro, Enumeradores e Estruturas

Propriedades de uma Posio


A execuo de operaes de negociao resulta na abertura de uma posio, alterao de seu volume,
e/ou direo, ou no seu desaparecimento . Operaes de negociao so conduzidos baseados em
ordens, enviados pela funo OrderSend() na forma de solicitaes de negociao. Para cada ativo
financeiro (symbol) apenas uma posio em aberto possvel. Uma posio tem um conjunto de
propriedades disponveis para leitura atravs de funes PositionGet...().
Para a funo PositionGetInteger()
ENUM_POSITION_PROPERTY_INTEGER
Identificador

Descrio
abertura

Tipo

POSITION_TIME

Hora de
posio

de

uma

datetime

POSITION_TIME_MSC

Posio de tempo de abertura


em
milissegundos
desde
01.01.1970

long

POSITION_TIME_UPDATE

Posio de tempo de alterao


em segundos desde 01.01.1970

long

POSITION_TIME_UPDATE_MSC

Posio de tempo de alterao


em
milissegundo
desde
01.01.1970

long

POSITION_TYPE

Tipo de posio

ENUM_POSITION_TYPE

POSITION_MAGIC

Nmero mgico de uma posio


(veja ORDER_MAGIC)

long

POSITION_IDENTIFIER

Identificador de posio um
nmero nico que atribudo
para toda nova posio aberta
e no se altera durante todo o
tempo de vida da posio.
Movimentaes de uma posio
no alteram seu identificador.

long

Para a funo PositionGetDouble()


ENUM_POSITION_PROPERTY_DOUBLE
Identificador

Descrio

Tipo

POSITION_VOLUME

Volume de uma posio

double

POSITION_PRICE_OPEN

Preo de abertura de uma


posio

double

POSITION_SL

Nvel de Stop Loss de uma


posio aberta

double

POSITION_TP

Nvel de Take Profit de uma

double

2000-2014, MetaQuotes Software Corp.

670

Constantes Padro, Enumeradores e Estruturas


posio aberta
POSITION_PRICE_CURRENT

Preo corrente do ativo de uma


posio

double

POSITION_COMMISSION

Comisso

double

POSITION_SWAP

Swap acumulativo

double

POSITION_PROFIT

Lucro corrente

double

Para a funo PositionGetString()


ENUM_POSITION_PROPERTY_STRING
Identificador

Descrio

Tipo

POSITION_SYMBOL

Ativo (symbol) da posio

string

POSITION_COMMENT

Comentrio de uma posio

string

A direo de uma posio em aberto (comprada ou vendida) definida atravs do valor proveniente
da enumerao ENUM_POSITION_TYPE. A fim de obter o tipo de uma posio em aberto use a funo
PositionGetInteger() com o modificador POSITION_TYPE.
ENUM_POSITION_TYPE
Identificador

Descrio

POSITION_TYPE_BUY

Compra

POSITION_TYPE_SELL

Venda

2000-2014, MetaQuotes Software Corp.

671

Constantes Padro, Enumeradores e Estruturas

Propriedades de uma Operao (Deal)


Uma operao (deal) o reflexo de uma execuo de uma negociao baseada em uma ordem que
contm uma solicitao de negociao. Cada negociao descrita atravs de propriedades que
permitem obter informaes sobre ela. A fim de ler valores destas propriedades, as funes do tipo
HistoryDealGet...() so usadas, que retornam valores provenientes das enumeraes correspondentes.
Para a funo PlotIndexSetDouble()
ENUM_DEAL_PROPERTY_INTEGER
Identificador

Descrio

Tipo

DEAL_ORDER

Nmero da ordem de uma


operao (deal).

long

DEAL_TIME

Propriedades de uma Operao


(Deal)

datetime

DEAL_TIME_MSC

O tempo de execuo de
negociaes em milissegundos
desde 01.01.1970

long

DEAL_TYPE

Tipo de operao

ENUM_DEAL_TYPE

DEAL_ENTRY

Entrada de uma operao entrada, sada, reverso

ENUM_DEAL_ENTRY

DEAL_MAGIC

Nmero
mgico
de uma
operao (veja ORDER_MAGIC)

long

DEAL_POSITION_ID

Identificador de uma posio,


na abertura, modificao ou
alterao da qual esta operao
(deal) tomou parte. Cada
posio tem um identificador
nico que atribudo a todas
as
operaes
(deals)
executadas para o ativo
durante todo o tempo de vida
da posio.

long

Para a funo HistoryDealGetDouble()


ENUM_DEAL_PROPERTY_DOUBLE
Identificador

Descrio

Tipo

DEAL_VOLUME

Volume de uma operao

double

DEAL_PRICE

Preo de uma operao

double

DEAL_COMMISSION

Comisso de uma operao

double

DEAL_SWAP

Swap
acumulativo
fechamento

no

2000-2014, MetaQuotes Software Corp.

double

672

Constantes Padro, Enumeradores e Estruturas


DEAL_PROFIT

Lucro de uma operao (deal)

double

Para a funo HistoryDealGetString()


ENUM_DEAL_PROPERTY_STRING
Identificador

Descrio

Tipo

DEAL_SYMBOL

Ativo
(symbol)
operao

de

uma

DEAL_COMMENT

Comentrio de uma operao

string

string

Cada operao (deal) caracterizada por um tipo, cujos valores permitidos so enumerados em
ENUM_DEAL_TYPE. A fim de obter informaes sobre o tipo da operao (deal), use a funo
HistoryDealGetInteger() com o modificador DEAL_TYPE.
ENUM_DEAL_TYPE
Identificador

Descrio

DEAL_TYPE_BUY

Compra

DEAL_TYPE_SELL

Venda

DEAL_TYPE_BALANCE

Saldo

DEAL_TYPE_CREDIT

Crdito

DEAL_TYPE_CHARGE

Cobrana adicional

DEAL_TYPE_CORRECTION

Correo

DEAL_TYPE_BONUS

Bonus

DEAL_TYPE_COMMISSION

Comisso adicional

DEAL_TYPE_COMMISSION_DAILY

Comisso diria

DEAL_TYPE_COMMISSION_MONTHLY

Comisso mensal

DEAL_TYPE_COMMISSION_AGENT_DAILY

Comisso de agente dirio

DEAL_TYPE_COMMISSION_AGENT_MONTHLY

Comisso de agente mensal

DEAL_TYPE_INTEREST

Taxa de juros

DEAL_TYPE_BUY_CANCELED

Operao de compra cancelada. Pode haver uma


situao quando uma operao (deal) de compra
executada anteriormente cancelada. Neste
caso, o
tipo
da
operao
executada
anteriormente (DEAL_TYPE_BUY) alterada
para DEAL_TYPE_BUY_CANCELED, e seu lucro/
prejuzo zerado Lucro/prejuzo obtido
anteriormente cobrado/sacado usando uma
operao de saldo separada

2000-2014, MetaQuotes Software Corp.

673

Constantes Padro, Enumeradores e Estruturas


DEAL_TYPE_SELL_CANCELED

Operao de venda cancelada. Pode haver uma


situao quando uma operao (deal) de venda
executada anteriormente cancelada. Neste
caso, o
tipo
da
operao
executada
anteriormente (DEAL_TYPE_SELL) alterada
para DEAL_TYPE_SELL_CANCELED, e seu lucro/
prejuzo zerado. Lucro/prejuzo obtido
anteriormente cobrado/sacado usando uma
operao de saldo separada

As operaes (deal) diferem entre si no somente no seu conjunto de tipos em ENUM_DEAL_TYPE, mas
tambm na forma como elas alteram posies. Isto pode ser uma simples abertura de posio, ou
acumulao de uma posio aberta anteriormente (entrada de mercado), encerramento de posio
atravs de uma operao oposta no volume correspondente (sada de mercado), ou reverso de
posio, se a operao em direo oposta cobrir o volume da posio aberta anteriormente.
Todas estas situaes so descritas pelos valores provenientes da enumerao ENUM_DEAL_ENTRY. A
fim de receber esta informao sobre um operao, use a funo HistoryDealGetInteger() com o
modificador DEAL_ENTRY.
ENUM_DEAL_ENTRY
Identificador

Descrio

DEAL_ENTRY_IN

Entrada

DEAL_ENTRY_OUT

Sada

DEAL_ENTRY_INOUT
DEAL_ENTRY_STATE

Reverso
Registro de status

2000-2014, MetaQuotes Software Corp.

674

Constantes Padro, Enumeradores e Estruturas

Tipos de Operaes de Negociao (Trade)


A negociao feita atravs do envio de ordens para abrir posies usando a funo OrderSend(),
bem como colocar, modificar ou excluir ordens pendentes. Cada ordem de negociao refere-se a um
tipo de operao solicitada. Operaes de negociao so descritas na enumerao
ENUM_TRADE_REQUEST_ACTIONS.
ENUM_TRADE_REQUEST_ACTIONS
Identificador

Descrio

TRADE_ACTION_DEAL

Coloca um ordem de negociao para execuo


imediata com os parmetros especficos (ordem
a mercado)

TRADE_ACTION_PENDING

Coloca um ordem de negociao para execuo


sob condies especficas (ordem pendente)

TRADE_ACTION_SLTP

Modifica valores de Stop Loss e Take Profit de


uma posio em aberto

TRADE_ACTION_MODIFY

Modifca os parmetros de uma ordem coloca


anteriormente

TRADE_ACTION_REMOVE

Exclui
uma
anteriormente

2000-2014, MetaQuotes Software Corp.

ordem

pendente

colocada

675

Constantes Padro, Enumeradores e Estruturas

Tipos de Transao de Negociao


Ao realizar algumas aes especficas em uma conta de negociao, seu estado muda. Tais aes
includem:
Envio de uma solicitao de negociao a partir de algum aplicativo MQL5 no terminal usando as
funes OrderSend e OrderSendAsync e sua posterior execuo.
Envio de uma solicitao de negociao por meio da interface grfica do terminal e sua posterior
execuo.
Ativao de ordens pendentes e ordens de stop no servidor.
Realizao de operaes no lado de um servidor de negociao.
As seguintes transaes de negociao so realizadas como resultado destas aes:
tratamento de uma solicitao de negociao
mudana de ordens de abertura
mudana de histrico de ordens
mudana de histrico de operaes (deals)
mudana de posies
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal) adicionada
ao histrico e uma nova posio criada. Todas estas aes so transaes de negociao.
Para deixar um programador rastrear as aes realizadas em relao a uma conta de negociao, a
funo OnTradeTransaction foi fornecida. Este handler permite obter transaes de negociao
aplicadas a uma conta em aplicaes MQL5 A descrio de uma transao de negociao submetida
no primeiro parmetro de OnTradeTransation usando a estrutura MqlTradeTransaction.
O tipo de transao de negociao submetida no parmetro de tipo de estrutura
MqlTradeTransaction. Os possveis tipos de transaes de negociao so descritos atravs da
seguinte enumerao:
ENUM_TRADE_TRANSACTION_TYPE
Identificador

Descrio

TRADE_TRANSACTION_ORDER_ADD

Adio de uma nova ordem de abertura.

TRADE_TRANSACTION_ORDER_UPDATE

Atualizao de uma ordem de aberturar. As


atualizaes incluem no somente mudanas
evidentes provenientes do terminal cliente ou do
lado de um servidor de negociao, mas
tambm alteraes de estado de uma ordem ao
configur-lo (por exemplo, transio de
ORDER_STATE_STARTED
para
ORDER_STATE_PLACED
ou
de
ORDER_STATE_PLACED
para
ORDER_STATE_PARTIAL, etc.).

TRADE_TRANSACTION_ORDER_DELETE

Remoo de uma ordem da lista de ordens em

2000-2014, MetaQuotes Software Corp.

676

Constantes Padro, Enumeradores e Estruturas


aberto. Uma ordem pode ser excluda da lista de
ordens em aberto como resultado da
configurao de um solicitao apropriada ou
execuo (preenchimento) ou movimentao
para o histrico.
TRADE_TRANSACTION_DEAL_ADD

Adio de uma operao (deal) para o histrico.


A ao realizada como resultado de uma
execuo de uma ordem ou realizao de
operaes com o saldo da conta.

TRADE_TRANSACTION_DEAL_UPDATE

Atualizao de uma operao (deal) no histrico.


Pode haver caso quando uma operao (deal)
executada previamente alterada em um
servidor. Por exemplo, uma operao (deal) foi
alterada em um sistema de negociao externo
(exchange)
onde
ela
foi
transferida
anteriormente por uma corretora (broker).

TRADE_TRANSACTION_DEAL_DELETE

Excluso de uma operao (deal) do histrico.


Pode haver casos quando uma operao (deal)
executada anteriormente excluda de um
servidor. Por exemplo, uma operao (deal) foi
excluda de um sistema de negociao externo
(exchange)
onde
ela
foi
transferida
anteriormente por uma corretora (broker).

TRADE_TRANSACTION_HISTORY_ADD

Adio de uma ordem no histrico como


resultado de uma execuo ou cancelamento.

TRADE_TRANSACTION_HISTORY_UPDATE

Alterao de uma ordem localizada no histrico


de ordens. Este tipo fornecido para aumentar
a funcionalidade no lado de um servidor de
negociao.

TRADE_TRANSACTION_HISTORY_DELETE

Excluso de uma ordem do histrico de ordens.


Este tipo fornecido para aumentar a
funcionalidade no lado de um servidor de
negociao.

TRADE_TRANSACTION_POSITION

Alterao de uma posio no relacionada com a


execuo de uma operao (deal). Este tipo de
transao mostra que uma posio foi alterada
pelo lado de um servidor de negociao. O
volume de uma posio, o preo de abertura, os
nveis de Stop Loss e Take Profit podem ter sido
alterados. Dados sobre alterao so submetidos
na estrutura MqlTradeTransaction via o handler
OnTradeTransaction. Alteraes de posio
(adio, alterao ou encerramento), como
resultado de uma execuo de operao (deal),
no levam a ocorrncia de uma transao
TRADE_TRANSACTION_POSITION.

2000-2014, MetaQuotes Software Corp.

677

Constantes Padro, Enumeradores e Estruturas


TRADE_TRANSACTION_REQUEST

Notificao do fato de que uma solicitao de


negociao foi processada por um servidor e o
resultado processado foi recebido. Apenas o
campo type (tipo de transao de negociao)
deve ser analisado em tais transaes na
estrutura MqlTradeTransaction. O segundo e
terceiro parmetros de OnTradeTransaction
(request e result) devem ser analisados para
dados adicionais.

Dependendo do tipo da transao de negociao, vrios parmetros so preenchidos na estrutura


MqlTradeTransaction, descrevendo-a. Uma descrio detalhada dos dados submetidos mostrada em
Estrutura de uma Transao de Negociao.
Tambm Veja
Estrutura de uma Transao de Negociao, OnTradeTransaction

2000-2014, MetaQuotes Software Corp.

678

Constantes Padro, Enumeradores e Estruturas

Ordens de Negociao na Profundidade de Mercado


Para aes, a janela Profundidade de Mercado disponvel, onde voc pode ver as ordens de Compra e
Venda correntes. A direo desejada de uma operao de negociao, a quantidade requerida e o
preo solicitado so especificados em cada ordem.
Para obter informaes sobre o estado corrente do DOM por meio de MQL5, a funo MarketBookGet()
usada, que coloca uma "fotografia instantnea" do DOM no array de estruturas MqlBookInfo. Cada
elemento do array no campo type contm informaes sobre a direo da ordem - o valor da
enumerao ENUM_BOOK_TYPE.
ENUM_BOOK_TYPE
Identificador

Descrio

BOOK_TYPE_SELL

Ordem de venda (Offer)

BOOK_TYPE_BUY

Ordem de compra (Bid)

BOOK_TYPE_SELL_MARKET

Ordem de venda (Offer)

BOOK_TYPE_BUY_MARKET

Ordem de venda (Offer)

Tambm Veja
Estruturas e classes, Estruturas do DOM, Tipos de operaes de negociao, Informaes de
Mercado

2000-2014, MetaQuotes Software Corp.

679

Constantes Padro, Enumeradores e Estruturas

Constantes Nomeados
Todas as constantes usadas em MQL5 podem ser divididas nos seguintes grupos:
Substituies macro predefinidas valores so substitudos durante compilao;
Constantes matemticas valores de algumas expresses matemticas;
Constantes de tipo numrico algumas restries de tipo simples;
Cdigos de motivos de Desinicializao descrio de motivos de no inicializao;
Verificao de Ponteiro de Objeto enumerao dos tipos de ponteiros retornados pela funo
CheckPointer();
Outras constantes todas as outras constantes.

2000-2014, MetaQuotes Software Corp.

680

Constantes Padro, Enumeradores e Estruturas

Substituies de Macro Predefinidas


Para simplificar o processo de depurao e obter informaes sobre a operao de um programa-mql5,
existem constantes de macro especiais, valores que so definidos no momento da compilao. A
forma mais fcil de usar estas constantes imprimir estes valores atravs da funo Print(), como
mostrado no exemplo.
Constante

Descrio

__DATE__

Data de compilao do arquivo sem a hora


(horas, minutos e segundos so iguais a 0)

__DATETIME__

Data e hora de compilao do arquivo

__LINE__

Assinatura da funo em cujo corpo a macro


est localizada.

__FILE__

Nome do arquivo compilado corrente

__PATH__

O caminho absoluto para o arquivo que est


sendo compilado correntemente

__FUNCTION__

Nome da funo, em cujo corpo a macro est


localizada

__FUNCSIG__

Assinatura da funo em cujo corpo a macro


est localizada. O registro da descrio
completa de funes pode ser til na
identificao de funes sobrecarregadas

__MQLBUILD__, __MQL5BUILD__

Nmero do compilao

Exemplo:
#property copyright "Copyright 2009, MetaQuotes Software Corp."
#property link

"http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
void OnInit()
{
//--- um exemplo de impresso de informao na inicializao de um Expert Advisor
Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__);

//--- define o intervalo entre os eventos timer


EventSetTimer(5);
//--}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- um exemplo de impresso de informao na desinicializao de um Expert Advisor

2000-2014, MetaQuotes Software Corp.

681

Constantes Padro, Enumeradores e Estruturas


Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__);

//--}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--- impresso de informao no recebimento de um tick
Print(" __MQLBUILD__ = ",__MQLBUILD__,"

__FILE__ = ",__FILE__);

Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__);

test1(__FUNCTION__);
test2();
//--}
//+------------------------------------------------------------------+
//| test1

//+------------------------------------------------------------------+
void test1(string par)
{
//--- impresso de informao dentro da funo
Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__," par = ",par);

}
//+------------------------------------------------------------------+
//| test2

//+------------------------------------------------------------------+
void test2()
{
//--- impresso de informao dentro da funo
Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__);

}
//+------------------------------------------------------------------+
//| OnTimer event handler

//+------------------------------------------------------------------+
void OnTimer()
{
//--Print(" __FUNCTION__ = ",__FUNCTION__,"

__LINE__ = ",__LINE__);

test1(__FUNCTION__);
}

2000-2014, MetaQuotes Software Corp.

682

Constantes Padro, Enumeradores e Estruturas

Constantes Matemticas
Constantes especiais contendo valores que so reservados para algumas expresses matemticas.
Estas constantes podem ser usadas em qualquer lugar no programa ao invs de calcular seus valores
usando funes matemticas.
Constante

Descrio

Valor

M_E

2.71828182845904523536

M_LOG2E

log2(e)

1.44269504088896340736

M_LOG10E

log10(e)

0.434294481903251827651

M_LN2

ln(2)

0.693147180559945309417

M_LN10

ln(10)

2.30258509299404568402

M_PI

pi

3.14159265358979323846

M_PI_2

pi/2

1.57079632679489661923

M_PI_4

pi/4

0.785398163397448309616

M_1_PI

1/pi

0.318309886183790671538

M_2_PI

2/pi

0.636619772367581343076

M_2_SQRTPI

2/sqrt(pi)

1.12837916709551257390

M_SQRT2

sqrt(2)

1.41421356237309504880

M_SQRT1_2

1/sqrt(2)

0.707106781186547524401

Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- imprime os valores das constantes
Print("M_E = ",DoubleToString(M_E,16));
Print("M_LOG2E = ",DoubleToString(M_LOG2E,16));
Print("M_LOG10E = ",DoubleToString(M_LOG10E,16));
Print("M_LN2 = ",DoubleToString(M_LN2,16));
Print("M_LN10 = ",DoubleToString(M_LN10,16));
Print("M_PI = ",DoubleToString(M_PI,16));
Print("M_PI_2 = ",DoubleToString(M_PI_2,16));
Print("M_PI_4 = ",DoubleToString(M_PI_4,16));
Print("M_1_PI = ",DoubleToString(M_1_PI,16));
Print("M_2_PI = ",DoubleToString(M_2_PI,16));
Print("M_2_SQRTPI = ",DoubleToString(M_2_SQRTPI,16));
Print("M_SQRT2 = ",DoubleToString(M_SQRT2,16));
Print("M_SQRT1_2 = ",DoubleToString(M_SQRT1_2,16));

2000-2014, MetaQuotes Software Corp.

683

Constantes Padro, Enumeradores e Estruturas


}

2000-2014, MetaQuotes Software Corp.

684

Constantes Padro, Enumeradores e Estruturas

Constantes de Tipo Numrico


Cada tipo numrico simples destinado para um certo tipo de tarefa e permite otimizar a operao de
um programa-mql5 quando usado corretamente. Para uma melhor legibilidade de cdigo e correto
manejo dos resultados de clculos, existem constantes que permitem receber informaes sobre um
conjunto de restries definido a um certo tipo de dados simples.
Constante

Descrio

Valor

CHAR_MIN

Valor mnimo, que pode ser


representado pelo tipo char

-128

CHAR_MAX

Valor mximo, que pode ser


representado pelo tipo char

127

UCHAR_MAX

Valor mximo, que pode ser


representado pelo tipo uchar

255

SHORT_MIN

Valor mnimo, que pode ser


representado pelo tipo short

-32768

SHORT_MAX

Valor mximo, que pode ser


representado pelo tipo short

32767

USHORT_MAX

Valor mximo, que pode ser


representado pelo tipo ushort

65535

INT_MIN

Valor mnimo, que pode ser


representado pelo tipo int

-2147483648

INT_MAX

Valor mximo, que pode ser


representado pelo tipo int

2147483647

UINT_MAX

Valor mximo, que pode ser


representado pelo tipo uint

4294967295

LONG_MIN

Valor mnimo, que pode ser


representado pelo tipo long

-9223372036854775808

LONG_MAX

Valor mximo, que pode ser


representado pelo tipo long

9223372036854775807

ULONG_MAX

Valor mximo, que pode ser


representado pelo tipo ulong

18446744073709551615

DBL_MIN

Valor positivo mnimo, que


pode ser representado pelo
tipo double

2.2250738585072014e-308

DBL_MAX

Valor mximo, que pode ser


representado pelo tipo double

1.7976931348623158e+308

DBL_EPSILON

Valor mnimo, que satisfaz a


condio:
1.0+DBL_EPSILON != 1.0 (para
o tipo double)

2.2204460492503131e-016

DBL_DIG

Nmero

15

de

algarismos

2000-2014, MetaQuotes Software Corp.

685

Constantes Padro, Enumeradores e Estruturas


decimais significativos para o
tipo double
DBL_MANT_DIG

Quantidade de bits em uma


mantissa para o tipo double

53

DBL_MAX_10_EXP

Valor decimal mximo de grau


de expoente para o tipo double

308

DBL_MAX_EXP

Valor binrio mximo de grau


de expoente para o tipo double

1024

DBL_MIN_10_EXP

Valor decimal mnimo de grau


de expoente para o tipo double

(-307)

DBL_MIN_EXP

Valor binrio mnimo de grau


de expoente para o tipo double

(-1021)

FLT_MIN

Valor positivo mnimo, que


pode ser representado pelo
tipo float

1.175494351e-38

FLT_MAX

Valor mximo, que pode ser


representado pelo tipo float

3.402823466e+38

FLT_EPSILON

Valor mnimo, que satisfaz a


condio:
1.0+DBL_EPSILON != 1.0 (para
o tipo float)

1.192092896e07

FLT_DIG

Nmero
de
algarismos
decimais significativos para o
tipo float

FLT_MANT_DIG

Quantidade de bits em uma


mantissa para o tipo float

24

FLT_MAX_10_EXP

Valor decimal mximo de grau


de expoente para o tipo float

38

FLT_MAX_EXP

Valor binrio mximo de grau


de expoente para o tipo float

128

FLT_MIN_10_EXP

Valor decimal mnimo de grau


de expoente para o tipo float

-37

FLT_MIN_EXP

Valor binrio mnimo de grau


de expoente para o tipo float

(-125)

Exemplo:
void OnStart()
{
//--- imprime os valores de constantes
printf("CHAR_MIN = %d",CHAR_MIN);
printf("CHAR_MAX = %d",CHAR_MAX);
printf("UCHAR_MAX = %d",UCHAR_MAX);

2000-2014, MetaQuotes Software Corp.

686

Constantes Padro, Enumeradores e Estruturas


printf("SHORT_MIN = %d",SHORT_MIN);
printf("SHORT_MAX = %d",SHORT_MAX);
printf("USHORT_MAX = %d",USHORT_MAX);
printf("INT_MIN = %d",INT_MIN);
printf("INT_MAX = %d",INT_MAX);
printf("UINT_MAX = %u",UINT_MAX);
printf("LONG_MIN = %I64d",LONG_MIN);
printf("LONG_MAX = %I64d",LONG_MAX);
printf("ULONG_MAX = %I64u",ULONG_MAX);
printf("EMPTY_VALUE = %.16e",EMPTY_VALUE);
printf("DBL_MIN = %.16e",DBL_MIN);
printf("DBL_MAX = %.16e",DBL_MAX);
printf("DBL_EPSILON = %.16e",DBL_EPSILON);
printf("DBL_DIG = %d",DBL_DIG);
printf("DBL_MANT_DIG = %d",DBL_MANT_DIG);
printf("DBL_MAX_10_EXP =

%d",DBL_MAX_10_EXP);

printf("DBL_MAX_EXP = %d",DBL_MAX_EXP);
printf("DBL_MIN_10_EXP = %d",DBL_MIN_10_EXP);
printf("DBL_MIN_EXP = %d",DBL_MIN_EXP);
printf("FLT_MIN = %.8e",FLT_MIN);
printf("FLT_MAX = %.8e",FLT_MAX);
printf("FLT_EPSILON = %.8e",FLT_EPSILON);
}

2000-2014, MetaQuotes Software Corp.

687

Constantes Padro, Enumeradores e Estruturas

Cdigos de Motivos de Desinicializao


Uninitialization reason codes are returned by the UninitializeReason() function. The possible values are
the following:
Constante

Value

Description

REASON_PROGRAM

Expert Advisor terminated its


operation by calling the
ExpertRemove() function

REASON_REMOVE

Program has been


from the chart

REASON_RECOMPILE

Program has been recompiled

REASON_CHARTCHANGE

Symbol or chart period has


been changed

REASON_CHARTCLOSE

Chart has been closed

REASON_PARAMETERS

Input parameters have been


changed by a user

REASON_ACCOUNT

Another account has been


activated or reconnection to
the trade server has occurred
due to changes in the account
settings

REASON_TEMPLATE

A new template has


applied

REASON_INITFAILED

This value means that OnInit()


handler has returned a nonzero
value

REASON_CLOSE

Terminal has been closed

deleted

been

The uninitialization reason code is also passed as a parameter of the predetermined function
OnDeinit(const int reason).
Exemplo:
//+------------------------------------------------------------------+
//| get text description

//+------------------------------------------------------------------+
string getUninitReasonText(int reasonCode)
{
string text="";
//--switch(reasonCode)
{
case REASON_ACCOUNT:
text="Account was changed";break;

2000-2014, MetaQuotes Software Corp.

688

Constantes Padro, Enumeradores e Estruturas


case REASON_CHARTCHANGE:
text="Symbol or timeframe was changed";break;
case REASON_CHARTCLOSE:
text="Chart was closed";break;
case REASON_PARAMETERS:
text="Input-parameter was changed";break;
case REASON_RECOMPILE:
text="Program "+__FILE__+" was recompiled";break;
case REASON_REMOVE:
text="Program "+__FILE__+" was removed from chart";break;
case REASON_TEMPLATE:
text="New template was applied to chart";break;
default:text="Another reason";
}
//--return text;
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- The first way to get the uninitialization reason code
Print(__FUNCTION__,"_Uninitalization reason code = ",reason);
//--- The second way to get the uninitialization reason code
Print(__FUNCTION__,"_UninitReason = ",getUninitReasonText(_UninitReason));
}

2000-2014, MetaQuotes Software Corp.

689

Constantes Padro, Enumeradores e Estruturas

Verificao de Ponteiro de Objeto


A funo CheckPointer() usado para verificar o tipo do ponteiro de objeto. A funo retorna um valor
da enumerao ENUM_POINTER_TYPE. Caso um ponteiro incorreto seja usado, a execuo do
programa ser imediatamente finalizada.
Objetos criados por meio do operador new() so do tipo POINTER_DYNAMIC. O operador delete() pode
e deve ser usado somente para tais ponteiros.
Todos os outros ponteiros so do tipo POINTER_AUTOMATIC, que significa que este objeto foi criado
automaticamente pelo ambiente do programa mql5. Tais objetos so excludos automaticamente aps
serem usados.
ENUM_POINTER_TYPE
Constante

Descrio

POINTER_INVALID

Ponteiro incorreto

POINTER_DYNAMIC

Ponteiro do objeto criado por meio do operador


new()

POINTER_AUTOMATIC

Ponteiro
de
qualquer
objeto
automaticamente (sem usar new())

Tambm Veja
Erros em Tempo de Execuo, Excluso de Objeto Operador delete, CheckPointer

2000-2014, MetaQuotes Software Corp.

criado

690

Constantes Padro, Enumeradores e Estruturas

Outras Constantes
A constante CLR_NONE usada para indicar a ausncia de cor, ela significa que o objeto grfico ou a
srie grfica de um indicador no sero plotados. Esta constante no foi includa na lista de
constantes Web-color, mas ela pode ser aplicada em todo lugar onde os argumentos de cor forem
requeridos.
A constante INVALID_HANDLE pode ser usada para verificar handles de arquivo (veja FileOpen() e
FileFindFirst()).
Constante

Descrio

Valor

CHARTS_MAX

O nmero possvel mximo de


grficos
abertos
simultaneamente
em
um
terminal

100

clrNONE

Ausncia de cor

-1

EMPTY_VALUE

Valor vazio em um buffer de


indicador

DBL_MAX

INVALID_HANDLE

Manipulador incorreto

-1

IS_DEBUG_MODE

Flag que indica que


programa MQL5 opera
modo de depurao

um
em

no-zero para
modo
de
depurao, zero caso contrrio

IS_PROFILE_MODE

Flag que indica que


programa MQL5 opera
modo de profiling

um
em

no-zero para
modo
de
profiling, zero caso contrrio

NULL

Zero para quaisquer tipos

WHOLE_ARRAY

Significa o nmero de itens


restantes at o final do array,
isto , o array inteiro ser
processado

-1

WRONG_VALUE

A
constante
pode
ser
implicitamente
convertido
para
qualquer
tipo
de
enumerao

-1

A constante EMPTY_VALUE geralmente corresponde aos valores de indicadores que no so exibidos no


grfico. Por exemplo, para o indicador incorporado Desvio Padro (Standard Deviation) com um
perodo de 20, a linha para as primeiras 19 barras no histrico no exibida no grfico. Se voc criar
um handle deste indicador com a funo iStdDev() e copiar os valores do indicador destas barras para
um array atravs de CopyBuffer(), ento estes valores sero iguais a EMPTY_VALUE.
Voc pode escolher especificar em um indicador customizado seus prprios valores vazios, indicando
quando o indicador no deve ser desenhado no grfico. Use a funo PlotIndexSetDouble() com a
modificador PLOT_EMPTY_VALUE.
A constante NULL pode ser atribudo a uma varivel de qualquer tipo simples ou a um objeto,

2000-2014, MetaQuotes Software Corp.

691

Constantes Padro, Enumeradores e Estruturas


estrutura ou ponteiro de classe. A atribuio NULL a uma varivel string significa a completa
desinicializao desta varivel.
A constante WRONG_VALUE destinada para casos em que necessrio retornar valor de uma
enumerao, e ela deve ser um valor errado. Por exemplo, quando ns precisamos informar que um
valor de retorno um valor proveniente desta enumerao. Vamos considerar como um exemplo a
funo CheckLineStyle(), que retorna o estilo de linha para um objeto, especificado seu nome. Se na
verificao de estilo por ObjectGetInteger() o resultado for true, um valor proveniente de
ENUM_LINE_STYLE retornado; caso contrrio WRONG_VALUE retornado.
void OnStart()
{
if(CheckLineStyle("MyChartObject")==WRONG_VALUE)
printf("Erro ao obter estilo de linha.");
}
//+------------------------------------------------------------------+
//| retorna o estilo de linha para um obj. espec. atrves de seu nome|
//+------------------------------------------------------------------+
ENUM_LINE_STYLE CheckLineStyle(string name)
{
long style;
//--if(ObjectGetInteger(0,name,OBJPROP_STYLE,0,style))
return((ENUM_LINE_STYLE)style);
else
return(WRONG_VALUE);
}

A constante WHOLE_ARRAY destinada para funes que requerem especificar o nmero de


elementos nos arrays processados:
ArrayCopy();
ArrayMinimum();
ArrayMaximum();
FileReadArray();
FileWriteArray().
Se voc quiser especificar que todos os valores do array a partir de uma posio especificada at o
final devem ser processados, voc deve especificar apenas o valor WHOLE_ARRAY.
A constante IS_PROFILE_MODE permite alterar uma operao de programa para correta coleta de
dados no modo de profiling. Profiling permite medir o tempo de execuo de fragmentos individuais
do programa (geralmente abrangendo funes), bem como calcular o nmero de tais chamadas.
Chamadas a funo Sleep() podem ser desabilitadas para determinar o tempo de execuo no modo de
profiling, como neste exemplo:
//--- Sleep pode afetar (alterar) enormemente o resultado do profiling
if(!IS_PROFILE_MODE) Sleep(100); // desabilita a chamada Sleep() no modo de profiling

O valor da constante IS_PROFILE_MODE definida pelo compilador durante a compilao, enquanto

2000-2014, MetaQuotes Software Corp.

692

Constantes Padro, Enumeradores e Estruturas


que ela definida para zero no modo convencional. Ao iniciar um programa no modo de profiling, uma
compilao especial realizada e IS_PROFILE_MODE substituda com um valor no-zero.
A constante IS_DEBUG_MODE pode ser til quando se precisar alterar levemente a operao de um
programa MQL5 no modo de depurao. Por exemplo, no modo de depurao voc pode precisar exibir
informaes de depurao adicionais no log do terminal ou criar objetos grficos adicionais em um
grfico.
O seguinte exemplo cria um objeto Label e define sua descrio e cor dependendo do modo de
execuo do script. A fim de executar um script em modo de depurao a partir do MetaEditor,
pressione F5. Se voc executar um script a partir da janela de navegao do terminal, ento a cor e o
texto do objeto Label sero diferentes.
Exemplo:
//+------------------------------------------------------------------+
//|

Check_DEBUG_MODE.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.metaquotes.net |

//+------------------------------------------------------------------+
#property copyright "Copyright 2009, MetaQuotes Software Corp."
#property link

"http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--string label_name="invisible_label";
if(ObjectFind(0,label_name)<0)
{
Print("Objeto",label_name,"no encontrado. Cdigo de erro = ",GetLastError());
//--- cria um Rtulo (Label)
ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);
//--- define coordenada X
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
//--- define coordenada Y
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
ResetLastError();
if(IS_DEBUG_MODE) // modo de depurao
{
//--- exibe mensagem sobre o modo de execuo do script
ObjectSetString(0,label_name,OBJPROP_TEXT,"DEBUG MODE");
//--- defini a cor de texto para vermelho
if(!ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrRed))
Print("No possvel definir a cor. Error",GetLastError());
}
else

// modo de operao

{
ObjectSetString(0,label_name,OBJPROP_TEXT,"RELEASE MODE");

2000-2014, MetaQuotes Software Corp.

693

Constantes Padro, Enumeradores e Estruturas


//--- defini a cor de texto para vermelho
if(!ObjectSetInteger(0,label_name,OBJPROP_COLOR,CLR_NONE))
Print("No possvel definir a cor. Error ",GetLastError());
}
ChartRedraw();
DebugBreak();

// aqui finalizao ocorrer, se ns estivermos em modo de depurao

}
}

Tambm Veja
DebugBreak, Propriedades de programas MQL5 executados

2000-2014, MetaQuotes Software Corp.

694

Constantes Padro, Enumeradores e Estruturas

Estruturas de Dados
A linguagem MQL5 oferece 8 estruturas predefinidas:
MqlDateTime destinado para trabalhar com data e hora;
MqlParam pode enviar parmetros de entrada quando criar um indicador usando a funo
IndicatorCreate();
MqlRates destinado para manipular dados histricos, ela contm informaes sobre o preo,
volume e spread;
MqlBookInfo destinado para obter informaes sobre a Profundidade de Mercado;
MqlTradeRequest usado para criar uma solicitao de negociao para operaes de negociao;
MqlTradeResult contm uma resposta do servidor de negociao a uma solicitao de negcio,
enviado via funo OrderSend();
MqlTradeTransaction contm a descrio de uma transao de negociao;
MqlTick projetado para recuperao rpida da maioria das informaes requeridas sobre os preos
correntes.

2000-2014, MetaQuotes Software Corp.

695

Constantes Padro, Enumeradores e Estruturas

MqlDateTime
A estrutura de tipo data contm oito campos do tipo int:
struct MqlDateTime
{
int year;

// Ano

int mon;

// Ms

int day;

// Dia

int hour;

// Hora

int min;

// Minutos

int sec;

// Segundos

int day_of_week;

// Dia da semana (0-domingo, 1-segunda, ... ,6-sbado)

int day_of_year;

// Nmero do dia do ano (1 de Janeiro atribudo o valor 0)

};

Observao
O nmero do dia do ano, day_of_year, para ano bissexto, a partir de maro, diferir do nmero do
dia correspondente a um ano no bissexto.
Exemplo:
void OnStart()
{
//--datetime date1=D'2008.03.01';
datetime date2=D'2009.03.01';
MqlDateTime str1,str2;
TimeToStruct(date1,str1);
TimeToStruct(date2,str2);
printf("%02d.%02d.%4d, day of year = %d",str1.day,str1.mon,
str1.year,str1.day_of_year);
printf("%02d.%02d.%4d, day of year = %d",str2.day,str2.mon,
str2.year,str2.day_of_year);
}
/*

Resultado:
01.03.2008, day of year = 60
01.03.2009, day of year = 59

*/

Tambm Veja
TimeToStruct, Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

696

Constantes Padro, Enumeradores e Estruturas

A Estrutura de Entrada de Parmetros de Indicadores


(MqlParam)
A estrutura MqlParam foi projetada especialmente para fornecer parmetros de entrada quando criar
um um indicador tcnico usando a funo IndicatorCreate().
struct MqlParam
{
ENUM_DATATYPE

type;

// tipo de parmetro de entrada, valor de ENUM_DATATY

long

integer_value;

// campo para armazenar um tipo inteiro

double

double_value;

// campo para armazenar um tipo double

string

string_value;

// campo para armazenar um tipo string

};

Todos os parmetros de entrada de um indicador so transmitidos na forma de um array do tipo


MqlParam, o campo type de cada elemento deste array especifica o tipo de dado transmitido pelo
elemento. Os valores do indicador devem ser primeiro colocados nos campos apropriados para cada
elemento (in integer_value, in double_value or string_value) dependendo de qual valor da enumerao
ENUM_DATATYPE especificado no campo type.
Se o valor IND_CUSTOM for passado como tipo do indicador para funo IndicatorCreate(), o primeiro
elemento do array de parmetros de entrada deve ter o campo type com o valor de TYPE_STRING
proveniente da enumerao ENUM_DATATYPE, e o campo string_value deve conter o nome do
indicador customizado.

2000-2014, MetaQuotes Software Corp.

697

Constantes Padro, Enumeradores e Estruturas

MqlRates
Esta estrutura armazena informaes sobre os preos, volumes e spread.
struct MqlRates
{
datetime time;

// Hora inicial do perodo

double

open;

// Preo de abertura

double

high;

// O preo mais alto do perodo

double

low;

// O preo mais baixo do perodo

double

close;

// Preo de fechamento

long

tick_volume;

// Volume de Tick

int

spread;

// Spread

long

real_volume;

// Volume de negociao

};

Exemplo:
void OnStart()
{
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print("Erro ao copiar dados de preos ",GetLastError());
else Print("Copied ",ArraySize(rates)," bars");
}

Tambm Veja
CopyRates, Acesso a sries de tempo

2000-2014, MetaQuotes Software Corp.

698

Constantes Padro, Enumeradores e Estruturas

MqlBookInfo
Fornece informaes sobre os dados de profundidade de mercado.
struct MqlBookInfo
{
ENUM_BOOK_TYPE

type;

// Tipo de ordem proveniente da enumerao ENUM_BOOK_TYPE

double

price;

// Preo

long

volume;

// Volume

};

Observao
A estrutura MqlBookInfo predefinida, portanto ela no requer nenhuma declarao ou descrio.
Para usar a estrutura, apenas declare a varivel deste tipo.
O DOM (Profundidade de Mercado) disponvel somente para alguns ativos (symbols).
Exemplo:
MqlBookInfo priceArray[];
bool getBook=MarketBookGet(NULL,priceArray);
if(getBook)
{
int size=ArraySize(priceArray);
Print("MarketBookInfo sobre ",Symbol());
}
else
{
Print("Falha ao receber DOM para o smbolo ",Symbol());
}

Tambm Veja
MarketBookAdd, MarketBookRelease, MarketBookGet, Ordens de Negociao em DOM, Tipos de
Dados

2000-2014, MetaQuotes Software Corp.

699

Constantes Padro, Enumeradores e Estruturas

A Estrutura de Solicitao de Negociao (MqlTradeRequest)


A interao entre o terminal cliente e um servidor de negociao para executar a operao de
colocao de ordens realizada atravs do uso de solicitaes de negociao. A solicitao de
negociao representada atravs da estrutura predefinida especial de tipo MqlTradeRequest, que
contm todos os campos necessrios para realizar operaes (deals) de negociao. O resultado do
processamento da solicitao representado atravs da estrutura de tipo MqlTradeResult.
struct MqlTradeRequest
{
ENUM_TRADE_REQUEST_ACTIONS

action;

// Tipo de operao de negociao

ulong

magic;

// Expert Advisor ID (nmero mgico)

ulong

order;

// Bilhetagem da ordem

string

symbol;

// Smbolo de negociao

double

volume;

// Volume solicitado para uma encomenda em lotes

double

price;

// Preo

double

stoplimit;

// Nvel StopLimit da ordem

double

sl;

// Nvel Stop Loss da ordem

double

tp;

// Nvel Take Profit da ordem

ulong

deviation;

// Mximo desvio possvel a partir do preo requ

ENUM_ORDER_TYPE

type;

// Tipo de ordem

ENUM_ORDER_TYPE_FILLING

type_filling;

// Tipo de execuo da ordem

ENUM_ORDER_TYPE_TIME

type_time;

// Tipo de expirao da ordem

datetime

expiration;

// Hora de expirao da ordem (para ordens do ti

string

comment;

// Comentrio sobre a ordem

};

Descrio dos Campos


Campo

Descrio

action

Tipo de operao de negociao. Pode ser um


dos
valores
da
enumerao
ENUM_TRADE_REQUEST_ACTIONS.

magic

Expert Advisor ID. Permite organizar um


processamento analtico de ordens
de
negociao. Cada Expert Advisor pode definir
seu prprio ID (identificador) nico ao enviar
uma solicitao de negociao.

order

Bilhetagem (ticket) da ordem. usado para


modificar ordens pendentes.

symbol

Ativo da ordem. No necessrio para


modificao de ordens e operaes de
encerramento de posio.

volume

Volume da ordem solicitada em lotes. Note que


o volume real de uma operao (deal)
depender do tipo de execuo da ordem.

2000-2014, MetaQuotes Software Corp.

700

Constantes Padro, Enumeradores e Estruturas

price

Preo no qual a ordem deve ser executada.


Ordens a mercado de ativos, cujo tipo de
execuo

"Market
Execution" (SYMBOL_TRADE_EXECUTION_MARK
ET), de tipo TRADE_ACTION_DEAL, no
necessitam que se especifique o preo.

stoplimit

O valor do preo, no qual a ordem pendente


Limit ser colocada, quando o preo corrente
alcana o valor deste preo(esta condio
obrigatria). At l, a ordem pendente no
colocada.

sl

Preo de Stop Loss no caso de um movimento


desfavorvel de preo

tp

Preo de Take Profit no caso de um movimento


favorvel de preo

deviation

O mximo desvio de preo, especificado em


pontos

type

Tipo de ordem. Pode ser um dos valores da


enumerao ENUM_ORDER_TYPE.

type_filling

Tipo de execuo da ordem. Pode ser um dos


valores
da
enumerao
ENUM_ORDER_TYPE_FILLING.

type_time

Tipo de expirao da ordem. Pode ser um dos


valores
da
enumerao
ENUM_ORDER_TYPE_TIME.

expiration

Hora de expirao da ordem (para ordens do


tipo ORDER_TIME_SPECIFIED)

comment

Comentrio sobre a ordem

Para enviar ordens para realizaroperaes de negociao (trade) necessrio usar a


funoOrderSend(). Para cada operao de negociao necessrio especificar campos obrigatrios;
campos opcionais tambm podem ser preenchidos. Existem sete possveis casos para enviar uma
ordem de negociao:
Execuo a Pedido
Esta uma ordem de negociao para abrir uma posio no modo Request Execution (negociao
sobre preos solicitados). Ela requer que se especifique os seguintes 9 campos:
action
symbol
volume
price
sl
tp
deviation

2000-2014, MetaQuotes Software Corp.

701

Constantes Padro, Enumeradores e Estruturas


type
type_filling
Tambm possvel especificar valores dos campos "magic" e "comment".
Execuo Instantnea
Esta uma ordem de negociao para abrir uma posio no modo Instant Execution (negociao
pelos preos correntes). Ela requer que se especifique os seguintes 9 campos:
action
symbol
volume
price
sl
tp
deviation
type
type_filling
Tambm possvel especificar valores dos campos "magic" e "comment".
Execuo de Mercado
Esta uma ordem de negociao para abrir uma posio no modo Market Execution (execuo a
mercado). Ela requer que se especifique os seguintes 5 campos:
action
symbol
volume
type
type_filling
Tambm possvel especificar valores dos campos "magic" e "comment".
Execuo Exchange
Esta uma ordem de negociao para abrir uma posio no modo Exchange Execution (execuo em
um sistema de negociao externo). Ela requer que se especifique os seguintes 5 campos:
action
symbol
volume
type
type_filling
Tambm possvel especificar valores dos campos "magic" e "comment".
SL & TP Modificao
Ordem de negociao para modificar os nveis de preo StopLoss e/ou TakeProfit Ela requer que se
especifique os seguintes 4 campos:
action
symbol
sl
tp
2000-2014, MetaQuotes Software Corp.

702

Constantes Padro, Enumeradores e Estruturas

Ordem Pendente
Ordem de negociao para colocar uma ordem pendente. Ela requer que se especifique os seguintes
11 campos:
action
symbol
volume
price
stoplimit
sl
tp
type
type_filling
type_time
expiration
Tambm possvel especificar valores dos campos "magic" e "comment".
Modificar Ordem Pendente
Ordem de negociao para modificar os preos de uma ordem pendente. Ela requer que se
especifique os seguintes 7 campos:
action
order
price
sl
tp
type_time
expiration
Excluir Ordem Pendente
Ordem de negociao para excluir uma ordem pendente. Ela requer que se especifique os seguintes
2 campos:
action
order
Tambm Veja
Estruturas e Classes, Funes de Negociao (Trade), Propriedades de Ordem

2000-2014, MetaQuotes Software Corp.

703

Constantes Padro, Enumeradores e Estruturas

A Estrutura de Resultados de uma Verificao de Solicitao


de Negociao (MqlTradeCheckResult)
Antes de enviarumasolicitaode umaoperao de negociaopara um servidor de negociao,
recomendado verific-la. A verificao realizada usando a funo OrderCheck(), para a qual a
solicitao a ser verifica e uma varivel estrutura do tipo MqlTradeCheckResult so passadas. O
resultado da verificao ser escrita nesta varivel.
struct MqlTradeCheckResult
{
uint

retcode;

// Cdigo da resposta

double

balance;

// Saldo aps a execuo da operao (deal)

double

equity;

// Saldo a mercado (equity) aps a execuo da operao

double

profit;

// Lucro flutuante

double

margin;

// Requerimentos de Margem

double

margin_free;

// Margem livre

double

margin_level;

// Nvel de margem

string

comment;

// Comentrio sobre o cdigo da resposta (descrio do erro)

};

Descrio dos Campos


Campo

Descrio

retcode

Cdigo de retorno

balance

Valor de saldo aps a execuo da operao de


negociao

equity

Valor de saldo a mercado aps a execuo da


operao de negociao

profit

Valor do lucro flutuante aps a execuo da


operao de negociao

margin

Margem requerida
negociao

margin_free

Margem livre que sobrar aps a execuo da


operao de negociao

margin_level

Nvel de margem que ser definida aps a


execuo da operao de negociao

comment

Comentrio sobre
descrio do erro

para

cdigo

operao

da

de

resposta,

Tambm Veja
Estrutura de Solicitao de Negociao, Estrutura para Preos Correntes, OrderSend, OrderCheck

2000-2014, MetaQuotes Software Corp.

704

Constantes Padro, Enumeradores e Estruturas

A Estrutura de um Resultado de Solicitao de Negociao


(MqlTradeResult)
Como resultado de umasolicitao de negociao, um servidor de negociao retorna dados sobre o
resultado do processamento da solicitao de negociao na forma de uma estrutura predefinida
especial de tipo MqlTradeResult.
struct MqlTradeResult
{
uint

retcode;

// Cdigo de retorno da operao

ulong

deal;

// Bilhetagem (ticket) da operao (deal),se ela for realizada

ulong

order;

// Bilhetagem (ticket) da ordem, se ela for colocada

double

volume;

// Volume da operao (deal), confirmada pela corretora

double

price;

// Preo da operao (deal), se confirmada pela corretora

double

bid;

// Preo de Venda corrente

double

ask;

// Preo de Compra corrente

string

comment;

// Comentrio da corretora para a operao (por default preenchido

uint

request_id;

// Identificador da solicitao definida pelo terminal durante o desp

};

Descrio dos Campos


Campo

Descrio

retcode

Cdigo de retornode um servidor de negociao

deal

Bilhetagem (ticket) da operao (deal), caso


uma operao tenha sido realizada. disponvel
para uma operao de negociao de tipo
TRADE_ACTION_DEAL

order

Bilhetagem (ticket) da ordem, caso uma ordem


tenha sido colocada. disponvel para uma
operao
de
negociao
de
tipo
TRADE_ACTION_PENDING

volume

Volume de operao (deal), confirmado pela


corretora. Depende do tipo de preenchimento
da ordem

price

Preo da operao (deal), confirmado pela


corretora. Depende da rea de desvio da
requisio de negcio e/ou sobre operao de
negcios

bid

O preo corrente de venda de mercado (preo


re-cotado)

ask

O preo corrente de compra de mercado (preo


re-cotado)

comment

O comentrio da corretora para a operao (por


default, ele preenchido com a descrio da

2000-2014, MetaQuotes Software Corp.

705

Constantes Padro, Enumeradores e Estruturas

operao)
request_id

Identificador da solicitao definida pelo


terminal ao enviar para o servidor de
negociao

O resultado da operao de negociao retornado para varivel do tipo MqlTradeResult, que


passado como o segundo parmetro da funo OrderSend() para realizar operaes de negociao.
O terminal fixa um identificador (ID) de solicitao no campo request_id ao enviar-la para o servidor
de negociao usando as funes OrdersSend() e OrderSendAsync(). O terminal recebe mensagens
sobre transaes realizadas provenientes do servidor de negociao e as submete para processamento
atravs da funo OnTradeTransaction() contendo os seguintes componentes como parmetros:
Descrio da transao de negociao na estrutura MqlTradeTransaction;
Descrio da solicitao de negociao enviado a partir da funo OrderSend() ou
OrdersSendAsync(). O ID da solicitao enviado pelo terminal para o servidor de negociao,
enquanto a solicitao em si e seu request_id so armazenados na memria do terminal;
O resultado de execuo da solicitao de negociao como estrutura MqlTradeResult com o campo
request_id contendo o ID desta solicitao.
A funo OnTradeTransaction() recebe trs parmetros de entrada mas os ltimos dois devem ser
analisados somente para transaes do tipo TRADE_TRANSACTION_REQUEST. Em todos os outros
casos, dados sobre a solicitao de negociao e seu resultado de execuo no so preenchidos.
Exemplo de anlise de parmetros pode ser encontrado em Estrutura de uma Solicitao de
Negociao.
A definio do request_id pelo terminal na solicitao de negociao quando envi-la para o servidor
introduzido principalmente para trabalhar com a funo assncrona OrderSendAsync(). Este
identificador permite associar a ao realizada (chamada a funes OrderSend ou OrderSendAsync)
com o resultado desta ao enviada para OnTradeTransaction().
Exemplo:
//+------------------------------------------------------------------+
//| Enviando uma solicitao de negociao com o proc. de resultado

//+------------------------------------------------------------------+
bool MyOrderSend(MqlTradeRequest request,MqlTradeResult result)
{
//--- redefine o ltimo cdigo de erro para zero
ResetLastError();
//--- envia solicitao
bool success=OrderSend(request,result);
//--- se o resultado falha - tentar descobrir o porqu
if(!success)
{
int answer=result.retcode;
Print("TradeLog: Requisio de negociao falhou. Erro = ",GetLastError());
switch(answer)
{
//--- nova cotao

2000-2014, MetaQuotes Software Corp.

706

Constantes Padro, Enumeradores e Estruturas


case 10004:
{
Print("TRADE_RETCODE_REQUOTE");
Print("request.price = ",request.price,"

result.ask = ",

result.ask," result.bid = ",result.bid);


break;
}
//--- ordem no aceita pelo servidor
case 10006:
{
Print("TRADE_RETCODE_REJECT");
Print("request.price = ",request.price,"

result.ask = ",

result.ask," result.bid = ",result.bid);


break;
}
//--- preo invlido
case 10015:
{
Print("TRADE_RETCODE_INVALID_PRICE");
Print("request.price = ",request.price,"

result.ask = ",

result.ask," result.bid = ",result.bid);


break;
}
//--- SL e/ou TP invlidos
case 10016:
{
Print("TRADE_RETCODE_INVALID_STOPS");
Print("request.sl = ",request.sl," request.tp = ",request.tp);
Print("result.ask = ",result.ask," result.bid = ",result.bid);
break;
}
//--- volume invlido
case 10014:
{
Print("TRADE_RETCODE_INVALID_VOLUME");
Print("request.volume = ",request.volume,"

result.volume = ",

result.volume);
break;
}
//--- sem dinheiro suficiente para uma operao de negociao
case 10019:
{
Print("TRADE_RETCODE_NO_MONEY");
Print("request.volume = ",request.volume,"
result.volume,"

result.volume = ",

result.comment = ",result.comment);

break;
}
//--- alguma outra razo, sada com o cdigo de resposta do servidor
default:

2000-2014, MetaQuotes Software Corp.

707

Constantes Padro, Enumeradores e Estruturas


{
Print("Outra resposta = ",answer);
}
}
//--- notifica sobre o resultado sem sucesso da solicitao de negociao retornando false
return(false);
}
//--- OrderSend() retorna true - repete a resposta
return(true);
}

2000-2014, MetaQuotes Software Corp.

708

Constantes Padro, Enumeradores e Estruturas

Estrutura
de
um
(MqlTradeTransaction)

Transao

de

Negociao

Ao realizar algumas aes especficas em uma conta de negociao, seu estado muda. Tais aes
includem:
Envio de uma solicitao de negociao a partir de algum aplicativo MQL5 no terminal usando as
funes OrderSend e OrderSendAsync e sua posterior execuo.
Envio de uma solicitao de negociao por meio da interface grfica do terminal e sua posterior
execuo.
Ativao de ordens pendentes e ordens de stop no servidor.
Realizao de operaes no lado de um servidor de negociao.
As seguintes transaes de negociao so realizadas como resultado destas aes:
tratamento de uma solicitao de negociao
mudana de ordens de abertura
mudana de histrico de ordens
mudana de histrico de operaes (deals)
mudana de posies
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal) adicionada
ao histrico e uma nova posio criada. Todas estas aes so transaes de negociao.
O handler especial OnTradeTransaction() fornecido no MQL5 para obter transaes de negociao
aplicados a uma conta. O primeiro parmetro do handler obtm a estrutura MqlTradeTransaction
descrevendo transaes de negociao.
struct MqlTradeTransaction
{
ulong

deal;

// Bilhetagem da operao (deal)

ulong

order;

// Bilhetagem da ordem

string

symbol;

// Nome do ativo da negociao

ENUM_TRADE_TRANSACTION_TYPE

type;

// Tipo de transao da negociao

ENUM_ORDER_TYPE

order_type;

// Tipo de ordem

ENUM_ORDER_STATE

order_state;

// Estado da ordem

ENUM_DEAL_TYPE

deal_type;

// Tipo de operao (deal)

ENUM_ORDER_TYPE_TIME

time_type;

// Tipo de ordem por perodo de ao

datetime

time_expiration;

// Hora de expirao da ordem

double

price;

// Preo

double

price_trigger;

// Preo de ativao de ordem tipo Stop limit

double

price_sl;

// Nvel de Stop Loss

double

price_tp;

// Nvel de Take Profit

double

volume;

// Volume em lotes

};

Descrio dos Campos

2000-2014, MetaQuotes Software Corp.

709

Constantes Padro, Enumeradores e Estruturas

Campo

Descrio

deal

Bilhetagem (ticket) da operao.

order

Bilhetagem (ticket) da ordem.

symbol

O nome do ativo da negociao, para o qual a


transao realizada.

type

Tipo de transao de negociao. O valor pode


ser um dos
valores
da
enumerao
ENUM_TRADE_TRANSACTION_TYPE.

order_type

Tipo de ordem de negociao. O valor pode ser


um
dos
valores
da
enumerao
ENUM_ORDER_TYPE.

order_state

Estado da ordem de negociao. O valor pode


ser um dos
valores
da
enumerao
ENUM_ORDER_STATE.

deal_type

Tipo de operao. O valor pode ser um dos


valores da enumerao ENUM_DEAL_TYPE.

type_time

Tipo de ordem quanto a expirao. O valor


pode ser um dos valores da enumerao
ENUM_ORDER_TYPE_TIME.

time_expiration

Perodo de expirao de uma ordem pendente


(para ordens dos tipos ORDER_TIME_SPECIFIED
e ORDER_TIME_SPECIFIED_DAY).

price

Preo. Dependendo do tipo de transao de


negociao, ele pode ser um preo de uma
ordem, de uma operao (deal), ou de uma
posio.

price_trigger

Preo stop (de ativao) de uma ordem Stop


Limit
(ORDER_TYPE_BUY_STOP_LIMIT
e
ORDER_TYPE_SELL_STOP_LIMIT).

price_sl

Preo Stop Loss. Dependendo do tipo de


transao de negociao, ele pode estar
relacionado a uma ordem, a uma operao
(deal) ou a uma posio.

price_tp

Preo Take Profit. Dependendo do tipo de


transao de negociao, ele pode estar
relacionado a uma ordem, a uma operao
(deal) ou a uma posio.

volume

Volume em lotes. Dependendo do tipo de


transao de negociao, ele pode indicar o
valor corrente de uma ordem, de uma operao
(deal), ou de uma posio.

O parmetro essencial para anlise de uma transao recebida o seu tipo, especificado no campo

2000-2014, MetaQuotes Software Corp.

710

Constantes Padro, Enumeradores e Estruturas


type. Por exemplo, se uma transao do tipo TRADE_TRANSACTION_REQUEST (um resultado de
operar uma negociao requisitada pelo servidor foi recebido), a estrutura possui apenas um campo
nico que completamente preenchido - type. Outros campos no so analisados. Neste caso, ns
podemos analisar dois parmetros adicionais, request e result, submetidos ao handler
OnTradeTransaction(), como mostrado abaixo.
Tendo dados sobre um tipo de operao de negociao, voc pode decidir sobre a anlise do estado
corrente de ordens, posies e operaes (deals) em um conta de negociao. Lembre-se que uma
solicitao de negociao enviada ao servidor a partir do terminal pode gerar vrias novas transaes.
A prioridade de chegada delas no terminal no garantida.
A estrutura MqlTradeTransaction preenchida de diferentes maneiras dependendo do tipo de
transao de negociao (ENUM_TRADE_TRANSACTION_TYPE):
TRADE_TRANSACTION_ORDER_* e TRADE_TRANSACTION_HISTORY_*
Os seguintes campos na estrutura MqlTradeTransaction so preenchidos para transaes de
negociao relacionados a manipulao de abertura de ordens (TRADE_TRANSACTION_ORDER_ADD,
TRADE_TRANSACTION_ORDER_UPDATE e TRADE_TRANSACTION_ORDER_DELETE) e histrico de
ordens
(TRADE_TRANSACTION_HISTORY_ADD,
TRADE_TRANSACTION_HISTORY_UPDATE,
TRADE_TRANSACTION_HISTORY_DELETE):
order - bilhetagem da ordem;
symbol - nome do ativo da ordem;
type - tipo de transao de negociao;
order_type - tipo de ordem;
orders_state - estado corrente da ordem;
time_type - tipo de expirao da ordem;
time_expiration - hora de expirao da ordem (para ordens tendo tipos de expirao
ORDER_TIME_SPECIFIED e ORDER_TIME_SPECIFIED_DAY);
price - preo da ordem especificado por um cliente;
price_trigger - preo de stop de ordem stop limit (somente para ORDER_TYPE_BUY_STOP_LIMIT e
ORDER_TYPE_SELL_STOP_LIMIT);
price_sl - Preo de ordem Stop Loss (preenchido, se especificado na ordem);
price_tp - Preo de ordem Take Profit (preenchido, se especificado na ordem);
volume - volume corrente da ordem (no preenchida). Volume inicial da ordem pode ser encontra
no histrico de ordens usando a funo HistoryOrders*.
TRADE_TRANSACTION_DEAL_*
Os seguintes campos na estrutura MqlTradeTransaction so preenchidos para transaes de
negociao relacionados a manipulao de operaes (TRADE_TRANSACTION_DEAL_ADD,
TRADE_TRANSACTION_DEAL_UPDATE e TRADE_TRANSACTION_DEAL_DELETE):
deal - bilhetagem da operao (deal);
order - bilhetagem da ordem, baseado na qual uma operao (deal) foi realizada;
symbol - nome de ativo da operao (deal);
type - tipo de transao de negociao;
deal_type - tipo de operao (deal);
price - preo de operao (deal);
price_sl - preo de Stop Loss (preenchido, se especificado na ordem, baseado na qual uma
operao foi realizada);

2000-2014, MetaQuotes Software Corp.

711

Constantes Padro, Enumeradores e Estruturas


price_tp - preo de Take Profit (preenchido, se especificado na ordem, baseado na qual uma
operao foi realizada);
volume - volume de operao em lotes.
TRADE_TRANSACTION_POSITION
Os seguintes campos na estrutura MqlTradeTransaction so preenchidos para transaes de
negociao relacionado a mudana de posies no conectados com execuo de operaes (deals)
(TRADE_TRANSACTION_POSITION):
symbol - nome de ativo da posio;
type - tipo de transao de negociao;
deal_type - tipo de posio (DEAL_TYPE_BUY ou DEAL_TYPE_SELL);
price - preo mdio ponderado de abertura de posio;
price_sl - preo de Stop Loss;
price_tp - preo de Take Profit;
volume - volume de posio em lotes, se ele foi alterado.
Alterao de Posio (adio, alterao, encerramento), como resultado de uma execuo de
operao (deal), no leva a ocorrncia de transao de TRADE_TRANSACTION_POSITION.
TRADE_TRANSACTION_REQUEST
Somente um campo na estrutura MqlTradeTransaction preenchido para transaes de negociao
descrevendo o fato de que uma solicitao de negociao foi processada por um servidor e que o
resultado do processamento foi recebido (TRADE_TRANSACTION_REQUEST):
type - tipo de transao de negociao;
Somente o campo type (tipo de transao de negociao) de ser analisado para tais transaes.
O segundo e terceiro parmetros (request e result) da funo OnTradeTransaction deve ser
analisado para dados adicionais.
Exemplo:
input int MagicNumber=1234567;
//--- habilita a classe de negociao CTrade e declara a varivel desta classe
#include <Trade\Trade.mqh>
CTrade trade;
//--- flags para instalao e excluso de ordens pendentes
bool pending_done=false;
bool pending_deleted=false;
//--- bilhetagem da ordem pendente ser armazenada aqui
ulong order_ticket;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- define o MagicNumber para marcar todas as nossas ordens
trade.SetExpertMagicNumber(MagicNumber);

//--- solicitaes de negociao sero enviadas em modo assncrono usando a funo OrderSendAsync()

2000-2014, MetaQuotes Software Corp.

712

Constantes Padro, Enumeradores e Estruturas


trade.SetAsyncMode(true);
//--- inicializa a varivel em zero
order_ticket=0;
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//---instalando uma ordem pendente
if(!pending_done)
{
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

double buy_stop_price=NormalizeDouble(ask+1000*_Point,(int)SymbolInfoInteger(_Symbol,SYMBOL_D
bool res=trade.BuyStop(0.1,buy_stop_price,_Symbol);
//--- caso a funo BuyStop() executou com sucesso
if(res)
{
pending_done=true;
//--- obtm um resultado da solicitao enviando para CTrade
MqlTradeResult trade_result;
trade.Result(trade_result);
//--- obtm o request_id para a solicitaes enviada
uint request_id=trade_result.request_id;
Print("Pedido foi enviado para definir uma ordem pendente. Request_ID=",request_id);

//--- armazena a bilhetagem da ordem (ser zero se usar o modo assncrono de envio para CT
order_ticket=trade_result.order;
//--- tudo est feito, sa cedo do handler OnTick()
return;
}
}
//--- exclui a ordem pendente
if(!pending_deleted)
//--- verificao adicional
if(pending_done && (order_ticket!=0))
{
//--- tenda excluir a ordem pendente
bool res=trade.OrderDelete(order_ticket);
Print("OrderDelete=",res);
//--- quando solicitao de excluso enviada com sucesso
if(res)
{
pending_deleted=true;
//--- obtm o resultado da execuo da solicitao
MqlTradeResult trade_result;
trade.Result(trade_result);
//--- peque o ID da solicitao proveniente do resultado

2000-2014, MetaQuotes Software Corp.

713

Constantes Padro, Enumeradores e Estruturas


uint request_id=trade_result.request_id;
//--- exibe no Dirio
Print("O pedido foi enviado para eliminar uma ordem pendente #",order_ticket,
". Request_ID=",request_id,
"\r\n");
//--- fixa a bilhetagem da ordem proveniente do resultado da solicitao
order_ticket=trade_result.order;
}
}
//--}
//+------------------------------------------------------------------+
//| Funo TradeTransaction

//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- obtm o tipo de transao como valor de enumerao
ENUM_TRADE_TRANSACTION_TYPE type=(ENUM_TRADE_TRANSACTION_TYPE)trans.type;
//--- se a transao a solicitao de manipulao do resultado, somente seu nome exibido
if(type==TRADE_TRANSACTION_REQUEST)
{
Print(EnumToString(type));
//--- exibe o a string do nome da solicitao manipulada
Print("------------RequestDescription\r\n",RequestDescription(request));
//--- exibe a descrio do resultado da solicitao
Print("------------ResultDescription\r\n",TradeResultDescription(result));
//--- armazena a bilhetagem da ordem para sua excluso na prxima manipulao em OnTick()
if(result.order!=0)
{
//--- exclui esta ordem atravs de sua bilhetagem na prxima chamada de OnTick()
order_ticket=result.order;
Print(" Bilhetagem da ordem pendente ",order_ticket,"\r\n");
}
}
else // exibe a descrio completa para transaes de um outro tipo
//--- exibe a descria da transao recebida no Dirio
Print("------------TransactionDescription\r\n",TransactionDescription(trans));
//--}
//+------------------------------------------------------------------+
//| Retorna a descrio textual da transao

//+------------------------------------------------------------------+
string TransactionDescription(const MqlTradeTransaction &trans)
{
//--string desc=EnumToString(trans.type)+"\r\n";

2000-2014, MetaQuotes Software Corp.

714

Constantes Padro, Enumeradores e Estruturas


desc+="Ativo: "+trans.symbol+"\r\n";
desc+="Bilhetagem (ticket) da operao: "+(string)trans.deal+"\r\n";
desc+="Tipo de operao: "+EnumToString(trans.deal_type)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)trans.order+"\r\n";
desc+="Tipo de ordem: "+EnumToString(trans.order_type)+"\r\n";
desc+="Estado da ordem: "+EnumToString(trans.order_state)+"\r\n";
desc+="Ordem do tipo time: "+EnumToString(trans.time_type)+"\r\n";
desc+="Expirao da ordem: "+TimeToString(trans.time_expiration)+"\r\n";
desc+="Preo: "+StringFormat("%G",trans.price)+"\r\n";
desc+="Gatilho do preo: "+StringFormat("%G",trans.price_trigger)+"\r\n";
desc+="Stop Loss: "+StringFormat("%G",trans.price_sl)+"\r\n";
desc+="Take Profit: "+StringFormat("%G",trans.price_tp)+"\r\n";
desc+="Volume: "+StringFormat("%G",trans.volume)+"\r\n";
//--- retorna a string obtida
return desc;
}
//+------------------------------------------------------------------+
//| Retorna a descrio textual da solicitao de negociao

//+------------------------------------------------------------------+
string RequestDescription(const MqlTradeRequest &request)
{
//--string desc=EnumToString(request.action)+"\r\n";
desc+="Ativo: "+request.symbol+"\r\n";
desc+="Nmero mgico: "+StringFormat("%d",request.magic)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)request.order+"\r\n";
desc+="Tipo de ordem: "+EnumToString(request.type)+"\r\n";
desc+="Preenchimento da ordem: "+EnumToString(request.type_filling)+"\r\n";
desc+="Ordem do tipo time: "+EnumToString(request.type_time)+"\r\n";
desc+="Expirao da ordem: "+TimeToString(request.expiration)+"\r\n";
desc+="Preo: "+StringFormat("%G",request.price)+"\r\n";
desc+="Pontos de desvio: "+StringFormat("%G",request.deviation)+"\r\n";
desc+="Stop Loss: "+StringFormat("%G",request.sl)+"\r\n";
desc+="Take Profit: "+StringFormat("%G",request.tp)+"\r\n";
desc+="Stop Limit: "+StringFormat("%G",request.stoplimit)+"\r\n";
desc+="Volume: "+StringFormat("%G",request.volume)+"\r\n";
desc+="Comentrio: "+request.comment+"\r\n";
//--- retorna a string obtida
return desc;
}
//+------------------------------------------------------------------+
//| Retorna a desc. textual do resultado da manipulao da solic.

//+------------------------------------------------------------------+
string TradeResultDescription(const MqlTradeResult &result)
{
//--string desc="Retcode "+(string)result.retcode+"\r\n";
desc+="ID da solicitao: "+StringFormat("%d",result.request_id)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)result.order+"\r\n";

2000-2014, MetaQuotes Software Corp.

715

Constantes Padro, Enumeradores e Estruturas


desc+="Bilhetagem (ticket) da operao: "+(string)result.deal+"\r\n";
desc+="Volume: "+StringFormat("%G",result.volume)+"\r\n";
desc+="Preo: "+StringFormat("%G",result.price)+"\r\n";
desc+="Compra: "+StringFormat("%G",result.ask)+"\r\n";
desc+="Venda: "+StringFormat("%G",result.bid)+"\r\n";
desc+="Comentrio: "+result.comment+"\r\n";
//--- retorna a string obtida
return desc;
}

Tambm Veja
Tipos de Transao de Negociao, OnTradeTransaction()

2000-2014, MetaQuotes Software Corp.

716

Constantes Padro, Enumeradores e Estruturas

A Estrutura para Retornar Preos Correntes (MqlTick)


Esta uma estrutura para armazenar os ltimos preos do ativo. Ela projetada para recuperao
rpida da maioria das informaes solicitadas sobre preos correntes.
struct MqlTick
{
datetime

time;

// Hora da ltima atualizao de preos

double

bid;

// Preo corrente de venda

double

ask;

// Preo corrente de compra

double

last;

// Preo da ltima operao (preo ltimo)

ulong

volume;

// Volume para o preo ltimo corrente

};

A varivel do tipo MqlTick permite obter valores de Preo de Compra, Preo de Venda, Preo ltimo e
Volume com uma nica chamada da funo SymbolInfoTick().
Exemplo:
void OnTick()
{
MqlTick last_tick;
//--if(SymbolInfoTick(Symbol(),last_tick))
{
Print(last_tick.time,": Bid = ",last_tick.bid,
" Ask = ",last_tick.ask,"

Volume = ",last_tick.volume);

}
else Print("SymbolInfoTick() falhou, erro = ",GetLastError());
//--}

Tambm Veja
Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

717

Constantes Padro, Enumeradores e Estruturas

Cdigos de Erros e Avisos


Esta seo contm as seguintes descries:
Cdigos de retorno do servidor de negociao analisando resultados da solicitao de negociao
enviada pela funo OrderSend();
Avisos do compilador cdigos de mensagens de aviso que aparecem na compilao (no erros);
Erros de compilao cdigos de mensagens de erro em uma tentativa sem sucesso de compilar;
Erros em tempo de execuo cdigos de erro na execuo de programas-mql5, que podem ser
obtidos usando a funo GetLastErtror().

2000-2014, MetaQuotes Software Corp.

718

Constantes Padro, Enumeradores e Estruturas

Cdigos de Retorno do Servidor de Negociao


Todas as solicitaes para executar operaes de negociao so enviadas como uma estrutura de
uma solicitao de negociaoMqlTradeRequestusando a funoOrderSend(). O resultado da execuo
da funo colocado na estrutura MqlTradeResult, cujo campo retcode contm o cdigo de retorno do
servidor de negociao.
Cdigo

Constante

Descrio

10004

TRADE_RETCODE_REQUOTE

Nova Cotao

10006

TRADE_RETCODE_REJECT

Solicitao rejeitada

10007

TRADE_RETCODE_CANCEL

Solicitao
negociador

10008

TRADE_RETCODE_PLACED

Ordem colocada

10009

TRADE_RETCODE_DONE

Solicitao concluda

10010

TRADE_RETCODE_DONE_PARTI
AL

Somente parte da solicitao


foi concluda

10011

TRADE_RETCODE_ERROR

Erro de processamento
solicitao

10012

TRADE_RETCODE_TIMEOUT

Solicitao
cancelada
por
expirao de tempo (timeout)

10013

TRADE_RETCODE_INVALID

Solicitao invlida

10014

TRADE_RETCODE_INVALID_VOL
UME

Volume invlido na solicitao

10015

TRADE_RETCODE_INVALID_PRI
CE

Preo invlido na solicitao

10016

TRADE_RETCODE_INVALID_STO
PS

Stops invlidos na solicitao

10017

TRADE_RETCODE_TRADE_DISA
BLED

Negociao est desabilitada

10018

TRADE_RETCODE_MARKET_CL
OSED

Mercado est fechado

10019

TRADE_RETCODE_NO_MONEY

No existe dinheiro suficiente


para completar a solicitao

10020

TRADE_RETCODE_PRICE_CHAN
GED

Os preos se alteraram

10021

TRADE_RETCODE_PRICE_OFF

No existem cotaes
processar a solicitao

10022

TRADE_RETCODE_INVALID_EXPI
RATION

Data de expirao da ordem


invlida na solicitao

10023

TRADE_RETCODE_ORDER_CHA

Estado da ordem alterada

2000-2014, MetaQuotes Software Corp.

cancelada

pelo

de

para

719

Constantes Padro, Enumeradores e Estruturas


NGED
10024

TRADE_RETCODE_TOO_MANY_
REQUESTS

Solicitaes com freqncia em


excesso

10025

TRADE_RETCODE_NO_CHANGE
S

Sem alteraes na solicitao

10026

TRADE_RETCODE_SERVER_DISA
BLES_AT

Autotrading desabilitado pelo


servidor

10027

TRADE_RETCODE_CLIENT_DISA
BLES_AT

Autotrading desabilitado pelo


terminal cliente

10028

TRADE_RETCODE_LOCKED

Solicitao bloqueada
processamento

10029

TRADE_RETCODE_FROZEN

Ordem ou posio congeladas

10030

TRADE_RETCODE_INVALID_FILL

Tipo de preenchimento
ordem invlido

10031

TRADE_RETCODE_CONNECTION

Sem conexo com o servidor de


negociao

10032

TRADE_RETCODE_ONLY_REAL

Operao permitida somente


para contas reais

10033

TRADE_RETCODE_LIMIT_ORDE
RS

O nmero de ordens pendentes


atingiu o limite

10034

TRADE_RETCODE_LIMIT_VOLU
ME

O volume de ordens e posies


para o ativo atingiu o limite

10035

TRADE_RETCODE_INVALID_ORD
ER

Incorreto ou proibida tipo de


ordem

10036

TRADE_RETCODE_POSITION_CL
OSED

Posio com a especificao


POSITION_IDENTIFIER j foi
fechado

2000-2014, MetaQuotes Software Corp.

para

de

720

Constantes Padro, Enumeradores e Estruturas

Avisos do Compilador
Avisos do compilador so exibidos com propsitos informativos somente e no so mensagens de
erro.
Cdigo

Descrio
21

Registro incompleto de uma data na string


datetime.

22

Nmero errado na string datetime para a data.


Requerimentos:
Ano 1970 <= X <= 3000
Ms 0 <X <= 12
Dia 0 <X <= 31/30/28 (29 )....

23

Nmero errado na string datetime para hora.


Requerimentos:
Hora 0 <= X <24
Minuto 0 <= X <60

24

Cor invlida no formato RGB: um dos


componentes RGB menor que 0 ou maior que
255

25

Caractere desconhecido das seqncias de


escape.
Conhecido: \n \r \t \\ \" \' \X \x

26

Volume grande demais de variveis locais (>


512Kb) da funo, reduza o nmero

29

Enumerao j definida (duplicao) - membros


sero adicionados primeira definio

30

Sobreposio (overriding) de macro

31

A varivel est declarada mas no usado em


nenhum lugar

32

Construtor deve ser do tipo void

33

Destrutor deve ser do tipo void

34

Constante no se encaixa na faixa de inteiros


(X > _UI64_MAX || X < _I64_MIN) e ser
convertido para o tipo double

35

HEX longo demais - mais que 16 caracteres


significativos (grupos de 4 bits de posies
mais elevadas so cortados)

36

Sem grupos de 4 bits na string HEX "0x"

37

Sem funo - nada a ser executado

38

Uma varivel no inicializada sendo usada

2000-2014, MetaQuotes Software Corp.

721

Constantes Padro, Enumeradores e Estruturas

41

Funo no tem corpo, e no chamada

43

Possvel perda de dados na converso Exemplo:


int x = (double) z;

44

Perda de preciso (de dados) durante converso


de uma constante. Exemplo: int x = M_PI

45

Diferena entre os sinais de operandos em


operaes de comparao. Exemplo: (char) c1>
(uchar) c2

46

Problemas com importao de funo declarao de #import requerida ou o import


de funes est fechado

47

Descrio grande demais - caracteres extras


no sero includos no arquivo executvel

48

O nmero de buffers de indicador declarados


menor que o requerido

49

Sem cor para plotar um srie grfica no


indicador

50

Sem srie grfica para desenhar o indicador

51

Funo Handler 'OnStart' no encontrado no


script

52

Funo handler 'OnStart' est definido com


parmetros errados

53

Funo 'OnStart' pode ser definida somente em


um script

54

Funo 'OnInit' est definida com parmetros


errados

55

Funo 'OnInit' no usada em scripts

56

Funo 'OnDeinit' est definida com parmetros


errados

57

Funo 'OnDeinit' no usada em scripts

58

Duas funes 'OnCalculate' esto definidas.


OnCalculate() com um array de preoser usada

59

Sobre-preenchimento detectado ao calcular uma


constante inteira complexa

60

Provavelmente, a varivel no est inicializada.

61

Este declarao torna impossvel de referenciar


a varivel local declarada na linha especificada

62

Esta declarao torna impossvel de referenciar


a varivel global declarada na linha especificada

2000-2014, MetaQuotes Software Corp.

722

Constantes Padro, Enumeradores e Estruturas

63

64

No pode ser usada


estaticamente

para

array

alocado

Esta declarao de varivel oculta varivel


predefinida

65

O valor da expresso sempre true/false

66

Usar um varivel ou expresso de tipo bool em


operaes matemticas no seguro

67

O resultado da aplicao de operador menos


unrio para um tipo sem sinal ulong
indefinido

68

A verso especificada na propriedade #property


version no aceitvel para a seo Market;o
formato correto de #property version
"XXX.YYY"

69

Declarao controlada vazia encontrada

70

Tipo de retorno de funo invlido ou


parmetros incorretos durante declarao da
funo de manipulao de evento

71

Uma implcita converso de estruturas para um


tipo requerida

72

Esta declarao torna direto acesso ao membro


de uma classe declarada na string especificada
impossvel. Acesso somente ser possvel com
o operador de resoluo de escopo ::

73

A constante binria muito grande, os dgitos


de alta ordem sero truncados

74

O parmetro no mtodo da classe herana tem


um diferente modificador const, a funo
derivada tem sobrecarregado a funo geradora

75

Negativo ou deslocamento com valor muito


grande em deslocamento de operao bit a bit,
resultado da execuo indefinido

2000-2014, MetaQuotes Software Corp.

723

Constantes Padro, Enumeradores e Estruturas

Erros de Compilao
O MetaEditor 5 exibe mensagens de erro sobre os erros de programa detectados pelo compilador
interno durante a compilao. A lista destes erros esto na tabela dada abaixo. Para compilar um
cdigo fonte em um cdigo executvel, pressione F7. Programas que contm erros no podem ser
compilados at que os erros identificados pelo compilador sejam eliminados.
Cdigo

Descrio
100

Erro de leitura de arquivo

101

Erro de abertura de arquivo *. EX5 para


escrever nele para gravao

103

Sem memria livre suficiente para completar


compilao

104

Unidade sinttica vazia no reconhecida pelo


compilador

105

Nome de arquivo incorreto em #include

106

Erro acessando um arquivo em #include


(provavelmente o arquivo no existe)

108

Nome inapropriado para #define

109

Comando desconhecido de preprocessador


(vlidos #include, #define, #property, #import)

110

Ativo desconhecido para compilador

111

Funo no implementada (descrio est


presente, mas sem corpo)

112

Dupla aspas (") omitida

113

Chave angular de abertura (<) ou aspas duplas


(") omitida

114

Aspas simples (') omitida

115

Chave angular de fechamento ">" omitida

116

Tipo no especificado na declarao

117

Sem operador return ou return no encontrado


em todas as ramificaes da implementao

118

Colchete de abertura de parmetros de


chamada era esperada

119

Erro escrevendo EX5

120

Acesso invlido a um array

121

A funo no do tipo void e o operador return


deve retornar um valor

122

Declarao incorreta do destrutor

2000-2014, MetaQuotes Software Corp.

724

Constantes Padro, Enumeradores e Estruturas

123

Dois pontos ":" est faltando

124

Varivel j esta declarada

125

Varivel com tal identificador j declarado

126

Nome de varivel longo demais (> 250


caracteres)

127

Estrutura com tal identificador j definida

128

Estrutura no est definida

129

Membro de estrutura com o mesmo nome j


definido

130

Sem tal membro de estrutura

131

Emparelhamento de chaves violado

132

Parnteses de abertura "(" esperada

133

Chaves desbalanceadas (sem "}")

134

Dificuldade para compilar (ramificaes


demais, nveis de empilhamento interno so
sobre-preenchidos

135

Erro de abertura de arquivo para leitura

136

Sem memria suficiente para baixar o arquivo


fonte em memria

137

Varivel esperada

138

Referncia no pode ser inicializada

140

Atribuio esperada (aparece na declarao)

141

Chave de abertura "{" esperada

142

Parmetro pode ser um array dinmico somente

143

Uso de tipo "void" no aceitvel

144

Sem par correspondente para ")" ou "]", isto ,


"(" ou "[" est ausente

145

Sem par correspondente para "(" ou "[", isto ,


")" ou "]" est ausente

146

Tamanho de array incorreto

147

Excesso de parmetros (> 64)

149

Este smbolo (token) no esperado aqui

150

Uso invlido de operao (operandos invlidos)

151

Expresso de tipo void no permitido

152

Operador esperado

2000-2014, MetaQuotes Software Corp.

725

Constantes Padro, Enumeradores e Estruturas

153

Uso incorreto do break

154

Ponto e vrgula ";" esperado

155

Vrgula "," esperada

156

Deve ser um tipo classe, no estrutura

157

Expresso esperada

158

"no caractere HEX" encontrado em HEX ou


nmero longo demais (nmero de dgitos > 511)

159

Constante-string tem mais que 65534


caracteres

160

Definio de funo no aceitvel aqui

161

Trmino de programa inesperado

162

Declarao adiantada proibida para estruturas

163

Funo com este nome j est definida e tem


um outro tipo de retorno

164

Funo com este nome j est definida e tem


um conjunto diferente de parmetros

165

Funo com este nome j est definida e


implementada

166

Sobrecarga de funo para esta chamada no


foi encontrada

167

Funo com um valor de retorno de tipo void


no pode retornar um valor

168

Funo no est definida

170

Valor esperado

171

Em expresso case somente constantes inteiras


so vlidas

172

O valor de case neste switch j usado

173

Inteiro esperado

174

Em expresso #import, nome de arquivo


esperado

175

Expresses no so permitidas em nvel global

176

Parnteses ")" omitido antes de ";"

177

Uma varivel esquerda do sinal de igualdade


esperada

178

O resultado de expresso no usado

179

Declarao de variveis no permitida em


case

2000-2014, MetaQuotes Software Corp.

726

Constantes Padro, Enumeradores e Estruturas

180

Converso implcita de uma string para um


nmero

181

Converso implcita de um nmero para uma


string

182

Chamada ambgua de uma funo


sobrecarregada (vrias sobrecargas se
enquadram)

183

else ilegal sem apropriado if

184

Invlido case ou default sem um switch

185

Uso inapropriado de reticncia

186

A seqncia de inicializao tem mais


elementos que a varivel inicializada

187

Uma constante paracaseesperada

188

Uma expresso constante requerida

189

Uma varivel constante no pode ser alterada

190

Colchete de fechamento ou uma vrgula


esperado (declarando membro de array)

191

Identificador de enumerao j definido

192

Enumerao no pode ter modificadores de


acesso (const, extern, static)

193

Membro de enumerao j declarado com um


valor diferente

194

Existe uma varivel definida com o mesmo


nome

195

Existe uma estrutura definida com o mesmo


nome

196

Nome de membro de enumerao esperado

197

Expresso de inteiro esperado

198

Diviso por zero em expresso constante

199

Nmero errado de parmetros na funo

200

Parmetro por referncia deve ser uma varivel

201

Varivel de mesmo tipo para passar por


referncia esperada

202

Uma varivel constante no pode ser passada


por uma referncia no constante

203

Requer uma constante inteira positiva

204

Falha em acessar membro protegido de classe

2000-2014, MetaQuotes Software Corp.

727

Constantes Padro, Enumeradores e Estruturas

205

Import j definido de uma outra forma

208

Arquivo executvel no criado

209

Ponto de entrada 'OnCalculate' no encontrado


para o indicador

210

O operador continue pode ser usado somente


dentro de um loop

211

Erro acessando membro privado (fechado) de


classe

213

Mtodo de estrutura ou classe no est


declarado

214

Erro acessando mtodo privado (fechado) de


classe

216

Cpia de estruturas com objetos no


permitida

218

ndice fora do intervalo do array

219

Inicializao de array em declarao de


estrutura ou classe no permitida

220

Construtor de classe no pode ter parmetros

221

Destrutor de classe no pode ter parmetros

222

Mtodo de classe ou estrutura com o mesmo


nome e parmetros j foi declarado

223

Operando esperado

224

Mtodo de classe ou estrutura com o mesmo


nome existe, mas com parmetros diferentes
(declarao!=implementao)

225

Funo importada no est descrita

227

Chamada ambgua da funo sobrecarregada


(correspondncia exata de parmetros para
vrias sobrecargas)

228

Nome de varivel esperada

229

Um referncia no pode ser declarada neste


local

230

J usado como nome da enumerao

232

Classe ou estrutura esperada

235

No pode chamar operador 'delete' para excluir


o array

236

Operador 'while' esperado

237

Operador 'delete' deve ter um ponteiro

2000-2014, MetaQuotes Software Corp.

728

Constantes Padro, Enumeradores e Estruturas

238

J existe 'default' para este 'switch'

239

Erro de sintaxe

240

Seqncia-escape pode ocorrer somente em


strings (comeam com '\')

241

Array requerido - colchete '[' no se aplica a um


array, ou no arrays so passados como
parmetros de array

242

No pode ser inicializado atravs da seqncia


de inicializao

243

Import no est definido

244

Erro de otimizador na rvore sinttica

245

Estruturas declaradas em excesso (tente


simplificar o programa)

246

Converso do parmetro no permitida

247

Uso incorreto do operador 'delete'

248

No permitido declarar um ponteiro para uma


referncia

249

No permitido declarar uma referncia para


uma referncia

250

No permitido declarar um ponteiro para um


ponteiro

251

Declarao de estrutura na lista de parmetros


no permitida

252

Operao invlida de converso de tipo

253

Um ponteiro pode ser declarado somente para


uma classe ou estrutura

256

Identificador no declarado

257

Erro do otimizador de cdigo executvel

258

Erro de gerao de cdigo executvel

260

Expresso invlida para o operador 'switch'

261

Pool de constantes de string sobre-preenchido,


simplifique o programa

262

No pode converter para enumerao

263

No use 'virtual' para dados (membros de uma


classe ou estrutura)

264

No pode chamar mtodo protegido de uma


classe

2000-2014, MetaQuotes Software Corp.

729

Constantes Padro, Enumeradores e Estruturas

265

Funes virtuais sobrepostas retornam um tipo


diferente

266

Classe no pode ser herdada de uma estrutura

267

Estrutura no pode ser herdada de uma classe

268

Construtor no pode ser virtual (especificador


virtual no permitido)

269

Estrutura no pode ter mtodos virtuais

270

Funo deve ter um corpo

271

Sobrecarga de funes de sistema (funes de


terminal) proibida

272

Especificador const no vlido para funes


que no so membros de uma classe ou
estrutura

274

No permitido alterar membros de classe em


mtodo constante

276

Seqncia de inicializao inapropriada

277

Valor default faltante para o parmetro


(declarao especfica de parmetros default)

278

Sobreposio do parmetro default (valores


diferentes na declarao e implementao)

279

No permitido chamar mtodo no constante


para um objeto constante

280

Um objeto necessrio para acessar membros


(um ponteiro para uma no classe/estrutura
est definido)

281

O nome de uma estrutura j declarada no pode


ser usado em declarao

284

Converso no autorizada (em herana


fechada)

285

Estruturas e arrays no podem ser usados como


variveis de input

286

Especificador const no vlido para


construtor/destrutor

287

Expresso de string incorreta para um datetime

288

Propriedade desconhecida (#property)

289

Valor incorreto de uma propriedade

290

ndice invlido para uma propriedade em


#property

2000-2014, MetaQuotes Software Corp.

730

Constantes Padro, Enumeradores e Estruturas

291

Chamar parmetro omitido - <func (x,)>

293

Objeto deve ser passado por referncia

294

Array deve ser passado por referncia

295

Funo foi declarada como exportvel

296

Funo no foi declarada como exportvel

297

proibido exportar funes importadas

298

Funo importada no pode ter este parmetro


(proibido passar um ponteiro, classe ou
estrutura contendo um array dinmico,
ponteiro, classe, etc.)

299

Deve ser uma classe

300

#import no foi fechado

302

Tipo incompatvel

303

Varivel externa (extern)j est inicializada

304

Nenhuma
funoexportadaouponto
entradaencontrado

305

Chamada explcita aoconstrutorno permitida

306

Mtodo foi declarado comoconstante

307

Mtodo no foi declarado comoconstante

308

Tamanho incorreto do arquivo de recurso

309

Nome de recurso incorreto

310

Erro de abertura de arquivo de recurso

311

Erro de leitura de arquivo de recurso

312

Tipo de recurso desconhecido

313

Caminho incorreto para o arquivo de recurso

314

O nome dorecursoespecificado j usado

315

Argumento esperado para a macro tipo-funo

316

Smbolo inesperado na definio de macro

317

Erro em parmetros formais da macro

318

Nmero invlido de parmetros para uma macro

319

Parmetro em excesso para uma macro

320

Complexo demais, simplifique a macro

321

Parametro para EnumToString() somente pode


ser uma enumerao

2000-2014, MetaQuotes Software Corp.

de

731

Constantes Padro, Enumeradores e Estruturas

322

O nome do recurso longo demais

323

Formato de imagem no suportado (somente


BMP com cor de 24 ou 32 bits de profundidade
suportado)

324

Um array no pode ser declarado em operador

325

A funo pode ser declarada somente no


escopo global

326

A declarao no permitida para o escopo


corrente

327

Inicializao de variveis estticas com os


valores de variveis locais no permitida

328

Declarao ilegal de um array de objetos que


no tem um construtor default

329

Lista de inicializao permitida somente para


construtores

330

Sem definio
inicializao

331

Lista de inicializao est vazia

332

Inicializao de array em um construtor no


permitida

333

Inicializar membros de uma classe pai na lista


de inicializao no permitido

334

Expresso do tipo inteiro esperado

335

Memria requerida para o array excede o valor


mximo

336

Memria requerida para a estrutura excede o


valor mximo

337

Memria requerida para as variveis declaradas


no nvel global excede o valor mximo

338

Memria requerida para variveis locais excede


o valor mximo

339

Construtorno definido

340

Nome invlido do arquivo de cone

341

No pode abrir o arquivo de coneno caminho


especificado

342

O arquivo de cone est incorreto e no do


formato ICO format

343

Reinicializao de um membro em um
construtor de uma classe/estrutura usando a

2000-2014, MetaQuotes Software Corp.

de

funo

aps

lista

de

732

Constantes Padro, Enumeradores e Estruturas

lista de inicializao
344

Inicializao de membros estticos na lista de


inicializao do construtor no permitida

345

Inicializao de um membro no-esttico de


uma classe/estrutura em nvel global no
permitida

346

O nome do mtodo da classe/estrutura


corresponde ao nome de um membro declarado
anteriormente

347

O nome do membro da classe/estrutura


corresponde ao nome de um mtodo declarado
anteriormente

348

Funo virtual no pode ser declarada como


esttica

349

O modificador const no permitido para


funes estticas

350

Construtor ou destrutor no pode ser esttico

351

Membros no-estticos de uma classe ou


estrutura no podem ser acessados a partir de
uma funo esttica

352

Uma operao de sobrecarregada (+,-,[],++,-etc.) esperada aps a palavra-chave operator

353

Nem todas as operaes


sobrecarregadas em MQL5

354

Definio no corresponde declarao

355

Um nmero invlido de
especificado para o operador

parmetros

356

Funo
de
encontrada

de

357

Mtodo no pode ser exportado

358

Um ponteiro para o objeto constante no pode


ser normalizado por um objeto no-constante

359

Templates de classe no so suportados ainda

360

Sobrecargade template
suportado ainda

361

Template de funo no pode ser aplicado

362

Parmetro ambguo em template de funo


(vrios tipos de parmetros podem ser
aplicados)

manipulao

2000-2014, MetaQuotes Software Corp.

de

podem

ser

eventono

funo

no

733

Constantes Padro, Enumeradores e Estruturas

363

Incapaz de determinar o tipo do parmetro,


atravs do qual o argumento do template de
funo deveria ser normalizado

364

Nmero incorreto de parmetros no template de


funo

365

Template de funo no pode ser virtual

366

Templates de funo no podem ser exportados

367

Templates de funo no podem ser importados

368

Estruturas contendo objetos no so permitidas

2000-2014, MetaQuotes Software Corp.

734

Constantes Padro, Enumeradores e Estruturas

Erros em Tempo de Execuo


GetLastError() a funo que retorna o cdigo do ltimo erro que est armazenado na varivel
predefinida _LastError. Este valor pode ser redefinido para zero atravs da funo ResetLastError().
Constante

Cdigo

Descrio

ERR_SUCCESS

A operao
sucesso

ERR_INTERNAL_ERROR

4001

Erro interno inesperado

ERR_WRONG_INTERNAL_PARA
METER

4002

Parmetro errado na chamada


interna da funo do terminal
cliente

ERR_INVALID_PARAMETER

4003

Parmetro errado ao chamar a


funo de sistema

ERR_NOT_ENOUGH_MEMORY

4004

Sem memria suficiente para


executar a funo de sistema

ERR_STRUCT_WITHOBJECTS_
ORCLASS

4005

A estrutura contm objetos de


strings e/ou arrays dinmicos
e/ou estrutura de tais objetos
e/ou classes

ERR_INVALID_ARRAY

4006

Array de um tipo errado,


tamanho errado, ou um objeto
defeituoso de um array
dinmico

ERR_ARRAY_RESIZE_ERROR

4007

Sem memria suficiente para


a realocao de um array, ou
uma tentativa de alterar o
tamanho de um array esttico

ERR_STRING_RESIZE_ERROR

4008

Sem memria suficiente para


a realocao de string

ERR_NOTINITIALIZED_STRING

4009

String no inicializada

ERR_INVALID_DATETIME

4010

Data e/ou hora invlida

ERR_ARRAY_BAD_SIZE

4011

Tamanho de array solicitado


excede 2 GB

ERR_INVALID_POINTER

4012

Ponteiro errado

ERR_INVALID_POINTER_TYPE

4013

Tipo errado de ponteiro

ERR_FUNCTION_NOT_ALLOWE
D

4014

Funo de sistema no
permitida para chamar

ERR_RESOURCE_NAME_DUPLIC
ATED

4015

Os nomes do recurso dinmico


e do esttico equivalem

ERR_RESOURCE_NOT_FOUND

4016

Recurso com este nome no

2000-2014, MetaQuotes Software Corp.

concluda

com

735

Constantes Padro, Enumeradores e Estruturas

foi encontrado em EX5


ERR_RESOURCE_UNSUPPOTED
_TYPE

4017

Tipo de recurso no suportado


ou seu tamanho excede 16 Mb

ERR_RESOURCE_NAME_IS_TO
O_LONG

4018

O nome do recurso excede 63


caracteres

ERR_CHART_WRONG_ID

4101

Identificador de grfico (chart


ID) errado

ERR_CHART_NO_REPLY

4102

Grfico no responde

ERR_CHART_NOT_FOUND

4103

Grfico no encontrado

ERR_CHART_NO_EXPERT

4104

Nenhum Expert Advisor no


grfico que pudesse manipular
o evento

ERR_CHART_CANNOT_OPEN

4105

Erro de abertura de grfico

ERR_CHART_CANNOT_CHANG
E

4106

Falha ao alterar ativo


perodo de um grfico

ERR_CHART_WRONG_PARAME
TER

4107

Valor de erro do parmetro


para a funo que trabalha
com grficos

ERR_CHART_CANNOT_CREATE
_TIMER

4108

Falha ao criar timer

ERR_CHART_WRONG_PROPER
TY

4109

Identificador de propriedade
(property ID) do grfico errado

ERR_CHART_SCREENSHOT_FAI
LED

4110

Erro
criando
(screenshots)

ERR_CHART_NAVIGATE_FAILE
D

4111

Erro navegando atravs


grfico

ERR_CHART_TEMPLATE_FAILE
D

4112

Erro aplicando template

ERR_CHART_WINDOW_NOT_F
OUND

4113

Sub-janela
contendo
o
indicador no foi encontrada

ERR_CHART_INDICATOR_CANN
OT_ADD

4114

Erro adicionando um indicador


no grfico

ERR_CHART_INDICATOR_CANN
OT_DEL

4115

Erro excluindo um indicador do


grfico

ERR_CHART_INDICATOR_NOT_
FOUND

4116

Indicador no encontrado no
grfico especificado

4201

Erro

Grficos

telas

de

Objetos Grficos
ERR_OBJECT_ERROR

2000-2014, MetaQuotes Software Corp.

trabalhando

com

um

736

Constantes Padro, Enumeradores e Estruturas

objeto grfico
ERR_OBJECT_NOT_FOUND

4202

Objeto
grfico
encontrado

no

foi

ERR_OBJECT_WRONG_PROPER
TY

4203

Identificador (ID) de uma


propriedade de objeto grfico
errado

ERR_OBJECT_GETDATE_FAILE
D

4204

No foi possvel obter data


correspondente ao valor

ERR_OBJECT_GETVALUE_FAIL
ED

4205

No foi possvel obter valor


correspondente data

ERR_MARKET_UNKNOWN_SYM
BOL

4301

Ativo desconhecido

ERR_MARKET_NOT_SELECTED

4302

Ativo no est selecionado na


janela Observao de Mercado

ERR_MARKET_WRONG_PROPE
RTY

4303

Identificador
de
uma
propriedade de ativo errado

ERR_MARKET_LASTTIME_UNKN
OWN

4304

Hora do ltimo tick no


conhecida (sem ticks)

ERR_MARKET_SELECT_ERROR

4305

Erro adicionando ou excluindo


um ativo na janela Observao
de Marcado

ERR_HISTORY_NOT_FOUND

4401

Histrico
encontrado

ERR_HISTORY_WRONG_PROPE
RTY

4402

Identificador
propriedade
errado

MarketInfo

Acesso de Histrico
solicitado

de

no

(ID)
da
histrico

Variveis Globais
ERR_GLOBALVARIABLE_NOT_F
OUND

4501

Varivel global do terminal


cliente no foi encontrada

ERR_GLOBALVARIABLE_EXISTS

4502

Varivel global do terminal


cliente com o mesmo nome j
existe

ERR_MAIL_SEND_FAILED

4510

Envio de email falhou

ERR_PLAY_SOUND_FAILED

4511

Reproduo de som falhou

ERR_MQL5_WRONG_PROPERT
Y

4512

Identificador de propriedade
do programa errado

ERR_TERMINAL_WRONG_PROP

4513

Identificador de propriedade

2000-2014, MetaQuotes Software Corp.

737

Constantes Padro, Enumeradores e Estruturas

ERTY

do terminal errado

ERR_FTP_SEND_FAILED

4514

Envio de arquivo via ftp falhou

ERR_NOTIFICATION_SEND_FAI
LED

4515

Falha
ao
notificao

ERR_NOTIFICATION_WRONG_P
ARAMETER

4516

Parmetro invlido para enviar


uma notificao uma string
vazia ou NULL foi passada
para
a
funo
SendNotification()

ERR_NOTIFICATION_WRONG_S
ETTINGS

4517

Configuraes de notificaes
erradas no terminal (ID no
est
especificado
ou
permisso no est definida)

ERR_NOTIFICATION_TOO_FRE
QUENT

4518

Freqncia de envio
notificaes em excesso

ERR_BUFFERS_NO_MEMORY

4601

Sem memria suficiente para


a distribuio de buffers de
indicador

ERR_BUFFERS_WRONG_INDEX

4602

ndice de buffer de indicador


errado

4603

Identificador
(ID)
de
propriedade
do
indicador
customizado errado

ERR_ACCOUNT_WRONG_PROP
ERTY

4701

Identificador
(ID)
de
propriedade da conta errado

ERR_TRADE_WRONG_PROPER
TY

4751

Identificador
(ID)
de
propriedade da negociao
(trade) errado

ERR_TRADE_DISABLED

4752

Negociao
via
Advisors proibida

ERR_TRADE_POSITION_NOT_F
OUND

4753

Posio no encontrada

ERR_TRADE_ORDER_NOT_FOU
ND

4754

Ordem no encontrada

ERR_TRADE_DEAL_NOT_FOUN
D

4755

Operao
encontrada

enviar

uma

de

Buffers de Indicador
Customizado

Propriedades de Indicador
Customizado
ERR_CUSTOM_WRONG_PROPE
RTY

Conta

2000-2014, MetaQuotes Software Corp.

(deal)

Expert

no

738

Constantes Padro, Enumeradores e Estruturas

ERR_TRADE_SEND_FAILED

4756

Envio
de solicitao
negociao falhou

de

ERR_INDICATOR_UNKNOWN_S
YMBOL

4801

Ativo desconhecido

ERR_INDICATOR_CANNOT_CRE
ATE

4802

Indicador no pode ser criado

ERR_INDICATOR_NO_MEMORY

4803

Sem memria suficiente para


adicionar o indicador

ERR_INDICATOR_CANNOT_APP
LY

4804

O indicador no pode ser


aplicado a um outro indicador

ERR_INDICATOR_CANNOT_ADD

4805

Erro ao aplicar um indicador


ao grfico

ERR_INDICATOR_DATA_NOT_F
OUND

4806

Dado
solicitado
encontrado

ERR_INDICATOR_WRONG_HAN
DLE

4807

Manuseio de indicador errado

ERR_INDICATOR_WRONG_PAR
AMETERS

4808

Numero errado de parmetros


ao criar um indicador

ERR_INDICATOR_PARAMETERS
_MISSING

4809

Sem parmetros ao criar um


indicador

ERR_INDICATOR_CUSTOM_NA
ME

4810

O primeiro parmetro no array


deve ser o nome do indicador
customizado

ERR_INDICATOR_PARAMETER_
TYPE

4811

Tipo de parmetro invlido no


array ao criar um indicador

ERR_INDICATOR_WRONG_INDE
X

4812

ndice errado de buffer do


indicador solicitado

ERR_BOOKS_CANNOT_ADD

4901

Profundidade de Mercado no
pode ser adicionado

ERR_BOOKS_CANNOT_DELETE

4902

Profundidade de Mercado no
pode ser removido

ERR_BOOKS_CANNOT_GET

4903

Os dados da Profundidade de
Mercado no podem ser
obtidos

ERR_BOOKS_CANNOT_SUBSCRI
BE

4904

Erro em subscrever para


receber novos dados da
Profundidade de Mercado

Indicadores

no

Profundidade de Mercado

Operaes de Arquivo

2000-2014, MetaQuotes Software Corp.

739

Constantes Padro, Enumeradores e Estruturas

ERR_TOO_MANY_FILES

5001

Mais que 64 arquivos no


podem ser abertos ao mesmo
tempo

ERR_WRONG_FILENAME

5002

Nome de arquivo invlido

ERR_TOO_LONG_FILENAME

5003

Nome de arquivo longo demais

ERR_CANNOT_OPEN_FILE

5004

Erro de abertura de arquivo

ERR_FILE_CACHEBUFFER_ERR
OR

5005

Sem memria suficiente de


cache para leitura

ERR_CANNOT_DELETE_FILE

5006

Erro excluindo arquivo

ERR_INVALID_FILEHANDLE

5007

Um arquivo com este handle


foi fechado, ou simplesmente
no estava aberto

ERR_WRONG_FILEHANDLE

5008

Handle de arquivo errado

ERR_FILE_NOTTOWRITE

5009

O arquivo deve estar abertura


para escrita

ERR_FILE_NOTTOREAD

5010

O arquivo deve estar aberto


para leitura

ERR_FILE_NOTBIN

5011

O arquivo deve estar aberto


como um arquivo binrio

ERR_FILE_NOTTXT

5012

O arquivo deve estar aberto


como um texto

ERR_FILE_NOTTXTORCSV

5013

O arquivo deve estar aberto


como um texto ou CSV

ERR_FILE_NOTCSV

5014

O arquivo deve estar aberto


como CSV

ERR_FILE_READERROR

5015

Erro de leitura de arquivo

ERR_FILE_BINSTRINGSIZE

5016

Tamanho da string deve estar


especificado, porque o arquivo
est aberto como binrio

ERR_INCOMPATIBLE_FILE

5017

Um arquivo de texto deve ser


usado para arrays de strings,
para outros arrays - binrios

ERR_FILE_IS_DIRECTORY

5018

Isto no um arquivo, isto


um diretrio

ERR_FILE_NOT_EXIST

5019

Arquivo inexistente

ERR_FILE_CANNOT_REWRITE

5020

Arquivo no pode ser reescrito

ERR_WRONG_DIRECTORYNAM
E

5021

Nome de diretrio errado

ERR_DIRECTORY_NOT_EXIST

5022

Diretrio inexistente

2000-2014, MetaQuotes Software Corp.

740

Constantes Padro, Enumeradores e Estruturas

ERR_FILE_ISNOT_DIRECTORY

5023

Isto um arquivo, no um
diretrio

ERR_CANNOT_DELETE_DIRECT
ORY

5024

O diretrio
removido

ERR_CANNOT_CLEAN_DIRECT
ORY

5025

Falha ao limpar o diretrio


(provavelmente um ou mais
arquivos esto bloqueados e a
operao de remoo falhou)

ERR_FILE_WRITEERROR

5026

Falha ao escrever um recurso


para um arquivo

ERR_NO_STRING_DATE

5030

Sem data na string

ERR_WRONG_STRING_DATE

5031

Data errada na string

ERR_WRONG_STRING_TIME

5032

Hora errada na string

ERR_STRING_TIME_ERROR

5033

Erro convertendo string em


data

ERR_STRING_OUT_OF_MEMOR
Y

5034

Sem memria suficiente para


a string

ERR_STRING_SMALL_LEN

5035

O comprimento da string
menor que o esperado

ERR_STRING_TOO_BIGNUMBER

5036

Nmero grande demais, maior


que ULONG_MAX

ERR_WRONG_FORMATSTRING

5037

string de formato invlido

ERR_TOO_MANY_FORMATTER
S

5038

Quantidade de especificadores
de formato maior que de
parmetros

ERR_TOO_MANY_PARAMETERS

5039

Quantidade de parmetros
maior que de especificadores
de formato

ERR_WRONG_STRING_PARAME
TER

5040

Parmetro
defeituoso

ERR_STRINGPOS_OUTOFRANG
E

5041

Posio fora da string

ERR_STRING_ZEROADDED

5042

0 adicionado ao final da
string, uma operao intil

ERR_STRING_UNKNOWNTYPE

5043

Tipo de dado desconhecido ao


converter para uma string

ERR_WRONG_STRING_OBJECT

5044

Objeto de string defeituoso

no

pode

ser

Converso de String

Operaes com Arrays

2000-2014, MetaQuotes Software Corp.

de

tipo

string

741

Constantes Padro, Enumeradores e Estruturas

ERR_INCOMPATIBLE_ARRAYS

5050

Copiando
arrays
incompatveis. Array de string
pode ser copiado somente
para um array de string, e um
array numrico - somente em
um array numrico

ERR_SMALL_ASSERIES_ARRAY

5051

O array de recepo est


declarado como AS_SERIES, e
de tamanho insuficiente.

ERR_SMALL_ARRAY

5052

Array pequeno demais, a


posio inicial est fora do
array

ERR_ZEROSIZE_ARRAY

5053

Um array de comprimento zero

ERR_NUMBER_ARRAYS_ONLY

5054

Deve ser um array numrico

ERR_ONEDIM_ARRAYS_ONLY

5055

Deve
ser
unidimensional

ERR_SERIES_ARRAY

5056

Srie de tempo (timeseries)


no pode ser usada

ERR_DOUBLE_ARRAY_ONLY

5057

Deve ser um array de tipo


double

ERR_FLOAT_ARRAY_ONLY

5058

Deve ser um array de tipo


float

ERR_LONG_ARRAY_ONLY

5059

Deve ser um array de tipo long

ERR_INT_ARRAY_ONLY

5060

Deve ser um array de tipo int

ERR_SHORT_ARRAY_ONLY

5061

Deve ser um array de tipo


short

ERR_CHAR_ARRAY_ONLY

5062

Deve ser um array de tipo char

ERR_OPENCL_NOT_SUPPORTE
D

5100

Funes
OpenCLno
so
suportados neste computador

ERR_OPENCL_INTERNAL

5101

Erro
interno
aoexecutar OpenCL

ERR_OPENCL_INVALID_HANDL
E

5102

Handle de OpenCL invlido

ERR_OPENCL_CONTEXT_CREA
TE

5103

Erro criando
OpenCL

ERR_OPENCL_QUEUE_CREATE

5104

Falha ao criar um fila de


execuo em OpenCL

ERR_OPENCL_PROGRAM_CREA
TE

5105

Erro ocorreu aocompilar um


programa OpenCL

um

array

Operaes com OpenCL

2000-2014, MetaQuotes Software Corp.

ocorreu

ocontexto

de

742

Constantes Padro, Enumeradores e Estruturas

ERR_OPENCL_TOO_LONG_KER
NEL_NAME

5106

Nome
de
kernel
longo
demais(kernel de OpenCL)

ERR_OPENCL_KERNEL_CREATE

5107

Erro criando
OpenCL

ERR_OPENCL_SET_KERNEL_PA
RAMETER

5108

Erro
ocorreu aoconfigurar
parmetrospara o kernel de
OpenCL

ERR_OPENCL_EXECUTE

5109

Erro em tempo de execuo


de programa de OpenCL

ERR_OPENCL_WRONG_BUFFER
_SIZE

5110

Tamanho invlido do buffer de


OpenCL

ERR_OPENCL_WRONG_BUFFER
_OFFSET

5111

Deslocamento (offset) invlido


do buffer de OpenCL

ERR_OPENCL_BUFFER_CREATE

5112

Falha ao criar umbuffer de


OpenCL

65536

Erros
definidos
usuriocomeam com
cdigo

umkernel

de

Erros Definidos pelo Usurio


ERR_USER_ERROR_FIRST

2000-2014, MetaQuotes Software Corp.

pelo
este

743

Constantes Padro, Enumeradores e Estruturas

Constantes de Entrada e Sada


Constantes:
Flags de abertura de arquivo
Propriedades de arquivo
Posicionamento dentro de um arquivo
Uso de code page
MessageBox

2000-2014, MetaQuotes Software Corp.

744

Constantes Padro, Enumeradores e Estruturas

Flags de Abertura de Arquivo


Valores de flags de abertura de arquivo especificam o modo de acesso do arquivo. Flags so definidos
como se segue:
Identificador

Valor

Descrio

FILE_READ

Arquivo aberto para leitura.


Flag usado em FileOpen(). Ao
abrir
um
arquivo,
a
especificao de FILE_WRITE
e/ou FILE_READ requerida.

FILE_WRITE

Arquivo aberto para escrita.


Flag usado em FileOpen(). Ao
abrir
um
arquivo,
a
especificao de FILE_WRITE
e/ou FILE_READ requerida.

FILE_BIN

Modo de leitura/escrita binria


(sem converso string para
string). Flag usado em
FileOpen()

FILE_CSV

Arquivo CSV (todos seus


elementos so convertidos para
strings do tipo apropriado,
unicode ou ansi, e separados
por separador). Flag usado
em FileOpen()

FILE_TXT

16

Arquivo de texto simples


(semelhando ao arquivo csv,
mas sem levar em conta os
separadores). Flag usado em
FileOpen()

FILE_ANSI

32

Strings de tipo ANSI (smbolos


de um byte). Flag usado em
FileOpen()

FILE_UNICODE

64

Strings de tipo UNICODE


(smbolos de dois bytes). Flag
usado em FileOpen()

FILE_SHARE_READ

128

Acesso compartilhado para


leitura a partir de vrios
programas. Flag usado em
FileOpen(), mas ele no
substitui a necessidade de
indicar o flag FILE_WRITE e/ou
FILE_READ
ao
abrir
um
arquivo.

FILE_SHARE_WRITE

256

Acesso

2000-2014, MetaQuotes Software Corp.

compartilhado

para

745

Constantes Padro, Enumeradores e Estruturas


escrita a partir de vrios
programas. Flag usado em
FileOpen(), mas ele no
substitui a necessidade de
indicar o flag FILE_WRITE e/ou
FILE_READ
ao
abrir
um
arquivo.
FILE_REWRITE

512

Possibilidade de reescrever o
arquivo usando as funes
FileCopy() e FileMove(). O
arquivo deve existir ou deve
estar aberto para escrita, de
outra forma o arquivo no ser
aberto.

FILE_COMMON

4096

O caminho do arquivo na pasta


comum de todos os terminais
cliente. Flag usado em
funes FileOpen(), FileCopy(),
FileMove() e em FileIsExist().

Um ou vrios flags podem ser especificado ao abrir um arquivo. Esta uma combinao de flags. A
combinao de flags escrita usando o sinal de lgica OR (|), que posicionado entre os flags
enumerados. Por exemplo, para abrir um arquivo em formato CSV para leitura e escrita ao mesmo
tempo, especifique a combinao FILE_READ|FILE_WRITE|FILE_CSV.
Exemplo:
int filehandle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV);

Existem algumas caractersticas especficas de funcionamento ao se especificar flags de leitura e


escrita:
Se FILE_READ especificado, uma tentativa feita para abrir um arquivo existente. Caso o arquivo
no exista, a abertura do arquivo falha, um novo arquivo no criado.
FILE_READ|FILE_WRITE um novo arquivo criado caso o arquivo com o nome especificado no
exista.
FILE_WRITE o arquivo criado novamente com tamanho zero.
Ao abrir um arquivo, a especificao de FILE_WRITE e/ou FILE_READ requerida.
Flags que definem o tipo de leitura de um arquivo aberto, possuem prioridade. O flag de mais alta
prioridade FILE_CSV, da vem FILE_BIN, e FILE_TXT o de mais baixa prioridade. Assim, se vrios
flags so especificados ao mesmo tempo (FILE_TXT|FILE_CSV ou FILE_TXT|FILE_BIN ou FILE_BIN|
FILE_CSV), o flag com a mais alta prioridade ser usado.
Flags que definem o tipo de codificao tambm tm prioridade. FILE_UNICODE de maior prioridade
que FILE_ANSI. Assim, se voc especificar a combinao FILE_UNICODE|FILE_ANSI, o flag
FILE_UNICODE ser usado.
Se nem FILE_UNICODE ou FILE_ANSI forem indicados, FILE_UNICODE fica implcito. Se nem FILE_CSV,
ou FILE_BIN, ou FILE_TXT forem especificados, FILE_CSV fica implcito.

2000-2014, MetaQuotes Software Corp.

746

Constantes Padro, Enumeradores e Estruturas


Se um arquivo aberto para leitura como um arquivo de texto (FILE_TXT ou FILE_CSV), e no incio do
arquivo uma indicao de dois-bytes 0xff,0xfe encontrada, o flag de codificao ser FILE_UNICODE,
mesmo se FILE_ANSI for especificado.
Tambm Veja
Funes de Arquivo

2000-2014, MetaQuotes Software Corp.

747

Constantes Padro, Enumeradores e Estruturas

Propriedades de Arquivo
A funo FileGetInteger() usada para obter propriedades de arquivo. O identificador da propriedade
requerida proveniente da enumerao ENUM_FILE_PROPERTY_INTEGER passado para ela durante a
chamada.
ENUM_FILE_PROPERTY_INTEGER
ID

Descrio

FILE_EXISTS

Verifica a existncia

FILE_CREATE_DATE

Data de criao

FILE_MODIFY_DATE

Data da ltima modificao

FILE_ACCESS_DATE

Data do ltimo acesso ao arquivo

FILE_SIZE

Tamanho de arquivo em bytes

FILE_POSITION

Posio de um ponteiro no arquivo

FILE_END

Obtm o sinal de trmino de arquivo

FILE_LINE_END

Obtm o sinal de termino de linha

FILE_IS_COMMON

O arquivo est aberto em uma pasta


compartilhada por todos os terminais (veja
FILE_COMMON)

FILE_IS_TEXT

O arquivo est aberto como um arquivo de


texto (veja FILE_TXT)

FILE_IS_BINARY

O arquivo est aberto como um arquivo binrio


(veja FILE_BIN)

FILE_IS_CSV

O arquivo
FILE_CSV)

FILE_IS_ANSI

O arquivo est aberto como ANSI (veja


FILE_ANSI)

FILE_IS_READABLE

O arquivo
FILE_READ)

FILE_IS_WRITABLE

O arquivo aberto pode ser escrito (veja


FILE_WRITE)

est

aberto

aberto

pode

como

ser

CSV

lido

(veja

(veja

A funo FileGetInteger() tem duas opes diferentes de chamada. Na primeira opo, para obter
propriedades de um arquivo, seu handle especificado, que obtido na abertura do arquivo usando a
funo FileOpen(). Esta opo permite obter todas as propriedades de um arquivo.
A segunda opo da funo FileGetInteger() retorna valores de propriedades de arquivo atravs do
nome do arquivo. Usando esta opo, somente as seguintes propriedades gerais podem ser obtidas:
FILE_EXISTS existncia de um arquivo com o nome especificado
FILE_CREATE_DATE data de criao do arquivo com o nome especificado

2000-2014, MetaQuotes Software Corp.

748

Constantes Padro, Enumeradores e Estruturas


FILE_MODIFY_DATE data de modificao do arquivo com o nome especificado
FILE_ACCESS_DATE - data do ltimo acesso ao arquivo com o nome especificado
FILE_SIZE tamanho do arquivo com o nome especificado
Ao tentar obter propriedades outras daquelas especificadas acima, a segunda opo de chamada de
FileGetInteger() retornar um erro.

2000-2014, MetaQuotes Software Corp.

749

Constantes Padro, Enumeradores e Estruturas

Posicionamento Dentro de um Arquivo


A maioria das funes de arquivo associada com operaes leitura/escrita de dados. Ao mesmo
tempo, usando a funo FileSeek() voc pode especificar a posio de um ponteiro de arquivo para
uma posio dentro do arquivo, a partir da qual a prxima operao de leitura ou escrita ser
realizada. A enumerao ENUM_FILE_POSITION contm posies vlidas de ponteiro, com a qual voc
pode especificar um deslocamento em bytes para a prxima operao.
ENUM_FILE_POSITION
Identificador

Descrio

SEEK_SET

Incio de arquivo

SEEK_CUR

Posio corrente de um ponteiro de arquivo

SEEK_END

Fim de arquivo

Tambm Veja
FileIsEnding, FileIsLineEnding

2000-2014, MetaQuotes Software Corp.

750

Constantes Padro, Enumeradores e Estruturas

Usando um Cdigo de Pgina (Codepage) em Operaes de


Converso de String
Ao converter variveis string em arrays de tipo char e vice-versa, a codificao que por default
correspodente ao ANSI corrente do sistema operacional Windows (CP_ACP) usada em MQL5. Se voc
quiser especificar um tipo diferente de codificao, isso pode ser definido como parmetro adicional
para as funes CharArrayToString(), StringToCharArray() e FileOpen().
A tabela lista as constantes internas de alguns dos mais populares cdigos de pgina. Cdigos de
pgina no mencionados podem ser especificados atravs de um cdigo correspondente pgina.
Constantes Internas de Cdigo de Pginas (Codepages)
Constante

Valor

Descrio

CP_ACP

O cdigo de pgina ANSI do


Windows corrente.

CP_OEMCP

O cdigo de pgina do sistema


OEM corrente.

CP_MACCP

O cdigo de pgina do sistema


Macintosh corrente.
Note: Este valor usado
principalmente em cdigos de
programa criados antigamente
e est sem uso atualmente, j
que computadores Macintosh
modernos usando Unicode para
codificao.

CP_THREAD_ACP

O cdigo de pgina ANSI do


Windows para
o
thread
corrente.

CP_SYMBOL

42

Cdigo de pgina de smbolo

CP_UTF7

65000

Cdigo de pgina UTF-7.

CP_UTF8

65001

Cdigo de pgina UTF-8.

Tambm Veja
Propriedades do Terminal Cliente

2000-2014, MetaQuotes Software Corp.

751

Constantes Padro, Enumeradores e Estruturas

Constantes da Janela de Dilogo MessageBox


Esta seo contm cdigos de retorno da funo MessageBox(). Se um janela de mensagem tem um
boto Cancel, a funo retorna IDCANCEL no caso da tecla ESC ou o boto Cancel serem pressionados.
Caso no exista nenhum boto Cancel na janela de mensagem, pressionar o ESC no produz nenhum
efeito.
Constante

Valor

Descrio

IDOK

Boto "OK" foi pressionado

IDCANCEL

Boto "Cancel" foi pressionado

IDABORT

Boto "Abort" foi pressionado

IDRETRY

Boto "Retry" foi pressionado

IDIGNORE

Boto "Ignore" foi pressionado

IDYES

Boto "Yes" foi pressionado

IDNO

Boto "No" foi pressionado

IDTRYAGAIN

10

Boto
"Try
pressionado

IDCONTINUE

11

Boto
"Continue"
pressionado

Again"

foi

foi

Os principais flags da funo MessageBox() definem o contedo e comportamento da janela de


dilogo. Este valor pode ser uma combinao dos seguintes grupos de flag:
Constante

Valor

Descrio

MB_OK

0x00000000

Janela de mensagem contm


somente um boto: OK.
Default

MB_OKCANCEL

0x00000001

Janela de mensagem contm


dois botes: OK e Cancel

MB_ABORTRETRYIGNORE

0x00000002

Janela de mensagem contm


trs botes: Abort, Retry e
Ignore

MB_YESNOCANCEL

0x00000003

Janela de mensagem contm


trs botes: Yes, No e Cancel

MB_YESNO

0x00000004

Janela de mensagem contm


dois botes: Yes e No

MB_RETRYCANCEL

0x00000005

Janela de mensagem contm


dois botes: Retry e Cancel

MB_CANCELTRYCONTINUE

0x00000006

Janela de mensagem contm

2000-2014, MetaQuotes Software Corp.

752

Constantes Padro, Enumeradores e Estruturas

trs botes: Cancel,


Again, Continue

Try

Para exibir um cone na janela de mensagem necessrio especificar flags adicionais:


Constante

Valor

Descrio

MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND

0x00000010

O cone de sinal STOP

MB_ICONQUESTION

0x00000020

O
cone
de
interrogao

sinal

de

MB_ICONEXCLAMATION,
MB_ICONWARNING

0x00000030

O
cone
de
sinal
exclamao/aviso

de

MB_ICONINFORMATION,
MB_ICONASTERISK

0x00000040

O sinal icercado

Os botes default so definidos atravs dos seguintes flags:


Constante

Valor

Descrio

MB_DEFBUTTON1

0x00000000

O
primeiro
boto
MB_DEFBUTTON1 - o default,
se
os
outros
botes
MB_DEFBUTTON2,
MB_DEFBUTTON3,
ou
MB_DEFBUTTON4 no forem
especificados

MB_DEFBUTTON2

0x00000100

O segundo boto o default

MB_DEFBUTTON3

0x00000200

O terceiro boto o default

MB_DEFBUTTON4

0x00000300

O quarto boto o default

2000-2014, MetaQuotes Software Corp.

753

Programas MQL5

Programas MQL5
Para um programa-mql5 funcionar, ele deve ser compilado (boto Compilar ou tecla F7). A compilao
deve passar sem erros (alguns avisos so possveis; eles devem ser analisados). Neste processo, um
arquivo executvel com o mesmo nome e com extenso EX5 deve ser criado no diretrio
correspondente, terminal_dir\MQL5\Experts, terminal_dir\MQL5\indicators ou terminal_dir\MQL5
\scripts. Este arquivo pode ser executado.
Caractersticas operacionais de programas MQL5 so descritas nas seguintes sees:
Execuo de Programa ordem de chamada de manipuladores de eventos predefinidos.
Testando estratgias de negociao caractersticas operacionais de programas MQL5 no Provador
de Estratgias.
Eventos do terminal cliente descrio de eventos, que podem ser processados em programas.
Chamada de funes importadas ordem de descrio, parmetros permitidos, detalhes de busca e
conveno de chamada para funes importadas.
Erros em tempo de execuo obteno de informaes sobre erros crticos e em tempo de
execuo.
Expert Advisors, indicadores customizados e scripts so anexados a um dos grficos abertos atravs
do mtodo "Arrastar e Soltar" a partir da janela Navegador.
Para um Expert Advisor parar de funcionar, ele deve ser removido de um grfico. Para fazer isso
selecione a "Lista de Experts" no menu de contexto do grfico, ento selecione um Expert Advisor da
lista e clique no boto "Remover". O funcionamento de Expert Advisors tambm afetado pelo estado
do boto "AutoTrading".
A fim de parar um indicador customizado, ele deve ser removido de um grfico.
Indicadores customizados e Expert Advisors trabalham at eles serem explicitamente removidos de um
grfico; informaes sobre Expert Advisors e Indicadores so salvos entre sesses do terminal cliente.
Scripts so executados uma vez e so excludos automaticamente na concluso da operao ou
mudana de estado do grfico corrente, ou no encerramento do terminal cliente. Aps o reincio do
terminal cliente, scripts no so iniciados, porque as informaes sobre eles no so salvas.
Em um grfico podem operar no mximo um Expert Advisor, um script e um nmero ilimitado de
indicadores.

2000-2014, MetaQuotes Software Corp.

754

Programas MQL5

Execuo de Programa
Cada script e cada Expert Advisor executado em seu prprio segmento separado. Todos os
indicadores calculados sobre um smbolo, mesmo se eles estiverem anexados a difidentes grficos,
trabalham em um mesmo segmento. Assim, todos os indicadores sobre um smbolo compartilham os
recursos de um segmento.
Todas as outras aes associadas a um smbolo, como processamento de ticks e sincronizao de
histrico, tambm so consistentemente realizadas no mesmo segmento com indicadores. Isso
significa que se uma ao infinita realizada em um indicador, todos os outros eventos associados a
seu ativo nunca sero realizados.
Ao executar um Expert Advisor, certifique-se de que ele tem um ambiente de negociao real e pode
acessar o histrico do requerido ativo e perodo, e sincronizar dados entre o terminal e o servidor.
Para todos estes procedimentos, o terminal fornece um atraso de iniciao de no mais que 5
segundos, aps o qual o Expert Advisor ser iniciado com os dados disponveis. Portanto, no caso de
no haver conexo com o servidor, isso pode levar a um atraso na iniciao de um Expert Advisor.
A tabela abaixo contm um breve resumo sobre programas MQL5:
Programa

Execuo

Observao

Script

Um segmento separado, o
nmero de segmentos para
scripts igual ao nmero de
scripts

Um script em loop no capaz


de interromper a execuo de
outros programas

Expert Advisor

Um segmento separado, o
nmero de segmentos para
Expert Advisor igual ao
nmero de Expert Advisor

Um Expert Advisor em loop


no capaz de interromper a
execuo de outros programas

Indicador

Um segmento para todos os


indicadores de um smbolo. O
nmero de segmentos igual
ao nmero de smbolos com
indicadores

Um loop infinito em um
indicador ir parar todos os
outros indicadores sobre este
ativo

Logo aps um programa ser anexado a um grfico, ele carregado para a memria do terminal
cliente, bem como variveis globais so inicializadas. Caso alguma varivel global do tipo classe tiver
um construtor, este construtor ser chamado durante a inicializao das variveis globais.
Aps isso, o programa fica esperando por um evento do terminal cliente. Cada programa-MQL5 deve
ter ao menos um manipulador (handler) de evento, caso contrrio o programa carregado no ser
executado. Handlers de evento tm nomes pr-definidos, parmetros e tipos de retorno.
Tipo

int

Nome da
Funo
OnInit

Parmetros

nenhum

Aplicativo

Expert Advisors
e indicadores

2000-2014, MetaQuotes Software Corp.

Comentrio

Handler
de
evento Init. Ele
permite usar o

755

Programas MQL5

tipo de retorno
void.
void

OnDeinit

const int reason

Expert Advisors
e indicadores

Handler
de
evento Deinit.

void

OnStart

nenhum

scripts

Handler
de
evento Start.

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
&TickVolume[],
const
long
&Volume[],
const
int
&Spread[]

indicadores

Handler de evento
Calculate
para
todos os preos.

int

OnCalculate

const
int
rates_total,
const
int
prev_calculated,
const int begin,
const
double
&price[]

indicadores

Handler
de
evento Calculate
sobre um array
nico de dados.
Um indicador no
pode
ter
simultaneamente
dois handlers de
evento.
Neste
caso
apenas
um
handler
(manipulador) de
evento
vai
trabalhar
na
array de dados.

void

OnTick

nenhum

Expert Advisors

Handler
de
evento NewTick.
Enquanto
o
evento
de
recebimento de

2000-2014, MetaQuotes Software Corp.

756

Programas MQL5

um novo tick
est
sendo
processado,
nenhum
outro
evento
deste
tipo recebido.
void

OnTimer

nenhum

Expert Advisors
e indicadores

Handler
de
evento Timer.

void

OnTrade

nenhum

Expert Advisors

Handler
de
evento Trade.

double

OnTester

nenhum

Expert Advisors

Handler
de
evento Tester.

void

OnChartEvent

const int id,


const
long
&lparam,
const
double
&dparam,
const
string
&sparam

Expert Advisors
e indicadores

Handler
evento
ChartEvent.

de

void

OnBookEvent

const
string
&symbol_name

Expert Advisors

Handler
evento
BookEvent.

de

Um terminal cliente envia novos eventos para o grfico aberto correspondente. Os eventos podem ser
gerados por grficos (Eventos de grfico) ou programas-MQL5 (eventos customizados). A gerao de
eventos de criao ou excluso de objetos grficos sobre um grfico pode ser habilitado ou
desabilitado atravs da definio das propriedades de grfico CHART_EVENT_OBJECT_CREATE e
CHART_EVENT_OBJECT_DELETE. Cada programa MQL5 e cada grfico tm sua prpria fila de eventos,
onde todos os novos eventos que chegam so adicionados.
Um programa recebe somente eventos do grfico no qual ele est rodando. Todos os eventos so
processados um aps o outro na ordem que em eles so recebidos. Se um fila j tiver um evento
NewTick, ou este evento est correntemente sendo processado, ento um novo evento NewTick no
colocado na fila do programa MQL5. Similarmente, se ChartEvent j esta enfileirado, ou este evento
est sendo processado, nenhum novo evento deste tipo enfileirado. Os eventos de timer so
tratados da mesma forma se o evento Timer est na filha ou sendo tratado, um novo evento timer
no enfileirado .
Filas de evento tm um tamanho limitado mas suficiente, de modo que a sobrecarga de uma fila em
programas bem escritos improvvel. No caso de uma sobrecarga de fila, novos eventos so
descartados sem enfileiramento.
No recomendvel usar loops infinitos para tratar eventos. A exceo a esta regra poderiam ser
scripts somente, que processam s um nico evento, Start.
Bibliotecas no tratam nenhum evento.

2000-2014, MetaQuotes Software Corp.

757

Programas MQL5

Funes proibidas em Indicadores e Expert Advisors


Indicatores, scripts e Expert Advisors so programas executveis escritos em MQL5. Eles so
projetados para diferentes tipos de tarefas. Portanto existem algumas restries quanto ao uso de
certas funes, dependendo do tipo de programa. As seguintes funes so proibidas em indicadores:
OrderCalcMargin();
OrderCalcProfit();
OrderCheck();
OrderSend();
SendFTP();
Sleep();
ExpertRemove();
MessageBox().

Todas as funes projetadas para indicadores so proibidas em Expert Advisors e scripts:


SetIndexBuffer();
IndicatorSetDouble();
IndicatorSetInteger();
IndicatorSetString();
PlotIndexSetDouble();
PlotIndexSetInteger();
PlotIndexSetString();
PlotIndexGetInteger.
A biblioteca (library) no um programa independente e executado no contexto do programa MQL5
que a chamou: script, indicador ou Expert Advisor. Desta forma, as restries acima se aplicam
biblioteca (library) chamada.

Carga e Descarga de Indicadores


Indicadores so carregados nos seguintes casos:
um indicador anexado a um grfico;
inicio do terminal (se o indicador estava anexado a um grfico antes do encerramento do terminal);
carga de um template (se o indicador anexado a um grfico estiver especificado no template);
alterao de um perfil (se o indicador estiver anexado a um dos grficos do perfil alterado);
alterao de um ativo e/ou perodo de um grfico, no qual o indicador est anexado;
aps uma bem sucedida recompilao de um indicador, se o indicador estiver anexado a um grfico;
alterao de parmetros de entrada do indicador.

2000-2014, MetaQuotes Software Corp.

758

Programas MQL5
Indicadores so descarregados nos seguintes casos:
ao desanexar um indicador de um grfico;
encerramento do terminal (se o indicador estiver anexado a um grfico);
carga de um template, se um indicador estiver anexado a um grfico;
fechamento de um grfico, no qual o indicador estava anexado;
alterao de um perfil, se o indicador estiver anexado a um dos grficos do perfil alterado;
alterao de um ativo e/ou perodo de um grfico, no qual o indicador est anexado;
alterao de parmetros de entrada do indicador.

Carga e Descarga de Expert Advisors


Expert Advisors so carregados nos seguintes casos:
ao anexar um Expert Advisor a um grfico;
incio de terminal (se o Expert Advisor estava anexado a um grfico antes do encerramento do
terminal);
carga de um template (se o Expert Advisor anexado a um grfico est especificado no template);
alterao de um perfil (se o Expert Advisor est anexado a um dos grficos do perfil);
conexo a uma conta, mesmo se o nmero da conta for o mesmo (se o Expert Advisor estava anexado
ao grfico antes da autorizao do terminal no servidor.
Expert Advisors so descarregados nos seguintes casos:
ao desanexar um Expert Advisor de um grfico;
Se um novo Expert Advisor anexo a um grfico, e um outro Expert Advisor j estava anexado,
este Expert Advisor descarregado.
encerramento do terminal (se o Expert Advisor estiver anexado a um grfico);
carga de um template, se um Expert Advisor est anexado a um grfico;
fechamento de um grfico, no qual o Expert Advisor est anexado.
alterao de um perfil, se o Expert Advisor est anexado a um dos grficos do perfil alterado;
alterao da conta na qual o terminal est conectado (se o Expert Advisor estava anexado a um
grfico antes da autorizao do terminal no servidor.
Em caso de alterao de ativo ou perodo de um grfico, no qual o Expert Advisor est anexado,
Expert Advisors no so carregados ou descarregados. Neste caso o terminal cliente
subseqentemente chama os handlers OnDeinit() sobre o ativo/perodo antigo e OnInit() sobre o novo
ativo/perodo; valores de variveis globais e variveis estticas no so redefinidos. Todos os
eventos que foram recebidos pelo Expert Advisor antes da inicializao ser concluda (funo OnInit())
so pulados.

Carga e Descarga de Scripts


Scripts so carregados imediatamente aps eles serem anexados a um grfico e descarregados
imediatamente aps eles conclurem sua operao. OnInit() e OnDeinit() no so chamados por

2000-2014, MetaQuotes Software Corp.

759

Programas MQL5
scripts.
Quando um programa descarregado (excludo de um grfico) o terminal cliente realiza a
desinicializao de variveis globais e exclu a fila de eventos. Neste caso a desinicializao significa
a redefinio de todas as variveis de tipo string, desalocao de objetos de array dinmico e
chamada de seus destrutores se eles estiverem disponveis.
Para um melhor entendimento do funcionamento de um Expert Advisor, ns recomendamos compilar o
cdigo do seguinte Expert Advisor e realizar aes de carga/descarga, alterao de template,
alterao de ativo, alterao de perodo, etc:
Exemplo:
//+------------------------------------------------------------------+
//|

TestExpert.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

class CTestClass
{
public:
CTestClass() { Print("CTestClass construtor"); }
~CTestClass() { Print("CTestClass destruidor"); }
};
CTestClass global;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--Print("Inicializao");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--Print("Desinicializao com motivo",reason);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

760

Programas MQL5
void OnTick()
{
//--}
//+------------------------------------------------------------------+

Tambm Veja
Eventos do terminal cliente, Handlers de Evento

2000-2014, MetaQuotes Software Corp.

761

Programas MQL5

Eventos do Terminal Cliente


Init
Imediatamente aps o terminal cliente carregar um programa (uma Expert Advisor ou um indicador
customizado) e comear o processo de inicializao de variveis globais, o evento Init ser enviado, e
ser processado pelo handler de evento OnInit(), caso exista. Este evento tambm gerado aps um
instrumento financeiro e / ou prazo grfico ser alterado, depois de um programa ser recompilado no
MetaEditor, depois dos parmetros de entrada serem alterados a partir da janela de configurao de
um Expert Advisor ou um indicador personalizado. Um Expert Advisor tambm inicializado aps a
conta ser alterada. O evento Init no gerado para scripts.
Deinit
Antes de variveis globais serem desinicializadas e o programa (Expert Advisor ou indicador
customizado) ser descarregado, o terminal cliente envia o evento Deinit para o programa. Deinit
tambm gerado quando o terminal cliente encerrado, quando um grfico fechado, logo antes o
ativo e/ou perodo ser alterado, em uma recompilao de programa bem sucedida, quando parmetros
de input so alterados e quando a conta alterada.
O motivo de desinicializao pode ser obtido a partir do parmetro passado para a funo OnDeinit().
A execuo da funo OnDeinit() est restrita a 2.5 segundos. Se durante este tempo a funo no for
concluda, ento ela finalizada de forma forada. O evento Deinit (Desinicializar) no gerada para
scripts.
Start
O evento Start um evento especial para ativao de script aps ele ser carregado. O evento
processado pelo handler (manipulador) OnStart. O evento Start no enviado para Expert Advisor ou
indicadores customizados.
NewTick
O evento NewTick gerado caso existam novas cotaes, ele processado pelo OnTick() de Expert
Advisors anexados. No caso de uma nova cotao ser recebida enquanto a funo OnTick estiver
processando a cotao anterior, a nova cotao ser ignorada pelo Expert Advisor, porque o evento
correspondente no ser enfileirado.
Todas as novas cotaes que so recebidas enquanto o programa est rodando so ignoradas at que
a execuo da funo OnTick() esteja concluda. Aps isso, a funo rodar somente aps uma nova
cotao ser recebida. O evento NewTick gerado independentemente da negociao automtica ser
permitida ou no (boto "AutoTrading Permite/Probe"). A proibio de negociao automtica
significa somente que o envio de solicitaes de negociao a partir de um Expert Advisor no
permitido, enquanto o Expert Advisor continua trabalhando.
A proibio de negociao automtica ao apertar o boto apropriado no parar a execuo corrente
da funo OnTick(). OnTick() no iniciado quando a janela de propriedades do Expert Adviso.
Calculate
O evento Calculate gerado somente para indicadores logo aps o evento Init ser enviado e em
qualquer alterao de dados de preos. Ele processado pela funo OnCalculate.

2000-2014, MetaQuotes Software Corp.

762

Programas MQL5

Timer
O evento Timer periodicamente gerado pelo terminal cliente para o Expert Advisor que ativou o
timer atravs da funo EventSetTimer. Geralmente, esta funo chamada na funo OnInit. O
processamento do evento Timer realizado pela funo OnTimer. Aps a operao do Expert Advisor
estar concluda, necessrio destruir o timer usando a funo EventKillTimer, que geralmente
chamada na funo OnDeinit.
Trade
O evento Trade gerado quando uma operao de trade concluda em um servidor de negociao. O
evento Trade tratado pela funo OnTrade() para as seguintes operaes de negociao:
envio, modificao e remoo de uma ordem pendente;
cancelamento de uma ordem pendente com ausncia de dinheiro suficiente ou expirao;
ativao de uma ordem pendente;
abertura, acrscimo ou encerramento de uma posio (ou parte da posio);
modificao da posio aberta (alterao de stops - Stop Loss e/ou Take Profit).
TradeTransaction
Ao realizar algumas aes especficas em uma conta de negociao, seu estado muda. Tais aes
includem:
Envio de uma solicitao de negociao a partir de algum aplicativo MQL5 no terminal usando as
funes OrderSend e OrderSendAsync e sua posterior execuo.
Envio de uma solicitao de negociao por meio da interface grfica do terminal e sua posterior
execuo.
Ativao de ordens pendentes e ordens de stop no servidor.
Realizao de operaes no lado de um servidor de negociao.
As seguintes transaes de negociao so realizadas como resultado destas aes:
tratamento de uma solicitao de negociao
mudana de ordens de abertura
mudana de histrico de ordens
mudana de histrico de operaes (deals)
mudana de posies
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal) adicionada
ao histrico e uma nova posio criada. Todas estas aes so transaes de negociao. A chegada
de tal transao no terminal um evento TradeTransaction. Este evento tratado pela funo
OnTradeTransaction.
Tester
O evento Tester gerado aps um teste de um Expert Advisor sob dados de histrico ter acabado. O
evento tratado pela funo OnTester().

2000-2014, MetaQuotes Software Corp.

763

Programas MQL5

TesterInit
O evento TesterInit gerado no incio de uma otimizao no Provador de Estratgia antes do primeiro
passo de otimizao. O evento TesterInit tratado pela funo OnTesterInit().
TesterPass
O evento TesterPass gerado quando uma nova estrutura de dados recebido. O evento TesterPass
tratado pela funo OnTesterPass().
TesterDeinit
O evento TesterDeinit gerado aps o fim de um otimizao de um Expert Advisor no Provador de
Estratgia. O evento TesterDeinit tratado pela funo OnTesterDeinit().
ChartEvent
O evento ChartEvent gerado pelo terminal cliente quando um usurio est trabalhando com um
grfico:
pressionar de teclado, quando a janela de grfico est com foco
objeto grfico criado
objeto grfico excludo
pressionar de mouse sobre um objeto grfico do grfico
movimentao do objeto grfico usando o mouse
fim de edio de texto no LabelEdit
Tambm existe o evento customizado ChartEvent, que pode ser enviado para um Expert Advisor
atravs de qualquer programa mql5 por meio do uso da funo EventChartCustom. O evento
processado pela funo OnChartEvent.
BookEvent
O evento BookEvent gerado pelo terminal cliente aps a Profundida de Mercado ser alterada; ele
processado pela funo OnBookEvent. Para comear a gerao de BookEvent para um ativo
especificado, necessrio subscrever o ativo para este evento atravs do uso da funo
MarketBookAdd.
Para desfazer a subscrio de BookEvent para um ativo especificado, necessrio chamar a funo
MarketBookRelease. O evento BookEvent um evento do tipo-transmisso - isso significa que
suficiente inscrever apenas um Consultor Especializado (Expert Advisor) para este evento, e todos os
outros Consultores Especializados (Expert Advisors) que tm o manipulador de eventos OnBookEvent,
vo receb-lo. por isso que necessrio analisar o nome do ativo, que passado para um handler
como um parmetro.
Tambm Veja
Handlers de Evento, Execuo de Programa

2000-2014, MetaQuotes Software Corp.

764

Programas MQL5

Recursos
Usando grficos e som em programas MQL5
Programas em MQL5 permitem trabalhar com som e arquivos grficos:
PlaySound() executa um arquivo de som.
ObjectCreate() permite criar interfaces de usurio usando os objetos grficos OBJ_BITMAP e
OBJ_BITMAP_LABEL.

PlaySound()
Exemplo de chamada da funo PlaySound():
//+------------------------------------------------------------------+
//| A funo chama OrderSend() padro e toca um som

//+------------------------------------------------------------------+
void OrderSendWithAudio(MqlTradeRequest

&request, MqlTradeResult &result)

{
//--- envia uma solicitao para um servidor
OrderSend(request,result);
//--- se a solicitao for aceita, executa o som Ok.wav
if(result.retcode==TRADE_RETCODE_PLACED) PlaySound("Ok.wav");
//--- se falhar, toca um alarme a partir do arquivo timeout.wav
else PlaySound("timeout.wav");
}

O exemplo mostra como tocar sons a partir de arquivos 'Ok.wav' e 'timeout.wav', que esto inclusos no
pacote de terminal padro. Estes arquivos esto localizados na pasta terminal_directory\Sounds.
Aqui, terminal_directory uma pasta, a partir do qual o Terminal Cliente do MetaTrader 5 iniciado.
A localizao do diretrio do terminal pode ser encontrado a partir de um programa MQL5 da seguinte
forma:
//--- Pasta, na qual dados de terminal so armazenados
string terminal_path=TerminalInfoString(TERMINAL_PATH);

Voc pode usar arquivos de som no somente da pasta terminal_directory\Sounds, mas tambm de
qualquer sub-pasta localizada em terminal_data_directory\MQL5. Voc pode descobrir a localizao
do diretrio de dados do terminal a partir do menu do terminal "Arquivo" -> "Abrir" dados do terminal
ou usar um mtodo de programa:
//--- Pasta, na qual dados de terminal so armazenados
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);

Por exemplo, se o arquivo de som 'Demo.wav' est localizado em terminal_data_directory\MQL5\Files,


ento a chamada de PlaySound() deveria ser escrita da seguinte forma:
//--- toca Demo.wav a partir da pasta terminal_directory_data\MQL5\Files\Demo.wav
PlaySound("\\Files\\Demo.wav");

Favor notar que no comentrio o caminho do arquivo est escrito usando uma barra invertida "\", e na

2000-2014, MetaQuotes Software Corp.

765

Programas MQL5
funo usado "\\".
Ao se especificar o caminho, sempre use barras invertidas duplas como separador, porque uma nica
barra invertida um controle de smbolo para o compilador ao lidar com constantes de strings e
constantes de caracteres no cdigo fonte do programa.

ObjectCreate()
Exemplo de um Expert Advisor, que cria um rtulo grfico (OBJ_BITMAP_LABEL) usando a funo
ObjectCreate().
string label_name="currency_label";

// nome do objeto OBJ_BITMAP_LABEL

string euro

="\\Images\\euro.bmp";

// caminho do arquivo terminal_dara_directory\MQL5\Image

string dollar

="\\Images\\dollar.bmp";

// caminho do arquivo terminal_dara_directory\MQL5\Image

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- cria um boto OBJ_BITMAP_LABEL, se ele j no tiver sido criado
if(ObjectFind(0,label_name)<0)
{
//--- tenta criar objeto OBJ_BITMAP_LABEL
bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);
if(created)
{
//--- vincula o boto ao canto superior esquerdo do grfico
ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
//--- agora configura as propriedades do objeto
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,50);
//--- redefine o cdigo do ltimo erro para 0
ResetLastError();
//--- carrega uma figura para indicador o estado "Pressionado" do boto
bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,euro);
//--- testa o resultado
if(!set)
{

PrintFormat("Falha no download a partir do arquivo de imagem %s. Cdigo de erro %d",eur


}
ResetLastError();
//--- carrega uma figura para indicador o estado "No pressionado" do boto
set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,dollar);
if(!set)
{

PrintFormat("Falha no download a partir do arquivo de imagem %s. Cdigo de erro %d",dol


}

2000-2014, MetaQuotes Software Corp.

766

Programas MQL5

//--- envia um comando para um grfico para reatualizao, a fim de que o boto aparea im
ChartRedraw(0);
}
else
{
//--- falha ao criar um objeto, notificar
PrintFormat("Falha ao criar objeto OBJ_BITMAP_LABEL. Error code %d",GetLastError());
}
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- exclui um objeto de um grfico
ObjectDelete(0,label_name);
}

A criao e configurao do objeto grfico de nome currency_label so executados na funo OnInit().


Os caminhos para os arquivos grficos so definidos nas variveis globais euro e dollar, uma barra
invertida dupla usada como separador:
string euro

="\\Images\\euro.bmp";

// caminho do arquivo terminal_dara_directory\MQL5\Image

string dollar

="\\Images\\dollar.bmp";

// caminho do arquivo terminal_dara_directory\MQL5\Image

Os arquivos esto localizados na pasta terminal_data_directory\MQL5\Images.


O Objeto OBJ_BITMAP_LABEL na realizada um boto, que exibe uma das duas imagens, dependendo
do estado do boto (pressionado ou no pressionado): euro.bmp ou dollar.bmp.

O tamanho do boto com uma interface grfico automaticamente ajustada para o tamanho da

2000-2014, MetaQuotes Software Corp.

767

Programas MQL5
figura. A imagem alterada por um clique do boto esquerdo do mouse sob o objeto
OBJ_BITMAP_LABEL ("Disable selection" deve estar definida nas propriedades). O objeto
OBJ_BITMAP criado da mesma forma - ele usado para criar o pano de fundo com um imagem
necessria.
O valor da propriedade OBJPROP_BMPFILE, que responsvel pela aparncia dos objetos OBJ_BITMAP
e OBJ_BITMAP_LABEL, e pode ser alterado dinamicamente. Isso permite criar vrias interfaces
interativas de usurio para programas MQL5.

Incluso de recursos em arquivos executveis durante compilao


de programas MQL5
Um programa mql5 pode precisar de um monte de diferentes recursos baixveis na forma de arquivos
de imagem e som. A fim de eliminar a necessidade de transferir todos estes arquivos ao mover um
arquivo executvel em MQL5, a diretriz do compilador #resource deve ser usada:
#resource path_to_resource_file

O comando #resource diz ao compilador que o recurso no caminho especificado path_to_resource_file


deve ser includo dentro do arquivo executvel EX5. Assim, todos os sons e imagens necessrios
podem ser alocados diretamente dentro de um arquivo EX5, de modo que no exista necessidade de
transferir separadamente os arquivos nele usados, caso voc queira executar o programa em um
terminal diferente. Qualquer arquivo EX5 pode conter recursos, e qualquer programa EX5 pode usar
recursos de um outro programa EX5.
Os arquivo em formato BMP e WAV so automaticamente comprimidos antes de serem includos em
um arquivo EX5. Isso significa que alm de criar programas completos em MQL5, o uso de recursos
tambm permite reduzir o tamanho total dos arquivos necessrios ao usar grficos e sons, quando
comparado com a forma usual de escrever um programa MQL5.
O arquivo de recurso no deve exceder 16 Mb.

Busca por recursos especficos pelo compilador


Um recurso inserido usando o comando #resorce "<path to the resource file>"
#resource "<path_to_resource_file>"

O comprimento da constante string <path_to_resource_file> no de exceder 63 caracteres.


O compilador busca por um recurso no caminho especificado na seguinte ordem:
se o separador barra invertida "\" (escrito como "\\") colocado no comeo do caminho, ele busca
pelo recurso referente ao diretrio terminal_data_directory\MQL5\,
se no houver barra invertida, ele busca pelo recurso referente localizao do arquivo de recurso,
na qual o recurso foi escrito.
O caminho do recurso no pode conter as sub-strings "..\\" e ":\\".

2000-2014, MetaQuotes Software Corp.

768

Programas MQL5
Exemplos de incluso de recurso:
//--- correct specification of resources
#resource "\\Images\\euro.bmp" // euro.bmp est localizado em terminal_data_directory\MQL5\Images\
#resource "picture.bmp"

// picture.bmp est localizado no mesmo diretoria que o arquivo font

#resource "Resource\\map.bmp"

// the resource is located in source_file_directory\Resource\map.bmp

//--- especificao incorreta de recursos


#resource ":picture_2.bmp"

// no deve conter ":"

#resource "..\\picture_3.bmp"

// no deve conter ".."

#resource "\\Files\\Images\\Folder_First\\My_panel\\Labels\\too_long_path.bmp" //mais que 63 smbol

Uso de Recursos
Nome de recurso
Aps um recurso ser declarado usando a diretiva #resource, ele pode ser usado em qualquer parte de
um programa. O nome do recurso seu caminho sem uma barra invertida no comeo da linha, que
define o caminho do recurso. Para usar seu prprio recurso no cdigo, o sinal especial "::" deve ser
adicionado antes do nome do recurso.
Exemplos:
//--- exemplos de especificao de recurso e seus nomes em comentrios
#resource "\\Images\\euro.bmp"

// nome do recurso - Images\euro.bmp

#resource "picture.bmp"

// nome do recurso - picture.bmp

#resource "Resource\\map.bmp"

// nome do recurso - Resource\map.bmp

#resource "\\Files\\Pictures\\good.bmp" // nome do recurso - Files\Pictures\good.bmp


#resource "\\Files\\Demo.wav";

// nome do recurso - Files\Demo.wav"

#resource "\\Sounds\\thrill.wav";

// nome do recurso - Sounds\thrill.wav"

...
//--- utilizao dos recursos
ObjectSetString(0,bitmap_name,OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
...
ObjectSetString(0,my_bitmap,OBJPROP_BMPFILE,0,"::picture.bmp");
...
set=ObjectSetString(0,bitmap_label,OBJPROP_BMPFILE,1,"::Files\\Pictures\\good.bmp");
...
PlaySound("::Files\\Demo.wav");
...
PlaySound("::Sounds\\thrill.wav");

Deve se notar que ao definir imagens a partir de um recurso para os objetos OBJ_BITMAP e
OBJ_BITMAP_LABEL, o valor da propriedade OBJPROP_BMPFILE no pode ser modificado manualmente.
Por exemplo, para criar OBJ_BITMAP_LABEL ns usados euro.bmp e dollar.bmp.
#resource "\\Images\\euro.bmp";

// euro.bmp est localizado em terminal_data_directory\MQL5\Imag

#resource "\\Images\\dollar.bmp";

// dollar.bmp est localizado em terminal_data_directory\MQL5\Im

2000-2014, MetaQuotes Software Corp.

769

Programas MQL5
Ao visualizar as propriedades deste objeto, veremos que as propriedades BitMap File (On) e BitMap
File (Off) so esmaecidas e no podem ser alteradas manualmente:

Usando os recursos em outros programas MQL5


Existe uma outra vantagem no uso de recurso em qualquer programa MQL5, os recursos de um outro
arquivo EX5 podem ser usados. Assim, os recursos de um arquivo EX5 podem ser usados em muitos
outros programas MQL5.
A fim de usar um nome de recurso de um outro arquivo, ele deve ser especificado como
<path_EX5_file_name>::<resource_name>.
Por
exemplo,
suponha
que
o
script
Draw_Triangles_Script.mq5 contm um recurso para uma imagem no arquivo triangle.bmp:
#resource "\\Files\\triangle.bmp"

Ento seu nome, para uso no script em si, se assemelhar a "Files\triangle.bmp", e a fim de us-lo,
"::" deve ser adicionado ao nome do recurso.
//--- usando o curso no script
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"::Files\\triangle.bmp");

A fim de usar o mesmo recurso a partir de um outro programa, por exemplo, a partir de um Expert
Advisor, precisamos adicionar ao nome do recurso o caminho para o arquivo EX5 correspondente ao
terminal_data_directory\MQL5\ e o nome arquivo EX5 do script - Draw_Triangles_Script.ex5.
Suponha que o script est localizado na pasta padro terminal_data_directory\MQL5\Scripts\, ento
o chamado deve ser escrito da seguinte forma:
//--- usando um recurso de um script em um EA

ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"\\Scripts\\Draw_Triangles_Script.ex5::Files\\tr

Se o caminho para o arquivo executvel no for especificado ao chamar o recurso de um outro EX5, o
arquivo executvel procurado na mesma pasta que contm o programa que chama o recurso. Isso
significa que se um Expert Advisor chamar um recurso de Draw_Triangles_Script.ex5 sem especificar o

2000-2014, MetaQuotes Software Corp.

770

Programas MQL5
caminho, como abaixo:
//--- chama recurso de script em um EA sem especificar o caminho

ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"Draw_Triangles_Script.ex5::Files\\triangle.bmp"

ento o arquivo ser procurado na pasta terminal_data_directory\MQL5\Experts\, caso o Expert


Advisor esteja localizado em terminal_data_directory\MQL5\Experts\.

Working with custom indicators included as resources


One or several custom indicators may be necessary for the operation of MQL5 applications. All of them
can be included into the code of an executable MQL5 program. Inclusion of indicators as resources
simplifies the distribution of applications.
Below is an example of including and using SampleIndicator.ex5 custom indicator located in
terminal_data_folder\MQL5\Indicators\ directory:
//+------------------------------------------------------------------+
//|

SampleEA.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#resource "\\Indicators\SampleIndicator.ex5"
int handle_ind;
//+------------------------------------------------------------------+
//| Expert initialization function

//+------------------------------------------------------------------+
int OnInit()
{
//--handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5");
if(handle_ind==INVALID_HANDLE)
{
Print("Expert: iCustom call: Error code=",GetLastError());
return(INIT_FAILED);
}
//--- ...
return(INIT_SUCCEEDED);
}

The case when a custom indicator in OnInit() function creates one or more copies of itself requires
special consideration. Please keep in mind that the resource should be specified in the following way:
<path_EX5_file_name>::<resource_name>.
For example, if SampleIndicator.ex5 indicator is included to SampleEA.ex5 Expert Advisor as a
resource, the path to itself specified when calling iCustom() in the custom indicator's initialization
function looks the following way: "\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5". When
this path is set explicitly, SampleIndicator.ex5 custom indicator is rigidly connected to SampleEA.ex5
Expert Advisor losing ability to work independently.

2000-2014, MetaQuotes Software Corp.

771

Programas MQL5
The path to itself can be received using GetRelativeProgramPath() function. The example of its usage
is provided below:
//+------------------------------------------------------------------+
//|

SampleIndicator.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property indicator_separate_window
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function

//+------------------------------------------------------------------+
int OnInit()
{
//--- the wrong way to provide a link to itself
//--- string path="\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5";
//--- the right way to receive a link to itself
string path=GetRelativeProgramPath();
//--- indicator buffers mapping
handle=iCustom(_Symbol,_Period,path,0,0);
if(handle==INVALID_HANDLE)
{
Print("Indicator: iCustom call: Error code=",GetLastError());
return(INIT_FAILED);
}
else Print("Indicator handle=",handle);
//--return(INIT_SUCCEEDED);
}
///....
//+------------------------------------------------------------------+
//| GetRelativeProgramPath

//+------------------------------------------------------------------+
string GetRelativeProgramPath()
{
int pos2;
//--- receive the absolute path to the application
string path=MQL5InfoString(MQL5_PROGRAM_PATH);
//--- find the position of "\MQL5\" substring
int

pos =StringFind(path,"\\MQL5\\");

//--- substring not found - error


if(pos<0)
return(NULL);
//--- skip "\MQL5" directory
pos+=5;
//--- skip extra '\' symbols
while(StringGetCharacter(path,pos+1)=='\\')

2000-2014, MetaQuotes Software Corp.

772

Programas MQL5
pos++;
//--- if this is a resource, return the path relative to MQL5 directory
if(StringFind(path,"::",pos)>=0)
return(StringSubstr(path,pos));
//--- find a separator for the first MQL5 subdirectory (for example, MQL5\Indicators)
//--- if not found, return the path relative to MQL5 directory
if((pos2=StringFind(path,"\\",pos+1))<0)
return(StringSubstr(path,pos));
//--- return the path relative to the subdirectory (for example, MQL5\Indicators)
return(StringSubstr(path,pos2+1));
}

Tambm Veja
ResourceCreate(), ResourceSave(), PlaySound(), ObjectSetInteger(), ChartApplyTemplate(), Funes
de Arquivo

2000-2014, MetaQuotes Software Corp.

773

Programas MQL5

Chamadas de Funes Importadas


Para importar funes durante a execuo de um programa-mql5, o terminal cliente usar "early
binding". Isso significa que se um programa tem uma chamada de uma funo importada, o
correspondente mdulo (ex5 ou dll) carregada durante a carga do programa. MQL5 e bibliotecas DLL
so executadas na thread do mdulo da chamada.
No recomendado usar o nome do mdulo com especificao completa para ser carregado, como
Drive:\Directory\FileName.Ext. As bibliotecas MQL5 so carregadas a partir da pasta terminal_dir
\MQL5\Libraries. Se a biblioteca no for encontrada, ento o terminal tenta carreg-la a partir da
pasta terminal_dir\experts.
As bibliotecas de sistema (DLL) so carregadas pelas regras do sistema operacional. Se a biblioteca j
estiver carregada (por exemplo, um outro Expert Advisor, e mesmo a partir de um outro terminal
cliente, executando em paralelo, ento ele faz solicitaes para a biblioteca j carregada. Caso
contrrio, ele realiza uma busca na seguinte seqncia:
1. Diretrio do qual o mdulo que importa a dll foi iniciado. O mdulo aqui um Expert Advisor, um
script, um indicador ou uma biblioteca EX5.
2. Diretrio terminal_data_directory\MQL5\Libraries (TERMINAL_DATA_PATH\MQL5\Libraries).
3. Diretrio do qual o terminal cliente MetaTrader 5 foi iniciado.
4. Diretrio de sistema.
5. Diretrio do Windows.
6. Diretrio corrente.
7. Diretrios listados na varivel de sistema PATH.
Se uma biblioteca DLL usa uma outra DLL no seu funcionamento, a primeira DLL no pode ser
carregada no caso de no existir a segunda DLL.
Antes de um Expert Advisor (script, indicador) ser carregado, uma lista comum de todos os mdulos
de biblioteca EX5 formada. Vai ser usado a partir de um Expert Advisor carregado(script, indicador)e
das bibliotecas desta lista. Assim, necessrio apenas uma nica carga de mdulos de bibliotecas EX5
usadas muitas vezes. Bibliotecas usam variveis predefinidas do Expert Advisor (script, indicador) que
as chamam.
A biblioteca importada EX5 procurada na seguinte seqncia:
1. Diretrio, caminho correspondente ao diretrio do Expert Advisor (script, indicador) que importa o
EX5).
2. Diretrio terminal_directory\MQL5\Libraries.
3. Diretrio MQL5\Libraries no diretrio comum a todos os terminais clientes MetaTrader 5 (Common
\MQL5\Libraries).
Funes importadas DLL em um programa-mql5 devem garantir a conformidade de chamadas do
Windows API. Para garantir tal conformidade, no texto fonte de programas escritos em C ou C++, use
a palavra-chave _stdcall, que especfico para os compiladores Microsoft(r). Esta conformidade
caraterizada pelo seguinte:
Chamador (no nosso caso, um programa-mql5) deve "ver" um proto-tipo de uma funo chamada
(importado da DLL), a fim de combinar parmetros em uma pilha de forma apropriada.
Chamador (em nosso caso, um programa-mql5) coloca parmetros na pilha em uma ordem

2000-2014, MetaQuotes Software Corp.

774

Programas MQL5
reversa, da direita para esquerda - nesta ordem uma funo l os parmetros passados para ela.
parmetros so passados por valor, exceto aqueles explicitamente passados por referncia (em
nossos casos de strings)
Uma funo importada limpa a pilha de forma independente atravs da leitura dos parmetros
passados para ela.
Ao descrever o proto-tipo de uma funo importada, parmetros padro podem ser usados.
Se a biblioteca correspondente incapaz de ser carregada, ou existe uma proibio quanto ao uso da
DLL, ou a funo importada no encontrada - o Expert Advisor interrompe sua operao com a
mensagem apropriada "Expert Advisor stopped" no Dirio (arquivo de log). Neste caso o Expert
Advisor no rodar at ser reiniciado. Um Expert Advisor pode ser reiniciado como resultado de
recompilao ou aps a tabela de suas propriedades ser aberto e OK ser pressionado.

Passando Parmetros
Todos os parmetros de tipos simples so passados por valor a menos que sejam explicitamente
indicados que eles devem ser passados por referncia. Quando uma string passada, o endereo do
buffer da string copiada passado; se uma string passada por referncia, o endereo do buffer
desta string sem copi-la passado para a funo importada da DLL.
Estruturas que contm arrays dinmicos, strings, classes, outras estruturas complexas, bem como
arrays estticos ou dinmicos dos objetos listados, no podem ser passados como parmetro para uma
funo importada.
Ao passar um array para uma DLL, o endereo do comeo do buffer de dados sempre passado
(independentemente da flag AS_SERIES). Uma funo dentro de uma DLL no sabe nada sobre a flag
AS_SERIES, o array passado um array esttico de um comprimento indefinido; um parmetro
adicional deve ser usado para especificar o tamanho do array.

2000-2014, MetaQuotes Software Corp.

775

Programas MQL5

Erros em Tempo de Execuo


O subsistema de execuo do terminal cliente tem a oportunidade de salvar o cdigo do erro em caso
de ocorrncia durante a execuo de um programa MQL5. Existe um varivel predefinida _LastError
para cada programa executvel MQL5.
Antes de iniciar a funo OnInit, a varivel _LastError zerada. Em caso de uma situao de erro
ocorrer durante a processamento de clculos ou no processo de chamada de funes internas, o a
varivel _LastError recebe o cdigo do erro correspondente. O valor armazenado nesta varivel pode
ser obtida usando a funo GetLastError().
Existem diversos erros crticos cuja ocorrncia faz com que um programa seja encerrado
imediatamente:
diviso por zero
ir alm dos limites de um array
usando um ponteiro de objeto incorreto

2000-2014, MetaQuotes Software Corp.

776

Programas MQL5

Testando Estratgias de Negociao


A ideia de negociao automtica atraente pelo fato de que o rob de negociao pode trabalhar
sem parar 24 horas por dia, sete dias por semana. O rob no fica cansado, em dvida, ou com medo,
ele totalmente livre de quaisquer problemas psicolgicos. Basta formalizar de forma clara as regras
de negociao e implement-las nos algoritmos, e o rob est pronto para trabalhar incansavelmente.
Mas primeiro, voc deve se certificar de que as duas condio importantes seguintes esto
satisfeitas:
O Expert Advisor realiza operaes de negociao em concordncia com as regras do sistema de
negociao;
A estratgia de negociao, implementada no EA, demonstra lucro no histrico.
Para obter respostas para estas questes, nos voltamos para o Provador de Estratgia, includo no
terminal cliente MetaTrader 5.
Esta seo aborda as caractersticas do teste e otimizao de programa no Provador de Estratgia:
Modos de Gerao de Tick
Simulao de Spread
As Variveis Globais do Terminal Cliente
O Clculo de Indicadores durante um Teste
Carregando Histrico durante Teste
Teste Multi-Moeda
Simulao de Tempo no Provador de Estratgia
Objetos Grficos no Teste
A Funo OnTimer() no Provador de Estratgia
A Funo Sleep() no Provador de Estratgia
A funo Print() no Provador de Estratgia
Usando o Provador de Estratgia para Problemas de Otimizao em Clculos Matemticos
A Sincronizao de Barras no modo "Somente Preo de Abertura"
A funo IndicatorRelease() no Provador de Estratgia
Tratamento de Evento no Provador de Estratgia
Agentes de Teste
A Troca de Dados entre o Terminal e o Agente
Usando a Pasta Compartilhada para Todos os Terminais Cliente
Usando DLLs

Modos de Gerao de Tick


Um Expert Advisor um programa, escrito em MQL5, que rodado a cada instante em resposta a
algum evento externo. O EA tem uma funo correspondente (handler de evento) para cada evento
pr-definido.
O evento NewTick (mudana de preo) o evento principal para o EA e, portanto, precisamos gerar
um seqncia de ticks para testar o EA. Existem 3 modos de gerao de tick implementada no

2000-2014, MetaQuotes Software Corp.

777

Programas MQL5
Provador de Estratgia do terminal cliente MetaTrader 5:
Cada Tick
OHLC por minuto (preos OHLC, Open-High-Low-Close, com barras de minuto)
Somente Preos de Abertura
O bsico e mais detalhado o modo "Cada Tick", os outros dois modos so simplificaes do modo
bsico, e sero descritos em comparao com o modo "Cada Tick". Considere todos os trs modos em
ordem para entender as diferenas entre eles.

"Cada Tick"
Os dados de cotao histrica para instrumentos financeiros so transferidos do servidor de
negociao para o terminal cliente MetaTrader 5 na forma de barras de minuto empacotadas.
Informaes detalhadas sobre a ocorrncia de solicitaes e a construo das janelas de tempo
requiridas podem ser obtidas a partir do captulo Organizando Acesso a Dados da Referncia MQL5.
O elemento mnimo do histrico de preos a barra de minuto, a partir do qual pode-se obter
informaes sobre os quatro valores de preos:
Abertura (Open) - o preo em que a barra de minuto foi aberta;
Mximo (High) - o mximo que foi alcanado durante esta barra de minuto;
Mnimo (Low) - o mnimo que foi alcanado durante esta barra de minuto;
Fechamento (Close) - o preo de fechamento da barra.
A nova barra de minuto no aberta no momento que o novo minuto comea (nmero de segundos se
torna igual a 0), mas quando um tick ocorre - uma alterao de preo de no mnimo um ponto. A
figura mostra a primeira barra de minuto da nova semana de negociao, que tem a hora de abertura
de 2011.01.10 00:00. A diferena de preos entre Sexta e Segunda, que ns vemos no grfico
comum, j que taxas de moeda flutuam mesmo em fins-de-semana em resposta ao surgimento de
notcias.

2000-2014, MetaQuotes Software Corp.

778

Programas MQL5
Para esta barra, ns sabemos apenas que a barra de minuto foi aberta em 10 de Janeiro de 2011 s 00
horas 00 minutos, mas ns no sabemos nada sobre os segundos. Ela poderia ter sido aberta s
00:00:12 ou 00:00:36 (12 ou 36 segundos aps o inicio de um novo dia) ou qualquer outro instante
dentro daquele minuto. Mas ns sabemos que o preo de Abertura do EURUSD foi de 1.28940 no
instante de abertura da nova barra de minuto.
Ns tambm no sabemos, em termos de segundos, quando o tick, correspondente ao preo de
fechamento da barra de minuto considerada, foi recebido. Ns s sabemos uma coisa - o ltimo preo
de Fechamento da barra de minuto. Para este minuto, o preo foi 1.28958. Os instantes de
aparecimento dos preos de Mximo e Mnimo tambm so desconhecidos, mas ns sabemos que os
preos mximo e mnimo foram nos nveis de 1.28958 e 1.28940, respectivamente.
Para testar a estratgia de negociao, ns precisamos de uma seqncia de ticks, na qual o trabalho
do Expert Advisor ser simulado. Assim, para toda barra de minuto, ns conhecemos os 4 pontos de
controle, onde os preos definitivamente estiveram. Se uma barra tem apenas 4 ticks, ento isso
informao suficiente para realizar um teste, mas geralmente o volume de tick maior que 4.
Portanto, existe a necessidade de gerar pontos de controle adicionais para ticks, que ocorreram entre
os preos de Abertura, Mximo, Mnimo, e Fechamento. O princpio do modo de gerao de ticks
"Cada tick" descrito dentro do O Algoritmo de Gerao de Ticks dentro da Testador de Estratgia do
Terminal MetaTrader 5, um nmero a partir do qual apresentado a baixo.

Ao testar no modo "Cada Tick", a funo OnTick() do EA ser chamado a cada ponto de controle. Cada
ponto de controle um tick de uma seqncia gerada. O EA receber a hora e preo do tick simulado,
assim como se estivesse trabalhando online.
Importante: o modo de teste "Cada Tick" o mais preciso, mas ao mesmo tempo, o que
consome mais tempo. Para um teste inicial da maioria das estratgias de negociao,
geralmente suficiente usar um dos outros dois modos de teste.

"OHLC por minuto"


O modo "Cada Tick" o mais preciso dos trs modos, mas ao mesmo tempo, o mais lento. A
execuo do handler OnTick() ocorre a cada tick, a mesmo tempo que o volume de tick pode ser muito
grande. Para uma estratgia, na qual a seqncia de ticks da movimentao de preos em toda barra
no importa, existe um modo de simulao mais rpido e grosseiro - "OHLC por minuto".

2000-2014, MetaQuotes Software Corp.

779

Programas MQL5
No modo "OHLC por minuto", a seqncia de ticks construda somente pelos preos OHLC das
barras de minuto, o nmero de pontos de controle gerados significativamente reduzido - assim
como o tempo de teste. O disparo da funo OnTick() realizada sob todos os pontos de controle, que
so construdos pelos preos OHLC das barras de minuto.
A opo de no gerar ticks intermedirios adicionais entre os preos de Abertura, Mximo, Mnimo e
Fechamento, leva ao aparecimento de um rgido determinismo na evoluo dos preos, a partir do
momento que o preo de Abertura determinado. Isso torna possvel criar um "Teste Graal", que
mostra um agradvel grfico ascendente do saldo do teste.
Um exemplo de tal Graal apresentado no Cdigo Base - Grr-al.

A figura mostra um grfico muito atrativo deste teste de EA. Como ele foi obtido? Ns conhecemos 4
preos para uma barra de minuto, e ns sabemos que o primeiro preo de Abertura, e o ltimo o
preo de Fechamento. Ns temos os preos Mximo e Mnimo entre eles, e a seqncia de suas
ocorrncias desconhecida, mas sabido que o preo Mximo maior ou igual que o preo de
Abertura (e o preo Mnimo menor ou igual ao preo de Abertura).
suficiente determinar o momento da recepo do preo de Abertura, e ento analisar o prximo tick
a fim de determinar que preo ns temos no momento - ou o Mximo ou o Mnimo. Se o preo for
abaixo do preo de Abertura, ento ns temos um preo Mnimo e comprarmos neste tick, o prximo
tick corresponder ao preo Mximo, no qual ns encerramos a compra e abrimos para venda. O
prximo tick o ltimo, este o preo de Fechamento, e encerramos a venda nele.
Se aps o preo, ns recebermos um tick com um preo maior que o preo de Abertura, ento a
seqncia de operaes (deals) invertida. Processe uma barra de minuto neste modo "trapaceiro", e
espere para pela prxima barra.
Ao testar tal EA no histrico, tudo vai bem, mas uma vez que lanamos ele online, a verdade comea a
ser revelada - a linha de saldo permanece regular, porm em direo descendente. Para expor este
truque, ns simplesmente precisamos executar o EA no modo "Cada Tick".
Observao: Se os resultados do teste do EA em modos de teste grosseiros ("OHLC por minuto" e
"Somente Preos de Abertura") parecerem muito bons, certifique-se de testar-lo no modo "Cada
Tick".

"Somente Preos de Abertura"


Neste modo os ticks so gerados baseados nos preos OHLC das janelas de tempo selecionados para

2000-2014, MetaQuotes Software Corp.

780

Programas MQL5
teste. A funo OnTick() do Expert Advisor roda somente no comeo da barra, no preo de Abertura.
Devido a este caracterstica, nveis de stop e ordens pendentes podem disparar em um preo que
difere do preo especificado (especialmente ao testar em janelas de tempo mais altas). Em
contrapartida, ns temos uma oportunidade de executar rapidamente um teste de avaliao do Expert
Advisor.
Os perodos W1 e MN1 so excees no modo de gerao de ticks "Somente Preos de Abertura": para
estas janelas de tempo, ticks so gerados para os preos OHLC de cada dia, e no preos OHLC da
semana ou ms.
Suponha que ns testemos um Expert Advisor sob EURUSD H1 no modo "Somente Preos de Abertura".
Neste caso o nmero total de ticks (pontos de controle) no ser mais que 4 * nmero de barras de
uma-hora dentro do intervalo testado. Mas o handler OnTick() chamado somente na abertura da
barra de uma-hora. As verificaes requeridas para um teste correto ocorrem no resto dos ticks (que
so "escondidas" do EA).
O clculo de requerimentos de margem;
O disparo de nveis de Stop Loss e Take Profit;
O disparo de ordens pendentes;
A remoo de ordens pendentes expiradas.
Se no existirem nenhum posio aberta ou ordens pendentes, ns no precisamos realizar destas
verificaes nos ticks escondidos, e o aumento da velocidade pode ser bastante substancial. Este
modo "Somente Preos de Abertura" bem adequado para testar estratgias que processam operaes
(deals) somente na abertura da barra e no usam ordens pendentes, bem como ordens Stop Loss e
Take Profit. Para estratgias deste tipo, a necessidade de preciso do teste preservada.
Vamos usar o Expert Advisor Moving Average (Mdia Mvel) do pacote padro como exemplo de um
EA, que pode ser testado em qualquer modo. A lgica deste EA construdo de tal forma que todas as
decises so feitas na abertura da barra, e operaes (deals) so executadas imediatamente, sem o
uso de ordens pendentes.
Executar um teste de EA no EURUSD H1 sobre um intervalo a partir de 2010.09.01 to 2010.12.31, e
comparar os grficos. A figura mostra o grfico de saldo do relatrio de teste para todos os trs
modos.

2000-2014, MetaQuotes Software Corp.

781

Programas MQL5

Como se pode ver, os grficos nos diferentes modos de teste so exatamente o mesmo para o EA
Moving Average do pacote padro.
Existem algumas limitaes no modo "Somente Preos de Abertura":
Voc no pode usar o modo de execuo Atraso Aleatrio.
No Expert testado, voc no pode acessar os dados do perodo inferior do perodo utilizado para o
teste/otimizao. Por exemplo, se voc rodar um teste em M20, voc no pode acessar dados de
M30, mas possvel acessar H1. Alm disso, os perodos superiores que so acessados devem ser
mltiplos do perodo do teste. Por exemplo, se voc rodar um teste em M20, voc no pode acessar
dados de M30, mas possvel acessar H1. Estas limitaes esto relacionadas com a
impossibilidade de se obter dados de perodos inferiores ou no mltiplos de fora das barras geradas
durante o teste/otimizao.
Limitaes no acesso a dados de outros perodos tambm se aplicam a outros ativos cujos dados
so usados pelo Expert Advisor. Neste caso, a limitao para cada ativo depende do primeiro
perodo acessado durante o teste/otimizao. Suponha que durante teste em EURUSD H1, um Expert
Advisor acesse dados de GBPUSD M20. Neste caso, o Expert ser capaz de continuar a usar os dados
de EURUSD H1, H2, etc, bem como GBPUSD M20, H1, H2, etc.
Observao: O modo "Somente Preos de Abertura" tem o mais rpido tempo de teste, mas no
adequado para todas as estratgias de negociao. Selecione o modo de teste desejado baseado
nas caractersticas do sistema de negociao.
Para concluir a seo sobre os modos de gerao de tick, vamos considerar uma comparao visual
dos diferentes modos de gerao de tick para EURUSD, para duas barras de M15 no intervalo de
2011.01.11 21:00:00 - 2011.01.11 21:30:00.
Os ticks foram salvos em arquivos diferentes usando o EA WriteTicksFromTester.mq5 e o fim desses
nomes de arquivos so especificados nos parmetros de entrada filenameEveryTick, filenameOHLC e
filenameOpenPrice input-parameters.

2000-2014, MetaQuotes Software Corp.

782

Programas MQL5

Para obter trs arquivos com trs seqncias de tick (para cada um dos seguintes modos: "Cada Tick",
"OHLC por minuto" e "Somente Preos de Abertura"), o EA foi disparado trs vezes nos modos
correspondentes, em execues individuais. Ento, os dados destes trs arquivos foram exibidos no
grfico usando o indicador TicksFromTester.mq5. O cdigo do indicador est anexado neste artigo.

Por padro, todos as operaes de arquivo na linguagem MQL5 so feitas dentro da "caixa de areia de
arquivo" e durante um teste o EA tem acesso somente a sua prpria "caixa de areia de arquivo". A fim
de que o indicador e o EA trabalhem com arquivos provenientes de uma pasta comum durante o teste,
ns usados o flag FILE_COMMON. Um exemplo de cdigo do EA:
//--- abre o arquivo
file=FileOpen(filename,FILE_WRITE|FILE_CSV|FILE_COMMON,";");
//--- verifica a handle de arquivo
if(file==INVALID_HANDLE)
{

PrintFormat("Erro na abertura do arquivo %s para escrever. Erro de codigo=%d",filename,GetLas


return;
}
else
{

PrintFormat("O arquivo ser criado na %s pasta",TerminalInfoString(TERMINAL_COMMONDATA_PATH))

2000-2014, MetaQuotes Software Corp.

783

Programas MQL5
}

Para ler dos dados no indicador, ns tambm usamos o flag FILE_COMMON. Isso ns permite evitar
transferir manualmente os arquivos necessrios de uma pasta para outra.
//--- abre o arquivo
int file=FileOpen(fname,FILE_READ|FILE_CSV|FILE_COMMON,";");
//--- verifica a handle de arquivo
if(file==INVALID_HANDLE)
{

PrintFormat("Erro na abertura do arquivo %s para leitura. Erro de codigo=%d",fname,GetLastErr


return;
}
else
{
PrintFormat("Arquivo ser aberto a partir %s",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
}

Simulao de Spread
A diferena de preo entre os preos de Venda (Bid) e Compra (Ask) chamado de spread. Durante um
teste, o spread no modelado mas obtido a partir de dados histricos. Se o spread for menor ou
igual a zero nos dados histricos, ento o ltimo spread conhecido usado pelo agente de teste.
No Provador de Estratgia, o spread sempre considerado flutuante. Isto , a funo
SymbolInfoInteger(symbol, SYMBOL_SPREAD_FLOAT) sempre retorna true.
Alm disso, os dados histricos contm valores de tick e volumes de negociao. Para o
armazenamento e recuperao dos dados ns usamos a estrutura especial MqlRates:
struct MqlRates
{
datetime time;

// Hora de incio do perodo

double

open;

// Preo de Abertura

double

high;

// O mais alto preo do perodo

double

low;

// O mais baixo preo do perodo

double

close;

// Preo de Fechamento

long

tick_volume;

// Volume de Tick

int

spread;

// Spread

long

real_volume;

// Volume de Negociao

};

As Variveis Globais do Terminal Cliente


Durante um teste, as variveis globais do terminal cliente so tambm emulados, mas elas no esto
relacionadas como as variveis globais correntes do terminal, que podem ser vistas no terminal
usando a tecla F3. Significa que todas as operaes com as variveis globais do terminal, durante um
teste, acontecem fora terminal cliente (no agente de teste).

O Clculo de Indicadores durante um Teste

2000-2014, MetaQuotes Software Corp.

784

Programas MQL5
No modo tempo-real, os valores de um indicador so calculados a cada tick. O Provador de Estratgia
adotou um modelo de custo-benefcio para calcular indicadores - indicadores so recalculados somente
imediatamente antes da execuo do EA. Significa que o reclculo dos indicados feito antes da
chamada das funes OnTick(), OnTrade() e OnTimer().
No importa se existe ou no uma chamada para um indicador em um handler de evento
especfico, todos os indicadores, os handles que foram criados pelas funes iCustom() ou
IndicatorCreate(), sero recalculados antes de chamar o handler de evento.
Conseqentemente, ao testar no modo "Cada Tick", o clculo dos indicadores acontecem antes da
chamada da funo OnTick().
Se o timer est ativo no EA, usando a funo EventSetTimer(), ento os indicadores sero
recalculados antes de cada chamada ao handler de evento OnTimer(). Por conseqncia, o tempo de
teste pode ser aumentar consideravelmente com o uso de indicadores, escritos de uma forma no
otimizada.

Carregando Histrico durante Teste


O histrico de um ativo a ser testado sincronizado e carregado pelo terminal a partir do servidor de
negociao antes de comear o processo de teste. Durante a primeira vez, o terminal carrega todo o
histrico disponvel de um ativo de forma a no requerer este histrico mais tarde. Aps isso,
somente dados novos so carregados.
Um agente de teste recebe o histrico de um ativo a ser testado a partir do terminal cliente logo aps
o comeo do teste. Se os dados de outros instrumentos so usados no processo de teste (por exemplo,
um Expert Advisor multi-moeda), o agente de teste solicita o histrico requerido do terminal cliente
durante a primeira chamada a tais dados. Se os dados histricos estiverem disponveis no terminal,
eles so imediatamente passados para o agente de teste. Se os dados no estiverem disponveis, o
terminal solicita e os baixa do servidor, e ento os passa para o agente de teste.
Dados de instrumentos adicionais tambm so requeridos para calcular taxas-cruzadas de operaes
de negociao. Por exemplo, ao testar uma estratgia em EURCHF com a moeda de depsito em USD,
antes de processar a primeira operao de negociao, o agente de teste solicita os dados histricos
de EURUSD e USDCHF do terminal cliente, embora a estratgia no contenha chamadas de uso direta a
estes ativos.
Antes de testar um estratgia multi-moeda, recomendvel baixar todos os dados histricos
necessrios para o terminal cliente. Isso ajudar a evitar atrasos em um teste/otimizao associado
com a baixa dos dados requeridos. Voc pode baixar histrico, por exemplo, via abertura dos grficos
apropriados e rol-los para o comea do histrico. Um exemplo de carga forada de histrico para o
terminal est disponvel na seo Organizando Acesso a Dados da Referncia MQL5.
Agentes de teste, por sua vez, recebem o histrico do terminal no formato compactado. Durante o
prximo teste, o Provador de Estratgia no carrega o histrico do terminal, porque os dados
requeridos esto disponveis desde a execuo anterior do Provador de Estratgia.

2000-2014, MetaQuotes Software Corp.

785

Programas MQL5

O termianl carrega o histrico a partir de um servidor de negociao apenas uma vez, na


primeira vez que o agente solicita o histrico de um ativo a ser testado do terminal. O histrico
carregado em forma de pacote para reduzir o trfego.
Ticks no so enviados pela rede, eles so gerados nos agentes de teste.

Teste Multi-Moeda
O Provador de Estratgia nos permite realizar um teste de estratgias, negociando em mltiplos
ativos. Tais EAs so convencionalmente referidos como Expert Advisors multi-moedas, j que
originalmente, um teste era realizado somente para um nico ativo. No Provador de Estratgia do
terminal MetaTrader 5, ns podemos modelar negociao para todos os ativos disponveis.
O Provador de Estratgia carrega o histrico dos ativos usados do terminal cliente (no do servidor
de negociao!) automaticamente durante a primeira chamada aos dados do ativo.
O agente de teste baixa somente o histrico faltante, com uma pequena margem para fornecer os
dados necessrios no histrico para o clculo dos indicadores no perodo inicial do teste. Para as
janelas de tempo D1 ou menor, o volume mnimo de histrico baixado de um ano.
Assim, se ns rodarmos um teste no intervalo 2010.11.01-2010.12.01 (teste para um intervalo de um
ms) com um perodo de M15 (cada barra e igual a 15 minutos), ento ser solicitado ao terminal o
histrico do instrumento para o ano inteiro de 2010. Para a janela de tempo semanal, ns
solicitaremos um histrico de 100 barras, que aproximadamente dois anos (um ano tem 52
semanas). Para testar em uma janela de tempo mensal, o agente solicitar o histrico de 8 anos (12
meses x 8 anos = 96 meses).
Se no houver barras necessrias, a data de nicio do teste ser automaticamente deslocada do
passado para o presente para fornecer a reserva necessria de barras antes do teste.
Durante um teste, a janela "Observao de Mercado" tambm emulada, a partir do qual se pode
obter informaes sobre os ativos.
Por padro, no comeo de um teste, existe somente um ativo na "Observao de Mercado" do
Provador de Estratgia - o ativo em que o teste est rodando. Todos os ativos necessrios so
conectados janela "Observao de Mercado" do Provador de Estratgia (no ao terminal!)
automaticamente quando referenciados.
Antes de comear um teste de um Expert Advisor multi-moeda, necessrio selecionar os ativos
requeridos para o teste na janela "Observao de Mercado" do terminal e carregar os dados
requeridos. Durante a primeira chamada de um ativo "estrangeiro", seu histrico ser
automaticamente sincronizado entre o agente de teste e o terminal cliente. Um ativo
"estrangeiro" o outro ativo, diferente daquele em que o teste rodado.
Referncia aos dados de um "outro" ativo ocorre nos seguintes casos:
Ao usar a funo de indicadores tcnicos e IndicatorCreate() no ativo/perodo;
A solicitao aos dados da janela "Observao de Mercado" por de um outro ativo:
1. SeriesInfoInteger
2. Bars

2000-2014, MetaQuotes Software Corp.

786

Programas MQL5
3. SymbolSelect
4. SymbolIsSynchronized
5. SymbolInfoDouble
6. SymbolInfoInteger
7. SymbolInfoString
8. SymbolInfoTick
9. SymbolInfoSessionQuote
10.SymbolInfoSessionTrade
11.MarketBookAdd
12.MarketBookGet
Solicitao da srie de tempo para um ativo/janela de tempo atrves do uso das seguintes funes:
1. CopyBuffer
2. CopyRates
3. CopyTime
4. CopyOpen
5. CopyHigh
6. CopyLow
7. CopyClose
8. CopyTickVolume
9. CopyRealVolume
10.CopySpread
No momento da primeira chamada a um "outro" ativo, o processo de teste interrompido e o histrico
baixado para o ativo/perodo, do terminal para o agente de teste. Ao mesmo tempo, a gerao da
seqncia de tick para este ativo feita.
Uma seqncia de tick individual gerada para cada ativo, de acordo com o modo de gerao de tick
selecionado. Voc tambm pode solicitar explicitamente o histrico dos ativos desejados atravs de
chamada ao SymbolSelect() no handler OnInit() - a baixa do histrico ser feita imediatamente antes
do teste do Expert Advisor.
Assim, no necessrio nenhum esforo extra para realizar teste de multi-moeda no terminal cliente
MetaTrader 5. Apenas abra os grficos dos apropriados ativos no terminal cliente. O histrico ser
automaticamente carregado do servidor de negociao para todos os ativos requeridos, contanto que
ele contenha estes dados.

Simulao de Tempo no Provador de Estratgia


Durante um teste, a hora local TimeLocal() sempre igual a hora do servidor TimeTradeServer(). Por
sua vez, a hora do servidor sempre igual a hora correspondente hora GMT - TimeGMT(). Desta
forma, todas estas funes mostram a mesma hora durante um teste.
A ausncia de diferena entre as horas GMT, local, e do servidor no Provador de Estratgia feita
deliberadamente para o caso de no haver conexo com o servidor. Os resultados do teste devem
sempre ser os mesmos, independentemente de haver ou no uma conexo. Informaes sobre a hora

2000-2014, MetaQuotes Software Corp.

787

Programas MQL5
do servidor no armazenado localmente, e obtido do servidor.

Objetos Grficos no Teste


Durante um teste/otimizao objetos grficos no so plotados. Assim, ao referenciar as
propriedades de um objeto criado durante um teste/otimizao, um Expert Advisor receber valores
zero.
Este limitao no se aplica ao se testar em modo visual.

A Funo OnTimer() no Provador de Estratgia


MQL5 fornece a oportunidade de tratar eventos de timer. A chamada ao handler OnTimer() feita
independentemente do modo do teste. Isso significa que se um teste rodado no modo "Somente
Preos de Abertura" para o perodo H4, e o EA tem um timer definido para uma chamada por segundo,
ento na abertura de cada barra de H4, o handler OnTick() ser chamado uma vez, e o handler
OnTimer() ser chamado 14400 vezes (3600 segundos * 4 horas). A quantidade de tempo de teste do
EA que ser aumentada depende da lgica do EA.
Para verificar a dependncia do tempo de teste a partir de um dada freqncia do timer, ns temos
que criar um EA simples sem nenhum operao de negociao.
//--- parmetros de entrada
input int

timer=1;

// valor do timer, segundos

input bool

timer_switch_on=true; // timer ativado

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- rodar o timer se timer_switch_on==true
if(timer_switch_on)
{
EventSetTimer(timer);
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- para o timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Funo Timer

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

788

Programas MQL5
void OnTimer()
{
//--// nenhum ao tomada, o corpo do handler est vazio
}
//+------------------------------------------------------------------+

As medies de tempo de tempo so obtidas em valores diferentes do parmetro timer (periodicidade


do evento Timer). Sob os dados obtidos, ns plotamos o tempo do teste como funo do perodo do
Timer.

Pode-se ver claramente que quanto menor o parmetro do timer, durante a a inicializao da funo
EventSetTimer, menor o perodo entre as chamadas do handler OnTimer(), e maior o tempo de
teste, sob as mesmas outras condies.

A Funo Sleep() no Provador de Estratgia


A funo Sleep() permite ao EA ou script suspender a execuo do programa MQL5 por um tempo, ao
trabalhar no grfico. Isso pode ser til ao solicitar dados, que no esto prontos no momento da
solicitao e voc precisa esperar at eles estarem prontos. Um exemplo detalhado do uso da funo
Sleep() pode ser encontrado na seo Preparativo para acesso a dados.
O processo de teste no atrasado por chamadas funo Sleep(). Quando voc chama o Sleep(), os
ticks gerados so "jogados" com um atraso especificado, que pode resultar no disparo de ordens
pendentes, stops, etc. Aps uma chamada do Sleep(), o tempo simulado no Provador de Estratgia
aumenta em um intervalo, especificado no parmetro da funo Sleep.
Se como resultado da execuo da funo Sleep(), o tempo corrente no Provador de Estratgia passar
do perodo de teste, ento voc receber o erro "Infinite Sleep loop detected while testing". Se voc
receber este erro, os resultados do teste no sero rejeitados, todas as computaes so realizadas
em seus volumes completos (o nmero de operaes (deals), abrandamento, etc) e os resultados deste
teste so transmitidos para o terminal.
A funo Sleep() no funcionar em OnDeinit(), j que aps ele ser chamado, ser certo que o tempo
de teste ultrapassar a faixa do intervalo de teste.

2000-2014, MetaQuotes Software Corp.

789

Programas MQL5

A funo Print() no Provador de Estratgia


Para aumentar a performance e economizar trfego, o Print() no funciona durante um teste tanto
com agentes locais quanto com agentes da nuvem remota.
A exceo o uso do Print() dentro do handler OnInit(). Isso permite a voc encontrar facilmente a
causa de erros quando eles ocorrem.

Usando o Provador de Estratgia para Problemas de Otimizao em


Clculos Matemticos
O Provador de Estratgia no terminal MetaTrader 5 pode ser usado, no apenas para testar
estratgias de negociao, mas tambm para clculos matemticos. Para usar-lo, necessrio
selecionar o modo "Clculos matemticos"

Neste caso, somente trs funes sero chamadas: OnInit(), OnTester(), OnDeinit(). No modo
"Clculos matemticos" o Provador de Estratgia no gera nenhum tick e no baixa o histrico.
O Provador de Estratgia tambm trabalha em modo "Clculos matemticos" se voc especificar a
data inicial maior que a data final.

2000-2014, MetaQuotes Software Corp.

790

Programas MQL5
Ao usar o Provador de Estratgia para resolver problemas matemticos, a carga do histrico e a
gerao de ticks no ocorrem.
Um problema matemtico tpico para ser revolvido no Provador de Estratgias do MetaTrader 5 busca de um extremo de uma funo com muitas variveis.
Para resolv-lo nos precisamos que:
O clculo do valor da funo deve estar localizado na funo OnTester();
Os parmetros da funo devem estar definidos como variveis de entrada do Expert Advisor;
Compilar o EA, abrir a janela "Provador de Estratgia". Na guia "Parmetros de entrada", selecionar as
requeridas variveis de entrada, e definir o conjunto de valores de parmetros por meio da
especificao dos valores iniciar, parar, e passo de cada uma das variveis da funo.
Selecionar o tipo de otimizao - "Algoritmo completo lento" (busca completa do espao de
parmetros) ou "Rpido (algoritmo gentico)". Para uma busca simples do extremo da funo,
melhor escolher uma otimizao rpida, mas se voc quiser calcular os valores para conjunto inteiro
de variveis, ento melhor usar a otimizao lenta.
Selecione o modo "Clculo matemtico" e usando o boto "Iniciar", executar a procedimento de
otimizao. Note que ao otimizar, o Provador de Estratgia buscar pelos valores mximos da funo
OnTester. Para encontrar um mnimo local, retorne o inverso do valor computado da funo
proveniente da funo OnTester:
return(1/function_value);

necessrio verificar que o function_value no igual a zero, j que de outra forma ns podemos
obter um erro crtico de dividir por zero.
Existe uma outra forma, mais conveniente e que no distorce os resultados da otimizao, ela foi
sugerida pelos leitores deste artigo:
return(-function_value);

Esta opo no requer a verificao do function_value ser igual a zero, e a superfcie dos resultados
da otimizao em uma representao em 3D tem a mesma forma, porm espelhada da original.
Como exemplo, fornecemos a funo sink():

O cdigo do EA para encontrar o extremo desta funo colocada dentro do OnTester():


//+------------------------------------------------------------------+
//|

Sink.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- parmetros de entrada

2000-2014, MetaQuotes Software Corp.

791

Programas MQL5
input double

x=-3.0; // start=-3, step=0.05, stop=3

input double

y=-3.0; // start=-3, step=0.05, stop=3

//+------------------------------------------------------------------+
//| Tester function

//+------------------------------------------------------------------+
double OnTester()
{
//--double sink=MathSin(x*x+y*y);
//--return(sink);
}
//+------------------------------------------------------------------+

Execute uma otimizao e veja os resultados da otimizao na forma de um grfico 2D.

Quanto melhor for o valor para um dado par de parmetros (x,y), mais saturada a cor. Como era
esperado a partir da observao da forma da formula sink(), seus valores forma crculos concntricos
com centro em (0,0). Pode-se ver no grfico 3D, que a funo sink() no tem um nico extremo
global:

2000-2014, MetaQuotes Software Corp.

792

Programas MQL5

A Sincronizao de Barras no modo "Somente Preo de Abertura"


O Provador de Estratgia no terminal cliente do Metatrader 5 permite-nos verificar os chamados EAs
"multi-moedas". Uma EA multi-moeda - um EA que negocia sobre dois ou mais ativos.
O teste de estratgias, que negociam em ativos mltiplos, impe alguns requerimentos tcnicos
adicionais ao Provador de Estratgia:
A gerao de ticks para estes ativos;
O clculo de valores de indicadores para estes ativos;
O clculo de requerimentos de margem para estes ativos;
Sincronizao das seqncias de ticks geradas para todos os ativos negociados.
O Provador de Estratgia gera e joga uma seqncia de ticks para cada instrumento em concordncia
com o modo de negociao selecionado. Ao mesmo tempo e para cada ativo, uma nova barra aberta,
independentemente de como a barra abriu em outro ativo. Isso significa que ao testar um EA multimoeda, uma situao pode ocorrer (e freqentemente acontece), quando para um instrumento, uma
nova barra j abriu, e para o outro instrumento, ela no abriu. Assim, em um teste, tudo acontece
como na realizada.
Esta simulao autntica do histrico no Provador de Estratgia no causa nenhum problema contanto
que os modos de teste "Cada Tick" e "OHLC por minuto" sejam usados. Para estes modos, ticks
suficientes so gerados para um candlestick, para ser capaz de esperar at a sincronizao das barras
de diferentes ativos acontea. Mas como ns testamos estratgias multi-moeda no modo "Somente
Preos de Abertura", se a sincronizao das barras nos instrumentos de negociao obrigatria?
Neste modo, o EA chamado somente em um tick, que corresponde ao momento de abertura das
barras.
Ns ilustraremos isso com um exemplo: se ns estamos testando um EA no EURUSD, e um novo
candlestick de hora abriu em EURUSD, ento podemos reconhecer facilmente este fato - em um teste
no modo "Somente Preos de Abertura", o evento NewTick corresponde ao momento da abertura da
barra sobre o perodo do teste. Mas no exitem garantias que o novo candlestick abriu no ativo

2000-2014, MetaQuotes Software Corp.

793

Programas MQL5
USPJPY, que usado no EA.
Em condies normais, suficiente completar o trabalho da funo OnTick() e verificar pelo
surgimento de uma nova barra em USDJPY no prximo tick. Mas ao testar em modo "Somente Preos
de Abertura", no haver um outro tick, e assim pode parecer que este modo no adequado para
testar EAs multi-moedas. Mas isso no o caso - no se esquea que o testador no MetraTrader 5 se
comporta como se fosse no mundo real. Voc pode esperar at uma nova barra ser aberta em outros
ativos usando a funo Sleep()!
O cdigo do EA Synchronize_Bars_Use_Sleep.mq5, que mostra um exemplo da sincronizao de barras
no modo "Somente Preos de Abertura":
//+------------------------------------------------------------------+
//|

Synchronize_Bars_Use_Sleep.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- parmetros de entrada


input string

other_symbol="USDJPY";

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- verifica ativo
if(_Symbol==other_symbol)
{

PrintFormat("Voc tem de especificar outro smbolo nos parmetros de entrada ou selecionar ou


//--- fora parar teste
return(INIT_PARAMETERS_INCORRECT);
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--- varivel esttica usada para armazenar a hora da ltima barra
static datetime last_bar_time=0;
//--- flag de sincronizao
static bool synchonized=false;
//--- caso a varivel esttica no esteja inicializada
if(last_bar_time==0)
{
//--- a primeira chamada, salva hora da barra e saiu

2000-2014, MetaQuotes Software Corp.

794

Programas MQL5
last_bar_time=(datetime)SeriesInfoInteger(_Symbol,Period(),SERIES_LASTBAR_DATE);

PrintFormat("A varivel last_bar_time inicializada com valor %s",TimeToString(last_bar_time


}
//--- obtm hora de abertura da ltima barra do ativo do grfico
datetime curr_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
//--- se as horas no so iguais
if(curr_time!=last_bar_time)
{
//--- salva a hora da barra aberta na varivel esttica
last_bar_time=curr_time;
//--- no sincronizado
synchonized=false;
//--- imprime mensagem

PrintFormat("Uma nova barra est aparecendo no smbolo %s em %s",_Symbol,TimeToString(TimeCur


}
//--- hora de abertura da barra de outra ativo
datetime other_time;
//--- loop at a hora de abertura do outro ativo ser igual a curr_time

while(!(curr_time==(other_time=(datetime)SeriesInfoInteger(other_symbol,Period(),SERIES_LASTBAR_
{
PrintFormat("Espera 5 segundos..");
//--- espera 5 segundos e chama SeriesInfoInteger(other_symbol,Period(),SERIES_LASTBAR_DATE)
Sleep(5000);
}
//--- barras so sincronizadas
synchonized=true;

PrintFormat("Tempo de abertura da barra do smbolo %s do grfico: %s",_Symbol,TimeToString(las

PrintFormat("Tempo de abertura da barra do smbolo %s: %s",other_symbol,TimeToString(other_tim


//--- TimeCurrent() no til, usar TimeTradeServer()
Print("As barras so sincronizadas em ",TimeToString(TimeTradeServer(),TIME_SECONDS));
}
//+------------------------------------------------------------------+

Perceba que a ltima linha no EA, que exibe a hora corrente quando o sincronizao de fato foi
estabelecida:
Print("As barras so sincronizadas em ",TimeToString(TimeTradeServer(),TIME_SECONDS));

Para exibir a hora corrente usamos a funo TimeTradeServer() ao invs de TimeCurrent(). A funo
TimeCurrent() retorna o hora do ltimo tick, que no se altera aps usar Sleep(). Executa o EA no
modo "Abertura de preos apenas",e voc ver uma mensagem sobre a sincronizao dos barras.

Use a funo TimeTradeServer() ao invs de TimeCurrent(), se voc precisar obter hora corrente do

2000-2014, MetaQuotes Software Corp.

795

Programas MQL5
servidor, e no a hora da chegado do ltimo tick.
Existe uma outra forma para sincronizar barras - usando um timer. Um exemplo de tal EA
Synchronize_Bars_Use_OnTimer.mq5, que est anexado neste artigo.

A funo IndicatorRelease() no Provador de Estratgia


Aps completar um teste individual, um grfico do instrumento automaticamente aberto, que exibe
as operaes (deals) completas e os indicadores usados no EA. Isso ajuda a verificar visualmente os
pontos de entrada e sada, e comprar-los com os valores dos indicadores.
Observao: indicadores, exibidos no grfico, que automaticamente abrem aps a concluso do
teste, so calculados novamente aps a concluso do teste. Mesmo se estes indicadores foram
usados no EA testado.
Mas em alguns casos, o programador pode querer ocultar a informao sobre quais indicadores
estavam envolvidos nos algoritmos de negociao. Por exemplo, o cdigo do EA alugado ou vendido
como um arquivo executvel, sem o fornecimento do cdigo fonte. Para este propsito, a funo
IndicatorRelease() apropriada.
Se o terminal define um template com o nome tester.tpl no directory/profiles/templates do terminal
cliente, ento ele ser aplicado ao grfico aberto. Na usa ausncia, o template padro aplicado.
(default.tpl).
A funo IndicatorRelease() originalmente destinada para liberar a poro de clculo do indicador,
caso ele mais mais seja necessrio. Isso permite economizar tanto a memria quando os recursos de
CPU, porque cada tick pede um clculo do indicador. Seu segundo propsito - proibir a exibio de
um indicador no grfico de teste, aps uma execuo de teste individual.
Para proibir a exibio do indicador no grfico aps um teste, chame o IndicatorRelease() com o
handle do indicator no handler OnDeinit(). A funo OnDeinit() sempre chamada aps a concluso e
antes da exibio do grfico de teste.
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--bool hidden=IndicatorRelease(handle_ind);
if(hidden) Print("IndicatorRelease() completado com sucesso");
else Print("IndicatorRelease() retorna false. Erro de cdigo ",GetLastError());
}

A fim de proibir a exibio do indicador no grfico, aps a concluso de um teste nico, use a funo
IndicatorRelease() no handler OnDeinit().

Tratamento de Evento no Provador de Estratgia


A presena do handler OnTick() no EA no obrigatria para que possa ser passvel de teste em dados

2000-2014, MetaQuotes Software Corp.

796

Programas MQL5
histricos no Provador de Estratgias do MetaTrader 5. suficiente para o EA conter pelo menos as
seguintes funes-handlers:
OnTick() - Handler de evento de uma nova chegada de tick;
OnTrade() - Handler de evento de negociao;
OnTimer() - Handler de evento de uma chegada de sinal do timer;
OnChartEvent() - um handler para eventos de cliente.
Ao testar um EA, ns pode tratar eventos customizados usando a funo OnChartEvent(), mas nos
indicadores, esta funo no pode ser chamada no testador. Mesmo se o indicador tiver o handler de
evento OnChartEvent() e este indicador for usado em um EA testado, o indicador em si no receber
nenhum evento customizado.
Durante um teste, um Indicador pode gerar eventos customizados
EventChartCustom(), e o EA pode processar este evento no OnChartEvent().

usando

funo

Alm destes eventos, eventos especiais associados com o processo de teste e otimizao so gerados
no Provador de Estratgia:
Tester - este evento gerado aps concluso do teste do Expert Advisor sobre dados histricos. O
evento Tester tratado usando a funo OnTester(). Esta funo pode ser usada apenas quando
testar Expert Advisor e est destinada sobretudo para o clculo de um valor que usado como um
critrio mximo personalizado para otimizao de parmetros de entrada genrica.
TesterInit - este evento gerado durante o incio da otimizao no Provador de Estratgia e antes
do primeiro passo. O evento TesterInit tratado usando a funo OnTesterInit(). Durante o incio
da otimizao, um Expert Advisor com este handler carregado automaticamente em um grfico de
terminal separado com o ativo e perodo especificados no testador, e recebe o evento TesterInit.
Esta funo usada para inicializar um Expert Advisor antes de iniciar a otimizao para posterior
processamento dos resultados da otimizao.
TesterPass - este evento gerado quanto um novo data frame recebido. O evento TesterPass
tratado usando a funo OnTesterPass(). Um Expert Advsor com este handler carregado
automaticamente em um grfico de terminal separado com o ativo/perodo especificados para
teste, e recebe um evento TesterPass quando um frame recebido durante otimizao. A funo
usado para tratamento dinmico de resultados de otimizao "in loco" sem esperar pela sua
concluso. Frames so adicionados usando a funo FrameAdd(), que pode ser chamada aps o fim
de um passo individual no handler OnTester().
TesterDeinit - este evento gerado aps o fim da otimizao do Expert Advisor no Provador de
Estratgia. O evento TesterDeinit tratado usando a funo OnTesterDeinit(). Um Expert Advisor
com este handler carregado automaticamente em um grfico no comeo da otimizao, e recebe
TesterDeInit aps sua concluso. A funo usado para o processamento final de todos os
resultados da otimizao.

Agentes de Teste
O teste no terminal cliente MetaTrader 5 realizado usando agentes de teste. Agentes locais so
criados e habilitados automaticamente. O nmero padro de objetos locais corresponde ao nmero de
ncleos em um computador.
Cada agente de teste tem sua prpria cpia das variveis globais, que no so relacionados com o
terminal cliente. O terminal em si o despachante, que distribui as tarefas para os agentes locais e
remotos. Apos executar uma tarefa no teste de um EA, com os parmetros dados, o agente retorna o

2000-2014, MetaQuotes Software Corp.

797

Programas MQL5
resultado para o terminal. Para um teste individual, somente um agente usado.
O agente armazena o histrico, recebido do terminal, em pastas separadas, pelo nome do
instrumento, assim o histrico para EURUSD armazenado em uma pasta chamada EURUSD. Alm
disso, o histrico dos instrumentos separado pelas suas fontes. A estrutura para armazenar o
histrico tem o seguinte forma:
tester_catalog\Agent-IPaddress-Port\bases\name_source\history\symbol_name

Por exemplo, o histrico para EURUSD proveniente do servidor MetaQuotes-Demo pode ser
armazenada na pasta tester_catalog\Agent-127.0.0.1-3000\bases\MetaQuotes-Demo\EURUSD.
Um agente local, aps a concluso de um teste, entra em modo de espera, aguardando a prxima
tarefa por mais 5 minutos, de modo a no perder tempo com o lanamento para a prxima chamada.
Somente aps o perodo de espera acabar, o agente local desliga e se descarrega da memria do CPU.
No caso de uma concluso antecipada do testador, por parte do usurio (o boto "Cancelar"), bem
como com o fechamento do terminal cliente, todos os agentes locais imediatamente param seu
trabalhar e so descarregados da memria.

A Troca de Dados entre o Terminal e o Agente


Ao rodar um teste, o terminal cliente prepara para enviar ao agente um nmero de blocos de
parmetros:
Parmetros de input para o teste (modo de simulao, o intervalo do teste, instrumentos, critrio
de otimizao, etc.)
A lista dos ativos selecionados na janela "Observao de Mercado"
A especificao do ativo do teste (o tamanho do contrato, as margens permitidas do mercado para
definir um StopLoss e Takeprofit, etc)
O Expert Advisor (robot) para ser testado e os valores de seus parmetros de entrada
Informaes sobre arquivos adicionais (bibliotecas, indicadores, arquivos de dados - # property
tester_ ...)
tester_indicator

string

2000-2014, MetaQuotes Software Corp.

Nome
de
um
indicador
customizado no formato de
"indicator_name.ex5".
Indicadores que requerem
teste
so
definidos
automaticamente a partir da
chamada funo iCustom(),
se
o
correspondente
parmetro estiver definido
atravs
de
um
string
constante. Para todos os
outros casos (use da funo
IndicatorCreate() ou uso de
uma string no constante no
parmetro que defini o nome
do indicador) esta propriedade

798

Programas MQL5

requerida
tester_file

string

Nome de arquivo para um


testador com a indicao de
extenso, entre aspas duplas
(como uma string constante).
O arquivo especificado ser
passado para o Provador de
Estratgia.
Arquivos
de
entrada para serem testados,
se houver necessidade de
algum, devem sempre ser
especificados.

tester_library

string

Nome da biblioteca (library)


com a extenso, entre aspas
duplas. Uma biblioteca pode
ter extenso dll ou ex5.
Bibliotecas que requerem teste
so
definidas
automaticamente. No entanto,
se alguma das bibliotecas
usada por um indicador
customizado, esta propriedade
requerida

Para cada bloco de parmetros, uma impresso digital na forma de MD5-hash criada, que enviado
para o agente. O MD5-hash nico para cada conjunto, seu volume muito menor que a quantidade
de informao na qual ele calculado
O agente recebe um hash de blocos e os compara com aqueles que ele j tem. Se a impresso digital
do bloco de parmetros dado no est presente no agente, ou o hash recebido diferente daquele
existente, o agente solicita este bloco de parmetros. Isso reduz o trfego entre o terminal e o
agente.
Aps o teste, o agente retorna ao terminal todos os resultados da execuo, que so exibidos nas
guias "Resultados" e "Resultados da Otimizao": o lucro recebido, o nmero de operaes (deals), o
coeficiente Sharpe, o resultdo da funo OnTester(), etc.
Durante a otimizao, o terminal distribui tarefas de teste para os agentes em pequenos pacotes,
cada pacote contendo vrias tarefas (cada tarefa significando testes individuais com um conjunto de
parmetros de entrada). Isso reduz o tempo de troca entre o terminal e o agente.
Os agentes nunca gravam no disco rgido o arquivo EX5, obtido do terminal (EA, indicadores,
bibliotecas, etc.) for razes de segurana, de modo que um computador com um agente em execuo
no pode usar os dados enviados. Todos os outros arquivos, incluindo DLL, so gravados na caixa de
areia. Em agentes remotos voc no pode testar EAs usando DLL.
Os resultados do teste so adicionados pelo terminal em uma cache especial de resultados (o cache de
resultado), para um acesso rpido a estes resultados quando necessrio. Para cada conjunto de
parmetros, o terminal busca o cache de resultados por resultados j disponveis a partir de execues
anteriores, a fim de evitar re-execues. Se o resultado com tal conjunto de parmetros no

2000-2014, MetaQuotes Software Corp.

799

Programas MQL5
encontrado, ao agente dado a tarefa de conduzir o teste.
Todo trfego entre o terminal e o agente encripto-grafado.
Ticks no so enviados pela rede, eles so gerados nos agentes de teste.

Usando a Pasta Compartilhada para Todos os Terminais Cliente


Todos os agentes de teste so isolados uns dos outros e do terminal cliente: cada agente tem sua
prpria pasta na qual seus logs so gravados. Alm disso, todas as operaes de arquivo durante o
teste do agente ocorrem na pasta agent_name/MQL5/Files. Contudo, ns podemos implementar a
interao entre os agentes locais e o terminal cliente atravs de uma pasta compartilhada para todos
os terminais clientes, se durante a abertura do arquivo voc especificar a flag FILE_COMMON:
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- a pasta compartilhada para todos os terminais cliente
common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//--- imprime o nome desta pasta

PrintFormat("Abrir o arquivo na pasta compartilhada dos terminais de cliente %s", common_folder)


//--- abre um arquivo na pasta compartilhada (indicada pelo flag FILE_COMMON)
handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
... novas aes
//--return(INIT_SUCCEEDED);
}

Usando DLLs
Para acelerar a otimizao ns podemos usar no somente agentes locais, mas tambm agentes
remotos. Neste caso, existem algumas limitaes para agentes remotos. Primeiramente, agentes
remotos no exibem em seus logs os resultados da execuo da funo Print(), mensagens sobre a
abertura e enceramento de posies. Um mnimo de informao exibida no log para impedir que EAs
escritos incorretamente de atolem o computador, no qual o agente remoto est trabalhando, com
mensagens.
A segunda limitao - a proibio no uso de DLL ao testar EAs. Chamadas de DLL so absolutamente
proibidas em agentes remotos por razes de segurana. Em agentes locais, chamadas de DLL em EAs
testados so permitidas somente com a apropriada permisso "Allow import DLL".

2000-2014, MetaQuotes Software Corp.

800

Programas MQL5

Observao: Ao usar os cdigos recebidos dos EAs (scripts, indicadores) que requerem a
permisso para fazer chamadas de DLL, voc deve estar ciente dos riscos, que voc assume ao
permitir este opo nas configuraes do terminal. Independentemente de como a EA ser usada para teste ou para execuo em um grfico.

2000-2014, MetaQuotes Software Corp.

801

Variveis Predefinidas

As variveis predefinidas
Para cada programa MQL5 executvel, um conjunto de variveis predefinidas suportado, que reflete
o estado do grfico de preo corrente no momento em que um programa-mql5 iniciado.
Os valores das variveis predefinidas so definidas pelo terminal cliente antes de um programa MQL5
ser iniciado. Variveis predefinidas so constantes e no podem ser alteradas a partir de um programa
MQL5. Como exceo, existe a variveis especial _LastError, que pode ser redefinida para 0 pela
funo ResetLastError.
Varivel

Valor

_Digits

Nmero de casas decimais

_Point

Tamanho do ponto do ativo corrente na moeda


de cotao

_LastError

O ltimo cdigo de erro

_Period

Janela de tempo do grfico corrente

_RandomSeed

Status atual do gerador de nmeros pseudoaleatrios

_StopFlag

Flag de parada de programa

_Symbol

Nome do ativo do grfico corrente

_UninitReason

Cdigo do motivo da no inicializao

Variveis predefinidas no podem ser definidas em uma biblioteca. Uma biblioteca usa tais variveis
que so definidas em um programa a partir do qual esta biblioteca chamada.

2000-2014, MetaQuotes Software Corp.

802

Variveis Predefinidas

int _Digits
A varivel _Digits armazena o nmero de dgitos aps o ponto decimal, que define a preciso do preo
do ativo do grfico corrente.
Voc pode tambm usar a funo Digits().

2000-2014, MetaQuotes Software Corp.

803

Variveis Predefinidas

double _Point
A varivel _Point contm o tamanho do ponto do ativo corrente na moeda de cotao.
Voc tambm pode usar a funo Point().

2000-2014, MetaQuotes Software Corp.

804

Variveis Predefinidas

int _LastError
A varivel _LastError contm o cdigo do ltimo erro, que ocorreu durante a execuo de um
programa-mql5. Seu valor pode ser redefinido para zero por ResetLastError().
Para obter o cdigo do ltimo erro, voc tambm pode usar a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

805

Variveis Predefinidas

int _Period
A varivel _Period contm o valor da janela de tempo do grfico corrente.
Voc tambm pode usar a funo Period().
Tambm Veja
PeriodSeconds, Janelas de tempo de grficos, Data e Hora, Visibilidade de objetos

2000-2014, MetaQuotes Software Corp.

806

Variveis Predefinidas

_RandomSeed
Varivel para armazenamento do estado corrente ao gerar inteiros pseudo-aleatrios. _RandomSeed
altera seu valor ao chamar MathRand(). Use MathSrand() para definir a condio inicial requerida.
x nmero aleatrio recebido pela funo MathRand() calculado da seguinte forma a cada chamada:
x=_RandomSeed*214013+2531011;
_RandomSeed=x;
x=(x>>16)&0x7FFF;

Tambm Veja
MathRand(), MathSrand(), Tipos inteiros

2000-2014, MetaQuotes Software Corp.

807

Variveis Predefinidas

bool _StopFlag
A varivel _StopFlag contm o flag de parada de um programa MQL5. Quando o terminal cliente est
tentando parar o programa, ele define a varivel _StopFlag para true.
Para verificar o estado do _StopFlag voc tambm pode usar a funo IsStopped().

2000-2014, MetaQuotes Software Corp.

808

Variveis Predefinidas

string _Symbol
A varivel _Symbol contm o nome do ativo do grfico corrente.
Voc tambm pode usar a funo Symbol().

2000-2014, MetaQuotes Software Corp.

809

Variveis Predefinidas

int _UninitReason
A varivel _UninitReason contm o cdigo do motivo de no inicializao do programa.
Geralmente, este cdigo obtido atravs da funo UninitializeReason().

2000-2014, MetaQuotes Software Corp.

810

Funes Comuns

Funes Comuns
Funes de propsito geral no inclusas em nenhum grupo especializado esto listadas aqui.
Funo

Ao

Alert

Exibe uma mensagem em uma janela separada

CheckPointer

Retorna o tipo do ponteiro de objeto

Comment

Gera um comentrio no canto superior esquerdo


do grfico

DebugBreak

Ponto de parada de programa em depurao

ExpertRemove

Interrompe um Expert Advisor e o descarrega


do grfico

GetPointer

Retorna o ponteiro de objeto

GetTickCount

Retorno o nmero de milissegundos decorridos


desde que o sistema foi iniciado

MessageBox

Cria, exibe uma caixa de mensagem e o


gerencia

PeriodSeconds

Retorna o nmero de segundos no perodo

PlaySound

Toca um arquivo de som

Print

Exibe uma mensagem no log

PrintFormat

Formata e imprime um conjunto de smbolos e


valores em um arquivo de log de acordo com
um formato predefinido

ResetLastError

Define o valor da varivel predeterminada


_LastError para zero

ResourceCreate

Cria um recurso de imagem baseado em um


conjunto de dados

ResourceFree

Exclui
recursos
criados
dinamicamente
(liberando a memria alocada para ele)

ResourceReadImage

L os dados do recurso grfico criado pela


funo ResourceCreate() ou salvo em arquivo
EX5 durante a compilao

ResourceSave

Salva um recurso em um arquivo especificado

SendFTP

Envia um arquivo no endereo especificado na


janela de configuraes da guia "FTP"

SendMail

Envia um email no endereo especificado na


janela de configuraes da guia "Email"

SendNotification

Envia notificaes push para terminais mveis,


cujos MetaQuotes ID's esto especificados na

2000-2014, MetaQuotes Software Corp.

811

Funes Comuns

guia "Notificaes"
Sleep

Suspende por um intervalo especificado a


execuo do Expert Advisor corrente ou script

TerminalClose

Ordena o terminal a finalizar a operao

TesterStatistics

Retorna o valor de uma estatstica especfica


calculada com base em resultados de teste

ZeroMemory

Redefine uma varivel passada para ela por


referncia. A varivel pode ser de qualquer
tipo, exceto classes e estruturas que tenham
construtores.

2000-2014, MetaQuotes Software Corp.

812

Funes Comuns

Alert
Exibe uma mensagem em uma janela separada.
void Alert(
argument,

// primeiro valor

...

// outros valores

);

Parmetros
argument
[in] Quaisquer valores separados por virgulas. Para dividir a sada da informao em vrias linhas
voc pode usar o caractere de quebra de linha "\n" ou "\r\n". O nmero de parmetros no pode
exceder 64.
Valor do Retorno
Sem valor de retorno.
Observao
Arrays no podem ser passados para a funo Alert(). Arrays devem ser fornecidos elemento a
elemento. Dados do tipo double so exibidos com 8 dgitos aps o ponto decimal, dados do tipo float
so exibidos com 5 dgitos aps o ponto decimal. Para exibir os nmeros reais com uma preciso
diferente ou em notao cientfica, use a funo DoubleToString().
Dados do tipo bool so exibidos como strings "true" ou "false". Datas so exibidas como
YYYY.MM.DD HH:MM:SS. Para exibir uma data em um outro formato use a funo TimeToString().
Dados do tipo color so exibidos tanto como uma string R,G,B ou como nome de cor, se a cor estiver
presente no conjunto de cores.

2000-2014, MetaQuotes Software Corp.

813

Funes Comuns

CheckPointer
A funo retorna o tipo do ponteiro de objeto.
ENUM_POINTER_TYPE CheckPointer(
object* anyobject

// ponteiro de objeto

);

Parmetros
anyobject
[in] Ponteiro de objeto.
Valor de retorno
Retorna um valor da enumerao ENUM_POINTER_TYPE.
Observao
Uma tentativa de chamar um ponteiro incorreto resulta na finalizao crtica de um programa. por
isso que necessrio chamar a funo CheckPointer antes de usar um ponteiro. Um ponteiro pode
estar incorreto nos seguintes casos:
o ponteiro igual a NULL;
o objeto foi excludo usando o operador delete.
Esta funo pode ser usada para checar a validade do ponteiro. Um valor no zero garante que o
ponteiro pode ser usado para acesso.
Exemplo:
//+------------------------------------------------------------------+
//| Exclui lista atravs da excluso de seus elementos

//+------------------------------------------------------------------+
void CMyList::Destroy()
{
//--- ponteiro de servio para trabalhar no loop
CItem* item;
//--- percorre pelo loop e tenta excluir ponteiros dinmicos
while(CheckPointer(m_items)!=POINTER_INVALID)
{
item=m_items;
m_items=m_items.Next();
if(CheckPointer(item)==POINTER_DYNAMIC)
{
Print("Dynamic object ",item.Identifier()," para ser excludo");
delete (item);
}
else Print("Objeto no-dinmico ",item.Identifier()," cannot be deleted");
}
//--}

2000-2014, MetaQuotes Software Corp.

814

Funes Comuns

Tambm Veja
Ponteiros de Objetos, Verificao do Ponteiro de Objeto, Excluso de Objeto Operador delete

2000-2014, MetaQuotes Software Corp.

815

Funes Comuns

Comment
Esta funo exibe um comentrio definido pelo usurio no canto superior esquerdo de um grfico.
void Comment(
argument,

// primeiro valor

...

// prximos valores

);

Parmetros
...
[in] Quaisquer valores, separados por vrgulas. Para delimitar a exibio da informao em
vrias linhas, um smbolo de quebra de linha "\n" ou "\r\n" usado. O nmero de parmetros no
pode exceder 64. O comprimento total do comentrio de entrada (incluindo smbolos invisveis)
no pode exceder 2045 caracteres (smbolos em excesso sero eliminados da exibio)
Valor do Retorno
Sem valor de retorno
Observao
Arrays no podem ser passados para a funo Comment(). Arrays devem ser alimentados elemento a
elemento.
Dados de tipo double so impressos com preciso de at 16 dgitos aps o ponto decimal, e podem
ser impressos tanto na forma tradicional quanto na forma cientfica, dependendo de qual notao
ser a mais compacta. Dados do tipo float so exibidos com 5 dgitos aps o ponto decimal. Para
exibir nmeros reais com uma outra preciso ou em um formato predefinido, use a funo
DoubleToString().
Dados de tipo bool so impressos como strings "true" ou "false". Datas so mostradas como
YYYY.MM.DD HH:MM:SS. Para mostrar datas em um outro formato, use a funo TimeToString().
Dados de tipo color so impressos tanto como strings R,G,B quanto como nome de cor, se esta cor
estiver presente no conjunto de cores.
Exemplo:
void OnTick()
{
//--double Ask,Bid;
int Spread;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
//--- Exibe valores em 3 linhas
Comment(StringFormat("Mostrar preos\nAsk = %G\nBid = %G\nSpread = %d",Ask,Bid,Spread));
}

Tambm Veja
ChartSetString, ChartGetString

2000-2014, MetaQuotes Software Corp.

816

Funes Comuns

DebugBreak
um ponto de parada de programa em depurao.
void DebugBreak();

Valor do Retorno
Sem valor de retorno.
Observao
A execuo de um programa MQL5 interrompido somente se ele for iniciado em modo de
depurao. A funo pode ser usada para ver valores de variveis e/ou para avanar a execuo
passo a passo.

2000-2014, MetaQuotes Software Corp.

817

Funes Comuns

ExpertRemove
A funo interrompe um Expert Advisor e o descarrega de um grfico.
void ExpertRemove();

Valor de retorno
Sem valor de retorno.
Observao
O Expert Advisor no interrompido imediatamente ao chamar ExpertRemove(); apenas um flag
para interromper a operao o EA definido. Isso , nenhum evento seguinte ser processo,
OnDeinit() ser chamado e o Expert Advisor ser descarregado e removido do grfico.
Exemplo:
//+------------------------------------------------------------------+
//|

Test_ExpertRemove.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

input int ticks_to_close=20;// nmero de ticks antes do EA descarregar


//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--Print(TimeCurrent(),": " ,__FUNCTION__," cdigo de motivo = ",reason);
//--- "limpa" comentrio
Comment("");
//--}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
static int tick_counter=0;
//--tick_counter++;
Comment("\nAntes de descarregar Expert Advisor ",__FILE__," left",
(ticks_to_close-tick_counter)," ticks");
//--- antes
if(tick_counter>=ticks_to_close)
{

2000-2014, MetaQuotes Software Corp.

818

Funes Comuns
ExpertRemove();
Print(TimeCurrent(),": ",__FUNCTION__," Expert Advisor ser descarregado");
}
Print("tick_counter =",tick_counter);
//--}
//+------------------------------------------------------------------+

Tambm Veja
Execuo de programas, Eventos do terminal Cliente

2000-2014, MetaQuotes Software Corp.

819

Funes Comuns

GetPointer
A funo retorna o ponteiro de objeto.
void* GetPointer(
any_class anyobject

// objeto de qualquer classe

);

Parmetros
anyobject
[in] Objeto de qualquer classe.
Valor do Retorno
A funo retorna o ponteiro de objeto.
Observao
Somente objetos de classe tm ponteiros. Instncias de estruturas e variveis de tipo simples no
podem ter ponteiros. O objeto de classe no criado usando o operador new(), mas, por exemplo,
criado automaticamente no array de objetos, tem um ponteiro. Mas este ponteiro ser do tipo
automtico POINTER_AUTOMATIC, portanto o operador delete() no pode ser aplicado a ele. Alm
de que, o tipo ponteiro no difere dos ponteiros dinmico do tipo POINTER_AUTOMATIC.
Como variveis de tipo estrutura e de tipo simples no tm ponteiros, proibido aplicar a funo
GetPointer() a elas. tambm proibido passar o ponteiro como um argumento de funo. Nos outros
casos o resultado indefinido.
Uma tentativa de chamar um ponteiro incorreto causa a finalizao crtica de um programa. por
isso que a funo CheckPointer() deve ser chamada antes de usar um ponteiro. Um ponteiro pode
estar incorreto nos seguintes casos:
o ponteiro igual a NULL;
o objeto foi excludo usando o operador delete.
Esta funo pode ser usada para verificar a validade de um ponteiro. Um valor no-zero garante que
o ponteiro pode ser usado para acesso.
Exemplo:
//+------------------------------------------------------------------+
//|

Check_GetPointer.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//+------------------------------------------------------------------+
//| Classe implementando o elemento da lista

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

820

Funes Comuns
class CItem
{
int

m_id;

string

m_comment;

CItem*

m_next;

public:
CItem() { m_id=0; m_comment=NULL; m_next=NULL; }
~CItem() { Print("Destrutor de ",m_id,
(CheckPointer(GetPointer(this))==POINTER_DYNAMIC)?
"dynamic":"no dinmico"); }
void

Initialize(int id,string comm) { m_id=id; m_comment=comm; }

void

PrintMe() { Print(__FUNCTION__,":",m_id,m_comment); }

int

Identifier() { return(m_id); }

CItem*

Next() {return(m_next); }

void

Next(CItem *item) { m_next=item; }

};
//+------------------------------------------------------------------+
//| Classe mais simples de lista

//+------------------------------------------------------------------+
class CMyList
{
CItem*

m_items;

public:
CMyList() { m_items=NULL; }
~CMyList() { Destroy(); }
bool

InsertToBegin(CItem* item);

void

Destroy();

};
//+------------------------------------------------------------------+
//| Incluindo elemento de lista no comeo

//+------------------------------------------------------------------+
bool CMyList::InsertToBegin(CItem* item)
{
if(CheckPointer(item)==POINTER_INVALID) return(false);
//--item.Next(m_items);
m_items=item;
//--return(true);
}
//+------------------------------------------------------------------+
//| Excluindo a lista atravs da excluso dos elementos

//+------------------------------------------------------------------+
void CMyList::Destroy()
{
//--- ponteiro de servio para trabalhar em um loop
CItem* item;
//--- varre o loop e tenta excluir ponteiros dinmicos
while(CheckPointer(m_items)!=POINTER_INVALID)

2000-2014, MetaQuotes Software Corp.

821

Funes Comuns
{
item=m_items;
m_items=m_items.Next();
if(CheckPointer(item)==POINTER_DYNAMIC)
{
Print("Dynamyc object ",item.Identifier()," para ser excludo");
delete (item);
}
else Print("Objeto no-dinmico ",item.Identifier()," cannot be deleted");
}
//--}
//+------------------------------------------------------------------+
//| Funo start do programa script

//+------------------------------------------------------------------+
void OnStart()
{
CMyList list;
CItem

items[10];

CItem*

item;

//--- cria e adiciona na lista um ponteiro de objeto dinmico


item=new CItem;
if(item!=NULL)
{
item.Initialize(100,"dinmico");
item.PrintMe();
list.InsertToBegin(item);
}
//--- adiciona ponteiros automticos na lista
for(int i=0; i<10; i++)
{
items[i].Initialize(i,"automtico");
items[i].PrintMe();
item=GetPointer(items[i]);
if(CheckPointer(item)!=POINTER_INVALID)
list.InsertToBegin(item);
}
//--- adiciona mais um ponteiro de objeto dinmico no comeo da lista
item=new CItem;
if(item!=NULL)
{
item.Initialize(200,"dinmico");
item.PrintMe();
list.InsertToBegin(item);
}
//--- exclui todos os elementos da lista
list.Destroy();
//--- todos os elementos da lista ser excludos aps o script terminar
//--- veja a guia Experts no terminal

2000-2014, MetaQuotes Software Corp.

822

Funes Comuns
}

Tambm Veja
Ponteiros de Objetos, Verificao do Ponteiro de Objeto, Excluso de Objeto Operador delete

2000-2014, MetaQuotes Software Corp.

823

Funes Comuns

GetTickCount
A funo GetTickCount() retorna o nmero de milissegundos decorridos desde o inicializao do
sistema.
uint GetTickCount();

Valor do Retorno
Valor de tipo uint.
Observao
O contador limitado pelas restries do timer do sistema. O tempo armazenado como um inteiro
sem sinal, assim ele sobre-preenchido a cada 49.7 dias se um computador trabalhar
ininterruptamente.
Exemplo:
#define MAX_SIZE 40
//+------------------------------------------------------------------+
//| Script para medir o tempo de computao de 40 membros Fibonacci |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Lembra o valor inicial
uint start=GetTickCount();
//--- Uma varivel para obteno do prximo nmero na srie Fibonacci
long fib=0;
//--- No loop calcular a quantidade especfica de nmeros de srie de Fibonacci
for(int i=0;i<MAX_SIZE;i++) fib=TestFibo(i);
//--- Obtm o tempo gasto em milissegundos
uint time=GetTickCount()-start;
//--- Imprime uma mensagem para o dirio Experts
PrintFormat("Calculando %d primeiros nmeros Fibonacci tiveram %d ms",MAX_SIZE,time);
//--- Script concludo
return;
}
//+------------------------------------------------------------------+
//| Funo para obter nmero de Fibonacci pelo seu nmero serial

//+------------------------------------------------------------------+
long TestFibo(long n)
{
//--- O primeiro membro da srie Fibonacci
if(n<2) return(1);
//--- Todos os outros membros so calculados pela seguinte frmula
return(TestFibo(n-2)+TestFibo(n-1));
}

Tambm Veja
Data e Hora

2000-2014, MetaQuotes Software Corp.

824

Funes Comuns

MessageBox
Cria e exibe uma caixa de mensagem e o gerencia. Um caixa de mensagem contm uma mensagem e
cabealho, e qualquer combinao de sinais predefinidos e botes de comando.
int MessageBox(
string text,

// texto da mensagem

string caption=NULL,

// cabealho da caixa

int

// define o conjunto de botes na caixa

flags=0

);

Parmetros
text
[in] Texto, contm a mensagem de sada.
caption=NULL
[in] Texto opcional a ser exibido no cabealho da caixa. Se o parmetro estiver vazio, o nome do
Expert Advisor exibido no cabealho da caixa.
flags=0
[in] Flags opcionais definindo a aparncia e comportamento da caixa de mensagem. Flags podem
ser uma combinao de um grupo especial de flags.
Valor do Retorno
Se a funo for executada com sucesso, o valor de retorno um dos valores dos cdigos de retorno
do MessageBox().
Observao
A funo no pode ser chamada a partir de indicadores customizados, porque indicadores so
executados na thread de interface, que no deve ser atrasado.

2000-2014, MetaQuotes Software Corp.

825

Funes Comuns

PeriodSeconds
Esta funo retorna o nmero de segundos em um perodo.
int PeriodSeconds(
ENUM_TIMEFRAMES period=PERIOD_CURRENT

// perodo do grfico

);

Parmetros
period=PERIOD_CURRENT
[in] Valor do perodo de um grfico proveniente da enumerao ENUM_TIMEFRAMES. Se o
parmetro no for especificado, ela retorna o nmero de segundos do perodo do grfico corrente,
no qual o programa est rodando.
Valor do Retorno
Nmero de segundos em um perodo selecionado.
Tambm Veja
_Period, Janelas de tempo de Grficos, Date e Hora, Visibilidade de objetos

2000-2014, MetaQuotes Software Corp.

826

Funes Comuns

PlaySound
Toca um arquivo de som.
bool PlaySound(
string filename

// nome do arquivo

);

Parmetros
filename
[in] Caminho para um arquivo de som.
Valor do Retorno
true se o arquivo for encontrado, caso contrrio - false.
Observao
O arquivo deve estar localizado em terminal_directory\Sounds ou em sub-diretrios. Somente
arquivos WAV so executados.
Tambm Veja
Recursos

2000-2014, MetaQuotes Software Corp.

827

Funes Comuns

Print
Entra uma mensagem no log do Expert Advisor. Parmetros podem ser de qualquer tipo.
void Print(
argument,

// primeiro valor

...

// prximos valores

);

Parmetros
...
[in] Quaisquer valores separados por virgulas. O nmero de parmetros no pode exceder 64.
Observao
Arrays no podem ser passados para a funo Print(). Arrays devem ser passados elemento a
elemento.
Dados do tipo double so mostrados com preciso de at 16 dgitos aps o ponto decimal, e podem
ser exibidos tanto na formato tradicional como em notao cientfica, dependendo de qual sada
ser mais compacta. Dados do tipo float so exibidos com 5 dgitos aps o ponto decimal. Para
imprimir nmeros reais com uma outra preciso ou em um formato predefinido, use a funo
PrintFormat() .
Dados do tipo bool so exibidos como strings "true" ou "false". Datas so mostradas como
YYYY.MM.DD HH:MM:SS. Para mostrar datas em um outro formato, use TimeToString(). Dados do
tipo cor so retornados como string R,G,B ou como nome de cor, se esta cor estiver presente no
conjunto de cores
Exemplo:
void OnStart()
{
//--- Imprimi DBL_MAX usando Print(), isso equivalente a PrintFormat(%%.16G,DBL_MAX)
Print("---- como DBL_MAX aparece -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- Agora imprime o nmero DBL_MAX usando PrintFormat()
PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Imprime no dirio Experts
// Print(DBL_MAX)=1.797693134862316e+308
// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308
//--- Veja como um float impresso
float c=(float)M_PI; // Ns devemos explicitamente converter para o tipo desejado
Print("c=",c, "
// c=3.14159

Pi=",M_PI, "

Pi=3.141592653589793

(float)M_PI=",(float)M_PI);
(float)M_PI=3.14159

//--- Mostra o que pode acontecer com operaes aritmticas com tipos reais
double a=7,b=200;
Print("---- Antes de operaes aritmticas");
Print("a=",a,"

b=",b);

Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));

2000-2014, MetaQuotes Software Corp.

828

Funes Comuns
//--- Dividir a por b (7/200)
a=a/b;
//--- Agora emula a restaurao de um valor na varivel b
b=7.0/a; // esperado que b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - mas ele difere
//--- Imprimi o novo valor calculado de b
Print("----- Aps as operaes aritmticas");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- Imprime no dirio Experts
// Print(b)=200.0
// Print(DoubleToString(b,16))=199.9999999999999716 (veja que b no mais igual a 200.0)
//--- Cria um valor muito pequeno epsilon=1E-013
double epsilon=1e-13;
Print("---- Criando um valor muito pequeno");
Print("epsilon=",epsilon); // Obter epsilon=1E-013
//--- Agora subtrai epsilon de b e novamente imprime o valor no dirio Experts
b=b-epsilon;
//--- Duas formas de uso
Print("---- Depois de subtrair epsilon da varivel b");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- Imprime no dirio Experts
// Print(b)=199.9999999999999

(agora o valor de b aps subtrair epsilon no pode ser arredondado p

// Print(DoubleToString(b,16))=199.9999999999998578
//

(agora o valor de b aps subtrair epsilon no podem ser arredondado para 200)

Tambm Veja
DoubleToString, StringFormat

2000-2014, MetaQuotes Software Corp.

829

Funes Comuns

PrintFormat
Formata e entra conjuntos de smbolos e valores no log do Expert Advisor em concordncia com um
formato predefinido.
void PrintFormat(
string format_string,

// string de formato

...

// valores de tipo simples

);

Parmetros
format_string
[in] A string de formato consiste de smbolos simples, e se a string de formato seguido por
argumentos, ela tambm contm especificaes de formato.
...
[in] Quaisquer valores de tipos simples separados por vrgula. Nmero total de parmetros no
pode exceder A 64, incluindo a string de formato.
Valor do Retorno
String.
Observao
O nmero, ordem e tipo dos parmetros devem corresponder exatamente com o conjunto de
qualificadores, caso contrrio, o resultado do print indefinido. Ao invs de PrintFormat(), voc
pode usar printf().
Se a string de formato for seguida por parmetros, esta string deve conter especificaes de
formato que denotem o formato de sada destes parmetros. Especificaes de formato sempre
comeam com o sinal de percentual (%).
Uma string de formato lida da esquerda para direita. Quando a primeira especificao de formato
encontrada (se houver alguma), o valor do primeiro parmetro aps a string de formato
transformado e impresso de acordo com a especificao predefinida. A segunda especificao de
formato chama a transformao e impresso do segundo parmetro, e assim por diante at a string
de formato acabe.
A especificao de formato tem a seguinte forma:
%[flags][largura][.preciso][{h | l | ll | I32 | I64}]tipo
Cada campo da especificao de formato tanto um smbolo simples, como um nmero denotando
uma opo de formato simples. A especificao de formato mais simples contm somente o sinal de
percentagem (%) e um smbolo definindo o tipo do parmetro de sada (por exemplo, %s). Se voc
precisar imprimir o sinal de percentual na string de formato, use o especificao de formato %%.

flags
Flag

Descrio

2000-2014, MetaQuotes Software Corp.

Comportamento Default

830

Funes Comuns

(menos)

Justificao
a
esquerda
dentro da largura (width)
predefinida

Justificao a direita

+ (mais)

Imprime o sinal + ou - de
valores de tipos com sinal

O sinal somente mostrada


se o valor for negativo

0 (zero)

Zeros so adicionados antes


de um valor impresso com a
largura predefinida. Se o flag
0 for especificado com um
formato inteiro (i, u, x, X, o,
d) e a especificao de
preciso for definida (por
exemplo, %04.d), ento 0
ignorado.

Nada adicionado

espao

Um espao exibido antes de


um valor impresso, se ele for
um valor com sinal e positivo

Espaos no so inseridos

Se usado em conjunto com o


formato o, x ou X, ento
antes do valor de sada 0, 0x
ou
0X

adicionado
respectivamente.

Nada adicionado

Se usado em conjunto com o


formato e, E, a ou A, o valor
sempre mostrado com um
ponto decimal.

Ponto decimal mostrado


somente se houver um parte
fracionria no-zero.

Se usado em conjunto com o


formato g ou G, o flag define
a presena de um ponto
decimal no valor de sada e
evita o truncamento de zeros
esquerda.
O flag # ignorado quando
usado em conjunto com
formatos c, d, i, u, s.

Ponto decimal mostrado


somente se houver um parte
fracionria no-zero. Zeros
esquerda so cortados.

largura
Um nmero decimal no negativo que define o nmero mnimo de smbolos de sada do valor
formatado. Se o nmero de sada de smbolos menor do que a largura especificada, o
correspondente nmero de espaos adicionado a partir da esquerda ou direita, dependendo do
alinhamento (flag -). Se houver o flag zero (0), o nmero correspondente de zeros adicionado
antes do valor de sada. Se o nmero de sada de smbolos de sada maior do que a largura
especificada, o valor de sada no cortado.
Se um asterisco (*) for especificado como width, um valor de tipo int deve ser indicado no lugar
correspondente da lista de parmetros passados. Ele ser usado para especificar a largura do valor

2000-2014, MetaQuotes Software Corp.

831

Funes Comuns
de sada.

preciso
Um nmero decimal no negativo que define a preciso de sada - nmero de dgitos aps o ponto
decimal. Como diferena da especificao de largura, a especificao de preciso pode truncar a
parte fracionrio com ou sem arredondamento.
O uso da especificao de preciso diferente para tipos de formato diferentes.
Tipos

Descrio

Comportamento Default

a, A

Especificao de preciso
define o nmero de dgitos
aps o ponto decimal.

Preciso padro 6.

c, C

No usado

d, i, u, o, x, X

Define o nmero mnimo de


dgitos de sada. Se o nmero
de dgitos em um parmetro
correspondente for menor que
esta preciso, zeros so
adicionados a esquerda do
valor de sada. O valor de
sada no cortado, se o
nmero de dgitos de sada
maior do que a preciso
apurada.

e, E, f

Define o nmero de dgitos de


sada aps o ponto decimal. O
ltimo dgito arredondado.

Preciso padro 6. Se a
definio de preciso for 0 ou a
parte decimal estiver ausente,
o ponto decimal no exibido.

g, G

Define o nmero mximo de


nmeros significativos.

6 nmeros significativos so
impressos.

s, S

Define o nmero de sada dos


smbolos de uma string. Se o
comprimento da string excede
ao apurado, a string e
cortada.

Toda a string a sada.

Preciso padro 1.

h | l | ll | I32 | I64
Especificao de tamanhos dos dados, passados como parmetro.
Tipo de Parmetro

int

Prefixo Usado

l (letra minscula L)

2000-2014, MetaQuotes Software Corp.

Especificador Conjunto de
Tipo
d, i, o, x, or X

832

Funes Comuns

uint

l (letra minscula L)

o, u, x, or X

long

ll (duas letras minsculas L)

d, i, o, x, or X

short

d, i, o, x, or X

ushort

o, u, x, or X

int

I32

d, i, o, x, or X

uint

I32

o, u, x, or X

long

I64

d, i, o, x, or X

ulong

I64

o, u, x, or X

tipo
Especificador de tipo o nico campo obrigatrio para a sada formatada.
Smbolo

Tipo

Formato de Sada

int

Smbolo
de
(Unicode)

int

Smbolo de tipo char (ANSI)

int

Inteiro decimal com sinal

int

Inteiro decimal com sinal

int

Inteiro octal sem sinal

int

Inteiro decimal sem sinal

int

Inteiro
hexadecimal
sinal, usando "abcdef"

sem

int

Inteiro
hexadecimal
sinal, usando "ABCDEF"

sem

double

Um valor real no formato [-]


d.dddde[sinal] ddd, onde d um dgito decimal, dddd - um
ou mais dgitos decimais, ddd
- um nmero de trs dgitos
que determina o tamanho do
exponente, sinal - mais ou
menos

double

Semelhando ao formato de e,
exceto que o sinal do
expoente impresso em letra
maiscula (E ao invs de e)

double

Um valor real no format [-]

2000-2014, MetaQuotes Software Corp.

tipo

short

833

Funes Comuns

dddd.dddd, onde dddd - um


ou mais dgitos decimais.
Nmero de dgitos exibidos
depois do ponto decimal
depende do tamanho do valor
do nmero. Nmero de dgitos
aps o ponto decimal depende
da preciso requerida.
g

double

Uma sada de valor real no


formato f ou edepende de
qual sada mais compacta.

double

Uma sada de valor real no


formato F ou Edepende de
qual sada mais compacta.

double

Um nmero real no formato


[]0xh.hhhh
pdd,
onde
h.hhhh mantissa na forma
de dgitos
hexadecimais,
usando "abcdef", dd - Um ou
mais dgitos de expoente.
Nmero de posies decimais

determinado
pela
especificao de preciso

double

Um nmero real no formato


[]0xh.hhhh
pdd,
onde
h.hhhh mantissa na forma
de dgitos
hexadecimais,
usando "abcdef", dd - Um ou
mais dgitos de expoente.
Nmero de posies decimais

determinado
pela
especificao de preciso

string

Sada da string

Ao invs de PrintFormat(), voc pode usar printf().


Exemplo:
PrintFormat("Sada DBL_MAX num formato compactado especfico: %e",DBL_MAX);
printf("Sada DBL_MAX como%%.15e: %.15e",DBL_MAX);
printf("Sada DBL_MAX como %%15e: %15e",DBL_MAX);
printf("Sada DBL_MAX como %%15.10e: %15.10e",DBL_MAX);
printf("Sada DBL_MAX como %%15.10f: %15.10f",DBL_MAX);
printf("Sada 10 como %%f: %f",10);
printf("Sada DBL_MAX como %%d: %d",DBL_MAX);

2000-2014, MetaQuotes Software Corp.

834

Funes Comuns
printf("Sada 10 como %%e: %e",10);
printf("Sada DBL_MAX como %%e: %e",DBL_MAX);

Tambm Veja
StringFormat, DoubleToString, Tipos reais(double,float)

2000-2014, MetaQuotes Software Corp.

835

Funes Comuns

ResetLastError
Define o valor do varivel predefinida _LastError para zero.
void ResetLastError();

Valor do Retorno
Sem valor de retorno.
Observao
Deve ser notado que a funo GetLastError() no zera a varivel _LastError. Geralmente a funo
ResetLastError() chamada antes de chamar uma funo, aps o qual um surgimento de erro
verificado.

2000-2014, MetaQuotes Software Corp.

836

Funes Comuns

ResourceCreate
Criar um recurso de imagem baseado em um conjunto de dados. Existe duas variantes da funo:
Criando um recurso baseado em um arquivo
bool ResourceCreate(
const string

resource_name,

// Nome do recurso

const string

path

// Uma caminho relativo para o arquivo

);

Criando um recurso baseado em um array de pixels


bool ResourceCreate(
const string

resource_name,

// Nome do recurso

const uint&

data[],

// Conjunto de dados em um array

uint

img_width,

uint

img_height,

uint

data_xoffset,

// O deslocamento horizontal para direita do canto superi

uint

data_yoffset,

// O deslocamento vertical para baixo do canto superior e

uint

data_width,

ENUM_COLOR_FORMAT color_format

// A largura do recurso de imagem

// A altura do recurso de imagem

// A largura total da imagem baseada no conjunto de dados


// Mtodo de processamento de cor

);

Parmetros
resource_name
[in] Nome do recurso.
data[][]
[in] Um array de uma dimenso ou duas dimenses de cores para criar uma imagem completa.
img_width
[in] A largura da rea da imagem retangular em pixels para ser colocada no recurso na forma de
uma imagem. Ela no pode ser maior que o valor data_width.
img_height
[in] A altura da rea da imagem retangular em pixels para ser colocada no recurso na forma de
uma imagem.
data_xoffset
[in] O deslocamento horizontal para direita da rea retangular da imagem.
data_yoffset
[in] O deslocamento vertical para baixa da rea retangular da imagem.
data_width
[in] Requerido somente para arrays de uma dimenso. Denota a largura total da imagem a partir
do conjunto de dados. Se data_width=0, assumido ser igual a img_width. Para arrays
bidimensionais o parmetro ignorado e assumido como sendo igual segunda dimenso do
array data[].
color_format

2000-2014, MetaQuotes Software Corp.

837

Funes Comuns
[in]
Mtodo de processamento
ENUM_COLOR_FORMAT.

de

cor,

partir

de

um

valor

da

enumerao

Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro chame a
funo GetLastError(). Os seguintes erros podem ocorrer:
4015 ERR_RESOURCE_NAME_DUPLICATED (nomes idnticos do recurso dinmico e esttico)
4016 ERR_RESOURCE_NOT_FOUND (o recurso no foi encontrado)
4017 ERR_RESOURCE_UNSUPPORTED_TYPE (este tipo de recurso no suportado)
4018 ERR_RESOURCE_NAME_IS_TOO_LONG (o nome do recurso muito longo)
Observao
Se a segunda verso da funo chamada para criar o mesmo recurso com largura, altura e
parmetros de deslocamento diferentes, ela no cria um novo recurso, mas simplesmente atualiza o
recurso existente.
A primeira verso da funo usada para carregar imagens e sons a partir de arquivos, e a segunda
verso usada somente para a criao dinmica de imagens.
Imagens devem estar no formato BMP com um profundidade de cor de 24 ou 32 bits. Sons podem
somente ser no formato WAV. O tamanho do recurso no deve exceder 16 Mb.

ENUM_COLOR_FORMAT
Identifier

Descrio

COLOR_FORMAT_XRGB_NOALPHA

O componente do canal alfa ignorado

COLOR_FORMAT_ARGB_RAW

Componentes de cor no so tratados pelo


terminal (devem ser corretamente definidos
pelo usurio)

COLOR_FORMAT_ARGB_NORMALIZE

Componentes de cor so tratados pelo terminal

Tambm Veja
Recursos, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE

2000-2014, MetaQuotes Software Corp.

838

Funes Comuns

ResourceFree
A funo exclui dinamicamente recursos criados (liberando a memria alocada para ele).
bool ResourceFree(
const string resource_name

// nome do recurso

);

Parmetros
resource_name
[in] Nome do recurso deve comear com "::".
Valor de retorno
true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a funo
GetLastError().
Observao
ResourceFree() permite aos desenvolvedores de aplicativos MQL5 gerenciarem o consumo de
memria quando se trabalha ativamente com recursos. Objetos grficos vinculados ao recurso que
ser apagado da memria sero exibidos corretamente aps a sua excluso. No entanto, os objetos
grficos recm-criados ((OBJ_BITMAP e OBJ_BITMAP_LABEL) no podero utilizar o recurso
suprimido.
A funo deleta apenas recursos dinmicos criados pelo programa.
Tambm Veja
Recursos, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE

2000-2014, MetaQuotes Software Corp.

839

Funes Comuns

ResourceReadImage
A funo l os dados do recurso grfico criado pela funo ResourceCreate() ou salvo como arquivo
EX5 durante a compilao.
bool ResourceReadImage(
const string

resource_name,

uint&

data[],

uint&

width,

uint&

height,

// nome do recurso grfico para leitura


// array recebendo dados a partir do recurso

// para receber a largura da imagem no recurso


// para receber a altura da imagem no recurso

);

Parmetros
resource_name
[in] Nome do recurso grfico contendo uma imagem. Para acessar novamente seus prprios
recursos, o nome usado em formato abreviado "::resourcename". Se baixamos um recurso a
partir de uma compilao de arquivo EX5, o nome completo seria usado com o caminho relativo do
diretrio MQL5, nomes do arquivo e recurso - "path\\filename.ex5::resourcename".
data[][]
[in] Array uni- ou bi-dimensional para recebimento de dados do recurso grfico.
img_width
[out] Recurso grfico da largura da imagem em pixels.
img_height
[out] Recurso grfico da altura da imagem em pixels.
Valor de retorno
true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a funo
GetLastError().
Observao
Se array data[], ento ser usado paracriar um recurso grfico, formatos de cor
COLOR_FORMAT_ARGB_NORMALIZE ou COLOR_FORMAT_XRGB_NOALPHA devem ser utilizados.
Se array data[] bidimensional e sua segunda dimenso menor do que X (largura) tamanho do
recurso grfico,a funo ResourceReadImage() retorna falso e a leitura no executada. Mas se o
recurso existe, o tamanho da imagem real retornada pelos parmetros de largura e altura. Isto
permitir fazer outra tentativa para receber dados a partir do recurso.
Tambm Veja
Recursos, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE

2000-2014, MetaQuotes Software Corp.

840

Funes Comuns

ResourceSave
Salva um recurso no arquivo especificado.
bool ResourceSave(
const string resource_name

// Nome do recurso

const string file_name

// Nome do arquivo

);

Parmetros
resource_name
[in] O nome do recurso deve comear com "::".
file_name
[in] O nome do arquivo relativo a MQL5\Files.
Valor do Retorno
true no caso de sucesso, caso contrrio, false. Para informaes do erro chamar GetLastError().
Observao
A funo sempre sobre-escreve um arquivo e cria todos os diretrios intermedirios requeridos no
nome do arquivo se necessrio.
Tambm Veja
Recursos, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE

2000-2014, MetaQuotes Software Corp.

841

Funes Comuns

SetUserError
Define a varivel predefinida _LastError para o valor igual a ERR_USER_ERROR_FIRST + user_error
void SetUserError(
ushort user_error,

// nmero do erro

);

Parmetros
user_error
[in] Nmero do erro definido pelo usurio.
Valor do Retorno
Sem valor de retorno.
Observao
Depois de um erro ser definido usando a funo SetUserError(user_error), GetLastError() retorna um
valor igual a ERR_USER_ERROR_FIRST + user_error.
Exemplo:
void OnStart()
{
//--- define o nmero de erro 65537=(ERR_USER_ERROR_FIRST +1)
SetUserError(1);
//--- obtm o ltimo cdigo de erro
Print("GetLastError = ",GetLastError());
/*
Result
GetLastError = 65537
*/
}

2000-2014, MetaQuotes Software Corp.

842

Funes Comuns

SendFTP
Envia um arquivo no endereo especificado na janela de configuraes da guia "FTP".
bool SendFTP(
string filename,

// nome do arquivo enviado

string ftp_path=NULL

// catlogo FTP

);

Parmetros
filename
[in] Nome do arquivo enviado.
ftp_path=NULL
[in] Catlogo FTP. Se um diretrio no for especificado, o diretrio descrito nas configuraes
usado.
Valor do Retorno
Em caso de falha retorna false.
Observao
O arquivo enviado deve estar localizado na pasta terminal_directory\MQL5\files ou em suas
subpastas. O envio no ocorre se o endereo FTP e/ou a senha de acesso no estiverem
especificados nas configuraes.

2000-2014, MetaQuotes Software Corp.

843

Funes Comuns

SendNotification
Envia notificaes push para terminais mveis, cujo MetaQuotes ID esto especificados na guia
"Notificaes".
bool SendNotification(
string text

// Texto da notificao

);

Parmetros
text
[in] O texto da notificao. O comprimento da mensagem no deve exceder 255 caracteres.
Valor do Retorno
true se uma notificao foi enviada com sucesso do terminal; em caso de falha retorna false. Ao
verificar aps uma falha de envio de notificao, GetLastError () pode retornar um dos seguintes
erros:
4515 ERR_NOTIFICATION_SEND_FAILED,
4516 ERR_NOTIFICATION_WRONG_PARAMETER,
4517 ERR_NOTIFICATION_WRONG_SETTINGS,
4518 ERR_NOTIFICATION_TOO_FREQUENT.
Observao
Rgidas restries de uso esto definidas para a funo SendNotification(): no mais que 2
chamadas por segundo e no mais que 10 chamadas por minuto. O monitoramento da freqncia de
uso dinmico. A funo pode ser desabilitada em caso de violao da restrio.

2000-2014, MetaQuotes Software Corp.

844

Funes Comuns

SendMail
Envia um email no endereo especificado na janela de configuraes da guia "Email".
bool SendMail(
string subject,

// cabealho

string some_text

// texto de e-mail

);

Parmetros
subject
[in] Cabealho do email.
some_text
[in] Corpo do email.
Valor do Retorno
true se um email colocado na fila de envio, caso contrrio - false.
Observao
O envio de emails pode ser proibido em configuraes, o endereo de email pode ser omitido
tambm. Para informaes do erro chamar GetLastError().

2000-2014, MetaQuotes Software Corp.

845

Funes Comuns

Sleep
A funo suspende a execuo do Expert Advisor corrente ou script por um intervalo especificado.
void Sleep(
int milliseconds

// intervalo

);

Parmetros
milliseconds
[in] Intervalo de atraso em milissegundos.
Valor do Retorno
Sem valor de retorno.
Observao
A funo Sleep() no pode ser chamada por indicadores customizados, porque indicadores so
executados na thread de interface e no devem ser atrasados. A funo foi incorporada para
verificar flag interrompido a cada 0.1 segundos.

2000-2014, MetaQuotes Software Corp.

846

Funes Comuns

TerminalClose
A funo ordena o terminal a finalizar a operao.
bool TerminalClose(
int ret_code

// cdigo de fechamento do terminal cliente

);

Parmetros
ret_code
[in] Cdigo de retorno, retornado pelo processo do terminal cliente na finalizao da operao.
Valor do Retorno
A funo retorna true para sucesso, caso contrrio - false.
Observao
A funo TerminalClose() no interrompe o terminal imediatamente, ela apenas ordena o terminal a
finalizar sua operao.
O cdigo de um Expert Advisor que chamou TerminalClose() deve ter todos os arranjos para a
finalizao imediata (por exemplo, todos os arquivo previamente abertos devem ser fechados no
modo normal. A chamada desta funo deve ser seguida pelo operador return.
O parmetro ret_code permite indicar o cdigo de retorno necessrio para analise dos motivos da
finalizao de programa da operao do terminal ao inicializ-lo a partir da linha de comando.
Exemplo:
//--- parmetros de entrada
input int

tiks_before=500; // nmero de ticks at finalizao

input int

pips_to_go=15;

// distancia em pips

input int

seconds_st=50;

// nmero de segundos dados para o Expert Advisor

//--- globais
datetime

launch_time;

int

tick_counter=0;

//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--Print(__FUNCTION__," cdigo do motivo = ",reason);
Comment("");
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
static double first_bid=0.0;

2000-2014, MetaQuotes Software Corp.

847

Funes Comuns
MqlTick

tick;

double

distance;

//--SymbolInfoTick(_Symbol,tick);
tick_counter++;
if(first_bid==0.0)
{
launch_time=tick.time;
first_bid=tick.bid;
Print("first_bid =",first_bid);
return;
}
//--- distncia do preo em pips
distance=(tick.bid-first_bid)/_Point;
//--- exibe uma notificao para rastrear a operao do EA
string comm="A partir do momento da inicial:\r\n\x25CF segundos decorridos: "+
IntegerToString(tick.time-launch_time)+" ;"+
"\r\n\x25CF ticks recebidos: "+(string)tick_counter+" ;"+
"\r\n\x25CF preo passou em pontos: "+StringFormat("%G",distance);
Comment(comm);
//--- seo para verificar condio para fechar o terminal
if(tick_counter>=tiks_before)
TerminalClose(0);

// sada pela contador de tick

if(distance>pips_to_go)
TerminalClose(1);

// subida pelo nmero de pips igual ao pips_to_go

if(distance<-pips_to_go)
TerminalClose(-1);

// descida pelo nmero de pips igual ao pips_to_go

if(tick.time-launch_time>seconds_st)
TerminalClose(100);

// finalizao por timeout

//--}

Tambm Veja
Execuo de programa, Erros de execuo, Motivos para desinicializao

2000-2014, MetaQuotes Software Corp.

848

Funes Comuns

TesterStatistics
A funo retorna o valor do parmetro estatstico especificado calculado baseado em resultados de
teste.
double TesterStatistics(
ENUM_STATISTICS statistic_id

// ID

);

Parmetros
statistic_id
[in] O ID do parmetro estatstico a partir da enumerao ENUM_STATISTICS.
Valor do Retorno
O valor do parmetro estatstico proveniente de resultados de teste.
Observao
A funo pode ser chamada de dentro de OnTester() ou OnDeinit() no Provador de Estratgias. Nos
outros casos o resultado indefinido.

2000-2014, MetaQuotes Software Corp.

849

Funes Comuns

TesterWithdrawal
Funo especial para emular a operao de saque de dinheiro no processo de teste. Pode ser usado em
alguns sistemas de gerenciamento de ativos.
bool TesterWithdrawal(
double money

// a soma para sacar

);

Parmetros
money
[in] A soma de dinheiro que ns precisamos sacar (no moeda de depsito).
Valor do Retorno
Com sucesso, retorna verdadeiro (true), do contrrio - falso.

2000-2014, MetaQuotes Software Corp.

850

Funes Comuns

ZeroMemory
A funo redefine uma varivel passada para ela por referncia.
void ZeroMemory(
void& variable

// redefine varivel

);

Parmetros
variable
[in] [out] Varivel passada por referncia, que voc quer redefinir (inicializar com zeros).
Valor do Retorno
Sem valor de retorno.
Observao
Se o parmetro da funo uma string, a chamada ser equivalente a indicar NULL como seu valor.
Para tipos simples e seus arrays, bem como para estruturas/classes consistindo de tais tipos, isso
uma simples redefinio.
Para objetos contendo strings e arrays dinmicos, ZeroMemory() chamada para cada elemento.
Para quaisquer arrays no protegidos pelo modificador const, todos os elementos so zerados.
Para arrays de objetos complexos, ZeroMemory() chamada para cada elemento.
ZeroMemory() no pode ser aplicada a classes com membros protegidos ou herana.

2000-2014, MetaQuotes Software Corp.

851

Funes para Array

Grupo de Funes para Trabalhar com Arrays


Arrays podem ter no mximo quatro dimenses. Cada dimenso indexada de 0 a dimension_size-1.
No caso particular de um array de uma dimenso de 50 elementos, a chamada do primeiro elemento
aparece como array[0], do ltimo elemento - como array[49].
Funo

Ao

ArrayBsearch

Retorna o ndice do primeiro elemento


encontrado na primeira dimenso do array

ArrayCopy

Copia um array em outro array

ArrayCompare

Retorna o resultado da comparao entre dois


arrays de tipos simples ou estruturas
personalizados sem objetos complexos

ArrayFree

Libera buffer de qualquer array dinmico e


define o tamanho da dimenso zero em 0.

ArrayGetAsSeries

Verifica a direo da indexao de um array

ArrayInitialize

Define todos os elementos


numrico para um nico valor

ArrayFill

Preenche um array com o valor especificado

ArrayIsSeries

Verifica se um array uma srie de tempo

ArrayIsDynamic

Verifica se um array dinmico

ArrayMaximum

Busca por um elemento com o valor mximo

ArrayMinimum

Busca por um elemento com o valor mnimo

ArrayRange

Retorna o nmero de elementos na dimenso


especifica do array

ArrayResize

Define o novo tamanho da primeira dimenso


do array

ArraySetAsSeries

Define a direo de indexao de um array

ArraySize

Retorna o nmero de elemento no array

ArraySort

Ordena arrays nmeros pela primeira dimenso

2000-2014, MetaQuotes Software Corp.

de um array

852

Funes para Array

ArrayBsearch
A funo busca por um valor especificado em um array numrico de uma-dimenso.
Para buscar em um array de tipo double
int ArrayBsearch(
const double&

array[],

double

// array para busca

value

// o que pesquisada por

);

Para buscar em um array de tipo float


int ArrayBsearch(
const float&

array[],

float

// array para busca

value

// o que pesquisada por

);

Para buscar em um array de tipo long


int ArrayBsearch(
const long&

array[],

long

value

// array para busca


// o que pesquisada por

);

Para buscar em um array de tipo int


int ArrayBsearch(
const int&

array[],

int

value

// array para busca


// o que pesquisada por

);

Para buscar em um array de tipo short


int ArrayBsearch(
const short&

array[],

short

// array para busca

value

// o que pesquisada por

);

Para buscar em um array de tipo char


int ArrayBsearch(
const char&
char

array[],
value

// array para busca


// o que pesquisada por

);

Parmetros
array[]
[in] Array numrico para busca.
value
[in] Valor para busca.

2000-2014, MetaQuotes Software Corp.

853

Funes para Array

Valor do Retorno
A funo retorna o ndice de um elemento encontrado. Se o valor desejado no for encontrado, a
funo retorna o ndice de um elemento mais prximo em valor.
Observao
A busca binria processa somente arrays ordenados. Para ordenar arrays numricos use a funo
ArraySort().
Exemplo:
#property description "Script baseado no indicador RSI para visualizao de dados"
#property description "quantas vezes o mercado ficou em"
#property description "reas sobre-compradas e sobre-vendidas em intervalo de tempo especfico."
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- parmetros de entrada
input int

InpMAPeriod=14;

// Perodo de mdia mvel

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;

// Tipo de preo

input double

InpOversoldValue=30.0;

// Nvel sobre-vendido

input double

InpOverboughtValue=70.0;

// Nvel sobre-comprado

input datetime

InpDateStart=D'2012.01.01 00:00';

// Data de incio para anlise

input datetime

InpDateFinish=D'2013.01.01 00:00'; // Data final para anlise

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
double rsi_buff[]; // array do valores do indicador
int

size=0;

// tamanho de array

//--- receber a manipulao do indicador RSI


ResetLastError();
int rsi_handle=iRSI(Symbol(),Period(),InpMAPeriod,InpAppliedPrice);
if(rsi_handle==INVALID_HANDLE)
{
//--- falha para receber a manipulao do indicador

PrintFormat("Manipulador de indicator recebido com erro. Cdigo de erro = %d",GetLastError())


return;
}
//--- fica no loop, at que o indicador calcula todos os seus valores
while(BarsCalculated(rsi_handle)==-1)
{
//--- sair se o indicador concluir foradamente a operao de script
if(IsStopped())
return;
//--- uma pausa para permitir que o indicador calcule todos os seus valores
Sleep(10);
}
//--- copiar os valores do indicador para um determinado perodo de tempo

2000-2014, MetaQuotes Software Corp.

854

Funes para Array


ResetLastError();
if(CopyBuffer(rsi_handle,0,InpDateStart,InpDateFinish,rsi_buff)==-1)
{
PrintFormat("Falha para copiar valores do indicador. Cdigo de erro = %d",GetLastError());
return;
}
//--- recebe o tamanho do array
size=ArraySize(rsi_buff);
//--- classificar o array
ArraySort(rsi_buff);
//--- descobrir o tempo (em termos percentuais) que o mercado ficou na rea sobre-vendida
double ovs=(double)ArrayBsearch(rsi_buff,InpOversoldValue)*100/(double)size;
//--- descobrir o tempo (em termos percentuais) que o mercado ficou na rea sobre-comprada
double ovb=(double)(size-ArrayBsearch(rsi_buff,InpOverboughtValue))*100/(double)size;
//--- formar as strings para exibir os dados
string str="A partir de "+TimeToString(InpDateStart,TIME_DATE)+" para "
+TimeToString(InpDateFinish,TIME_DATE)+" o mercado ficou:";
string str_ovb="em rea sobre-comprada "+DoubleToString(ovb,2)+"% do tempo";
string str_ovs="em rea sobre-vendida "+DoubleToString(ovs,2)+"% do tempo";
//--- mostrar os dados no grfico
CreateLabel("topo",5,60,str,clrDodgerBlue);
CreateLabel("sobre-comprado",5,35,str_ovb,clrDodgerBlue);
CreateLabel("sobre-vendido",5,10,str_ovs,clrDodgerBlue);
//--- redesenhar o grfico
ChartRedraw(0);
//--- pausa
Sleep(10000);
}
//+------------------------------------------------------------------+
//| Mostrar comentrio no canto inferior esquerdo do grfico

//+------------------------------------------------------------------+
void CreateLabel(const string name,const int x,const int y,
const string str,const color clr)
{
//--- cria um rtulo (label)
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- colocar a etiqueta no canto inferior esquerdo
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
//--- alterar a posio do ponto de ancoragem
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- distncia a partir do ponto de ancoragem na direo X
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
//--- distncia a partir do ponto de ancoragem na direo Y
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- texto do rtulo
ObjectSetString(0,name,OBJPROP_TEXT,str);
//--- cor do texto
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- tamanho do texto

2000-2014, MetaQuotes Software Corp.

855

Funes para Array


ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
}

2000-2014, MetaQuotes Software Corp.

856

Funes para Array

ArrayCopy
Copia um array em um outro array.
int ArrayCopy(
void&

dst_array[],

// array de destino

const void& src_array[],

// array de origem

int

dst_start=0,

// ndice de incio do array destino a partir do qual se escre

int

src_start=0,

// primeiro ndice de um array de origem

int

count=WHOLE_ARRAY

// nmero de elementos

);

Parmetros
dst_array[]
[out] Array destino
src_array[]
[in] Array fonte
dst_start=0
[in] ndice de incio do array destino. Por default, o ndice de incio 0.
src_start=0
[in] ndice de incio para o array fonte. Por default, o ndice de incio 0.
count=WHOLE_ARRAY
[in] Nmero de elementos que devem ser copiados. Por padro, todo conjunto array copiado
(count=WHOLE_ARRAY).
Valor do Retorno
Retorna o nmero de elementos copiados.
Observao
Se count<0 ou count>src_size-src_start, toda a parte restante do array copiada. Arrays so
copiados da esquerda para direita. Para arrays de srie, a posio de incio corretamente ajustada
para copiar da esquerda para direita. Se um array copiado nele mesmo, o resultado indefinido.
Se os arrays so de tipos diferentes, durante a cpia a funo tenta transformar cada elemento do
array fonte para o tipo do array destino. Um array de string pode ser copiado somente em um array
de string. Arrays de classes e estruturas contendo objetos que requerem inicializao no so
copiados. Um array de estruturas pode ser copiado somente em um array do mesmo tipo.
Exemplo:
#property description "O indicador destaca os candlesticks que so local"
#property description "altos e baixos. Comprimento do intervalo para encontrar"
#property description "valores extremos usando parmetros de entrada."
//--- configuraes do indicador
#property indicator_chart_window
#property indicator_buffers 5

2000-2014, MetaQuotes Software Corp.

857

Funes para Array


#property indicator_plots

//---- plotar
#property indicator_label1

"Extremums"

#property indicator_type1

DRAW_COLOR_CANDLES

#property indicator_color1

clrLightSteelBlue,clrRed,clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- constante pr-definida


#define INDICATOR_EMPTY_VALUE 0.0
//--- parmetros de entrada
input int InpNum=4; // Meio intervalo de comprimento
//--- buffers do indicador
double ExtOpen[];
double ExtHigh[];
double ExtLow[];
double ExtClose[];
double ExtColor[];
//--- variveis globais
int

ExtStart=0; // ndice do primeiro candlestick que no um extremo

int

ExtCount=0; // nmero de no extremos no intervalo

//+------------------------------------------------------------------+
//| Preenchimento dos candlesticks no extremos

//+------------------------------------------------------------------+
void FillCandles(const double &open[],const double &high[],
const double &low[],const double &close[])
{
//--- preencher os candlesticks
ArrayCopy(ExtOpen,open,ExtStart,ExtStart,ExtCount);
ArrayCopy(ExtHigh,high,ExtStart,ExtStart,ExtCount);
ArrayCopy(ExtLow,low,ExtStart,ExtStart,ExtCount);
ArrayCopy(ExtClose,close,ExtStart,ExtStart,ExtCount);
}
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ExtOpen);
SetIndexBuffer(1,ExtHigh);
SetIndexBuffer(2,ExtLow);
SetIndexBuffer(3,ExtClose);
SetIndexBuffer(4,ExtColor,INDICATOR_COLOR_INDEX);
//--- especificar o valor que no apresentado
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,INDICATOR_EMPTY_VALUE);
//--- especificar os nomes dos buffers do indicador para exibir na janela de dados
PlotIndexSetString(0,PLOT_LABEL,"Open;High;Low;Close");
//--return(INIT_SUCCEEDED);

2000-2014, MetaQuotes Software Corp.

858

Funes para Array


}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- definir a indexao direta em sries de tempo
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);
//--- varivel da barra para iniciar clculo
int start=prev_calculated;
//--- clculo no realizado pela primeira InpNum*2 barras
if(start==0)
{
start+=InpNum*2;
ExtStart=0;
ExtCount=0;
}
//--- se o bar acabou de se formar, verifique o seguinte extremo potencial
if(rates_total-start==1)
start--;
//--- ndice da barra a ser verificado para o extremo
int ext;
//--- valor do indicador para clculo do loop
for(int i=start;i<rates_total-1;i++)
{
//--- inicialmente num bar sem desenhar
ExtOpen[i]=0;
ExtHigh[i]=0;
ExtLow[i]=0;
ExtClose[i]=0;
//--- ndice extremo para verificao
ext=i-InpNum;
//--- verificar o mximo local
if(IsMax(high,ext))
{
//--- destacar um candlestick extremo
ExtOpen[ext]=open[ext];

2000-2014, MetaQuotes Software Corp.

859

Funes para Array


ExtHigh[ext]=high[ext];
ExtLow[ext]=low[ext];
ExtClose[ext]=close[ext];
ExtColor[ext]=1;
//--- destacar outros candles at o extremo com uma cor neutra
FillCandles(open,high,low,close);
//--- alterar as cores variveis
ExtStart=ext+1;
ExtCount=0;
//--- passar para a prxima iterao
continue;
}
//--- verifique o mnimo local
if(IsMin(low,ext))
{
//--- destacar um candlestick extremo
ExtOpen[ext]=open[ext];
ExtHigh[ext]=high[ext];
ExtLow[ext]=low[ext];
ExtClose[ext]=close[ext];
ExtColor[ext]=2;
//--- destacar outros candles at o extremo com uma cor neutra
FillCandles(open,high,low,close);
//--- alterar os valores das variveis
ExtStart=ext+1;
ExtCount=0;
//--- passar para a prxima iterao
continue;
}
//--- aumentar o nmero de no extremos no intervalo
ExtCount++;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Verificar se o atual elemento array um local mximo (high)

//+------------------------------------------------------------------+
bool IsMax(const double &price[],const int ind)
{
//--- varivel do incio do intervalo
int i=ind-InpNum;
//--- final do perodo do intervalo
int finish=ind+InpNum+1;
//--- verificar a primeiro metade do intervalo
for(;i<ind;i++)
{
if(price[ind]<=price[i])
return(false);

2000-2014, MetaQuotes Software Corp.

860

Funes para Array


}
//--- verificar a segunda metade do intervalo
for(i=ind+1;i<finish;i++)
{
if(price[ind]<=price[i])
return(false);
}
//--- este um extremo
return(true);
}
//+------------------------------------------------------------------+
//| Verificar se o atual elemento array um local mnimo (low)

//+------------------------------------------------------------------+
bool IsMin(const double &price[],const int ind)
{
//--- varivel do incio do intervalo
int i=ind-InpNum;
//--- varivel do final do intervalo
int finish=ind+InpNum+1;
//--- verificar a primeiro metade do intervalo
for(;i<ind;i++)
{
if(price[ind]>=price[i])
return(false);
}
//--- verificar a segunda metade do intervalo
for(i=ind+1;i<finish;i++)
{
if(price[ind]>=price[i])
return(false);
}
//--- este um extremo
return(true);
}

2000-2014, MetaQuotes Software Corp.

861

Funes para Array

ArrayCompare
A funo retorna o resultado da comparao de dois arrays de mesmo tipo. Pode ser usado para
comparar arrays de tipos simples ou estruturas customizadas sem objetos complexos, isto ,
estruturas customizadas que no contm strings, arrays dinmicos, classes e outras estruturas com
objetos complexos.
int ArrayCompare(
const void& array1[],

// primeiro array

const void& array2[],

// segundo array

uint

start1=0,

// deslocamento inicial no primeiro array

uint

start2=0,

// deslocamento inicial no segundo array

uint

count=WHOLE_ARRAY

// nmero de elementos para comparao

);

Parmetros
array1[]
[in] Primeiro array.
array2[]
[in] Segundo array.
start1=0
[in] O ndice inicial do elemento no primeiro array, a partir do qual a comparao comea. O
ndice de comeo default - 0.
start2=0
[in] O ndice inicial do elemento no segundo array, a partir do qual a comparao comea. O
ndice de comeo default - 0.
count=WHOLE_ARRAY
[in] Nmero de elementos a ser comparados. Todos os elementos de ambos os arrays participam
da comparao por default (count=WHOLE_ARRAY).
Valor de retorno
-1, se array1[] menos que array2[]
0, se array1[] igual a array2[]
1, se array1[] mais que array2[]
-2, se um erro ocorrer devido a incompatibilidade dos tipos dos arrays comparados ou se os valores
start1, start2 ou count levarem a cair para fora do array.
Observao
A funo no retornar 0 (os arrays no sero considerados iguais) se os arrays diferirem em
tamanho e count=WHOLE_ARRAY para o caso em que um array um subconjunto fiel do outro.
Neste caso, o resultado da comparao de tamanhos destes arrays iro retornar: -1, se o tamanho
de array1[] for menor que o tamanho de array2[] , caso contrrio 1.

2000-2014, MetaQuotes Software Corp.

862

Funes para Array

ArrayFree
Libera um buffer de qualquer array dinmico e define o tamanho da dimenso zero para 0.
void ArrayFree(
void& array[]

// array

);

Parmetros
array[]
[in] Array dinmico.
Valor do Retorno
Sem valor de retorno.
Observao
A necessidade de usar a funo ArrayFree() pode no aparecer com muita freqncia, considerando
que toda a memria utilizada liberada de uma s vez e o principal trabalho com os arrays
compreende o acesso aos buffers dos indicadores. Os tamanhos dos buffers so controlados
automaticamente pelo subsistema executivo do terminal.
No caso, necessrio controlar manualmente a memria no ambiente dinmico complexo da
aplicao, a funo ArrayFree() permite que os usurios possam liberar a memria ocupada pelo
array dinmico desnecessrio de forma direta e imediata.
Exemplo:
#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Controls\Label.mqh>
#include <Controls\ComboBox.mqh>
//--- constantes predefinidas
#define X_START 0
#define Y_START 0
#define X_SIZE 280
#define Y_SIZE 300
//+------------------------------------------------------------------+
//| Uma classe para trabalhar com uma memria

//+------------------------------------------------------------------+
class CMemoryControl : public CAppDialog
{
private:
//--- tamanho de array
int

m_arr_size;

//--- arrays
char

m_arr_char[];

int

m_arr_int[];

float

m_arr_float[];

double

m_arr_double[];

2000-2014, MetaQuotes Software Corp.

863

Funes para Array


long

m_arr_long[];

//--- rtulos
CLabel

m_lbl_memory_physical;

CLabel

m_lbl_memory_total;

CLabel

m_lbl_memory_available;

CLabel

m_lbl_memory_used;

CLabel

m_lbl_array_size;

CLabel

m_lbl_array_type;

CLabel

m_lbl_error;

CLabel

m_lbl_change_type;

CLabel

m_lbl_add_size;

//--- botes
CButton

m_button_add;

CButton

m_button_free;

//--- caixas de combinao


CComboBox

m_combo_box_step;

CComboBox

m_combo_box_type;

//--- valor atual do tipo array da caixa de combinao


int

m_combo_box_type_value;

public:
CMemoryControl(void);
~CMemoryControl(void);
//--- mtodo de criao de objeto de classe
virtual bool

Create(const long chart,const string name,const int subwin,const int x1,const

//--- manipulador de eventos grfico


virtual bool

OnEvent(const int id,const long &lparam,const double &dparam,const string &spa

protected:
//--- cria um rtulos
bool

CreateLabel(CLabel &lbl,const string name,const int x,const int y,const string

//--- criar elementos de controle


bool

CreateButton(CButton &button,const string name,const int x,const int y,const s

bool

CreateComboBoxStep(void);

bool

CreateComboBoxType(void);

//--- manipuladores de evento


void

OnClickButtonAdd(void);

void

OnClickButtonFree(void);

void

OnChangeComboBoxType(void);

//--- mtodos para trabalhar com o atual array


void

CurrentArrayFree(void);

bool

CurrentArrayAdd(void);

};
//+------------------------------------------------------------------+
//| Liberar memria do atual array

//+------------------------------------------------------------------+
void CMemoryControl::CurrentArrayFree(void)
{
//--- restabelecer o tamanho do array

2000-2014, MetaQuotes Software Corp.

864

Funes para Array


m_arr_size=0;
//--- liberar o array
if(m_combo_box_type_value==0)
ArrayFree(m_arr_char);
if(m_combo_box_type_value==1)
ArrayFree(m_arr_int);
if(m_combo_box_type_value==2)
ArrayFree(m_arr_float);
if(m_combo_box_type_value==3)
ArrayFree(m_arr_double);
if(m_combo_box_type_value==4)
ArrayFree(m_arr_long);
}
//+------------------------------------------------------------------+
//| Tentativa de adicionar memria para o atual array

//+------------------------------------------------------------------+
bool CMemoryControl::CurrentArrayAdd(void)
{
//--- se o tamanho da memria usada excede o tamanho da memria fsica, sair
if(TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL)/TerminalInfoInteger(TERMINAL_MEMORY_USED)<2)
return(false);
//--- tentativa para alocar memria de acordo com o atual tipo
if(m_combo_box_type_value==0 && ArrayResize(m_arr_char,m_arr_size)==-1)
return(false);
if(m_combo_box_type_value==1 && ArrayResize(m_arr_int,m_arr_size)==-1)
return(false);
if(m_combo_box_type_value==2 && ArrayResize(m_arr_float,m_arr_size)==-1)
return(false);
if(m_combo_box_type_value==3 && ArrayResize(m_arr_double,m_arr_size)==-1)
return(false);
if(m_combo_box_type_value==4 && ArrayResize(m_arr_long,m_arr_size)==-1)
return(false);
//--- memria alocada
return(true);
}
//+------------------------------------------------------------------+
//| Manipulao de eventos

//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CMemoryControl)
ON_EVENT(ON_CLICK,m_button_add,OnClickButtonAdd)
ON_EVENT(ON_CLICK,m_button_free,OnClickButtonFree)
ON_EVENT(ON_CHANGE,m_combo_box_type,OnChangeComboBoxType)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Construtor

//+------------------------------------------------------------------+
CMemoryControl::CMemoryControl(void)
{
}

2000-2014, MetaQuotes Software Corp.

865

Funes para Array


//+------------------------------------------------------------------+
//| Destrutor

//+------------------------------------------------------------------+
CMemoryControl::~CMemoryControl(void)
{
}
//+------------------------------------------------------------------+
//| Mtodo para criao de objeto de classe

//+------------------------------------------------------------------+
bool CMemoryControl::Create(const long chart,const string name,const int subwin,
const int x1,const int y1,const int x2,const int y2)
{
//--- base criada de objetos de classe
if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
return(false);
//--- preparar strings para etiquetas
string str_physical="Memria Fsica = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL)+"
string str_total="Memria total = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_TOTAL)+" Mb";

string str_available="Memria disponvel = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_AVAILAB


string str_used="Memria usada = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_USED)+" Mb";
//--- cria um rtulos

if(!CreateLabel(m_lbl_memory_physical,"physical_label",X_START+10,Y_START+5,str_physical,12,clrB
return(false);
if(!CreateLabel(m_lbl_memory_total,"total_label",X_START+10,Y_START+30,str_total,12,clrBlack))
return(false);

if(!CreateLabel(m_lbl_memory_available,"available_label",X_START+10,Y_START+55,str_available,12,
return(false);
if(!CreateLabel(m_lbl_memory_used,"used_label",X_START+10,Y_START+80,str_used,12,clrBlack))
return(false);

if(!CreateLabel(m_lbl_array_type,"type_label",X_START+10,Y_START+105,"Array type = double",12,cl


return(false);

if(!CreateLabel(m_lbl_array_size,"size_label",X_START+10,Y_START+130,"Array size = 0",12,clrBlac


return(false);
if(!CreateLabel(m_lbl_error,"error_label",X_START+10,Y_START+155,"",12,clrRed))
return(false);

if(!CreateLabel(m_lbl_change_type,"change_type_label",X_START+10,Y_START+185,"Change type",10,cl
return(false);

if(!CreateLabel(m_lbl_add_size,"add_size_label",X_START+10,Y_START+210,"Add to array",10,clrBlac
return(false);
//--- create control elements
if(!CreateButton(m_button_add,"add_button",X_START+15,Y_START+245,"Adicionar",12,clrBlue))
return(false);
if(!CreateButton(m_button_free,"free_button",X_START+75,Y_START+245,"Livre",12,clrBlue))
return(false);
if(!CreateComboBoxType())
return(false);
if(!CreateComboBoxStep())
return(false);
//--- inicializar a varivel

2000-2014, MetaQuotes Software Corp.

866

Funes para Array


m_arr_size=0;
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Criar o boto

//+------------------------------------------------------------------+
bool CMemoryControl::CreateButton(CButton &button,const string name,const int x,
const int y,const string str,const int font_size,
const int clr)
{
//--- criar o boto
if(!button.Create(m_chart_id,name,m_subwin,x,y,x+50,y+20))
return(false);
//--- texto
if(!button.Text(str))
return(false);
//--- tamanho de fonte
if(!button.FontSize(font_size))
return(false);
//--- cor de rtulo
if(!button.Color(clr))
return(false);
//--- adicionar o boto para os elementos de controle
if(!Add(button))
return(false);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Criar uma caixa de combinao para o tamanho do array

//+------------------------------------------------------------------+
bool CMemoryControl::CreateComboBoxStep(void)
{
//--- criar a caixa de combinao

if(!m_combo_box_step.Create(m_chart_id,"step_combobox",m_subwin,X_START+100,Y_START+185,X_START+
return(false);
//--- adicionar elementos para a caixa de combinao
if(!m_combo_box_step.ItemAdd("100 000",100000))
return(false);
if(!m_combo_box_step.ItemAdd("1 000 000",1000000))
return(false);
if(!m_combo_box_step.ItemAdd("10 000 000",10000000))
return(false);
if(!m_combo_box_step.ItemAdd("100 000 000",100000000))
return(false);
//--- definir o elemento atual da caixa de combinao
if(!m_combo_box_step.SelectByValue(1000000))
return(false);

2000-2014, MetaQuotes Software Corp.

867

Funes para Array


//--- adicionar a caixa de combinao para controlar elementos
if(!Add(m_combo_box_step))
return(false);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Criar uma caixa de combinao para o tipo de array

//+------------------------------------------------------------------+
bool CMemoryControl::CreateComboBoxType(void)
{
//--- criar a caixa de combinao

if(!m_combo_box_type.Create(m_chart_id,"type_combobox",m_subwin,X_START+100,Y_START+210,X_START+
return(false);
//--- adicionar elementos para a caixa de combinao
if(!m_combo_box_type.ItemAdd("char",0))
return(false);
if(!m_combo_box_type.ItemAdd("int",1))
return(false);
if(!m_combo_box_type.ItemAdd("float",2))
return(false);
if(!m_combo_box_type.ItemAdd("double",3))
return(false);
if(!m_combo_box_type.ItemAdd("long",4))
return(false);
//--- definir o elemento atual da caixa de combinao
if(!m_combo_box_type.SelectByValue(3))
return(false);
//--- armazenar o elemento da caixa de combinao atual
m_combo_box_type_value=3;
//--- adicionar a caixa de combinao para controlar elementos
if(!Add(m_combo_box_type))
return(false);
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| criar um rtulo

//+------------------------------------------------------------------+
bool CMemoryControl::CreateLabel(CLabel &lbl,const string name,const int x,
const int y,const string str,const int font_size,
const int clr)
{
//--- criar um rtulo
if(!lbl.Create(m_chart_id,name,m_subwin,x,y,0,0))
return(false);
//--- texto
if(!lbl.Text(str))
return(false);

2000-2014, MetaQuotes Software Corp.

868

Funes para Array


//--- tamanho de fonte
if(!lbl.FontSize(font_size))
return(false);
//--- cor
if(!lbl.Color(clr))
return(false);
//--- adicionar a etiqueta para controlar elementos
if(!Add(lbl))
return(false);
//--- sucesso
return(true);
}
//+------------------------------------------------------------------+
//| Manipulador criando boto de evento "Adicionar"

//+------------------------------------------------------------------+
void CMemoryControl::OnClickButtonAdd(void)
{
//--- aumentar o tamanho do array
m_arr_size+=(int)m_combo_box_step.Value();
//--- tentativa de alocar memria para o atual array
if(CurrentArrayAdd())
{
//--- memria alocada, exibir o status atual na tela

m_lbl_memory_available.Text("Memria disponvel = "+(string)TerminalInfoInteger(TERMINAL_MEMO

m_lbl_memory_used.Text("Memria usada = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_USED)+"


m_lbl_array_size.Text("Tamanho de array = "+IntegerToString(m_arr_size));
m_lbl_error.Text("");
}
else
{
//--- falha para alocar memria, exibir a mensagem de erro
m_lbl_error.Text("Array muito grande, erro!");
//--- retornar o tamanho do array anterior
m_arr_size-=(int)m_combo_box_step.Value();
}
}
//+------------------------------------------------------------------+
//| Manipulador criando o boto de evento "Livre"

//+------------------------------------------------------------------+
void CMemoryControl::OnClickButtonFree(void)
{
//--- liberar memria do atual array
CurrentArrayFree();
//--- exibir o status atual na tela

m_lbl_memory_available.Text("Memria disponvel = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_

m_lbl_memory_used.Text("Memria usada = "+(string)TerminalInfoInteger(TERMINAL_MEMORY_USED)+" Mb


m_lbl_array_size.Text("Tamanho de array = 0");
m_lbl_error.Text("");
}

2000-2014, MetaQuotes Software Corp.

869

Funes para Array


//+------------------------------------------------------------------+
//| Manipulador da caixa de combinao para alterar evento

//+------------------------------------------------------------------+
void CMemoryControl::OnChangeComboBoxType(void)
{
//--- verificar se o tipo de array foi alterado
if(m_combo_box_type.Value()!=m_combo_box_type_value)
{
//--- liberar memria do atual array
OnClickButtonFree();
//--- trabalhar com outro tipo de array
m_combo_box_type_value=(int)m_combo_box_type.Value();
//--- exibir um novo tipo de array na tela
if(m_combo_box_type_value==0)
m_lbl_array_type.Text("Tipo de array = char");
if(m_combo_box_type_value==1)
m_lbl_array_type.Text("Tipo de array = int");
if(m_combo_box_type_value==2)
m_lbl_array_type.Text("Tipo de array = float");
if(m_combo_box_type_value==3)
m_lbl_array_type.Text("Tipo de array = double");
if(m_combo_box_type_value==4)
m_lbl_array_type.Text("Tipo de array = long");
}
}
//--- objeto de classe CMemoryControl
CMemoryControl ExtDialog;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- criar o dilogo
if(!ExtDialog.Create(0,"MemoryControl",0,X_START,Y_START,X_SIZE,Y_SIZE))
return(INIT_FAILED);
//--- lanamento
ExtDialog.Run();
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--ExtDialog.Destroy(reason);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

870

Funes para Array


//| Expert chart event function

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
}

2000-2014, MetaQuotes Software Corp.

871

Funes para Array

ArrayGetAsSeries
Verifica a direo do ndice de um array.
bool ArrayGetAsSeries(
const void& array[]

// array para verificao

);

Parmetros
array
[in] Array verificado.
Valor do Retorno
Retorna true, se o array especificado tem o flag AS_SERIES definido, isto , o acesso ao array
realizado de trs para frente como em sries de tempo. A indexao em timesries de tempo difere
da indexao de um array comum, na medida que os elementos de sries de tempo so indexados
do fim para o comeo (dos dados mais novos para os mais antigos).
Observao
Para verificar se um array se comporta como uma srie de tempo, use a funo ArrayIsSeries().
Array de dados de preos passados como parmetros de entrada na funo OnCalculate() no
obrigatoriamente tm a mesma direo de uma srie de tempo. A direo de indexao necessria
pode ser definida usando a funo ArraySetAsSeries().
Exemplo:
#property description "Indicador calcula os valores absolutos das diferenas entre"
#property description "Preos de Open (Abertura) e Close (Fechamento) ou High (Alto) e Low (Baixo)
#property description "como um histograma."
//--- configuraes do indicador
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar
#property indicator_type1

DRAW_HISTOGRAM

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input bool InpAsSeries=true; // Direo de indexao no buffer de indicador
input bool InpPrices=true;

// Clculo de preos (true - Abertura, Fechamento; false - Mximo, Mn

//--- buffer do indicador


double ExtBuffer[];
//+------------------------------------------------------------------+
//| Calcule os valores do indicador

//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
const double &first[],const double &second[],double &buffer[])
{
//--- iniciar varivel para o clculo das barras

2000-2014, MetaQuotes Software Corp.

872

Funes para Array


int start=prev_calculated;
//--- trabalho na ltima barra se os valores do indicador j foram calculados no tick anterior
if(prev_calculated>0)
start--;
//--- definir a direo de indexao nos arrays
bool as_series_first=ArrayGetAsSeries(first);
bool as_series_second=ArrayGetAsSeries(second);
bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- substituir a direo de indexao com um direto, se necessrio
if(as_series_first)
ArraySetAsSeries(first,false);
if(as_series_second)
ArraySetAsSeries(second,false);
if(as_series_buffer)
ArraySetAsSeries(buffer,false);
//--- calcule valores do indicador
for(int i=start;i<rates_total;i++)
buffer[i]=MathAbs(first[i]-second[i]);
}
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- vincular buffers de indicador
SetIndexBuffer(0,ExtBuffer);
//--- conjunto de elementos de indexao no buffer de indicador
ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- verificar quais os preos do indicador so calculados
if(InpPrices)
{
//--- Preos Open (abrir) e Close (fechar)
PlotIndexSetString(0,PLOT_LABEL,"BodySize");
//--- definir a cor do indicador
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
}
else
{
//--- Preos High (mximo) e Low (mnimo)
PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
//--- definir a cor do indicador
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

873

Funes para Array


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[])
{
//--- calcular o indicador de acordo com o valor do sinalizador
if(InpPrices)
CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
else
CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Aceso a sries de tempo, ArraySetAsSeries

2000-2014, MetaQuotes Software Corp.

874

Funes para Array

ArrayInitialize
A funo inicializa um array numrico com um valor predefinido.
void ArrayInitialize(
double array[],

// array inicializado

double value

// valor que ser definido

);

Parmetros
array[]
[out] Array numrico que deve ser inicializado.
value
[in] Novo valor que deve ser definido para todos os elementos do array.
Valor do Retorno
Sem valor de retorno.
Observao
A funo ArrayResize() permite definir o tamanho de um array com uma reserva para expanso
posterior sem a realocao de memria. implementada para uma melhor performance, porque as
operaes de realocao de memria so razoavelmente lentas.
A inicializao de um array usando ArrayInitialize(array, init_val) no significa a inicializao com o
mesmo valor dos elementos da reserva alocados para este array. Em uma expanso posterior do
array usando a funo ArrayResize(), os elementos sero adicionados no final do array, seus valores
sero indefinidos e na maioria dos casos no sero iguais ao init_value.
Exemplo:
void OnStart()
{
//--- array dinmico
double array[];

//--- vamos definir o tamanho do array para 100 elementos e reservar um buffer para outros 10 eleme
ArrayResize(array,100,10);
//--- inicializa os elementos do array com valor EMPTY_VALUE=DBL_MAX
ArrayInitialize(array,EMPTY_VALUE);
Print("Valores dos 10 ltimos elementos antes da inicializao");
for(int i=90;i<100;i++) printf("array[%d] = %G",i,array[i]);
//--- expande o array em 5 elementos
ArrayResize(array,105);
Print("Valores dos 10 ltimos elementos antes do ArrayResize(array,105)");
//--- valores dos 5 ltimos elementos so obtidos do buffer de reserva
for(int i=95;i<105;i++) printf("array[%d] = %G",i,array[i]);
}

2000-2014, MetaQuotes Software Corp.

875

Funes para Array

ArrayFill
A funo preenche um array com o valor especificado.
void ArrayFill(
void& array[],

// array

uint

start,

// ndice de incio

uint

count,

// nmero de elementos para preencher

void

value

// valor

);

Parmetros
array[]
[out] Array de tipo simples (char, uchar, short, ushort, int, uint, long, ulong, bool, color,
datetime, float, double).
start
[in] ndice de incio. Neste caso, flag AS_SERIES especfico ignorado.
count
[in] Nmero de elementos para preencher.
value
[in] Valor usado no preenchimento do array.
Valor de retorno
Sem valor de retorno.
Observao
Quando a funo ArrayFill() chamada, a direo de indexao normal( da esquerda para direita)
sempre implcita. Isso significa que a alterao da ordem de acesso dos elementos do array usando
a funo ArraySetAsSeries() ignorada.
Um array multidimensional exibido como unidimensional quando processado pela funo
ArrayFill(). Por exemplo, array[2][4] processado como array[8]. Portanto, voc deve especificar o
ndice do elemento inicial para ser igual a 5 quando trabalhar com este array. Assim, a chamada de
ArrayFill(array, 5, 2, 3.14) para array[2][4] preenche os elementos array[1][1] e array[1][2] com
3.14.
Exemplo:
void OnStart()
{
//--- declara um array dinmico
int a[];
//--- define tamanho
ArrayResize(a,10);
//--- preenche os primeiros 5 elementos com 123
ArrayFill(a,0,5,123);
//--- preenche os primeiros 5 elementos com 456

2000-2014, MetaQuotes Software Corp.

876

Funes para Array


ArrayFill(a,5,5,456);
//--- mostrar valores
for(int i=0;i<ArraySize(a);i++) printf("a[%d] = %d",i,a[i]);
}

2000-2014, MetaQuotes Software Corp.

877

Funes para Array

ArrayIsDynamic
A funo verifica se um array dinmico.
bool ArrayIsDynamic(
const void& array[]

// array verificado

);

Parmetros
array[]
[in] Array verificado.
Valor do Retorno
Retorna true se o array selecionado dinmico, caso contrrio retorna false.
Exemplo:
#property description "Este indicador no calcula valores. Faz uma nica tentativa para"

#property description "aplicar a chamada da funo ArrayFree() para trs arrays: dinmico, esttico
#property description "um buffer de indicador. Os resultados so mostrados no jornal dos Experts."
//--- configuraes do indicador
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- variveis globais


double ExtDynamic[];

// array dinmico

double ExtStatic[100]; // array esttico


bool

ExtFlag=true;

double ExtBuff[];

// bandeira
// buffer do indicador

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- alocar memria para o array
ArrayResize(ExtDynamic,100);
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ExtBuff);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])

2000-2014, MetaQuotes Software Corp.

878

Funes para Array


{
//--- executar uma anlise nica
if(ExtFlag)
{
//--- tentativa para liberar memria para os arrays
//--- 1. Array dinmico
Print("+============================+");
Print("1. Verificar o array dinmico:");
Print("Antes do tamanho da memria ser liberada = ",ArraySize(ExtDynamic));
Print("Isto um array dinmico = ",ArrayIsDynamic(ExtDynamic) ? "Sim" : "No");
//--- tentativa de liberar memria do array
ArrayFree(ExtDynamic);
Print("Aps o tamanho da memria ser liberada = ",ArraySize(ExtDynamic));
//--- 2. Array esttico
Print("2. Verificar array esttico:");
Print("Antes do tamanho da memria ser liberada = ",ArraySize(ExtStatic));
Print("Isto um array dinmico = ",ArrayIsDynamic(ExtStatic) ? "Sim" : "No");
//--- tentativa de liberar memria do array
ArrayFree(ExtStatic);
Print("Aps do tamanho da memria ser liberada = ",ArraySize(ExtStatic));
//--- 3. Buffer do indicador
Print("3. Verificar buffer do indicador:");
Print("Antes do tamanho da memria ser liberada = ",ArraySize(ExtBuff));
Print("Isto um array dinmico = ",ArrayIsDynamic(ExtBuff) ? "Sim" : "No");
//--- tentativa de liberar memria do array
ArrayFree(ExtBuff);
Print("Aps do tamanho da memria ser liberada = ",ArraySize(ExtBuff));
//--- alterar o valor do sinalizador
ExtFlag=false;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Acesso a sries de tempo e indicadores

2000-2014, MetaQuotes Software Corp.

879

Funes para Array

ArrayIsSeries
A funo verifica se um array uma srie de tempo.
bool ArrayIsSeries(
const void& array[]

// array verificado

);

Parmetros
array[]
[in] Array verificado.
Valor do Retorno
Retorna true, se o array verificado um array de srie de tempo, caso contrrio, retorna false.
Arrays passados como parmetro para a funo OnCalculate() devem ser verificados quanto a ordem
de acesso dos elementos do array atravs de ArrayGetAsSeries().
Exemplo:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Etiqueta1"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- buffers do indicador


double

Label1Buffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[],

2000-2014, MetaQuotes Software Corp.

880

Funes para Array


const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--if(ArrayIsSeries(open))
Print("open[] timeseries");
else
Print("open[] no timeseries!!!");
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Acesso a sries de tempo e indicadores

2000-2014, MetaQuotes Software Corp.

881

Funes para Array

ArrayMaximum
A funo busca um elemento mximo em um array numrico de uma-dimenso.
int ArrayMaximum(
const void&

array[],

// array para busca

int

start=0,

// ndice a partir do qual comea a verificao

int

count=WHOLE_ARRAY

// nmero de elementos verificados

);

Parmetros
array[]
[in] Um array nmerico, na qual a busca feita.
start=0
[in] ndice a partir do qual comea a verificao.
count=WHOLE_ARRAY
[in]
Nmero de elementos
(count=WHOLE_ARRAY)..

para

busca.

Por

default,

busca

no

array

inteiro

Valor do Retorno
A funo retorna um ndice de um elemento encontrado levando em considerao a srie do array.
Em caso de falha, retorna -1.
Exemplo:

#property description "O indicador mostra sobre as barras (candlesticks) um prazo de tempo maior do
//--- configuraes do indicador
#property indicator_chart_window
#property indicator_buffers 16
#property indicator_plots

//---- plot 1
#property indicator_label1

"BearBody"

#property indicator_color1

clrSeaGreen,clrSeaGreen

//---- plot 2
#property indicator_label2

"BearBodyEnd"

#property indicator_color2

clrSeaGreen,clrSeaGreen

//---- plot 3
#property indicator_label3

"BearShadow"

#property indicator_color3

clrSalmon,clrSalmon

//---- plot 4
#property indicator_label4

"BearShadowEnd"

#property indicator_color4

clrSalmon,clrSalmon

//---- plot 5
#property indicator_label5

"BullBody"

#property indicator_color5

clrOlive,clrOlive

//---- plot 6
#property indicator_label6

"BullBodyEnd"

#property indicator_color6

clrOlive,clrOlive

2000-2014, MetaQuotes Software Corp.

882

Funes para Array


//---- plot 7
#property indicator_label7

"BullShadow"

#property indicator_color7

clrSkyBlue,clrSkyBlue

//---- plot 8
#property indicator_label8

"BullShadowEnd"

#property indicator_color8

clrSkyBlue,clrSkyBlue

//--- constante pr-definida


#define INDICATOR_EMPTY_VALUE 0.0
//--- parmetros de entrada
input ENUM_TIMEFRAMES InpPeriod=PERIOD_H4;
input datetime

// Prazo de tempo para calcular o indicador

InpDateStart=D'2013.01.01 00:00'; // Analisar a partir desta data

//--- buffers do indicador para candlesticks de baixa


double

ExtBearBodyFirst[];

double

ExtBearBodySecond[];

double

ExtBearBodyEndFirst[];

double

ExtBearBodyEndSecond[];

double

ExtBearShadowFirst[];

double

ExtBearShadowSecond[];

double

ExtBearShadowEndFirst[];

double

ExtBearShadowEndSecond[];

//--- buffers do indicador para candlesticks de alta


double

ExtBullBodyFirst[];

double

ExtBullBodySecond[];

double

ExtBullBodyEndFirst[];

double

ExtBullBodyEndSecond[];

double

ExtBullShadowFirst[];

double

ExtBullShadowSecond[];

double

ExtBullShadowEndFirst[];

double

ExtBullShadowEndSecond[];

//--- variveis globais


datetime ExtTimeBuff[];

// buffer de tempo para maior periodicidade

int

ExtSize=0;

// tamanho do buffer de tempo

int

ExtCount=0;

// ndice dentro do buffer de tempo

int

ExtStartPos=0;

// posio inicial para clculo do indicador

bool

ExtStartFlag=true;

// sinalizador auxiliar para receber a posio inicial

datetime ExtCurrentTime[1];

// ltimo tempo na gerao da barra de maior periodicidade

datetime ExtLastTime;

// ltimo tempo a partir da barra de maior periodicidade, para a execu

bool

ExtBearFlag=true;

// flag para definir a ordem de escrita do dados para os buffers de in

bool

ExtBullFlag=true;

// flag para definir a ordem de escrita do dados para os buffers de in

int

ExtIndexMax=0;

// ndice do elemento mximo do array

int

ExtIndexMin=0;

// ndice do elemento mnimo do array

int

ExtDirectionFlag=0; // direo de movimento de preos para o atual candlestick

//--- alternar entre o preo de abertura e fechamento do candlestick para desenhar corretamente
const double ExtEmptyBodySize=0.2*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//+------------------------------------------------------------------+
//| Preenchendo a parte bsica do candlestick

//+------------------------------------------------------------------+
void FillCandleMain(const double &open[],const double &close[],
const double &high[],const double &low[],

2000-2014, MetaQuotes Software Corp.

883

Funes para Array


const int start,const int last,const int fill_index,
int &index_max,int &index_min)
{
//--- encontrar o ndice dos elementos mximo e mnimo nos arrays
index_max=ArrayMaximum(high,ExtStartPos,last-start+1); // mximo em Alta
index_min=ArrayMinimum(low,ExtStartPos,last-start+1);

// mnimo em Baixa

//--- definir quantas barras do perodo de tempo atual sero preenchidas


int count=fill_index-start+1;

//--- se o preo de fechamento no primeiro bar excede ao do ltimo bar, o candlesticks de baixa
if(open[start]>close[last])
{

//--- antes que o candlestick seja de alta, limpar os valores de alta dos buffers do indicado
if(ExtDirectionFlag!=-1)

ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,star
//--- candlestick de baixa
ExtDirectionFlag=-1;
//--- gerar o candlestick

FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,open
close[last],high[index_max],low[index_min],start,count,ExtBearFlag);
//--- sair da funo
return;
}
//--- se o preo de fechamento no primeiro bar menor do que ltimo bar, o candlesticks de alta
if(open[start]<close[last])
{

//--- antes que o candlestick seja de baixa, limpar os valores de baixa dos buffers do indica
if(ExtDirectionFlag!=1)

ClearCandle(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,star
//--- candlesticks de alta
ExtDirectionFlag=1;
//--- gerar o candlestick

FormCandleMain(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,clos
open[start],high[index_max],low[index_min],start,count,ExtBullFlag);
//--- sair da funo
return;
}
//--- se voc est nesta parte da funo, o preo de abertura no primeiro bar igual ao
//--- preo de fechamento no ltimo bar; ento o candlestick considerado de baixa
//--- antes que o candlestick seja de alta, limpar os valores de alta dos buffers do indicador
if(ExtDirectionFlag!=-1)

ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,start,c
//--- candlestick de baixa
ExtDirectionFlag=-1;

//--- se os preos de fechamento e de abertura so iguais, use o deslocamento para a exibio corre
if(high[index_max]!=low[index_min])

FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,open

open[start]-ExtEmptyBodySize,high[index_max],low[index_min],start,count,ExtBea
else
FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,

2000-2014, MetaQuotes Software Corp.

884

Funes para Array


open[start],open[start]-ExtEmptyBodySize,high[index_max],
high[index_max]-ExtEmptyBodySize,start,count,ExtBearFlag);
}
//+------------------------------------------------------------------+
//| Preencher o final do candlestick

//+------------------------------------------------------------------+
void FillCandleEnd(const double &open[],const double &close[],
const double &high[],const double &low[],
const int start,const int last,const int fill_index,
const int index_max,const int index_min)
{
//--- no desenhar em caso de uma nica barra
if(last-start==0)
return;

//--- se o preo de fechamento no primeiro bar excede ao do ltimo bar, o candlesticks de baixa
if(open[start]>close[last])
{
//--- gerar o final do candelstick

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start],close[last],high[index_max],low[index_min],fill_index,ExtBearFlag);
//--- sair da funo
return;
}
//--- se o preo de fechamento no primeiro bar menor do que ltimo bar, o candlesticks de alta
if(open[start]<close[last])
{
//--- gerar o final do candelstick

FormCandleEnd(ExtBullBodyEndFirst,ExtBullBodyEndSecond,ExtBullShadowEndFirst,ExtBullShadowEnd

close[last],open[start],high[index_max],low[index_min],fill_index,ExtBullFlag);
//--- sair da funo
return;
}
//--- se voc est nesta parte da funo, o preo de abertura no primeiro bar igual ao
//--- preo de fechamento no ltimo bar; ento o candlestick considerado de baixa
//--- gerar o final do candelstick
if(high[index_max]!=low[index_min])

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start]-ExtEmptyBodySize,high[index_max],low[index_min],fill_index,ExtBearF
else

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start]-ExtEmptyBodySize,high[index_max],high[index_max]-ExtEmptyBodySize,f
}
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- verificar o perodo do indicador
if(!CheckPeriod((int)Period(),(int)InpPeriod))

2000-2014, MetaQuotes Software Corp.

885

Funes para Array


return(INIT_PARAMETERS_INCORRECT);
//--- exibir dados de preo num primeiro plano
ChartSetInteger(0,CHART_FOREGROUND,0,1);
//--- vincular buffers do indicador
SetIndexBuffer(0,ExtBearBodyFirst);
SetIndexBuffer(1,ExtBearBodySecond);
SetIndexBuffer(2,ExtBearBodyEndFirst);
SetIndexBuffer(3,ExtBearBodyEndSecond);
SetIndexBuffer(4,ExtBearShadowFirst);
SetIndexBuffer(5,ExtBearShadowSecond);
SetIndexBuffer(6,ExtBearShadowEndFirst);
SetIndexBuffer(7,ExtBearShadowEndSecond);
SetIndexBuffer(8,ExtBullBodyFirst);
SetIndexBuffer(9,ExtBullBodySecond);
SetIndexBuffer(10,ExtBullBodyEndFirst);
SetIndexBuffer(11,ExtBullBodyEndSecond);
SetIndexBuffer(12,ExtBullShadowFirst);
SetIndexBuffer(13,ExtBullShadowSecond);
SetIndexBuffer(14,ExtBullShadowEndFirst);
SetIndexBuffer(15,ExtBullShadowEndSecond);
//--- definir alguns valores de propriedade para a criao do indicador
for(int i=0;i<8;i++)
{
PlotIndexSetInteger(i,PLOT_DRAW_TYPE,DRAW_FILLING); // tipo de construo grfica
PlotIndexSetInteger(i,PLOT_LINE_STYLE,STYLE_SOLID); // estilo de linha de desenho
PlotIndexSetInteger(i,PLOT_LINE_WIDTH,1);

// largura de linha de desenho

}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- neste caso ainda no existe clculos de barras
if(prev_calculated==0)
{
//--- receber a maior periodicidade das barra no tempo de chegada
if(!GetTimeData())

2000-2014, MetaQuotes Software Corp.

886

Funes para Array


return(0);
}
//--- definir a indexao direta
ArraySetAsSeries(time,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(close,false);
//--- iniciar varivel para o clculo das barras
int start=prev_calculated;
//--- se uma barra gerada, recalcular o valor do indicador sobre ela
if(start!=0 && start==rates_total)
start--;
//--- o loop para clculos dos valores do indicador
for(int i=start;i<rates_total;i++)
{
//--- preencher i elementos dos buffers do indicador por valores vazios
FillIndicatorBuffers(i);
//--- executar clculos para as barras iniciando a partir dos dados InpDateStart
if(time[i]>=InpDateStart)
{
//--- definir posio, a partir do qual os valores so exibidos pela primeira vez
if(ExtStartFlag)
{
//--- armazenar o nmero do bar inicial
ExtStartPos=i;
//--- definir a primeira data a partir da maior periodicidade excedendo time[i]
while(time[i]>=ExtTimeBuff[ExtCount])
if(ExtCount<ExtSize-1)
ExtCount++;
//--- alterar o valor da sinalizao em ordem no executada neste bloco novamente
ExtStartFlag=false;
}
//--- verificar se ainda existem quaisquer elementos no array
if(ExtCount<ExtSize)
{
//--- esperar o valor da periodicidade atual para chegar a um maior perodo de tempo
if(time[i]>=ExtTimeBuff[ExtCount])
{

//--- desenhar a parte principal do candlestick (sem preencher o espao entre a lti
FillCandleMain(open,close,high,low,ExtStartPos,i-1,i-2,ExtIndexMax,ExtIndexMin);
//--- preencher o final do candlestick(a rea entre a ltima e a penltima barra)
FillCandleEnd(open,close,high,low,ExtStartPos,i-1,i-1,ExtIndexMax,ExtIndexMin);
//--- deslocar a posio inicial para desenhar o prximo candlestick
ExtStartPos=i;
//--- aumentar o contador de array
ExtCount++;
}
else

2000-2014, MetaQuotes Software Corp.

887

Funes para Array


continue;
}
else
{
//--- redefinir os valores de array
ResetLastError();
//--- receber a ltima data do maior perodo de tempo
if(CopyTime(Symbol(),InpPeriod,0,1,ExtCurrentTime)==-1)
{
Print("Erro na cpia dos dados, cdigo = ",GetLastError());
return(0);
}
//--- se a nova data for posterior, parar de gerar o candlestick
if(ExtCurrentTime[0]>ExtLastTime)
{

//--- limpar a rea entre a ltima e a penltima barra nos principais buffers do ind
ClearEndOfBodyMain(i-1);
//--- preencher a rea usando buffers auxiliares do indicador
FillCandleEnd(open,close,high,low,ExtStartPos,i-1,i-1,ExtIndexMax,ExtIndexMin);
//--- deslocar a posio inicial para desenhar o prximo candlestick
ExtStartPos=i;
//--- restabelecer flag da direo do preo
ExtDirectionFlag=0;
//--- armazenar a nova ltima data
ExtLastTime=ExtCurrentTime[0];
}
else
{
//--- gerar o candlestick
FillCandleMain(open,close,high,low,ExtStartPos,i,i,ExtIndexMax,ExtIndexMin);
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Verificar a exatido do perodo do indicador determinado

//+------------------------------------------------------------------+
bool CheckPeriod(int current_period,int high_period)
{
//--- o perodo do indicador deve ultrapassar o perodo de tempo que exibido sobre
if(current_period>=high_period)
{

Print("Erro! O valor do perodo do indicador deve exceder o valor do intervalo do tempo atual
return(false);
}
//--- se o perodo do indicador de uma semana ou um ms, o perodo est correto

2000-2014, MetaQuotes Software Corp.

888

Funes para Array


if(high_period>32768)
return(true);
//--- converter valores do perodo para minutos
if(high_period>30)
high_period=(high_period-16384)*60;
if(current_period>30)
current_period=(current_period-16384)*60;
//--- o perodo do indicador deve ser mltiplo do perodo de tempo, exibido sobre
if(high_period%current_period!=0)
{

Print("Erro! O valor do perodo do indicador deve ser mltiplo ao valor do atual perodo de t
return(false);
}
//--- o perodo do indicador deve exceder o prazo de tempo quando apresentado de 3 ou mais vezes
if(high_period/current_period<3)
{
Print("Erro! O perodo do indicador deve exceder o prazo atual de 3 ou mais vezes!");
return(false);
}
//--- O perodo do indicador o correto para a atual periodicidade
return(true);
}
//+------------------------------------------------------------------+
//| Receber dados de tempo a partir da maior prazo de tempo

//+------------------------------------------------------------------+
bool GetTimeData(void)
{
//--- redefine o valor de erro
ResetLastError();
//--- copiar todos os dados para o tempo atual
if(CopyTime(Symbol(),InpPeriod,InpDateStart,TimeCurrent(),ExtTimeBuff)==-1)
{
//--- receber o cdigo de erro
int code=GetLastError();
//--- imprimir a mensagem de erro
PrintFormat("Erro de cpia de dados! %s",code==4401
? "Histrico ainda est sendo carregado!"
: "Cdigo = "+IntegerToString(code));
//--- retornar falso para fazer uma tentativa de repetir o download de dados
return(false);
}
//--- recebe o tamanho do array
ExtSize=ArraySize(ExtTimeBuff);
//--- definir o ndice do loop para o array zero
ExtCount=0;
//--- definir a posio atual do candlestick no perodo de tempo para zero
ExtStartPos=0;
ExtStartFlag=true;
//--- armazenar o ltimo valor de tempo a partir da maior periodicidade

2000-2014, MetaQuotes Software Corp.

889

Funes para Array


ExtLastTime=ExtTimeBuff[ExtSize-1];
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------------------+
//| Funo constitui a parte principal do candlestick. Dependendo do sinalizador |
//| valor, a funo define quais dados e arrays sero
//| usados para exibio correta.

|
|

//+------------------------------------------------------------------------------+
void FormCandleMain(double &body_fst[],double &body_snd[],
double &shadow_fst[],double &shadow_snd[],
const double fst_value,const double snd_value,
const double fst_extremum,const double snd_extremum,
const int start,const int count,const bool flag)
{
//--- verificar o valor do flag
if(flag)
{
//--- gerar o corpo do candlestick
FormMain(body_fst,body_snd,fst_value,snd_value,start,count);
//--- gerar a sombra do candlestick
FormMain(shadow_fst,shadow_snd,fst_extremum,snd_extremum,start,count);
}
else
{
//--- gerar o corpo do candlestick
FormMain(body_fst,body_snd,snd_value,fst_value,start,count);
//--- gerar a sombra do candlestick
FormMain(shadow_fst,shadow_snd,snd_extremum,fst_extremum,start,count);
}
}
//+-------------------------------------------------------------------------------+
//| A funo para formar o final do candlestick. Depende do valor do sinalizador, |
//| a funo define quais dados e arrays so

//| usados para exibio correta.

//+-------------------------------------------------------------------------------+
void FormCandleEnd(double &body_fst[],double &body_snd[],
double &shadow_fst[],double &shadow_snd[],
const double fst_value,const double snd_value,
const double fst_extremum,const double snd_extremum,
const int end,bool &flag)
{
//--- verificar o valor do flag
if(flag)
{
//--- gerar o final do corpo do candlestick
FormEnd(body_fst,body_snd,fst_value,snd_value,end);
//--- gerar o final da sombra do candlestick
FormEnd(shadow_fst,shadow_snd,fst_extremum,snd_extremum,end);

2000-2014, MetaQuotes Software Corp.

890

Funes para Array


//--- alterar o valor do sinalizador para o oposto
flag=false;
}
else
{
//--- gerar o final do corpo do candlestick
FormEnd(body_fst,body_snd,snd_value,fst_value,end);
//--- gerar o final da sombra do candlestick
FormEnd(shadow_fst,shadow_snd,snd_extremum,fst_extremum,end);
//--- alterar o valor do sinalizador para o oposto
flag=true;
}
}
//+---------------------------------------------------------------------------------+
//| Limpar o fim do candlestick (a rea entre a ltima e a penltima

//| barra)

//+---------------------------------------------------------------------------------+
void ClearEndOfBodyMain(const int ind)
{
ClearCandle(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,ind,1);
ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,ind,1);
}
//+--------------------------------------------------------------------------+
//| Limpar o candlestick

//+--------------------------------------------------------------------------+
void ClearCandle(double &body_fst[],double &body_snd[],double &shadow_fst[],
double &shadow_snd[],const int start,const int count)
{
//--- verificar
if(count!=0)
{
//--- preencher buffers do indicador com valores vazios
ArrayFill(body_fst,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(body_snd,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(shadow_fst,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(shadow_snd,start,count,INDICATOR_EMPTY_VALUE);
}
}
//+--------------------------------------------------------------------------+
//| Gerar a parte principal do candlestick

//+--------------------------------------------------------------------------+
void FormMain(double &fst[],double &snd[],const double fst_value,
const double snd_value,const int start,const int count)
{
//--- verificar
if(count!=0)
{
//--- preencher o buffer do indicador com valores
ArrayFill(fst,start,count,fst_value);

2000-2014, MetaQuotes Software Corp.

891

Funes para Array


ArrayFill(snd,start,count,snd_value);
}
}
//+-----------------------------------------------------------------------------+
//| Gerar o final do candlestick

//+-----------------------------------------------------------------------------+
void FormEnd(double &fst[],double &snd[],const double fst_value,
const double snd_value,const int last)
{
//--- preencher o buffer do indicador com valores
ArrayFill(fst,last-1,2,fst_value);
ArrayFill(snd,last-1,2,snd_value);
}
//+------------------------------------------------------------------+
//| Preencher i elemento dos buffers do indicador por valores vazios|
//+------------------------------------------------------------------+
void FillIndicatorBuffers(const int i)
{
//--- definir um valor vazio na clula dos buffers do indicador
ExtBearBodyFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodySecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodyEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodyEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodySecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowEndSecond[i]=INDICATOR_EMPTY_VALUE;
}

2000-2014, MetaQuotes Software Corp.

892

Funes para Array

ArrayMinimum
A funo busca um elemento mnimo em um array numrico de uma dimenso.
int ArrayMinimum(
const void&

array[],

// array para busca

int

start=0,

// ndice a partir do qual comea a verificao

int

count=WHOLE_ARRAY

// nmero de elementos verificados

);

Parmetros
array[]
[in] Um array nmerico, na qual a busca feita.
start=0
[in] ndice a partir do qual comea a verificao.
count=WHOLE_ARRAY
[in]
Nmero de elementos
(count=WHOLE_ARRAY)..

para

busca.

Por

default,

busca

no

array

inteiro

Valor do Retorno
A funo retorna um ndice de um elemento encontrado levando em considerao a srie do array.
Em caso de falha, retorna -1.
Exemplo:

#property description "O indicador mostra sobre as barras (candlesticks) um prazo de tempo maior do
//--- configuraes do indicador
#property indicator_chart_window
#property indicator_buffers 16
#property indicator_plots

//---- plot 1
#property indicator_label1

"BearBody"

#property indicator_color1

clrSeaGreen,clrSeaGreen

//---- plot 2
#property indicator_label2

"BearBodyEnd"

#property indicator_color2

clrSeaGreen,clrSeaGreen

//---- plot 3
#property indicator_label3

"BearShadow"

#property indicator_color3

clrSalmon,clrSalmon

//---- plot 4
#property indicator_label4

"BearShadowEnd"

#property indicator_color4

clrSalmon,clrSalmon

//---- plot 5
#property indicator_label5

"BullBody"

#property indicator_color5

clrOlive,clrOlive

//---- plot 6
#property indicator_label6

"BullBodyEnd"

#property indicator_color6

clrOlive,clrOlive

2000-2014, MetaQuotes Software Corp.

893

Funes para Array


//---- plot 7
#property indicator_label7

"BullShadow"

#property indicator_color7

clrSkyBlue,clrSkyBlue

//---- plot 8
#property indicator_label8

"BullShadowEnd"

#property indicator_color8

clrSkyBlue,clrSkyBlue

//--- constante pr-definida


#define INDICATOR_EMPTY_VALUE 0.0
//--- parmetros de entrada
input ENUM_TIMEFRAMES InpPeriod=PERIOD_H4;
input datetime

// Prazo de tempo para calcular o indicador

InpDateStart=D'2013.01.01 00:00'; // Analisar a partir desta data

//--- buffers do indicador para candlesticks de baixa


double

ExtBearBodyFirst[];

double

ExtBearBodySecond[];

double

ExtBearBodyEndFirst[];

double

ExtBearBodyEndSecond[];

double

ExtBearShadowFirst[];

double

ExtBearShadowSecond[];

double

ExtBearShadowEndFirst[];

double

ExtBearShadowEndSecond[];

//--- buffers do indicador para candlesticks de alta


double

ExtBullBodyFirst[];

double

ExtBullBodySecond[];

double

ExtBullBodyEndFirst[];

double

ExtBullBodyEndSecond[];

double

ExtBullShadowFirst[];

double

ExtBullShadowSecond[];

double

ExtBullShadowEndFirst[];

double

ExtBullShadowEndSecond[];

//--- variveis globais


datetime ExtTimeBuff[];

// buffer de tempo para maior periodicidade

int

ExtSize=0;

// tamanho do buffer de tempo

int

ExtCount=0;

// ndice dentro do buffer de tempo

int

ExtStartPos=0;

// posio inicial para clculo do indicador

bool

ExtStartFlag=true;

// sinalizador auxiliar para receber a posio inicial

datetime ExtCurrentTime[1];

// ltimo tempo na gerao da barra de maior periodicidade

datetime ExtLastTime;

// ltimo tempo a partir da barra de maior periodicidade, para a execu

bool

ExtBearFlag=true;

// flag para definir a ordem de escrita do dados para os buffers de in

bool

ExtBullFlag=true;

// flag para definir a ordem de escrita do dados para os buffers de in

int

ExtIndexMax=0;

// ndice do elemento mximo do array

int

ExtIndexMin=0;

// ndice do elemento mnimo do array

int

ExtDirectionFlag=0; // direo de movimento de preos para o atual candlestick

//--- alternar entre o preo de abertura e fechamento do candlestick para desenhar corretamente
const double ExtEmptyBodySize=0.2*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//+------------------------------------------------------------------+
//| Preenchendo a parte bsica do candlestick

//+------------------------------------------------------------------+
void FillCandleMain(const double &open[],const double &close[],
const double &high[],const double &low[],

2000-2014, MetaQuotes Software Corp.

894

Funes para Array


const int start,const int last,const int fill_index,
int &index_max,int &index_min)
{
//--- encontrar o ndice dos elementos mximo e mnimo nos arrays
index_max=ArrayMaximum(high,ExtStartPos,last-start+1); // mximo em Alta
index_min=ArrayMinimum(low,ExtStartPos,last-start+1);

// mnimo em Baixa

//--- definir quantas barras do perodo de tempo atual sero preenchidas


int count=fill_index-start+1;

//--- se o preo de fechamento no primeiro bar excede ao do ltimo bar, o candlesticks de baixa
if(open[start]>close[last])
{

//--- antes que o candlestick seja de alta, limpar os valores de alta dos buffers do indicado
if(ExtDirectionFlag!=-1)

ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,star
//--- candlestick de baixa
ExtDirectionFlag=-1;
//--- gerar o candlestick

FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,open
close[last],high[index_max],low[index_min],start,count,ExtBearFlag);
//--- sair da funo
return;
}
//--- se o preo de fechamento no primeiro bar menor do que ltimo bar, o candlesticks de alta
if(open[start]<close[last])
{

//--- antes que o candlestick seja de baixa, limpar os valores de baixa dos buffers do indica
if(ExtDirectionFlag!=1)

ClearCandle(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,star
//--- candlesticks de alta
ExtDirectionFlag=1;
//--- gerar o candlestick

FormCandleMain(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,clos
open[start],high[index_max],low[index_min],start,count,ExtBullFlag);
//--- sair da funo
return;
}
//--- se voc est nesta parte da funo, o preo de abertura no primeiro bar igual ao
//--- preo de fechamento no ltimo bar; ento o candlestick considerado de baixa
//--- antes que o candlestick seja de alta, limpar os valores de alta dos buffers do indicador
if(ExtDirectionFlag!=-1)

ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,start,c
//--- candlestick de baixa
ExtDirectionFlag=-1;

//--- se os preos de fechamento e de abertura so iguais, use o deslocamento para a exibio corre
if(high[index_max]!=low[index_min])

FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,open

open[start]-ExtEmptyBodySize,high[index_max],low[index_min],start,count,ExtBea
else
FormCandleMain(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,

2000-2014, MetaQuotes Software Corp.

895

Funes para Array


open[start],open[start]-ExtEmptyBodySize,high[index_max],
high[index_max]-ExtEmptyBodySize,start,count,ExtBearFlag);
}
//+------------------------------------------------------------------+
//| Preencher o final do candlestick

//+------------------------------------------------------------------+
void FillCandleEnd(const double &open[],const double &close[],
const double &high[],const double &low[],
const int start,const int last,const int fill_index,
const int index_max,const int index_min)
{
//--- no desenhar em caso de uma nica barra
if(last-start==0)
return;

//--- se o preo de fechamento no primeiro bar excede ao do ltimo bar, o candlesticks de baixa
if(open[start]>close[last])
{
//--- gerar o final do candelstick

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start],close[last],high[index_max],low[index_min],fill_index,ExtBearFlag);
//--- sair da funo
return;
}
//--- se o preo de fechamento no primeiro bar menor do que ltimo bar, o candlesticks de alta
if(open[start]<close[last])
{
//--- gerar o final do candelstick

FormCandleEnd(ExtBullBodyEndFirst,ExtBullBodyEndSecond,ExtBullShadowEndFirst,ExtBullShadowEnd

close[last],open[start],high[index_max],low[index_min],fill_index,ExtBullFlag);
//--- sair da funo
return;
}
//--- se voc est nesta parte da funo, o preo de abertura no primeiro bar igual ao
//--- preo de fechamento no ltimo bar; ento o candlestick considerado de baixa
//--- gerar o final do candelstick
if(high[index_max]!=low[index_min])

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start]-ExtEmptyBodySize,high[index_max],low[index_min],fill_index,ExtBearF
else

FormCandleEnd(ExtBearBodyEndFirst,ExtBearBodyEndSecond,ExtBearShadowEndFirst,ExtBearShadowEnd

open[start]-ExtEmptyBodySize,high[index_max],high[index_max]-ExtEmptyBodySize,f
}
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- verificar o perodo do indicador
if(!CheckPeriod((int)Period(),(int)InpPeriod))

2000-2014, MetaQuotes Software Corp.

896

Funes para Array


return(INIT_PARAMETERS_INCORRECT);
//--- exibir dados de preo num primeiro plano
ChartSetInteger(0,CHART_FOREGROUND,0,1);
//--- vincular buffers do indicador
SetIndexBuffer(0,ExtBearBodyFirst);
SetIndexBuffer(1,ExtBearBodySecond);
SetIndexBuffer(2,ExtBearBodyEndFirst);
SetIndexBuffer(3,ExtBearBodyEndSecond);
SetIndexBuffer(4,ExtBearShadowFirst);
SetIndexBuffer(5,ExtBearShadowSecond);
SetIndexBuffer(6,ExtBearShadowEndFirst);
SetIndexBuffer(7,ExtBearShadowEndSecond);
SetIndexBuffer(8,ExtBullBodyFirst);
SetIndexBuffer(9,ExtBullBodySecond);
SetIndexBuffer(10,ExtBullBodyEndFirst);
SetIndexBuffer(11,ExtBullBodyEndSecond);
SetIndexBuffer(12,ExtBullShadowFirst);
SetIndexBuffer(13,ExtBullShadowSecond);
SetIndexBuffer(14,ExtBullShadowEndFirst);
SetIndexBuffer(15,ExtBullShadowEndSecond);
//--- definir alguns valores de propriedade para a criao do indicador
for(int i=0;i<8;i++)
{
PlotIndexSetInteger(i,PLOT_DRAW_TYPE,DRAW_FILLING); // tipo de construo grfica
PlotIndexSetInteger(i,PLOT_LINE_STYLE,STYLE_SOLID); // estilo de linha de desenho
PlotIndexSetInteger(i,PLOT_LINE_WIDTH,1);

// largura de linha de desenho

}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- neste caso ainda no existe clculos de barras
if(prev_calculated==0)
{
//--- receber a maior periodicidade das barra no tempo de chegada
if(!GetTimeData())

2000-2014, MetaQuotes Software Corp.

897

Funes para Array


return(0);
}
//--- definir a indexao direta
ArraySetAsSeries(time,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(close,false);
//--- iniciar varivel para o clculo das barras
int start=prev_calculated;
//--- se uma barra gerada, recalcular o valor do indicador sobre ela
if(start!=0 && start==rates_total)
start--;
//--- o loop para clculos dos valores do indicador
for(int i=start;i<rates_total;i++)
{
//--- preencher i elementos dos buffers do indicador por valores vazios
FillIndicatorBuffers(i);
//--- executar clculos para as barras iniciando a partir dos dados InpDateStart
if(time[i]>=InpDateStart)
{
//--- definir posio, a partir do qual os valores so exibidos pela primeira vez
if(ExtStartFlag)
{
//--- armazenar o nmero do bar inicial
ExtStartPos=i;
//--- definir a primeira data a partir da maior periodicidade excedendo time[i]
while(time[i]>=ExtTimeBuff[ExtCount])
if(ExtCount<ExtSize-1)
ExtCount++;
//--- alterar o valor da sinalizao em ordem no executada neste bloco novamente
ExtStartFlag=false;
}
//--- verificar se ainda existem quaisquer elementos no array
if(ExtCount<ExtSize)
{
//--- esperar o valor da periodicidade atual para chegar a um maior perodo de tempo
if(time[i]>=ExtTimeBuff[ExtCount])
{

//--- desenhar a parte principal do candlestick (sem preencher o espao entre a lti
FillCandleMain(open,close,high,low,ExtStartPos,i-1,i-2,ExtIndexMax,ExtIndexMin);
//--- preencher o final do candlestick(a rea entre a ltima e a penltima barra)
FillCandleEnd(open,close,high,low,ExtStartPos,i-1,i-1,ExtIndexMax,ExtIndexMin);
//--- deslocar a posio inicial para desenhar o prximo candlestick
ExtStartPos=i;
//--- aumentar o contador de array
ExtCount++;
}
else

2000-2014, MetaQuotes Software Corp.

898

Funes para Array


continue;
}
else
{
//--- redefinir os valores de array
ResetLastError();
//--- receber a ltima data do maior perodo de tempo
if(CopyTime(Symbol(),InpPeriod,0,1,ExtCurrentTime)==-1)
{
Print("Erro na cpia dos dados, cdigo = ",GetLastError());
return(0);
}
//--- se a nova data for posterior, parar de gerar o candlestick
if(ExtCurrentTime[0]>ExtLastTime)
{

//--- limpar a rea entre a ltima e a penltima barra nos principais buffers do ind
ClearEndOfBodyMain(i-1);
//--- preencher a rea usando buffers auxiliares do indicador
FillCandleEnd(open,close,high,low,ExtStartPos,i-1,i-1,ExtIndexMax,ExtIndexMin);
//--- deslocar a posio inicial para desenhar o prximo candlestick
ExtStartPos=i;
//--- restabelecer flag da direo do preo
ExtDirectionFlag=0;
//--- armazenar a nova ltima data
ExtLastTime=ExtCurrentTime[0];
}
else
{
//--- gerar o candlestick
FillCandleMain(open,close,high,low,ExtStartPos,i,i,ExtIndexMax,ExtIndexMin);
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Verificar a exatido do perodo do indicador determinado

//+------------------------------------------------------------------+
bool CheckPeriod(int current_period,int high_period)
{
//--- o perodo do indicador deve ultrapassar o perodo de tempo que exibido sobre
if(current_period>=high_period)
{

Print("Erro! O valor do perodo do indicador deve exceder o valor do intervalo do tempo atual
return(false);
}
//--- se o perodo do indicador de uma semana ou um ms, o perodo est correto

2000-2014, MetaQuotes Software Corp.

899

Funes para Array


if(high_period>32768)
return(true);
//--- converter valores do perodo para minutos
if(high_period>30)
high_period=(high_period-16384)*60;
if(current_period>30)
current_period=(current_period-16384)*60;
//--- o perodo do indicador deve ser mltiplo do perodo de tempo, exibido sobre
if(high_period%current_period!=0)
{

Print("Erro! O valor do perodo do indicador deve ser mltiplo ao valor do atual perodo de t
return(false);
}
//--- o perodo do indicador deve exceder o prazo de tempo quando apresentado de 3 ou mais vezes
if(high_period/current_period<3)
{
Print("Erro! O perodo do indicador deve exceder o prazo atual de 3 ou mais vezes!");
return(false);
}
//--- O perodo do indicador o correto para a atual periodicidade
return(true);
}
//+------------------------------------------------------------------+
//| Receber dados de tempo a partir da maior prazo de tempo

//+------------------------------------------------------------------+
bool GetTimeData(void)
{
//--- redefine o valor de erro
ResetLastError();
//--- copiar todos os dados para o tempo atual
if(CopyTime(Symbol(),InpPeriod,InpDateStart,TimeCurrent(),ExtTimeBuff)==-1)
{
//--- receber o cdigo de erro
int code=GetLastError();
//--- imprimir a mensagem de erro
PrintFormat("Erro de cpia de dados! %s",code==4401
? "Histrico ainda est sendo carregado!"
: "Cdigo = "+IntegerToString(code));
//--- retornar falso para fazer uma tentativa de repetir o download de dados
return(false);
}
//--- recebe o tamanho do array
ExtSize=ArraySize(ExtTimeBuff);
//--- definir o ndice do loop para o array zero
ExtCount=0;
//--- definir a posio atual do candlestick no perodo de tempo para zero
ExtStartPos=0;
ExtStartFlag=true;
//--- armazenar o ltimo valor de tempo a partir da maior periodicidade

2000-2014, MetaQuotes Software Corp.

900

Funes para Array


ExtLastTime=ExtTimeBuff[ExtSize-1];
//--- sucesso na execuo
return(true);
}
//+--------------------------------------------------------------------------+
//| Funo constitui a parte principal do candlestick. Dependendo do sinalizador |
//| valor, a funo define quais dados e arrays sero

//| usados para exibio correta.

//+--------------------------------------------------------------------------+
void FormCandleMain(double &body_fst[],double &body_snd[],
double &shadow_fst[],double &shadow_snd[],
const double fst_value,const double snd_value,
const double fst_extremum,const double snd_extremum,
const int start,const int count,const bool flag)
{
//--- verificar o valor do flag
if(flag)
{
//--- gerar o corpo do candlestick
FormMain(body_fst,body_snd,fst_value,snd_value,start,count);
//--- gerar a sombra do candlestick
FormMain(shadow_fst,shadow_snd,fst_extremum,snd_extremum,start,count);
}
else
{
//--- gerar o corpo do candlestick
FormMain(body_fst,body_snd,snd_value,fst_value,start,count);
//--- gerar a sombra do candlestick
FormMain(shadow_fst,shadow_snd,snd_extremum,fst_extremum,start,count);
}
}
//+--------------------------------------------------------------------------------+
//| A funo para formar o final do candlestick. Depending on the flag's value,

//| the function defines what data and arrays are

//| usados para exibio correta.

//+--------------------------------------------------------------------------------+
void FormCandleEnd(double &body_fst[],double &body_snd[],
double &shadow_fst[],double &shadow_snd[],
const double fst_value,const double snd_value,
const double fst_extremum,const double snd_extremum,
const int end,bool &flag)
{
//--- verificar o valor do flag
if(flag)
{
//--- gerar o final do corpo do candlestick
FormEnd(body_fst,body_snd,fst_value,snd_value,end);
//--- gerar o final da sombra do candlestick
FormEnd(shadow_fst,shadow_snd,fst_extremum,snd_extremum,end);

2000-2014, MetaQuotes Software Corp.

901

Funes para Array


//--- alterar o valor do sinalizador para o oposto
flag=false;
}
else
{
//--- gerar o final do corpo do candlestick
FormEnd(body_fst,body_snd,snd_value,fst_value,end);
//--- gerar o final da sombra do candlestick
FormEnd(shadow_fst,shadow_snd,snd_extremum,fst_extremum,end);
//--- alterar o valor do sinalizador para o oposto
flag=true;
}
}
//+-------------------------------------------------------------------------------------+
//| Clear the end of the candlestick (the area between the last and the penultimate

//| bar)

//+-------------------------------------------------------------------------------------+
void ClearEndOfBodyMain(const int ind)
{
ClearCandle(ExtBearBodyFirst,ExtBearBodySecond,ExtBearShadowFirst,ExtBearShadowSecond,ind,1);
ClearCandle(ExtBullBodyFirst,ExtBullBodySecond,ExtBullShadowFirst,ExtBullShadowSecond,ind,1);
}
//+------------------------------------------------------------------+
//| Clear the candlestick

//+------------------------------------------------------------------+
void ClearCandle(double &body_fst[],double &body_snd[],double &shadow_fst[],
double &shadow_snd[],const int start,const int count)
{
//--- verificar
if(count!=0)
{
//--- preencher buffers do indicador com valores vazios
ArrayFill(body_fst,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(body_snd,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(shadow_fst,start,count,INDICATOR_EMPTY_VALUE);
ArrayFill(shadow_snd,start,count,INDICATOR_EMPTY_VALUE);
}
}
//+------------------------------------------------------------------+
//| Generate the main part of the candlestick

//+------------------------------------------------------------------+
void FormMain(double &fst[],double &snd[],const double fst_value,
const double snd_value,const int start,const int count)
{
//--- verificar
if(count!=0)
{
//--- preencher o buffer do indicador com valores
ArrayFill(fst,start,count,fst_value);

2000-2014, MetaQuotes Software Corp.

902

Funes para Array


ArrayFill(snd,start,count,snd_value);
}
}
//+------------------------------------------------------------------+
//| Generate the end of the candlestick

//+------------------------------------------------------------------+
void FormEnd(double &fst[],double &snd[],const double fst_value,
const double snd_value,const int last)
{
//--- preencher o buffer do indicador com valores
ArrayFill(fst,last-1,2,fst_value);
ArrayFill(snd,last-1,2,snd_value);
}
//+------------------------------------------------------------------+
//| Preencher i elemento dos buffers do indicador por valores vazios|
//+------------------------------------------------------------------+
void FillIndicatorBuffers(const int i)
{
//--- definir um valor vazio na clula dos buffers do indicador
ExtBearBodyFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodySecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodyEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearBodyEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBearShadowEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodySecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullBodyEndSecond[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowEndFirst[i]=INDICATOR_EMPTY_VALUE;
ExtBullShadowEndSecond[i]=INDICATOR_EMPTY_VALUE;
}

2000-2014, MetaQuotes Software Corp.

903

Funes para Array

ArrayRange
A funo retorna o nmero de elementos na dimenso selecionada do array.
int ArrayRange(
const void& array[],

// array para verificao

int

// ndice da dimenso

rank_index

);

Parmetros
array[]
[in] Array verificado.
rank_index
[in] ndice da dimenso.
Valor do Retorno
Nmero de elementos na dimenso selecionada do array.
Observao
Uma vez que os ndices comeam em zero, o nmero de dimenses de um array uma unidade
maior que o ndice da ltima dimenso.
Exemplo:
void OnStart()
{
//--- cria um array de quatro dimenses
double array[][5][2][4];
//--- definir o tamanho da dimenso de zero
ArrayResize(array,10,10);
//--- imprimir as dimenses
int temp;
for(int i=0;i<4;i++)
{
//--- receber o tamanho de i dimenso
temp=ArrayRange(array,i);
//--- imprimir
PrintFormat("dim = %d, range = %d",i,temp);
}
//--- Resultado
// dim = 0, range = 10
// dim = 1, range = 5
// dim = 2, range = 2
// dim = 3, range = 4
}

2000-2014, MetaQuotes Software Corp.

904

Funes para Array

ArrayResize
A funo define um tamanho novo para a primeira dimenso
int ArrayResize(
void& array[],

// array passado por referncia

int

new_size,

// novo tamanho de array

int

reserve_size=0

// valor do tamanho de reserva (excesso)

);

Parmetros
array[]
[out] Array para alterao de tamanho.
new_size
[in] Novo tamanho para a primeira dimenso.
reserve_size=0
[in] Tamanho alocado para obter reserva.
Valor do Retorno
Se executado com sucesso, a funo retorna a quantidade de todos os elementos contidos no array
aps a alterao do tamanho, caso contrrio, retorna -1, e o tamanho do array no alterado.
Observao
A funo pode ser aplicada somente para arrays dinmicos. Deve ser notado que no se pode alterar
o tamanho de arrays dinmicos atribudos como buffers de indicadores atravs da funo
SetIndexBuffer(). Para buffers de indicadores, todas a operaes de redimensionamento de tamanho
so realizadas pelo subsistema de tempo de execuo do terminal.
Com uma alocao de memria freqente, recomendado usar o terceiro parmetro que defini um
reserva para reduzir o nmero de alocaes fsicas de memria. Todas as subseqentes chamadas
de ArrayResize no levam uma realocao fsica de memria, mas somente alterao do tamanho da
primeira dimenso do array dentro da memria reservada. Deve ser lembrado que o terceiro
parmetro ser usado somente durante a alocao fsica de memria. Por exemplo:
ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000);

Neste caso a memria ser realocada duas vezes, a primeira vez antes de entrar no loop de
elemento 2000 (o tamanho do array ser definido para 1000), e a segunda vez com i igual a 2000.
Se omitisse o terceiro parmetro, haveria 2000 realocaes fsicas de memria, que desaceleraria o
programa.
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()

2000-2014, MetaQuotes Software Corp.

905

Funes para Array


{
//--- Contadores
ulong start=GetTickCount();
ulong now;
int

count=0;

//--- Um array para demonstrao de uma verso rpida


double arr[];
ArrayResize(arr,100000,100000);
//--- Verifique quo rpida a variante com a reserva de memria trabalha
Print("--- Test Fast: ArrayResize(arr,100000,100000)");
for(int i=1;i<=300000;i++)
{
//--- Define um novo tamanho de array especificando a reserva de 100 000 elementos!
ArrayResize(arr,i,100000);
//--- Quando alcanar um nmero redondo, exibe o tamanho do array e tempo gasto
if(ArraySize(arr)%100000==0)
{
now=GetTickCount();
count++;
PrintFormat("%d. ArraySize(arr)=%d Time=%d ms",count,ArraySize(arr),(now-start));
start=now;
}
}
//--- Agora mostra quo lento a verso sem reserva de memria
double slow[];
ArrayResize(slow,100000,100000);
//--count=0;
start=GetTickCount();
Print("---- Teste lenta: ArrayResize(slow,100000)");
//--for(int i=1;i<=300000;i++)
{
//--- Define um novo tamanho de array, mas sem a reserva adicional
ArrayResize(slow,i);
//--- Quando alcanar um nmero redondo, exibe o tamanho do array e tempo gasto
if(ArraySize(slow)%100000==0)
{
now=GetTickCount();
count++;
PrintFormat("%d. ArraySize(slow)=%d Time=%d ms",count,ArraySize(slow),(now-start));
start=now;
}
}
}
//--- O resultado do script
/*
Test_ArrayResize (EURUSD,H1)

--- Test Fast: ArrayResize(arr,100000,100000)

Test_ArrayResize (EURUSD,H1)

1. ArraySize(arr)=100000 Time=0 ms

2000-2014, MetaQuotes Software Corp.

906

Funes para Array


Test_ArrayResize (EURUSD,H1)

2. ArraySize(arr)=200000 Time=0 ms

Test_ArrayResize (EURUSD,H1)

3. ArraySize(arr)=300000 Time=0 ms

Test_ArrayResize (EURUSD,H1)

---- Test Slow: ArrayResize(slow,100000)

Test_ArrayResize (EURUSD,H1)

1. ArraySize(slow)=100000 Time=0 ms

Test_ArrayResize (EURUSD,H1)

2. ArraySize(slow)=200000 Time=0 ms

Test_ArrayResize (EURUSD,H1)

3. ArraySize(slow)=300000 Time=228511 ms

*/

Tambm Veja
ArrayInitialize

2000-2014, MetaQuotes Software Corp.

907

Funes para Array

ArraySetAsSeries
A funo define o flag AS_SERIES para um objeto de um array dinmico, e os elementos sero
indexados como em timeseries.
bool ArraySetAsSeries(
const void& array[],

// array passado por referncia

bool

// true significa ordem reversa de indexao

flag

);

Parmetros
array[]
[in][out] Array numrico para definir.
flag
[in] Direo de indexao do array.
Valor do Retorno
A funo retorna true para sucesso, caso contrrio - false.
Observao
O flag AS_SERIES no pode ser definido para arrays multi-dimensionais ou arrays estticos (arrays
cujo tamanho nos colchetes j predefinido na etapa de compilao). A indexao em sries de
tempo difere da indexao de um array comum, na medida que os elementos de sries de tempo so
indexados do fim para o comeo (dos dados mais novos para os mais antigos).
Exemplo: Indicador que mostra nmero de barra

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- plota Numeration


#property indicator_label1

"Numeration"

#property indicator_type1

DRAW_LINE

2000-2014, MetaQuotes Software Corp.

908

Funes para Array


#property indicator_color1

CLR_NONE

//--- buffers do indicador


double

NumerationBuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- definir a indexao do buffer como numa timeseries
ArraySetAsSeries(NumerationBuffer,true);
//--- define a preciso de exibio na Janela de Dados
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- como o nome do array do indicador exibido na Janela de Dados
PlotIndexSetString(0,PLOT_LABEL,"Bar #");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- ns armazenaremos a hora de abertura da barra zero corrente
static datetime currentBarTimeOpen=0;
//--- acesso reverso ao array time[] - fazemos isso como em sries temporais
ArraySetAsSeries(time,true);
//--- se a hora da barra zero difere da hora armazenada
if(currentBarTimeOpen!=time[0])
{
//--- enumera todas as barras a partir do corrento para a profundidade do grfico
for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
currentBarTimeOpen=time[0];
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja

2000-2014, MetaQuotes Software Corp.

909

Funes para Array


Acesso sries de tempo, ArrayGetAsSeries

2000-2014, MetaQuotes Software Corp.

910

Funes para Array

ArraySize
A funo retorna o nmero de elementos de um array selecionado.
int ArraySize(
const void& array[]

// array verificado

);

Parmetros
array[]
[in] Array de qualquer tipo.
Valor do Retorno
Valor do tipo int.
Observao
Para um array de uma dimenso, o valor a ser retornado pela funo ArraySize igual ao de
ArrayRange(array,0).
Exemplo:
void OnStart()
{
//--- criar arrays
double one_dim[];
double four_dim[][10][5][2];
//--- tamanhos
int one_dim_size=25;
int reserve=20;
int four_dim_size=5;
//--- variveis auxiliares
int size;
//--- alocar memria sem fazer backup
ArrayResize(one_dim,one_dim_size);
ArrayResize(four_dim,four_dim_size);
//--- 1. array unidimensional
Print("+==========================================================+");
Print("Tamanhos de arrays:");
Print("1. Array unidimensional");
size=ArraySize(one_dim);
PrintFormat("Tamanho dimenso zero = %d, Tamanho array = %d",one_dim_size,size);
//--- 2. array multidimensional
Print("2. Array multidimensional");
size=ArraySize(four_dim);
PrintFormat("Tamanho dimenso zero = %d, Tamanho array = %d",four_dim_size,size);
//--- tamanhos de dimenses
int d_1=ArrayRange(four_dim,1);
int d_2=ArrayRange(four_dim,2);
int d_3=ArrayRange(four_dim,3);

2000-2014, MetaQuotes Software Corp.

911

Funes para Array


Print("Verificar:");

Print("Dimenso zero = Tamanho de array / (Primeira dimenso * Segunda dimenso * Terceira dimen
PrintFormat("%d = %d / (%d * %d * %d)",size/(d_1*d_2*d_3),size,d_1,d_2,d_3);
//--- 3. array unidimensional com backup de memria
Print("3. Array unidimensional com backup de memria");
//--- dobro do valor
one_dim_size*=2;
//--- alocar memria com o backup
ArrayResize(one_dim,one_dim_size,reserve);
//--- imprimir o tamanho
size=ArraySize(one_dim);

PrintFormat("Tamanho com o backup = %d, Atual tamanho do array = %d",one_dim_size+reserve,size);


}

2000-2014, MetaQuotes Software Corp.

912

Funes para Array

ArraySort
A funo ordena arrays numricos em ordem ascendente da esquerda para direita.
bool ArraySort(
void& array[]

// array para ordenao

);

Parmetros
array[]
[in][out] Array numrico para ordenao.
Valor do Retorno
A funo retorna true para sucesso, caso contrrio - false.
Observao
Um array marcado pelo flag AS_SERIES ordenado em ordem descendente.
Exemplo:

#property description "O indicador analisa os dados para o ltimo ms e pinta todos os candlesticks
#property description "e grandes volumes de tick. A volume de tick do array ordenado"

#property description "para definir estes candlesticks. Os candlesticks que tem os volumes compreen

#property description "por cento do array, so consideradas pequenos. Os candlesticks que tem os vo
#property description "por cento do array, so consideradas grandes."
//--- configuraes do indicador
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots

//--- plotar
#property indicator_label1

"VolumeFactor"

#property indicator_type1

DRAW_COLOR_CANDLES

#property indicator_color1

clrDodgerBlue,clrOrange

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- constante pr-definida


#define INDICATOR_EMPTY_VALUE 0.0
//--- parmetros de entrada
input int InpSmallVolume=15; // Valor percentual de pequenos volumes (<50)
input int InpBigVolume=20;

// Valor percentual de grandes volumes (<50)

//--- incio do tempo para anlise (ser deslocado)


datetime ExtStartTime;
//--- buffers do indicador
double

ExtOpenBuff[];

double

ExtHighBuff[];

double

ExtLowBuff[];

double

ExtCloseBuff[];

double

ExtColorBuff[];

//--- valores de limite do volume para exibir os candlesticks

2000-2014, MetaQuotes Software Corp.

913

Funes para Array


long

ExtLeftBorder=0;

long

ExtRightBorder=0;

//+------------------------------------------------------------------+
//| Receber valores das bordas para volumes de tick

//+------------------------------------------------------------------+
bool GetVolumeBorders(void)
{
//--- variveis
datetime stop_time;

// copiar tempo final

long

// buffer para copiar

buff[];

//--- tempo final o atual


stop_time=TimeCurrent();
//--- tempo de incio de um ms antes do atual
ExtStartTime=GetStartTime(stop_time);
//--- receber os valores de volume do tick
ResetLastError();
if(CopyTickVolume(Symbol(),Period(),ExtStartTime,stop_time,buff)==-1)
{
//--- falhou para receber os dados, retornar falso para lanar o comando de reclculo

PrintFormat("Falha ao receber os valores de volume do tick. Cdigo de erro = %d",GetLastError


return(false);
}
//--- calcule tamanho de array
int size=ArraySize(buff);
//--- classificar o array
ArraySort(buff);
//--- definir os valores das bordas esquerda e direita para volumes do tick
ExtLeftBorder=buff[size*InpSmallVolume/100];
ExtRightBorder=buff[(size-1)*(100-InpBigVolume)/100];
//--- sucesso na execuo
return(true);
}
//+------------------------------------------------------------------+
//| Receber os dados do ms menor do que o ms anterior

//+------------------------------------------------------------------+
datetime GetStartTime(const datetime stop_time)
{
//--- converter o tempo final da varivel de estrutura do tipo MqlDateTime
MqlDateTime temp;
TimeToStruct(stop_time,temp);
//--- receber os dados que do ms menor
if(temp.mon>1)
temp.mon-=1;

// o ms corrente no o primeiro no ano, por conseguinte, o nmero do anterio

else
{
temp.mon=12;

// o ms corrente o primeiro no ano, por conseguinte, o nmero do anterior

temp.year-=1; // enquanto o nmero do ano um a menos


}
//--- nmero do dia no ser superior a 28

2000-2014, MetaQuotes Software Corp.

914

Funes para Array


if(temp.day>28)
temp.day=28;
//--- retornar a data obtida
return(StructToTime(temp));
}
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- verificar se os parmetros de entrada satisfazem as condies
if(InpSmallVolume<0 || InpSmallVolume>=50 || InpBigVolume<0 || InpBigVolume>=50)
{
Print("Parmetros de entrada incorreto");
return(INIT_PARAMETERS_INCORRECT);
}
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ExtOpenBuff);
SetIndexBuffer(1,ExtHighBuff);
SetIndexBuffer(2,ExtLowBuff);
SetIndexBuffer(3,ExtCloseBuff);
SetIndexBuffer(4,ExtColorBuff,INDICATOR_COLOR_INDEX);
//--- definir o valor que no ser exibido
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,INDICATOR_EMPTY_VALUE);
//--- definir etiquetas para buffers do indicador
PlotIndexSetString(0,PLOT_LABEL,"Open;High;Low;Close");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- verificar se barras no manipuladas ainda esto presentes
if(prev_calculated<rates_total)
{
//--- receber novos valores das bordas direita e esquerda para volumes
if(!GetVolumeBorders())
return(0);

2000-2014, MetaQuotes Software Corp.

915

Funes para Array


}
//--- iniciar varivel para clculo da barra
int start=prev_calculated;
//--- trabalho na ltima barra se os valores do indicador j foram calculados no tick anterior
if(start>0)
start--;
//--- definir indexao direta em sries temporais
ArraySetAsSeries(time,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);
ArraySetAsSeries(tick_volume,false);
//--- o loop de clculo dos valores do indicador
for(int i=start;i<rates_total;i++)
{
//--- preencher os candlesticks a partir da data inicial
if(ExtStartTime<=time[i])
{
//--- se o valor no inferior a borda direita, preencher clandlestick
if(tick_volume[i]>=ExtRightBorder)
{
//--- receber dados para desenhar o candlestick
ExtOpenBuff[i]=open[i];
ExtHighBuff[i]=high[i];
ExtLowBuff[i]=low[i];
ExtCloseBuff[i]=close[i];
//--- cor de DodgerBlue
ExtColorBuff[i]=0;
//--- continuar o loop
continue;
}
//--- preencher o candlestick, se o valor no exceder o limite esquerdo
if(tick_volume[i]<=ExtLeftBorder)
{
//--- receber dados para desenhar o candlestick
ExtOpenBuff[i]=open[i];
ExtHighBuff[i]=high[i];
ExtLowBuff[i]=low[i];
ExtCloseBuff[i]=close[i];
//--- Cor laranja
ExtColorBuff[i]=1;
//--- continuar o loop
continue;
}
}
//--- definir valores vazios para as barras que no foram includas no clculo
ExtOpenBuff[i]=INDICATOR_EMPTY_VALUE;
ExtHighBuff[i]=INDICATOR_EMPTY_VALUE;

2000-2014, MetaQuotes Software Corp.

916

Funes para Array


ExtLowBuff[i]=INDICATOR_EMPTY_VALUE;
ExtCloseBuff[i]=INDICATOR_EMPTY_VALUE;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

917

Funes de Converso

Funes de Converso
Este um grupo de funes que fornece converso de dados de um formato para outro.
The NormalizeDouble() function must be specially noted as it provides the necessary accuracy of the
price presentation. Em operaes de negociao, nenhum preo no normalizado deve ser usado caso
sua preciso exceder, mesmo que por um dgito, daquilo que requerida pelo servidor de negociao.
Funo

Ao

CharToString

Converte um cdigo de smbolo em um string


de um caractere.

DoubleToString

Converte um valor numrico para um linha de


texto com a preciso especificada

EnumToString

Converte um valor de enumerao de qualquer


tipo para string

NormalizeDouble

Arredonda um nmero de ponto flutuando para


uma preciso especificada

StringToDouble

Converte
uma
string
contendo
um
representao de smbolo de nmero em um
nmero de tipo double

StringToInteger

Converte
uma
string
contendo
uma
representao de smbolo de nmero em um
nmero de tipo int

StringToTime

Converte uma string contendo hora ou data no


formato "yyyy.mm.dd [hh:mi]" em um tipo
datetime

TimeToString

Converte um valor contendo hora em segundos


decorridos deste 01.01.1970 em uma string de
formato "yyyy.mm.dd hh:mi"

IntegerToString

Converte int em uma string de comprimento


predefinido

ShortToString

Converte cdigo de smbolo (unicode) em string


de um smbolo

ShortArrayToString

Copia parte de um array em uma string

StringToShortArray

Copia smbolo a smbolo uma string para uma


parte selecionada de array de tipo ushort

CharArrayToString

Converte cdigo de smbolo (ansi) em um array


de um smbolo

StringToCharArray

Copia smbolo a smbolo uma string convertida


de Unicode para ANSI, para um lugar
selecionado de um array de tipo uchar

ColorToARGB

Converte tipo color para tipo uint para receber

2000-2014, MetaQuotes Software Corp.

918

Funes de Converso

representao ARGB da cor.


ColorToString

Converte um valor de color em uma string como


"R,G,B"

StringToColor

Converte uma string "R,G,B" ou uma string com


nome de cor em valor de tipo color

StringFormat

Converte um nmero em string de acordo com


um formato predefinido

Tambm Veja
Uso de um Cdigo de Pgina (Codepage)

2000-2014, MetaQuotes Software Corp.

919

Funes de Converso

CharToString
Converte um cdigo de smbolo em uma string de um caractere.
string CharToString(
uchar char_code

// cdigo numrico de um smbolo

);

Parmetros
char_code
[in] Cdigo de um smbolo ANSI.
Valor do Retorno
String com um smbolo ANSI.

2000-2014, MetaQuotes Software Corp.

920

Funes de Converso

CharArrayToString
Copia e converte parte de um array de tipo uchar em uma string retornada
string CharArrayToString(
uchar array[],

// array

int

start=0,

// posio de incio no array

int

count=-1

// nmero de smbolos

uint

codepage=CP_ACP

// cdigo de pgina

);

Parmetros
array[]
[in] Array de tipo uchar.
start=0
[in] Posio a partir da qual a cpia comea. por default 0 usado.
count=-1
[in] Nmero de elementos do array para cpia. Define o comprimento de uma string resultante.
Valor padro -1, que significa copiar at o fim do array, ou at o terminador 0.
codepage=CP_ACP
[in] O valor do cdigo de pgina. Para os mais usados cdigos de pgina fornea as constantes
apropriadas.
Valor do Retorno
String.
Tambm Veja
Uso de um Cdigo de Pgina (Codepage)

2000-2014, MetaQuotes Software Corp.

921

Funes de Converso

ColorToARGB
A funo converte o tipo color em tipo uint para obter a representao ARGB da cor. O formato de cor
ARGB usado para gerar recurso grfico, exibio de texto, assim como a classe da biblioteca padro
CCanvas.
uint ColorToARGB(
color clr,

// converte color em formato de cor

uchar alpha=255

// canal alfa para gerenciamente da transparncia de cor

);

Parmetros
clr
[in] Valor da cor em varivel de tipo color.
alpha
[in] O valor do canal alfa usado para receber a cor em formato ARGB. O valor pode ser definido de
0 (uma cor de um pixel de primeiro plano no altera a exibio de um pixel subjacente) at 255
(uma cor de um pixel subjacente completamente substituda pela cor do pixel do primeiro plano).
Transparncia de cor em termos de percentagem calculada como (1-alpha/255)*100%. Em outras
palavras, quanto menor o valor de canal alfa, mais transparente a cor.
Valor de retorno
Apresenta a cor em formato ARGB onde os valores Alfa, Red, Green, Blue (canal alfa, vermelho,
verde, azul) so definidos em sries de quatro bytes de tipo uint.
Observao
RGB um formato bsico e comumente usado para descrever cor de pixel em uma tela em grficos
de computador. Nomes de cores bsicas so usadas para atribuir componentes de cor vermelho,
verde e azul. Cada componente descrito por um byte especificando a saturao de cor em uma
faixa de 0 a 255 (0x00 a 0XFF formato hexadecimal). J que a cor branca contm todas as cores, ela
descrita como 0xFFFFFF, ou seja, cada um dos trs componentes est presente pelo valor mximo
de 0xFF.
Entretanto, algumas tarefas requerem especificar a transparncia da cor para descrever a aparncia
de uma imagem no caso dela ficar coberta, atravs de uma cor com algum grau de transparncia. O
conceito de canal alfa introduzido para tais casos. Ele implementado como componente adicional
do formato RGB. A estrutura do ARGB mostrado abaixo.

Valores ARGB so tipicamente expressos usando formato hexadecimal com cada par de dgitos
representando os valores dos canais Alpha, Green, e Blue, respectivamente. Por exemplo, a cor
80FFFF00 representa 50.2% amarelo opaco. Inicialmente, 0x80 define valor alfa de 50.2%, uma vez
que 50.2% de valor 0xFF. Ento, o primeiro par FF define o valor mais alto do componente
vermelho; o prximo par FF como o anterior mas para o componente verde; e par final 00
representa o valor mais baixo do componente azul que pode haver (ausncia de azul). Combinao

2000-2014, MetaQuotes Software Corp.

922

Funes de Converso
de cores verde e vermelha resultam na cor amarela. Se o canal alfa no for usado, a entrada pode
ser reduzida para 6 RRGGBB dgitos, por isso que os valores de canal alfa so armazenados nos
bits de topo do tipo inteiro uint.
Dependendo do contexto, dgitos hexadecimais podem ser escritos com o prefixo '0x' ou '#', por
exemplo, 80FFFF00, 0x80FFFF00 ou #80FFFF00.
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- define transparncia
uchar alfa=0x55;

// 0x55 significa 55/255=21.6 % de transparncia

//--- fazer converso de ARGB para cor clrBlue


PrintFormat("0x%.8X - clrBlue",clrBlue);

PrintFormat("0x%.8X - clrBlue ARGB com alfa=0x55 (transparency 21.6%%)",ColorToARGB(clrBlue,alfa


//--- fazer converso de ARGB para cor clrGreen
PrintFormat("0x%.8X - clrGreen",clrGreen);

PrintFormat("0x%.8X - clrGreen ARGB com alfa=0x55 (transparency 21.6%%)",ColorToARGB(clrGreen,al


//--- fazer converso de ARGB para cor clrRed
PrintFormat("0x%.8X - clrRed",clrRed);

PrintFormat("0x%.8X - clrRed ARGB com alfa=0x55 (transparency 21.6%%)",ColorToARGB(clrRed,alfa))


}

Tambm Veja
Recursos, ResourceCreate(), TextOut(), Tipo color, Tipos char, short, int e long

2000-2014, MetaQuotes Software Corp.

923

Funes de Converso

ColorToString
Converte valor de cor em string na forma de "R,G,B".
string ColorToString(
color color_value,

// valor da cor

bool

// mostrar ou no nome da cor

color_name

);

Parmetros
color_value
[in] Valor da cor em varivel de tipo color.
color_name
[in] Sinaliza a necessidade de retornar o nome da cor, se o nome da cor for idntica a uma das
constantes de cor predefinidas.
Valor do Retorno
Representao de string da cor como "R,G,B", onde R, G e B so constantes decimais de 0 a 255
convertidos em uma string. Se o parmetro color_name=true for definido, a funo tentar
converter o valor da cor no nome da cor.
Exemplo:
string clr=ColorToString(C'0,255,0'); // cor verde
Print(clr);
clr=ColorToString(C'0,255,0',true);

// obtm a constante de cor

Print(clr);

2000-2014, MetaQuotes Software Corp.

924

Funes de Converso

DoubleToString
Converte um valor numrico em string de texto.
string DoubleToString(
double value,

// nmero

int

// numero de dgitos depois do ponto decimal

digits=8

);

Parmetros
value
[in] Valor com um ponto flutuante.
digits
[in] Formato de preciso. Se o valor de digits estiver na faixa entre 0 e 16, um representao de
string de um nmero com a quantidade especificada de dgitos depois do ponto ser obtida. Se o
valor de digits estiver na faixa entre -1 e -16, uma representao de string de um nmero em
notao cientfica com a quantidade especificada de dgitos depois do ponto decimal ser obtida.
Em todos os outros casos, o valor da string conter 8 dgitos depois do ponto decimal.
Valor do Retorno
String contendo uma representao de um nmero com a preciso especificada.
Exemplo:
Print("DoubleToString(120.0 + M_PI) : ",DoubleToString(120.0+M_PI));
Print("DoubleToString(120.0 + M_PI,16) : ",DoubleToString(120.0+M_PI,16));
Print("DoubleToString(120.0 + M_PI,-16) : ",DoubleToString(120.0+M_PI,-16));
Print("DoubleToString(120.0 + M_PI,-1) : ",DoubleToString(120.0+M_PI,-1));
Print("DoubleToString(120.0 + M_PI,-20) : ",DoubleToString(120.0+M_PI,-20));

Tambm Veja
NormalizeDouble, StringToDouble

2000-2014, MetaQuotes Software Corp.

925

Funes de Converso

EnumToString
Converte um valor de enumerao de qualquer tipo para forma de texto.
string EnumToString(
any_enum value

// qualquer tipo de valor de enumerao

);

Parmetros
value
[in] Qualquer tipo de valor de enumerao.
Valor do Retorno
Uma string com uma representao de texto da enumerao. Para obter a mensagem de erro chame
a funo GetLastError().
Observao
A funo pode definir os seguintes valores de erro na varivel _LastError:
ERR_INTERNAL_ERROR erro do ambiente de execuo
ERR_NOT_ENOUGH_MEMORY sem memria suficiente para concluir a operao
ERR_INVALID_PARAMETER no pode permitir o nome do valor da enumerao
Exemplo:
enum interval

// Enumerao de constantes nomeadas

{
month=1,

// intervalo de um ms

two_months,

// dois meses

quarter,

// trs meses - um quadrimestre

halfyear=6,

// meio ano

year=12,

// um ano - 12 months

};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- define o intervalo de tempo igual a um ms
interval period=month;
Print(EnumToString(period)+"="+IntegerToString(period));
//--- define o intervalo de tempo igual a um quadrimestre (trs meses)
period=quarter;
Print(EnumToString(period)+"="+IntegerToString(period));
//--- define o intervalo de tempo igual a um ano (12 meses)
period=year;
Print(EnumToString(period)+"="+IntegerToString(period));
//--- verifica como o tipo de ordem mostrado

2000-2014, MetaQuotes Software Corp.

926

Funes de Converso
ENUM_ORDER_TYPE type=ORDER_TYPE_BUY;
Print(EnumToString(type)+"="+IntegerToString(type));
//--- verifica como valores incorretos so mostrados
type=WRONG_VALUE;
Print(EnumToString(type)+"="+IntegerToString(type));
// Resultado:
// month=1
// quarter=3
// year=12
// ORDER_TYPE_BUY=0
// ENUM_ORDER_TYPE::-1=-1
}

Tambm Veja
Enumeraes, Variveis de entrada

2000-2014, MetaQuotes Software Corp.

927

Funes de Converso

IntegerToString
Esta funo converte um valor de tipo inteiro em uma string de comprimento especificado e retorna a
string obtida.
string IntegerToString(
long

number,

// nmero

int

str_len=0,

// comprimento da string resultado

ushort fill_symbol=' '

// smbolo de preenchimento

);

Parmetros
number
[in] Nmero para converso.
str_len=0
[in] Comprimento da string. Se o comprimento da string resultante for maior que aquele
especificado, a string no truncada. Se ela for menor, os smbolos de preenchimento (filler)
sero adicionados a esquerda.
fill_symbol=' '
[in] Smbolo de preenchimento. Por padro, ele um espao.
Valor do Retorno
String.

2000-2014, MetaQuotes Software Corp.

928

Funes de Converso

ShortToString
Converte um cdigo de smbolo (unicode) em uma string de um smbolo e retorna a string resultante.
string ShortToString(
ushort symbol_code

// smbolo

);

Parmetros
symbol_code
[in] Cdigo do smbolo. Ao invs de um cdigo de smbolo, voc pode usar uma string literal
contendo um smbolo ou uma string literal com cdigo hexadecimal de 2-bytes correspondente ao
smbolo da tabela Unicode.
Valor do Retorno
String.

2000-2014, MetaQuotes Software Corp.

929

Funes de Converso

ShortArrayToString
Copia parte de um array em uma string retornada.
string ShortArrayToString(
ushort array[],

// array

int

start=0,

// posio de comeo do array

int

count=-1

// nmero de smbolos

);

Parmetros
array[]
[in] Array de tipo ushort (anlogo ao tipo wchar_t).
start=0
[in] Posio, a partir da qual a cpia comea, Default - 0.
count=-1
[in] Nmero de elemento do array para copiar. Define o comprimento de uma string resultante.
Valor padro -1, que significa copiar at o fim do array, ou at o terminador 0.
Valor do Retorno
String.

2000-2014, MetaQuotes Software Corp.

930

Funes de Converso

TimeToString
Converte um valor contendo hora em segundos decorridos deste 01.01.1970 em uma string de formato
"yyyy.mm.dd hh:mi".
string TimeToString(
datetime value,

// nmero

int

// formato de sada

mode=TIME_DATE|TIME_MINUTES

);

Parmetros
value
[in] Hora em segundos a partir de 00:00 1970/01/01.
mode=TIME_DATE|TIME_MINUTES
[in] Modo de entrada de dados adicionais. Pode ser um ou sinalizador combinado:
TIME_DATE obtm como resultado "yyyy.mm.dd",
TIME_MINUTES obtm como resultado "hh:mm",
TIME_SECONDS obm resultados como "hh:mm:ss".
Valor do Retorno
String.

2000-2014, MetaQuotes Software Corp.

931

Funes de Converso

NormalizeDouble
Arredonda um nmero de ponto flutuante para uma preciso especificada.
double NormalizeDouble(
double value,

// nmero normalizado

int

// nmero de dgitos depois do ponto decimal

digits

);

Parmetros
value
[in] Valor com um ponto flutuante.
digits
[in] Formato de preciso, nmero de dgitos depois do ponto (0-8).
Valor do Retorno
Valor de tipo double com preciso predefinida.
Observao
Valores calculados de StopLoss, TakeProfit, e valores de preos de abertura para ordens pendentes
devem ser normalizados com a preciso obtida atravs de Digits().
Favor notar que ao imprimir no Dirio usando a funo Print(), um nmero normalizado pode conter
um nmero maior de posies decimais do que o esperado. Por exemplo, para:
double a=76.671;

// Um nmero normalizado com trs posies decimais

Print("Print(76.671)=",a);

// Imprime como

Print("DoubleToString(a,8)=",DoubleToString(a,8)); // Imprime com um preciso predefinida

voc ter o seguinte no terminal:


DoubleToString(a,8)=76.67100000
Print(76.671)=76.67100000000001
Exemplo:
double pi=M_PI;
Print("pi = ",DoubleToString(pi,16));
double pi_3=NormalizeDouble(M_PI,3);
Print("NormalizeDouble(pi,3) = ",DoubleToString(pi_3,16))
;
double pi_8=NormalizeDouble(M_PI,8);
Print("NormalizeDouble(pi,8) = ",DoubleToString(pi_8,16));
double pi_0=NormalizeDouble(M_PI,0);
Print("NormalizeDouble(pi,0) = ",DoubleToString(pi_0,16));
/*
Resultado:

2000-2014, MetaQuotes Software Corp.

932

Funes de Converso
pi= 3.1415926535897931
NormalizeDouble(pi,3)= 3.1419999999999999
NormalizeDouble(pi,8)= 3.1415926499999998
NormalizeDouble(pi,0)= 3.0000000000000000
*/

Tambm Veja
DoubleToString, Tipos reais(double,float), Reduo de tipos,

2000-2014, MetaQuotes Software Corp.

933

Funes de Converso

StringToCharArray
Copia smbolo a smbolouma string convertida de Unicode para ANSI, para um lugar selecionado de um
array de tipo uchar. Retorna o nmero de elementos copiados.
int StringToCharArray(
string text_string,

// string fonte

uchar&

array[],

// array

int

start=0,

// posio de comeo no array

int

count=-1

// nmero de smbolos

uint

codepage=CP_ACP

// cdigo de pgina

);

Parmetros
text_string
[in] String para copiar.
array[]
[out] Array de tipo uchar.
start=0
[in] Posio a partir da qual a cpia comea. Default - 0.
count=-1
[in] Nmero de elemento do array para copiar. Define o comprimento de uma string resultante.
Valor padro -1, que significa copiar at o fim do array, ou at o terminador 0. Terminador 0
ser tambm copiado para o array destino, neste caso o tamanho de um array dinmico pode ser
aumentado se necessrio para o tamanho da string. Se o tamanho do array inicializado no
especificado, ele determinado pelo compilador, baseado no tamanho da seqncia de
inicializao.
codepage=CP_ACP
[in] O valor do cdigo de pgina. Para os mais usados cdigos de pgina fornea as constantes
apropriadas.
Valor do Retorno
Nmero de elementos copiados.
Tambm Veja
Uso de um Cdigo de Pgina (Codepage)

2000-2014, MetaQuotes Software Corp.

934

Funes de Converso

StringToColor
Converte uma string "R,G,B" ou uma string com o nome da cor em valor de tipo color.
color StringToColor(
string color_string

// representao de string de cor

);

Parmetros
color_string
[in] Representao de string de uma cor de tipo "R,G,B" ou nome de uma das Web-cores
predefinidas.
Valor do Retorno
Valor da cor.
Exemplo:
color str_color=StringToColor("0,127,0");
Print(str_color);
Print((string)str_color);
//--- altera a cor um pouco
str_color=StringToColor("0,128,0");
Print(str_color);
Print((string)str_color);

2000-2014, MetaQuotes Software Corp.

935

Funes de Converso

StringToDouble
A funo converte uma string contendo uma representao de um nmero em um nmero de tipo
double.
double StringToDouble(
string value

// string

);

Parmetros
value
[in] String containing a symbol representation of a number.
Valor do Retorno
Valor de tipo double.

2000-2014, MetaQuotes Software Corp.

936

Funes de Converso

StringToInteger
A funo converte uma string contendo uma representao de smbolo de um nmero em um nmero
de tipo int (inteiro).
long StringToInteger(
string value

// string

);

Parmetros
value
[in] String contendo um nmero.
Valor do Retorno
Valor de tipo long.

2000-2014, MetaQuotes Software Corp.

937

Funes de Converso

StringToShortArray
A funo copia smbolo a smbolo uma string em um lugar especificado de um array de tipo ushort.
Retorna o nmero de elementos copiados.
int StringToShortArray(
string text_string,

// string fonte

ushort& array[],

// array

int

start=0,

// posio de comeo no array

int

count=-1

// nmero de smbolos

);

Parmetros
text_string
[in] String para copiar
array[]
[out] Array de tipo ushort (anlogo ao tipo wchar_t).
start=0
[in] Posio, a partir da qual a cpia comea. Default - 0.
count=-1
[in] Nmero de elemento do array para copiar. Define o comprimento de uma string resultante.
Valor padro -1, que significa copiar at o final do array, ou at o terminador 0. O terminador 0
ser copiado para o array destino, neste caso o tamanho de um array dinmico pode ser
aumentado se necessrio para o tamanho da string. Se o tamanho do array inicializado no
especificado, ele determinado pelo compilador, baseado no tamanho da seqncia de
inicializao.
Valor do Retorno
Nmero de elementos copiados.

2000-2014, MetaQuotes Software Corp.

938

Funes de Converso

StringToTime
A funo converte uma string contendo hora ou data no formato "yyyy.mm.dd [hh:mi]" para o tipo
datetime.
datetime StringToTime(
string value

// string de data/hora

);

Parmetros
value
[in] String no formato " yyyy.mm.dd hh:mi ".
Valor do Retorno
O valor de tipo datetime contendo o nmero total de segundos decorridos desde 01.01.1970.

2000-2014, MetaQuotes Software Corp.

939

Funes de Converso

StringFormat
A funo formata parmetros obtidos e retorna uma string.
string StringFormat(
string format,

// string com descrio de formato

...

// parmetros

...

);

Parmetros
format
[in] String contendo mtodo de formatao. As regras de formao so as mesmas da funo
PrintFormat.
...
[in] Parmetros, separados por vrgula.
Valor do Retorno
String.

Tambm Veja
PrintFormat, DoubleToString,ColorToString, TimeToString

2000-2014, MetaQuotes Software Corp.

940

Funes Matemticas

Funes Matemticas
Um conjunto de funes matemticas e trigonomtricas.
Funo

Ao

MathAbs

Retorna o valor absoluto (modulo) do valor


numrico especificado

MathArccos

Retorna o arco-cosseno de x em radianos

MathArcsin

Retorna o arco-seno de x em radianos

MathArctan

Retorna o arco-tangente de x em radianos

MathCeil

Retorna o valor numrico inteiro mais prximo


do acima

MathCos

Retorna o cosseno de um nmero

MathExp

Retorna o exponencial de um nmero

MathFloor

Retorna o valor numrico inteiro mais prximo


do abaixo

MathLog

Retorna o logaritmo natural

MathMax

Retorna o valor mximo entre dois valores


numricos

MathMin

Retorna de valor mnimo entre dois valores


numricos

MathMod

Retorna o resto real da diviso de dois nmeros

MathPow

Eleva uma base a um expoente especificado

MathRand

Retorna um valor pseudo-aleatrio entre 0 e


32767

MathRound

Arredonda um valor para o inteiro mais prximo

MathSin

Retorna o seno de um nmero

MathSqrt

Retorna a raiz quadrada

MathSrand

Define o ponto inicial para gerao de uma


srie de inteiros pseudo-aleatrios

MathTan

Retorna a tangente de um nmero

MathIsValidNumber

Verifica a validade de um nmero real

2000-2014, MetaQuotes Software Corp.

941

Funes Matemticas

MathAbs
A funo retorna o valor absoluto (mdulo) de um valor numrico especificado.
double MathAbs(
double value

// valor numrico

);

Parmetros
value
[in] Valor numrico.
Valor do Retorno
Valor de tipo double maior ou igual a zero.
Observao
A invs da funo MathAbs(), voc pode usar fabs().

2000-2014, MetaQuotes Software Corp.

942

Funes Matemticas

MathArccos
A funo retorna o arco-cosseno de x no intervalo de 0 a

radianos.

double MathArccos(
double val

// -1<val<1

);

Parmetros
val
[in] Valor de val entre -1 e 1, valor sobre o qual ser calculado o arco-cosseno.
Valor do Retorno
Arco-cosseno de um nmero em radianos. Se val for menor que -1 ou maior que 1, a funo retorna
NaN (valor indeterminado).
Observao
Ao invs da funo MathArccos(), voc pode usar acos().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

943

Funes Matemticas

MathArcsin
A funo retorna o arco-seno de x no intervalo de - /2 a /2 radianos.
double MathArcsin(
double val

// -1<value<1

);

Parmetros
val
[in] Valor de val entre -1 e 1, valor sobre o qual ser calculado o arco-seno.
Valor do Retorno
Arco-seno do nmero val em radianos no intervalo de - /2 e /2 radianos. Se val for menor que -1
ou maior que 1, a funo retorna NaN (valor indeterminado).
Observao
Ao invs da funo MathArcsin(), voc pode usar asin().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

944

Funes Matemticas

MathArctan
A funo retorna o arco-tangente de x. Se x for igual a 0, a funo retorna 0.
double MathArctan(
double value

// tangente

);

Parmetros
value
[in] Um nmero representando uma tangente.
Valor do Retorno
MathArctan retorna um valor no intervalo de - /2 a /2 radianos.
Observao
Ao invs da funo MathArctan(), voc pode usar atan().

2000-2014, MetaQuotes Software Corp.

945

Funes Matemticas

MathCeil
A funo retorna o valor do nmero inteiro mais prximo do acima.
double MathCeil(
double val

// nmero

);

Parmetros
val
[in] Valor numrico.
Valor do Retorno
Valor numrico representando o menor inteiro que excede ou igual a val.
Observao
Ao invs da funo MathCeil(), voc pode usar ceil().

2000-2014, MetaQuotes Software Corp.

946

Funes Matemticas

MathCos
A funo retorna o cosseno de um ngulo.
double MathCos(
double value

// nmero

);

Parmetros
value
[in] ngulo em radianos.
Valor do Retorno
Valor de tipo double no intervalo de -1 a 1.
Observao
A invs de MathCos(), voc pode usar cos().

2000-2014, MetaQuotes Software Corp.

947

Funes Matemticas

MathExp
A funo retorna o valor e elevado a potncia d.
double MathExp(
double value

// potncia para o nmero e

);

Parmetros
value
[in] Um nmero especificando a potncia.
Valor do Retorno
Um nmero de tipo double. Em "overflow", a funo retorna INF (infinito), em caso de perda de
ordem MathExp retorna 0.
Observao
Ao invs de MathExp(), voc pode usar exp().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

948

Funes Matemticas

MathFloor
A funo retorna o valor numrico inteiro mais prximo do abaixo.
double MathFloor(
double val

// nmero

);

Parmetros
val
[in] Valor numrico.
Valor do Retorno
Um valor numrico representando o maior inteiro que menor ou igual a val.
Observao
Ao invs de MathFloor(), voc pode usar floor().

2000-2014, MetaQuotes Software Corp.

949

Funes Matemticas

MathLog
A funo retorna o logaritmo natural.
double MathLog(
double val

// valor aplicado ao logaritmo

);

Parmetros
val
[in] Valor cujo logaritmo deve ser encontrado.
Valor do Retorno
O logaritmo natural de val em caso de sucesso. Se val for negativo, a funo retorna NaN (valor
indeterminado). Se val for igual a 0, a funo retorna INF (infinito).
Observao
Ao invs de MathLog(), voc pode usar log().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

950

Funes Matemticas

MathLog
Retorna o logaritmo de um nmero na base 10.
double MathLog10(
double val

// nmero aplicado ao logaritmo

);

Parmetros
val
[in] Valor numrico cujo logaritmo comum deve ser encontrado.
Valor do Retorno
O logaritmo comum em caso de sucesso. Se val for negativo, a funo retorna NaN (valor
indeterminado). Se val for igual a 0, a funo retorna INF (infinito).
Observao
Ao invs de MathLog10(), voc pode usar log10().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

951

Funes Matemticas

MathMax
A funo retorna o valor mximo entre dois valores.
double MathMax(
double value1,

// primeiro valor

double value2

// segundo valor

);

Parmetros
value1
[in] Primeiro valor numrico.
value2
[in] Segundo valor numrico.
Valor do Retorno
O maior dos dois valores.
Observao
Ao invs de MathMax(), voc pode usar fmax(). As funes fmax(), fmin(), MathMax(), MathMin()
podem trabalhar com tipos inteiros sem convert-los para o tipo double.
Se parmetros de diferentes tipos so passados para um funo, o parmetro do menor tipo
automaticamente convertido para o maior tipo. O tipo do valor de retorno corresponde ao do maior
tipo.
Se dados de mesmo tipo so passados, nenhuma converso realizada.

2000-2014, MetaQuotes Software Corp.

952

Funes Matemticas

MathMin
A funo retorna o valor mnimo entre dois valores.
double MathMin(
double value1,

// primeiro valor

double value2

// segundo valor

);

Parmetros
value1
[in] Primeiro valor numrico.
value2
[in] Segundo valor numrico.
Valor do Retorno
O menor valor dos dois valores.
Observao
Ao invs de MathMin(), voc pode usar fmin(). As funes fmax(), fmin(), MathMax(), MathMin()
podem trabalhar com tipos inteiros sem convert-los para o tipo double.
Se parmetros de diferentes tipos so passados para um funo, o parmetro do menor tipo
automaticamente convertido para o maior tipo. O tipo do valor de retorno corresponde ao do maior
tipo.
Se dados de mesmo tipo so passados, nenhuma converso realizada.

2000-2014, MetaQuotes Software Corp.

953

Funes Matemticas

MathMod
A funo retorna o resto real da diviso de dois nmeros.
double MathMod(
double value,

// valor do dividendo

double value2

// valor do divisor

);

Parmetros
value
[in] Valor do dividendo.
value2
[in] Valor do divisor.
Valor do Retorno
A funo MathMod calcula o valor real de f de val / y tal que val = i * y + f , onde i um inteiro, f
tem o mesmo sinal de val, e o valor absoluto de f menor que o valor absoluto de y.
Observao
Ao invs de MathMod(), voc pode usar fmod().

2000-2014, MetaQuotes Software Corp.

954

Funes Matemticas

MathPow
A funo eleva uma base a uma potncia especificada.
double MathPow(
double base,

// base

double exponent

// valor do expoente

);

Parmetros
base
[in] Base.
exponent
[in] Valor do expoente.
Valor do Retorno
Valor da base elevada a uma potncia especificada.
Observao
Ao invs de MathPow(), voc pode usar pow().

2000-2014, MetaQuotes Software Corp.

955

Funes Matemticas

MathRand
Retorna um inteiro pseudo-aleatrio no intervalo de 0 a 32767.
int MathRand();

Valor do Retorno
Valor de um inteiro no intervalo de 0 a 32767.
Observao
Antes da primeira chamada da funo, necessrio chamar MathSrand para definir o gerador de
nmeros pseudo-aleatrio para o estado inicial.
Observao
Ao invs de MathRand(), voc pode usar rand().

2000-2014, MetaQuotes Software Corp.

956

Funes Matemticas

MathRound
A funo retorna o valor arredondado para o inteiro mais prximo de um valor numrico especificado.
double MathRound(
double value

// valor a ser arredondado

);

Parmetros
value
[in] Valor numrico antes do arredondamento.
Valor do Retorno
Valor arredondado at o inteiro mais prximo.
Observao
Ao invs de MathRound(), voc pode usar round().

2000-2014, MetaQuotes Software Corp.

957

Funes Matemticas

MathSin
Retorna o seno de um ngulo especificado.
double MathSin(
double value

// argumento em radianos

);

Parmetros
value
[in] ngulo em radianos.
Valor do Retorno
Seno de um ngulo medido em radianos. Retorna um valor no intervalo de -1 a 1.
Observao
Ao invs de MathSin(), voc pode usar sin().

2000-2014, MetaQuotes Software Corp.

958

Funes Matemticas

MathSqrt
Retorna a raiz quadrada de um nmero.
double MathSqrt(
double value

// nmero positivo

);

Parmetros
value
[in] Valor numrico positivo.
Valor do Retorno
Raiz quadrada de um valor. Se val for negativo, a funo retorna NaN (valor indeterminado).
Observao
Ao invs de MathSqrt(), voc pode usar sqrt().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

959

Funes Matemticas

MathSrand
Define o ponto inicial para gerao de uma srie de inteiros pseudo-aleatrios.
void MathSrand(
int seed

// nmero de inicializao

);

Parmetros
seed
[in] Starting number for the sequence of random numbers.
Valor do Retorno
Sem valor de retorno.
Observao
A funo MathRand() usada para gerar uma seqncia de nmeros pseudo-aleatrios. Chamar
MathSrand() com um certo nmero de inicializao permite produzir sempre a mesma seqncia de
nmeros pseudo-aleatrios.
Para garantir o recebimento de uma seqncia no recorrente, use a chamada de
MathSrand(GetTickCount()), uma vez que o valor de GetTickCount() aumenta a partir do momento
do incio do sistema operativo e no se repete dentro de 49 dias, quando o contador built-in de
milissegundos transborda. O uso do MathSrand(TimeCurrent()) no adequado, porque a funo
TimeCurrent() retorna a hora do ltimo tick, que pode no se alterar por um longo tempo, por
exemplo, nos finais de semana.
A inicializao do gerador de nmeros aleatrios usando MathSrand() para indicadores e Expert
Advisors melhor realizada no handler OnInit(); isso evita os seguidos reincios mltiplos caso a
inicializao do gerador fosse colocada em OnTick() ou OnCalculate().
Ao invs da funo MathSrand(), voc pode usar a funo srand().
Exemplo:
#property description "The indicator shows the central limit theorem, which states:"

#property description "The sum of a sufficiently large number of weakly dependent random variables,
#property description "having approximately equal magnitude (none of the summands dominates,"

#property description "or makes a determining contribution to the sum), has a distribution close to
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- Properties of the graphical construction


#property indicator_label1

"Label"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrRoyalBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- Uma varivel de entrada


input int

sample_number=10;

2000-2014, MetaQuotes Software Corp.

960

Funes Matemticas
//--- An indicator buffer to for drawing the distribution
double

LabelBuffer[];

//--- A counter of ticks


double

ticks_counter;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- Ligando um array e um buffer de indicador
SetIndexBuffer(0,LabelBuffer,INDICATOR_DATA);
//--- turn the indicator buffer around from the present to the past
ArraySetAsSeries(LabelBuffer,true);
//--- Initialize the generator of random numbers
MathSrand(GetTickCount());
//--- Initialize the counter of ticks
ticks_counter=0;
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- For a zero counter reset the indicator buffer
if(ticks_counter==0) ArrayInitialize(LabelBuffer,0);
//--- Aumentar o contador
ticks_counter++;
//--- We should periodically reset the counter ticks, to revive the distribution
if(ticks_counter>100)
{
Print("We've reset the indicator values, let's start filling the cells once again");
ticks_counter=0;
}
//--- Get a sample of random values as the sum of three numbers from 0 to 7
for(int i=0;i<sample_number;i++)
{

//--- Calculation of the index of the cell, where the random number falls as the sum of three
int rand_index=0;
//--- Get three random numbers from 0 to 7
for(int k=0;k<3;k++)

2000-2014, MetaQuotes Software Corp.

961

Funes Matemticas
{
//--- A remainder in the division by 7 will return a value from 0 to 6
rand_index+=MathRand()%7;
}
//--- Increase the value in the cell number rand_index by 1
LabelBuffer[rand_index]++;
}
//--- Exit the OnCalculate() handler
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

962

Funes Matemticas

MathTan
A funo retorna a tangente de um nmero.
double MathTan(
double rad

// argumento em radianos

);

Parmetros
rad
[in] ngulo em radianos.
Valor do Retorno
Tangente do rad. Se rad for maior ou igual a 263, ou menor ou igual a -263, uma perda de
significncia no resultado ocorre, neste caso a funo retorna um nmero indefinido.
Observao
Ao invs de MathTan(), voc pode usar tan().
Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

963

Funes Matemticas

MathIsValidNumber
Verifica a validade de um nmero real.
bool MathIsValidNumber(
double number

// nmero para verificar

);

Parmetros
number
[in] Valor numrico verificado.
Valor do Retorno
Retorna true, se o valor verificado for um nmero real aceitvel. Se o valor verificado for infinito
positivo ou infinito negativo, ou "not a number" (NaN), a funo retorna false.
Exemplo:
double abnormal=MathArcsin(2.0);
if(!MathIsValidNumber(abnormal)) Print("Ateno! MathArcsin(2.0) = ",abnormal);

Tambm Veja
Tipos Reais (double, float)

2000-2014, MetaQuotes Software Corp.

964

Funes de String

Funes de String
Este um grupo de funes destinado a trabalhar com dados do tipo string.
Funo

Ao

StringAdd

Adiciona uma string no final de uma outra


string

StringBufferLen

Retorna o tamanho de buffer alocado para uma


string

StringCompare

Compara duas string e retorna 1 se a primeira


string for maior que a segunda; 0 - se as string
so iguais; -1 (menos 1) - se a primeira string
for menor que a segunda.

StringConcatenate

Forma uma string dos parmetros passados

StringFill

Preenche uma string especificada com smbolos


selecionados

StringFind

Busca por uma substring em uma string

StringGetCharacter

Retorna o valor de um nmero localizado na


posio de string especificada

StringInit

Inicializa
uma
string
com
smbolos
especificados e fornece o comprimento da
string especificada

StringLen

Retorna o nmero de smbolos em uma string

StringReplace

Substitui todas as substrings encontradas em


uma string por uma seqncia de smbolos

StringSetCharacter

Retorna uma cpia de uma string com o valor


alterado de um smbolo na posio especificada

StringSplit

Obtm substrings a partir de um separador


especificado da string especificada, retorna o
nmero de substrings obtidas

StringSubstr

Extrai uma substring a partir de uma string de


texto comeando a partir de uma posio
especificada

StringToLower

Transforma todos os smbolos de uma string


selecionada para minscula pela localizao

StringToUpper

Transforma todos os smbolos de uma string


selecionada para maiscula pela localizao

StringTrimLeft

Remove caracteres de quebra de linha, espaos


e tabs na parte esquerda da string

StringTrimRight

Remove caracteres de quebra de linha, espaos


e tabs na parte direita da string

2000-2014, MetaQuotes Software Corp.

965

Funes de String

StringAdd
A funo adiciona uma substring no final de uma string.
bool StringAdd(
string& string_var,

// string, na qual ns adicionados

string

// string, que adicionada

add_substring

);

Parmetros
string_var
[in][out] String, na qual uma outra string adicionada.
add_substring
[in] String que adicionada ao final de uma string fonte.
Valor do Retorno
Em caso de sucesso retorna verdadeiro, caso contrrio falso. A fim de obter o cdigo de erro, a
funo GetLastError() deve ser chamada.
Exemplo:
void OnStart()
{
long length=1000000;
string a="a",b="b",c;
//--- primeiro mtodo
uint start=GetTickCount(),stop;
long i;
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("tempo para 'c = a + b' = ",(stop-start)," milissegundos, i = ",i);
//--- segundo mtodo
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(a,b);
}
stop=GetTickCount();
Print("tempo para 'c = a + b' = ",(stop-start)," milissegundos, i = ",i);
//--- terceiro mtodo
start=GetTickCount();
a="a"; // reinicializa a varivel a
for(i=0;i<length;i++)

2000-2014, MetaQuotes Software Corp.

966

Funes de String
{
StringConcatenate(c,a,b);
}
stop=GetTickCount();
Print("tempo para 'StringConcatenate(c,a,b)' = ",(stop-start)," milissegundos, i = ",i);
}

Tambm Veja
StringConcatenate

2000-2014, MetaQuotes Software Corp.

967

Funes de String

StringBufferLen
A funo retorna o tamanho de buffer alocado para a string.
int StringBufferLen(
string string_var

// string

Parmetros
string_var
[in] Seqncia.
Valor do Retorno
O valor 0 significa que a string constante e o tamanho do buffer no pode ser alterado. -1
significa que a string pertence ao terminal cliente, e modificaes no contedo do buffer pode ter
resultados indeterminados.
Observao
O tamanho mnimo do buffer igual a 16.
Exemplo:
void OnStart()
{
long length=1000;
string a="a",b="b";
//--long i;
Print("antes: StringBufferLen(a) = ",StringBufferLen(a),
"

StringLen(a) = ",StringLen(a));

for(i=0;i<length;i++)
{
StringAdd(a,b);
}
Print("aps: StringBufferLen(a) = ",StringBufferLen(a),
"

StringLen(a) = ",StringLen(a));

Tambm Veja
StringAdd, StringInit, StringLen, StringFill

2000-2014, MetaQuotes Software Corp.

968

Funes de String

StringCompare
A funo compara duas strings e retorna o resultada da comparao na forma de um inteiro.
int StringCompare(
const string& string1,

// a primeira string na comparao

const string& string2,

// a segunda string na comparao

bool

// seleo do modo sensibilidade maiscula/minscula p

case_sensitive=true

);

Parmetros
string1
[in] A primeira string.
string2
[in] A segunda string.
case_sensitive=true
[in] Seleo do modo de sensibilidade maiscula/minscula. Se for true, ento "A">"a". Se for
false, ento "A"="a". Por default, o valor igual a true.
Valor do Retorno
-1 (menos um), se string1<string2
0 (zero), se string1=string2
1 (um), se string1>string2
Observao
As strings so comparadas smbolo a smbolo, os smbolos so comparados na ordem alfabtica em
concordncia como o cdigo de pgina corrente.
Exemplo:
void OnStart()
{
//--- qual maior - apple ou home?
string s1="Apple";
string s2="home";
//--- compara com sensibilidade maiscula/minscula
int result1=StringCompare(s1,s2);
if(result1>0) PrintFormat("Comparao sensvel caso: %s > %s",s1,s2);
else
{
if(result1<0)PrintFormat("Comparao sensvel caso: %s < %s",s1,s2);
else PrintFormat("Comparao sensvel caso: %s = %s",s1,s2);
}
//--- Comparao insensvel caso
int result2=StringCompare(s1,s2,false);
if(result2>0) PrintFormat("Comparao insensvel caso: %s > %s",s1,s2);
else

2000-2014, MetaQuotes Software Corp.

969

Funes de String
{
if(result2<0)PrintFormat("Comparao insensvel caso: %s < %s",s1,s2);
else PrintFormat("Comparao insensvel caso: %s = %s",s1,s2);
}
/* Resultado:

Comparao sensvel caso: Apple < home

Comparao insensvel caso: Apple < home

*/
}

Tambm Veja
Tipo de String, CharToString(), ShortToString(), StringToCharArray(), StringToShortArray(),
StringGetCharacter(), Uso de um Cdigo de Pgina

2000-2014, MetaQuotes Software Corp.

970

Funes de String

StringConcatenate
A funo forma uma string de parmetros passados e retorna o tamanho da string formada.
Parmetros podem ser de qualquer tipo. O nmero de parmetros no pode ser menor que 2 ou maior
que 64.
int StringConcatenate(
string& string_var,

// string para formar

void argument1

// primeiro parmetro de qualquer tipo simples

void argument2

// segundo parmetro de qualquer tipo simples

...

// prximo parmetro de qualquer tipo simples

);

Parmetros
string_var
[out] String que ser formada como resultado da concatenao.
argumentN
[in] Quaisquer valores separados por vrgula. De 2 a 63 parmetros de qualquer tipo simples.
Valor do Retorno
Retorna o comprimento da string, formada pela concatenao dos parmetros transformados em
tipo string. Os parmetros so transformados em strings em concordncia com as mesmas regras
aplicadas em Print() e Comment().
Tambm Veja
StringAdd

2000-2014, MetaQuotes Software Corp.

971

Funes de String

StringFill
Preenche uma string selecionada com um smbolo especificado.
bool StringFill(
string&

string_var,

// string a preencher

ushort

character

// smbolos que preenchero a string

);

Parmetros
string_var
[in][out] String, que ser preenchida pelo smbolo selecionado.
character
[in] Smbolo a partir do qual a string ser preenchida.
Valor do Retorno
Em caso de sucesso retorna true, caso contrrio - false. Para obter o cdigo de erro chame
GetLastError().
Observao
Preencher uma string no lugar significa que os smbolos so inseridos diretamente na string sem
operaes transitrias de criar ou copiar uma nova string. Isso permite economizar o tempo da
operao.
Exemplo:
void OnStart()
{
string str;
StringInit(str,20,'_');
Print("str = ",str);
StringFill(str,0);
Print("str = ",str,": StringBufferLen(str) = ", StringBufferLen(str));
}
// Resultado
//

str = ____________________

//

str =

: StringBufferLen(str) = 20

//

Tambm Veja
StringBufferLen, StringLen, StringInit

2000-2014, MetaQuotes Software Corp.

972

Funes de String

StringFind
Busca por uma substring em uma string.
int StringFind(
string string_value,

// string na qual a busca feita

string match_substring,

// o que procurado

int

// a partir de qual posio a busca inicia

start_pos=0

);

Parmetros
string_value
[in] String, na qual a a busca feita.
match_substring
[in] Substring procurada.
start_pos=0
[in] Posio na string a partir da qual a busca iniciada.
Valor do Retorno
Retorna o nmero da posio na string, a partir da qual a substring procurada comea, ou -1, se a
substring no foi encontrada.

2000-2014, MetaQuotes Software Corp.

973

Funes de String

StringGetCharacter
Retorna o valor de um smbolo, localizado na posio especificada de uma string.
ushort StringGetCharacter(
string string_value,

// string

int

// posio do smbolo na string

pos

);

Parmetros
string_value
[in] Seqncia.
pos
[in] Posio de um smbolo na string. Pode ser de 0 a StringLen(text) -1.
Valor do Retorno
Cdigo do smbolo ou 0 em caso de um erro. Para obter o cdigo de erro chame GetLastError().

2000-2014, MetaQuotes Software Corp.

974

Funes de String

StringInit
Inicializa uma string com um smbolo especificado e fornece o tamanho da string especificada.
bool StringInit(
string&

string_var,

// string para inicializao

int

new_len=0,

// comprimento da string requerida aps inicializao

ushort

character=0

// smbolo, com o qual a string ser preenchida

);

Parmetros
string_var
[in][out] String que deve ser inicializada e desinicializada.
new_len=0
[in] Comprimento da string aps inicializao. Se length=0, ela desinicializa a string, isto , o
buffer da string limpo e o endereo do buffer zerado.
character=0
[in] Smbolo para preencher a string.
Valor do Retorno
Em caso de sucesso retorna true, caso contrrio - false. Para obter o cdigo de erro chame
GetLastError().
Observao
Se character=0 e o comprimento new_len>0, o buffer da string de comprimento indicado ser
alocado e preenchido com zeros. O comprimento da string ser igual a zero, porque o buffer inteiro
ser preenchido com terminadores de string.
Exemplo:
void OnStart()
{
//--string str;
StringInit(str,200,0);
Print("str = ",str,": StringBufferLen(str) = ",
StringBufferLen(str),"

StringLen(str) = ",StringLen(str));

}
/*

Resultado:

str = : StringBufferLen(str) = 200

StringLen(str) = 0

*/

Tambm Veja
StringBufferLen, StringLen

2000-2014, MetaQuotes Software Corp.

975

Funes de String

StringLen
Retorna o nmero de smbolos em uma string.
int StringLen(
string string_value

// string

);

Parmetros
string_value
[in] String para calcular o comprimento.
Valor do Retorno
O nmero de smbolos em uma string sem o zero final.

2000-2014, MetaQuotes Software Corp.

976

Funes de String

StringReplace
Substitui todas as substrings encontradas de uma string por uma seqncia de smbolos.
int StringReplace(
string&

str,

// a string na qual substrings sero substitudas

const string

find,

// a substring procurada

const string

replacement

// a substring que ser inserida nas posies encontradas

);

Parmetros
str
[in][out] A string na qual voc ir substituir substrings.
find
[in] A substring que deseja substituir.
replacement
[in] A string que ser inserida na lugar da encontrada.
Valor do Retorno
A funo retorna o nmero de substituies no caso de sucesso, caso contrrio -1. Para obter o
cdigo do erro chame a funo GetLastError().
Observao
Se a funo rodou com sucesso, mas nenhuma substituio foi feita (a substring a ser substituda
no foi encontrada), ela retorna 0.
O erro pode resultar de parmetros str ou find incorretos (vazio ou string no inicializada, veja
StringInit() ). Alm disso, o erro ocorre se no houver memria suficiente para concluir a
substituio.
Exemplo:
string text="The quick brown fox jumped over the lazy dog.";
int replaced=StringReplace(text,"quick","slow");
replaced+=StringReplace(text,"brown","black");
replaced+=StringReplace(text,"fox","bear");
Print("Replaced: ", replaced,". Result=",text);
//

Resultado

//

Substitudo: 3. Resultado=The slow black bear jumped over the lazy dog.

//

Tambm Veja
StringSetCharacter(), StringSubstr()

2000-2014, MetaQuotes Software Corp.

977

Funes de String

StringSetCharacter
Retorna uma cpia de uma string com um caractere alterado na posio especificada.
bool StringSetCharacter(
string& string_var,

// string

int

pos,

// posio

ushort

character

// caractere

);

Parmetros
string_var
[in][out] String.
pos
[in] Posio de um caractere em uma string. Pode ser de 0 a StringLen(text).
character
[in] Cdigo Unicode de um smbolo.
Observao
Se pos for menor que o comprimento da string e o valor de cdigo do smbolo = 0, a string
truncada (mas o tamanho de buffer, alocado para a string permanece inalterado). O comprimento da
string se torna igual a pos.
Se pos for igual ao comprimento da string, o smbolo especificado adicionado ao final da string, e
o comprimento aumentado em um.
Exemplo:
void OnStart()
{
string str="0123456789";
Print("antes: str = ",str,",StringBufferLen(str) = ",
StringBufferLen(str),"

StringLen(str) = ",StringLen(str));

//--- adicionado valor zero no meio


StringSetCharacter(str,6,0);
Print("aps: str = ",str,",StringBufferLen(str) = ",
StringBufferLen(str),"

StringLen(str) = ",StringLen(str));

//--- adiciona smbolo no final


int size=StringLen(str);
StringSetCharacter(str,size,'+');
Print("adio: str = ",str,",StringBufferLen(str) = ",
StringBufferLen(str),"

StringLen(str) = ",StringLen(str));

}
/* Resultado
antes: str = 0123456789 ,StringBufferLen(str) = 0
aps: str = 012345 ,StringBufferLen(str) = 16
adio: str = 012345+ ,StringBufferLen(str) = 16

StringLen(str) = 10

StringLen(str) = 6
StringLen(str) = 7

*/

2000-2014, MetaQuotes Software Corp.

978

Funes de String

Tambm Veja
StringBufferLen, StringLen, StringFill, StringInit

2000-2014, MetaQuotes Software Corp.

979

Funes de String

StringSplit
Obtm substrings por meio um separador especificado a partir de uma string especificada, retorna o
nmero de substrings obtidas.
int StringSplit(
const string string_value,

// A string que ser pesquisada

const ushort

separator,

// Um separador usado para buscar substrings

string

& result[]

// Um array passado por referencia para obter as substrings e

);

Parmetros
string_value
[in] Uma string da qual voc necessita obter substrings. A string no ser alterada.
pos
[in]
O cdigo do caractere separador. Para obter o cdigo, voc pode usar a funo
StringGetCharacter().
result[]
[out] Um array de strings onde as substrings obtidas esto localizadas.
Valor do Retorno
O nmero de substrings no array result[]. Se o separador no for encontrado na string passada,
somente uma string fonte ser colocada no array.
Se string_value for vazia ou NULL, a funo retornar zero. No caso de um erro, a funo retorna 1. Para obter o cdigo do erro, chame a funo GetLastError().
Exemplo:
string to_split="life_is_good";

// Um string para dividir em substrings

string sep="_";

// Um separador como um caractere

ushort u_sep;

// O cdigo do caractere separador

string result[];

// Um array para obter strings

//--- Obtm o cdigo do separador


u_sep=StringGetCharacter(sep,0);
//--- Divide a string em substrings
int k=StringSplit(to_split,u_sep,result);
//--- Exibe um comentrio
PrintFormat("Strings obtidos: %d. Usado separador '%s' com o cdigo %d",k,sep,u_sep);
//--- Agora imprime todos os resultados obtidos
if(k>0)
{
for(int i=0;i<k;i++)
{
PrintFormat("result[%d]=%s",i,result[i]);
}
}

2000-2014, MetaQuotes Software Corp.

980

Funes de String

Tambm Veja
StringReplace(), StringSubstr(), StringConcatenate()

2000-2014, MetaQuotes Software Corp.

981

Funes de String

StringSubstr
Extrai uma substring de uma string de texto iniciando de uma posio especificada.
string StringSubstr(
string string_value,

// string

int

start_pos,

// posio de incio

int

length=-1

// comprimento da string extrada

);

Parmetros
string_value
[in] String de onde ser extrada uma substring.
start_pos
[in] Posio inicial de uma substring. Pode ser de 0 a StringLen(text) -1.
length=-1
[in] Comprimento de uma substring extrada. Se o valor do parmetro for igual a -1 ou o
parmetro no for definido, a substring ser extrada da posio indicada at a final da string.
Valor do Retorno
Cpia de uma substring extrada, se possvel. Caso contrrio, retorna uma string vazia.

2000-2014, MetaQuotes Software Corp.

982

Funes de String

StringToLower
Transforma todos os smbolos de uma string selecionada em minscula por localizao.
bool StringToLower(
string& string_var

// string para processar

);

Parmetros
string_var
[in][out] String.
Valor do Retorno
Em caso de sucesso retorna true, caso contrrio - false. Para obter o cdigo de erro chame
GetLastError().

2000-2014, MetaQuotes Software Corp.

983

Funes de String

StringToUpper
Transforma todos os smbolos de uma string selecionada em maiscula por localizao.
bool StringToUpper(
string& string_var

// string para processar

);

Parmetros
string_var
[in][out] String.
Valor do Retorno
Em caso de sucesso retorna true, caso contrrio - false. Para obter o cdigo de erro chame
GetLastError().

2000-2014, MetaQuotes Software Corp.

984

Funes de String

StringTrimLeft
A funo remove caracteres de quebra de linha, espaos e tabs na parte esquerda da string at o
primeiro smbolo significativo. A string modificada no lugar.
int StringTrimLeft(
string& string_var

// string para cortar

);

Parmetros
string_var
[in][out] String que ser cortada a partir da esquerda.
Valor do Retorno
Retorna o nmero de smbolos removidos.

2000-2014, MetaQuotes Software Corp.

985

Funes de String

StringTrimRight
A funo remove caracteres de quebra de linha, espaos e tabs na parte direita da string aps o ltimo
smbolo significativo. A string modificada no lugar.
int StringTrimRight(
string& string_var

// string para cortar

);
);

Parmetros
string_var
[in][out] String que ser cortada a partir da direita.
Valor do Retorno
Retorna o nmero de smbolos removidos.

2000-2014, MetaQuotes Software Corp.

986

Data e Hora

Data e Hora
Este o grupo de funes para trabalhar com dados do tipo datetime (um inteiro que representa
nmero de segundos decorridos a partir da 0 hora de 1 Janeiro de 1970).
Para obter contadores e timers de alta-resoluo, use a funo GetTickCount(), que produz valores em
milissegundos.
Funo

Ao

TimeCurrent

Retorna a ltima hora conhecida do servidor


(hora da ltima cotao recebida) no formato
de datetime(

TimeTradeServer

Retorna a hora calculada corrente do servidor


de negociao

TimeLocal

Retorna a hora do computador local em formato


datetime

TimeGMT

Retorna a hora GMT em formato datetime com


o horrio de vero por hora local do
computador, de onde o terminal cliente est
executando

TimeDaylightSavings

Retorna o sinal do ajuste do horrio de vero

TimeGMTOffset

Retorna a diferena corrente entre a hora GMT


e a hora do computador local em segundos,
levando em considerao o ajuste do horrio de
vero

TimeToStruct

Converte um valor datetime em uma varivel


do tipo estrutura MqlDateTime

StructToTime

Converte uma varivel do tipo


MqlDateTime em um valor datetime

2000-2014, MetaQuotes Software Corp.

estrutura

987

Data e Hora

TimeCurrent
Retorna a ltima hora conhecida do servidor, hora da ltima cotao recebida para um dos ativos
selecionados na janela "Observao de Mercado". No handler OnTick(), esta funo retorna a hora do
tick recebido, que est sendo tratado. Em outros casos (por exemplos, chamar nos handlers OnInit(),
OnDeinit(), OnTimer() e assim por diante), esta funo retorna a hora da ltima cotao recebida para
qualquer ativo disponvel na janela "Observao de Mercado", a hora exibida no cabealho desta
janela. O valor da hora formado em servidor de negociao e no depende das configuraes de hora
em seu computador. Existem 2 variantes da funo.
Chamar sem parmetros
datetime TimeCurrent();

Chamar com parmetro de tipo MqlDateTime


datetime TimeCurrent(
MqlDateTime& dt_struct

// varivel de tipo estrutura

);

Parmetros
dt_struct
[out] MqlDateTime varivel de tipo estrutura.
Valor do Retorno
Valor de tipo datetime
Observao
Se uma varivel de tipo estrutura MqlDateTime for passada como parmetro, ela preenchida de
acordo.
Para obter contadores e timer de alta-resoluo, use a funo GetTickCount(), que produz valores
em milissegundos.

2000-2014, MetaQuotes Software Corp.

988

Data e Hora

TimeTradeServer
Returna a hora corrente calculada do servidor de negociao. Diferentemente de TimeCurrent(), o
clculo do valor da hora realizado no terminal cliente e depende das configuraes de hora em seu
computador. Existem 2 variantes da funo.
Chamar sem parmetros
datetime TimeTradeServer();

Chamar com parmetro de tipo MqlDateTime


datetime TimeTradeServer(
MqlDateTime& dt_struct

// Varivel de tipo estrutura

);

Parmetros
dt_struct
[out] Varivel de tipo estrutura MqlDateTime.
Valor do Retorno
Valor de tipo datetime
Observao
Se uma varivel de tipo estrutura MqlDateTime for passada como parmetro, ela preenchida de
acordo.
Para obter contadores e timer de alta-resoluo, use a funo GetTickCount(), que produz valores
em milissegundos.

2000-2014, MetaQuotes Software Corp.

989

Data e Hora

TimeLocal
Retorna a hora local de um computador, de onde o terminal cliente est executando. Existem 2
variantes da funo.
Chamar sem parmetros
datetime TimeLocal();

Chamar com parmetro de tipo MqlDateTime


datetime TimeLocal(
MqlDateTime& dt_struct

// Varivel de tipo estrutura

);

Parmetros
dt_struct
[out] Varivel de tipo estrutura MqlDateTime.
Valor do Retorno
Valor de tipo datetime
Observao
Se uma varivel de tipo estrutura MqlDateTime for passada como parmetro, ela preenchida de
acordo.
Para obter contadores e timer de alta-resoluo, use a funo GetTickCount(), que produz valores
em milissegundos.

2000-2014, MetaQuotes Software Corp.

990

Data e Hora

TimeGMT
Retorna a hora GMT, que calculada levando em considerao o ajuste ao horrio de vero pela hora
local no computador de onde o terminal cliente est executando. Existem 2 variantes da funo.
Chamar sem parmetros
datetime TimeGMT();

Chamar com parmetro de tipo MqlDateTime


datetime TimeGMT(
MqlDateTime& dt_struct

// Varivel de tipo estrutura

);

Parmetros
dt_struct
[out] Varivel de tipo estrutura MqlDateTime.
Valor do Retorno
Valor de tipo datetime
Observao
Se uma varivel de tipo estrutura MqlDateTime for passada como parmetro, ela preenchida de
acordo.
Para obter contadores e timer de alta-resoluo, use a funo GetTickCount(), que produz valores
em milissegundos.

2000-2014, MetaQuotes Software Corp.

991

Data e Hora

TimeDaylightSavings
Retorna correo para o horrio de vero em segundos, ajuste ao horrio de vero foi feito. Depende
das configuraes de hora de seu computador.
int TimeDaylightSavings();

Valor do Retorno
Se o ajuste ao horrio de inverno (padro) foi feito, retorna 0.

2000-2014, MetaQuotes Software Corp.

992

Data e Hora

TimeGMTOffset
Retorna a diferena corrente entre a hora GMT e a hora do computador local em segundos. Depende
das configuraes de hora de seu computador.
int TimeGMTOffset();

Valor do Retorno
Valor de tipo int, representando a diferena corrente entre a hora local do computador e a hora
GMT em segundos.

2000-2014, MetaQuotes Software Corp.

993

Data e Hora

TimeToStruct
Converte um valor de tipo datetime (nmero de segundos desde 01.01.1970) em uma varivel
estrutura MqlDateTime.
void TimeToStruct(
datetime

dt,

MqlDateTime& dt_struct

// data e hora
// estrutura para a captura de valores

);

Parmetros
dt
[in] Valor de data e hora para converso.
dt_struct
[out] Varivel de tipo estrutura MqlDateTime.
Valor do Retorno
Sem valor de retorno.

2000-2014, MetaQuotes Software Corp.

994

Data e Hora

StructToTime
Converte uma varivel estrutura MqlDateTime em um valor de tipo datetime e retorna o valor
resultante.
datetime StructToTime(
MqlDateTime$ dt_struct

// estrutura da data e hora

);

Parmetros
dt_struct
[in] Varivel de tipo estrutura MqlDateTime.
Valor do Retorno
Valor de tipo datetime contendo o nmero de segundos deste 01.01.1970.

2000-2014, MetaQuotes Software Corp.

995

Informaes de Conta

Informaes de Conta
Funes que retornam parmetros da conta corrente.
Funo

Ao

AccountInfoDouble

Retorna um valor de tipo double


correspondente propriedade da conta

AccountInfoInteger

Retorna um valor de tipo inteiro (bool, int ou


long) da correspondente propriedade da conta

AccountInfoString

Retorna um valor de tipo string


correspondente propriedade da conta

2000-2014, MetaQuotes Software Corp.

da

da

996

Informaes de Conta

AccountInfoDouble
Retorna o valor da correspondente propriedade da conta.
double AccountInfoDouble(
int property_id

// identificador da propriedade

);

Parmetros
property_id
[in]
Identificador da propriedade.
ENUM_ACCOUNT_INFO_DOUBLE.

valor

pode

ser

um

dos

valores

Valor do Retorno
Value of double type.
Exemplo:
void OnStart()
{
//--- exibe todas as informaes disponveis a partir da funo AccountInfoDouble()
printf("ACCOUNT_BALANCE =

%G",AccountInfoDouble(ACCOUNT_BALANCE));

printf("ACCOUNT_CREDIT =

%G",AccountInfoDouble(ACCOUNT_CREDIT));

printf("ACCOUNT_PROFIT =

%G",AccountInfoDouble(ACCOUNT_PROFIT));

printf("ACCOUNT_EQUITY =

%G",AccountInfoDouble(ACCOUNT_EQUITY));

printf("ACCOUNT_MARGIN =

%G",AccountInfoDouble(ACCOUNT_MARGIN));

printf("ACCOUNT_FREEMARGIN =

%G",AccountInfoDouble(ACCOUNT_FREEMARGIN));

printf("ACCOUNT_MARGIN_LEVEL =

%G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
}

Tambm Veja
SymbolInfoDouble, SymbolInfoString, SymbolInfoInteger, PrintFormat

2000-2014, MetaQuotes Software Corp.

de

997

Informaes de Conta

AccountInfoInteger
Retorna o valor das propriedades da conta.
long AccountInfoInteger(
int property_id

// Identificador da propriedade

);

Parmetros
property_id
[in]
Identificador da propriedade.
ENUM_ACCOUNT_INFO_INTEGER.

valor

pode

ser

um

dos

valores

de

Valor do Retorno
Value of long type.
Observao
A propriedade deve ser um dos tipos bool, int ou long.
Exemplo:
void OnStart()
{
//--- exibe todas as informaes disponveis a partir da funo AccountInfoInteger()
printf("ACCOUNT_LOGIN =

%d",AccountInfoInteger(ACCOUNT_LOGIN));

printf("ACCOUNT_LEVERAGE =

%d",AccountInfoInteger(ACCOUNT_LEVERAGE));

bool thisAccountTradeAllowed=AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);
bool EATradeAllowed=AccountInfoInteger(ACCOUNT_TRADE_EXPERT);

ENUM_ACCOUNT_TRADE_MODE tradeMode=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE

ENUM_ACCOUNT_STOPOUT_MODE stopOutMode=(ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MARG
//--- Informa sobre a possibilidade de realizar uma operao de negociao
if(thisAccountTradeAllowed)
Print("Comrcio para esta conta permitido");
else
Print("Comrcio para esta conta proibido!");
//--- Descobre se possvel negociar neste conta atravs de Expert Advisors
if(EATradeAllowed)
Print("Comrcio com Expert Advisors permitido para esta conta");
else
Print("Comrcio com Expert Advisors proibido para esta conta!");
//--- Descobre o tipo de conta
switch(tradeMode)
{
case(ACCOUNT_TRADE_MODE_DEMO):
Print("Esta uma conta demonstrao");
break;

2000-2014, MetaQuotes Software Corp.

998

Informaes de Conta
case(ACCOUNT_TRADE_MODE_CONTEST):
Print("Esta uma conta de competio");
break;
default:Print("Esta uma conta real!");
}
//--- Descobre o modo de configurao de nvel StopOut
switch(stopOutMode)
{
case(ACCOUNT_STOPOUT_MODE_PERCENT):
Print("O nvel StopOut especificado em porcentagem");
break;
default:Print("O nvel StopOut especificado monetariamente");
}
}

Tambm Veja
Informaes de Conta

2000-2014, MetaQuotes Software Corp.

999

Informaes de Conta

AccountInfoString
Retorna o valor da correspondente propriedade da conta.
string AccountInfoString(
int property_id

// Identificador da propriedade

);

Parmetros
property_id
[in]
Identificador da propriedade.
ENUM_ACCOUNT_INFO_STRING.

valor

pode

ser

um

dos

valores

Valor do Retorno
Valor de tipo string.
Exemplo:
void OnStart()
{
//--- Exibe todas as informaes disponveis a partir da funo AccountInfoString()
Print("O nome do corretor = ",AccountInfoString(ACCOUNT_COMPANY));
Print("Moeda do depsito = ",AccountInfoString(ACCOUNT_CURRENCY));
Print("Nome do cliente = ",AccountInfoString(ACCOUNT_NAME));
Print("O nome do servidor comercial = ",AccountInfoString(ACCOUNT_SERVER));
}

Tambm Veja
Informaes de Conta

2000-2014, MetaQuotes Software Corp.

de

1000

Verificando Estado

Verificao de Estado
Funes que retornam parmetros do estado corrente do terminal cliente
Funo

Ao

GetLastError

Retorna o ltimo erro

IsStopped

Retorna true, se um programa mql5 foi


ordenado a interromper sua operao

UninitializeReason

Retorna o cdigo do motivo da desinicializao

TerminalInfoInteger

Retorna um valor inteiro de uma propriedade


correspondente do ambiente de um programa
mql5

TerminalInfoString

Retorna um valor de string de uma propriedade


correspondente do ambiente de um programa
mql5

MQLInfoInteger

Retorna um valor inteiro de uma propriedade


correspondente de um programa mql5 em
execuo

MQLInfoString

Retorna um valor de string de uma propriedade


correspondente de um programa mql5 em
execuo

Symbol

Retorna o nome do ativo do grfico corrente

Period

Retorna a janela de tempo do grfico corrente

Digits

Retorna o nmero de dgitos decimais


determinando a preciso do valor do preo do
ativo do grfico corrente

Point

Retorna o tamanho do ponto do smbolo atual


na moeda de cotao.

2000-2014, MetaQuotes Software Corp.

1001

Verificando Estado

GetLastError
Retorna o contedo da varivel de sistema _LastError.
int GetLastError();

Valor de Retorno
Retorna o valor do ltimo erro que ocorreu durante a execuo de um programa mql5.
Observao
Aps a chamada da funo, o contedo de _LastError no zerado. Para zerar esta varivel, voc
precisa chamar ResetLastError().

2000-2014, MetaQuotes Software Corp.

1002

Verificando Estado

IsStopped
Verifique um desligamento forado de um programa mql5.
bool IsStopped();

Valor de Retorno
Retorna true, se a varivel de sistema _StopFlag contm um valor diferente de 0. Um valor no-zero
escrito em _StopFlag, se um programa mql5 foi ordenado a concluir sua operao. Neste caso,
voc deve imediatamente finalizar o programa, caso contrrio o programa ser concludo
foradamente do lado de fora aps 3 segundos.

2000-2014, MetaQuotes Software Corp.

1003

Verificando Estado

UninitializeReason
Retorna o cdigo do motivo para desinicializao.
int UninitializeReason();

Valor de Retorno
Retorna o valor de _UninitReason que formado antes de OnDeinit() ser chamado. O valor depende
dos motivos que levaram desinicializao.

2000-2014, MetaQuotes Software Corp.

1004

Verificando Estado

TerminalInfoInteger
Retorna o valor de uma propriedade correspondente do ambiente de um programa mql5.
int TerminalInfoInteger(
int property_id

// identificador de uma propriedade

);

Parmetros
property_id
[in] Identificador de uma propriedade. Can be one of the values of the enumeration
ENUM_TERMINAL_INFO_INTEGER.
Valor de Retorno
Valor de tipo int.

2000-2014, MetaQuotes Software Corp.

1005

Verificando Estado

TerminalInfoString
A funo retorna o valor de uma propriedade correspondente do ambiente de um programa mql5. A
propriedade deve ser do tipo string.
string TerminalInfoString(
int property_id

// identificador de uma propriedade

);

Parmetros
property_id
[in] Identificador de uma propriedade.
ENUM_TERMINAL_INFO_STRING.

Pode

ser

um

Valor de Retorno
Valor de tipo string.

2000-2014, MetaQuotes Software Corp.

dos

valores

da

enumerao

1006

Verificando Estado

MQLInfoInteger
Retorna o valor de uma propriedade correspondente de um programa mql5 em execuo.
int MQLInfoInteger(
int property_id

// identificador de uma propriedade

);

Parmetros
property_id
[in] Identificador de uma propriedade. Can be one of values of the ENUM_MQL_INFO_INTEGER
enumeration.
Valor de Retorno
Valor de tipo int.

2000-2014, MetaQuotes Software Corp.

1007

Verificando Estado

MQLInfoString
Retorna o valor de uma propriedade correspondente de um programa mql5 em execuo.
string MQLInfoString(
int property_id

// Identificador de uma propriedade

);

Parmetros
property_id
[in] Identificador de uma
ENUM_MQL_INFO_STRING.

propriedade.

Pode

ser

um

Valor de Retorno
Valor de tipo string.

2000-2014, MetaQuotes Software Corp.

dos

valores

da

enumerao

1008

Verificando Estado

Symbol
Retorna o nome do ativo do grfico corrente.
string Symbol();

Valor de Retorno
Valor da varivel de sistema _Symbol, que armazena o nome do ativo do grfico corrente.

2000-2014, MetaQuotes Software Corp.

1009

Verificando Estado

Period
Retorna a janela de tempo do grfico corrente.
ENUM_TIMEFRAMES Period();

Valor de Retorno
O contedo da varivel _Period que representa o valor da janela de tempo do grfico corrente. O
valor pode ser um dos valores da enumerao ENUM_TIMEFRAMES.
Veja tambm
PeriodSeconds, Janelas de tempo de grficos, Data e Hora, Visibilidade de objetos

2000-2014, MetaQuotes Software Corp.

1010

Verificando Estado

Digits
Retorna o nmero de dgitos decimais determinando a preciso do preo do ativo do grfico corrente.
int Digits();

Valor de Retorno
O valor da varivel _Digits que armazena o nmero de dgitos decimais determina a preciso do
preo do ativo do grfico corrente.

2000-2014, MetaQuotes Software Corp.

1011

Verificando Estado

Point
Retorna o tamanho do ponto do ativo corrente na moeda de cotao.
double Point();

Valor de Retorno
O valor da varivel _Point que armazena o tamanho do ponto do ativo corrente na moeda de
cotao.

2000-2014, MetaQuotes Software Corp.

1012

Informaes de Mercado

Obtendo Informaes de Mercado


Estas so funes destinadas a receber informaes sobre o estado do mercado.
Funo

Ao

SymbolsTotal

Retorna o nmero de ativos disponveis


(selecionados na janela Observao de Mercado
ou todos)

SymbolName

Retorna o nome de um ativo especificado

SymbolSelect

Seleciona um ativo na janela Observao de


Mercado ou remove um ativo desta janela

SymbolIsSynchronized

Verifica se dados de um ativo selecionado no


terminal esto sincronizados com dados no
servidor de negociaes

SymbolInfoDouble

Retorna um valor double de um ativo para a


propriedade correspondente

SymbolInfoInteger

Retorna um valor de tipo inteiro (long,


datetime, int ou bool) de um ativo especificado
para a propriedade correspondente

SymbolInfoString

Retorna um valor do tipo string de um ativo


especificado para a propriedade correspondente

SymbolInfoTick

Retorna os preos correntes para um ativo


especificado em uma varivel do tipo MqlTick

SymbolInfoSessionQuote

Permite obter a hora de incio e fim das


sesses de cotao especificadas para um ativo
especificado e dia da semana.

SymbolInfoSessionTrade

Permite obter a hora de incio e fim das


sesses de negociao especificadas para um
ativo especificado e dia da semana.

MarketBookAdd

Fornece abertura da Profundidade de Mercado


para um ativo selecionado, e subscrever para
receber notificaes de alteraes do DOM
(Depth of Market)

MarketBookRelease

Fornece fechamento da Profundidade de


Mercado para um ativo selecionado, e cancelar
a subscrio para receber notificaes de
alteraes do DOM

MarketBookGet

Retorna um array de estrutura MqlBookInfo


contendo registros da Profundidade de Mercado
de uma ativo especificado

2000-2014, MetaQuotes Software Corp.

1013

Informaes de Mercado

SymbolsTotal
Retorna o nmero de ativos disponveis (selecionados na janela Observao do Mercado ou todos os
ativos).
int SymbolsTotal(
bool selected

// True - somente ativos em Observador de Mercado

);

Parmetros
selected
[in] Mode de solicitao. Pode ser true ou false.
Valor do Retorno
Se o parmetro 'selected' for true, a funo retorna o nmero de ativos selecionados na janela
Observador de Mercado. Se o valor for false, ela retorna o nmero total de todos os ativos.

2000-2014, MetaQuotes Software Corp.

1014

Informaes de Mercado

SymbolName
Retorna o nome de um ativo.
string SymbolName(
int

pos,

bool selected

// nmero na lista
// true - somente ativos em Observador de Mercado

);

Parmetros
pos
[in] Nmero de ordem de um ativo.
selected
[in] Mode de solicitao. Se o valor for true, o ativo tomado da lista de ativos selecionados na
janela Observador de Mercado. Se o valor for false, o ativo tomado da lista geral.
Valor do Retorno
Valor de tipo string com o nome do ativo.

2000-2014, MetaQuotes Software Corp.

1015

Informaes de Mercado

SymbolSelect
Seleciona um ativo da janela Observador de Mercado ou remove um ativo desta janela.
bool SymbolSelect(
string name,

// nome do ativo

bool

// adicionar ou remover

select

);

Parmetros
name
[in] Nome do ativo.
select
[in] Alterna. Se o valor for false, o ativo deve ser removido do Observador de Mercado, caso
contrrio o ativo deve ser selecionado nesta janela. Um ativo no pode ser removido se o grfico
do ativo estiver aberto, ou houver posies em aberto deste ativo.
Valor do Retorno
Em caso de falha retorna false.

2000-2014, MetaQuotes Software Corp.

1016

Informaes de Mercado

SymbolIsSynchronized
A funo verifica se os dados de um ativo selecionado no terminal esto sincronizados com os dados
no servidor de negociao.
bool SymbolIsSynchronized(
string name,

// nome do ativo

);

Parmetros
name
[in] Nome do ativo.
Valor de retorno
Se os dados estiverem sincronizados, retorna 'true'; caso contrrio, retorna 'false'.
Tambm Veja
SymbolInfoInteger, Organizando Acesso a Dados

2000-2014, MetaQuotes Software Corp.

1017

Informaes de Mercado

SymbolInfoDouble
Retorna a propriedade correspondente de um ativo especificado. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double SymbolInfoDouble(
string

name,

ENUM_SYMBOL_INFO_DOUBLE prop_id

// ativo
// identificador da propriedade

);

2. Retorna true ou false dependendo se a funo for executada com sucesso. Em caso de sucesso, o
valor da propriedade colocado em uma varivel recipiente, passada por refernce atrves do ltimo
parmetro.
bool SymbolInfoDouble(
string

name,

// ativo

ENUM_SYMBOL_INFO_DOUBLE

prop_id,

// identificador da propriedade

double&

double_var // aqui ns assumimos o valor da propriedade

);

Parmetros
name
[in] Nome do ativo.
prop_id
[in] Identificador de um propriedade de ativo. O valor pode ser um dos valores da enumerao
ENUM_SYMBOL_INFO_DOUBLE.
double_var
[out] Varivel de tipo double recebendo o valor da propriedade solicitada.
Valor do Retorno
Valor de tipo double. Em caso de falha de execuo, a informao sobre o erro pode ser obtida
usando a funo GetLastError():
5040 parmetro de string invlido para especificar um nome de ativo,
4301 ativo desconhecido (instrumento financeiro),
4302 ativo no est selecionado no "Observador de Mercado" (no encontrado na lista de ativos
disponveis),
4303 identificador invlido de uma propriedade de ativo.
Observao
recomendvel usar SymbolInfoTick() se a funo for usada para obter informaes sobre o ltimo
tick. bom possvel que nenhuma cotao tenha aparecido ainda desde que o terminal se conectou
a uma conta de negociao. Em tal situao, o valor solicitado ser indefinido
Na maioria dos casos, suficiente usar a funo SymbolInfoTick() permitindo a um usurio receber
os valores dos preos Compra, Venda, ltimo, Volume e a hora da chegada do ltimo tick atravs de
uma nica chamada.

2000-2014, MetaQuotes Software Corp.

1018

Informaes de Mercado
Exemplo:
void OnTick()
{
//--- obtm spread a partir das propriedade do ativo
bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);
string comm=StringFormat("Spread %s = %I64d pontos\r\n",
spreadfloat?"flutuante":"fixo",
SymbolInfoInteger(Symbol(),SYMBOL_SPREAD));
//--- agora vamos calcular ns mesmos o spread
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double spread=ask-bid;
int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT));
comm=comm+"Spread calculada = "+(string)spread_points+" pontos";
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1019

Informaes de Mercado

SymbolInfoInteger
Retorna a propriedade correspondente de um ativo especificado. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
long SymbolInfoInteger(
string

name,

// ativo

ENUM_SYMBOL_INFO_INTEGER

prop_id

// identificador da propriedade

);

2. Retorna true ou false dependendo se a funo for executada com sucesso. Em caso de sucesso, o
valor da propriedade colocado em uma varivel recipiente, passada por refernce atrves do ltimo
parmetro.
bool SymbolInfoInteger(
string

name,

// ativo

ENUM_SYMBOL_INFO_INTEGER

prop_id,

// identificador da propriedade

long&

long_var

// aqui ns assumimos o valor da propriedade

);

Parmetros
name
[in] Nome do ativo.
prop_id
[in] Identificador de um propriedade de ativo. O valor pode ser um dos valores da enumerao
ENUM_SYMBOL_INFO_INTEGER.
long_var
[out] Varivel de tipo long rececendo o valor da propriedade solicitada.
Valor do Retorno
Valor de tipo long. Em caso de falha de execuo, a informao sobre o erro pode ser obtida usando
a funo GetLastError():
5040 parmetro de string invlido para especificar um nome de ativo,
4301 ativo desconhecido (instrumento financeiro),
4302 ativo no est selecionado no "Observador de Mercado" (no encontrado na lista de ativos
disponveis),
4303 identificador invlido de uma propriedade de ativo.
Observao
recomendvel usar SymbolInfoTick() se a funo for usada para obter informaes sobre o ltimo
tick. bom possvel que nenhuma cotao tenha aparecido ainda desde que o terminal se conectou
a uma conta de negociao. Em tal situao, o valor solicitado ser indefinido
Na maioria dos casos, suficiente usar a funo SymbolInfoTick() permitindo a um usurio receber
os valores dos preos Compra, Venda, ltimo, Volume e a hora da chegada do ltimo tick atravs de
uma nica chamada.

2000-2014, MetaQuotes Software Corp.

1020

Informaes de Mercado
Exemplo:
void OnTick()
{
//--- obtm spread a partir das propriedade do ativo
bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);
string comm=StringFormat("Spread %s = %I64d pontos\r\n",
spreadfloat?"flutuante":"fixo",
SymbolInfoInteger(Symbol(),SYMBOL_SPREAD));
//--- agora vamos calcular ns mesmos o spread
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double spread=ask-bid;
int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT));
comm=comm+"Spread calculada = "+(string)spread_points+" pontos";
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1021

Informaes de Mercado

SymbolInfoString
Retorna a propriedade correspondente de um ativo especificado. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string SymbolInfoString(
string

name,

ENUM_SYMBOL_INFO_STRING prop_id

// Ativo
// Identificador de propriedade

);

2. Retorna true ou false, dependendo do sucesso na execuo da funo. Se for bem sucedido, o valor
da propriedade colocada em uma varivel de recbimento passada por referncia no ltimo
parmetro.
bool SymbolInfoString(
string

name,

// Ativo

ENUM_SYMBOL_INFO_STRING

prop_id,

// Identificador de propriedade

string&

string_var

// Aqui ns assumimos o valor da propriedade

);

Parmetros
name
[in] Nome do ativo.
prop_id
[in] Identificador de um propriedade de ativo. O valor pode ser um dos valores da enumerao
ENUM_SYMBOL_INFO_STRING.
string_var
[out] Varivel de tipo string recebendo o valor da propriedade solicitada.
Valor do Retorno
Valor de tipo string. Em caso de falha de execuo, a informao sobre o erro pode ser obtida
usando a funo GetLastError():
5040 parmetro de string invlido para especificar um nome de ativo,
4301 ativo desconhecido (instrumento financeiro),
4302 ativo no est selecionado no "Observador de Mercado" (no encontrado na lista de ativos
disponveis),
4303 identificador invlido de uma propriedade de ativo.
Observao
recomendvel usar SymbolInfoTick() se a funo for usada para obter informaes sobre o ltimo
tick. bom possvel que nenhuma cotao tenha aparecido ainda desde que o terminal se conectou
a uma conta de negociao. Em tal situao, o valor solicitado ser indefinido
Na maioria dos casos, suficiente usar a funo SymbolInfoTick() permitindo a um usurio receber
os valores dos preos Compra, Venda, ltimo, Volume e a hora da chegada do ltimo tick atravs de
uma nica chamada.

2000-2014, MetaQuotes Software Corp.

1022

Informaes de Mercado

SymbolInfoTick
A funo retorna preos correntes de um ativo especificado em uma varivel de tipo MqlTick.
bool SymbolInfoTick(
string

symbol,

MqlTick& tick

// nome do ativo
// referencia a uma estrutura

);

Parmetros
symbol
[in] Nome do ativo.
tick
[out] Estrutura do tipo MqlTick, na qual os preos correntes e a hora da atualizao do ltimo
preo ser colocada.
Valor do Retorno
A funo retorna true se bem sucedida, caso contrrio retorna false.

2000-2014, MetaQuotes Software Corp.

1023

Informaes de Mercado

SymbolInfoSessionQuote
Permite obter a hora de incio e fim das sesses de cotao especificadas para um ativo especificado
e dia da semana.
bool SymbolInfoSessionQuote(
string

name,

// nome do ativo

ENUM_DAY_OF_WEEK day_of_week,

// dia da semana

uint

session_index,

// ndice da sesso

datetime&

from,

// hora de incio da sesso

datetime&

to

// hora de trmino da sesso

);

Parmetros
name
[in] Nome do ativo.
ENUM_DAY_OF_WEEK
[in] Dia da semana, um valor da enumerao ENUM_DAY_OF_WEEK.
uint
[in] Nmero ordinal de uma sesso, cujo hora de comeo e trmino ns queremos receber. A
indexao de sesses comea com 0.
from
[out] Hora de incio da sesso em segundos a partir de 00 horas 00 minutos, no valor de retorna a
data deve ser ignorada.
to
[out] Hora de trmino da sesso em segundos a partir de 00 horas e 00 minutos, no valor
retornado a data deve ser ignorada.
Valor do Retorno
Se os dados para a sesso, ativo e dia da semana especificados forem recebidos, retorna true, caso
contrrio retorna false.
Tambm Veja
Propriedade de Ativo, TimeToStruct, Estrutura de Dados

2000-2014, MetaQuotes Software Corp.

1024

Informaes de Mercado

SymbolInfoSessionTrade
Permite obter a hora de incio e fim das sesses de negociao especificadas para um ativo
especificado e dia da semana.
bool SymbolInfoSessionTrade(
string

name,

// nome do ativo

ENUM_DAY_OF_WEEK day_of_week,

// dia da semana

uint

session_index,

// ndice da sesso

datetime&

from,

// hora de incio da sesso

datetime&

to

// hora de trmino da sesso

);

Parmetros
name
[in] Nome do ativo.
ENUM_DAY_OF_WEEK
[in] Dia da semana, um valor da enumerao ENUM_DAY_OF_WEEK.
uint
[in] Nmero ordinal de uma sesso, cujo hora de comeo e trmino ns queremos receber. A
indexao de sesses comea com 0.
from
[out] Hora de incio da sesso em segundos a partir de 00 horas 00 minutos, no valor de retorna a
data deve ser ignorada.
to
[out] Hora de trmino da sesso em segundos a partir de 00 horas e 00 minutos, no valor
retornado a data deve ser ignorada.
Valor de retorno
Se os dados para a sesso, ativo e dia da semana especificados forem recebidos, retorna true, caso
contrrio retorna false.
Tambm Veja
Propriedade de Ativo, TimeToStruct, Estrutura de Dados

2000-2014, MetaQuotes Software Corp.

1025

Informaes de Mercado

MarketBookAdd
Fornece a abertura da Profundidade de Mercado (DOM) para um ativo selecionado, e subscreve para
receber notificados de alteraes na DOM (Depth of Market).
bool MarketBookAdd(
string symbol

// ativo

);

Parmetros
symbol
[in] O nome de um ativo, cuja Profundidade de Mercado para ser usada no Expert Advisor ou
script.
Valor do Retorno
O valor true se aberto com sucesso, caso contrrio false.
Observao
Normalmente, esta funo deve ser chamada a partir da funo OnInit() ou no construtor da classe.
Para manipular a chegada de alertas, o programa Expert Advisor deve conter a funo void
OnBookEvent(string& symbol).
Tambm Veja
Estrutura da Profuno de Mercado, Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

1026

Informaes de Mercado

MarketBookRelease
Fornece o fechamento da Profundidade de Mercado (DOM) para um ativo selecionado, e cancela a
subscrio para receber notificaes de alterao na DOM (Depth of Market).
bool MarketBookRelease(
string symbol

// ativo

);

Parmetros
symbol
[in] Nome do ativo.
Valor do Retorno
O valor true se a fechamento foi bem sucedido, caso contrrio false.
Observao
Normalmente, esta funo deve ser chamada da funo OnDeinit(), se a correspondente funo
MarketBookAdd() foi chamada na funo OnInit(). Ou ela deve ser chamada a partir do destrutor da
classe, se a correspondente funo MarketBookAdd() foi chamada a partir do construtor da classe.
Tambm Veja
Estrutura da Profundidade de Mercado, Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

1027

Informaes de Mercado

MarketBookGet
Retorna um array de estruturas MqlBookInfo contendo registros da Profundidade de Mercado de um
ativo especificado.
bool MarketBookGet(
string

symbol,

// ativo

MqlBookInfo& book[]

// referncia para um array

);

Parmetros
symbol
[in] Nome do ativo.
book[]
[in] Referncia para um array de registros de Profundidade de Mercado. O array pode ser pralocado para um nmero suficiente de registros. Se um array dinmico no tiver sido pr-alocado
na memria operacional, o terminal cliente alocar ele mesmo o array.
Valor do Retorno
Retorna true em caso de sucesso, caso contrrio false.
Observao
A Profundidade de Mercado deve ser pre-aberta pela funo MarketBookAdd().
Exemplo:
MqlBookInfo priceArray[];
bool getBook=MarketBookGet(NULL,priceArray);
if(getBook)
{
int size=ArraySize(priceArray);
Print("MarketBookInfo para ",Symbol());
for(int i=0;i<size;i++)
{
Print(i+":",priceArray[i].price
+"

Volume = "+priceArray[i].volume,

" tipo = ",priceArray[i].type);


}
}
else
{
Print("Could not get contents of the symbol DOM ",Symbol());
}

Tambm Veja
Estrutura da Profundidade de Mercado, Estruturas e Classes

2000-2014, MetaQuotes Software Corp.

1028

Sries Temporais e Acesso a Indicadores

Acesso a sries de tempo e indicadores


Estas so funes para trabalhar com sries de tempo e indicadores. Uma srie de tempo difere de um
array de dados usual pela sua ordenao reversa - elementos de sries de tempo so indexados do
final de um array para seu incio (a partir do mais recente para o mais antigo). Para copiar valores de
sries de tempo e dados de indicadores, recomendvel usar somente arrays dinmicos, porque as
funes de cpia esto projetadas para alocar o tamanho necessrio dos arrays que recebem valores.
Existe uma importante exceo a esta regra: se valores de sries de tempo e indicadores precisam
ser copiados com freqncia, por exemplo, a cada chamada de OnTick() em Expert Advisors ou a cada
chamada de OnCalculate() em indicadores, neste caso seria melhor usar arrays alocados
estaticamente, porque operaes de alocao de memria para arrays dinmicos requerem um
tempo adicional, e isso ter efeitos durante os processos de teste e otimizao.
Ao usar funes de acesso a valores de sries de tempo e indicadores, a direo de indexao deve
ser leva em considerao. Isso descrito na seo Direo de indexao em arrays e sries de tempo.
O acesso a dados de indicadores e sries de tempo implementado independentemente do fato dos
dados solicitados estarem prontos ou no (o chamado acesso assncrono). Isso extremamente
importante para os clculos de um indicador customizado, porque se no houver dados, as funes de
tipo Copy...() retornam imediatamente um erro. Contudo, ao acessar dados a partir de Expert
Advisors e scripts, as vrias tentativas para receber dados so feitos com uma pausa pequena, cujo
objetivo fornecer algum tempo necessrio para baixar a srie de tempo requerida para calcular
valores de um indicador.
A seo Organizando Acesso a Dados descreve detalhes de recebimento, armazenamento e solicitao
de dados de preo no terminal cliente MetaTrader 5.

historicamente aceito que um acesso a dados de preo em um array realizado a partir do final dos

2000-2014, MetaQuotes Software Corp.

1029

Sries Temporais e Acesso a Indicadores


dados. Fisicamente, os novos dados so sempre escritos no final do array, mas o ndice do array
sempre igual a zero. O ndice 0 no array de srie de tempo denota dados da barra corrente, isto , a
barra que correspondente ao intervalo de tempo no terminado nesta janela de tempo.
Uma janela de tempo o perodo de tempo, durante o qual uma nica barra de preo formada.
Existem 21 janelas de tempo padro predefinidas.
Funo

Ao

SeriesInfoInteger

Retorna informao sobre o estado dos dados


histricos

Bars

Retorna o nmero de barras do histrico para


um ativo e perodo especificados

BarsCalculated

Retorna o nmero de dados calculados em um


buffer de indicador ou -1 em caso de erro (os
dados no foram calculados ainda)

IndicatorCreate

Retorna o handle para o indicador tcnico


especificado criado por um array de parmetros
de tipo MqlParam

IndicatorParameters

Baseado no handle especificado, retorna o


nmero de parmetros de entrada do indicador,
bem como os valores e tipos dos parmetros

IndicatorRelease

Remove um handle de indicador e libera o bloco


de clculo do indicador, se ele no for usado por
ningum mais

CopyBuffer

Copia dados de um buffer especificado de um


indicador especificado em um array

CopyRates

Obtm dados histricos da estrutura Rates para


um ativo e perodo especificados em um array

CopyTime

Obtm dados histricos sobre hora de abertura


de barras para um ativo e perodo especificados
em um array

CopyOpen

Obtm dados histricos sobre preo de abertura


de barras para um ativo e perodo especificados
em um array

CopyHigh

Obtm histrico de dados sobre preo de barra


mximo para um ativo e perodo especificados
em um array

CopyLow

Obtm histrico de dados sobre preo de barra


minimo para um ativo e perodo especificados
em um array

CopyClose

Obtm histrico de dados sobre preo de


fechamento de barra para um ativo e perodo
especificados em um array

2000-2014, MetaQuotes Software Corp.

1030

Sries Temporais e Acesso a Indicadores

CopyTickVolume

Obtm histrico de dados sobre volumes de tick


para um ativo e perodo especificados em um
array

CopyRealVolume

Obtm dados histricos sobre volumes de


negociao para um ativo e perodo
especificados em um array

CopySpread

Obtm histrico de dados sobre spreads para


um ativo e perodo especificados em um array

Apesar do fato de que pelo uso da funo ArraySetAsSeries() possvel definir em arrays acesso aos
elementos como em sries de tempo, deve ser lembrado que os elementos de arrays so fisicamente
armazenados na mesma e nica ordem - somente a direo de indexao muda. Para demonstrar este
fato, vamos apresentar um exemplo:
datetime TimeAsSeries[];
//--- define acesso ao array como uma srie de tempo
ArraySetAsSeries(TimeAsSeries,true);
ResetLastError();
int copied=CopyTime(NULL,0,0,10,TimeAsSeries);
if(copied<=0)
{
Print("The copy operation of the open time values for last 10 bars has failed");
return;
}
Print("TimeCurrent =",TimeCurrent());
Print("ArraySize(Time) =",ArraySize(TimeAsSeries));
int size=ArraySize(TimeAsSeries);
for(int i=0;i<size;i++)
{
Print("TimeAsSeries["+i+"] =",TimeAsSeries[i]);
}
datetime ArrayNotSeries[];
ArraySetAsSeries(ArrayNotSeries,false);
ResetLastError();
copied=CopyTime(NULL,0,0,10,ArrayNotSeries);
if(copied<=0)
{
Print("The copy operation of the open time values for last 10 bars has failed");
return;
}
size=ArraySize(ArrayNotSeries);
for(int i=size-1;i>=0;i--)
{
Print("ArrayNotSeries["+i+"] =",ArrayNotSeries[i]);
}

2000-2014, MetaQuotes Software Corp.

1031

Sries Temporais e Acesso a Indicadores


Como resultado ns conseguimos a seguinte sada:
TimeCurrent = 2009.06.11 14:16:23
ArraySize(Time) = 10
TimeAsSeries[0] = 2009.06.11 14:00:00
TimeAsSeries[1] = 2009.06.11 13:00:00
TimeAsSeries[2] = 2009.06.11 12:00:00
TimeAsSeries[3] = 2009.06.11 11:00:00
TimeAsSeries[4] = 2009.06.11 10:00:00
TimeAsSeries[5] = 2009.06.11 09:00:00
TimeAsSeries[6] = 2009.06.11 08:00:00
TimeAsSeries[7] = 2009.06.11 07:00:00
TimeAsSeries[8] = 2009.06.11 06:00:00
TimeAsSeries[9] = 2009.06.11 05:00:00
ArrayNotSeries[9] = 2009.06.11 14:00:00
ArrayNotSeries[8] = 2009.06.11 13:00:00
ArrayNotSeries[7] = 2009.06.11 12:00:00
ArrayNotSeries[6] = 2009.06.11 11:00:00
ArrayNotSeries[5] = 2009.06.11 10:00:00
ArrayNotSeries[4] = 2009.06.11 09:00:00
ArrayNotSeries[3] = 2009.06.11 08:00:00
ArrayNotSeries[2] = 2009.06.11 07:00:00
ArrayNotSeries[1] = 2009.06.11 06:00:00
ArrayNotSeries[0] = 2009.06.11 05:00:00

Como vemos a partir da sada, a medida que o ndice do array TimeAsSeries aumenta, o valor da hora
do ndice diminui, isto , ns nos movemos do presente para o passado. Para o array comum
ArrayNotSeries o resultado diferente - a medida que o ndice cresce, ns nos movemos do passado
para o presente.
Veja tambm
ArrayIsDynamic, ArrayGetAsSeries, ArraySetAsSeries, ArrayIsSeries

2000-2014, MetaQuotes Software Corp.

1032

Sries Temporais e Acesso a Indicadores

Direo de Indexao em Arrays, Buffers e Sries Temporais


A indexao padro de todos os arrays e buffers de indicador da esquerda para direita. O ndice do
primeiro elemento sempre igual a zero. Assim, o primeiro elemento de um array ou buffer de
indicador com ndice 0 est por padro na posio mais a esquerda, enquanto o ltimo elemento est
na posio mais a direita.
Um buffer de indicador um array dinmico de tipo double, cujo tamanho gerenciado pelos
terminais clientes, de modo que ele sempre corresponde ao nmero de barras do indicador sobre o
qual est calculando. Um array dinmico usual de tipo double atribudo como um buffer de indicador
usando a funo SetIndexBuffer(). Buffers de indicador no requerem que seus tamanhos sejam
definidos usando a funo ArrayResize() - isso ser feito pelo sistema de execuo do terminal.
Sries de tempo so array com indexao reversa, isto , o primeiro elemento de uma srie de tempo
est na posio mais a direita, e o ltimo elemento est na posio mais a esquerda. Em uma srie de
tempo sendo usada para armazenar dados de preos histricos e que contm informaes de hora, os
dados mais recentes so colocados na posio mais a direita da srie de tempo, enquanto que os
dados mais antigos na posio mais a esquerda.
Assim o elemento da srie de tempo com ndice 0 contm a informao sobre a ltima cotao de um
ativo. Se uma srie de tempo contm dados sobre uma janela de tempo diria, os dados correntes do
dia ainda no terminado ficam localizados na posio zero, e na posio com ndice 1 contm os dados
de ontem.

Alterando a Direo de Indexao


A funo ArraySetAsSeries() permite alterar o mtodo de acessar elementos de um array dinmico; no
entanto, a ordem fsica de armazenamento de dados na memria do computador no alterada. Esta
funo simplesmente altera o mtodo de enderear elementos de um array, assim quando copiar um
array em um outro usando a funo ArrayCopy(), o contedo do array recipiente no depender da
direo de indexao no array fonte.
A direo de indexao no pode ser alterada para arrays alocados estaticamente. Mesmo se um array
for passado como um parmetro para uma funo, tentar alterar a direo de indexao dentro desta
funo no produzir nenhum efeito.
Para buffers de indicador, assim como para arrays comuns, a direo de indexao pode ser definida
no sentido contrrio (como em sries de tempo), isto , uma referncia posio zero no buffer de
indicador retornar o ltimo valor no correspondente buffer de indicador e isso no corresponder ao
valor do indicador na barra mais recente. Contudo, a localizao fsica das barras do indicador no
ser alterada.

Recebendo Dados de Preo em Indicadores


Cada indicador customizado deve necessariamente conter a funo OnCalculate(), cujos dados de
preo requeridos para calcular valores em buffers de indicadores so passados. A direo de indexao
nestes arrays passados pode ser descoberta usando a funo ArrayGetAsSeries().
Arrays passados para a funo refletem dados de preo, isto , estes arrays tm o sinal de uma srie
de preo e a funo ArrayIsSeries() retornar true ao verificar estes arrays. Contudo, de qualquer
forma a direo de indexao deve ser verificada somente pela funo ArrayGetAsSeries().

2000-2014, MetaQuotes Software Corp.

1033

Sries Temporais e Acesso a Indicadores


A fim de no ficar dependente de valores default, a funo ArraySetAsSeries() deve ser
incondicionalmente chamada para os arrays com os quais voc vai trabalhar, e definir a direo
requerida.

Recebendo Dados de Preo e Valores de Indicador


A direo de indexao padro de todos os arrays em Expert Advisores, indicadores e scripts da
esquerda para direita. Se necessrio, em qualquer programa mql5 voc pode solicitar valores de sries
de tempo de qualquer ativo e janela de tempo, bem como valores de indicadores calculados sobre
qualquer ativo e janela de tempo.
Use as funes Copy...() para este propsito:
CopyBuffer copiar valores de um buffer de indicador para um array de tipo double;
CopyRates copiar histrico de preos para um array de estruturas MqlRates;
CopyTime copiar valores de Hora para um array de tipo datetime;
CopyOpen copiar valores de Abertura para um array de tipo double;
CopyHigh copiar valores de Mximo para um array de tipo double;
CopyLow copiar valores de Mnimo para um array de tipo double;
CopyClose copiar valores de Fechamento para um array de tipo double;
CopyTickVolume copiar volumes de tick para um array de tipo long;
CopyRealVolume copiar volumes de capital (equity) para um array de tipo long;
CopySpread copiar o histrico de spreads para um array de tipo int;

Todas estas funes trabalham de forma similar. Vamos considerar o mecanismo de obteno de
dados no exemplo de CopyBuffer(). implcito que a direo de indexao dos dados requeridos de
srie de tempo, e a posio com ndice 0 (zero) armazena dados da barra corrente ainda incompleta. A
fim de obter acesso a estes dados ns precisamos copiar o volume necessrio de dados em um array
recipiente, por exemplo, em um array de buffer.

Para copiar ns precisamos especificar a posio de incio no array fonte, incio a partir do qual dados
sero copiados para o array recipiente. Em caso de sucesso, o nmero especificado de elementos
sero copiados para o array recipiente do array fonte (do buffer de indicador neste caso).
Independentemente do valor de indexao definido no array recipiente, a cpia sempre realizada
como exibida na figura abaixo.
Se esperado que um grande nmero de iteraes seja tratado por um loop, recomendvel que se

2000-2014, MetaQuotes Software Corp.

1034

Sries Temporais e Acesso a Indicadores


verifique a ocorrncia de uma finalizao de programa forada usando a funo IsStopped().
int copied=CopyBuffer(ma_handle,// manipulador do indicador
0,

// O ndice do buffer do indicador

0,

// Posio incio para copiar

number,

// Nmero de valores para copiar

Buffer

// O array que recebe os valores

);
if(copied<0) return;
int k=0;
while(k<copied && !IsStopped())
{
//--- Obtm o valor para o ndice k
double value=Buffer[k];
// ...
// trabalha com o valor
k++;
}

Exemplo:
input int per=10; // perodo do expoente
int ma_handle;

// manipulador do indicador

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--ma_handle=iMA(_Symbol,0,per,0,MODE_EMA,PRICE_CLOSE);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--double ema[10];
int copied=CopyBuffer(ma_handle,// manipulador do indicador
0,

// ndice do buffer do indicador

0,

// posio de nicio da cpia

10,

// nmero de valores para copiar

ema

// array que recebe os valores

);
if(copied<0) return;
// .... outro cdigo
}

2000-2014, MetaQuotes Software Corp.

1035

Sries Temporais e Acesso a Indicadores

Tambm Veja
Organizando Acesso aos Dados

2000-2014, MetaQuotes Software Corp.

1036

Sries Temporais e Acesso a Indicadores

Organizando Acesso aos Dados


Nesta seo, questes associados a obteno, armazenamento e solicitao de dados de preos (sries
de tempo) so consideradas.

Recebendo Dados de um Servidor de Negociao


Antes de dados de preos ficarem disponveis no terminal MetraTrader 5, eles devem ser recebidos e
processados. Para receber dados, uma conexo com o servidor de negociao MetaTrader 5 deve ser
estabelecida. Dados so recebidos na forma de blocos empacotados de barras de um minuto do
servidor sob a solicitao de um terminal.
O mecanismo de referncia de servidor para solicitar dados no depende de como a solicitao foi
iniciada - por um usurio ao navegar em um grfico ou por meio de um programa na linguagem MQL5.

Armazenando Dados Intermedirios


Dados recebidos de um servidor so automaticamente desempacotados e salvos no formato
intermedirio HCC. Os dados de cada ativo so escritos em uma pasta separada: terminal_directory
\bases\server_name\history\symbol_name. Por exemplo, dados sobre EURUSD recebidos do servidor
MetaQuotes-Demo sero armazenados em terminal_directory\bases\MetaQuotes-Demo\history
\EURUSD\.
Os dados so escritos em arquivos com extenso .hcc. Cada arquivo armazena dados de barras de um
minuto para um ano. Por exemplo, o arquivo nomeado 2009.hcc na pasta EURUSD contm barras de
um minuto de EURUSD para o ano de 2009. Estes arquivos so usados para preparar dados de preo
para todas as janelas de tempo e no so destinados para acesso direto.

Obtendo Dados em uma Janela de Tempo Necessria a partir dos Dados


Intermedirios
Os arquivo HCC intermedirios so usados como fonte de dados para construir dados de preo para
janelas de tempo solicitadas no formato HC. Dados de formato HC so sries de tempo que so
maximamente preparados para acesso rpido. Eles so criados sob solicitao de um grfico ou um
programa MQL5. O volume de dados no deve exceder o valor do parmetro "Mx. barras no grfico".
Os dados so armazenados para posterior uso em arquivos com extenso hc.
Para economizar recursos, os dados em uma janela de tempo so armazenados e guardamos em RAM
somente se necessrio. Se no for chamado por um longo tempo, eles so liberados da RAM e salvos
em um arquivo. Para cada janela de tempo, os dados so preparados independentemente se existem
dados prontos ou no para outras janelas de tempo. Regras para formao e acesso aos dados so as
mesmas para todas as janelas de tempo. Isso significa que apesar da unidade de dados armazenada
em HCC ser de um minuto, a disponibilidade de dados HCC no significa a disponibilidade de dados na
janela de tempo M1 como HC no mesmo volume.
O recebimento de novos dados de um servidor chama automaticamente a atualizao de dados de
preo usados em formato HC de todas as janelas de tempo. Isso tambm leva ao reclculo de todos os
indicadores que implicitamente usam estes dados como dados de entrada para clculos.

Parmetro "Mx. barras no grfico"

2000-2014, MetaQuotes Software Corp.

1037

Sries Temporais e Acesso a Indicadores


O parmetro "Mx bars no grfico" restringe o nmero de barras em formato HC disponvel para
grficos, indicadores e programas mql5. Isso vlido para todas as janelas de tempo disponveis e
serve, primeiramente, para economizar recursos do computador.
Ao definir um grande valor para este parmetro, deve ser lembrado que se dados de preo de histrico
longo para pequenas janelas de tempo estiverem disponveis, a memria usada para armazenadas a
srie de preos e buffers de indicadores podem se tornar centenas de megabytes e alcanar a restrio
de RAM do programa terminal cliente (2Gb para aplicativos 32-bit do MS Windows).
A alterao do parmetro "Mx. barras no grfico" produz efeito aps o terminal cliente ser reiniciado.
A alterao deste parmetro no causa referncia automtica a um servidor por dados adicionais, e
nem formao de barras adicionais de sries de tempo. Dados de preo adicionais so solicitados ao
servidor, e sries de preo so atualizadas levando em conta a nova limitao, em caso de rolagem de
um grfico para uma rea sem dados, ou quando dados so solicitado por um programas MQL5 .
O volume de dados solicitados ao servidor corresponde ao nmero solicitado de barras de uma da
janela de tempo com o parmetro "Max. barras em grfico" levado em considerao. A restrio
definida por este parmetro no absoluta, e em alguns casos o nmero de barras disponveis para
uma janela de tempo pode ser um pouco maior que o valor corrente do parmetro.

Disponibilidade de Dados
A presena de dados no formato HCC ou mesmo no formato preparado HC no significa sempre a
absoluta disponibilidade destes dados para serem exibidos em um grfico ou usados em um programa
mql5.
Ao acessar dados de preos ou valores de indicadores a partir de um programa mql5 deve ser lembrado
que a sua disponibilidade em um certo momento do tempo ou iniciando a partir de um certo momento
de tempo no garantida. Isso est relacionado com fato de que para economizar recursos, a cpia
completa dos dados necessrios para um programa mql5 no armazenada no MetaTrader 5; apenas
um acesso direto base de dados do terminal fornecida.
O histrico de preos para todas as janelas de tempo construdo a partir de dados comuns em
formato HCC, e qualquer atualizao dos dados a partir de um servidor conduz atualizao de dados
para todas as janelas de tempo e ao reclculo dos indicadores. Devido a isso, o acesso aos dados pode
ficar fechado, mesmo se estes dados estiverem disponveis a um momento atrs.

Sincronizao dos Dados do Terminal com os Dados do Servidor


J que um programa mql5 pode chamar dados de qualquer ativo e janela de tempo, existe a
possibilidade que os dados de uma srie de tempo necessria no esteja formado ainda no terminal ou
o preo necessrio no esteja sincronizado com o servidor de negociao. Neste caso difcil predizer
o tempo de latncia.
Algoritmos usando ciclos de latncia no so a melhor soluo. A nica exceo neste caso so os
scripts, porque eles no nenhuma escolha de algoritmo alternativo porque eles no tem manipuladores
de evento. Para indicadores customizados tais algoritmos, bem como quaisquer outros ciclos de
latncia so fortemente no recomendados, porque levam a finalizao do clculo de todos os
indicadores e qualquer outro manipulador de dados de preo do ativo.
Para Expert Advisor e indicadores, melhor usar o modelo de eventos de manipulao. Se durante a
manipulao dos eventos OnTick() ou OnCalculate(), o recebimento de dados para a janela de tempo

2000-2014, MetaQuotes Software Corp.

1038

Sries Temporais e Acesso a Indicadores


requerida falhar, voc deve sair do manipulador de evento, confiando na disponibilidade de acesso
durante a prxima chamada do manipulador.

Exemplo de um Script para Adicionar Histrico


Vamos considerar um exemplo de um script que executa uma solicitao para receber histrico para o
ativo selecionado de um servidor de negociao. O script projetado para executar em um grfico de
um ativo selecionado; a janela de tempo no importa, porque como foi mencionado acima, dados de
preo so recebidos de um servidor de negociao como pacotes de dados de um minuto, a partir dos
quais qualquer srie de tempo predefinida construda.
Escreve todas as aes relacionadas a recepo de dados
CheckLoadHistory(symbol, timeframe, start_date):

como uma funo separada,

int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)


{
}

A funo CheckLoadHistory() projetada como uma funo universal que pode ser chamada de
qualquer programa (Expert Advisor, script ou indicador); e portanto ela solicita trs parmetros de
entrada: nome do ativo, perodo e data de inicio para indicar o comeo do histrico de preo que voc
necessita.
Insira as verificaes necessrias no cdigo da funo antes de solicitar o histrico faltante.
Primeiramente, ns devemos assegurar que o nome do ativo e valor de perodo esto corretos:
if(symbol==NULL || symbol=="") symbol=Symbol();
if(period==PERIOD_CURRENT)

period=Period();

Ento vamos nos assegurar que o ativo est disponvel na janela Observador de Mercado, isto , o
histrico para o ativo estar disponvel durante o envio de uma solicitao a um servidor de
negociao. Se no houver tal ativo no Observador de Mercado, adicionar ele usando a funo
SymbolSelect().
if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
{
if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);
SymbolSelect(symbol,true);
}

Agora ns devemos receber a data de incio do histrico disponvel para o par ativo/perodo indicado.
Talvez, o valor do parmetro de entrada startdate, passado para CheckLoadHistory(), j esteja
disponvel no histrico; ento a solicitao a um servidor de negociao no necessria. A fim de
obter a primeira data para o ativo-perodo, a funo SeriesInfoInteger() com o modificador
SERIES_FIRSTDATE usada.
SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
if(first_date>0 && first_date<=start_date) return(1);

A prxima importante verificao o tipo do programa, a partir do qual a funo chamada. Note que
enviar uma solicitao de atualizao de srie de tempo com o mesmo perodo do indicador, que
chama a atualizao, no desejvel. O problema de solicitar dados sobre o mesmo ativo-perodo que
o do indicador est relacionado ao fato de que a atualizao de dados de histrico realizada na

2000-2014, MetaQuotes Software Corp.

1039

Sries Temporais e Acesso a Indicadores


mesma thread onde o indicador opera. Assim a possibilidade de ocorrncia de conflito alta. Para
verificar isso use a funo MQL5InfoInteger() com o modificador MQL5_PROGRAM_TYPE.

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol


return(-4);

Se todas as verificaes tiverem passado com sucesso, faa a ltima tentativa de acesso sem se
referir ao servidor de negociao Primeiramente, descubra a data de incio, para qual dados de minuto
no formato HCC esto disponveis. Solicite este valor usando a funo SeriesInfoInteger() com o
modificador SERIES_TERMINAL_FIRSTDATE e compare novamente ele com o valor do parmetro
start_date.
if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
{
//--- existe dados carregados para construir a srie de tempo
if(first_date>0)
{
//--- fora a construo da srie de tempo
CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
//--- verifica
if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
if(first_date>0 && first_date<=start_date) return(2);
}
}

Se aps todas as verificaes, a thread de execuo estiver ainda no corpo da funo


CheckLoadHistory(), isso significa que existe uma necessidade de solicitar os dados de preo faltantes
ao servidor de negociao. Primeiro, retorne o valor de "Mx. barras no grfico" usando a funo
TerminalInfoInteger():
int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);

Ns precisaremos dele para evitar solicitar dados extra. Ento encontre a primeira data no sistema do
ativo no servidor de negociao (independentemente do perodo) usando a j conhecida funo
SeriesInfoInteger() com o modificador SERIES_SERVER_FIRSTDATE.
datetime first_server_date=0;

while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopp


Sleep(5);

J que a solicitao uma operao assncrona, a funo chamada no ciclo com uma espera de 5
milissegundos at a varivel first_server_date receber um valor, ou a execuo do ciclo ser terminada
por um usurio (IsStopped() retornar true neste caso). Vamos indicar um valor correto da data de
incio, comeando a partir do qual ns solicitamos dados de preo de um servidor de negociao.
if(first_server_date>start_date) start_date=first_server_date;
if(first_date>0 && first_date<first_server_date)
Print("Aviso: primeira data de servidor ",first_server_date," para",
symbol," no coincide com a primeira data de srie ",first_date);

Se a data de incio first_server_date do servidor for menor que o data de incio first_date do ativo em
formato HCC, a correspondente entrada ser impressa no dirio.

2000-2014, MetaQuotes Software Corp.

1040

Sries Temporais e Acesso a Indicadores


Agora ns estamos prontos para fazer uma solicitao a um servidor de negociao por dados de preo
faltantes. Faa a solicitao na forma de um ciclo e comece preenchendo seu corpo:
while(!IsStopped())
{

//1. espere pela sincronizao entre a srie de tempo reconstruda e o histrico intermediri
//2. receba o nmero corrente de barra n desta srie de tempo
//

se bars for maior que Max_bars_in_char, ns podem sair, o trabalho est terminado,

//3. obter a data de incio first_date na srie de tempo reconstruda e comparar ela com stra
//

se first_date for menor que start_date, ns podemos sair, o trabalho est terminado

//4. solicitar a um servidor uma nova parte do histrico - 100 barras comeando da ltima bar
}

Os primeiros trs pontos esto implementados pelos meios j conhecidos.


while(!IsStopped())
{
//--- 1. esperar at o processo de reconstruo da srie de tempo acabar
while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
Sleep(5);
//--- 2. solicitar quantas barras ns tempos
int bars=Bars(symbol,period);
if(bars>0)
{
//--- barras mais que podem ser desenhadas no grfico, sair
if(bars>=max_bars) return(-2);
//--- 3. retorne a data de incio corrente na srie de tempo
if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
// data de incio foi anterior a aquela solicitada, tarefa concluda
if(first_date>0 && first_date<=start_date) return(0);
}

//4. Solicitar a um servidor uma nova parte do histrico - 100 barras comeando da ltima bar
}

Sobrou o quarto ltimo ponto - solicitar histrico. Ns no podemos referenciar a um servidor


diretamente, mas toda funo-Copy inicia automaticamente uma solicitao de envio a um servidor,
se o histrico em formato HCC no for suficiente. J que a hora da primeira data de incio na varivel
first_date um simples e natural critrio para avaliar o grau de execuo de uma solicitao, ento a
forma mais fcil usar a funo CopyTime().
Ao chamar funes que copiam quaisquer dados de sries de tempo, deve ser notado que o parmetro
start (nmero da barra, comeando a partir do qual dados de preo devem ser copiados) deve sempre
estar dentro do histrico de terminal disponvel. Se voc tiver somente 100 barras, intil tentar
copiar 300 barras comeando da barra com o ndice 500. Tal solicitao ser entendida como um error
e no ser tratada, isto , nenhum histrico adicional ser carregado de um servidor de negociao.
Esta a razo porque ns copiaremos 100 barras comeando da barra com o ndice bars. Isso
fornecer uma carga suave de histrico faltando doe um servidor de negociao. Na verdade, um
pouco mais que as 100 barras solicitadas sero carregadas, j que o servidor envia um histrico
superdimensionado.
int copied=CopyTime(symbol,period,bars,100,times);

2000-2014, MetaQuotes Software Corp.

1041

Sries Temporais e Acesso a Indicadores


Aps a operao de cpia, ns devemos analizar o nmero de elementos copiados. Se a tentativa
falhar, ento o valor copiado ser igual a null e o valor do contador fail_cnt ser aumentado em 1.
Aps 100 tentativas com falha, a operao da funo ser interrompida.
int fail_cnt=0;
...
int copied=CopyTime(symbol,period,bars,100,times);
if(copied>0)
{
//--- verifica dados
if(times[0]<=start_date)

return(0);

// o valor copiado menor, pronto

if(bars+copied>=max_bars) return(-2); // as barras so mais do que se pode desenhar no grfic


fail_cnt=0;
}
else
{
//--- no mais que 100 tentativas falhando em sucesso
fail_cnt++;
if(fail_cnt>=100) return(-5);
Sleep(10);
}

Ento, no somente manipulao correta da situao corrente em cada momento de execuo est
implementada na funo, mas tambm o cdigo de finalizao retornado, que pode ser tratado
depois chamando a funo CheckLoadHistory() para obteno de informaes adicionais. Por exemplo,
desta forma:
int res=CheckLoadHistory(InpLoadedSymbol,InpLoadedPeriod,InpStartDate);
switch(res)
{
case -1 : Print("Unknown symbol ",InpLoadedSymbol);

break;

case -2 : Print("More requested bars than can be drawn in the chart"); break;
case -3 : Print("Execution stopped by user");

break;

case -4 : Print("Indicator mustn't load its own data");

break;

case -5 : Print("Loading failed");

break;

case

0 : Print("All data loaded");

break;

case

1 : Print("Already available data in timeseries are enough");

break;

case

2 : Print("Timeseries is built from available terminal data");

break;

default : Print("Execution result undefined");


}

O cdigo completo da funo pode ser encontrado no exemplo de um script que mostra a correta
organizao de acesso de quaisquer dados com a manipulao de resultados de solicitao.
Code:
//+------------------------------------------------------------------+
//|

TestLoadHistory.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

2000-2014, MetaQuotes Software Corp.

1042

Sries Temporais e Acesso a Indicadores


//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.02"

#property script_show_inputs
//--- parmetros de entrada
input string

InpLoadedSymbol="NZDUSD";

input ENUM_TIMEFRAMES InpLoadedPeriod=PERIOD_H1;


input datetime

// Ativo a ser carregado


// Perdio a ser carregado

InpStartDate=D'2006.01.01'; // Data de incio

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
Print("Start load",InpLoadedSymbol+","+GetPeriodName(InpLoadedPeriod),"from",InpStartDate);
//--int res=CheckLoadHistory(InpLoadedSymbol,InpLoadedPeriod,InpStartDate);
switch(res)
{
case -1 : Print("Unknown symbol ",InpLoadedSymbol);

break;

case -2 : Print("Requested bars more than max bars in chart"); break;


case -3 : Print("Program was stopped");

break;

case -4 : Print("Indicator shouldn't load its own data");

break;

case -5 : Print("Load failed");

break;

case

0 : Print("Loaded OK");

break;

case

1 : Print("Loaded previously");

break;

case

2 : Print("Loaded previously and built");

break;

default : Print("Unknown result");


}
//--datetime first_date;
SeriesInfoInteger(InpLoadedSymbol,InpLoadedPeriod,SERIES_FIRSTDATE,first_date);
int bars=Bars(InpLoadedSymbol,InpLoadedPeriod);
Print("Primeira data ",first_date," - ",bars," barres");
//--}
//+------------------------------------------------------------------+
//|

//+------------------------------------------------------------------+
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
{
datetime first_date=0;
datetime times[100];
//--- verifica ativo e perodo
if(symbol==NULL || symbol=="") symbol=Symbol();
if(period==PERIOD_CURRENT)

period=Period();

//--- verifica se o ativo est selecionado no Observador de Mercado


if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
{

2000-2014, MetaQuotes Software Corp.

1043

Sries Temporais e Acesso a Indicadores


if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);
SymbolSelect(symbol,true);
}
//--- verifica se os dados esto presentes
SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
if(first_date>0 && first_date<=start_date) return(1);
//--- no pede para carregar seus prprios dados se ele for um indicador

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol


return(-4);
//--- segunda tentativa
if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
{
//--- existe dados carregados para construir a srie de tempo
if(first_date>0)
{
//--- fora a construo da srie de tempo
CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
//--- verifica
if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
if(first_date>0 && first_date<=start_date) return(2);
}
}
//--- mximo de barras em um grfico a partir de opes do terminal
int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- carrega informaes de histrico do ativo
datetime first_server_date=0;

while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopp


Sleep(5);
//--- corrige data de incio para carga
if(first_server_date>start_date) start_date=first_server_date;
if(first_date>0 && first_date<first_server_date)
Print("Aviso: primeira data de servidor ",first_server_date," para ",symbol,
" no coincide com a primeira data de srie ",first_date);
//--- carrega dados passo a passo
int fail_cnt=0;
while(!IsStopped())
{
//--- espera pela construo da srie de tempo
while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
Sleep(5);
//--- pede por construir barras
int bars=Bars(symbol,period);
if(bars>0)
{
if(bars>=max_bars) return(-2);
//--- pede pela primeira data
if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
if(first_date>0 && first_date<=start_date) return(0);
}

2000-2014, MetaQuotes Software Corp.

1044

Sries Temporais e Acesso a Indicadores


//--- cpia da prxima parte fora carga de dados
int copied=CopyTime(symbol,period,bars,100,times);
if(copied>0)
{
//--- verifica dados
if(times[0]<=start_date)

return(0);

if(bars+copied>=max_bars) return(-2);
fail_cnt=0;
}
else
{
//--- no mais que 100 tentativas com falha
fail_cnt++;
if(fail_cnt>=100) return(-5);
Sleep(10);
}
}
//--- interrompido
return(-3);
}
//+------------------------------------------------------------------+
//| Retorna valor de string do perodo

//+------------------------------------------------------------------+
string GetPeriodName(ENUM_TIMEFRAMES period)
{
if(period==PERIOD_CURRENT) period=Period();
//--switch(period)
{
case PERIOD_M1:

return("M1");

case PERIOD_M2:

return("M2");

case PERIOD_M3:

return("M3");

case PERIOD_M4:

return("M4");

case PERIOD_M5:

return("M5");

case PERIOD_M6:

return("M6");

case PERIOD_M10: return("M10");


case PERIOD_M12: return("M12");
case PERIOD_M15: return("M15");
case PERIOD_M20: return("M20");
case PERIOD_M30: return("M30");
case PERIOD_H1:

return("H1");

case PERIOD_H2:

return("H2");

case PERIOD_H3:

return("H3");

case PERIOD_H4:

return("H4");

case PERIOD_H6:

return("H6");

case PERIOD_H8:

return("H8");

case PERIOD_H12: return("H12");


case PERIOD_D1:

return("Daily");

case PERIOD_W1:

return("Weekly");

2000-2014, MetaQuotes Software Corp.

1045

Sries Temporais e Acesso a Indicadores


case PERIOD_MN1: return("Monthly");
}
//--return("perodo desconhecido");
}

2000-2014, MetaQuotes Software Corp.

1046

Sries Temporais e Acesso a Indicadores

SeriesInfoInteger
Retorna informaes sobre o estado de dados histricos. Existem 2 variantes de chamada da funo.
Retorna diretamente o valor da propriedade.
long SeriesInfoInteger(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES

timeframe,

// perodo

ENUM_SERIES_INFO_INTEGER

prop_id,

// identificador da propriedade

);

Retorna true ou false dependendo do sucesso da execuo da funo.


bool SeriesInfoInteger(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES

timeframe,

// perodo

ENUM_SERIES_INFO_INTEGER

prop_id,

// ID da propriedade

long&

long_var

// varivel a informao obtida

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
prop_id
[in] Identificador da propriedade solicitada, valor da enumerao ENUM_SERIES_INFO_INTEGER.
long_var
[out] Varivel para onde o valor da propriedade solicitada colocado.
Valor do Retorno
No primeiro caso, ela retorna valor do tipo long.
Para o segundo caso, ela retorna true, se a propriedade especificada estiver disponvel e seu valor
colocada na varivel long_var, caso contrrio ela returna false. Para mais detalhes sobre um erro,
chame a funo GetLastError().
Exemplo:
void OnStart()
{
//--Print("Total number of bars for the symbol-period at this moment = ",
SeriesInfoInteger(Symbol(),0,SERIES_BARS_COUNT));
Print("The first date for the symbol-period at this moment = ",
(datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));

2000-2014, MetaQuotes Software Corp.

1047

Sries Temporais e Acesso a Indicadores

Print("The first date in the history for the symbol-period on the server = ",
(datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
Print("Symbol data are synchronized = ",
(bool)SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED));
}

2000-2014, MetaQuotes Software Corp.

1048

Sries Temporais e Acesso a Indicadores

Bars
Retorna o nmero de barras no histrico para um ativo e perodo especficos. Existe 2 variantes de
chamada da funo.
Solicita todas as barras do histrico
int Bars(
string

symbol_name,

ENUM_TIMEFRAMES timeframe

// nome do ativo
// perodo

);

Solicita as barras do histrico no intervalo de tempo selecionado


int Bars(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time

// data e hora de trmino

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_time
[in] Hora da barra correspondente ao primeiro elemento.
stop_time
[in] Hora da barra correspondente ao ltimo elemento.
Valor do Retorno
Se os parmetros start_time e stop_time estiverem definidos, a funo retorna o nmero de barras
no intervalo de tempo especificado, caso contrrio retorna o nmero total de barras.
Observao
Se dados para a srie de tempo com parmetros especficados no estiverem formados no terminal
na hora que a funo Bars() for chamada, ou dados da srie de tempo no estiverem sincronizados
com um servidor de negociao no momento da chamada da funo, a funo retorna o valor zero.
Sample:
int bars=Bars(_Symbol,_Period);
if(bars>0)
{
Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars);
}
else

//sem barras disponveis

2000-2014, MetaQuotes Software Corp.

1049

Sries Temporais e Acesso a Indicadores


{
//--- dados sobre o ativo podem no estar sincronizados com os dados no servidor
bool synchronized=false;
//--- contador de loop
int attempts=0;
// faz 5 tentativas de espera por sincronizao
while(attempts<5)
{
if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
{
//--- sincronizao feita, sair
synchronized=true;
break;
}
//--- aumentar o contador
attempts++;
//--- espera 10 milissegundos at a prxima iterao
Sleep(10);
}
//--- sair do loop aps sincronizao
if(synchronized)
{

Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars
Print("The first date in the terminal history for the symbol-period at the moment = ",
(datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
Print("The first date in the history for the symbol on the server = ",
(datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
}
//--- sincronizao dos dados no aconteceu
else
{
Print("Failed to get number of bars for ",_Symbol);
}
}

Tambm Veja
Funes de Processamento de Eventos

2000-2014, MetaQuotes Software Corp.

1050

Sries Temporais e Acesso a Indicadores

BarsCalculated
Retorna o nmero de dados calculados para o indicador especificado.
int BarsCalculated(
int

indicator_handle,

// handle do indicador

);

Parmetros
indicator_handle
[in] O handle do indicador, retornado pela funo do indicador correspondente.
Valor do Retorno
Retorna a quantidade de dados calculados no buffer de indicador, ou -1 em caso de erro (dados
ainda no calculados)
Observao
A funo til quando necessrio obter os dados do indicador imediatamente aps sua criao (o
handle do indicador est disponvel).
Exemplo:
void OnStart()
{
double Ups[];
//--- define a ordenao de srie de tempo para os arrays
ArraySetAsSeries(Ups,true);
//--- cria handle para o indicador Fractal
int FractalsHandle=iFractals(NULL,0);
//--- redefine o cdigo de erro
ResetLastError();
//--- tenta copiar os valores do indicador
int i,copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Sleep(50);
for(i=0;i<100;i++)
{
if(BarsCalculated(FractalsHandle)>0)
break;
Sleep(50);
}
copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Print("Failed to copy upper fractals. Erro = ",GetLastError(),
"i = ",i,"

copiado = ",copied);

return;
}

2000-2014, MetaQuotes Software Corp.

1051

Sries Temporais e Acesso a Indicadores


else
Print("Upper fractals copied",
"i = ",i,"

copiado = ",copied);

}
else Print("Upper fractals copied. ArraySize = ",ArraySize(Ups));
}

2000-2014, MetaQuotes Software Corp.

1052

Sries Temporais e Acesso a Indicadores

IndicatorCreate
A funo retorna o handle de um indicador tcnico especificado criado baseado no array de parmetros
de tipo MqlParam.
int IndicatorCreate(
string

symbol,

// nome do ativo

ENUM_TIMEFRAMES period,

// janela de tempo

ENUM_INDICATOR indicator_type,

// tipo de indicador a partir da enumerao

int

parameters_cnt=0,

// nmero de parmetros

const MqlParam&

parameters_array[]=NULL,

// array de parmetros

);

Parmetros
symbol
[in] Nome de um ativo, sobre cujos dados o indicador calculado. NULL significa o ativo corrente.
period
[in] O valor da janela de tempo pode ser um dos valores da enumerao ENUM_TIMEFRAMES, 0
significa a janela de tempo corrente.
indicator_type
[in] Tipo de indicador, pode ser um dos valores da enumerao ENUM_INDICATOR.
parameters_cnt
[in] O nmero de parmetros passados no array parameters_array[]. Os elementos do array tm
uma estrutura especial de tipo MqlParam. Por default, zero - parmetros so passados. Se voc
especificar um nmero no zero de parmetros, o parmetro parameters_array obrigatrio. Voc
no pode passar mais que 256 parmetros.
parameters_array[]=NULL
[in] Um array do tipo MqlParam, cujos elementos contm o tipo e valor de cada parmetro de
input de um indicador tcnico.
Valor de retorno
Retorna o handle de um indicador tcnico especificado, em caso de falha retorna INVALID_HANDLE.
Observao
Se o handle de indicador de tipo IND_CUSTOM for criado, o campo type do primeiro elemento do
array de parmetros de entrada parameters_array deve ter o valor TYPE_STRING da enumerao
ENUM_DATATYPE, e o campo string_value do primeiro elemento deve conter o nome do indicador
customizado. O indicador customizado deve estar compilado (arquivo com extenso EX5) e
localizado no diretrio MQL5/Indicators do terminal cliente ou em um subdiretrio.
Indicadores que requerem teste so definidos automaticamente a partir da chamada da funo
iCustom(), se o correspondente parmetro for definido atravs de um string constante. Para todos
os outros casos (uso da funo IndicatorCreate() ou uso de uma string no-constante no parmetro
de define o nome do indicador) a propriedade #property tester_indicator requerida:
#property tester_indicator "indicator_name.ex5"

2000-2014, MetaQuotes Software Corp.

1053

Sries Temporais e Acesso a Indicadores


Se primeira forma da chamada for usada em um indicador customizado, voc pode adicionalmente
indicar como ltimo parmetro sobre quais dados o indicador ser calculado, ao passar os
parmetros de input. Se o parmetro "Apply to" no for especificado explicitamente, o clculo
default baseado no valores de PRICE_CLOSE.
Exemplo:
void OnStart()
{
MqlParam params[];
int

h_MA,h_MACD;

//--- criar iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE);


ArrayResize(params,4);
//--- define ma_period
params[0].type

=TYPE_INT;

params[0].integer_value=8;
//--- define ma_shift
params[1].type

=TYPE_INT;

params[1].integer_value=0;
//--- define ma_method
params[2].type

=TYPE_INT;

params[2].integer_value=MODE_EMA;
//--- define applied_price
params[3].type

=TYPE_INT;

params[3].integer_value=PRICE_CLOSE;
//--- criar MA
h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params);
//--- criar iMACD("EURUSD",PERIOD_M15,12,26,9,h_MA);
ArrayResize(params,4);
//--- define ma_period rpido
params[0].type

=TYPE_INT;

params[0].integer_value=12;
//--- define ma_period lento
params[1].type

=TYPE_INT;

params[1].integer_value=26;
//--- define perodo de suavizao por diferena
params[2].type

=TYPE_INT;

params[2].integer_value=9;
//--- define o handle do indicador como applied_price
params[3].type

=TYPE_INT;

params[3].integer_value=h_MA;
//--- criar MACD baseado em mdia mvel
h_MACD=IndicatorCreate("EURUSD",PERIOD_M15,IND_MACD,4,params);
//--- usa os indicadores
//--- . . .
//--- libera os indicatores (primeiro h_MACD)
IndicatorRelease(h_MACD);
IndicatorRelease(h_MA);
}

2000-2014, MetaQuotes Software Corp.

1054

Sries Temporais e Acesso a Indicadores

IndicatorParameters
Baseado no handle especificado, retorna o nmero de parmetros de entrada do indicador, bem como
os valores e tipos dos parmetros.
int IndicatorParameters(
int

indicator_handle,

// handle do indicador

ENUM_INDICATOR& indicator_type,

// uma varivel para receber o tipo do indicador

MqlParam&

// um array para receber parmetros

parameters[]

);

Parmetros
indicator_handle
[in] O handle do indicador, para o qual voc precisa saber o nmero de parmetros sobre os quais
o indicador calculado.
indicator_type
[out] Uma varivel de tipo ENUM_INDICATOR, na qual o tipo do indicador ser escrito.
parameters[]
[out] Um array dinmico para receber valores do tipo MqlParam, na qual a lista de parmetros do
indicador ser escrito. O tamanho do array retornado pela funo IndicatorParameters().
Valor do Retorno
O nmero de parmetros de entrada do indicador com o handle especificado. No caso de um erro,
retorna -1. Para mais detalhes sobre o erro chame a funo GetLastError().
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- O nmero de janelas no grfico (ao menos uma janela principal est sempre presente)
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- Varre as janelas do grfico
for(int w=0;w<windows;w++)
{
//--- O nmero de indicadores nesta janela/sub-janela
int total=ChartIndicatorsTotal(0,w);
//--- Pega todos os indicadores na janela
for(int i=0;i<total;i++)
{
//--- Obtm o nome abreviado do indicador
string name=ChartIndicatorName(0,w,i);
//--- Obtm o handle do indicador
int handle=ChartIndicatorGet(0,w,name);
//--- Adicionar o log

2000-2014, MetaQuotes Software Corp.

1055

Sries Temporais e Acesso a Indicadores


PrintFormat("Window=%d,

indicator #%d,

handle=%d",w,i,handle);

//--MqlParam parameters[];
ENUM_INDICATOR indicator_type;
int params=IndicatorParameters(handle,indicator_type,parameters);
//--- O cabealho da mensagem
string par_info="Short name "+name+", type "
+EnumToString(ENUM_INDICATOR(indicator_type))+"\r\n";
//--for(int p=0;p<params;p++)
{

par_info+=StringFormat("parmetro %d: type=%s, long_value=%d, double_value=%G,string_va


p,
EnumToString((ENUM_DATATYPE)parameters[p].type),
parameters[p].integer_value,
parameters[p].double_value,
parameters[p].string_value
);
}
Print(par_info);
}
//--- Pronto para todos os indicadores da janela
}
//--}

Tambm Veja
ChartIndicatorGet()

2000-2014, MetaQuotes Software Corp.

1056

Sries Temporais e Acesso a Indicadores

IndicatorRelease
A funo remove um handle de indicador e libera o bloco de clculo do indicador, se ele no for usado
por ningum mais.
bool IndicatorRelease(
int

indicator_handle,

// handle do indicador

);

Valor de retorno
Retorna true no caso de sucesso, caso contrrio retorna false.
Observao
A funo permite remover um handle de indicador, se ele no mais for necessrio, deste modo,
economizando memria . O handle removido imediatamente, o bloco de clculo excludo em
algum momento (se ele no for chamado por ningum mais).
Exemplo:
//+------------------------------------------------------------------+
//|

Test_IndicatorRelease.mq5 |

//|

Copyright 2010, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- parmetros de entrada


input int

MA_Period=15;

input int

MA_shift=0;

input ENUM_MA_METHOD

MA_smooth=MODE_SMA;

input ENUM_APPLIED_PRICE price=PRICE_CLOSE;


//--- armazenar o handle de indicador
int MA_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- cria um handle de indicador
MA_handle=iMA(Symbol(),0,MA_Period,MA_shift,MA_smooth,PRICE_CLOSE);
//--- exclui varivel global
if(GlobalVariableCheck("MA_value"))
GlobalVariableDel("MA_value");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

2000-2014, MetaQuotes Software Corp.

1057

Sries Temporais e Acesso a Indicadores


//+------------------------------------------------------------------+
void OnTick()
{
//--- se o valor da varivel global no existir
if(!GlobalVariableCheck("MA_value"))
{
//--- obtm o valor do indicador nas ltimas duas barras
if(MA_handle!=INVALID_HANDLE)
{
//--- array dinmico para valores do indicador
double values[];
if(CopyBuffer(MA_handle,0,0,2,values)==2 && values[0]!=EMPTY_VALUE)
{
//--- lembra na varivel global o valor da penltima barra
if(GlobalVariableSet("MA_value",values[0]))
{
//--- libera o handle do indicador
if(!IndicatorRelease(MA_handle))
Print("IndicatorRelease() falhou. Error ",GetLastError());
else MA_handle=INVALID_HANDLE;
}
else
Print("GlobalVariableSet falhou. Error ",GetLastError());
}
}
}
//--}

2000-2014, MetaQuotes Software Corp.

1058

Sries Temporais e Acesso a Indicadores

CopyBuffer
Obtm dados de um buffer especificado de um certo indicador na quantidade necessria.

A contagem de elementos de dados copiados (buffer de indicador com o ndice buffer_num) da posio
de incio realizada do presente para o passado, isto , posio de incio 0 significa a barra corrente
(valor do indicador para a barra corrente).
Ao copiar uma quantidade ainda desconhecida de dados, recomendado usar um array dinmico como
um buffer[] recipiente, porque a funo CopyBuffer() tenta alocar o tamanho do array receptor ao
tamanho dos dados copiados. Se um buffer de indicador (array que pr-alocado para armazenar
valores de um indicador atravs da funo SetIndexBufer()) for usado como um array recipiente
buffer[], uma copia parcial permitida. Um exemplo pode ser encontrado no indicador customizado
Awesome_Oscillator.mql5 no pacote padro do terminal.
Se voc precisar fazer uma cpia parcial dos valores de um indicador em um outro array (um no
buffer de indicador), voc deve usar um array intermedirio, para o qual o nmero desejado
copiado. Aps isso, conduza uma cpia elemento a elemento do requerido nmero de valores para os
lugares requeridos em um array de recepo a partir deste array intermedirio.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyBuffer(
int

indicator_handle,

// handle do indicador

int

buffer_num,

// nmero do buffer do indicador

int

start_pos,

// posio de incio

int

count,

// quantidade para copiar

double

buffer[]

// array destino para copiar

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyBuffer(
int

indicator_handle,

// handle do indicador

2000-2014, MetaQuotes Software Corp.

1059

Sries Temporais e Acesso a Indicadores


int

buffer_num,

// nmero do buffer do indicador

datetime start_time,

// data e hora de incio

int

count,

// quantidade para copiar

double

buffer[]

// array destino para copiar

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyBuffer(
int

indicator_handle,

// handle do indicador

int

buffer_num,

// nmero do buffer do indicador

datetime start_time,

// data e hora de incio

datetime stop_time,

// data e hora de trmino

double

// array destino para copiar

buffer[]

);

Parmetros
indicator_handle
[in] O handle do indicador, retornado pela funo do indicador correspondente.
buffer_num
[in] O nmero do buffer do indicador.
start_pos
[in] A posio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] Hora da barra, correspondente ao primeiro elemento.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento.
buffer[]
[out] Array de tipo double.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite.

2000-2014, MetaQuotes Software Corp.

1060

Sries Temporais e Acesso a Indicadores


Exemplo:
//+------------------------------------------------------------------+
//|

TestCopyBuffer3.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar MA
#property indicator_label1

"MA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input bool

AsSeries=true;

input int

period=15;

input ENUM_MA_METHOD

smootMode=MODE_EMA;

input ENUM_APPLIED_PRICE price=PRICE_CLOSE;


input int

shift=0;

//--- buffers do indicador


double

MABuffer[];

int

ma_handle;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
Print("Parameter AsSeries = ",AsSeries);
Print("Buffer do indicador aps SetIndexBuffer() timeseries = ",
ArrayGetAsSeries(MABuffer));
//--- define o nome abreviado do indicador
IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//--- define AsSeries(depende do parmetro de entrada)
ArraySetAsSeries(MABuffer,AsSeries);
Print("Buffer do indicador aps ArraySetAsSeries(MABuffer,true); timeseries = ",
ArrayGetAsSeries(MABuffer));
//--ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
return(INIT_SUCCEEDED);
}

2000-2014, MetaQuotes Software Corp.

1061

Sries Temporais e Acesso a Indicadores


//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- verifica se todos os dados esto calculados
if(BarsCalculated(ma_handle)<rates_total) return(0);
//--- ns no podemos copiar todos os dados
int to_copy;
if(prev_calculated>rates_total || prev_calculated<=0) to_copy=rates_total;
else
{
to_copy=rates_total-prev_calculated;
//--- o ltimo valor sempre copiado
to_copy++;
}
//--- tenta copiar
if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

O exemplo acima ilustra como um buffer de indicador preenchido com os valores de um outro buffer
de indicador a partir de um indicador sobre o mesmo ativo/perodo.
Veja uma exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de
Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1062

Sries Temporais e Acesso a Indicadores

Tambm Veja
Propriedades de Indicadores Customizados, SetIndexBuffer

2000-2014, MetaQuotes Software Corp.

1063

Sries Temporais e Acesso a Indicadores

CopyRates
Obtm dados histricos de estrutura MqlRates de um ativo-perodo especificado na quantidade
especificada no array rates_array. A ordenao dos elementos dos dados copiados do presente para
o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyRates(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

MqlRates

rates_array[]

// array destino para copiar

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyRates(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

MqlRates

rates_array[]

// array destino para copiar

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyRates(

2000-2014, MetaQuotes Software Corp.

1064

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de trmino

MqlRates

rates_array[]

// array destino para copiar

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_time
[in] Hora da barra do primeiro elemento para copiar.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
rates_array[]
[out] Array de tipo MqlRates.
Valor do Retorno
Retorna o nmero de elementos copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1065

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Exemplo:
void OnStart()
{
//--MqlRates rates[];
ArraySetAsSeries(rates,true);
int copied=CopyRates(Symbol(),0,0,100,rates);
if(copied>0)
{
Print("Barres copiados: "+copied);
string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
string out;
int size=fmin(copied,10);
for(int i=0;i<size;i++)
{
out=i+":"+TimeToString(rates[i].time);
out=out+" "+StringFormat(format,
rates[i].open,
rates[i].high,
rates[i].low,
rates[i].close,
rates[i].tick_volume);
Print(out);
}
}
else Print("Falha ao receber dados histricos para o smbolo ",Symbol());
}

Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de


Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:

2000-2014, MetaQuotes Software Corp.

1066

Sries Temporais e Acesso a Indicadores


DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

Tambm Veja
Estruturas e Classes, TimeToString, StringFormat

2000-2014, MetaQuotes Software Corp.

1067

Sries Temporais e Acesso a Indicadores

CopyTime
A funo obtm em time_array o histrico de dados da hora de abertura de barras para o par ativoperodo especificado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyTime(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

datetime

time_array[]

// array destino para copiar as horas de abertura

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyTime(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

datetime

time_array[]

// array destino para copiar horas de abertura

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyTime(

2000-2014, MetaQuotes Software Corp.

1068

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

datetime

time_array[]

// array destino para copiar as horas de abertura

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
time_array[]
[out] Array de tipo datetime.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1069

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de
Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1070

Sries Temporais e Acesso a Indicadores

CopyOpen
A funo obtm em open_array os dados histricos de preos de abertura de barras para o par ativoperodo selecionado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyOpen(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

double

open_array[]

// array destino para copiar preos de abertura

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyOpen(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

double

open_array[]

// array destino para preos de abertura de barras

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyOpen(

2000-2014, MetaQuotes Software Corp.

1071

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

double

open_array[]

// array destino para valores de abertura de barras

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] A hora de incio para o ltimo elemento para copiar.
open_array[]
[out] Array de tipo double.
Valor do Retorno
Retorna o nmero de elementos no array ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1072

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de
Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1073

Sries Temporais e Acesso a Indicadores

CopyHigh
A funo obtm em high_array os dados histricos dos preos de barra mais altos para o par ativoperodo selecionado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyHigh(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

double

high_array[]

// array destino para copiar

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyHigh(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

double

high_array[]

// array destino para copiar

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyHigh(

2000-2014, MetaQuotes Software Corp.

1074

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

double

high_array[]

// array destino para copiar

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
high_array[]
[out] Array de tipo double.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1075

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Exemplo:
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "An example for output of the High[i] and Low[i]"
#property description "for a random chosen bars"
double High[],Low[];
//+------------------------------------------------------------------+
//| Obtm Mnimo para o ndice de barra especificado

//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| Obtm o Mximo para o ndice de barra especificado

//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

2000-2014, MetaQuotes Software Corp.

1076

Sries Temporais e Acesso a Indicadores


//+------------------------------------------------------------------+
void OnTick()
{
//--- em cada tick ns imprimimos os valores de Mximo e Mnimo para a barra com ndice,
//--- que seja igual ao segundo, no qual o tick chegou
datetime t=TimeCurrent();
int sec=t%60;
printf("High[%d] = %G

Low[%d] = %G",

sec,iHigh(Symbol(),0,sec),
sec,iLow(Symbol(),0,sec));
}

Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de


Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1077

Sries Temporais e Acesso a Indicadores

CopyLow
A funo obtm em low_array os dados histricos de preos de barra mnimos para o par ativo-perodo
selecionado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyLow(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

double

low_array[]

// array destino para copiar

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyLow(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

double

low_array[]

// array destino para copiar

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyLow(

2000-2014, MetaQuotes Software Corp.

1078

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

double

low_array[]

// array destino para copiar

);

Parmetros
symbol_name
[in] Ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
low_array[]
[out] Array de tipo double.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1079

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de
Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

Tambm Veja
CopyHigh

2000-2014, MetaQuotes Software Corp.

1080

Sries Temporais e Acesso a Indicadores

CopyClose
A funo obtm em close_array os dados histricos de preos de fechamento de barra para o par
ativo-perodo selecionado na quantidade especificada. Deve ser notado que a ordenao dos
elementos do presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyClose(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

double

close_array[]

// array destino para copiar

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyClose(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

double

close_array[]

// array destino para copiar

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyClose(

2000-2014, MetaQuotes Software Corp.

1081

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

double

close_array[]

// array destino para copiar

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
close_array[]
[out] Array de tipo double.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1082

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de
Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1083

Sries Temporais e Acesso a Indicadores

CopyTickVolume
A funo obtm em volume_array os dados histricos de volumes de tick para o par ativo-perodo
selecionado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyTickVolume(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

long

volume_array[]

// array destino para volumes de tick

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyTickVolume(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

long

volume_array[]

// array destino para volumes de tick

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyTickVolume(

2000-2014, MetaQuotes Software Corp.

1084

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

long

volume_array[]

// array destino para volumes de tick

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
volume_array[]
[out] Array de tipo long.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1085

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Exemplo:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar TickVolume


#property indicator_label1

"TickVolume"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

C'143,188,139'

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

bars=3000;

//--- buffers do indicador


double

TickVolumeBuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,TickVolumeBuffer,INDICATOR_DATA);
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],

2000-2014, MetaQuotes Software Corp.

1086

Sries Temporais e Acesso a Indicadores


const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--if(prev_calculated==0)
{
long timeseries[];
ArraySetAsSeries(timeseries,true);
int prices=CopyTickVolume(Symbol(),0,0,bars,timeseries);
for(int i=0;i<rates_total-prices;i++) TickVolumeBuffer[i]=0.0;
for(int i=0;i<prices;i++) TickVolumeBuffer[rates_total-1-i]=timeseries[prices-1-i];
Print("We have received the following number of TickVolume values: "+prices);
}
else
{
long timeseries[];
int prices=CopyTickVolume(Symbol(),0,0,1,timeseries);
TickVolumeBuffer[rates_total-1]=timeseries[0];
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Veja um exemplo detalhado de solicitao de dados histricos na seo Mtodos de Vinculao de


Objetos. O script disponvel nesta seo mostra como obter os valores do indicador iFractals nas
ltimas 1000 barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no
grfico. Uma tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que
so usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1087

Sries Temporais e Acesso a Indicadores

CopyRealVolume
A funo obtm em volume_array os dados histricos de volumes de negociao para o par ativoperodo selecionado na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopyRealVolume(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

long

volume_array[]

// array destino para valores de volume

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopyRealVolume(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

long

volume_array[]

// array destino para valores de volume

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopyRealVolume(

2000-2014, MetaQuotes Software Corp.

1088

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

long

volume_array[]

// array destino para valores de volume

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
volume_array[]
[out] Array de tipo long.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso deerro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1089

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Veja um exemplo de solicitao de dados histricos na seo Mtodos de Vinculao de Objetos. O
script disponvel nesta seo mostra como obter os valores do indicador iFractals nas ltimas 1000
barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no grfico. Uma
tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que so
usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1090

Sries Temporais e Acesso a Indicadores

CopySpread
A funo obtm em spread_array os dados histricos de valores de spread para o par selecionado
ativo-perodo na quantidade especificada. Deve ser notado que a ordenao dos elementos do
presente para o passado, isto , a posio de incio 0 significa a barra corrente.

Ao copiar uma quantidade desconhecida de dados, recomendvel usar umarray dinmicocomo array
destino, porque se a quantidade solicitada de dados for menor (ou maior) que o comprimento do array
destino, a funo tenta realocar a memria de qual forma que os dados solicitados caibam
completamente.
Se voc souber a quantidade de dados que voc precisa para copiar, melhor usar um buffer alocado
estaticamente, a fim de evitar a alocao de memria excessiva.
No importa qual seja a propriedade do array destino - como series=true ou como series=false. Os
dados sero copiados de tal maneira que o elemento mais antigo ser localizado no incio da memria
fsica alocada para o array. Exitem 3 variantes de chamada da funo.
Chamar pela posio primeira e o nmero de elementos requeridos
int CopySpread(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

int

start_pos,

// posio de incio

int

count,

// quantidade de dados para copiar

int

spread_array[]

// array destino para valores de spread

);

Chamar pela data de incio e o nmero de elementos requeridos


int CopySpread(
string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

int

count,

// quantidade de dados para copiar

int

spread_array[]

// array destino para valores de spread

);

Chamar pelas datas de incio e trmino de um intervalo de tempo requerido


int CopySpread(

2000-2014, MetaQuotes Software Corp.

1091

Sries Temporais e Acesso a Indicadores


string

symbol_name,

// nome do ativo

ENUM_TIMEFRAMES timeframe,

// perodo

datetime

start_time,

// data e hora de incio

datetime

stop_time,

// data e hora de parada

int

spread_array[]

// array destino para valores de spread

);

Parmetros
symbol_name
[in] Nome do ativo.
timeframe
[in] Perodo.
start_pos
[in] A posio de incio do primeiro elemento para copiar.
count
[in] Quantidade de dados para copiar.
start_time
[in] A hora de incio para o primeiro elemento para copiar.
stop_time
[in] Hora da barra, correspondente ao ltimo elemento para copiar.
spread_array[]
[out] Array de tipo int.
Valor do Retorno
Retorna a quantidade de dados copiados ou -1 no caso de um erro.
Observao
Se o intervalo inteiro de dados solicitados no estiver disponvel no servidor, a funo retorna -1.
Se dados fora do TERMINAL_MAXBARS (nmero mximo de barras no grfico) for solicitado, a
funo tambm retornar -1.
Ao solicitar dados de um indicador, se as sries de tempo solicitadas no estiverem ainda
construdas ou elas precisarem serem baixadas do servidor, a funo imediatamente retornar -1,
mas o processo de download/construo ser iniciado.
Ao solicitar dados de um Expert Advisor ou script, o download do servidor ser iniciado se o terminal
no tiver estes dados localmente, ou a construo da srie de tempo solicitada iniciar, se os dados
puderem ser construdas a partir do histrico local mas eles no estiverem prontos ainda. A funo
retornar a quantidade de dados que estar pronta no momento da expirao do tempo limite, mas
o download do histrico continuar, e na prximo solicitao simular, a funo retornar mais
dados.
Ao solicitar dados atravs da data de incio e do nmero de elementos requeridos, somente dados
cuja data seja menor (anterior) ou igual a data especificada so retornados. Isso significa que a
hora de abertura de qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de

2000-2014, MetaQuotes Software Corp.

1092

Sries Temporais e Acesso a Indicadores


indicador, preos de Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre menor
ou igual ao valor especificado.
Ao solicitar dados em uma faixa especificada de datas, somente dados deste intervalo sero
retornados. O intervalo definido e contado em segundos. Isso significa que a hora de abertura de
qualquer barra, para cujo valor retornado (volume, spread, valor no buffer de indicador, preos de
Abertura, Mximo, Mnimo, Fechamento ou Hora de Abertura) sempre dentro do intervalo
solicitado.
Assim, se o dia corrente for sbado, e em uma tentativa de copiar dados usando a janela de tempo
semanal, voc especificar start_time=Last_Tuesday e stop_time=Last_Friday, a funo retornar 0,
porque a hora de abertura em uma janela de tempo semanal sempre domingo, e nenhum barra
semanal cair no intervalo especificado.
Se voc precisar retornar o valor correspondente para a barra corrente incompleta, voc pode usar a
primeira forma de chamada, especificando start_pos=0 e count=1.
Exemplo:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar Spread


#property indicator_label1

"Spread"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

bars=3000;

//--- buffers do indicador


double

SpreadBuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],

2000-2014, MetaQuotes Software Corp.

1093

Sries Temporais e Acesso a Indicadores


const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--if(prev_calculated==0)
{
int spread_int[];
ArraySetAsSeries(spread_int,true);
int spreads=CopySpread(Symbol(),0,0,bars,spread_int);
Print("We have received the following number of Spread values: ",spreads);
for (int i=0;i<spreads;i++)
{
SpreadBuffer[rates_total-1-i]=spread_int[i];
if(i<=30) Print("spread["+i+"] = ",spread_int[i]);
}
}
else
{
double Ask,Bid;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
Comment("Ask = ",Ask,"

Bid = ",Bid);

SpreadBuffer[rates_total-1]=(Ask-Bid)/Point();
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Veja um exemplo de solicitao de dados histricos na seo Mtodos de Vinculao de Objetos. O


script disponvel nesta seo mostra como obter os valores do indicador iFractals nas ltimas 1000
barras e como exibir os ltimos 10 fractais de alta e os ltimos 10 fractais de baixa no grfico. Uma
tcnica simular pode ser usada para todos os indicadores que tm dados faltantes e que so
usualmente desenhados usando os seguintes estilos:
DRAW_SECTION,
DRAW_ARROW,
DRAW_ZIGZAG,
DRAW_COLOR_SECTION,
DRAW_COLOR_ARROW,
DRAW_COLOR_ZIGZAG.

2000-2014, MetaQuotes Software Corp.

1094

Operaes de Grficos

Operaes de Grficos
Estas so funes para trabalhar com grficos. Todas as operaes de grfico so permitidas apenas
em Assessores Especialistas (Expert Advisors) e Scripts.
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.
Funo

Ao

ChartApplyTemplate

Aplica-se um modelo especfico de um arquivo


especificado para o grfico

ChartSaveTemplate

Salva as configuraes atuais do grfico em um


modelo com um nome especificado

ChartWindowFind

Retorna o nmero de uma sub-janela onde um


indicador elaborado

ChartTimePriceToXY

Converte as coordenadas do grfico a partir da


representao
tempo/preo
para
as
coordenadas X e Y

ChartXYToTimePrice

Converte as coordenadas X e Y no grfico para


os valores de tempo e preo

ChartOpen

Abre um novo grfico com o smbolo e perodo


especificado

ChartClose

Fecha um grfico especificado

ChartFirst

Retorna o ID do primeiro grfico do terminal do


cliente

ChartNext

Retorna o ID do grfico do prximo grfico para


um especificado

ChartSymbol

Retorna o nome
especificado

do

smbolo

do

grfico

ChartPeriod

Retorna o valor
especificado

do

perodo

do

grfico

ChartRedraw

Chama um redesenho forado de um grfico


especificado

ChartSetDouble

Define o valor duplo para uma propriedade


correspondente do grfico especificado

ChartSetInteger

Define um valor inteiro (datetime, int, color,


bool ou char) para uma propriedade

2000-2014, MetaQuotes Software Corp.

1095

Operaes de Grficos

correspondente do grfico especificado


ChartSetString

Define o valor da seqncia para


propriedade do grfico especificado

ChartGetDouble

Retorna a propriedade de valor duplo do grfico


especificado

ChartGetInteger

Retorna a propriedade de valor inteiro do


grfico especificado

ChartGetString

Retorna a propriedade de valor da seqncia do


grfico especificado

ChartNavigate

Executa deslocamento do grfico especificado


pelo nmero especificado de barras em relao
a posio especificada no grfico

ChartID

Retorna o ID do grfico atual

ChartIndicatorAdd

Adiciona um indicador com identificador


especificado para uma janela do grfico
especificado

ChartIndicatorDelete

Remove um indicador com um nome


especificado a partir de janela do grfico
especificado

ChartIndicatorGet

Retorna o manuseio do indicador com nome


abreviado especificado na janela do grfico
especificado

ChartIndicatorName

Retorna o nome abreviado do indicador pelo


nmero na lista de indicadores sobre a janela
do grfico especificado

ChartIndicatorsTotal

Retorna o nmero de todos indicadores


utilizados para a janela do grfico especificado

ChartWindowOnDropped

Retorna o nmero (ndice) da sub-janela do


grfico, o Assessor Especialista (Expert
Advisor) ou Script foi derrubado

ChartPriceOnDropped

Retorna a coordenada de preo do ponto do


grfico, o Assessor Especialista (Expert
Advisor) ou Script foi derrubado

ChartTimeOnDropped

Retorna a coordenada de tempo do ponto do


grfico, o Assessor Especialista (Expert
Advisor) ou Script foi derrubado

ChartXOnDropped

Retorna a coordenada X do ponto do grfico, o


Assessor Especialista (Expert Advisor) ou Script
foi derrubado

ChartYOnDropped

Retorna a coordenada Y do ponto do grfico, o


Assessor Especialista (Expert Advisor) ou Script

2000-2014, MetaQuotes Software Corp.

uma

1096

Operaes de Grficos

foi derrubado
ChartSetSymbolPeriod

Modifica o valor do smbolo e um perodo do


grfico especificado

ChartScreenShot

Providencia uma imagem do grfico de seu


estado atual para um formato GIF

2000-2014, MetaQuotes Software Corp.

1097

Operaes de Grficos

ChartApplyTemplate
Aplica-se um modelo especfico de um arquivo especificado para o grfico.
bool ChartApplyTemplate(
long

chart_id,

// ID Grfico

const string filename

// Nome Arquivo Modelo (Template)

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
filename
[in] O nome do arquivo contendo o modelo.
Valor do Retorno
Se um modelo aplicado com sucesso, a funo retorna como verdadeira, caso contrrio ser falsa.
Para obter uma informao sobre o erro, chamar a funo GetLastError().
Observao
O Assessor Especialista (Expert Advisor) ser descarregado e no poder ser capaz de continuar
operando em caso de carregamento bem sucedido de um novo modelo de grfico que estiver
anexado.

Usando Modelos (Templates)


Os recursos da linguagem MQL5 permitem a configurao de propriedades de mltiplos grficos,
incluindo cores usando a funo ChartSetInteger():
Cor do fundo do grfico;
Cor dos eixos, escala e da linha OHLC;
Cor da grade;
Cor de volumes e nveis de posies abertas;
Cor da barra de alta, sombra e borda da barra de alta (tambm denominado como castial ou vela de
alta);
Cor da barra de baixa, sombra e borda da barra de baixa (tambm denominado como castial ou
vela de baixa);
Cor da linha do grfico e barra Doji (tambm denominado como castial ou vela Doji);
Cor do corpo da barra de alta (tambm denominado como castial ou vela de alta);
Cor do corpo da barra de baixa (tambm denominado como castial ou vela de baixa);
Cor da linha do preo de compra;
Cor da linha do preo de venda;
Cor da linha do ltimo acordo de preo (Last);
Cor dos nveis das ordens de paradas, Parar Perda e Tomar Lucro (Stop Loss e Take Profit).

2000-2014, MetaQuotes Software Corp.

1098

Operaes de Grficos
Alm disso, pode haver mltiplos objetos grficos e indicadores sobre um grfico. Voc pode
configurar um grfico com todos os indicadores necessrios uma nica vez e salvar como um modelo
(template). Este modelo salvo poder ser aplicado em qualquer grfico.
A funo ChartApplyTemplate() destinada ao uso de um modelo (template) salvo previamente, e
pode ser usada em qualquer programa MQL5. O caminho para o arquivo que armazena o modelo
(template) passado como o segundo parmetro para o ChartApplyTemplate(). O arquivo do modelo
(template) procurado de acordo com as seguintes regras:
se a barra invertida "\" separador (escrito como "\\") colocada no incio do percurso, o modelo
(template) procurado em relao ao caminho _terminal_dados_diretrio\ MQL5 (path
_terminal_data_directory\MQL5);
se no existir uma barra invertida, o modelo procurado em relao ao arquivo executvel EX5, em
que chamado o ChartApplyTemplate();
se um modelo no encontrado nas duas primeiras variantes, a pesquisa executada na pasta
terminal_diretorio\Profiles\Templates\.
Aqui o terminal_directory a pasta onde o Terminal do Cliente MetaTrader 5 est sendo executado, e
o terminal_dados_diretrio (terminal_data_directory) a pasta em que os arquivos editveis so
armazenados, a sua localizao depende do sistema operacional,nome do usurio e as configuraes
de segurana do computador. Normalmente, eles so pastas diferentes, mas em alguns casos, eles
podem coincidir.
A localizao das pastas terminal_data_directory e terminal_directory pode ser obtida utilizando a
funo TerminalInfoString().
//--- diretrio de onde o terminal iniciado
string terminal_path=TerminalInfoString(TERMINAL_PATH);
Print("Terminal diretrio:",terminal_path);
//--- terminal dados diretrio, em que a pasta MQL5 com os EAs e indicadores esto localizados
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
Print("Terminal dados diretrio:",terminal_data_path);

Por exemplo:
//--- busca de um modelo (template) no terminal_dados_diretrio\MQL5\
ChartApplyTemplate(0,"\\primeiro_modelo.tpl"))

//--- busca de um modelo em diretrio_de_EX5_arquivo\, em seguida a pasta terminal_dados_diretrio\


ChartApplyTemplate(0,"segundo_modelo.tpl"))

//--- busca de um modelo em diretrio_de_EX5_arquivo\My_templates\, em seguida a pasta terminal_dir


ChartApplyTemplate(0,"My_templates\\terceiro_modelo.tpl"))

Os modelos no so recursos, eles no podem ser includos em um arquivo executvel EX5.


Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//---Vamos abrir e tentar aplicar o modelo 'meu_modelo.tpl'

2000-2014, MetaQuotes Software Corp.

1099

Operaes de Grficos
if(!ChartApplyTemplate(0,"meu_modelo"))
{
//--- Se no conseguir aplicar o modelo (template), ento
Print("No consegui aplicar 'meu_modelo', erro ",GetLastError());
ResetLastError();
//--- Vamos procurar apenas o arquivo 'meu_modelo', sem a extenso 'tpl'
if(FileIsExist("meu_modelo"))
Print("Arquivo 'meu_modelo' existe, mas necessria o arquivo 'meu_modelo.tpl'");
else
Print("O arquivo 'meu_modelo.tpl' no encontrado"
+TerminalInfoString(TERMINAL_PATH)
+"\\MQL5\\Files");
//---Agora vamos retornar o nome correto do arquivo com 'tpl'
if(ChartApplyTemplate(0,"meu_modelo.tpl"))
Print("'meu_modelo.tpl' aplicado com sucesso");
else
Print("No consegui aplicar 'meu_modelo', erro ",GetLastError());
}
else
{
//--- Modelo (template) armazenado no arquivo sem extenso
Print("'meu_modelo' aplicado com sucesso - arquivo sem extenso");
}
}

Tambm Veja
Recursos

2000-2014, MetaQuotes Software Corp.

1100

Operaes de Grficos

ChartSaveTemplate
Salva as configuraes atuais do grfico em um template (modelo) com um nome especificado.
bool ChartSaveTemplate(
long

chart_id,

// ID Grfico

const string filename

// Nome do arquivo para salvar o template (modelo)

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
filename
[in] O nome do arquivo para salvar o template (modelo). A extenso ".tpl" ser adicionada
automaticamente no arquivo, onde no preciso especific-lo. O template (modelo) salvo no
terminal_directory\Profiles\Templates\ e pode ser utilizado para a aplicao manual no terminal.
Se j existir um template (modelo) com o mesmo nome de arquivo, os contedos deste arquivo
sero substitudos.
Valor do Retorno
Se bem sucedida, a funo retorna true, caso contrrio ela retorna false. Para obter informao
sobre o erro, chamar a funo GetLastError().
Observao
Usando templates (modelos), voc pode salvar as configuraes de grfico com todos os indicadores
e objetos grficos aplicados, para depois aplic-los em outro grfico.
Exemplo:
//+------------------------------------------------------------------+
//|

Test_ChartSaveTemplate.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property script_show_inputs
//--- parmetros de entrada
input string

symbol="GBPUSD";

// O smbolo do novo grfico

input ENUM_TIMEFRAMES

period=PERIOD_H3; // O prazo do novo grfico

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Primeiros indicadores anexados ao grfico
int handle;

2000-2014, MetaQuotes Software Corp.

1101

Operaes de Grficos
//--- Preparar indicador para uso
if(!PrepareZigzag(NULL,0,handle)) return; // Falhou, sair
//--- Anexar o indicador ao atual grfico, mas em janela separada.
if(!ChartIndicatorAdd(0,1,handle))
{
PrintFormat("Falha para anexar no grfico %s/%s um indicador com o handle=%d. Cdigo de erro
_Symbol,
EnumToString(_Period),
handle,
GetLastError());
//--- Finalizar a operao do programa
return;
}
//--- Atualizar o grfico para ver o indicator
ChartRedraw();
//--- Encontre as duas ltimas fracturas do zigzag
double two_values[];
datetime two_times[];
if(!GetLastTwoFractures(two_values,two_times,handle))
{
PrintFormat("Falha para localizar duas ltimas fracturas no ZigZag!");
//--- Finalizar a operao do programa
return;
}
//--- Anexar agora um canal de desvio padro
string channel="StdDeviation Channel";
if(!ObjectCreate(0,channel,OBJ_STDDEVCHANNEL,0,two_times[1],0))
{
PrintFormat("Falha ao criar objeto %s. Cdigo de erro %d",
EnumToString(OBJ_STDDEVCHANNEL),GetLastError());
return;
}
else
{
//--- O canal foi criado, definir o segundo ponto
ObjectSetInteger(0,channel,OBJPROP_TIME,1,two_times[0]);
//--- Define uma dica de contexto (tooltip) para o canal
ObjectSetString(0,channel,OBJPROP_TOOLTIP,"Demonstrao no ajuda MQL5");
//--- Atualizar o grfico
ChartRedraw();
}
//--- Salve o resultado em um template (modelo)
ChartSaveTemplate(0,"StdDevChannelOnZigzag");
//--- Abrir um novo grfico e aplicar um modelo salvo a ele
long new_chart=ChartOpen(symbol,period);
//--- Habilitar uma dica de contexto (tootips) para objetos grficos
ChartSetInteger(new_chart,CHART_SHOW_OBJECT_DESCR,true);
if(new_chart!=0)
{

2000-2014, MetaQuotes Software Corp.

1102

Operaes de Grficos
//--- Aplicar uma template (modelo) salvo para o grfico
ChartApplyTemplate(new_chart,"StdDevChannelOnZigzag");
}
Sleep(10000);
}
//+------------------------------------------------------------------+
//| Cria um manipulador ziguezague e garante disponibilidade de seus dados|
//+------------------------------------------------------------------+
bool PrepareZigzag(string sym,ENUM_TIMEFRAMES tf,int &h)
{
ResetLastError();
//--- O indicador de ziguezague deve estar localizado em terminal_data_folder\MQL5\Examples
h=iCustom(sym,tf,"Examples\\Zigzag");
if(h==INVALID_HANDLE)
{
PrintFormat("%s: Falha ao criar manipulador do indicador Zigzag. Cdigo de erro %d",
__FUNCTION__,GetLastError());
return false;
}
//--- Quando criado um manipulador de indicador, requer tempo para calcular valores
int k=0; // O nmero de tentativas de espera para o clculo de indicadores

//--- Aguarda at que o clculo faa um loop (volta completa), pausando por 50 milissegundos se o c
while(BarsCalculated(h)<=0)
{
k++;
//--- Mostrar o nmero de tentativas
PrintFormat("%s: k=%d",__FUNCTION__,k);
//--- Espera 50 milissegundos at que o indicador seja calculado
Sleep(50);
//--- Se mais de 100 tentativas, ento algo est errado
if(k>100)
{
//--- Reportar um problema
PrintFormat("Falha ao calcular o indicador para %d tentativas!");
//--- Terminar a operao do programa
return false;
}
}
//--- Tudo est pronto, o indicador criado e os valores so calculados
return true;
}
//+------------------------------------------------------------------+
//|Busca para as ltimas duas fracturas de zigzag e lugar para arrays|
//+------------------------------------------------------------------+
bool GetLastTwoFractures(double &get_values[],datetime &get_times[],int handle)
{
double values[];

// Uma array para os valores de ziguezague

datetime times[];

// Uma array para obter tempo

int size=100;

// Tamanho da array

2000-2014, MetaQuotes Software Corp.

1103

Operaes de Grficos
ResetLastError();
//--- Copiar os ltimos 100 valores do indicador
int copied=CopyBuffer(handle,0,0,size,values);
//--- Conferir o nmero de valores copiados
if(copied<100)
{

PrintFormat("%s: Falha para copiar valores %d do indicador com o handle=%d. Cdigo de erro %d
__FUNCTION__,size,handle,GetLastError());
return false;
}
//--- Definir a ordem de acesso para a array como um tempo de series (timeseries)
ArraySetAsSeries(values,true);
//--- Escreva aqui o nmero de baras, em que foram encontradas fracturas
int positions[];
//--- Definir tamanhos de array
ArrayResize(get_values,3); ArrayResize(get_times,3); ArrayResize(positions,3);
//--- Contadores
int i=0,k=0;
//--- Comece a procurar por fracturas
while(i<100)
{
double v=values[i];
//--- Ns no estamos interessados em valores vazios
if(v!=0.0)
{
//--- Relembra o nmero de barras
positions[k]=i;
//--- Relembra o valor do zigzag sobre a fractura
get_values[k]=values[i];
PrintFormat("%s: Zigzag[%d]=%G",__FUNCTION__,i,values[i]);
//--- Aumentar o contador
k++;
//--- Se duas fraturas encontrados, quebrar o loop (ciclo)
if(k>2) break;
}
i++;
}
//--- Definir a ordem de acesso s arrays como nas sries de tempo (timeseries)
ArraySetAsSeries(times,true);

ArraySetAsSeries(get_times,true);

if(CopyTime(_Symbol,_Period,0,size,times)<=0)
{
PrintFormat("%s: Falha ao copiar valores %d a partir CopyTime(). Cdigo de erro %d",
__FUNCTION__,size,GetLastError());
return false;
}
//--- Abra o tempo da abertura da barra, que ocorreu nas duas ltias fracturas

get_times[0]=times[positions[1]];// O ltimo, mas um valor ser escrito como a primeira fractura


get_times[1]=times[positions[2]];// O valor em terceiro lugar, a partir do final ser a segunda
PrintFormat("%s: primeiro=%s,

segundo=%s",__FUNCTION__,TimeToString(get_times[1]),TimeToString(

2000-2014, MetaQuotes Software Corp.

1104

Operaes de Grficos
//--- Bem sucedido
return true;
}

Tambm Veja
ChartApplyTemplate(), Recursos

2000-2014, MetaQuotes Software Corp.

1105

Operaes de Grficos

ChartWindowFind
A funo retorna o nmero para uma sub-janela quando um indicador desenhado. Existem 2
variantes da funo.
1. As pesquisas de funo no grfico indicado para a sub-janela especificado com o "nome abreviado"
do indicador (o nome abreviado exibida na parte superior esquerda da sub-janela), e retorna o
nmero da sub-janela em caso de sucesso.
int ChartWindowFind(
long

chart_id,

// identificar grfico

string

indicator_shortname

// nome abreviado do indicador, veja INDICATOR_SHORTNAME

2. A funo deve ser chamado a partir de um indicador personalizado. Retorna o nmero de uma subjanela onde um indicador est funcionando.
int ChartWindowFind();

Parmetros
chart_id
[in] ID Grfico. 0 (zero) indica a sub-janela grfico principal.
indicator_shortname
[in] Nome abreviado do indicador.
Valor do Retorno
Nmero da sub-janela em caso de sucesso. Em caso de falha a funo retorna -1.
Observao
Se a segunda variante da funo (sem parmetros) chamado de um script ou Expert Advisor, a
funo retorna -1.
No confundir o nome abreviado de um indicador e um nome de arquivo, que especificado quando
o indicador criado usando as funes iCustom() e IndicatorCreate(). Se o nome abreviado de um
indicador no definido de forma explicita, ento o nome do arquivo contendo o cdigo-fonte do
indicador ser especificado durante a compilao.
importante para formar corretamente o nome abreviado de um indicador, que registrado na
propriedade INDICATOR_SHORTNAME usando a funo IndicatorSetString(). recomendado que o
nome abreviado deve conter valores de todos os parmetros de entrada do indicador, porque sendo
o indicador excludo do grfico pela funo ChartIndicatorDelete(), ele identificado pelo nome
abreviado.
Exemplo:
#property script_show_inputs
//--- parmetros de entrada
input string

shortname="MACD(12,26,9)";

//+------------------------------------------------------------------+
//| Retorna o mmero da janela do grfico com este indicador

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1106

Operaes de Grficos
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
{
int window=-1;
//--if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
{
//--- a funo chamada a partir do indicador, o nome no necessrio
window=ChartWindowFind();
}
else
{
//--- a funo chamada a partir de um Expert Advisor ou script
window=ChartWindowFind(0,short_name);
if(window==-1) Print(__FUNCTION__+"(): Erro = ",GetLastError());
}
//--return(window);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--int window=GetIndicatorSubWindowNumber(0,shortname);
if(window!=-1)
Print("Indicador "+shortname+" est na janela #"+(string)window);
else
Print("Indicador "+shortname+" no foi encontrado. window = "+(string)window);
}

Tambm Veja
ObjectCreate(), ObjectFind()

2000-2014, MetaQuotes Software Corp.

1107

Operaes de Grficos

ChartTimePriceToXY
Converte as coordenadas do grfico a partir da representao tempo/preo para as coordenadas X e Y.
bool ChartTimePriceToXY(
long

chart_id,

// ID Grfico

int

sub_window,

// O nmero de sub-janelas

datetime

time,

// Tempo do Grfico

double

price,

// Preo no grfico

int&

x,

// A coordenada X para o tempo no grfico

int&

// A coordenada Y para o tempo no grfico

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
sub_window
[in] O numero da sub-janela do grfico. 0 (zero) significa a principal janela do grfico.
time
[in] O valor do tempo do grfico, valores em pixels para o qual vai ser recebido ao longo do eixo
X. A origem est no canto superior esquerdo da janela/sub-janela.
price
[in] O valor do preo no grfico, valores em pixels para o qual vai ser recebido ao longo do eixo
Y. A origem est no canto superior esquerdo da janela/sub-janela.
x
[out] A varivel, dentro do qual a converso do tempo para X ser recebida.
y
[out] A varivel, dentro do qual a converso do preo para Y ser recebida.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informao sobre o erro, chamar a
funo GetLastError().
Tambm Veja
ChartXYToTimePrice()

2000-2014, MetaQuotes Software Corp.

1108

Operaes de Grficos

ChartXYToTimePrice
Converte as coordenadas X e Y no grfico para os valores de tempo e preo.
bool ChartXYToTimePrice(
long

chart_id,

// ID Grfico

int

x,

// A coordenada X no Grfico

int

y,

// A coordenada Y no Grfico

int&

sub_window,

// O numero da sub-janela

datetime&

time,

// Tempo no grfico

double&

price,

// Preo no grfico

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
x
[in] A coordenada X.
y
[in] A coordenada Y.
sub_window
[out] A varivel, em que o nmero de sub-janela grfico ser escrito. 0 (zero) significa a principal
janela do grfico.
time
[out] O valor do tempo do grfico, valores em pixels para o qual vai ser recebido ao longo do eixo
X. A origem est no canto superior esquerdo da janela/sub-janela.
price
[out] O valor do preo no grfico, valores em pixels para o qual vai ser recebido ao longo do eixo
Y. A origem est no canto superior esquerdo da janela/sub-janela.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informao sobre o erro, chamar a
funo GetLastError().
Exemplo:
//--- Manipuladores (handles) dos indicadores
int handle_macd,handle_trix;
//--- Os nmeros das sub-janelas do indicador
int win_macd,win_trix;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{

2000-2014, MetaQuotes Software Corp.

1109

Operaes de Grficos
//---Cria a linha horizontal da cruz-alvo (crosshair)
ObjectCreate(0,"H Line",OBJ_HLINE,0,0,0);
//--- Cria a linha vertical da cruz-alvo (crosshair)
ObjectCreate(0,"V Line",OBJ_VLINE,0,0,0);
//--- Defina os valores zero para os manipuladores (handles)
handle_macd=0;
handle_trix=0;
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Exclui a cruz-alvo (crosshair)
ObjectDelete(0,"H Line");
ObjectDelete(0,"V Line");
//--- Exclui o comentrio
Comment("");
//--- Exclui indicadores
ChartIndicatorDelete(0,win_macd,ChartIndicatorName(0,win_macd,0));
ChartIndicatorDelete(0,win_trix,ChartIndicatorName(0,win_trix,0));
}
//+------------------------------------------------------------------+
//| Funo ChartEvent

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- Mostra os parmetros do evento no grfico
Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);
//--- Se este um evento de um mouse clicando no grfico
if(id==CHARTEVENT_CLICK)
{
//--- Preparar variveis
int

int

datetime dt

=(int)lparam;
=(int)dparam;
=0;

double

price =0;

int

window=0;

//--- Converter as coordenadas X e Y em termos de data/hora


if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
PrintFormat("Janela=%d X=%d

Y=%d

=>

Tempo=%s

Preo=%G",window,x,y,TimeToString(dt),pri

//--- Executar a converso inversa: (X,Y) => (Tempo,Preo)


if(ChartTimePriceToXY(0,window,dt,price,x,y))

2000-2014, MetaQuotes Software Corp.

1110

Operaes de Grficos
PrintFormat("Tempo=%s

Preo=%G

=>

X=%d

Y=%d",TimeToString(dt),price,x,y);

else
Print("ChartTimePriceToXY cdigo de erro de retorno: ",GetLastError());
//--- Defina a coordenada de tempo para a linha vertical da cruz-alvo (crosshair)
ObjectSetInteger(0,"V Line",OBJPROP_TIME,dt);
//--- Descobrir em que janela a linha horizontal da cruz-alvo (crosshair) est
int h_line_window=ObjectFind(0,"H Line");
//--- Se a nova janela da linha horizontal no corresponde a atual
if(h_line_window!=window)
{
//--- Excluir a linha de uma janela e cri-la em uma outra
ObjectDelete(0,"H Line");
ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
}
//--- Definir a coordenada preo para a linha horizontal da cruz-alvo (crosshair)
ObjectSetDouble(0,"H Line",OBJPROP_PRICE,window,price);
ChartRedraw(0);
}
else
Print("ChartXYToTimePrice cdigo de erro de retorno: ",GetLastError());
Print("+--------------------------------------------------------------+");
}
//--- Criar um par de indicadores em sub-janelas separadas para ter um exemplo completo
if(handle_macd==0 || handle_macd==INVALID_HANDLE)
{
handle_macd=iMACD(_Symbol,_Period,12,26,9,PRICE_CLOSE);
//--- Se o manipulador (handle) foi criado com sucesso
if(handle_macd!=INVALID_HANDLE)
{
//--- Descobrir o nmero total de janelas no grfico
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- Adicionar um indicador para o grfico em uma nova sub-janela e lembrar do ndice da
if(ChartIndicatorAdd(0,windows,handle_macd)) win_macd=windows;
}
}
//--- Criar o segundo indicador e adicion-lo ao grfico
if(handle_trix==0 || handle_trix==INVALID_HANDLE)
{
handle_trix=iTriX(_Symbol,_Period,14,PRICE_CLOSE);
if(handle_trix!=INVALID_HANDLE)
{
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
if(ChartIndicatorAdd(0,windows,handle_trix)) win_trix=windows;
}
}
}

Tambm Veja
ChartTimePriceToXY()
2000-2014, MetaQuotes Software Corp.

1111

Operaes de Grficos

ChartOpen
Abre um novo grfico com o smbolo e perodo especificado.
long ChartOpen(
string

symbol,

ENUM_TIMEFRAMES period

// Nome Simbolo
// Perodo

);

Parmetros
symbol
[in] Simbolo do grfico. NULL significa o smbolo do grfico de corrente (Expert Advisor
anexado).
period
[in] Perodo do Grfico (Prazo). Pode ser um dos valores de ENUM_TIMEFRAMES. 0 (zero) significa
o perodo do atual grfico.
Valor do Retorno
Se com sucesso, retorna abertura do ID grfico. Do contrrio retorna 0(zero).
Observao
O nmero mximo possvel de cartas abertas simultaneamente no terminal no pode exceder o
valor CHARTS_MAX.

2000-2014, MetaQuotes Software Corp.

1112

Operaes de Grficos

ChartFirst
Retorna o ID do primeiro grfico do terminal de cliente.
long ChartFirst();

Valor do Retorno
ID Grfico.

2000-2014, MetaQuotes Software Corp.

1113

Operaes de Grficos

ChartNext
Retorna o ID do grfico do prximo grfico para um especificado.
long ChartNext(
long chart_id

// ID grfico

);

Parmetros
chart_id
[in] ID Grfico. 0 (zero) no significa o quadro atual. 0 (zero) significa "retornar o ID do primeiro
grfico".
Valor do Retorno
ID Grfico. Se este for o fim da lista de grfico, ele retorna -1.
Exemplo:
//--- variveis para ID grfico
long currChart,prevChart=ChartFirst();
int i=0,limit=100;
Print("ChartFirst =",ChartSymbol(prevChart)," ID =",prevChart);
while(i<limit)// Temos certamente no mais do que 100 grficos abertos
{
currChart=ChartNext(prevChart); // Obter o ID do novo grfico usando o ID grfico anterior
if(currChart<0) break;

// Ter atingido o fim da lista de grfico

Print(i,ChartSymbol(currChart)," ID =",currChart);
prevChart=currChart;// vamos salvar o ID do grfico atual para o ChartNext()
i++;// No esquea de aumentar o contador
}

2000-2014, MetaQuotes Software Corp.

1114

Operaes de Grficos

ChartClose
Fechando um grfico especificado.
bool ChartClose(
long chart_id=0

// ID grfico

);

Parmetros
chart_id=0
[in] ID Grfico. Significa o grfico atual.
Valor do Retorno
Se com sucesso, retorna true, caso contrrio false.

2000-2014, MetaQuotes Software Corp.

1115

Operaes de Grficos

ChartSymbol
Retorna o nome do smbolo do grfico especificado.
string ChartSymbol(
long chart_id=0

// ID grfico

);

Parmetros
chart_id=0
[in] ID Grfico. Significa o grfico atual.
Valor do Retorno
Se o grfico no existe, o resultado ser uma string (seqncia) vazia.
Tambm Veja
ChartSetSymbolPeriod

2000-2014, MetaQuotes Software Corp.

1116

Operaes de Grficos

ChartPeriod
Retorna o prazo doperiodo do grfico especificado.
ENUM_TIMEFRAMES ChartPeriod(
long chart_id=0

// ID grfico

);

Parmetros
chart_id=0
[in] ID Grfico. Significa o grfico atual.
Valor do Retorno
A funo retorna um valor de ENUM_TIMEFRAMES. Se grfico no existir retorna 0 (zero).

2000-2014, MetaQuotes Software Corp.

1117

Operaes de Grficos

ChartRedraw
Chama um redesenho forado de um grfico especificado.
void ChartRedraw(
long chart_id=0

// ID grfico

);

Parmetros
chart_id=0
[in] ID Grfico. Significa o grfico atual.
Observao
Normalmente utilizado aps mudar a propriedade do objeto.
Tambm Veja
Funes de objetos

2000-2014, MetaQuotes Software Corp.

1118

Operaes de Grficos

ChartSetDouble
Define um valor para a propriedade de correspondncia de um grfico especificado. Propriedade de
grfico deve ser do tipo double.
bool ChartSetDouble(
long

chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

double value

// Valor

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in] ID Propriedade do grfico. Pode ser um valores de ENUM_CHART_PROPERTY_DOUBLE (exceto
apenas a leitura das propriedades).
value
[in] Valor da Propriedade.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.

2000-2014, MetaQuotes Software Corp.

1119

Operaes de Grficos

ChartSetInteger
Define um valor para a propriedade de correspondncia de um grfico especificado. Propriedade do
grfico deve obrigatoriamente ser datetime,int,color,boolouchar.
bool ChartSetInteger(
long

chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade>

long

value

// Valor

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in] ID Propriedade do grfico. Pode ser um valores de ENUM_CHART_PROPERTY_INTEGER (exceto
apenas a leitura das propriedades).
value
[in] Valor de propriedade.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.

2000-2014, MetaQuotes Software Corp.

1120

Operaes de Grficos

ChartSetString
Define um valor para a propriedade de correspondncia de um grfico especificado. Propriedade de
Grfico deve ser do tipo string (seqncia).
bool ChartSetString(
long chart_id,

// ID Grfico

int

// ID Propriedade

prop_id,

string

str_value

// Valor

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in] ID Propriedade do grfico. Pode ser um valores de ENUM_CHART_PROPERTY_STRING (exceto
apenas a leitura das propriedades).
str_value
[in] Valor de propriedade string. Comprimento da seqncia no pode exceder 2045 caracteres
(caracteres extras sero truncados).
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
ChartSetString pode ser usado para um comentrio de sada no grfico ao invs da funo
Comment.
Exemplo:
void OnTick()
{
//--double Ask,Bid;
int Spread;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
string comment=StringFormat("Imprimindo preos:\nAsk = %G\nBid = %G\nSpread = %d",
Ask,Bid,Spread);
ChartSetString(0,CHART_COMMENT,comment);
}

Tambm Veja
Comment, ChartGetString

2000-2014, MetaQuotes Software Corp.

1121

Operaes de Grficos

ChartGetDouble
Retorna o valor de uma propriedade correspondente do grfico especificado. Propriedade do grfico
deve ser do tipo double. Existem duas variantes das chamadas desta funo.
1. Retorna diretamente o valor da propriedade.
double ChartGetDouble(
long chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

int

sub_window=0

// nmero da sub-janela, se necessrio

);

2. Retorna true ou false, dependendo do sucesso na execuo da funo. Se for bem sucedido, o valor
da propriedade colocado num alvo varivel double_var passado como referncia.
bool ChartGetDouble(
long

chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

int

sub_window,

// Nmero da sub-janela

double&double_var

// Alvo varivel para a propriedade de grfico

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in]
ID Propriedade do
grfico.
ENUM_CHART_PROPERTY_DOUBLE.

Este

valor

pode

ser

um

dos

valores

sub_window
[in] Nmero de sub-janela do grfico. Para o primeiro caso, o valor padro 0 (janela do grfico
principal). A maioria das propriedades no requerem uma nmero de sub-janela.
double_var
[out] Varivel alvo de tipo double (duplo) para a propriedade solicitada.
Valor do Retorno
Valor de tipo double.
Para a segunda chamada caso retorne verdadeiro (true) se a propriedade especificada est
disponvel e seu valor foi armazenado dentro da varivel double_var, caso contrrio retorna false.
Para obter uma informao adicional sobre o erro, necessrio chamar a funo GetLastError().
Exemplo:
void OnStart()
{
double priceMin=ChartGetDouble(0,CHART_PRICE_MIN,0);
double priceMax=ChartGetDouble(0,CHART_PRICE_MAX,0);

2000-2014, MetaQuotes Software Corp.

1122

Operaes de Grficos
Print("CHART_PRICE_MIN =",priceMin);
Print("CHART_PRICE_MAX =",priceMax);
}

2000-2014, MetaQuotes Software Corp.

1123

Operaes de Grficos

ChartGetInteger
Retorna o valor de uma propriedade correspondente do grfico especificado. Propriedade do grfico
obrigatrio ser do tipo datetime,intoubool . Existem duas variantes das chamadas desta funo.
1. Retorna diretamente o valor da propriedade.
long ChartGetInteger(
long chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

int

sub_window=0

// nmero da sub-janela, se necessrio

);

2. Retorna true ou false, dependendo do sucesso na execuo da funo. Se for bem sucedido, o valor
da propriedade colocado num alvo varivel long_var passado como referncia.
bool ChartGetInteger(
long

chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

int

sub_window,

// Nmero da sub-janela

long&

long_var

// Alvo varivel para a propriedade

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in]
ID Propriedade do
grfico.
ENUM_CHART_PROPERTY_INTEGER.

Este

valor

pode

ser

um

dos

valores

sub_window
[in] Nmero de sub-janela do grfico. Para o primeiro caso, o valor padro 0 (janela do grfico
principal). A maioria das propriedades no requerem uma nmero de sub-janela.
long_var
[out] Alvo varivel do tipo long para a propriedade solicitada.
Valor do Retorno
Valor de tipo long.
Para a segunda chamada caso retorne true se a propriedade especificada est disponvel e seu valor
foi armazenado dentro da varivel long_var, caso contrrio retorna false. Para obter uma
informao adicional sobre o error, necessrio chamar a funo GetLastError().
Exemplo:
void OnStart()
{
int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
int width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

2000-2014, MetaQuotes Software Corp.

1124

Operaes de Grficos
Print("CHART_HEIGHT_IN_PIXELS =",height,"pixels");
Print("CHART_WIDTH_IN_PIXELS =",width,"pixels");
}

2000-2014, MetaQuotes Software Corp.

1125

Operaes de Grficos

ChartGetString
Retorna o valor de uma propriedade correspondente do grfico especificado. Propriedade de Grfico
deve ser do tipo string. Existem duas variantes das chamadas desta funo.
1. Retorna diretamente o valor da propriedade.
string ChartGetString(
long chart_id,

// ID Grfico

int

// ID Propriedade

prop_id

);

2. Retorna true ou false, dependendo do sucesso na execuo da funo. Se for bem sucedido, o valor
da propriedade colocado num alvo varivel string_var passado como referncia.
bool ChartGetString(
long

chart_id,

// ID Grfico

int

prop_id,

// ID Propriedade

string&string_var

// Alvo varivel para a propriedade

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
prop_id
[in]
ID Propriedade do
grfico.
ENUM_CHART_PROPERTY_STRING.

Este

valor

pode

ser

um

dos

valores

string_var
[out] Alvo varivel do tipo string para a propriedade solicitada.
Valor do Retorno
Valor de tipo string.
Para a segunda chamada caso retorne true se a propriedade especificada est disponvel e seu valor
foi armazenado dentro da varivel string_var, caso contrrio retorna false. Para obter uma
informao adicional sobre o error, necessrio chamar a funo GetLastError().
Observao
ChartGetString pode ser usado para leitura dos comentrios plotados no grfico usando funes
Comment ou ChartSetString.
Exemplo:
void OnStart()
{
ChartSetString(0,CHART_COMMENT,"Comentrio de teste.\nSegunda linha.\nTerceira!");
ChartRedraw();
Sleep(1000);
string comm=ChartGetString(0,CHART_COMMENT);

2000-2014, MetaQuotes Software Corp.

1126

Operaes de Grficos
Print(comm);
}

Tambm Veja
Comment, ChartSetString

2000-2014, MetaQuotes Software Corp.

1127

Operaes de Grficos

ChartNavigate
Executa deslocamento do grfico especificado pelo nmero especificado de barras em relao a
posio especificada no grfico.
bool ChartNavigate(
long chart_id,

// ID Grfico

int

position,

// Posio

int

shift=0

// Valor deslocamento

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
position
[in]
Posio do grfico para realizar um deslocamento. Pode ser um dos
ENUM_CHART_POSITION.

valores

shift=0
[in] Nmero de barras para deslocar o grfico. Valor positivo significa que o deslocamento para
a direita (para o fim do grfico), o valor negativo significa que o desvio para a esquerda (para o
incio do grfico). O deslocamento zero pode ser usado para navegar ao incio ou para ao fim do
grfico.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- manipular grfico atual
long handle=ChartID();
string comm="";
if(handle>0) //se bem sucedida, configurar o grfico
{
//--- desabilitar auto rolagem
ChartSetInteger(handle,CHART_AUTOSCROLL,false);
//--- definir uma mudana da margem direita do grfico
ChartSetInteger(handle,CHART_SHIFT,true);
//--- desenhar castiais
ChartSetInteger(handle,CHART_MODE,CHART_CANDLES);
//--- definir o modo de exibio para volume de tick (ponto)
ChartSetInteger(handle,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
//--- preparar um texto para a sada em Comment()

2000-2014, MetaQuotes Software Corp.

1128

Operaes de Grficos
comm="Rolar 10 barras para a direita do comeo do histrico";
//--- mostrar comentrio
Comment(comm);
//--- rolar 10 barras para a direita do comeo do histrico
ChartNavigate(handle,CHART_BEGIN,10);

//--- comear com o nmero da primeira barra visvel no grfico (numerao como em srie de t
long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//--- adicionar linha de caractere
comm=comm+"\r\n";
//--- adicionar comentrio
comm=comm+"A primeira barra o nmero no grfico "+IntegerToString(first_bar)+"\r\n";
//--- mostrar comentrio
Comment(comm);
//--- aguardar 5 segundos para ver como o grfico se move
Sleep(5000);
//--- adicionar texto de cometrio
comm=comm+"\r\n"+"Rolar 10 barras para a esquerda da margem direita do grfico";
Comment(comm);
//--- rolar 10 barras para a esquerda da margem direita do grfico
ChartNavigate(handle,CHART_END,-10);

//--- comear com o nmero da primeira barra visvel no grfico (numerao como em srie de t
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+"\r\n";
comm=comm+"A primeira barra o nmero no grfico "+IntegerToString(first_bar)+"\r\n";
Comment(comm);
//--- aguardar 5 segundos para ver como o grfico se move
Sleep(5000);
//--- novo bloco de rolagem do grfico
comm=comm+"\r\n"+"Rolar 300 barras para a direita do incio do histrico";
Comment(comm);
//--- rolar 300 barras para a direita do incio do histrico
ChartNavigate(handle,CHART_BEGIN,300);
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+"\r\n";
comm=comm+"A primeira barra o nmero no grfico "+IntegerToString(first_bar)+"\r\n";
Comment(comm);
//--- aguardar 5 segundos para ver como o grfico se move
Sleep(5000);
//--- novo bloco de rolagem do grfico
comm=comm+"\r\n"+"Rolar 300 barras para a esquerda da margem direita do grfico";
Comment(comm);
//--- rolar 300 barras esquerda da margem direita do grfico
ChartNavigate(handle,CHART_END,-300);
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+"\r\n";
comm=comm+"A primeira barra o nmero no grfico "+IntegerToString(first_bar)+"\r\n";

2000-2014, MetaQuotes Software Corp.

1129

Operaes de Grficos
Comment(comm);
}
}

2000-2014, MetaQuotes Software Corp.

1130

Operaes de Grficos

ChartID
Retorna o ID do grfico atual.
long ChartID();

Valor do Retorno
Valor tipo long.

2000-2014, MetaQuotes Software Corp.

1131

Operaes de Grficos

ChartIndicatorAdd
Adiciona um indicador com o identificador especificado para uma janela de grfico especificado.
Indicador e grfico devem ser gerados sobre o mesmo smbolo e prazo.
bool ChartIndicatorAdd(
long chart_id,

// ID Grfico

int

sub_window

// nmero da sub-janela

int

indicator_handle

// manipulador do indicador

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
sub_window
[in] O nmero de sub-janelas do grfico. 0 (zero) significa a principal janela do grfico. Para
adicionar um indicador em uma nova janela,o parmetro obrigatoriamente deve ser maior do que
o ndice da ltima janela existente, isto , igual a CHART_WINDOWS_TOTAL. Se o valor do
parmetro maior que CHART_WINDOWS_TOTAL, uma nova janela no ser criada, e o indicador
no ser adicionado.
indicator_handle
[in] O identificador do indicador.
Valor do Retorno
A funo retorna verdadeira (true) em caso de sucesso, caso contrrio ela retorna false. A fim de
obter informao sobre erro, chama a funo GetLastError(). Erro 4114 significa que o grfico e um
indicador adicionado difere pelo seus smbolos ou prazo.
Observao
Se um indicador deve ser elaborado numa sub-janela separada (por exemplo, construindo um iMACD
ou um indicador personalizado com propriedade especificada #property indicator_separate_window)
aplicada janela de grfico principal,no pode ser visvel embora ainda estar presente na lista
de indicadores. Isto significa que a escala do indicador diferente da escala do grfico de preo, e
aplicado ao valor do indicador no se enquadra na faixa visualizada do grfico de preo. Neste
caso, GetLastError() retorna cdigo zero indicando a ausncia de um erro. Os valores de tal
indicador "invisvel" pode ser visto na Janela de Dados (Data Window) e recebidos a partir de outras
aplicaes MQL5.
Exemplo:
#property description "Expert Advisor demonstrando o trabalho com a funo ChartIndicatorAdd()."
#property description "Aps o lanamento no grfico (e receber o erro no Jornal), abrir"

#property description "Propriedades do Expert Advisor e especificar <smbolo> correto e os parmetr


#property description "Indicador MACD sera adicionado no grafico."
//--- parmetros de entrada
input string

symbol="AUDUSD";

input ENUM_TIMEFRAMES period=PERIOD_M12;

// nome do smbolo
// time frame

2000-2014, MetaQuotes Software Corp.

1132

Operaes de Grficos
input int

fast_ema_period=12;

// perodo rpido MACD

input int

slow_ema_period=26;

// perodo lento MACD

input int

signal_period=9;

// perodo de sinal

input ENUM_APPLIED_PRICE apr=PRICE_CLOSE; // tipo de preo para clculo do iMACD


int indicator_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
//--- tentar adicionar o indicador no grfico
if(!AddIndicator())
{
//--- Funo AddIndicator() recusou acrescentar o indicador no grfico
int answer=MessageBox("Voc quer adicionar MACD do grfico de qualquer maneira?",
"Smbolo e/ou prazo de tempo incorreto para adicionar o indicador",
MB_YESNO // "Sim" e "No" botes de seleo ser mostrado
);
//--- se um usurio ainda insiste no uso incorreto de ChartIndicatorAdd()
if(answer==IDYES)
{
//--- em primeiro lugar, uma entrada jornal ser publicado sobre isso

PrintFormat("Ateno! %s: Tentando adicionar indicador MACD(%s/%s) em grfico %s/%s. Receb


__FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));

//---receber o nmero de uma nova sub-janela, para a qual vamos tentar adicionar o indicad
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- agora faz uma tentativa fadada a falhar
if(!ChartIndicatorAdd(0,subwindow,indicator_handle))

PrintFormat("Falha ao adicionar o indicador MACD %d na janela do grfico. Cdigo de err


subwindow,GetLastError());
}
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
// Assessor especialista (expert advisor) no executa nada
}
//+------------------------------------------------------------------+
//| Funo para verificar e adicionar o indicador no grfico

//+------------------------------------------------------------------+
bool AddIndicator()

2000-2014, MetaQuotes Software Corp.

1133

Operaes de Grficos
{
//--- mensagem exibida
string message;
//--- verificar se o smbolo do indicador e smbolo do grfico combinam entre si
if(symbol!=_Symbol)
{
message="Exibindo o uso da funo Demo_ChartIndicatorAdd():";
message=message+"\r\n";

message=message+"No possvel adicionar o indicador calculado com outro smbolo no grfico.


message=message+"\r\n";

message=message+"Especifique o smbolo grfico na propriedade do Expert Advisor - "+_Symbol+"


Alert(message);
//---sada prematura, o indicador no ser adicionado no grfico
return false;
}
//--- verificar se o indicador e prazo do grfico combinam entre si
if(period!=_Period)
{

message="No possvel adicionar o indicador calculado em outro prazo de tempo no grfico.";


message=message+"\r\n";
message=message+"Especifique o prazo de tempo do grfico na propriedades do Expert Advisor Alert(message);
//---sada prematura, o indicador no ser adicionado no grfico
return false;
}
//--- todas verificaes completadas, simbolo e prazo do indicador corresponde ao grfico
if(indicator_handle==INVALID_HANDLE)
{
Print(__FUNCTION__,"

Criando indicador MACD");

indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
if(indicator_handle==INVALID_HANDLE)
{
Print("Falha para criar indicador MACD. Cdigo de erro ",GetLastError());
}
}
//--- redefine o cdigo de erro
ResetLastError();
//--- aplicar o indicador para o grfico
Print(__FUNCTION__,"

Adicionando indicador MACD no grfico");

Print("MACD gerada em ",symbol,"/",EnumToString(period));


//---receber o nmero de uma nova sub-janela, para o qual adicionado o indicador MACD
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
PrintFormat("Adicionado indicador MACD na janela do grfico %d",subwindow);
if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
{

PrintFormat("Falha para adicionar indicador MACD na janela do grfico %d. Cdigo de erro %d",
subwindow,GetLastError());
}
//--- indicador adicionado com sucesso

2000-2014, MetaQuotes Software Corp.

1134

Operaes de Grficos
return(true);
}

Veja tambm
ChartIndicatorDelete(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate()

2000-2014, MetaQuotes Software Corp.

1135

Operaes de Grficos

ChartIndicatorDelete
Remove um indicador com um nome especificado a partir de janela do grfico especificado.
bool ChartIndicatorDelete(
long

chart_id,

// ID Grfico

int

sub_window

// nmero da sub-janela

const string

indicator_shortname

// nome abreviado do indicador

);

Parmetros
chart_id
[in] ID Grfico. 0 (zero) indica a sub-janela grfico principal.
sub_window
[in] Nmero de sub-janela do grfico. 0 (zero) indica o sub-janela grfico principal.
const indicator_shortname
[in] O nome abreviado do indicador que definido na propriedade do INDICATOR_SHORTNAME
com a funo IndicatorSetString(). Para obter o nome abreviado de um indicador usar a funo
ChartIndicatorName().
Valor do Retorno
Retorna true em caso de sucesso deletando o indicador. Do contrrio ele retorna false. Para obter
detalhes do erro use a funo GetLastError().
Observao
Se houver dois indicadores com nove abreviados iguais na subjanela do grfico, o primeiro da linha
ser deletado.
Se outros indicadores neste grfico so baseadas nos valores do indicador que est sendo deletado,
estes indicadores tambm sero deletados.
No confundir o nome abreviado do indicador e o nome do arquivo que especificado ao criar um
indicador usando as funes iCustom() e IndicatorCreate(). Se o nome abreviado de um indicador
no definido de forma explicita, o nome do arquivo contendo o cdigo-fonte do indicador ser
especificado durante a compilao.
Deletando um indicador de um grfico no significa que seu clculo ser excludo da me mria do
terminal. Para liberar o manuseio do indicador usar a funo IndicatorRelease().
Nome abreviado do
indicador deve ser formado
corretamente. a
propriedade
INDICATOR_SHORTNAME ser escrita usando a funoIndicatorSetString(). S recomendado que o
nome abreviado deve conter valores de todos os parmetros de entrada do indicador, porque sendo
o indicador excludo do grfico pela funo ChartIndicatorDelete(), ele identificado pelo nome
abreviado.
Exemplo de excluso de um indicador aps inicializao ter falhado:
//+------------------------------------------------------------------+
//|

Demo_ChartIndicatorDelete.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

2000-2014, MetaQuotes Software Corp.

1136

Operaes de Grficos
//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar Histograma


#property indicator_label1

"Histogram"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

first_param=1;

input int

second_param=2;

input int

third_param=3;

input bool

wrong_init=true;

//--- buffers do indicador


double

HistogramBuffer[];

string

shortname;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
int res=INIT_SUCCEEDED;
//---Vincular a array HistogramBuffer para a buffer (memria temporria) do indicador
SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA);
//--- Construir um nome abreviado de indicador baseado nos parmetro de entrada
shortname=StringFormat("Demo_ChartIndicatorDelete(%d,%d,%d)",
first_param,second_param,third_param);
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- Se a concluso forada de um indicador est definida, retornar um valor no-zero
if(wrong_init) res=INIT_FAILED;
return(res);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[],

2000-2014, MetaQuotes Software Corp.

1137

Operaes de Grficos
const long &volume[],
const int &spread[])
{
//--- Posio de partida para trabalhar num loop
int start=prev_calculated-1;
if(start<0) start=0;
//--- Preencher o buffer do indicador com valores
for(int i=start;i<rates_total;i++)
{
HistogramBuffer[i]=close[i];
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Um processador do evento de desinicializada (Deinit)

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
PrintFormat("%s: Cdigo de razo de finalizao=%d",__FUNCTION__,reason);
if(reason==REASON_INITFAILED)
{

PrintFormat("Um indicador com um nome abreviado %s (arquivo %s) se exclui do grfico",shortna


int window=ChartWindowFind();
bool res=ChartIndicatorDelete(0,window,shortname);
//--- Analisar o resultado de chamada de ChartIndicatorDelete()
if(!res)
{
PrintFormat("Falha para deletar o indicador %s partir da janela #%d. Cdigo de erro %d",
shortname,window,GetLastError());
}
}
}

Tambm Veja
ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(),
IndicatorSetString()

2000-2014, MetaQuotes Software Corp.

1138

Operaes de Grficos

ChartIndicatorGet
Retorna o manuseio do indicador com nome abreviado especificado na janela do grfico especificado.
int ChartIndicatorGet(
long

chart_id,

// ID grfico\

int

sub_window

// O numero da sub-janela

const string

indicator_shortname

// Nome abreviado do indicador

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
sub_window
[in] O numero da sub-janela do grfico. 0 (zero) significa a principal janela do grfico.
const indicator_shortname
[in] O nome abreviado do indicador que definido na propriedade INDICATOR_SHORTNAME ser
escrita usando a funo IndicatorSetString(). Para obter o nome abreviado de um indicador usar a
funo ChartIndicatorName().
Valor do Retorno
A funo retorna bem sucedida, caso contrrio retorna INVALID_HANDLE. Para obter informaes
sobre o erro, chame a funo GetLastError().
Observao
Ao criar um indicador, tenha cuidado para formar sua abreviao, o que est escrito na propriedade
INDICATOR_SHORTNAME usando a funo IndicatorSetString(). recomendado que o nome
abreviado deve conter valores de todos os parmetros de entrada do indicador, porque sendo o
indicador excludo do grfico pela funo ChartIndicatorGet() ele identificado pelo nome
abreviado.
Outra forma de identificar o indicador obtendo uma lista de seus parmetros para um
manipulador, usando a funo IndicatorParameters() e, em seguida, analisar os valores obtidos.
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- O nmero de janelas no grfico (ao menos uma janela principal est sempre presente)
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- Verifique todas as janelas
for(int w=0;w<windows;w++)
{
//--- o nmero de indicadores nesta janela/sub-janela
int total=ChartIndicatorsTotal(0,w);

2000-2014, MetaQuotes Software Corp.

1139

Operaes de Grficos
//--- Passar por todos os indicadores na janela
for(int i=0;i<total;i++)
{
//--- obtm o nome abreviado do indicador
string name=ChartIndicatorName(0,w,i);
//--- obter o manipulador (handle) de um indicador
int handle=ChartIndicatorGet(0,w,name);
//--- Adicionar o log
PrintFormat("Janela=%d,

ndice=%d,

Nome=%s,

manipulador (handle)=%d",w,i,name,handle);

}
}
}

Tambm Veja
ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), IndicatorParameters()

2000-2014, MetaQuotes Software Corp.

1140

Operaes de Grficos

ChartIndicatorName
Retorna o nome abreviado do indicador pelo nmero na lista de indicadores sobre a janela do grfico
especificado.
string ChartIndicatorName(
long chart_id,

// ID grfico

int

sub_window

// numero de sub-janelas

int

index

// ndice do indicador na lista de indicadores adicionada a sub-janela do g

);

Parmetros
chart_id
[in] ID Grfico. 0 (zero) indica a sub-janela grfico principal.
sub_window
[in] Nmero de sub-janela do grfico. 0 (zero) indica o sub-janela grfico principal.
index
[in] ndice do indicador na lista de indicadores. A numerao de indicadores comeam com zero,
ou seja, o primeiro indicador da lista tem o ndice 0. Para obter o cdigo do ltimo erro, voc
tambm pode usar a funo ChartIndicatorsTotal().
Valor do Retorno
O nome abreviado do indicador que definido na propriedade INDICATOR_SHORTNAME com a
funo IndicatorSetString(). Para obter detalhes do erro use a funo GetLastError().
Observao
No confundir o nome abreviado do indicador e o nome do arquivo que especificado ao criar um
indicador usando as funes iCustom() e IndicatorCreate(). Se o nome abreviado de um indicador
no definido de forma explicita, o nome do arquivo contendo o cdigo-fonte do indicador ser
especificado durante a compilao.
Nome abreviado do
indicador deve ser formado
corretamente. a
propriedade
INDICATOR_SHORTNAME ser escrita usando a funoIndicatorSetString(). S recomendado que o
nome abreviado deve conter valores de todos os parmetros de entrada do indicador, porque sendo
o indicador excludo do grfico pela funo ChartIndicatorDelete(), ele identificado pelo nome
abreviado.
Tambm Veja
ChartIndicatorAdd(), ChartIndicatorDelete(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(),
IndicatorSetString()

2000-2014, MetaQuotes Software Corp.

1141

Operaes de Grficos

ChartIndicatorsTotal
Retorna o nmero de todos indicadores utilizados para a janela do grfico especificado
int ChartIndicatorsTotal(
long chart_id,

// ID grfico

int

// numero de sub-janelas

sub_window

);

Parmetros
chart_id
[in] ID Grfico. 0 (zero) indica a sub-janela grfico principal.
sub_window
[in] Nmero de sub-janela do grfico. 0 (zero) indica o sub-janela grfico principal.
Valor do Retorno
O nmero de indicadores na janela de grfico especificado. Para obter detalhes do erro use a
funo GetLastError().
Observao
A funo permite uma buscar atravs de todos os indicadores anexados ao grfico. A funo
permite uma pesquisa atravs de todos os indicadores anexados ao grfico. O nmero de todas as
janelas do grfico pode ser obtido a partir da propriedade CHART_WINDOWS_TOTAL usando a
funo ChartGetInteger().
Tambm Veja
ChartIndicatorAdd(), ChartIndicatorDelete(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(),
IndicatorSetString()

2000-2014, MetaQuotes Software Corp.

1142

Operaes de Grficos

ChartWindowOnDropped
Retorna o nmero (ndice) da sub-janela do grfico, o Assessor Especialista (Expert Advisor) ou Script
foi derrubado. 0 (zero) significa a principal janela do grfico.
int ChartWindowOnDropped();

Valor do Retorno
Valor do tipo int.
Exemplo:
int myWindow=ChartWindowOnDropped();
int windowsTotal=ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Print("Script executado na janela #"+myWindow+
". Total de janelas no grfico "+ChartSymbol()+":",windowsTotal);

Tambm Veja
ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped

2000-2014, MetaQuotes Software Corp.

1143

Operaes de Grficos

ChartPriceOnDropped
Retorna a coordenada de preo do ponto do grfico, o Assessor Especialista (Expert Advisor) ou Script
foi derrubado.
double ChartPriceOnDropped();

Valor do Retorno
Value of double type.
Exemplo:
double p=ChartPriceOnDropped();
Print("ChartPriceOnDropped() = ",p);

Tambm Veja
ChartXOnDropped, ChartYOnDropped

2000-2014, MetaQuotes Software Corp.

1144

Operaes de Grficos

ChartTimeOnDropped
Retorna a coordenada de tempo correspondente ao ponto do grfico, o Assessor Especialista (Expert
Advisor) ou Script foi derrubado.
datetime ChartTimeOnDropped();

Valor do Retorno
Valor tipo datetime.
Exemplo:
datetime t=ChartTimeOnDropped();
Print("Script foi lanado sobre "+t);

Tambm Veja
ChartXOnDropped, ChartYOnDropped

2000-2014, MetaQuotes Software Corp.

1145

Operaes de Grficos

ChartXOnDropped
Retorna a coordenada X do ponto do grfico, o Assessor Especialista (Expert Advisor) ou Script foi
derrubado.
int ChartXOnDropped();

Valor do Retorno
O valor da coordenada X.
Observao
Direo do eixo X a partir da esquerda para a direita.
Exemplo:
int X=ChartXOnDropped();
int Y=ChartYOnDropped();
Print("(X,Y) = ("+X+","+Y+")");

Tambm Veja
ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped

2000-2014, MetaQuotes Software Corp.

1146

Operaes de Grficos

ChartYOnDropped
Retorna a coordenada X do ponto do grfico, o Assessor Especialista (Expert Advisor) ou Script foi
derrubado.
int ChartYOnDropped();

Valor do Retorno
O valor da coordenada Y.
Observao
Direo do eixo Y a partir de cima para baixo.
Tambm Veja
ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped

2000-2014, MetaQuotes Software Corp.

1147

Operaes de Grficos

ChartSetSymbolPeriod
Modifica o valor do smbolo e um perodo do grfico especificado. A funo assncrona, ou seja,
envia o comando e no espera a concluso da execuo.
bool ChartSetSymbolPeriod(
long

chart_id,

// ID Grfico

string

symbol,

// Nome smbolo

ENUM_TIMEFRAMES period

// Perodo

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
symbol
[in] Simbolo do grfico. Valor NULL significa o smbolo grfico atual (Expert Advisor anexado)
period
[in] Perodo do Grfico (Prazo). Pode ser um dos valores de ENUM_TIMEFRAMES. 0 (zero) significa
o perodo do atual grfico.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
O smbolo/perodo de mudana conduz r-inicializao do Expert Advisor, anexado a um grfico.
Tambm Veja
ChartSymbol, ChartPeriod

2000-2014, MetaQuotes Software Corp.

1148

Operaes de Grficos

ChartScreenShot
Providencia uma imagem do grfico de seu estado atual para um formato GIF.
bool ChartScreenShot(
long

chart_id,

// ID Grfico

string

filename,

// Nome do Smbolo

int

width,

// Largura

int

height,

// Altura

ENUM_ALIGN_MODE align_mode=ALIGN_RIGHT

// Tipo de alinhamento

);

Parmetros
chart_id
[in] ID Grfico. Significa o grfico atual.
filename
[in] Nome do arquivo de imagem. No pode exceder 63 caracteres. Arquivos de captura de tela
so colocados no \Files diretrio.
width
[in] Captura de tela com largura em pixels.
height
[in] Captura de tela com altura em pixels.
align_mode=ALIGN_RIGHT
[in] Modo de sada de uma Captura de tela estreita. O valor da enumerao ENUM_ALIGN_MODE.
ALIGN_RIGHT significa alinhamento para a margem direita (a sada a partir do final). ALIGN_LEFT
significa justificar esquerda.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
Se voc precisa tomar uma captura de tela de um grfico a partir de uma determinada posio, em
primeiro lugar, necessrio posicionar o grfico usando a funo ChartNavigate(). Se o tamanho
horizontal da captura de tela menor do que a janela do grfico, ou a parte direita da janela do
grfico, ou a sua parte esquerda est de sada, depende das configuraes do align_mode.
Exemplo:

#property description "O Expert Advisor demonstra como criar uma srie de captura de tela atualizad
#property description

grfico usando a funo ChartScreenShot(). Por convenincia, o nome do arqui

#property description "mostrando sobre o grfico. A altura e a largura das imagens so definidas po
#define

WIDTH

#define

HEIGHT 600

800

// ChartScreenShot() para Chamar a largura da imagem


// ChartScreenShot() para Chamar a altura da imagem

//--- parmetros de entrada

2000-2014, MetaQuotes Software Corp.

1149

Operaes de Grficos
input int

pictures=5;

// O nmero de imagens em srie

int

mode=-1;

// -1 denota uma mudana para a borda direita do grfico, 1 para a es

int

bars_shift=300;// O nmero de barras de rolagem quando o grfico est usando ChartNa

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
void OnInit()
{
//--- Desabilita grfico autoscroll
ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- Definir o deslocamento da borda direita do grfico
ChartSetInteger(0,CHART_SHIFT,true);
//--- Mostra uma castial (vela ou barra) do grfico
ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--Print("Preparao do Expert Advisor est completada");
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--}
//+------------------------------------------------------------------+
//| Funo ChartEvent

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- Mostra o nome da funo, chamar tempo e identificador de evento
Print(__FUNCTION__,TimeCurrent(),"

id=",id,"

mode=",mode);

//--- Manipular o evento CHARTEVENT_CLICK ("Um clique do mouse sobre o grfico")


if(id==CHARTEVENT_CLICK)
{
//--- Deslocamento inicial para a borda do grfico
int pos=0;
//--- Operao com a borda esquerda do grfico
if(mode>0)
{
//--- Rolar o grfico para a borda esquerda
ChartNavigate(0,CHART_BEGIN,pos);
for(int i=0;i<pictures;i++)
{
//--- Preparar o texto para mostrar no grfico e um nome de arquivo
string name="ChartScreenShot"+"CHART_BEGIN"+string(pos)+".gif";

2000-2014, MetaQuotes Software Corp.

1150

Operaes de Grficos
//--- Mostrar o nome no grfico como um comentrio
Comment(name);

//--- Salvar a captura de tela do grfico em um arquivo no terminal_directory\MQL5\File


if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_LEFT))
Print("Ns salvamos a captura de tela ",name);
//--pos+=bars_shift;
//--- D tempo ao utilizador para olhar a nova parte nova do grfico
Sleep(3000);
//--- Rolar o grfico diante da atual posio do bars_shift bars para a direita
ChartNavigate(0,CHART_CURRENT_POS,bars_shift);
}
//--- Altere o modo para o oposto
mode*=-1;
}
else // Operao com a borda direita do grfico
{
//--- Rolar o grfico para a borda direita
ChartNavigate(0,CHART_END,pos);
for(int i=0;i<pictures;i++)
{
//--- Preparar o texto para mostrar no grfico e um nome de arquivo
string name="ChartScreenShot"+"CHART_END"+string(pos)+".gif";
//--- Mostrar o nome no grfico como um comentrio
Comment(name);

//--- Salvar a captura de tela do grfico em um arquivo no terminal_directory\MQL5\File


if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_RIGHT))
Print("Ns salvamos a captura de tela ",name);
//--pos+=bars_shift;
//--- D tempo ao utilizador para olhar a nova parte nova do grfico
Sleep(3000);
//--- Rolar o grfico diante da atual posio do bars_shift bars para a direita
ChartNavigate(0,CHART_CURRENT_POS,-bars_shift);
}
//--- Altere o modo para o oposto
mode*=-1;
}
}

// End of CHARTEVENT_CLICK event handling

//--- Fim do manipulador (handler) OnChartEvent()


}

Tambm Veja
ChartNavigate(), Recursos

2000-2014, MetaQuotes Software Corp.

1151

Funes de Negociao (Trade)

Funes de Negociao (Trade)


Este o grupo de funes destina-se gesto de atividades de negociao.
As funes de negociao podem ser usadas em Experts Advisors e scripts. Funes de negociao s
podem ser chamadas se as propriedades do Expert Advisor ou script estiverem habilitadas na sua
caixa de controle "Permitir negociao ao vivo".
Funo

Ao

OrderCalcMargin

Calcula a margem necessria para o tipo de


ordem especificado, na moeda de depsito

OrderCalcProfit

Calcula o lucro com base nos parmetros


passados, na moeda de depsito

OrderCheck

Verifica se h fundos suficientes para executar


a operao de negcio necessria.

OrderSend

Envia pedidos de negcios para um servidor

OrderSendAsync

De forma assncrona envia pedidos de


comrcio sem esperar a resposta da negociao
do servidor de negcio

PositionsTotal

Retorna o nmero de posies em aberto

PositionGetSymbol

Retorna o smbolo correspondente posio


aberta

PositionSelect

Escolhe
uma
posio
aberta
posteriormente trabalhar com ele

PositionGetDouble

Retorna a propriedade solicitado de uma


posio aberta (double)

PositionGetInteger

Retorna a propriedade solicitada uma posio


aberta (datetime ou int)

PositionGetString

Retorna a propriedade solicitada uma posio


aberta (string)

OrdersTotal

Retorna o nmero de ordens

OrderGetTicket

Devolver
o
bilhete
correspondente

OrderSelect

Seleciona uma ordem para posteriormente


trabalhar com ele

OrderGetDouble

Retorna a propriedade solicitada da ordem


(double)

OrderGetInteger

Retorna a propriedade solicitada da ordem


(datetime ou int)

OrderGetString

Retorna a propriedade solicitada da ordem


(string)

2000-2014, MetaQuotes Software Corp.

de

uma

para

ordem

1152

Funes de Negociao (Trade)

HistorySelect

Recupera o histrico de transaes e ordens


para o perodo do tempo de servidor
especificado

HistorySelectByPosition

Pedido de histrico de acordo com


identificador de posio especificada.

HistoryOrderSelect

Seleciona uma ordem no histrico


posteriormente trabalhar com ele

HistoryOrdersTotal

Retorna o nmero de pedidos no histrico

HistoryOrderGetTicket

Retornar bilhete ordem de


correspondente no histrico

HistoryOrderGetDouble

Retorna a propriedade solicitada de uma ordem


no histrico (double)

HistoryOrderGetInteger

Retorna a propriedade solicitada de uma ordem


no histrico (datetime ou int)

HistoryOrderGetString

Retorna a propriedade solicitada de uma ordem


no histrico (string)

HistoryDealSelect

Seleciona um negcio no histrico para


posterior chamada atravs de funes
apropriadas

HistoryDealsTotal

Retorna o nmero de ofertas no histrico

HistoryDealGetTicket

Devolve um bilhete de
correspondente no histrico

HistoryDealGetDouble

Retorna a propriedade solicitada de um acordo


no histrico (double)

HistoryDealGetInteger

Retorna a propriedade solicitada de um acordo


no histrico (datetime ou int)

HistoryDealGetString

Retorna a propriedade solicitada de uma


operao no histrico (string)

2000-2014, MetaQuotes Software Corp.

uma

uma

um

para

ordem

quantidade

1153

Funes de Negociao (Trade)

OrderCalcMargin
A funo calcula a margem necessria para o tipo de ordem especificado, na conta corrente, no
ambiente de mercado atual no tendo em conta os pedidos pendentes atuais e posies abertas. Ele
permite a avaliao da margem para a operao comercial prevista. O valor retornado na moeda da
conta.
bool OrderCalcMargin(
ENUM_ORDER_TYPE

action,

// tipo de ordem

string

symbol,

// nome do smbolo

double

volume,

// volume

double

price,

// preo aberto

double&

margin

// valor para a obteno do valor da margem

);

Parmetros
action
[in] O tipo de pedido, pode ser um dos valores da enumerao ENUM_ORDER_TYPE.
symbol
[in] Nome do ativo.
volume
[in] Volume das operaes de Negcios (comrcio).
price
[in] Preo de abertura.
margin
[out] A varivel, para o qual o valor da margem requerida ser escrito no caso da funo ser
executada com xito. O clculo realizado como se no houvesse ordens pendentes e posies
abertas na conta corrente. O valor da margem depende de muitos fatores, e pode variar em
diferentes ambientes de mercado.
Valor do Retorno
A funo retorna true em caso de sucesso, caso contrrio ela retorna false. A fim de obter
informaes sobre o erro, chamar a funo GetLastError().
Tambm Veja
OrderSend(), Order Properties, Tipos de Operaes de Negociao (Trade)

2000-2014, MetaQuotes Software Corp.

1154

Funes de Negociao (Trade)

OrderCalcProfit
A funo calcula o lucro para a conta corrente, nas atuais condies de mercado, baseado nos
parmetros passados. A funo usado para a pr-avaliao do resultado de uma operao de negcio
(comrcio). O valor retornado na moeda da conta.
bool OrderCalcProfit(
ENUM_ORDER_TYPE

action,

// tipo da ordem (ORDER_TYPE_BUY ou ORDER_TYPE_SELL)

string

symbol,

// nome do smbolo

double

volume,

// volume

double

price_open,

// preo de abertura

double

price_close,

// preo de fechamento

double&

profit

// varivel para a obteno do valor de lucro

);

Parmetros
action
[in]
Tipo de ordem, pode um dos dois valores da enumerao ENUM_ORDER_TYPE:
ORDER_TYPE_BUY ou ORDER_TYPE_SELL.
symbol
[in] Nome do ativo.
volume
[in] Volume das operaes de Negcios (comrcio).
price_open
[in] Preo de abertura.
price_close
[in] Preo de fechamento.
profit
[out] A varivel, para o qual o valor calculado do lucro ser escrito, em caso da funo ser
executada com sucesso. O valor do lucro estimado depende de muitos fatores, e pode variar em
diferentes ambientes de mercado.
Valor do Retorno
A funo retorna true em caso de sucesso, caso contrrio ela retorna false. Se um tipo de ordem
invlida for especificada, a funo retornar falsa. Na ordem para obter informaes sobre o erro,
chamar GetLastError().
Tambm Veja
OrderSend(), Order Properties, Tipos de Operaes de Negociao (Trade)

2000-2014, MetaQuotes Software Corp.

1155

Funes de Negociao (Trade)

OrderCheck
A funo OrderCheck() verifica se h dinheiro suficiente para executar uma operao de comrcio
necessria. Os resultados da verificao so colocadas para os campos da estrutura
MqlTradeCheckResult.
bool OrderCheck(
MqlTradeRequest&

request,

MqlTradeCheckResult& result

// estrutura solicitada
// resultado da estrutura

);

Parmetros
request
[in] Ponteiro para a estrutura do tipo MqlTradeRequest que descreve a ao de comrcio
requerida.
result
[in,out] Ponteiro para a estrutura do tipo MqlTradeCheckResult, em que o resultado da verificao
ser colocada.
Valor do Retorno
Se os fundos no so suficientes para a operao, ou os parmetros so preenchidos
incorretamente, a funo retorna falsa. Em caso de sucesso na verificao bsica de estruturas
(verifique os ponteiros), ele retorna verdadeira. No entanto, isto no uma indicao de que a
operao comercial solicitada, deixe de ser executado com sucesso. Para uma descrio mais
detalhada do resultado da execuo da funo, analise os campos do resultado da estrutura.
A fim de obter informaes sobre o erro, chamar a funo GetLastError().
Tambm Veja
OrderSend(), Tipos de operaes de negociao, Pedido de Estrutura de Comrcio, Estrutura do
Pedido pelos resultados, Estrutura de um Pedido do resultado de negociao

2000-2014, MetaQuotes Software Corp.

1156

Funes de Negociao (Trade)

OrderSend
O OrderSend() funo usada para a execuo de operaes de negociao enviando solicitaes para
um servidor de negcio.
bool OrderSend(
MqlTradeRequest& request,

// estrutura de consulta

MqlTradeResult& result

// estrutura da resposta

);

Parmetros
request
[in] Ponteiro para uma estrutura de tipo MqlTradeRequest descrever a atividade de negociao do
cliente.
result
[in,out] Ponteiro para uma estrutura do tipo MqlTradeResultdescrevendo o resultado da operao
comercial, no caso de uma realizao bem sucedida (se verdadeiro retornado).
Valor do Retorno
Em caso de sucesso na verificao bsica de estruturas (verificao do ndice) retorna verdadeiro.
No entanto, este no um sinal de sucesso com execuo de uma operao de negcio
(comrcio). Para uma descrio mais detalhada do resultado da execuo da funo, analisar os
domnios da estrutura de resultado.
Observao
Os pedidos de negociao passar por vrias etapas de verificao de um servidor de negcio.
Primeiro de tudo, ele verifica se todos os campos obrigatrios dos parmetros de solicitao esto
preenchidos corretamente. Se no houver erros nesta guia, voc pode iniciar o programa no
terminal cliente. Se o pedido for aceito com sucesso pelo servidor de negociao, o OrderSend()
retorna verdadeiro.
Recomenda-se verificar o pedido antes de envi-lo para um servidor de negociao. Para verificar
os pedidos, use a funo OrderCheck(). Ele verifica se h fundos suficientes para executar a
operao de negcio (comrcio), e retorna muitos parmetros teis nos resultados da verificao do
pedido de negcio:
cdigo de retorno contm informaes sobre erros no pedido verificado;
Valor de saldo aps a execuo da operao de negociao;
valor de eqidade que ir aparecer aps a operao comercial executado;
valor de ponto flutuante que ir aparecer aps a operao de negcio for executado;
Margem requerida para a operao de negociao;
quantidade de capital livre que permanecer aps a execuo da operao de negcio;
o nvel da margem que ser definido aps a operao de negcio for executado;
Comentrio sobre o cdigo da resposta, descrio do erro.
Refira-se que a concluso bem sucedida do mtodo de operao OrderSend() nem sempre significa
uma concluso de negcio bem sucedido ao colocar uma ordem de mercado. Verifica o valor do
retcode contendo cdigo de retorno do servidor de negociao , e valores de operao ou campo de
ordem dependendo sobre o tipo de operao no resultado retornado.

2000-2014, MetaQuotes Software Corp.

1157

Funes de Negociao (Trade)


Cada pedido aceito armazenado no servidor de negcio esperando o processamento at que ocorre
uma das condies para a sua execuo:
expirao,
aparecimento de uma solicitao oposta,
execuo da ordem, quando o preo de execuo aparece,
uma solicitao para cancelar a ordem recebido.
No momento do processamento da ordem, o servidor de negcios envia ao terminal uma mensagem
sobre a ocorrncia do evento Trade (evento de negociao), que pode ser processado pela funo
OnTrade().
O resultado da execuo do pedido de negcio sobre o servidor enviado pela funo OrderSend()
pode ser controlada pelo handler (Manipulador) OnTradeTransaction. Deve ser observado que o
handler (manipulador) OnTradeTransaction ser chamado vrias vezes durante a execuo de um
pedido de negcio.
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal)
adicionada ao histrico e uma nova posio criada. Funo OnTradeTransaction ser chamado
para cada um desses eventos.
Exemplo:
//--- valor para ORDER_MAGIC
input long order_magic=55555;
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Ter a certeza que uma conta demonstrao
if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
{
Alert("Operao de script no permitido em uma conta real!");
return;
}
//--- Colocar ou deletar uma ordem
if(GetOrdersTotalByMagic(order_magic)==0)
{
//--- No ordens atuais - colocar uma ordem
uint res=SendRandomPendingOrder(order_magic);
Print("Retorna cdigo do servidor de comrcio ",res);
}
else // existem ordens - deletar ordens
{
DeleteAllOrdersByMagic(order_magic);
}
//--}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1158

Funes de Negociao (Trade)


//| Receber o nmero das atuais ordens atuais com especificao

//+------------------------------------------------------------------+
int GetOrdersTotalByMagic(long const magic_number)
{
ulong order_ticket;
int total=0;
//--- passar por todas as ordens pendentes
for(int i=0;i<OrdersTotal();i++)
if((order_ticket=OrderGetTicket(i))>0)
if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++;
//--return(total);
}
//+------------------------------------------------------------------+
//| Deletar todas as ordens pendentes com especificao ORDER_MAGIC

//+------------------------------------------------------------------+
void DeleteAllOrdersByMagic(long const magic_number)
{
ulong order_ticket;
//--- passar por todas as ordens pendentes
for(int i=OrdersTotal()-1;i>=0;i--)
if((order_ticket=OrderGetTicket(i))>0)
//--- ordem com apropriado ORDER_MAGIC
if(magic_number==OrderGetInteger(ORDER_MAGIC))
{
MqlTradeResult result={0};
MqlTradeRequest request={0};
request.order=order_ticket;
request.action=TRADE_ACTION_REMOVE;
OrderSend(request,result);
//--- escrever a resposta do servidor para log
Print(__FUNCTION__,": ",result.comment," reply code ",result.retcode);
}
//--}
//+------------------------------------------------------------------+
//| Definir uma ordem pendente de maneira aleatria

//+------------------------------------------------------------------+
uint SendRandomPendingOrder(long const magic_number)
{
//--- preparar um pedido
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING;

// definio de uma ordem pendente

request.magic=magic_number;

// ORDER_MAGIC

request.symbol=_Symbol;

// smbolo

request.volume=0.1;

// volume em 0.1 lotes

request.sl=0;

// Stop Loss (Parar Perda) no especificado

request.tp=0;

// Take Profit (Tomar Lucro) no especificado

//--- formar o tipo de ordem

2000-2014, MetaQuotes Software Corp.

1159

Funes de Negociao (Trade)


request.type=GetRandomType();

// tipo de ordem

//--- formar o preo para uma ordem pendente


request.price=GetRandomPrice(request.type);

// preo de abertura

//--- enviar um pedido de negcio (comrcio)


MqlTradeResult result={0};
OrderSend(request,result);
//--- escrever resposta do servido para log
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
//--- cdigo de retorno da resposta do servidor de negcio (comrcio)
return result.retcode;
}
//+------------------------------------------------------------------+
//| tipo de retorno de uma ordem pendente de maneira aleatria

//+------------------------------------------------------------------+
ENUM_ORDER_TYPE GetRandomType()
{
int t=MathRand()%4;
//---

0<=t<4

switch(t)
{
case(0):return(ORDER_TYPE_BUY_LIMIT);
case(1):return(ORDER_TYPE_SELL_LIMIT);
case(2):return(ORDER_TYPE_BUY_STOP);
case(3):return(ORDER_TYPE_SELL_STOP);
}
//--- valor incorreto
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
//|

retorno do preo de forma aleatria

//+------------------------------------------------------------------+
double GetRandomPrice(ENUM_ORDER_TYPE type)
{
int t=(int)type;
//--- nveis de stop (parar) para smbolo
int distance=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
//--- receber dados do ltimo tick (ponto)
MqlTick last_tick={0};
SymbolInfoTick(_Symbol,last_tick);
//--- calcular o preo de acordo com o tipo
double price;
if(t==2 || t==5) // ORDER_TYPE_BUY_LIMIT ou ORDER_TYPE_SELL_STOP
{
price=last_tick.bid; // divergir do preo de compra
price=price-(distance+(MathRand()%10)*5)*_Point;
}
else

// ORDER_TYPE_SELL_LIMIT ou ORDER_TYPE_BUY_STOP

2000-2014, MetaQuotes Software Corp.

1160

Funes de Negociao (Trade)


price=last_tick.ask; // divergir do preo de venda
price=price+(distance+(MathRand()%10)*5)*_Point;
}
//--return(price);
}

Tambm Veja
Tipos de Operao de Negociao, Estrutura de Solicitao de Negociao, Estrutura de Solicitao
de Verificao de Resultados, Estrutura de uma Solicitao de Resultado de Negociao

2000-2014, MetaQuotes Software Corp.

1161

Funes de Negociao (Trade)

OrderSendAsync
A funo OrderSendAsync() usada para a realizao de operaes de negcio assncronos sem
esperar a resposta do servidor de negcio a um pedido enviado. A funo projetado para negociao
de alta freqncia, quando, nos termos do algoritmo de negociao inaceitvel perder tempo
espera de uma resposta do servidor.
bool OrderSendAsync(
MqlTradeRequest& request,

// Estrutura solicitada

MqlTradeResult& result

// Resultado da estrutura

);

Parmetros
request
[in] Um ponteiro para uma estrutura do tipo MqlTradeRequestque descreve a ao comercial do
cliente.
result
[in,out] Ponteiro para uma estrutura do tipo MqlTradeResultdescrevendo o resultado da operao
comercial, no caso de uma realizao bem sucedida (se verdadeiro retornado).
Valor do Retorno
Retorna verdadeiro se o pedido enviado para um servidor de negcio. No caso de o pedido no for
enviado, ele retorna falsa. No caso de o pedido enviado, na varivel resultado o cdigo de
resposta contm o valor TRADE_RETCODE_PLACED (cdigo 10008) "order placed". Execuo bem
sucedida significa que apenas o fato de enviar, mas no d qualquer garantia de que o pedido
chegou ao servidor de comrcio e foi aceito para processamento. Ao processar o pedido recebido,
um servidor de de negcio envia uma resposta a um terminal do cliente notificando a alterao no
estado atual de posies, ordens e promoes, o que leva gerao do evento de negociao.
O resultado da execuo do pedido de negcio sobre o servidor enviado pela funo OrderSend()
pode ser controlada pelo handler (Manipulador) OnTradeTransaction. Deve ser observado que o
handler (manipulador) OnTradeTransaction ser chamado vrias vezes durante a execuo de um
pedido de negcio.
Por exemplo, ao enviar uma ordem de compra de mercado, ela tratada, uma ordem de compra
apropriada criada para a conta, a ordem ento executada e removida da lista de ordens em
aberto, e ento ela adicionada ao histrico de ordens, uma apropriada operao (deal)
adicionada ao histrico e uma nova posio criada. Funo OnTradeTransaction ser chamado
para cada um desses eventos. Para obter alguns desses dados, os parmetros da funo deve ser
analisada:
trans - este parmetro obtm a estrutura MqlTradeTransaction descrevendo uma transao de
negociao aplicada a uma conta de negcio.
request - este parmetro recebe estruturaMqlTradeRequest descrevendo o pedido de negcio
resultou em uma transao comercial.
result - este parmetro obtm a estrutura MqlTradeResult descrevendo o resultado da execuo de
uma solicitao de negociao.
Observao
Em termos de objetivos e parmetros, a funo semelhante ao OrderSend(), mas ao contrrio, ela

2000-2014, MetaQuotes Software Corp.

1162

Funes de Negociao (Trade)


assncrona, isto , no se sustenta o funcionamento do programa enquanto aguarda o resultado da
execuo da funo. Voc pode comparar a taxa de operaes de comrcio destas duas funes,
utilizando a amostra Expert Advisor.
Exemplo:
#property description "Expert Advisor for sending trade requests "
" using OrderSendAsync() function.\r\n"
#property description "Handling trading events using"
" OnTrade() and OnTradeTransaction() handler functions is displayed\r\n"
#property description "Expert Advisor parameters allow setting Magic Number"
" (unique ID) "

#property description "and the mode of displaying messages in Experts log. All details are displaye
//--- parmetros de entrada
input int

MagicNumber=1234567;

// Expert Advisor ID

input bool DescriptionModeFull=true; // Modo de sada detalhada


//--- chamada de varivel para uso em HistorySelect()
datetime history_start;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- verificar se negociao automtica (autotrading) permitido
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
{
Alert("Autotrading in the terminal is disabled, Expert Advisor will be deleted");
ExpertRemove();
return(-1);
}
//--- inabilitada a negociao com uma conta real
if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
{
Alert("Expert Advisor cannot trade on a real account!");
ExpertRemove();
return(-2);
}

//--- verificar se possvel negociar com esta conta (por exemplo, a negociao impossvel quand
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Alert("Trading on this account is disabled");
ExpertRemove();
return(-3);
}
//--- economizar o tempo do lanamento do Expert Advisor para receber histrico de negociao
history_start=TimeCurrent();
//--CreateBuySellButtons();
return(INIT_SUCCEEDED);

2000-2014, MetaQuotes Software Corp.

1163

Funes de Negociao (Trade)


}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- deletar todos os grficos objetos
ObjectDelete(0,"Buy");
ObjectDelete(0,"Sell");
//--}
//+------------------------------------------------------------------+
//| Funo TradeTransaction

//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- ttulo nomeado aps negociao da funo handler do evento
Print("=> ",__FUNCTION__," at ",TimeToString(TimeCurrent(),TIME_SECONDS));
//--- receber tipo de transao como valor de enumerao
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transao o resultado da solicitao de manipulao
if(type==TRADE_TRANSACTION_REQUEST)
{
//--- visualizar nome da transao
Print(EnumToString(type));
//--- em seguida visualizar a descrio do string do pedido tratado
Print("------------RequestDescription\r\n",
RequestDescription(request,DescriptionModeFull));
//--- e mostrar descrio do resultado requisitado
Print("------------ ResultDescription\r\n",
TradeResultDescription(result,DescriptionModeFull));
}
else // visualizar a descrio completa da transao para as transaes de outro tipo
{
Print("------------ TransactionDescription\r\n",
TransactionDescription(trans,DescriptionModeFull));
}
//--}
//+------------------------------------------------------------------+
//| Funo Trade

//+------------------------------------------------------------------+
void OnTrade()
{
//--- membros estticos para o armazenamento de negociao do status da conta
static int prev_positions=0,prev_orders=0,prev_deals=0,prev_history_orders=0;
//--- histrico de negociao do pedido

2000-2014, MetaQuotes Software Corp.

1164

Funes de Negociao (Trade)


bool update=HistorySelect(history_start,TimeCurrent());
PrintFormat("HistorySelect(%s , %s) = %s",
TimeToString(history_start),TimeToString(TimeCurrent()),(string)update);
//--- ttulo nomeado aps negociao da funo handler do evento
Print("=> ",__FUNCTION__," at ",TimeToString(TimeCurrent(),TIME_SECONDS));
//--- exibir o nome do handler (manipulador) e o nmero de ordens no momento da manipulao
int curr_positions=PositionsTotal();
int curr_orders=OrdersTotal();
int curr_deals=HistoryOrdersTotal();
int curr_history_orders=HistoryDealsTotal();
//--- exibir o nmero de ordens, as posies, promoes e alteraes em parnteses
PrintFormat("PositionsTotal() = %d (%+d)",
curr_positions,(curr_positions-prev_positions));
PrintFormat("OrdersTotal() = %d (%+d)",
curr_orders,curr_orders-prev_orders);
PrintFormat("HistoryOrdersTotal() = %d (%+d)",
curr_deals,curr_deals-prev_deals);
PrintFormat("HistoryDealsTotal() = %d (%+d)",
curr_history_orders,curr_history_orders-prev_history_orders);
//--- Inserir uma quebra de string para ver o log mais adequado
Print("");
//--- salvar o status da conta
prev_positions=curr_positions;
prev_orders=curr_orders;
prev_deals=curr_deals;
prev_history_orders=curr_history_orders;
//--}
//+------------------------------------------------------------------+
//| Funo ChartEvent

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- manipulao do evento CHARTEVENT_CLICK ("Clicando no grfico")
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("=> ",__FUNCTION__,": sparam = ",sparam);
//--- volume mnimo de um negcio
double volume_min=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
//--- Se o boto "Comprar" pressionado, ento comprar
if(sparam=="Buy")
{
PrintFormat("Buy %s %G lot",_Symbol,volume_min);
BuyAsync(volume_min);
//--- desfazer pressionando o boto
ObjectSetInteger(0,"Buy",OBJPROP_STATE,false);

2000-2014, MetaQuotes Software Corp.

1165

Funes de Negociao (Trade)


}
//--- Se o boto "Vender" pressionado, ento vender
if(sparam=="Sell")
{
PrintFormat("Sell %s %G lot",_Symbol,volume_min);
SellAsync(volume_min);
//--- desfazer pressionando o boto
ObjectSetInteger(0,"Sell",OBJPROP_STATE,false);
}
ChartRedraw();
}
//--}
//+------------------------------------------------------------------+
//| Retorna o texto de descrio de uma transao

//+------------------------------------------------------------------+
string TransactionDescription(const MqlTradeTransaction &trans,
const bool detailed=true)
{
//--- preparar uma string para o retorno a partir da funo
string desc=EnumToString(trans.type)+"\r\n";
//--- todos os dados possveis adicionado em modo detalhado
if(detailed)
{
desc+="Ativo: "+trans.symbol+"\r\n";
desc+="Bilhetagem (ticket) da operao: "+(string)trans.deal+"\r\n";
desc+="Tipo de operao: "+EnumToString(trans.deal_type)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)trans.order+"\r\n";
desc+="Tipo de ordem: "+EnumToString(trans.order_type)+"\r\n";
desc+="Estado da ordem: "+EnumToString(trans.order_state)+"\r\n";
desc+="Ordem do tipo time: "+EnumToString(trans.time_type)+"\r\n";
desc+="Expirao da ordem: "+TimeToString(trans.time_expiration)+"\r\n";
desc+="Preo: "+StringFormat("%G",trans.price)+"\r\n";
desc+="Gatilho do preo: "+StringFormat("%G",trans.price_trigger)+"\r\n";
desc+="Stop Loss: "+StringFormat("%G",trans.price_sl)+"\r\n";
desc+="Take Profit: "+StringFormat("%G",trans.price_tp)+"\r\n";
desc+="Volume: "+StringFormat("%G",trans.volume)+"\r\n";
}
//--- retornar a string recebida
return desc;
}
//+--------------------------------------------------------------------+
//|Retorne o texto de descrio do resultado da manipulao de pedido|
//+--------------------------------------------------------------------+
string RequestDescription(const MqlTradeRequest &request,
const bool detailed=true)
{
//--- preparar uma string para o retorno a partir da funo
string desc=EnumToString(request.action)+"\r\n";

2000-2014, MetaQuotes Software Corp.

1166

Funes de Negociao (Trade)


//--- adicionar todos os dados disponveis em modo detalhado
if(detailed)
{
desc+="Ativo: "+request.symbol+"\r\n";
desc+="Nmero mgico: "+StringFormat("%d",request.magic)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)request.order+"\r\n";
desc+="Tipo de ordem: "+EnumToString(request.type)+"\r\n";
desc+="Preenchimento da ordem: "+EnumToString(request.type_filling)+"\r\n";
desc+="Ordem do tipo time: "+EnumToString(request.type_time)+"\r\n";
desc+="Expirao da ordem: "+TimeToString(request.expiration)+"\r\n";
desc+="Preo: "+StringFormat("%G",request.price)+"\r\n";
desc+="Pontos de desvio: "+StringFormat("%G",request.deviation)+"\r\n";
desc+="Stop Loss: "+StringFormat("%G",request.sl)+"\r\n";
desc+="Take Profit: "+StringFormat("%G",request.tp)+"\r\n";
desc+="Stop Limit: "+StringFormat("%G",request.stoplimit)+"\r\n";
desc+="Volume: "+StringFormat("%G",request.volume)+"\r\n";
desc+="Comentrio: "+request.comment+"\r\n";
}
//--- retornar string recebida
return desc;
}
//+--------------------------------------------------------------------+
//|Retorne o texto de descrio do resultado da manipulao de pedido|
//+--------------------------------------------------------------------+
string TradeResultDescription(const MqlTradeResult &result,
const bool detailed=true)
{
//--- preparar a string para o retorno a partir da funo
string desc="Retcode "+(string)result.retcode+"\r\n";
//--- adicionar todos os dados disponveis em modo detalhado
if(detailed)
{
desc+="ID da Solicitao: "+StringFormat("%d",result.request_id)+"\r\n";
desc+="Bilhetagem (ticket) da ordem: "+(string)result.order+"\r\n";
desc+="Bilhetagem (ticket) da operao: "+(string)result.deal+"\r\n";
desc+="Volume: "+StringFormat("%G",result.volume)+"\r\n";
desc+="Preo: "+StringFormat("%G",result.price)+"\r\n";
desc+="Compra (Ask): "+StringFormat("%G",result.ask)+"\r\n";
desc+="Venda (Bid): "+StringFormat("%G",result.bid)+"\r\n";
desc+="Comentrio: "+result.comment+"\r\n";
}
//--- retornar string recebida
return desc;
}
//+------------------------------------------------------------------+
//| Criar dois botes de compra e venda

//+------------------------------------------------------------------+
void CreateBuySellButtons()
{

2000-2014, MetaQuotes Software Corp.

1167

Funes de Negociao (Trade)


//--- checar a presena do objeto chamado "Buy" (comprar)
if(ObjectFind(0,"Buy")>=0)
{
//--- se o objeto encontrado no um boto, deletar-lo
if(ObjectGetInteger(0,"Buy",OBJPROP_TYPE)!=OBJ_BUTTON)
ObjectDelete(0,"Buy");
}
else
ObjectCreate(0,"Buy",OBJ_BUTTON,0,0,0); // criar boto "Buy" (comprar)
//--- configurar boto "Buy" (comprar)
ObjectSetInteger(0,"Buy",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSetInteger(0,"Buy",OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,"Buy",OBJPROP_YDISTANCE,50);
ObjectSetInteger(0,"Buy",OBJPROP_XSIZE,70);
ObjectSetInteger(0,"Buy",OBJPROP_YSIZE,30);
ObjectSetString(0,"Buy",OBJPROP_TEXT,"Buy");
ObjectSetInteger(0,"Buy",OBJPROP_COLOR,clrRed);
//--- checar a presena do objeto chamado "Sell" (comprar)
if(ObjectFind(0,"Sell")>=0)
{
//--- se o objeto encontrado no um boto, deletar-lo
if(ObjectGetInteger(0,"Sell",OBJPROP_TYPE)!=OBJ_BUTTON)
ObjectDelete(0,"Sell");
}
else
ObjectCreate(0,"Sell",OBJ_BUTTON,0,0,0); // criar boto "Sell" (vender)
//--- configurar boto "Buy" (comprar)
ObjectSetInteger(0,"Sell",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSetInteger(0,"Sell",OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,"Sell",OBJPROP_YDISTANCE,100);
ObjectSetInteger(0,"Sell",OBJPROP_XSIZE,70);
ObjectSetInteger(0,"Sell",OBJPROP_YSIZE,30);
ObjectSetString(0,"Sell",OBJPROP_TEXT,"Sell");
ObjectSetInteger(0,"Sell",OBJPROP_COLOR,clrBlue);
//--- realizar atualizao forada do grfico para ver imediatamente os botes
ChartRedraw();
//--}
//+------------------------------------------------------------------+
//| Comprar usando a funo OrderSendAsync() assncrona

//+------------------------------------------------------------------+
void BuyAsync(double volume)
{
//--- preparar o pedido
MqlTradeRequest req={0};
req.action

=TRADE_ACTION_DEAL;

req.symbol

=_Symbol;

req.magic

=MagicNumber;

req.volume

=0.1;

2000-2014, MetaQuotes Software Corp.

1168

Funes de Negociao (Trade)


req.type

=ORDER_TYPE_BUY;

req.price

=SymbolInfoDouble(req.symbol,SYMBOL_ASK);

req.deviation

=10;

req.comment

="Comprar usando OrderSendAsync()";

MqlTradeResult

res={0};

if(!OrderSendAsync(req,res))
{
Print(__FUNCTION__,": erro ",GetLastError(),", retcode = ",res.retcode);
}
//--}
//+------------------------------------------------------------------+
//| Vender usando a funo OrderSendAsync() assncrona

//+------------------------------------------------------------------+
void SellAsync(double volume)
{
//--- preparar o pedido
MqlTradeRequest req={0};
req.action

=TRADE_ACTION_DEAL;

req.symbol

=_Symbol;

req.magic

=MagicNumber;

req.volume

=0.1;

req.type

=ORDER_TYPE_SELL;

req.price

=SymbolInfoDouble(req.symbol,SYMBOL_BID);

req.deviation

=10;

req.comment

="Vende usando OrderSendAsync()";

MqlTradeResult

res={0};

if(!OrderSendAsync(req,res))
{
Print(__FUNCTION__,": erro ",GetLastError(),", retcode = ",res.retcode);
}
//--}
//+------------------------------------------------------------------+

Exemplo de exibio de mensagens em log "Experts":


12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnChartEvent: sparam = Sell

12:52:52

ExpertAdvisor (EURUSD,H1)

Sell EURUSD 0.01 lot

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTradeTransaction at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_TRANSACTION_REQUEST

12:52:52

ExpertAdvisor (EURUSD,H1)

------------RequestDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_ACTION_DEAL

12:52:52

ExpertAdvisor (EURUSD,H1)

Symbol: EURUSD

12:52:52

ExpertAdvisor (EURUSD,H1)

Magic Number: 1234567

12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Order type: ORDER_TYPE_SELL

12:52:52

ExpertAdvisor (EURUSD,H1)

Order filling: ORDER_FILLING_FOK

12:52:52

ExpertAdvisor (EURUSD,H1)

Order time type: ORDER_TIME_GTC

2000-2014, MetaQuotes Software Corp.

1169

Funes de Negociao (Trade)


12:52:52

ExpertAdvisor (EURUSD,H1)

Order expiration: 1970.01.01 00:00

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Deviation points: 10

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Loss: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Take Profit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Limit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0.1

12:52:52

ExpertAdvisor (EURUSD,H1)

Comment: Sell using OrderSendAsync()

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

------------ ResultDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

Retcode 10009

12:52:52

ExpertAdvisor (EURUSD,H1)

Request ID: 2

12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal ticket: 15048668

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0.1

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Ask: 1.29319

12:52:52

ExpertAdvisor (EURUSD,H1)

Bid: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Comment:

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistorySelect( 09:34 , 09:52) = true

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTrade at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

PositionsTotal() = 1 (+1)

12:52:52

ExpertAdvisor (EURUSD,H1)

OrdersTotal() = 0 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryOrdersTotal() = 2 (+2)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryDealsTotal() = 2 (+2)

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTradeTransaction at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

------------ TransactionDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_TRANSACTION_ORDER_ADD

12:52:52

ExpertAdvisor (EURUSD,H1)

Symbol: EURUSD

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal ticket: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal type: DEAL_TYPE_BUY

12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Order type: ORDER_TYPE_SELL

12:52:52

ExpertAdvisor (EURUSD,H1)

Order state: ORDER_STATE_STARTED

12:52:52

ExpertAdvisor (EURUSD,H1)

Order time type: ORDER_TIME_GTC

12:52:52

ExpertAdvisor (EURUSD,H1)

Order expiration: 1970.01.01 00:00

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Price trigger: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Loss: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Take Profit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0.1

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTradeTransaction at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

------------ TransactionDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_TRANSACTION_ORDER_DELETE

12:52:52

ExpertAdvisor (EURUSD,H1)

Symbol: EURUSD

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal ticket: 0

2000-2014, MetaQuotes Software Corp.

1170

Funes de Negociao (Trade)


12:52:52

ExpertAdvisor (EURUSD,H1)

Deal type: DEAL_TYPE_BUY

12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Order type: ORDER_TYPE_SELL

12:52:52

ExpertAdvisor (EURUSD,H1)

Order state: ORDER_STATE_STARTED

12:52:52

ExpertAdvisor (EURUSD,H1)

Order time type: ORDER_TIME_GTC

12:52:52

ExpertAdvisor (EURUSD,H1)

Order expiration: 1970.01.01 00:00

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Price trigger: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Loss: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Take Profit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0.1

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistorySelect( 09:34 , 09:52) = true

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTrade at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

PositionsTotal() = 1 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

OrdersTotal() = 0 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryOrdersTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryDealsTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTradeTransaction at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

------------ TransactionDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_TRANSACTION_HISTORY_ADD

12:52:52

ExpertAdvisor (EURUSD,H1)

Symbol: EURUSD

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal ticket: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal type: DEAL_TYPE_BUY

12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Order type: ORDER_TYPE_SELL

12:52:52

ExpertAdvisor (EURUSD,H1)

Order state: ORDER_STATE_FILLED

12:52:52

ExpertAdvisor (EURUSD,H1)

Order time type: ORDER_TIME_GTC

12:52:52

ExpertAdvisor (EURUSD,H1)

Order expiration: 1970.01.01 00:00

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Price trigger: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Loss: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Take Profit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistorySelect( 09:34 , 09:52) = true

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTrade at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

PositionsTotal() = 1 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

OrdersTotal() = 0 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryOrdersTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryDealsTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTradeTransaction at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

------------ TransactionDescription

12:52:52

ExpertAdvisor (EURUSD,H1)

TRADE_TRANSACTION_DEAL_ADD

12:52:52

ExpertAdvisor (EURUSD,H1)

Symbol: EURUSD

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal ticket: 15048668

12:52:52

ExpertAdvisor (EURUSD,H1)

Deal type: DEAL_TYPE_SELL

2000-2014, MetaQuotes Software Corp.

1171

Funes de Negociao (Trade)


12:52:52

ExpertAdvisor (EURUSD,H1)

Order ticket: 16361998

12:52:52

ExpertAdvisor (EURUSD,H1)

Order type: ORDER_TYPE_BUY

12:52:52

ExpertAdvisor (EURUSD,H1)

Order state: ORDER_STATE_STARTED

12:52:52

ExpertAdvisor (EURUSD,H1)

Order time type: ORDER_TIME_GTC

12:52:52

ExpertAdvisor (EURUSD,H1)

Order expiration: 1970.01.01 00:00

12:52:52

ExpertAdvisor (EURUSD,H1)

Price: 1.29313

12:52:52

ExpertAdvisor (EURUSD,H1)

Price trigger: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Stop Loss: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Take Profit: 0

12:52:52

ExpertAdvisor (EURUSD,H1)

Volume: 0.1

12:52:52

ExpertAdvisor (EURUSD,H1)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistorySelect( 09:34 , 09:52) = true

12:52:52

ExpertAdvisor (EURUSD,H1)

=> OnTrade at 09:52:53

12:52:52

ExpertAdvisor (EURUSD,H1)

PositionsTotal() = 1 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

OrdersTotal() = 0 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryOrdersTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

HistoryDealsTotal() = 2 (+0)

12:52:52

ExpertAdvisor (EURUSD,H1)

2000-2014, MetaQuotes Software Corp.

1172

Funes de Negociao (Trade)

PositionsTotal
Retorna o nmero de posies em aberto.
int PositionsTotal();

Valor do Retorno
Valor do tipo int.
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda atuais ordens pendentes com posies, que
tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
O nmero total de posies sobre a conta de negcios no pode exceder totalmente o numero de
instrumentos financeiros.
Tambm Veja
PositionGetSymbol(), PositionSelect(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1173

Funes de Negociao (Trade)

PositionGetSymbol
Retorna o smbolo correspondente para a posio aberta e seleciona automaticamente a posio para
posteriormente trabalhar com ele usando as funes PositionGetDouble, PositionGetInteger,
PositionGetString.
string PositionGetSymbol(
int index

// Nmero na lista de posies

);

Parmetros
index
[in] Nmero de posio na lista de posies abertas.
Valor do Retorno
Valor do tipo string. Se a posio no foi encontrada, uma string vazia ser retornada. Para obter
um cdigo de erro, chamar a funo GetLastError().
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda atuais ordens pendentes com posies, que
tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
O nmero total de posies sobre a conta de negcios no pode exceder totalmente o numero de
instrumentos financeiros.
Tambm Veja
PositionsTotal(), PositionSelect(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1174

Funes de Negociao (Trade)

PositionSelect
Escolhe uma posio aberta para posteriormente trabalhar com ele. Retorna true se a funo for
concluda com xito. Retorna false em caso de falha. Para obter informaes sobre o erro,
chameGetLastError().
bool PositionSelect(
string symbol

// Nome Simbolo

);

Parmetros
symbol
[in] Nome da segurana financeira.
Valor do Retorno
Valor do tipo bool.
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda as posies com os pedidos pendentes, atuais,
que tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
A funo PositionSelect() copia os dados sobre a posio para o ambiente do programa, bem como
outras chamadas de PositionGetDouble(), PositionGetInteger() e PositionGetString() retornar os
dados copiados anteriormente. Isto significa que a posio em si j no podem existir (ou o
volume, orientao, etc mudou), mas ainda podem ser obtidos dados desta posio. Para garantir o
recebimento de novos dados sobre a posio, recomendado chamar PositionSelect() logo antes
referindo-se a eles.
Tambm Veja
PositionGetSymbol(), PositionsTotal(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1175

Funes de Negociao (Trade)

PositionGetDouble
A funo retorna a propriedade solicitada de uma posio aberta, pr-selecionado usando
PositionGetSymbol ou PositionSelect. A propriedade de negcio deve ser do tipo double. Existem 2
variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double PositionGetDouble(
ENUM_POSITION_PROPERTY_DOUBLE property_id

// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da execuo da funo. Se for bem sucedido, o valor
da propriedade colocada em uma varivel de recebimento passada por referncia no ltimo
parmetro.
bool PositionGetDouble(
ENUM_POSITION_PROPERTY_DOUBLE property_id,

// Identificador de propriedade

double&

// Aqui ns aceitamos o valor da propriedade

double_var

);

Parmetros
property_id
[in] Identificador de uma propriedade de operao. O valor pode ser um dos valores da
enumerao ENUM_POSITION_PROPERTY_DOUBLE.
double_var
[out] Varivel de tipo double, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo double. Se a funo falhar, ser retornado 0.
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda as posies com os pedidos pendentes, atuais,
que tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar
PositionSelect() logo antes referindo-se a eles.
Tambm Veja
PositionGetSymbol(), PositionSelect(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1176

Funes de Negociao (Trade)

PositionGetInteger
A funo retorna a propriedade solicitada de uma posio aberta, pr-selecionado usando
PositionGetSymbol ou PositionSelect. A propriedade de operao deve ser de tipo datetime, int.
Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
long PositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGER property_id

// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da execuo da funo. Se for bem sucedido, o valor
da propriedade colocada em uma varivel de recebimento passada por referncia no ltimo
parmetro.
bool PositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGER property_id,

// Identificador de propriedade

long&

// Aqui ns aceitamos o valor da propriedade

long_var

);

Parmetros
property_id
[in] Identificador de uma propriedade de operao. O valor pode ser um dos valores de
enumerao ENUM_POSITION_PROPERTY_INTEGER.
long_var
[out] Varivel de tipo double, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo long. Se a funo falhar, ser retornado 0.
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda as posies com os pedidos pendentes, atuais,
que tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar
PositionSelect() logo antes referindo-se a eles.
Exemplo:
//+------------------------------------------------------------------+
//| Funo Trade

//+------------------------------------------------------------------+
void OnTrade()
{
//--- verificar se a posio est presente e exibir a hora de sua mudana
if(PositionSelect(_Symbol))
{
receber ID posio para trabalhos futuros

2000-2014, MetaQuotes Software Corp.

1177

Funes de Negociao (Trade)


ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
Print(_Symbol," posio #",position_ID);
//--- receber o tempo de posio formando em milissegundos desde 01.01.1970
long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
PrintFormat("Posio #%d

POSITION_TIME_MSC = %i64 milissegundos => %s",position_ID,

create_time_msc,TimeToString(create_time_msc/1000));
//--- receber o tempo da ltima alterao da posio em segundos desde 01.01.1970
long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
PrintFormat("Posio #%d

POSITION_TIME_UPDATE = %i64 segundos => %s",

position_ID,update_time_sec,TimeToString(update_time_sec));
//--- receber o tempo da ltima alterao da posio em milissegundos desde 01.01.1970
long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
PrintFormat("Posio #%d

POSITION_TIME_UPDATE_MSC = %i64 milissegundos => %s",

position_ID,update_time_msc,TimeToString(update_time_msc/1000));
}
//--}

Tambm Veja
PositionGetSymbol(), PositionSelect(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1178

Funes de Negociao (Trade)

PositionGetString
A funo retorna a propriedade solicitada de uma posio aberta, pr-selecionado usando
PositionGetSymbol ou PositionSelect. A propriedade de negcio deve ser do tipo string. Existem 2
variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string PositionGetString(
ENUM_POSITION_PROPERTY_STRING property_id

// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da execuo da funo. Se for bem sucedido, o valor
da propriedade colocada em uma varivel de recebimento passada por referncia no ltimo
parmetro.
bool PositionGetString(
ENUM_POSITION_PROPERTY_STRING property_id,

// Identificador de propriedade

string&

// Aqui ns aceitamos o valor de propriedade

string_var

);

Parmetros
property_id
[in] Identificador de uma propriedade de operao. O valor pode ser um dos valores da
enumerao ENUM_POSITION_PROPERTY_STRING.
string_var
[out] Varivel de tipo string, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo string. Se a funo falhar, uma string vazia retornada.
Observao
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos. No confunda as posies com os pedidos pendentes, atuais,
que tambm so exibidos na aba "negcios" da "caixa de ferramentas" do terminal do cliente.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar
PositionSelect() logo antes referindo-se a eles.
Tambm Veja
PositionGetSymbol(), PositionSelect(), Propriedades de uma Posio

2000-2014, MetaQuotes Software Corp.

1179

Funes de Negociao (Trade)

OrdersTotal
Retorna o nmero de ordens.
int OrdersTotal();

Valor do Retorno
Valor do tipo double.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Uma ordem um pedido para conduzir a transao,
enquanto que uma posio um resultado de um ou mais negcios.
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos.
Tambm Veja
OrderSelect(), OrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1180

Funes de Negociao (Trade)

OrderGetTicket
Retorna o ticket de uma ordem correspondente, selecionando automaticamente a ordem para
trabalhos posteriores usando funes.
ulong OrderGetTicket(
int index

// Nmero na lista de posies

);

Parmetros
index
[in] Nmero de ordem na lista de ordens atuais.
Valor do Retorno
Valor do tipo ulong. Se a funo falhar, ser retornado 0.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Uma ordem um pedido para conduzir a transao,
enquanto que uma posio um resultado de um ou mais negcios.
Para cada smbolo, em qualquer dado momento do tempo, apenas uma posio pode ser aberto, que
o resultado de um ou mais acordos.
OrderGetTicket() funo copia os dados sobre uma ordem para o ambiente do programa, e
posteriormente chamadas de OrderGetDouble(), OrderGetInteger(), OrderGetString() retornar os
dados copiados anteriormente. Isto significa que a prpria ordem pode j no existir (ou seu preo
de abertura, Stop Loss/Take Profit, nveis de lucro ou expirao mudou), mas ainda podem ser
obtidos dados dessa ordem. Para garantir o recebimento de novos dados sobre a posio,
recomendado chamar PositionSelect() logo antes referindo-se a eles.
Exemplo:
void OnStart()
{
//--- variveis para retornar valores das propriedades de ordem
ulong

ticket;

double

open_price;

double

initial_volume;

datetime time_setup;
string

symbol;

string

type;

long

order_magic;

long

positionID;

//--- Numero de ordens atuais pendentes


uint

total=OrdersTotal();

//--- passar por ordens em um loop


for(uint i=0;i<total;i++)
{
//--- voltar ticket ordem por sua posio na lista

2000-2014, MetaQuotes Software Corp.

1181

Funes de Negociao (Trade)


if((ticket=OrderGetTicket(i))>0)
{
//--- retorna propriedades de uma Ordem
open_price

=OrderGetDouble(ORDER_PRICE_OPEN);

time_setup

=(datetime)OrderGetInteger(ORDER_TIME_SETUP);

symbol

=OrderGetString(ORDER_SYMBOL);

order_magic

=OrderGetInteger(ORDER_MAGIC);

positionID

=OrderGetInteger(ORDER_POSITION_ID);

initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
type

=EnumToString(ORDER_TYPE);

//--- preparar e apresentar informaes sobre a ordem


printf("#ticket %d %s %G %s em %G foi criado em %s",
ticket,

// ticket de ordem

type,

// tipo

initial_volume,

// volume colocado

symbol,

// simbolo

open_price,

// preo de abertura especificada

TimeToString(time_setup)// tempo de colocar a ordem


);
}
}
//--}

Tambm Veja
OrdersTotal(), OrderSelect(), OrderGetInteger()

2000-2014, MetaQuotes Software Corp.

1182

Funes de Negociao (Trade)

OrderSelect
Seleciona uma ordem para trabalhar. Retorna verdadeiro se a funo tenha sido concluda com xito.
Retorna false se a concluso funo falhou. Para mais informaes sobre um erro, chame
GetLastError().
bool OrderSelect(
ulong

ticket

// Ticket de ordem

);

Parmetros
ticket
[in] Ticket de ordem.
Valor do Retorno
Valor do tipo bool.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Para cada smbolo, em qualquer dado momento do
tempo, apenas uma posio pode ser aberta, enquanto pode haver vrios pedidos pendentes para o
mesmo smbolo.
A funo OrderGetTicket() funo copia os dados sobre uma ordem para o ambiente do programa, e
posteriormente chamadas de OrderGetDouble(), OrderGetInteger(), OrderGetString() retornar os
dados copiados anteriormente. Isto significa que a prpria ordem pode j no existir (ou seu preo
de abertura, Stop Loss/Take Profit, nveis de lucro ou expirao mudou), mas ainda podem ser
obtidos dados dessa ordem. Para garantir o recebimento de novos dados sobre a posio,
recomendado chamar OrderSelect() logo antes referindo-se a eles.
Tambm Veja
OrderGetInteger(), OrderGetDouble(), OrderGetString(), OrderCalcProfit(), OrderGetTicket(),
Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1183

Funes de Negociao (Trade)

OrderGetDouble
Retorna a propriedade solicitada de uma ordem, pr-selecionado usando OrderGetTicket ou
OrderSelect. A propriedade da ordem deve ser do tipo double. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double OrderGetDouble(
ENUM_ORDER_PROPERTY_DOUBLE property_id

// Identificador de propriedade

);

2. Retorna true ou false, dependendo do sucesso na execuo da funo. Se for bem sucedido, o valor
da propriedade colocado em uma varivel alvo passado por referncia at ao ltimo parmetro.
bool OrderGetDouble(

ENUM_ORDER_PROPERTY_DOUBLE property_id,

// Identificador de propriedade

double&

// Aqui ns aceitamos o valor da propriedade

double_var

);

Parmetros
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_DOUBLE.
double_var
[out] Varivel de tipo double, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo double. Se a funo falhar, ser retornado 0.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Para cada smbolo, em qualquer dado momento do
tempo, apenas uma posio pode ser aberta, enquanto pode haver vrios pedidos pendentes para o
mesmo smbolo.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar OrderSelect()
logo antes referindo-se a eles.
Tambm Veja
OrdersTotal(), OrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1184

Funes de Negociao (Trade)

OrderGetInteger
Retorna a propriedade solicitada de uma ordem, pr-selecionado usando OrderGetTicket ou
OrderSelect. Propriedade de uma Ordem deve ser da tipo datetime, int. Existem 2 variantes da
funo.
1. Imediatamente retorna o valor da propriedade.
long OrderGetInteger(
ENUM_ORDER_PROPERTY_INTEGER property_id

// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool OrderGetInteger(
ENUM_ORDER_PROPERTY_INTEGER property_id,

// Identificador de propriedade

long&

// Aqui ns aceitamos o valor da propriedade

long_var

);

Parmetros
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_INTEGER.
long_var
[out] Varivel do tipo long que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo long. Se a funo falhar, ser retornado 0.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Para cada smbolo, em qualquer dado momento do
tempo, apenas uma posio pode ser aberta, enquanto pode haver vrios pedidos pendentes para o
mesmo smbolo.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar OrderSelect()
logo antes referindo-se a eles.
Tambm Veja
OrdersTotal(), OrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1185

Funes de Negociao (Trade)

OrderGetString
Retorna a propriedade solicitada de uma ordem, pr-selecionado usando OrderGetTicket ou
OrderSelect. A propriedade da ordem deve ser do tipo string. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string OrderGetString(
ENUM_ORDER_PROPERTY_STRING property_id

// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool OrderGetString(
ENUM_ORDER_PROPERTY_STRING property_id,

// Identificador de propriedade

string&

// Aqui ns aceitamos o valor de propriedade

string_var

);

Parmetros
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_STRING.
string_var
[out] Varivel de tipo string que aceita o valor da propriedade requerida...
Valor do Retorno
Valor do tipo string.
Observao
No confunda atuais ordens pendentes com posies, que tambm so exibidos na aba "negcios" da
"caixa de ferramentas" do terminal do cliente. Para cada smbolo, em qualquer dado momento do
tempo, apenas uma posio pode ser aberta, enquanto pode haver vrios pedidos pendentes para o
mesmo smbolo.
Para garantir o recebimento de novos dados sobre a posio, recomendado chamar OrderSelect()
logo antes referindo-se a eles.
Tambm Veja
OrdersTotal(), OrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1186

Funes de Negociao (Trade)

HistorySelect
Recupera o histrico de transaes e ordens para o perodo do tempo de servidor especificado.
bool HistorySelect(
datetime from_date,

// a partir da data

datetime to_date

// at data

);

Parmetros
from_date
[in] Data de inicio do pedido.
to_date
[in] Data de trmino do pedido.
Valor do Retorno
Retorna verdadeiro true se bem sucedido, caso contrrio false.
Observao
HistorySelect() cria uma lista de pedidos e uma lista de comrcios em um programa de MQL5, para
posterior referindo-se aos elementos da lista usando as funes correspondentes. O tamanho da
lista de negcios pode ser devolvido atravs da funo HistoryDealsTotal() o tamanho da lista de
encomendas na histria pode ser obtida usando HistoryOrdersTotal(). Seleo na lista de pedidos
deve ser melhor realizado por HistoryOrderGetTicket(), para itens na lista de negcios
HistoryDealGetTicket() se encaixarem melhor.
Depois de usar HistoryOrderSelect(), a lista de pedidos de histria disponveis para o programa
MQL5 reposto e completada novamente pela ordem encontrada, se a busca de uma ordem do
ticket foi concluda com sucesso. O mesmo aplica-se lista de ofertas disponveis para o programa
MQL5 - reiniciado pelo HistoryDealSelect() e preenchido novamente no caso de uma recepo bem
sucedida de um negcio pelo nmero do ticket.
Exemplo:
void OnStart()
{
color BuyColor =clrBlue;
color SellColor=clrRed;
//--- histria do negcio pedido
HistorySelect(0,TimeCurrent());
//--- cria objetos
string

name;

uint

total=HistoryDealsTotal();

ulong

ticket=0;

double

price;

double

profit;

datetime time;
string

symbol;

long

type;

2000-2014, MetaQuotes Software Corp.

1187

Funes de Negociao (Trade)


long

entry;

//--- para todos os negcios


for(uint i=0;i<total;i++)
{
//--- tentar obter ticket negcios
if((ticket=HistoryDealGetTicket(i))>0)
{
//--- obter as propriedades negcios
price =HistoryDealGetDouble(ticket,DEAL_PRICE);
time

=(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);

symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
type

=HistoryDealGetInteger(ticket,DEAL_TYPE);

entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
//--- apenas para o smbolo atual
if(price && time && symbol==Symbol())
{
//--- cria o preo do objeto
name="TradeHistory_Deal_"+string(ticket);
if(entry) ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
else

ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);

//--- definir propriedades do objeto


ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(0,name,OBJPROP_BACK,0);
ObjectSetInteger(0,name,OBJPROP_COLOR,type?BuyColor:SellColor);
if(profit!=0) ObjectSetString(0,name,OBJPROP_TEXT,"Profit: "+string(profit));
}
}
}
//--- aplicar no grfico
ChartRedraw();
}

Tambm Veja
HistoryOrderSelect(), HistoryDealSelect()

2000-2014, MetaQuotes Software Corp.

1188

Funes de Negociao (Trade)

HistorySelectByPosition
Recupera o histrico de transaes e ordens para o perodo do tempo de servidor especificado.
bool HistorySelectByPosition(
long position_id

// identificar posio - POSITION_IDENTIFIER

);

Parmetros
position_id
[in] Identificador de posio que est definido para cada ordem executada e cada negcio.
Valor do Retorno
Retorna verdadeiro true se bem sucedido, caso contrrio false.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
HistorySelectByPosition() cria em um programa MQL5 uma lista de pedidos e uma lista de ofertas
com um identificador de posio especificada para referncia futura para os elementos da lista,
utilizando as funes apropriadas. Para conhecer o tamanho da lista de promoes, utilizar a funo
HistoryDealsTotal(), o tamanho da lista de encomendas na histria pode ser obtida usando
HistoryOrdersTotal(). Para percorrer os elementos da lista de encomendas, utilize
HistoryOrderGetTicket(), para os elementos da lista de ordens - HistoryDealGetTicket().
Depois de usar HistoryOrderSelect(), a lista do histrico de pedidos disponveis para o programa
MQL5 reposto e completada novamente pela ordem encontrada, se a busca de uma ordem do
ticket foi concluda com sucesso. O mesmo refere-se lista de ofertas disponveis para o programa
MQL5 - reposto pela funo HistoryDealSelect() e preenchido novamente se um acordo foi
encontrado com sucesso pelo numero do ticket.
Tambm Veja
HistorySelect(), HistoryOrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1189

Funes de Negociao (Trade)

HistoryOrderSelect
Seleciona uma ordem a partir do histrico para posterior chamada atravs de funes apropriadas.
Retorna true se a funo tenha sido concluda com xito. Retorna false se a funo teve falha. Para
maiores detalhes sobre erro chamar GetLastError().
bool HistoryOrderSelect(
ulong ticket

// Ticket de ordem

);

Parmetros
ticket
[in] Ticket de ordem.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
HistoryOrderSelect() limpa em um programa de MQL5 a lista de ordens a partir de um histrico,
disponvel para chamadas, e copia ele para uma nica ordem, se a execuo de HistoryOrderSelect()
foi concluda com xito. Se voc precisa passar por todas as negociaes selecionadas pelo
HistorySelect() , voc deve usar melhor o HistoryOrderGetTicket().
Tambm Veja
HistorySelect(), HistoryOrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1190

Funes de Negociao (Trade)

HistoryOrdersTotal
Retorna o nmero de ordens no histrico. Antes de chamar HistoryOrdersTotal(), primeiro
necessrio receber o histrico de negcios e ordens usando a funo HistorySelect() ou a funo
HistorySelectByPosition().
int HistoryOrdersTotal();

Valor do Retorno
Valor do tipo double.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
Tambm Veja
HistorySelect(), HistoryOrderSelect(), HistoryOrderGetTicket(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1191

Funes de Negociao (Trade)

HistoryOrderGetTicket
Retornar o ticket de uma ordem correspondente no histrico. Antes de chamar HistoryDealGetTicket(),
primeiro necessrio receber o histrico de negcios e ordens utilizando a funo HistorySelect() ou a
funo HistorySelectByPosition().
ulong HistoryOrderGetTicket(
int index

// Nmero na lista de posies

);

Parmetros
index
[in] Nmero de ordens em uma lista de ordens.
Valor do Retorno
Valor do tipo ulong. Se a funo falhar, ser retornado 0.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
Exemplo:
void OnStart()
{
datetime from=0;
datetime to=TimeCurrent();
//--- solicitar todo o histrico
HistorySelect(from,to);
//--- variveis para retornar valores das propriedades de ordem
ulong

ticket;

double

open_price;

double

initial_volume;

datetime time_setup;
datetime time_done;
string

symbol;

string

type;

long

order_magic;

long

positionID;

//--- Numero de ordens atuais pendentes


uint

total=HistoryOrdersTotal();

//--- passar por ordens em um loop


for(uint i=0;i<total;i++)
{
//--- voltar ticket ordem por sua posio na lista
if((ticket=HistoryOrderGetTicket(i))>0)
{

2000-2014, MetaQuotes Software Corp.

1192

Funes de Negociao (Trade)


//--- retorna propriedades de uma Ordem
open_price=

HistoryOrderGetDouble(ticket,ORDER_PRICE_OPEN);

time_setup=

(datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_SETUP);

time_done=

(datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_DONE);

symbol=

HistoryOrderGetString(ticket,ORDER_SYMBOL);

order_magic=

HistoryOrderGetInteger(ticket,ORDER_MAGIC);

positionID =

HistoryOrderGetInteger(ticket,ORDER_POSITION_ID);

initial_volume=

HistoryOrderGetDouble(ticket,ORDER_VOLUME_INITIAL);

type=GetOrderType(HistoryOrderGetInteger(ticket,ORDER_TYPE));
//--- preparar e apresentar informaes sobre a ordem
printf("#ticket %d %s %G %s at %G foi criado em %s => feito em %s, pos ID=%d",
ticket,

// ticket de ordem

type,

// tipo

initial_volume,

// volume colocado

symbol,

// simbolo

open_price,

// preo de abertura especificado

TimeToString(time_setup),// tempo de colocar ordem


TimeToString(time_done), // tempo de deletar ou executar a ordem
positionID

// ID de uma posio, ao qual a quantidade de ordem de neg

);
}
}
//--}
//+------------------------------------------------------------------+
//| Retorna o nome string do tipo de ordem

//+------------------------------------------------------------------+
string GetOrderType(long type)
{
string str_type="unknown operation";
switch(type)
{
case (ORDER_TYPE_BUY):

return("compra");

case (ORDER_TYPE_SELL):

return("vender");

case (ORDER_TYPE_BUY_LIMIT):

return("buy limit");

case (ORDER_TYPE_SELL_LIMIT):

return("sell limit");

case (ORDER_TYPE_BUY_STOP):

return("buy stop");

case (ORDER_TYPE_SELL_STOP):

return("sell stop");

case (ORDER_TYPE_BUY_STOP_LIMIT): return("buy stop limit");


case (ORDER_TYPE_SELL_STOP_LIMIT):return("sell stop limit");
}
return(str_type);
}

Tambm Veja
HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1193

Funes de Negociao (Trade)

HistoryOrderGetDouble
Retorna a requisio de propriedade de ordem. A propriedade da ordem deve ser do tipo double.
Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double HistoryOrderGetDouble(
ulong

ticket_number,

ENUM_ORDER_PROPERTY_DOUBLE property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryOrderGetDouble(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_ORDER_PROPERTY_DOUBLE property_id,

// Identificar propriedade

double&

// Aqui ns aceitamos o valor da propriedade

double_var

);

Parmetros
ticket_number
[in] Ticket de ordem.
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_DOUBLE.
double_var
[out] Varivel de tipo double, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo double.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
Tambm Veja
HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1194

Funes de Negociao (Trade)

HistoryOrderGetInteger
Retorna a propriedade solicitada de uma ordem. A propriedade de operao deve ser de tipo datetime,
int. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
long HistoryOrderGetInteger(
ulong

ticket_number,

ENUM_ORDER_PROPERTY_INTEGER property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryOrderGetInteger(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_ORDER_PROPERTY_INTEGER property_id,

// Identificador de propriedade

long&

// Aqui ns aceitamos o valor da propriedade

long_var

);

Parmetros
ticket_number
[in] Ticket de ordem.
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_INTEGER.
long_var
[out] Varivel do tipo long que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo long.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
Exemplo:
//+------------------------------------------------------------------+
//| Funo Trade

//+------------------------------------------------------------------+
void OnTrade()
{
//--- receber ticket da ltima ordem do histrico comercial da semana
ulong last_order=GetLastOrderTicket();

2000-2014, MetaQuotes Software Corp.

1195

Funes de Negociao (Trade)


if(HistoryOrderSelect(last_order))
{
//--- tempo de colocar um ordem em milissegundos desde 01.01.1970
long time_setup_msc=HistoryOrderGetInteger(last_order,ORDER_TIME_SETUP_MSC);
PrintFormat("Ordem #%d ORDER_TIME_SETUP_MSC=%i64 => %s",
last_order,time_setup_msc,TimeToString(time_setup_msc/1000));
//--- execuo/cancelamento de ordens em milissegundos desde 01.01.1970
long

time_done_msc=HistoryOrderGetInteger(last_order,ORDER_TIME_DONE_MSC);

PrintFormat("Ordem #%d ORDER_TIME_DONE_MSC=%i64 => %s",


last_order,time_done_msc,TimeToString(time_done_msc/1000));
}
else // notificao sobre falha
PrintFormat("HistoryOrderSelect() falhou por #%d. Cdigo de erro=%d",
last_order,GetLastError());
//--}
//+------------------------------------------------------------------+
//| Retorna o ltimo ticket de ordem em histrico ou -1

//+------------------------------------------------------------------+
ulong GetLastOrderTicket()
{
requisita o histrico para os ltimos 7 dias
if(!GetTradeHistory(7))
{
//--- notificar sobre chamada sem sucesso e retorno -1
Print(__FUNCTION__," HistorySelect() retornou false");
return -1;
}
//--ulong first_order,last_order,orders=HistoryOrdersTotal();
//--- trabalhar com ordens se houver alguma
if(orders>0)
{
Print("Ordens = ",orders);
first_order=HistoryOrderGetTicket(0);
PrintFormat("first_order = %d",first_order);
if(orders>1)
{
last_order=HistoryOrderGetTicket((int)orders-1);
PrintFormat("last_order = %d",last_order);
return last_order;
}
return first_order;
}
//--- nenhuma ordem encontrada, retornar -1
return -1;
}
//+---------------------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1196

Funes de Negociao (Trade)


//| Solicitaes de histrico para os ltimos dias e retorna false em caso de falha|
//+---------------------------------------------------------------------------------+
bool GetTradeHistory(int days)
{
//--- define um perodo da semana para solicitar histrico da operao
datetime to=TimeCurrent();
datetime from=to-days*PeriodSeconds(PERIOD_D1);
ResetLastError();
//--- fazer um pedido e verificar o resultado
if(!HistorySelect(from,to))
{
Print(__FUNCTION__," HistorySelect=false. Cdigo de erro=",GetLastError());
return false;
}
//--- histrico recebido com sucesso
return true;
}

Tambm Veja
HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1197

Funes de Negociao (Trade)

HistoryOrderGetString
Retorna a propriedade solicitada de uma ordem. A propriedade da ordem deve ser do tipo string.
Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string HistoryOrderGetString(
ulong

ticket_number,

ENUM_ORDER_PROPERTY_STRING property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryOrderGetString(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_ORDER_PROPERTY_STRING property_id,

// Identificador de propriedade

string&

// Aqui ns aceitamos o valor de propriedade

string_var

);

Parmetros
ticket_number
[in] Ticket de ordem.
property_id
[in] Identificador da propriedade ordem. O valor pode ser um dos valores da enumerao
ENUM_ORDER_PROPERTY_STRING.
string_var
[out] Varivel do tipo string.
Valor do Retorno
Valor do tipo string.
Observao
No confundir ordens de um histrico de negociao com as ordens pendentes que aparecem no
separador "Comrcio (Trade) da barra de "caixa de ferramentas" (Toolbox). A lista de ordens que
foram cancelados ou levaram a uma transao, pode ser visto na aba "Histrico" da "caixa de
ferramentas" do terminal do cliente.
Tambm Veja
HistorySelect(), HistoryOrdersTotal(), HistoryOrderSelect(), Propriedades de uma Ordem

2000-2014, MetaQuotes Software Corp.

1198

Funes de Negociao (Trade)

HistoryDealSelect
Seleciona um negcio no histrico para posterior chamada atravs de funes apropriadas. Retorna
true se a funo tenha sido concluda com xito. Retorna false se a funo teve falha. Para maiores
detalhes sobre erro chamar GetLastError().
bool HistoryDealSelect(
ulong ticket

// Ticket de negcio

);

Parmetros
ticket
[in] Ticket de operao.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
HistoryDealSelect() limpa a lista de negcios disponveis para consulta em um programa-MQL5, e
copia um nico negcio, se a execuo de HistoryDealSelect() foi concluda com xito. Se voc
precisa passar por todos os negcios selecionados pela funo HistorySelect(), melhor voc usar
HistoryDealGetTicket().
Tambm Veja
HistorySelect(), HistoryDealGetTicket(), Propriedades de Negcio

2000-2014, MetaQuotes Software Corp.

1199

Funes de Negociao (Trade)

HistoryDealsTotal
Retorna o nmero de ordens no histrico. Retorna o nmero de negcio no histrico. Antes de chamar
HistoryDealsTotal(), primeiro necessrio receber o histrico de negcios e ordens utilizando a
funo HistorySelect() ou a funo HistorySelectByPosition().
int HistoryDealsTotal();

Valor do Retorno
Valor do tipo double.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
Tambm Veja
HistorySelect(), HistoryDealGetTicket(), Propriedades de Negcio

2000-2014, MetaQuotes Software Corp.

1200

Funes de Negociao (Trade)

HistoryDealGetTicket
A funo seleciona um negcio para processamento posterior e retorna o ticket de negcio na histria.
Antes de chamar HistoryDealGetTicket (), primeiro necessrio receber o histrico de negcios e
ordens utilizando a funo HistorySelect() ou a funo HistorySelectByPosition().
ulong HistoryDealGetTicket(
int index

// ticket de negcio

);

Parmetros
index
[in] Nmero de um negcio na lista de negociaes
Valor do Retorno
Valor do tipo ulong. Se a funo falhar, ser retornado 0.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
Exemplo:
void OnStart()
{
ulong deal_ticket;

// bilhetagem da operao (deal)

ulong order_ticket;

// ticket da ordem que o negcio foi executado em

datetime transaction_time;

// tempo de execuo de um negcio

long deal_type ;

// tipo de operao comercial

long position_ID;

// ID posio

string deal_description;

// descrio da operao

double volume;

// volume da operao

string symbol;

// ativo da negociao

//--- definir a data inicial e final para solicitar o histrico dos negcios
datetime from_date=0;

// desde o princpio

datetime to_date=TimeCurrent();//at o momento atual


//--- solicita o histrico das negociaes no perodo especificado
HistorySelect(from_date,to_date);
//--- nmero total na lista das negcios
int deals=HistoryDealsTotal();
//--- agora processar cada trade (negcio)
for(int i=0;i<deals;i++)
{
deal_ticket=

HistoryDealGetTicket(i);

volume=

HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);

transaction_time=(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME);
order_ticket=

HistoryDealGetInteger(deal_ticket,DEAL_ORDER);

deal_type=

HistoryDealGetInteger(deal_ticket,DEAL_TYPE);

symbol=

HistoryDealGetString(deal_ticket,DEAL_SYMBOL);

2000-2014, MetaQuotes Software Corp.

1201

Funes de Negociao (Trade)


position_ID=

HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

deal_description=

GetDealDescription(deal_type,volume,symbol,order_ticket,position_I

//--- realizar uma boa formatao para o nmero de negcio


string print_index=StringFormat("% 3d",i);
//--- mostrar informaes sobre o negcio
Print(print_index+": deal #",deal_ticket," em ",transaction_time,deal_description);
}
}
//+------------------------------------------------------------------+
//| Retorna a descrio string da operao

//+------------------------------------------------------------------+
string GetDealDescription(long deal_type,double volume,string symbol,long ticket,long pos_ID)
{
string descr;
//--switch(deal_type)
{
case DEAL_TYPE_BALANCE:

return ("balance");

case DEAL_TYPE_CREDIT:

return ("credit");

case DEAL_TYPE_CHARGE:

return ("charge");

case DEAL_TYPE_CORRECTION:

return ("correo");

case DEAL_TYPE_BUY:

descr="compra"; break;

case DEAL_TYPE_SELL:

descr="vender"; break;

case DEAL_TYPE_BONUS:

return ("bonus");

case DEAL_TYPE_COMMISSION:

return ("comisso adicional");

case DEAL_TYPE_COMMISSION_DAILY:

return ("comisso diria");

case DEAL_TYPE_COMMISSION_MONTHLY:

return ("comisso mensal");

case DEAL_TYPE_COMMISSION_AGENT_DAILY:

return ("comisso de agente dirio");

case DEAL_TYPE_COMMISSION_AGENT_MONTHLY: return ("comisso de agente mensal");


case DEAL_TYPE_INTEREST:

return ("taxa de juros");

case DEAL_TYPE_BUY_CANCELED:

descr="cancelado comprar negcio"; break;

case DEAL_TYPE_SELL_CANCELED:

descr="cancelado vender negcio"; break;

}
descr=StringFormat("%s %G %s (ordem #%d, a posio ID %d)",
descr,

// descrio atual

volume, // volume de negcio


symbol, // ativo de negcio
ticket, // ticket da ordem que provocou o negcio
pos_ID

// ID de uma posio, na qual a negcio includo

);
return(descr);
//--}

Tambm Veja
HistorySelect(), HistoryDealsTotal(), HistoryDealSelect(), Propriedades de uma Operao

2000-2014, MetaQuotes Software Corp.

1202

Funes de Negociao (Trade)

HistoryDealGetDouble
Retorna a propriedade solicitada de uma operao. A propriedade de negcio deve ser do tipo double.
Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double HistoryDealGetDouble(
ulong

ticket_number,

ENUM_DEAL_PROPERTY_DOUBLE property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryDealGetDouble(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_DEAL_PROPERTY_DOUBLE property_id,

// Identificador de propriedade

double&

// Aqui ns aceitamos o valor da propriedade

double_var

);

Parmetros
ticket_number
[in] Ticket de operao.
property_id
[in] Identificador de uma propriedade de operao. O valor pode ser um dos valores da
enumerao ENUM_DEAL_PROPERTY_DOUBLE.
double_var
[out] Varivel de tipo double, que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo double.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
Tambm Veja
HistorySelect(), HistoryDealsTotal(), HistoryDealSelect(), Propriedades de uma Operao

2000-2014, MetaQuotes Software Corp.

1203

Funes de Negociao (Trade)

HistoryDealGetInteger
Retorna a propriedade solicitada de uma operao. A propriedade de operao deve ser de tipo
datetime, int. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
long HistoryDealGetInteger(
ulong

ticket_number,

ENUM_DEAL_PROPERTY_INTEGER property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryDealGetInteger(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_DEAL_PROPERTY_INTEGER property_id,

// Identificador de propriedade

long&

// Aqui ns aceitamos o valor da propriedade

long_var

);

Parmetros
ticket_number
[in] Ticket (bilhete) de negcio.
property_id
[in] Identificador da propriedade de operao. O valor pode ser um dos valores da enumerao
ENUM_DEAL_PROPERTY_INTEGER.
long_var
[out] Varivel do tipo long que aceita o valor da propriedade requerida.
Valor do Retorno
Valor do tipo long.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
Exemplo:
//+------------------------------------------------------------------+
//| Funo Trade

//+------------------------------------------------------------------+
void OnTrade()
{
//--- receber ticket da ltima operao do histrico comercial da semana
ulong last_deal=GetLastDealTicket();
if(HistoryDealSelect(last_deal))

2000-2014, MetaQuotes Software Corp.

1204

Funes de Negociao (Trade)


{
//--- tempo de operaes executadas em milissegundos desde 01.01.1970
long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC);
PrintFormat("Deal #%d DEAL_TIME_MSC=%i64 => %s",
last_deal,deal_time_msc,TimeToString(deal_time_msc/1000));
}
else
PrintFormat("HistoryDealSelect() falhou por #%d. Cdigo de erro=%d",
last_deal,GetLastError());
//--}
//+------------------------------------------------------------------+
//| Retorna o ltimo bilhete de operao no histrico ou -1

//+------------------------------------------------------------------+
ulong GetLastDealTicket()
{
requisita o histrico para os ltimos 7 dias
if(!GetTradeHistory(7))
{
//--- notificar sobre chamada sem sucesso e retorno -1
Print(__FUNCTION__," HistorySelect() retornou false");
return -1;
}
//--ulong first_deal,last_deal,deals=HistoryOrdersTotal();
//--- trabalhar com ordens se houver alguma
if(deals>0)
{
Print("Deals = ",deals);
first_deal=HistoryDealGetTicket(0);
PrintFormat("first_deal = %d",first_deal);
if(deals>1)
{
last_deal=HistoryDealGetTicket((int)deals-1);
PrintFormat("last_deal = %d",last_deal);
return last_deal;
}
return first_deal;
}
//--- nenhuma operao encontrada, retornar -1
return -1;
}
//+---------------------------------------------------------------------------------+
//| Solicitaes de histrico para os ltimos dias e retorna false em caso de falha|
//+---------------------------------------------------------------------------------+
bool GetTradeHistory(int days)
{
//--- define um perodo da semana para solicitar histrico da operao
datetime to=TimeCurrent();

2000-2014, MetaQuotes Software Corp.

1205

Funes de Negociao (Trade)


datetime from=to-days*PeriodSeconds(PERIOD_D1);
ResetLastError();
//--- fazer um pedido e verificar o resultado
if(!HistorySelect(from,to))
{
Print(__FUNCTION__," HistorySelect=false. Cdigo de erro=",GetLastError());
return false;
}
//--- histrico recebido com sucesso
return true;
}

Tambm Veja
HistorySelect(), HistoryDealsTotal(), HistoryDealSelect(), Propriedades de uma Operao

2000-2014, MetaQuotes Software Corp.

1206

Funes de Negociao (Trade)

HistoryDealGetString
Retorna a propriedade solicitada de uma operao. A propriedade de negcio deve ser do tipo string.
Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string HistoryDealGetString(
ulong

ticket_number,

ENUM_DEAL_PROPERTY_STRING property_id

// Ticket (bilhete)
// Identificador de propriedade

);

2. Retorna true ou false dependendo do sucesso da funo. Se for bem sucedido, o valor da
propriedade est situada dentro de uma varivel de destino passado por referncia pelo ltimo
parmetro.
bool HistoryDealGetString(
ulong

ticket_number,

// Ticket (bilhete)

ENUM_DEAL_PROPERTY_STRING property_id,

// Identificador de propriedade

string&

// Aqui ns aceitamos o valor de propriedade

string_var

);

Parmetros
ticket_number
[in] Ticket de operao.
property_id
[in] Identificador da propriedade de operao. O valor pode ser um dos valores da enumerao
ENUM_DEAL_PROPERTY_STRING.
string_var
[out] Varivel de tipo string que aceita o valor da propriedade requerida...
Valor do Retorno
Valor do tipo string.
Observao
No confunda ordens, operaes e posies. Cada operao o resultado da execuo de uma
ordem, cada posio o resumo de um ou mais operaes.
Tambm Veja
HistorySelect(), HistoryDealsTotal(), HistoryDealSelect(), Propriedades de uma Operao

2000-2014, MetaQuotes Software Corp.

1207

Variveis Globais do Terminal

Variveis Globais do Terminal de Cliente


H um grupo que define as funes para trabalhar com variveis globais.
Variveis globais do terminal de cliente no deve ser confundida com as variveis declaradas no
escopo global do programa mql5.
Variveis globais so guardadas no terminal de cliente por 4 semanas desde o ltimo acesso, ento
elas sero excludas automaticamente. Um acesso para a varivel global no somente a definio de
um novo valor, mas a leitura do valor da varvel global, tambm.
As variveis globais do terminal de cliente so acessveis simultaneamente de todos os programas
mql5 executados no terminal do cliente.
Funo

Ao

GlobalVariableCheck

Verifica a existncia de uma varivel global


com o nome especificado

GlobalVariableTime

Retorna o tempo do ltimo acesso para a


varivel global

GlobalVariableDel

Exclui uma varivel global

GlobalVariableGet

Retorna o valor da varivel global

GlobalVariableName

Retorna o nome de uma varivel global, que o


nmero ordinal dentro da lista de variveis
globais

GlobalVariableSet

Define o novo valor para uma varivel global

GlobalVariablesFlush

Salva foradamente o contedo de todas as


varveis globais num disco

GlobalVariableTemp

Define o novo valor para uma varivel global,


que existe somente na sesso geral do terminal

GlobalVariableSetOnCondition

Define um novo valor de existncia de varivel


global pela condio estabelecida

GlobalVariablesDeleteAll

Exclui as variveis globais com especificao


prefixada em seus nomes

GlobalVariablesTotal

Retorna o nmero total de Variveis Globais

2000-2014, MetaQuotes Software Corp.

1208

Variveis Globais do Terminal

GlobalVariableCheck
Verifica a existncia de uma varivel global com o nome especificado
bool GlobalVariableCheck(
string name

// Nome da varivel global

);

Parmetros
name
[in] Nome da varivel global.
Valor do Retorno
Retorna true, se a varivel global existe, caso contrrio, retorna false.
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente.
Tambm Veja
GlobalVariableTime()

2000-2014, MetaQuotes Software Corp.

1209

Variveis Globais do Terminal

GlobalVariableTime
Retorna o tempo em que a varivel global foi acessado pela ltima vez.
datetime GlobalVariableTime(
string name

// nome

);

Parmetros
name
[in] Nome da varivel global.
Valor do Retorno
A funo retorna hora do ltimo acesso varivel global especificada. Chamando uma varivel para
obter um valor tambm considerado como um acesso a ele. A fim de obter os detalhes do erro
chamar a funo GetLastError().
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao.
Depois disso, eles so excludos automaticamente.
Tambm Veja
GlobalVariableCheck()

2000-2014, MetaQuotes Software Corp.

1210

Variveis Globais do Terminal

GlobalVariableDel
Exclui uma varivel global a partir do terminal do cliente.
bool GlobalVariableDel(
string name

// Nome da varivel global

);

Parmetros
name
[in] Nome da varivel global.
Valor do Retorno
Se bem sucedida, a funo retorna true, caso contrrio ela retorna false. Para obter uma informao
sobre o erro necessrio chamar a funo GetLastError().
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente.

2000-2014, MetaQuotes Software Corp.

1211

Variveis Globais do Terminal

GlobalVariableGet
Retorna o valor de uma varivel global existente do terminal do cliente. Existem 2 variantes da
funo.
1. Imediatamente retorna o valor da varivel global.
double GlobalVariableGet(
string name

// Nome da varivel global

);

2. Retorna true ou false dependendo do sucesso da execuo da funo. Se for bem sucedido, a
varivel global do terminal do cliente colocado em uma varivel passada por referncia no segundo
parmetro.
bool GlobalVariableGet(
string name,

// Nome da varivel global

double&double_var

// Esta varivel ir conter o valor da varivel global

);

Parmetros
name
[in] Nome da varivel global.
double_var
[out] Alvo varivel do tipo duplo, que aceita o valor armazenado em uma varivel global do
terminal do cliente.
Valor do Retorno
O valor da varivel global existente ou 0(zero) em caso de um erro. Para mais detalhes sobre o erro,
chamar GetLastError().
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente.

2000-2014, MetaQuotes Software Corp.

1212

Variveis Globais do Terminal

GlobalVariableName
Retorna o nome de uma varivel global, que o nmero ordinal.
string GlobalVariableName(
int index

// Nmero varivel global na lista de variveis globais

);

Parmetros
index
[in] Nmero de seqncia na lista de variveis globais. Ele deve ser maior ou igual a 0(zero) e
menor do que GlobalVariablesTotal().
Valor do Retorno
Nome da varivel global, que o nmero ordinal na lista de variveis globais. Para mais detalhes
sobre o erro, chamar GetLastError().
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente.

2000-2014, MetaQuotes Software Corp.

1213

Variveis Globais do Terminal

GlobalVariableSet
Define um novo valor para uma varivel global. Se a varivel no existir, o sistema cria uma nova
varivel global.
datetime GlobalVariableSet(
string name,

// Nome da varivel global

double value

// Valor a ser definido

);

Parmetros
name
[in] Nome da varivel global.
value
[in] O novo valor numrico.
Valor do Retorno
Se for bem sucedido, a funo retorna a ltima modificao, caso contrrio, 0 (zero). Para mais
detalhes sobre o erro, chamar GetLastError().
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente.

2000-2014, MetaQuotes Software Corp.

1214

Variveis Globais do Terminal

GlobalVariablesFlush
Salva foradamente o contedo de todas as varveis globais num disco.
void GlobalVariablesFlush();

Valor do Retorno
Sem valor de retorno.
Observao
O terminal escreve todas as variveis globais quando o trabalho em excesso, mas os dados podem
ser perdidos em uma falha sbita de operao do computador. Esta funo permite controle
independente do processo de salvar variveis globais em caso de contingncia.

2000-2014, MetaQuotes Software Corp.

1215

Variveis Globais do Terminal

GlobalVariableTemp
A funo tenta criar uma varivel global temporria. Se a varivel no existir, o sistema cria uma
nova varivel global temporria.
bool GlobalVariableTemp(
string name

// Nome da varivel global

);

Parmetros
name
[in] O nome de uma varivel global temporria.
Valor do Retorno
Se for bem sucedido, a funo retorna true, caso contrrio - false. Para obter detalhes sobre o erro,
voc deve chamar a funo GetLastError().
Observao
Variveis globais temporrios existem apenas enquanto o terminal do cliente est sendo executado,
aps o desligamento do terminal eles so excludos automaticamente. Note-se que durante a
execuo de GlobalVariablesFlush() variveis globais temporrias no so gravados em um disco.
Depois de uma varivel global temporrio tiver sido criado, pode ser acedido e modificado a mesma
varivel global do terminal do cliente.

2000-2014, MetaQuotes Software Corp.

1216

Variveis Globais do Terminal

GlobalVariableSetOnCondition
Define o novo valor da varivel global existente, se o valor da corrente igual ao terceiro parmetro
check_value. Se no houver nenhuma varivel global, a funo ir gerar um erro
ERR_GLOBALVARIABLE_NOT_FOUND (4501) e voltar false.
bool GlobalVariableSetOnCondition(
string name,

// Nome da varivel global

double value,

// Novo valor para a varivel, se a condio for verdadeira

double check_value

// Verifique condio de valor

);

Parmetros
name
[in] O nome de uma varivel global.
value
[in] Novo valor.
check_value
[in] O valor para verificar o valor atual da varivel global.
Valor do Retorno
Se bem sucedida, a funo retorna true, caso contrrio ela retorna false. Para obter detalhes sobre
o erro chamar GetLastError(). Se o valor atual da varivel global diferente de check_value, a
funo retorna false.
Observao
Funo fornece acesso atmico a varivel global, para que ele possa ser utilizado para a prestao
de uma excluso mtua na interao de vrios consultores especializados trabalhando
simultaneamente dentro de um terminal de cliente.

2000-2014, MetaQuotes Software Corp.

1217

Variveis Globais do Terminal

GlobalVariablesDeleteAll
Apaga as variveis globais do terminal do cliente.
int GlobalVariablesDeleteAll(
string

prefix_name=NULL,

datetime limit_data=0

// Todas as variveis globais com nomes que comeam com o prefi

// Todas as variveis globais que foram alteradas antes desta d

);

Parmetros
prefix_name=NULL
[in] Prefixo do nome de variveis globais para remover. Se voc especificar um prefixo NULL ou
string vazia, ento todas as variveis que atendam o critrio dados sero apagados.
limit_data=0
[in] Data para selecionar as variveis globais no momento de sua ltima modificao. A funo
remove variveis globais, que foram alteradas antes desta data. Se o parmetro for zero, ento
todas as variveis que atendam o primeiro critrio (prefixo) so excludos.
Valor do Retorno
O nmero de variveis apagados.
Observao
Se ambas as opes so iguais a zero (prefix_name = NULL e limit_data = 0), ento funo exclui
todas as variveis globais da terminao. Se ambos os parmetros so especificados, ento ele
elimina variveis globais correspondentes a ambos os parmetros.
As variveis globais existem no terminal do cliente durante 4 semanas desde suas ltima utilizao,
ento eles so excludos automaticamente.

2000-2014, MetaQuotes Software Corp.

1218

Variveis Globais do Terminal

GlobalVariablesTotal
Retorna o nmero total de Variveis Globais do Terminal de Cliente.
int GlobalVariablesTotal();

Valor do Retorno
Nmero de variveis globais.
Observao
As variveis globais existem no terminal do cliente durante 4 semanas desde a ltima utilizao,
ento eles so excludos automaticamente. Chamada de uma varivel global est a definir no s
um novo valor, mas tambm a leitura do valor da varivel global.

2000-2014, MetaQuotes Software Corp.

1219

Funes de Arquivo

Funes de Arquivo
Este um grupo de funes para trabalhar com arquivos.
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5. Arquivos
com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar fora da
caixa de proteo do arquivo.
Existem dois diretrios(com subdiretrios) onde os arquivos de trabalho esto localizados:
terminal_data_folder\MQL5\FILES\ (no menu do terminal selecione para ver "Arquivo" - "Abrir o
diretrio de dados");
na pasta comum para todos os terminais instalados no computador - geralmente no diretrio C:
\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common\ (C:\Documentos
e Configuraes\Todos Usurios\Dados de Aplicativos\MetaQuotes\Comum).
Existe um mtodo de programa para obter nome destes catlogos
TerminalInfoString(), usando a enumerao ENUM_TERMINAL_INFO_STRING:

usando

funo

//--- Pasta que armazena os dados do terminal


string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
//--- Pasta comum para todos os terminais de clientes
string common_data_path=TerminalInfoString(TERMINAL_COMMONDATA_PATH);

Trabalhar com arquivos de outros diretrios proibido.


Funes de arquivo permitem trabalhar com os assim chamados "pipes nomeados". Para isto, chamar
simplesmente a funo FileOpen() com o parmetro apropriado.
Funo

Ao

FileFindFirst

Comea a busca de arquivos em um diretrio de


acordo com o filtro especificado

FileFindNext

Continua a busca
FileFindFirst()

FileFindClose

Fecha o manipulador de busca

FileOpen

Abre um arquivo com o nome e bandeira


especificada

FileDelete

Deleta um arquivo especificado

FileFlush

Escreve para um disco todos os dados


remanescentes dentro da entrada/sada do
arquivo buffer

FileGetInteger

Obtm uma propriedade inteira de um arquivo

FileIsEnding

Define o final do arquivo em processo de leitura

FileIsLineEnding

Define o final da linha do arquivo de texto em


processo de leitura

FileClose

Fecha um arquivo aberto previamente

2000-2014, MetaQuotes Software Corp.

iniciada

pela

funo

1220

Funes de Arquivo

FileIsExist

Verifica a e existncia de um arquivo

FileCopy

Copia o arquivo original a partir de um local ou


de uma pasta compartilhada em outro arquivo

FileMove

Move ou renomeia um arquivo

FileReadArray

L arrays de qualquer tipo, exceto para a


seqncia a partir do arquivo do tipo BIN

FileReadBool

L a partir de arquivo do tipo CSV uma


seqncia a partir da posio atual at um
delimitador (ou at o fim de uma linha de
texto) e converte a seqncia de leitura para
um valor do tipo bool

FileReadDatetime

L a partir do arquivo do tipo CSV uma


seqncia de um dos formatos: "YYYY.MM.DD
HH:MM:SS", "YYYY.MM.DD" or "HH:MM:SS" - e
converte-os dentro de valor de datetime

FileReadDouble

L um valor double a partir da posio atual do


ponteiro de arquivo

FileReadFloat

L um valor float a partir da posio atual do


ponteiro de arquivo

FileReadInteger

L um valor int, short ou char a partir da


posio atual do ponteiro de arquivo

FileReadLong

L um valor do tipo long a partir da posio


atual do ponteiro de arquivo

FileReadNumber

L a partir de arquivo do tipo CSV uma


seqncia a partir da posio atual at um
delimitador (ou at o fim de uma linha de
texto) e converte a seqncia de leitura em um
valor double

FileReadString

L uma seqncia a partir da posio atual do


ponteiro a partir de um arquivo

FileReadStruct

L o contedo de um arquivo binrio em uma


estrutura passada como um parmetro, a partir
da posio atual do ponteiro do arquivo

FileSeek

Move a posio do ponteiro de arquivo por um


determinado nmero de bytes em relao
posio especificada

FileSize

Retorna o tamanho da abertura de um arquivo


correspondente

FileTell

Retorna a posio atual do ponteiro de um


arquivo da abertura de arquivo correspondente

FileWrite

Escreve dados para um arquivo de CSV ou tipo

2000-2014, MetaQuotes Software Corp.

1221

Funes de Arquivo

TXT
FileWriteArray

Escreve arrays de qualquer tipo exceto para


seqncia em um arquivo do tipo BIN

FileWriteDouble

Escreve valor do tipo double a partir da posio


atual de um ponteiro de arquivo em um arquivo
binrio

FileWriteFloat

Escreve o valor do tipo float a partir da posio


atual de um ponteiro de arquivo em um arquivo
binrio

FileWriteInteger

Escreve o valor do tipo int a partir da posio


atual de um ponteiro de arquivo em um arquivo
binrio

FileWriteLong

Escreve o valor do tipo long a partir da posio


atual de um ponteiro de arquivo em um arquivo
binrio

FileWriteString

Escreve o valor de um parmetro da string em


um arquivo BIN ou TXT iniciando a partir da
posio atual do ponteiro de arquivo

FileWriteStruct

Escreve o contedo de uma estrutura passada


como um parmetro em um arquivo binrio,
comeando a partir da posio atual do ponteiro
de arquivo

FolderCreate

Cria uma pasta dentro do diretrio de arquivo

FolderDelete

Remove um diretrio selecionado. Se a pasta


no estiver vazia, ento ele no pode ser
removido

FolderClean

Deleta todos os arquivos dentro da pasta


especificada

Se o arquivo aberto para escrever usando FileOpen(),todas as sub-pastas especificadas no caminho


sero criadas se elas no existirem.

2000-2014, MetaQuotes Software Corp.

1222

Funes de Arquivo

FileFindFirst
A funo comea a busca de arquivos e subdiretrios em um diretrio de acordo com o filtro
especificado.
long FileFindFirst(
const string

file_filter,

// String - filtro de pesquisa

string&

returned_filename,

// Nome do arquivo ou subdiretrio encontrado

int

common_flag=0

// Define a pesquisa

);

Parmetros
file_filter
[in] Filtro de pesquisa. Um subdiretrio (ou seqncia de subdiretrios aninhados) relativo ao
diretrio \Files, em que os arquivos devem ser procurados, podem ser especificados no filtro.
returned_filename
[out] O parmetro retornado, onde, em caso de sucesso, o nome do primeiro arquivo encontrado
ou subdiretrio colocado.
common_flag
[in] Bandeira determinando a localizao do arquivo. Se common_flag = FILE_COMMON, ento o
arquivo est localizado em uma pasta compartilhada para todos os terminais de cliente. Caso
contrrio, o arquivo est localizado em uma pasta local.
Valor do Retorno
Retorna o manipulador do objeto pesquisado, que deve ser utilizado para posterior triagem dos
arquivos e subdiretrios pela funo FileFindNext(), ou INVALID_HANDLE quando no h nenhum
arquivo e subdiretrio correspondente ao filtro (no caso particular - quando o diretrio est vazio.
Aps a pesquisa, o manipulador deve ser fechado usando a funo FileFindClose().
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- filtro
input string InpFilter="*";
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string file_name;
int

i=1;

//--- receber o manipulador de pesquisa na raiz da pasta local

2000-2014, MetaQuotes Software Corp.

1223

Funes de Arquivo
long search_handle=FileFindFirst(InpFilter,file_name);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- verificar se as strings passadas so nomes de arquivo ou diretrio no loop
do
{
ResetLastError();

//--- se este um arquivo, a funo retornar verdadeiro, se um diretrio, a funo ir


FileIsExist(file_name);

PrintFormat("%d : %s nome = %s",i,GetLastError()==5018 ? "Diretrio" : "Arquivo",file_name


i++;
}
while(FileFindNext(search_handle,file_name));
//--- Fechar manipulador de pesquisa
FileFindClose(search_handle);
}
else
Print("Arquivo no encontrado!");
}

Tambm Veja
FileFindNext, FileFindClose

2000-2014, MetaQuotes Software Corp.

1224

Funes de Arquivo

FileFindNext
A funo continua a busca iniciada por FileFindFirst().
bool FileFindNext(
long

search_handle,

// Manipular pesquisa

string&

returned_filename

// Nome do arquivo ou subdiretrio encontrado

);

Parmetros
search_handle
[in] Manipulador de pesquisa, recuperado por FileFindFirst().
returned_filename
[out] O nome do prximo arquivo ou subdiretrio encontrado.
Valor do Retorno
Se bem sucedido retorna verdadeiro, caso contrrio false.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- filtro
input string InpFilter="*";
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string file_name;
int

i=1;

//--- receber o manipulador de pesquisa na raiz da pasta local


long search_handle=FileFindFirst(InpFilter,file_name);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- verificar se as strings passadas so nomes de arquivo ou diretrio no loop
do
{
ResetLastError();

//--- se este um arquivo, a funo retornar verdadeiro, se um diretrio, a funo ir


FileIsExist(file_name);

PrintFormat("%d : %s nome = %s",i,GetLastError()==5018 ? "Diretrio" : "Arquivo",file_name


i++;
}
while(FileFindNext(search_handle,file_name));
//--- Fechar manipulador de pesquisa
FileFindClose(search_handle);

2000-2014, MetaQuotes Software Corp.

1225

Funes de Arquivo
}
else
Print("Arquivo no encontrado!");
}

Tambm Veja
FileFindFirst, FileFindClose

2000-2014, MetaQuotes Software Corp.

1226

Funes de Arquivo

FileFindClose
A funo fecha o identificador pesquisa.
void FileFindClose(
long search_handle

//

Manipular pesquisa

);

Parmetros
search_handle
[in] Manipulador de pesquisa, recuperado por FileFindFirst().
Valor do Retorno
Sem valor retornado.
Observao
Funo deve ser chamado para liberar recursos do sistema.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- filtro
input string InpFilter="*";
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string file_name;
int

i=1;

//--- receber o manipulador de pesquisa na raiz da pasta local


long search_handle=FileFindFirst(InpFilter,file_name);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- verificar se as strings passadas so nomes de arquivo ou diretrio no loop
do
{
ResetLastError();

//--- se este um arquivo, a funo retornar verdadeiro, se um diretrio, a funo ir


FileIsExist(file_name);

PrintFormat("%d : %s nome = %s",i,GetLastError()==5018 ? "Diretrio" : "Arquivo",file_name


i++;
}
while(FileFindNext(search_handle,file_name));
//--- Fechar manipulador de pesquisa
FileFindClose(search_handle);
}

2000-2014, MetaQuotes Software Corp.

1227

Funes de Arquivo
else
Print("Arquivo no encontrado!");
}

Tambm Veja
FileFindFirst, FileFindNext

2000-2014, MetaQuotes Software Corp.

1228

Funes de Arquivo

FileIsExist
Verifica a existncia de um arquivo.
bool FileIsExist(
const string file_name,

// Nome do arquivo

int

// rea de pesquisa

common_flag=0

);

Parmetros
file_name
[in] O nome do arquivo a ser verificado
common_flag=0
[in] Bandeira determinando a localizao do arquivo. Se common_flag = FILE_COMMON, ento o
arquivo est localizado em uma pasta compartilhada para todos os terminais de cliente. Caso
contrrio, o arquivo est localizado em uma pasta local.
Valor do Retorno
Retorna true, se o arquivo especificado existe.
Observao
Arquivo verificado pode vir a ser um subdiretrio. Neste caso, FileIsExist() funo retornar falso,
enquanto o erro 5018 ser registrada na varivel _LastError - "Este um diretrio, no um
arquivo" (ver exemplo pela funo FileFindFirst).
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Se common_flag = FILE_COMMON, ento a funo procura o arquivo em uma pasta compartilhada
por todos os terminais do cliente, caso contrrio, a funo procura por um arquivo em uma pasta
local (MQL5\Files ou MQL5\Tester\Files no caso de testes).
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- data para arquivos antigos
input datetime InpFilesDate=D'2013.01.01 00:00';
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string

file_name;

// varivel para armazenar os nomes dos arquivos

string

filter="*.txt"; // filtrar parar pesquisar os arquivos

datetime create_date;

// data de criao do arquivo

string

files[];

// lista de nome dos arquivos

int

def_size=25;

// tamanho do array por padro

2000-2014, MetaQuotes Software Corp.

1229

Funes de Arquivo
int

size=0;

// nmero de arquivos

//--- alocar memria para o array


ArrayResize(files,def_size);
//--- receber o manipulador de pesquisa na raiz da pasta local
long search_handle=FileFindFirst(filter,file_name);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- pesquisando arquivos no loop
do
{
files[size]=file_name;
//--- aumentar o tamanho do array
size++;
if(size==def_size)
{
def_size+=25;
ArrayResize(files,def_size);
}
//--- redefinir o valor de erro
ResetLastError();
//--- receber a data de criao do arquivo
create_date=(datetime)FileGetInteger(file_name,FILE_CREATE_DATE,false);
//--- verificar se o arquivo antigo
if(create_date<InpFilesDate)
{
PrintFormat("%s arquivo deletado!",file_name);
//--- deletado o arquivo antigo
FileDelete(file_name);
}
}
while(FileFindNext(search_handle,file_name));
//--- fechar o manipulador de pesquisa
FileFindClose(search_handle);
}
else
{
Print("Arquivo no encontrado!");
return;
}
//--- verificar quais os arquivos permanecem
PrintFormat("Resultados:");
for(int i=0;i<size;i++)
{
if(FileIsExist(files[i]))
PrintFormat("%s arquivo existe!",files[i]);
else
PrintFormat("%s arquivo deletado!",files[i]);
}

2000-2014, MetaQuotes Software Corp.

1230

Funes de Arquivo
}

Tambm Veja
FileFindFirst

2000-2014, MetaQuotes Software Corp.

1231

Funes de Arquivo

FileOpen
A funo abre o arquivo com o nome e a bandeira especificada.
int FileOpen(
string file_name,

// Nome do arquivo

int

open_flags,

// Combinao de bandeiras

short

delimiter='\t',

// Delimitador

uint

codepage=CP_ACP

// Pgina de cdigo

);

Parmetros
file_name
[in] O nome do arquivo pode conter sub-pastas. Se o arquivo aberto para escrita, estas subpastas sero criadas se elas no existirem.
open_flags
[in] combinao de bandeiras que determinam o modo de operao para o arquivo. As bandeiras
so definidas das seguintes formas:
FILE_READ arquivo aberto para leitura
FILE_WRITE arquivo aberto para a escrita
FILE_BIN modo binrio de leitura e escrita(sem converso de uma string e para uma string)
FILE_CSV arquivo do tipo csv (todos os itens registrados so convertidos para as strings de tipo
unicode ou ansi, e so separados por um delimitador)
FILE_TXT um arquivo de texto simples (o mesmo que csv, mas o delimitador no levado em
conta)
FILE_ANSI linhas do tipo ANSI (smbolos de um byte)
FILE_UNICODE linhas do tipo UNICODE (caracteres de bytes duplos)
FILE_SHARE_READ leitura partilhada entre vrios programas
FILE_SHARE_WRITE escrita partilhada entre vrios programas
FILE_COMMON localizao do arquivo em uma pasta compartilhada para todos os terminais de
cliente
delimiter='\t'
[in] valor a ser usado como um separador em txt ou csv-file. Se o arquivo .csv delimitador no for
especificado, o padro uma tabulao. Se o arquivo .txt delimitador no for especificado, ento
nenhum separador usado. Se o separador est claramente definido para 0, ento nenhum
separador usado.
codepage=CP_ACP
[in] O valor do cdigo de pgina. Para os mais usados cdigos de pgina fornea as constantes
apropriadas.
Valor do Retorno
Se um arquivo foi aberto com sucesso, a funo retorna o manipulador de arquivo, que ento
usado para acessar os dados do arquivo. Em caso de falha retorna INVALID_HANDLE.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar

2000-2014, MetaQuotes Software Corp.

1232

Funes de Arquivo
fora da caixa de proteo do arquivo.
O arquivo aberto na pasta do terminal do cliente na subpasta MQL5\files (ou
testing_agent_directory\MQL5\files em caso de testes). Se FILE_COMMON especificado entre
bandeiras, o arquivo aberto em uma pasta compartilhada para todos os MetaTrader 5 terminais de
cliente.
"Pipes nomeados" pode ser aberta de acordo com as seguintes regras:
Nome do pipe uma string, que deve ter o seguinte aspecto: "\\servername\pipe\pipeName", onde
servername - nome do servidor na rede, enquanto pipename um nome de tubo. Se os tubos so
utilizados no mesmo computador, o nome do servidor pode ser omitido, mas num ponto devem ser
inseridos em vez do mesmo: "\\.\pipe\pipename". Um cliente tenta conectar o tubo deve saber o
seu nome.
FileFlush() e FileSeek() deve ser chamado para o incio de um arquivo entre as operaes
seqenciais de leitura do tubo e grav-lo.
Um smbolo '\' especial usado em strings expostas. Portanto, '\' deve ser redobrada quando se
escreve um nome na aplicao MQL5. Isso significa que o exemplo acima deve ter o seguinte
aspecto no cdigo: "\\\\servername\\pipe\\pipename".
Mais informaes sobre como trabalhar com pipes nomeados pode ser encontrada no artigo
"Communicating With MetaTrader 5 Using Named Pipes Without Using DLLs".
Exemplo:
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- mtodo de abertura de arquivo incorreto
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
if(filehandle<0)
{
Print("Falha para abrir o arquivo pelo caminho absoluto ");
Print("Cdigo de erro ",GetLastError());
}
//--- maneira correta de trabalhar no "sandbox arquivo"
ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),PERIOD_CURRENT);
FileClose(filehandle);
Print("FileOpen OK");
}
else Print("Operao FileOpen falhou, erro ",GetLastError());
//--- outro exemplo com a criao de um diretrio fechado em MQL5\Files\

2000-2014, MetaQuotes Software Corp.

1233

Funes de Arquivo
string subfolder="Research";
filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),PERIOD_CURRENT);
FileClose(filehandle);
Print("O arquivo ser criado na pasta "+terminal_data_path+"\\"+subfolder);
}
else Print("Falha ao abrir arquivo, erro ",GetLastError());
}

Tambm Veja
Utilizao de uma pgina de cdigo (Codepage), FileFindFirst, FolderCreate, Bandeiras de abertura
de arquivos

2000-2014, MetaQuotes Software Corp.

1234

Funes de Arquivo

FileClose
Feche o arquivo previamente aberto por FileOpen().
void FileClose(
int file_handle

// Manipulador de arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Sem valor retornado.
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="file.txt";

// nome do arquivo

input string InpDirectoryName="Data";

// nome do diretrio

input int

InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Imprimir o caminho para o arquivo que vamos usar
PrintFormat("Trabalhando %s\\Arquivos\\ pasta",TerminalInfoString(TERMINAL_DATA_PATH));
//--- redefine o valor de erro
ResetLastError();
//--- abrir um arquivo para leitura(se no existe arquivo, ocorrer um erro)
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
//--- imprimir o contedo do arquivo
while(!FileIsEnding(file_handle))
Print(FileReadString(file_handle));
//--- fechar o arquivo
FileClose(file_handle);
}
else
PrintFormat("Erro, cdigo = %d",GetLastError());
}

2000-2014, MetaQuotes Software Corp.

1235

Funes de Arquivo

FileCopy
A funo copia o arquivo original a partir de uma pasta local ou compartilhada para outro arquivo.
bool FileCopy(
const string src_file_name,

// Nome de um arquivo fonte

int

// Localizao

common_flag,

const string dst_file_name,

// Nome do arquivo de destino

int

// Modo de acesso

mode_flags

);

Parmetros
src_file_name
[in] O nome do arquivo para cpia.
common_flag
[in] Bandeira determinando a localizao do arquivo. Se common_flag = FILE_COMMON, ento o
arquivo est localizado em uma pasta compartilhada para todos os terminais de cliente. Caso
contrrio, o arquivo est localizado em uma pasta local (por exemplo, common_flag=0).
dst_file_name
[in] Resultado nome do arquivo.
mode_flags
[in] Bandeiras de acesso. O parmetro pode conter apenas duas bandeiras: FILE_REWRITE e/ou
FILE_COMMON - outras bandeiras so ignoradas. Se o arquivo j existe, e a bandeira
FILE_REWRITE no foi especificado, ento o arquivo no ser reescrito e a funo retornar false.
Valor do Retorno
Em caso de falha a funo retornar false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Se o novo arquivo j existe, a cpia ser feita dependendo da disponibilidade da bandeira
FILE_REWRITE dentro do parmetro mode_flags.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- parmetros de entrada
input string InpSrc="source.txt";

// source

input string InpDst="destination.txt";

// copy

input int

InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1236

Funes de Arquivo
void OnStart()
{
//--- exibir o contedo de origem (que deve existir)
if(!FileDisplay(InpSrc))
return;
//--- verifique se a cpia do arquivo j existe (no pode ser criado)
if(!FileDisplay(InpDst))
{
//--- a cpia de arquivo no existe, copiando sem a bandeira FILE_REWRITE (cpia correta)
if(FileCopy(InpSrc,0,InpDst,0))
Print("Arquivo est copiado!");
else
Print("Arquivo no est copiado!");
}
else
{
//--- cpia do arquivo j existe, tente copiar sem a bandeira FILE_REWRITE (cpia incorreta)
if(FileCopy(InpSrc,0,InpDst,0))
Print("Arquivo est copiado!");
else
Print("Arquivo no est copiado!");
//--- contedo do arquivo InpDst continua o mesmo
FileDisplay(InpDst);

//--- copiar mais uma vez com a bandeira FILE_REWRITE (copiando correto, se o arquivo existe)
if(FileCopy(InpSrc,0,InpDst,FILE_REWRITE))
Print("Arquivo est copiado!");
else
Print("Arquivo no est copiado!");
}
//--- receber cpia de arquivo InpS
FileDisplay(InpDst);
}
//+------------------------------------------------------------------+
//| Ler comentrios do arquivo

//+------------------------------------------------------------------+
bool FileDisplay(const string file_name)
{
//--- redefine o valor de erro
ResetLastError();
//--- abre o arquivo
int file_handle=FileOpen(file_name,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
//--- exibir o contedo do arquivo no loop
Print("+---------------------+");
PrintFormat("Nome do arquivo = %s",file_name);
while(!FileIsEnding(file_handle))
Print(FileReadString(file_handle));
Print("+---------------------+");

2000-2014, MetaQuotes Software Corp.

1237

Funes de Arquivo
//--- fechar o arquivo
FileClose(file_handle);
return(true);
}
//--- falha para abrir o arquivo
PrintFormat("%s no est aberto, erro = %d",file_name,GetLastError());
return(false);
}

2000-2014, MetaQuotes Software Corp.

1238

Funes de Arquivo

FileDelete
Deletar o arquivo especificado dentro da pasta local do terminal do cliente.
bool FileDelete(
const string file_name,
int

// Nome do arquivo para deletar

common_flag=0 // Localizao do arquivo para deletar

);

Parmetros
file_name
[in] Nome do arquivo.
common_flag=0
[in] Bandeira determinando a localizao do arquivo. Se common_flag = FILE_COMMON, ento o
arquivo est localizado em uma pasta compartilhada para todos os terminais de cliente. Caso
contrrio, o arquivo est localizado em uma pasta local.
Valor do Retorno
Em caso de falha a funo retornar false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Exclui o arquivo especificado a partir de uma pasta local do terminal do cliente (MQL5\files ou MQL5
\tester\files em caso de testes). Se common_flag = FILE_COMMON, ento a funo remove o
arquivo da pasta compartilhada para todos os terminais do cliente.
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- data para arquivos antigos
input datetime InpFilesDate=D'2013.01.01 00:00';
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string

file_name;

// varivel para armazenar os nomes dos arquivos

string

filter="*.txt"; // filtrar parar pesquisar os arquivos

datetime create_date;

// data de criao do arquivo

string

files[];

// lista de nome dos arquivos

int

def_size=25;

// tamanho do array por padro

int

size=0;

// nmero de arquivos

//--- alocar memria para o array


ArrayResize(files,def_size);
//--- receber o manipulador de pesquisa na raiz da pasta local

2000-2014, MetaQuotes Software Corp.

1239

Funes de Arquivo
long search_handle=FileFindFirst(filter,file_name);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- pesquisando arquivos no loop
do
{
files[size]=file_name;
//--- aumentar o tamanho do array
size++;
if(size==def_size)
{
def_size+=25;
ArrayResize(files,def_size);
}
//--- redefinir o valor de erro
ResetLastError();
//--- receber a data de criao do arquivo
create_date=(datetime)FileGetInteger(file_name,FILE_CREATE_DATE,false);
//--- verificar se o arquivo antigo
if(create_date<InpFilesDate)
{
PrintFormat("%s arquivo deletado!",file_name);
//--- deletado o arquivo antigo
FileDelete(file_name);
}
}
while(FileFindNext(search_handle,file_name));
//--- fechar o manipulador de pesquisa
FileFindClose(search_handle);
}
else
{
Print("Arquivo no encontrado!");
return;
}
//--- verificar quais os arquivos permanecem
PrintFormat("Resultados:");
for(int i=0;i<size;i++)
{
if(FileIsExist(files[i]))
PrintFormat("%s arquivo existe!",files[i]);
else
PrintFormat("%s arquivo deletado!",files[i]);
}
}

2000-2014, MetaQuotes Software Corp.

1240

Funes de Arquivo

FileMove
Move um arquivo a partir de um local ou a partir de pasta compartilhada para outra pasta.
bool FileMove(
const string src_file_name,

// O nome do arquivo para a operao de movimentao

int

// Locao

common_flag,

const string dst_file_name,

// Nome do arquivo de destino

int

// Modo de acesso

mode_flags

);

Parmetros
src_file_name
[in] O nome do arquivo para mover/renomear.
common_flag
[in] Bandeira determinando a localizao do arquivo. Se common_flag = FILE_COMMON, ento o
arquivo est localizado em uma pasta compartilhada para todos os terminais de cliente. Caso
contrrio, o arquivo est localizado em uma pasta local (common_flag=0).
dst_file_name
[in] O nome do arquivo aps a operao
mode_flags
[in] Bandeiras de acesso. O parmetro pode conter apenas duas bandeiras: FILE_REWRITE e/ou
FILE_COMMON - outras bandeiras so ignoradas. Se o arquivo j existe e a bandeira
FILE_REWRITE no for especificada, o arquivo no ser reescrito, e a funo retornar false.
Valor do Retorno
Em caso de falha a funo retornar false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Se o novo arquivo j existe, a cpia ser feita dependendo da disponibilidade da bandeira
FILE_REWRITE dentro do parmetro mode_flags.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- parmetros de entrada
input string InpSrcName="data.txt";
input string InpDstName="newdata.txt";
input string InpSrcDirectory="SomeFolder";
input string InpDstDirectory="OtherFolder";
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

2000-2014, MetaQuotes Software Corp.

1241

Funes de Arquivo
//+------------------------------------------------------------------+
void OnStart()
{
string local=TerminalInfoString(TERMINAL_DATA_PATH);
string common=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//--- receber caminhos de arquivo
string src_path;
string dst_path;
StringConcatenate(src_path,InpSrcDirectory,"//",InpSrcName);
StringConcatenate(dst_path,InpDstDirectory,"//",InpDstName);
//--- verifica se o arquivo de origem existe (se no - sada)
if(FileIsExist(src_path))

PrintFormat("%s file arquivo existe no %s\\Files\\%s pasta",InpSrcName,local,InpSrcDirectory)


else
{
PrintFormat("Erro, %s arquivo de origem no encontrado",InpSrcName);
return;
}
//--- verifica se o arquivo do resultado j existe
if(FileIsExist(dst_path,FILE_COMMON))
{
PrintFormat("%s arquivo existe no %s\\Files\\%s pasta",InpDstName,common,InpDstDirectory);
//--- arquivo existe, movendo-se deve ser realizado com a flag FILE_REWRITE
ResetLastError();
if(FileMove(src_path,0,dst_path,FILE_COMMON|FILE_REWRITE))
PrintFormat("%s arquivo movido",InpSrcName);
else
PrintFormat("Erro! Cdigo = %d",GetLastError());
}
else
{

PrintFormat("%s arquivo no existe no %s\\Files\\%s pasta",InpDstName,common,InpDstDirectory)


//--- arquivo no existe, movendo-se deve ser realizado sem a flag FILE_REWRITE
ResetLastError();
if(FileMove(src_path,0,dst_path,FILE_COMMON))
PrintFormat("%s arquivo movido",InpSrcName);
else
PrintFormat("Erro! Cdigo = %d",GetLastError());
}
//--- o arquivo movido, vamos verificar-lo fora
if(FileIsExist(dst_path,FILE_COMMON) && !FileIsExist(src_path,0))
Print("Sucesso!");
else
Print("Erro!");
}

Tambm Veja
FileIsExist

2000-2014, MetaQuotes Software Corp.

1242

Funes de Arquivo

FileFlush
Escreve para um disco todos os dados remanescentes dentro da entrada/sada do arquivo buffer.
void FileFlush(
int file_handle

// Manipulador de arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Sem valor retornado.
Observao
Ao escrever um arquivo, os dados podem ser realmente encontrados l s depois de algum tempo.
Para salvar os dados no arquivo instantaneamente, utilize a funo FileFlush(). Se a funo no
utilizada, parte dos dados que no tenham sido ainda armazenados no disco, sero forosamente
escritos l apenas quando o arquivo fechado com a funoFileClose().
A funo deve ser usada quando os dados gravados so de um certo valor. Deve-se ter em mente
que freqente chamada de funo podem afetar a velocidade de operao do programa.
Funo FileFlush() deve ser chamado entre as operaes de leitura de um arquivo e grav-lo.
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- Nome do arquivo para escrever
input string InpFileName="example.csv"; // nome do arquivo
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- redefine o valor de erro
ResetLastError();
//--- abre o arquivo
int file_handle=FileOpen(InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
//--- gravar dados no arquivo
for(int i=0;i<1000;i++)
{
//--- chamar funo de escrever

FileWrite(file_handle,TimeCurrent(),SymbolInfoDouble(Symbol(),SYMBOL_BID),SymbolInfoDouble
//--- salvar os dados no disco a cada iterao (repetio) 128
if((i & 127)==127)

2000-2014, MetaQuotes Software Corp.

1243

Funes de Arquivo
{

//--- agora, os dados sero localizados no arquivo e no sero perdidos no caso de um e


FileFlush(file_handle);
PrintFormat("i = %d, OK",i);
}
//--- 0.01 segunda pausa
Sleep(10);
}
//--- fechar o arquivo
FileClose(file_handle);
}
else
PrintFormat("Erro, cdigo = %d",GetLastError());
}

Tambm Veja
FileClose

2000-2014, MetaQuotes Software Corp.

1244

Funes de Arquivo

FileGetInteger
Obtm uma propriedade inteira de um arquivo. Existem duas variantes da funo.
1. Obtm a propriedade pelo manipulador de um arquivo.
long FileGetInteger(
int

file_handle,

ENUM_FILE_PROPERTY_INTEGER property_id

// Manipular arquivo
// ID Propriedade

);

2. Obtm a propriedade pelo nome do arquivo.


long FileGetInteger(
const string

file_name,

// Nome do arquivo

ENUM_FILE_PROPERTY_INTEGER property_id,

// ID Propriedade

bool

// O arquivo visto em uma pasta local (false

common_folder=false

);

// ou uma pasta comum de todos os terminais (t

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
file_name
[in] Nome do arquivo.
property_id
[in]
Propriedade ID do arquivo. O valor pode ser um dos valores da enumerao
ENUM_FILE_PROPERTY_INTEGER. Se a segunda variante da funo usada, voc pode receber
apenas os valores das
seguintes propriedades: FILE_EXISTS, FILE_CREATE_DATE,
FILE_MODIFY_DATE, FILE_ACCESS_DATE e FILE_SIZE.
common_folder=false
[in] Pontos para localizao de arquivo. Se o parmetro false, pasta de dados do terminal
visualizada. Caso contrrio, presume-se que o arquivo est na pasta compartilhada por todos os
terminais(FILE_COMMON).
Valor do Retorno
O valor da propriedade. Em caso de erro, -1 retornado. Para obter um cdigo de erro usar a
funo GetLastError().
Se uma pasta est especificada quando obtida a propriedade pelo nome, a funo ter erro 5018
(ERR_MQL_FILE_IS_DIRECTORY) em qualquer caso, embora o valor de retorno ser correto.
Observao
A funo sempre altera o cdigo de erro. Em caso de concluso bem sucedida, o cdigo de erro
redefinido para NULL.
Exemplo:
//--- mosta a janela dos parmetros de entrada quando lanado o script

2000-2014, MetaQuotes Software Corp.

1245

Funes de Arquivo
#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="data.csv";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string path=InpDirectoryName+"//"+InpFileName;
long

l=0;

//--- abre o arquivo


ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_CSV);
if(handle!=INVALID_HANDLE)
{
//--- imprimir todas as informaes sobre o arquivo
Print(InpFileName," informao de arquivo:");
FileInfo(handle,FILE_EXISTS,l,"bool");
FileInfo(handle,FILE_CREATE_DATE,l,"data");
FileInfo(handle,FILE_MODIFY_DATE,l,"data");
FileInfo(handle,FILE_ACCESS_DATE,l,"data");
FileInfo(handle,FILE_SIZE,l,"outros");
FileInfo(handle,FILE_POSITION,l,"outros");
FileInfo(handle,FILE_END,l,"bool");
FileInfo(handle,FILE_IS_COMMON,l,"bool");
FileInfo(handle,FILE_IS_TEXT,l,"bool");
FileInfo(handle,FILE_IS_BINARY,l,"bool");
FileInfo(handle,FILE_IS_CSV,l,"bool");
FileInfo(handle,FILE_IS_ANSI,l,"bool");
FileInfo(handle,FILE_IS_READABLE,l,"bool");
FileInfo(handle,FILE_IS_WRITABLE,l,"bool");
//--- fechar o arquivo
FileClose(handle);
}
else
PrintFormat("%s arquivo no est aberto, ErrorCode = %d",InpFileName,GetLastError());
}
//+------------------------------------------------------------------+
//| Mostrar o valor da propriedade de arquivo

//+------------------------------------------------------------------+
void FileInfo(const int handle,const ENUM_FILE_PROPERTY_INTEGER id,
long l,const string type)
{
//--- receber o valor da propriedade
ResetLastError();
if((l=FileGetInteger(handle,id))!=-1)
{
//--- o valor recebido, exibi-lo no formato correto

2000-2014, MetaQuotes Software Corp.

1246

Funes de Arquivo
if(!StringCompare(type,"bool"))
Print(EnumToString(id)," = ",l ? "true" : "false");
if(!StringCompare(type,"date"))
Print(EnumToString(id)," = ",(datetime)l);
if(!StringCompare(type,"other"))
Print(EnumToString(id)," = ",l);
}
else
Print("Error, Code = ",GetLastError());
}

Tambm Veja
Operaes de Arquivos, Propriedades de Arquivos

2000-2014, MetaQuotes Software Corp.

1247

Funes de Arquivo

FileIsEnding
Define o final do arquivo em processo de leitura.
bool FileIsEnding(
int file_handle

// Manipulador de arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
A funo retorna verdadeiro se o fim do arquivo foi alcanado no processo de leitura ou em
movimento do ponteiro de arquivo.
Observao
Para definir o final do arquivo, a funo tenta ler a prxima string a partir dele. Se a string no
existe, a funo retorna true, caso contrrio, retorna false.
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="file.txt";

// nome do arquivo

input string InpDirectoryName="Data";

// nome do diretrio

input int

InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Imprimir o caminho para o arquivo que vamos usar
PrintFormat("Trabalhando %s\\Arquivos\\ pasta",TerminalInfoString(TERMINAL_DATA_PATH));
//--- redefine o valor de erro
ResetLastError();
//--- abrir um arquivo para leitura(se no existe arquivo, ocorrer um erro)
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
//--- imprimir o contedo do arquivo
while(!FileIsEnding(file_handle))
Print(FileReadString(file_handle));
//--- fechar o arquivo
FileClose(file_handle);
}
else
PrintFormat("Erro, cdigo = %d",GetLastError());

2000-2014, MetaQuotes Software Corp.

1248

Funes de Arquivo
}

2000-2014, MetaQuotes Software Corp.

1249

Funes de Arquivo

FileIsLineEnding
Define o final da linha do arquivo de texto em processo de leitura.
bool FileIsLineEnding(
int file_handle

// Manipulador de arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Retorna true se no processo de leitura do arquivo txt ou csv chegou ao fim da linha (os caracteres
CR-LF).
Exemplo (o arquivo obtido durante a execuo de um exemplo para a funo FileWriteString usado
aqui)
//+------------------------------------------------------------------+
//|

Demo_FileIsLineEnding.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Sobre-compra & Sobre-venda"

#property indicator_type1

DRAW_COLOR_BARS

#property indicator_color1

clrRed, clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- paramtros para leitura de dados


input string InpFileName="RSI.csv";

// nome do arquivo

input string InpDirectoryName="Data"; // nome do diretrio


//--- buffers do indicador
double

open_buff[];

double

high_buff[];

double

low_buff[];

double

close_buff[];

double

color_buff[];

//--- variveis sobre-comprado


int

ovb_ind=0;

int

ovb_size=0;

datetime ovb_time[];

2000-2014, MetaQuotes Software Corp.

1250

Funes de Arquivo
//--- variveis sobre-vendido
int

ovs_ind=0;

int

ovs_size=0;

datetime ovs_time[];
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- variveis de tamanhos de array por padro
int ovb_def_size=100;
int ovs_def_size=100;
//--- alocar memria para arrays
ArrayResize(ovb_time,ovb_def_size);
ArrayResize(ovs_time,ovs_def_size);
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV|FILE_ANSI);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
double value;
//--- ler dados de um arquivo
while(!FileIsEnding(file_handle))
{
//--- ler o primeiro valor na string
value=FileReadNumber(file_handle);
//--- ler diferentes arrays de acordo com o resultado da funo
if(value>=70)
ReadData(file_handle,ovb_time,ovb_size,ovb_def_size);
else
ReadData(file_handle,ovs_time,ovs_size,ovs_def_size);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligando as arrays
SetIndexBuffer(0,open_buff,INDICATOR_DATA);
SetIndexBuffer(1,high_buff,INDICATOR_DATA);
SetIndexBuffer(2,low_buff,INDICATOR_DATA);
SetIndexBuffer(3,close_buff,INDICATOR_DATA);
SetIndexBuffer(4,color_buff,INDICATOR_COLOR_INDEX);

2000-2014, MetaQuotes Software Corp.

1251

Funes de Arquivo
//---- definir os valores dos indicadores que no sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Ler dados do arquivo da string

//+------------------------------------------------------------------+
void ReadData(const int file_handle,datetime &arr[],int &size,int &def_size)
{
bool flag=false;
//--- alcanada a leitura at o final da string ou do arquivo
while(!FileIsLineEnding(file_handle) && !FileIsEnding(file_handle))
{
//--- deslocar o transporte aps a leitura do nmero
if(flag)
FileReadNumber(file_handle);
//--- armazenar a data atual
arr[size]=FileReadDatetime(file_handle);
size++;
//--- aumentar tamanho da array, se necessrio
if(size==def_size)
{
def_size+=100;
ArrayResize(arr,def_size);
}
//--- passar despercebido a primeira iterao
flag=true;
}
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);

2000-2014, MetaQuotes Software Corp.

1252

Funes de Arquivo
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
open_buff[i]=0;
high_buff[i]=0;
low_buff[i]=0;
close_buff[i]=0;
color_buff[i]=0;
//--- verificar se qualquer data continua presente
if(ovb_ind<ovb_size)
for(int j=ovb_ind;j<ovb_size;j++)
{
//--- se as datas coincidem, a barra est na zona de sobre-compra
if(time[i]==ovb_time[j])
{
open_buff[i]=open[i];
high_buff[i]=high[i];
low_buff[i]=low[i];
close_buff[i]=close[i];
//--- 0 - cor vermelha
color_buff[i]=0;
//--- aumentar o contador
ovb_ind=j+1;
break;
}
}
//--- verificar se todos os dados continuam a existir
if(ovs_ind<ovs_size)
for(int j=ovs_ind;j<ovs_size;j++)
{
//--- se as datas coincidem, a barra est na zona de sobre-venda
if(time[i]==ovs_time[j])
{
open_buff[i]=open[i];
high_buff[i]=high[i];
low_buff[i]=low[i];
close_buff[i]=close[i];
//--- 1 - cor azul
color_buff[i]=1;
//--- aumentar o contador
ovs_ind=j+1;
break;
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

1253

Funes de Arquivo
//+------------------------------------------------------------------+
//| Manipulador de eventos ChartEvent

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam
)
{
//---alterar a largura indicador de acordo com a escala
if(ChartGetInteger(0,CHART_SCALE)>3)
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
else
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
}

Tambm Veja
FileWriteString

2000-2014, MetaQuotes Software Corp.

1254

Funes de Arquivo

FileReadArray
L a partir de um arquivo do tipo arrays BIN de qualquer tipo, exceto string (pode ser uma array de
estruturas, no contendo strings e arrays dinmicas).
uint FileReadArray(
int

file_handle,

// Manipular arquivo

void& array[],

// Array para gravar

int

start=0,

// Iniciar posio array para escrever

int

count=WHOLE_ARRAY

// contar para ler

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
array[]
[out] Uma array onde os dados sero carregados.
start=0
[in] Posio inicial para escrever para o array.
count=WHOLE_ARRAY
[in] Nmero de elementos para ler. Pelo padro, ler todo o array (count=WHOLE_ARRAY).
Valor do Retorno
Nmero de elementos para ler.
Observao
Array de seqncias pode ser lido apenas a partir do arquivo do tipo TXT. Se necessrio, a funo
tenta aumentar o tamanho do array.
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWriteArray usado aqui)
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Estrutura para armazenamento de dados de preos

//+------------------------------------------------------------------+
struct prices
{
datetime

date; // data

double

bid;

// bid preo

double

ask;

// ask preo

};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

2000-2014, MetaQuotes Software Corp.

1255

Funes de Arquivo
//+------------------------------------------------------------------+
void OnStart()
{
//--- estrutura array
prices arr[];
//--- caminho do arquivo
string path=InpDirectoryName+"//"+InpFileName;
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
//--- ler todos os dados do arquivo para o array
FileReadArray(file_handle,arr);
//--- receber o tamanho do array
int size=ArraySize(arr);
//--- imprimir dados a partir do array
for(int i=0;i<size;i++)
Print("Data = ",arr[i].date," Bid = ",arr[i].bid," Ask = ",arr[i].ask);
Print("Dados total = ",size);
//--- fechar o arquivo
FileClose(file_handle);
}
else
Print("Abrir arquivo falhou, erro ",GetLastError());
}

Tambm Veja
Variveis,FileWriteArray

2000-2014, MetaQuotes Software Corp.

1256

Funes de Arquivo

FileReadBool
L a partir do arquivo de CSV de tipo string a partir da posio atual para um delimitador (ou at o fim
da linha de texto) e converte a leitura string para um valor de tipo bool.
bool FileReadBool(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Linha de leitura pode ser definida como "true", "false" ou a representao simblica de inteiros "0"
ou "1". Um valor diferente de zero convertido para um true lgico. A funo retorna o valor
convertido.
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWrite usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadBool.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"UpSignal"

#property indicator_type1

DRAW_ARROW

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//---- plotar Label2


#property indicator_label2

"DownSignal"

#property indicator_type2

DRAW_ARROW

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- paramtros para leitura de dados


input string InpFileName="MACD.csv";

// file name

input string InpDirectoryName="Data"; // nome do diretrio


//--- variveis globais
int

ind=0;

// ndice

double

upbuff[];

// buffers indicador de setas para cima

2000-2014, MetaQuotes Software Corp.

1257

Funes de Arquivo
double

downbuff[];

bool

sign_buff[]; // sinal array (verdadeiro - comprar, falso - vender)

// buffers indicador de setas para baix

datetime time_buff[]; // conjunto de chegada dos sinais time


int

size=0;

// tamanho de arrays de sinal

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo esta aberto para leitura",InpFileName);
//--- em primeiro lugar, ler o nmero de sinais
size=(int)FileReadNumber(file_handle);
//--- alocar memria para os arrays
ArrayResize(sign_buff,size);
ArrayResize(time_buff,size);
//--- ler dados de um arquivo
for(int i=0;i<size;i++)
{
//--- tempo de sinal
time_buff[i]=FileReadDatetime(file_handle);
//--- valor do sinal
sign_buff[i]=FileReadBool(file_handle);
}
//--- fechar o arquivo
FileClose(file_handle);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligando as arrays
SetIndexBuffer(0,upbuff,INDICATOR_DATA);
SetIndexBuffer(1,downbuff,INDICATOR_DATA);
//--- definir o cdigo smbolo para desenho em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,241);
PlotIndexSetInteger(1,PLOT_ARROW,242);
//---- definir os valores dos indicadores que no sero vistos no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1258

Funes de Arquivo
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(high,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
upbuff[i]=0;
downbuff[i]=0;
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
//--- desenhar a seta de acordo com o sinal
if(sign_buff[j])
upbuff[i]=high[i];
else
downbuff[i]=low[i];
//--- aumentar o contador
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Tipo bool, FileWrite

2000-2014, MetaQuotes Software Corp.

1259

Funes de Arquivo

FileReadDatetime
L a partir do arquivo do tipo CSV uma string de um dos formatos: "YYYY.MM.DD HH:MM:SS",
"YYYY.MM.DD" ou "HH:MM:SS" - e converte-os dentro de valor do tipo datetime.
datetime FileReadDatetime(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
O valor do tipo datetime.
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWrite usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadDateTime.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"UpSignal"

#property indicator_type1

DRAW_ARROW

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//---- plotar Label2


#property indicator_label2

"DownSignal"

#property indicator_type2

DRAW_ARROW

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- paramtros para leitura de dados


input string InpFileName="MACD.csv";

// file name

input string InpDirectoryName="Data"; // nome do diretrio


//--- variveis globais
int

ind=0;

// ndice

double

upbuff[];

// buffers indicador de setas para cima

double

downbuff[];

// buffers indicador de setas para baix

bool

sign_buff[]; // sinal array (verdadeiro - comprar, falso - vender)

2000-2014, MetaQuotes Software Corp.

1260

Funes de Arquivo
datetime time_buff[]; // conjunto de chegada dos sinais time
int

size=0;

// tamanho de arrays de sinal

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo esta aberto para leitura",InpFileName);
//--- em primeiro lugar, ler o nmero de sinais
size=(int)FileReadNumber(file_handle);
//--- alocar memria para os arrays
ArrayResize(sign_buff,size);
ArrayResize(time_buff,size);
//--- ler dados de um arquivo
for(int i=0;i<size;i++)
{
//--- tempo de sinal
time_buff[i]=FileReadDatetime(file_handle);
//--- valor do sinal
sign_buff[i]=FileReadBool(file_handle);
}
//--- fechar o arquivo
FileClose(file_handle);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligando as arrays
SetIndexBuffer(0,upbuff,INDICATOR_DATA);
SetIndexBuffer(1,downbuff,INDICATOR_DATA);
//--- definir o cdigo smbolo para desenho em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,241);
PlotIndexSetInteger(1,PLOT_ARROW,242);
//---- definir os valores dos indicadores que no sero vistos no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1261

Funes de Arquivo
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[])
{
ArraySetAsSeries(time,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(high,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
upbuff[i]=0;
downbuff[i]=0;
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
//--- desenhar a seta de acordo com o sinal
if(sign_buff[j])
upbuff[i]=high[i];
else
downbuff[i]=low[i];
//--- aumentar o contador
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Tipo datetime, StringToTime, TimeToString, FileWrite

2000-2014, MetaQuotes Software Corp.

1262

Funes de Arquivo

FileReadDouble
L uma dupla preciso de nmero de ponto (double) flutuante a partir da posio atual do arquivo
binrio.
double FileReadDouble(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Valor de tipo double.
Observao
Para mais detalhes sobre erro, chamar GetLastError().
Exemplo (o arquivo obtido aps a execuo do exemplo para a funo FileWriteDouble usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadDouble.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"MA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

#property indicator_separate_window
//--- leitura de dados de parmetros
input string InpFileName="MA.csv";

// nome do arquivo

input string InpDirectoryName="Data"; // nome do diretrio


//--- variveis globais
int

ind=0;

int

size=0;

double

ma_buff[];

datetime time_buff[];
//--- buffer do indicador
double

buff[];

2000-2014, MetaQuotes Software Corp.

1263

Funes de Arquivo
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- em primeiro lugar, ler a quantidade de dados no arquivo
size=(int)FileReadDouble(file_handle);
//--- alocar memria para os arrays
ArrayResize(ma_buff,size);
ArrayResize(time_buff,size);
//--- ler dados de um arquivo
for(int i=0;i<size;i++)
{
time_buff[i]=(datetime)FileReadDouble(file_handle);
ma_buff[i]=FileReadDouble(file_handle);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- Associa o array ao buffer do indicador com ndice 0
SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- definir os valores dos indicadores que no sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[],

2000-2014, MetaQuotes Software Corp.

1264

Funes de Arquivo
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
ArraySetAsSeries(time,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
buff[i]=0;
//--- verificar se todos os dados continuam a existir
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
buff[i]=ma_buff[j];
//--- aumentar o contador
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Tipos reais (double, float), StringToDouble, DoubleToString, FileWriteDouble

2000-2014, MetaQuotes Software Corp.

1265

Funes de Arquivo

FileReadFloat
L a preciso simples de um nmero (float) de ponto a partir da posio atual do arquivo binrio.
float FileReadFloat(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
O valor do tipo float.
Observao
Para mais detalhes sobre erro, chamar GetLastError().
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWriteFloat usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadFloat.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"CloseLine"

#property indicator_type1

DRAW_COLOR_LINE

#property indicator_color1

clrRed,clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- paramtros para leitura de dados


input string InpFileName="Close.bin"; // file name
input string InpDirectoryName="Data"; // nome do diretrio
//--- variveis globais
int

ind=0;

int

size=0;

double

close_buff[];

datetime time_buff[];
//--- buffers do indicador
double

buff[];

double

color_buff[];

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1266

Funes de Arquivo
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
int def_size=100;
//--- alocar memria para os arrays
ArrayResize(close_buff,def_size);
ArrayResize(time_buff,def_size);
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- ler dados de um arquivo
while(!FileIsEnding(file_handle))
{
//--- ler valores de tempo e preo
time_buff[size]=(datetime)FileReadDouble(file_handle);
close_buff[size]=(double)FileReadFloat(file_handle);
size++;
//--- aumentar o tamanho do array, se eles esto transbordados
if(size==def_size)
{
def_size+=100;
ArrayResize(close_buff,def_size);
ArrayResize(time_buff,def_size);
}
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Dados so lidos, %s arquivo est fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligar arrays para os buffers de indicadores
SetIndexBuffer(0,buff,INDICATOR_DATA);
SetIndexBuffer(1,color_buff,INDICATOR_COLOR_INDEX);
//---- definir os valores dos indicadores que no sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

2000-2014, MetaQuotes Software Corp.

1267

Funes de Arquivo
//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
buff[i]=0;
color_buff[i]=0; // cor vermelha por padro
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
//--- receber o preo
buff[i]=close_buff[j];
//--- se o preo atual excede o anterior, a cor azul
if(buff[i-1]>buff[i])
color_buff[i]=1;
//--- aumentar o contador
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Tipos Reais (double, float), FileReadDouble, FileWriteFloat

2000-2014, MetaQuotes Software Corp.

1268

Funes de Arquivo

FileReadInteger
A funo l os valores int, short ou char a partir da posio atual do ponteiro do arquivo, dependendo
do comprimento especificado em bytes.
int FileReadInteger(
int file_handle,

// Manipular Arquivo

int size=INT_VALUE

// Tamanho de um inteiro em bytes

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
size=INT_VALUE
[in] Nmero de bytes (at 4 inclusive), que devem ser lidos. As constantes correspondentes so
fornecidos: CHAR_VALUE = 1, SHORT_VALUE = 2 e INT_VALUE = 4, ento a funo pode ler todo o
valor do tipo char, short ou int.
Valor do Retorno
Um valor do tipo int. O resultado desta funo deve ser explicitamente convertido para um tipo de
destino, ou seja, para o tipo de dados que voc precisa ler. Uma vez que um valor do tipo int
retornado, ele pode ser facilmente convertido para qualquer valor inteiro. O ponteiro do arquivo
deslocado pelo nmero de bytes lidos.
Observao
Quando ler menos do que 4 bytes, o resultado recebido sempre positivo. Se um ou dois bytes so
lidos, o sinal do nmero pode ser determinado por colagem explcita do tipo char (1 byte) ou short (2
bytes). Recebendo o sinal para um nmero de trs bytes no simples, uma vez que no h
nenhuma correspondente tipo subjacente.
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWriteInteger usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadInteger.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Trends"

#property indicator_type1

DRAW_SECTION

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

2000-2014, MetaQuotes Software Corp.

1269

Funes de Arquivo
#property indicator_width1

//--- paramtros para leitura de dados


input string InpFileName="Trend.bin"; // file name
input string InpDirectoryName="Data"; // nome do diretrio
//--- variveis globais
int

ind=0;

int

size=0;

datetime time_buff[];
//--- buffers do indicador
double

buff[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
int def_size=100;
//--- alocar memria para o array
ArrayResize(time_buff,def_size);
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- variveis adicionais
int

arr_size;

uchar

arr[];

//--- ler dados de um arquivo


while(!FileIsEnding(file_handle))
{
//--- descobrir quantos smbolos so usados para escrever o tempo
arr_size=FileReadInteger(file_handle,INT_VALUE);
ArrayResize(arr,arr_size);
for(int i=0;i<arr_size;i++)
arr[i]=(char)FileReadInteger(file_handle,CHAR_VALUE);
//--- armazenar o valor de tempo
time_buff[size]=StringToTime(CharArrayToString(arr));
size++;
//--- aumentar as dimenses arrays, se so transbordados
if(size==def_size)
{
def_size+=100;
ArrayResize(time_buff,def_size);
}
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Dados so lidos, %s arquivo est fechado",InpFileName);

2000-2014, MetaQuotes Software Corp.

1270

Funes de Arquivo
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligar array para buffer de indicador
SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- definir os valores dos indicadores que no sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
ArraySetAsSeries(close,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
buff[i]=0;
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
//--- receber o preo
buff[i]=close[i];
//--- aumentar o contador
ind=j+1;
break;
}
}

2000-2014, MetaQuotes Software Corp.

1271

Funes de Arquivo
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
IntegerToString, StringToInteger, Tipos inteiros, FileWriteInteger

2000-2014, MetaQuotes Software Corp.

1272

Funes de Arquivo

FileReadLong
A funo l um inteiro do tipo long (8 bytes) a partir da posio atual do arquivo binrio.
long FileReadLong(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Valor de tipo long.
Exemplo (o arquivo obtido durante a execuo de um exemplo para a funo FileWriteLong usado
aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadLong.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_buffers 1
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Volume"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrYellow

#property indicator_style1

STYLE_SOLID

#property indicator_width1

#property indicator_separate_window
//--- paramtros para leitura de dados
input string InpFileName="Volume.bin"; // file name
input string InpDirectoryName="Data";

// directory name

//--- variveis globais


int

ind=0;

int

size=0;

long

volume_buff[];

datetime time_buff[];
//--- buffers do indicador
double

buff[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()

2000-2014, MetaQuotes Software Corp.

1273

Funes de Arquivo
{
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est aberto para escrita",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- em primeiro lugar, ler a quantidade de dados no arquivo
size=(int)FileReadLong(file_handle);
//--- alocar memria para os arrays
ArrayResize(volume_buff,size);
ArrayResize(time_buff,size);
//--- ler dados de um arquivo
for(int i=0;i<size;i++)
{
time_buff[i]=(datetime)FileReadLong(file_handle);
volume_buff[i]=FileReadLong(file_handle);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Dados so lidos, %s arquivo est fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- associa o array ao buffer do indicador com ndice 0
SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- definir os valores dos indicadores que sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{

2000-2014, MetaQuotes Software Corp.

1274

Funes de Arquivo
ArraySetAsSeries(time,false);
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
buff[i]=0;
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==time_buff[j])
{
buff[i]=(double)volume_buff[j];
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Tipos Inteiros, FileReadInteger, FileWriteLong

2000-2014, MetaQuotes Software Corp.

1275

Funes de Arquivo

FileReadNumber
A funo l do arquivo CSV uma string a partir da posio atual at um separador (ou at o fim de uma
seqncia de texto) e converte a string de leitura para um valor do tipo double.
double FileReadNumber(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Valor de tipo double.
Exemplo (o arquivo obtido durante a execuo de um exemplo para a funo FileWriteString usado
aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadNumber.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Sobre-compra & Sobre-venda"

#property indicator_type1

DRAW_COLOR_BARS

#property indicator_color1

clrRed, clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- paramtros para leitura de dados


input string InpFileName="RSI.csv";

// nome do arquivo

input string InpDirectoryName="Data"; // nome do diretrio


//--- buffers do indicador
double

open_buff[];

double

high_buff[];

double

low_buff[];

double

close_buff[];

double

color_buff[];

//--- variveis sobre-comprado


int

ovb_ind=0;

int

ovb_size=0;

datetime ovb_time[];

2000-2014, MetaQuotes Software Corp.

1276

Funes de Arquivo
//--- variveis sobre-vendido
int

ovs_ind=0;

int

ovs_size=0;

datetime ovs_time[];
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- variveis de tamanhos de array por padro
int ovb_def_size=100;
int ovs_def_size=100;
//--- alocar memria para arrays
ArrayResize(ovb_time,ovb_def_size);
ArrayResize(ovs_time,ovs_def_size);
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV|FILE_ANSI);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
double value;
//--- ler dados de um arquivo
while(!FileIsEnding(file_handle))
{
//--- ler o primeiro valor na string
value=FileReadNumber(file_handle);
//--- ler diferentes arrays de acordo com o resultado da funo
if(value>=70)
ReadData(file_handle,ovb_time,ovb_size,ovb_def_size);
else
ReadData(file_handle,ovs_time,ovs_size,ovs_def_size);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- ligando as arrays
SetIndexBuffer(0,open_buff,INDICATOR_DATA);
SetIndexBuffer(1,high_buff,INDICATOR_DATA);
SetIndexBuffer(2,low_buff,INDICATOR_DATA);
SetIndexBuffer(3,close_buff,INDICATOR_DATA);
SetIndexBuffer(4,color_buff,INDICATOR_COLOR_INDEX);

2000-2014, MetaQuotes Software Corp.

1277

Funes de Arquivo
//---- definir os valores dos indicadores que no sero visveis no grfico
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Ler dados do arquivo da string

//+------------------------------------------------------------------+
void ReadData(const int file_handle,datetime &arr[],int &size,int &def_size)
{
bool flag=false;
//--- alcanada a leitura at o final da string ou do arquivo
while(!FileIsLineEnding(file_handle) && !FileIsEnding(file_handle))
{
//--- deslocar o transporte aps a leitura do nmero
if(flag)
FileReadNumber(file_handle);
//--- armazenar a data atual
arr[size]=FileReadDatetime(file_handle);
size++;
//--- aumentar tamanho da array, se necessrio
if(size==def_size)
{
def_size+=100;
ArrayResize(arr,def_size);
}
//--- passar despercebido a primeira iterao
flag=true;
}
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);

2000-2014, MetaQuotes Software Corp.

1278

Funes de Arquivo
//---o loop para as barras que ainda no foram manipuladas
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
open_buff[i]=0;
high_buff[i]=0;
low_buff[i]=0;
close_buff[i]=0;
color_buff[i]=0;
//--- verificar se qualquer data continua presente
if(ovb_ind<ovb_size)
for(int j=ovb_ind;j<ovb_size;j++)
{
//--- se as datas coincidem, a barra est na zona de sobre-compra
if(time[i]==ovb_time[j])
{
open_buff[i]=open[i];
high_buff[i]=high[i];
low_buff[i]=low[i];
close_buff[i]=close[i];
//--- 0 - cor vermelha
color_buff[i]=0;
//--- aumentar o contador
ovb_ind=j+1;
break;
}
}
//--- verificar se todos os dados continuam a existir
if(ovs_ind<ovs_size)
for(int j=ovs_ind;j<ovs_size;j++)
{
//--- se as datas coincidem, a barra est na zona de sobre-venda
if(time[i]==ovs_time[j])
{
open_buff[i]=open[i];
high_buff[i]=high[i];
low_buff[i]=low[i];
close_buff[i]=close[i];
//--- 1 - cor azul
color_buff[i]=1;
//--- aumentar o contador
ovs_ind=j+1;
break;
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

1279

Funes de Arquivo
//+------------------------------------------------------------------+
//| Manipulador de eventos ChartEvent

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam
)
{
//---alterar a largura indicador de acordo com a escala
if(ChartGetInteger(0,CHART_SCALE)>3)
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
else
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
}

Tambm Veja
FileWriteString

2000-2014, MetaQuotes Software Corp.

1280

Funes de Arquivo

FileReadString
A funo l uma string a partir da posio atual do ponteiro de arquivo dentro de um arquivo.
string FileReadString(
int file_handle,

// Manipular arquivo

int length=-1

// Comprimento string

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
length=-1
[in] Nmero de caracteres para ler.
Valor do Retorno
Ler linha (string).
Observao
Quando ler a partir de um arquivo bin, o tamanho de uma string para ler deve ser especificada.
Quando ler a partir de um arquivo txt, o tamanho da string no necessria, e a string ser lida a
partir da posio atual para a alimentao da linha caractere "\r\n". Quando ler a partir de um
arquivo CSV,o tamanho da string no necessria tambm, a string ser lida a partir da posio
atual at o mais prximo delimitador ou at string de texto caractere final.
Se o arquivo aberto com a bandeira FILE_ANSI, ento a linha lida convertida para um Unicode.
Exemplo (o arquivo obtido aps a execuo do exemplo pela funo FileWriteInteger usado aqui)
//--- mosta a janela dos parmetros de entrada quando lanado o script
#property script_show_inputs
//--- paramtros para leitura de dados
input string InpFileName="Trend.bin"; // file name
input string InpDirectoryName="Data"; // nome do diretrio
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- variveis adicionais
int

str_size;

string str;

2000-2014, MetaQuotes Software Corp.

1281

Funes de Arquivo
//--- ler dados de um arquivo
while(!FileIsEnding(file_handle))
{
//--- descobrir quantos smbolos so usados para escrever o tempo
str_size=FileReadInteger(file_handle,INT_VALUE);
//--- ler a string
str=FileReadString(file_handle,str_size);
//--- imprimir a string
PrintFormat(str);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Dados so lidos, %s arquivo est fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Tipo string, Converso de Dados, FileWriteInteger

2000-2014, MetaQuotes Software Corp.

1282

Funes de Arquivo

FileReadStruct
A funo l o contedo em uma estrutura passada como um parmetro a partir de um arquivo binrio,
comeando com a posio atual do ponteiro de arquivo.
uint FileReadStruct(
int

file_handle,

// Manipular arquivo

const void& struct_object,

// estrutura alvo para o qual os contedos so lidos

int

// tamanho da estrutura em bytes

size=-1

);

Parmetros
file_handle
[in] Descritor de arquivo para abrir um arquivo bin.
struct_object
[out] O objeto desta estrutura. A estrutura no deve conter strings, arrays dinmicas ou funes
virtuais.
size=-1
[in] Nmero de bytes que devem ser lidos. Se a dimenso no for especificado ou a indicao do
valor maior do que o tamanho da estrutura, o tamanho exato da especificada estrutura usado.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes lidos. Ponteiro de arquivo movido pelo
mesmo nmero de bytes.
Exemplo (o arquivo obtido aps a utilizao do exemplo para a funo FileWriteStruct usado aqui)
//+------------------------------------------------------------------+
//|

Demo_FileReadStruct.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Candles"

#property indicator_type1

DRAW_CANDLES

#property indicator_color1

clrOrange

#property indicator_style1

STYLE_SOLID

#property indicator_width1

#property indicator_separate_window
//--- parmetros para recebimento de dados
input string

InpFileName="EURUSD.txt"; // nome do arquivo

input string

InpDirectoryName="Data";

// nome do diretrio

2000-2014, MetaQuotes Software Corp.

1283

Funes de Arquivo
//+------------------------------------------------------------------+
//| Estrutura para armazenar dados candlestick

//+------------------------------------------------------------------+
struct candlesticks
{
double

open;

double

close; // preo de fechamento

// preo de abertura

double

high;

// preo de mximo

double

low;

// preo de mnimo

datetime

date;

// data

};
//--- buffers do indicador
double

open_buff[];

double

close_buff[];

double

high_buff[];

double

low_buff[];

//--- variveis globais


candlesticks cand_buff[];
int

size=0;

int

ind=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
int default_size=100;
ArrayResize(cand_buff,default_size);
//--- abre o arquivo
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN|FILE_COMMON);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
//--- ler dados de um arquivo
while(!FileIsEnding(file_handle))
{
//--- escrever dados para array
FileReadStruct(file_handle,cand_buff[size]);
size++;
//--- verificar se array est transbordando
if(size==default_size)
{
//--- aumentar a dimenso array
default_size+=100;
ArrayResize(cand_buff,default_size);
}
}
//--- fechar o arquivo

2000-2014, MetaQuotes Software Corp.

1284

Funes de Arquivo
FileClose(file_handle);
PrintFormat("Dados so lidos, %s arquivo est fechado",InpFileName);
}
else
{
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
return(INIT_FAILED);
}
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,open_buff,INDICATOR_DATA);
SetIndexBuffer(1,high_buff,INDICATOR_DATA);
SetIndexBuffer(2,low_buff,INDICATOR_DATA);
SetIndexBuffer(3,close_buff,INDICATOR_DATA);
//--- valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,false);
//--- o loop para os castiais que ainda no foram manipulados
for(int i=prev_calculated;i<rates_total;i++)
{
//--- 0 por padro
open_buff[i]=0;
close_buff[i]=0;
high_buff[i]=0;
low_buff[i]=0;
//---verificar se todos os dados ainda esto presente
if(ind<size)
{
for(int j=ind;j<size;j++)
{
//--- se as datas coincidem, usar o valor do arquivo
if(time[i]==cand_buff[j].date)
{

2000-2014, MetaQuotes Software Corp.

1285

Funes de Arquivo
open_buff[i]=cand_buff[j].open;
close_buff[i]=cand_buff[j].close;
high_buff[i]=cand_buff[j].high;
low_buff[i]=cand_buff[j].low;
//--- aumentar o contador
ind=j+1;
break;
}
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Estruturas e classes, FileWriteStruct

2000-2014, MetaQuotes Software Corp.

1286

Funes de Arquivo

FileSeek
A funo move a posio do ponteiro de arquivo por um certo nmero de bytes de informao em
relao posio especificada.
void FileSeek(
int

file_handle,

// Manipular arquivo

long

offset,

// Em bytes

ENUM_FILE_POSITION

origin

// Posio para referncia

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
offset
[in] A mudana de bytes (pode tomar um valor negativo).
origin
[in] O ponto de partida para o deslocamento. Pode ser um dos valores de ENUM_FILE_POSITION.
Valor do Retorno
Sem valor retornado.
Observao
Se a execuo da funo FileSeek() resulta em uma mudana negativa (indo alm do "nvel limite"
do arquivo), o ponteiro do arquivo ser definido para o arquivo de incio.
Se a posio for definido para alm do "limite direito" do arquivo (maior do que o tamanho do
arquivo),a prxima escrita para o arquivo ser executado no a partir do final do arquivo, mas a
partir da posio definida. Neste caso, os valores indefinidos sero escritos para o final do arquivo
anterior e a posio definida.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileSeek.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mosta a janela dos parmetros de entrada quando lanado o script


#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="file.txt";

// nome do arquivo

input string InpDirectoryName="Data";

// nome do diretrio

input int

InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1287

Funes de Arquivo
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- especificar o valor da varivel para gerar nmeros aleatrios
_RandomSeed=GetTickCount();
//--- variveis para posies de pontos de incio das strings
ulong pos[];
int

size;

//--- redefine o valor de erro


ResetLastError();
//--- abre o arquivo
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
//--- receber a posio inicial para cada string no arquivo
GetStringPositions(file_handle,pos);
//--- definir o nmero de strings no arquivo
size=ArraySize(pos);
if(!size)
{
//--- parar se o arquivo no tem strings
PrintFormat("%s arquivo est vazio!",InpFileName);
FileClose(file_handle);
return;
}
//--- fazer uma seleo aleatria de um nmero de string
int ind=MathRand()%size;
//--- deslocar posio de ponto de partida da string
FileSeek(file_handle,pos[ind],SEEK_SET);
//--- ler e imprimir a string com o nmero ind
PrintFormat("Texto string com %d nmero: \"%s\"",ind,FileReadString(file_handle));
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("%s arquivo est vazio",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}
//+-------------------------------------------------------------------------------+
//| A funo define pontos de partida para cada uma das strings no arquivo e

//| coloca-los em arr array

//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
{
//--- array tamanho padro
int def_size=127;
//--- alocar memria para o array

2000-2014, MetaQuotes Software Corp.

1288

Funes de Arquivo
ArrayResize(arr,def_size);
//--- contador string
int i=0;
//--- se isto no o fim do arquivo, ento h pelo menos uma string
if(!FileIsEnding(handle))
{
arr[i]=FileTell(handle);
i++;
}
else
return; // o arquivo est vazio, sair
//--- define o deslocamento em bytes, dependendo em codificao
int shift;
if(FileGetInteger(handle,FILE_IS_ANSI))
shift=1;
else
shift=2;
//--- ir atravs das strings no loop
while(1)
{
//--- ler a string
FileReadString(handle);
//--- verificar o final do arquivo
if(!FileIsEnding(handle))
{
//--- armazenar a prxima posio da string
arr[i]=FileTell(handle)+shift;
i++;
//--- aumentar o tamanho da array, se ela transbordada
if(i==def_size)
{
def_size+=def_size+1;
ArrayResize(arr,def_size);
}
}
else
break; // final do arquivo, sair
}
//--- definir o tamanho real de array
ArrayResize(arr,i);
}

2000-2014, MetaQuotes Software Corp.

1289

Funes de Arquivo

FileSize
A funo retorna o tamanho do arquivo em bytes.
ulong FileSize(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
O valor do tipo int.
Observao
Para obter informao sobre o erro chamar GetLastError().
Exemplo:
//--- mostrar a janela de parmetros de entrada quando do lanamento do script
#property script_show_inputs
//--- parmetros de entrada
input ulong

InpThresholdSize=20;

input string InpBigFolderName="big";

// tamanho limite do arquivo em kilobytes


// pasta para arquivos grandes

input string InpSmallFolderName="small"; // pasta para arquivo pequeno


//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string

file_name;

// varivel para armazenar os nomes dos arquivos

string

filter="*.csv"; // filtro para pesquisar os arquivos

ulong

file_size=0;

// tamanho do arquivo em bytes

int

size=0;

// nmero de arquivos

//--- imprimir o caminho para o arquivo que vamos trabalhar com


PrintFormat("Trabalhando em pasta %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
//--- receber o manipulador de pesquisa em comum na raiz da pasta de todos os terminais
long search_handle=FileFindFirst(filter,file_name,FILE_COMMON);
//--- verificar se FileFindFirst() executada com sucesso
if(search_handle!=INVALID_HANDLE)
{
//--- mover arquivos no loop de acordo com seus tamanhos
do
{
//--- abrir o arquivo
ResetLastError();
int file_handle=FileOpen(file_name,FILE_READ|FILE_CSV|FILE_COMMON);
if(file_handle!=INVALID_HANDLE)

2000-2014, MetaQuotes Software Corp.

1290

Funes de Arquivo
{
//--- receber o tamanho do arquivo
file_size=FileSize(file_handle);
//--- fechar o arquivo
FileClose(file_handle);
}
else
{

PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",file_name,GetLastError()


continue;
}
//--- imprimir o tamanho do arquivo
PrintFormat("Tamanho do %s arquivo igual para %d bytes",file_name,file_size);
//--- define o caminho para movimentar o arquivo
string path;
if(file_size>InpThresholdSize*1024)
path=InpBigFolderName+"//"+file_name;
else
path=InpSmallFolderName+"//"+file_name;
//--- mover o arquivo
ResetLastError();
if(FileMove(file_name,FILE_COMMON,path,FILE_REWRITE|FILE_COMMON))
PrintFormat("%s arquivo foi movido",file_name);
else
PrintFormat("Erro, cdigo = %d",GetLastError());
}
while(FileFindNext(search_handle,file_name));
//--- fechar o manipulador de pesquisa
FileFindClose(search_handle);
}
else
Print("Arquivo no encontrado!");
}

2000-2014, MetaQuotes Software Corp.

1291

Funes de Arquivo

FileTell
O arquivo retorna a posio atual do ponteiro de arquivo de um arquivo aberto.
ulong FileTell(
int file_handle

// Manipular arquivo

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
Valor do Retorno
Posio atual do descritor de arquivo em bytes a partir do incio do arquivo.
Observao
Para obter informao sobre o erro chamar GetLastError().
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileTell.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mosta a janela dos parmetros de entrada quando lanado o script


#property script_show_inputs
//--- parmetros de entrada
input string InpFileName="file.txt";

// nome do arquivo

input string InpDirectoryName="Data";

// nome do diretrio

input int

InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- especificar o valor da varivel para gerar nmeros aleatrios
_RandomSeed=GetTickCount();
//--- variveis para posies de pontos de incio das strings
ulong pos[];
int

size;

//--- redefine o valor de erro


ResetLastError();
//--- abre o arquivo
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)

2000-2014, MetaQuotes Software Corp.

1292

Funes de Arquivo
{
PrintFormat("%s arquivo est disponvel para leitura",InpFileName);
//--- receber a posio inicial para cada string no arquivo
GetStringPositions(file_handle,pos);
//--- definir o nmero de strings no arquivo
size=ArraySize(pos);
if(!size)
{
//--- parar se o arquivo no tem strings
PrintFormat("%s arquivo est vazio!",InpFileName);
FileClose(file_handle);
return;
}
//--- fazer uma seleo aleatria de um nmero de string
int ind=MathRand()%size;
//--- deslocar posio de ponto de partida da string
FileSeek(file_handle,pos[ind],SEEK_SET);
//--- ler e imprimir a string com o nmero ind
PrintFormat("Texto string com %d nmero: \"%s\"",ind,FileReadString(file_handle));
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("%s arquivo est vazio",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}
//+-------------------------------------------------------------------------------+
//| A funo define pontos de partida para cada uma das strings no arquivo e

//| coloca-los em arr array

//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
{
//--- array tamanho padro
int def_size=127;
//--- alocar memria para o array
ArrayResize(arr,def_size);
//--- contador string
int i=0;
//--- se isto no o fim do arquivo, ento h pelo menos uma string
if(!FileIsEnding(handle))
{
arr[i]=FileTell(handle);
i++;
}
else
return; // o arquivo est vazio, sair
//--- define o deslocamento em bytes, dependendo em codificao
int shift;
if(FileGetInteger(handle,FILE_IS_ANSI))

2000-2014, MetaQuotes Software Corp.

1293

Funes de Arquivo
shift=1;
else
shift=2;
//--- ir atravs das strings no loop
while(1)
{
//--- ler a string
FileReadString(handle);
//--- verificar o final do arquivo
if(!FileIsEnding(handle))
{
//--- armazenar a prxima posio da string
arr[i]=FileTell(handle)+shift;
i++;
//--- aumentar o tamanho da array, se ela transbordada
if(i==def_size)
{
def_size+=def_size+1;
ArrayResize(arr,def_size);
}
}
else
break; // final do arquivo, sair
}
//--- definir o tamanho real de array
ArrayResize(arr,i);
}

2000-2014, MetaQuotes Software Corp.

1294

Funes de Arquivo

FileWrite
A funo destina-se a gravao de dados em um arquivo CSV, delimitador sendo inserido
automaticamente a menos que seja igual a 0. Depois de escrever dentro do arquivo, o caractere de
final de linha "\r\n" ser adicionado.
uint FileWrite(
int file_handle,

// manipular arquivo

...

// Lista de parmetros gravados

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
...
[in] A lista de parmetros separados por vrgulas, para escrever no arquivo. O nmero de
parmetros escritos pode ser de at 63.
Valor do Retorno
Nmero de bytes escritos.
Observao
Os nmeros sero convertidos dentro de um texto na sada (veja a print() funo). Dados do tipo
double so emitidos com a preciso de 16 dgitos depois do ponto decimal, e os dados podem ser
exibidos quer no formato tradicional ou no formato cientfico - dependendo de qual formato ser o
mais compacto. Os dados do tipo float so mostrados com cinco dgitos depois do ponto decimal.
Para emitir nmeros reais com preciso diferente ou em um formato claramente especificado, use
DoubleToString().
Nmeros do tipo bool so exibidos como "true" ou "false" strings. Nmeros do tipo datetime so
apresentados como "YYYY.MM.DD HH:MI:SS".
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWrite.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

// par de moedas

input ENUM_TIMEFRAMES

InpSymbolPeriod=PERIOD_H1;

// perodo de tempo

input int

InpFastEMAPeriod=12;

// perodo rpido EMA

input int

InpSlowEMAPeriod=26;

// perodo lento EMA

2000-2014, MetaQuotes Software Corp.

1295

Funes de Arquivo
input int

InpSignalPeriod=9;

// diferena de perodo mdio

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;


input datetime

// tipo de preo

InpDateStart=D'2012.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para a gravao de dados ao arquivo


input string

InpFileName="MACD.csv";

// nome do arquivo

input string

InpDirectoryName="Data"; // nome do diretrio

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date_finish; // copiando dados com a data final
bool

sign_buff[]; // sinal array (verdadeiro - comprar, falso - vender)

datetime time_buff[]; // array de chegada de tempo de sinais


int

sign_size=0; // tamanho de array

double

macd_buff[]; // array do valor do indicador

datetime date_buff[]; // array da data do indicador


int

macd_size=0; // tamanho de arrays de indicadores

//--- tempo final o tempo corrente


date_finish=TimeCurrent();
//--- receber a manipulao do indicador MACD
ResetLastError();

int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalP
if(macd_handle==INVALID_HANDLE)
{
//--- falha para receber a manipulao do indicador

PrintFormat("Erro quando recebe a manipulao do indicador. Cdigo de erro = %d",GetLastError


return;
}
//--- estando no loop at que o indicador calcula todos os seus valores
while(BarsCalculated(macd_handle)==-1)
Sleep(10); // pausa para permitir que o indicador calcule os respectivos valores
//--- copiar os valores do indicador para um determinado perodo de tempo
ResetLastError();
if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
{
PrintFormat("Falha para copiar valores do indicador. Cdigo de erro = %d",GetLastError());
return;
}
//--- copiar o tempo apropriado para os valores do indicador
ResetLastError();
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- libera a memria ocupada pelo indicador
IndicatorRelease(macd_handle);
//--- receber o tamanho do buffer

2000-2014, MetaQuotes Software Corp.

1296

Funes de Arquivo
macd_size=ArraySize(macd_buff);
//--- analisar os dados e salva os sinais do indicador para arrays
ArrayResize(sign_buff,macd_size-1);
ArrayResize(time_buff,macd_size-1);
for(int i=1;i<macd_size;i++)
{
//--- sinal comprar
if(macd_buff[i-1]<0 && macd_buff[i]>=0)
{
sign_buff[sign_size]=true;
time_buff[sign_size]=date_buff[i];
sign_size++;
}
//--- sinal vender
if(macd_buff[i-1]>0 && macd_buff[i]<=0)
{
sign_buff[sign_size]=false;
time_buff[sign_size]=date_buff[i];
sign_size++;
}
}

//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele ser
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para ser escrito",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- primeiro, escreva o nmero de sinais
FileWrite(file_handle,sign_size);
//--- escrever o tempo e os valores de sinais para o arquivo
for(int i=0;i<sign_size;i++)
FileWrite(file_handle,time_buff[i],sign_buff[i]);
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Comment, Print, StringFormat

2000-2014, MetaQuotes Software Corp.

1297

Funes de Arquivo

FileWriteArray
A funo escreve arrays de qualquer tipo, exceto para string de um arquivo BIN (pode strings ou arrays
dinmicas).
uint FileWriteArray(
int

file_handle,

// Manipular arquivo

const void& array1[],

// Array

int

start=0,

// Iniciar ndice array

int

count=WHOLE_ARRAY

// Nmero de elementos

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
array[]
[out] Array para gravao.
start=0
[in] Incio do ndice array (nmero do primeiro elemento gravado).
count=WHOLE_ARRAY
[in] Nmero de itens para gravar(WHOLE_ARRAY significa que as gravaes de todos os itens
comeam com o nmero inicial at o final da array).
Valor do Retorno
Nmero de itens gravados.
Observao
String array pode ser gravada em arquivo TXT. Neste caso, strings so automaticamente terminadas
pela linha final de caracteres "\r\n". Dependendo sobre o arquivo tipo ANSI ou UNICODE, strings so
ambas convertidas para ansi-codificao ou no.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteArray.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- parmetros de entrada


input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Estrutura para armazenamento de dados de preos

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1298

Funes de Arquivo
struct prices
{
datetime

date; // data

double

bid;

// bid preo

double

ask;

// ask preo

};
//--- variveis globais
int

count=0;

int

size=20;

string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- alocar memria para o array
ArrayResize(arr,size);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- escrever a contagem restante de strings se count < n
WriteData(count);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--- salvar dados para array
arr[count].date=TimeCurrent();
arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- mostra dados correntes
Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- aumentar o contador
count++;
//--- se array arquivada, gravar dados no arquivo e zer-lo
if(count==size)
{
WriteData(size);
count=0;
}
}

2000-2014, MetaQuotes Software Corp.

1299

Funes de Arquivo
//+------------------------------------------------------------------+
//| Escrever n elementos array para arquivo

//+------------------------------------------------------------------+
void WriteData(const int n)
{
//--- abre o arquivo
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- escrever os dados array para o final do arquivo
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arr,0,n);
//--- fechar o arquivo
FileClose(handle);
}
else
Print("Falha para abrir o arquivo, erro ",GetLastError());
}

Tambm Veja
Variveis, FileSeek

2000-2014, MetaQuotes Software Corp.

1300

Funes de Arquivo

FileWriteDouble
A funo escreve o valor de um parmetro duplo para um arquivo, a partir da posio atual do
ponteiro de arquivo.
uint FileWriteDouble(
int

file_handle,

// Manipular arquivo

double value

// Valor para escrever

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
value
[in] O valor do tipo double.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos (neste caso sizeof(double)=8). O
ponteiro do arquivo deslocado pelo mesmo nmero de bytes.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteDouble.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURJPY";

// par de moedas

input ENUM_TIMEFRAMES

InpSymbolPeriod=PERIOD_M15;

// perodo de tempo

input int

InpMAPeriod=10;

// perodo suavizado

input int

InpMAShift=0;

// deslocacamente de indicador

input ENUM_MA_METHOD

InpMAMethod=MODE_SMA;

// tipo de suavizao

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;


input datetime

// tipo de preo

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="MA.csv";

input string

InpDirectoryName="Data"; // nome do diretrio

// file name

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{

2000-2014, MetaQuotes Software Corp.

1301

Funes de Arquivo
datetime date_finish=TimeCurrent();
double

ma_buff[];

datetime time_buff[];
int

size;

//--- receber a manipulador do indicador MA


ResetLastError();

int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPri
if(ma_handle==INVALID_HANDLE)
{
//--- falha para receber a manipulao do indicador

PrintFormat("Erro quando recebe a manipulao do indicador. Cdigo de erro = %d",GetLastError


return;
}
//--- estando no loop at que o indicador calcula todos os seus valores
while(BarsCalculated(ma_handle)==-1)
Sleep(20); // pausa para permitir que o indicador calcule os respectivos valores

PrintFormat("Valores dos indicadores comeando a partir de %s ser escrita no arquivo",TimeToStr


//--- copiar os valores dos indicadores
ResetLastError();
if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1)
{
PrintFormat("Falha para copiar valores do indicador. Cdigo de erro = %d",GetLastError());
return;
}
//--- copiar o tempo da apropriada chegada das barras
ResetLastError();
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- receber o tamanho do buffer
size=ArraySize(ma_buff);
//--- libera a memria ocupada pelo indicador
IndicatorRelease(ma_handle);

//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele ser
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para ser escrito",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- em primeiro lugar, escrever o tamanho da amostra de dados
FileWriteDouble(file_handle,(double)size);
//--- escrever o tempo do indicador e valor para o arquivo
for(int i=0;i<size;i++)
{
FileWriteDouble(file_handle,(double)time_buff[i]);
FileWriteDouble(file_handle,ma_buff[i]);

2000-2014, MetaQuotes Software Corp.

1302

Funes de Arquivo
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Tipos reais (double, float)

2000-2014, MetaQuotes Software Corp.

1303

Funes de Arquivo

FileWriteFloat
A funo escreve o valor do parmetro float para um arquivo bin, a partir da atual posio do ponteiro
de arquivo.
uint FileWriteFloat(
int

file_handle,

float value

// Manipular arquivo
// Valor para ser escrito

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
value
[in] O valor do tipo float.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos (neste caso sizeof(float)=4). O
ponteiro do arquivo deslocado pelo mesmo nmero de bytes.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteFloat.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_M15;


input datetime

// par de moedas
// perodo de tempo

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="Close.bin"; // nome do arquivo

input string

InpDirectoryName="Data"; // nome do diretrio

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date_finish=TimeCurrent();
double

close_buff[];

datetime time_buff[];
int

size;

2000-2014, MetaQuotes Software Corp.

1304

Funes de Arquivo
//--- redefine o valor de erro
ResetLastError();
//--- copiar o preo de fechamento de cada barra
if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
{

PrintFormat("Falha ao copiar valores de preo de fechamento. Cdigo de erro = %d",GetLastErro


return;
}
//--- copiar o tempo para cada barra
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- receber o tamanho do buffer
size=ArraySize(close_buff);

//--- abrir o arquivo para escrever os valores (se o arquivo estiver ausente, ele ser criado autom
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est aberto para escrita",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- escrever fechamento do tempo dos preos e os valores para o arquivo
for(int i=0;i<size;i++)
{
FileWriteDouble(file_handle,(double)time_buff[i]);
FileWriteFloat(file_handle,(float)close_buff[i]);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Tipos reais (double, float), FileWriteDouble

2000-2014, MetaQuotes Software Corp.

1305

Funes de Arquivo

FileWriteInteger
A funo escreve o valor do parmetro int para um arquivo bin, a partir da posio atual do ponteiro
de arquivo.
uint FileWriteInteger(
int file_handle,

// Manipular Arquivo

int value,

// Valor para ser escrito

int size=INT_VALUE

// Tamanho em bytes

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
value
[in] Valor inteiro.
size=INT_VALUE
[in] Nmero de bytes (at 4 inclusive), que deve ser escrito. As constantes correspondentes so
fornecidos: CHAR_VALUE=1, SHORT_VALUE=2 e INT_VALUE=4, ento a funo pode escrever o
valor inteiro do tipo char, uchar, short, ushort, int, ou uint.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos. O ponteiro do arquivo
deslocado pelo mesmo nmero de bytes.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteInteger.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

// par de moedas

input ENUM_TIMEFRAMES

InpSymbolPeriod=PERIOD_H1;

// perodo de tempo

input datetime

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="Trend.bin"; // nome do arquivo

input string

InpDirectoryName="Data"; // nome do diretrio

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()

2000-2014, MetaQuotes Software Corp.

1306

Funes de Arquivo
{
datetime date_finish=TimeCurrent();
double

close_buff[];

datetime time_buff[];
int

size;

//--- redefine o valor de erro


ResetLastError();
//--- copiar o preo de fechamento de cada barra
if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
{

PrintFormat("Falha ao copiar os valores dos preos de fechamento. Cdigo de erro = %d",GetLas


return;
}
//--- copiar o tempo para cada barra
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- receber o tamanho do buffer
size=ArraySize(close_buff);

//--- abrir o arquivo para escrever os valores (se o arquivo estiver ausente, ele ser criado autom
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para ser escrito",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--int

up_down=0; // tendncia flag

int

arr_size;

uchar arr[];

// tamanho de array arr


// array tipo uchar

//--- escrever valores de tempo para o arquivo


for(int i=0;i<size-1;i++)
{
//--- comparar preos de fechamento das atuais e prximas barras
if(close_buff[i]<=close_buff[i+1])
{
if(up_down!=1)
{
//--- escrever valor de data para o arquivo usando FileWriteInteger
StringToCharArray(TimeToString(time_buff[i]),arr);
arr_size=ArraySize(arr);
//--- primeiro, escreva o nmero de smbolos na array
FileWriteInteger(file_handle,arr_size,INT_VALUE);
//--- escrever os smbolos
for(int j=0;j<arr_size;j++)
FileWriteInteger(file_handle,arr[j],CHAR_VALUE);
//--- mudar a flag de tendncia

2000-2014, MetaQuotes Software Corp.

1307

Funes de Arquivo
up_down=1;
}
}
else
{
if(up_down!=-1)
{
//--- escrever valor de data para o arquivo usando FileWriteInteger
StringToCharArray(TimeToString(time_buff[i]),arr);
arr_size=ArraySize(arr);
//--- primeiro, escreva o nmero de smbolos na array
FileWriteInteger(file_handle,arr_size,INT_VALUE);
//--- escrever os smbolos
for(int j=0;j<arr_size;j++)
FileWriteInteger(file_handle,arr[j],CHAR_VALUE);
//--- mudar a flag de tendncia
up_down=-1;
}
}
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
IntegerToString, StringToInteger, Tipos Inteiros

2000-2014, MetaQuotes Software Corp.

1308

Funes de Arquivo

FileWriteLong
A funo escreve o valor do parmetro de tipo long para um arquivo bin, a partir da posio atual do
ponteiro de arquivo.
uint FileWriteLong(
int

file_handle,

long value

// Manipular arquivo
// Valor para ser escrito

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
value
[in] Valor do tipo long.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos (neste caso sizeof(long)=8). O
ponteiro do arquivo deslocado pelo mesmo nmero de bytes.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteLong.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

// par de moedas

input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;


input datetime

// time frame

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="Volume.bin"; // nome do arquivo

input string

InpDirectoryName="Data";

// nome do diretrio

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date_finish=TimeCurrent();
long

volume_buff[];

datetime time_buff[];
int

size;

2000-2014, MetaQuotes Software Corp.

1309

Funes de Arquivo
//--- redefine o valor de erro
ResetLastError();
//--- copiar volumes de tick para cada bar
if(CopyTickVolume(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,volume_buff)==-1)
{

PrintFormat("Falha ao copiar valores do volume de tick. Cdigo de erro = %d",GetLastError());


return;
}
//--- copiar o tempo para cada barra
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- receber o tamanho do buffer
size=ArraySize(volume_buff);

//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele ser
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para ser escrito",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- primeiro, escreva o tamanho da amostra de dados
FileWriteLong(file_handle,(long)size);
//--- escrever valores de tempo e de volume para o arquivo
for(int i=0;i<size;i++)
{
FileWriteLong(file_handle,(long)time_buff[i]);
FileWriteLong(file_handle,volume_buff[i]);
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Tipos inteiros, FileWriteInteger

2000-2014, MetaQuotes Software Corp.

1310

Funes de Arquivo

FileWriteString
A funo escreve o valor de um parmetro do tipo string em um arquivo BIN, CSV ou TXT comeando a
partir da posio atual do ponteiro de arquivo. Quando escrever para um arquivo CSV ou TXT: se
existe um smbolo na string '\n' (LF) sem caractere anterior '\r' (CR), ento antes de '\n' desaparecer '\r'
adicionado.
uint FileWriteString(
int

file_handle,

// Manipular arquivo

const string text_string,

// string para escrever

int

// nmero de smbolos

length=-1

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
text_string
[in] Seqncia.
length=-1
[in] O nmero de caracteres que voc quer escrever. Esta opo necessria para escrever uma
string em um arquivo BIN. Se o tamanho no for especificado, ento a string inteira, sem o trailer
0 (zero) escrita. Se voc especificar um tamanho menor do que o comprimento da string, ento
uma parte da string sem o trailer 0 (zero) escrita. Se voc especificar um tamanho maior do que
o comprimento da string, a string preenchido por um nmero apropriado de zeros. Para arquivos
do tipo CSV e TXT, este parmetro ignorado e a string escrita inteiramente.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos. O ponteiro do arquivo
deslocado pelo mesmo nmero de bytes.
Observao
Note que quando se escreve para um arquivo aberto pela bandeira FILE_UNICODE (ou sem uma
bandeira FILE_ANSI), ento o nmero de bytes escrito ser duas vezes to grande como o nmero de
cadeia de string escritas. Quando gravar para um arquivo aberto com a bandeira FILE_ANSI, o
nmero de bytes escritos ir coincidir com o nmero de caracteres de string escritas.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWriteString.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs

2000-2014, MetaQuotes Software Corp.

1311

Funes de Arquivo
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

// par de moedas

input ENUM_TIMEFRAMES

InpSymbolPeriod=PERIOD_H1;

// perodo de tempo

input int

InpMAPeriod=14;

// perodo de mdia mvel

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;


input datetime

// tipo de preo

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="RSI.csv";

input string

InpDirectoryName="Data"; // nome do diretrio

// nome do arquivo

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime date_finish; // copiando dados com a data final
double

rsi_buff[];

// array do valor do indicador

datetime date_buff[]; // array da data do indicador


int

rsi_size=0;

// tamanho de arrays de indicadores

//--- tempo final o atual


date_finish=TimeCurrent();
//--- receber a manipulao do indicador RSI
ResetLastError();
int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
if(rsi_handle==INVALID_HANDLE)
{
//--- falha para receber a manipulao do indicador

PrintFormat("Erro quando recebe a manipulao do indicador. Cdigo de erro = %d",GetLastError


return;
}
//--- fica no loop, at que o indicador calcula todos os seus valores
while(BarsCalculated(rsi_handle)==-1)
Sleep(10); // pausa para permitir que o indicador calcule os respectivos valores
//--- copiar os valores do indicador para um determinado perodo de tempo
ResetLastError();
if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
{
PrintFormat("Falha para copiar valores do indicador. Cdigo de erro = %d",GetLastError());
return;
}
//--- copiar o tempo apropriado para os valores do indicador
ResetLastError();
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- libera a memria ocupada pelo indicador
IndicatorRelease(rsi_handle);
//--- receber o tamanho do buffer

2000-2014, MetaQuotes Software Corp.

1312

Funes de Arquivo
rsi_size=ArraySize(rsi_buff);

//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele ser
ResetLastError();

int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_AN
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est disponvel para ser escrito",InpFileName);
PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- preparar variveis adicionais
string str="";
bool

is_formed=false;

//--- escrever datas de formao das reas de sobre-compra e sobre-venda


for(int i=0;i<rsi_size;i++)
{
//--- verifique os valores dos indicadores
if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
{
//--- se o valor o primeiro nesta rea
if(!is_formed)
{
//--- adicionar o valor e a data
str=(string)rsi_buff[i]+"\t"+(string)date_buff[i];
is_formed=true;
}
else
str+="\t"+(string)rsi_buff[i]+"\t"+(string)date_buff[i];
//--- mover para a prxima iterao do loop
continue;
}
//--- verificar a flag
if(is_formed)
{
//--- a string formada, escrev-lo para o arquivo
FileWriteString(file_handle,str+"\r\n");
is_formed=false;
}
}
//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Tipo string, StringFormat

2000-2014, MetaQuotes Software Corp.

1313

Funes de Arquivo

FileWriteStruct
A funo escreve em bin-arquivo um contedo de uma estrutura passada como um parmetro,
comeando a partir da posio atual do ponteiro de arquivo.
uint FileWriteStruct(
int

file_handle,

// Manipular arquivo

const void& struct_object,

// link para um objeto

int

// tamanho a ser escrito em bytes

size=-1

);

Parmetros
file_handle
[in] Descritor de arquivo retornado pelo FileOpen().
struct_object
[in] Referncia ao objeto desta estrutura. A estrutura no deve conter strings, arrays dinmicas
ou funes virtuais.
size=-1
[in] Nmero de bytes que voc quer gravar. Se tamanho no especificado ou o especificado
nmero de bytes maior do que o tamanho da estrutura, a estrutura inteira escrita.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero de bytes escritos. O ponteiro do arquivo
deslocado pelo mesmo nmero de bytes.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FileWiteStruct.mq5 |

//|

Copyright 2013, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- mostrar a janela de parmetros de entrada quando do lanamento do script


#property script_show_inputs
//--- parmetros para a recepo de dados a partir do terminal
input string

InpSymbolName="EURUSD";

input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;


input datetime

// par de moedas
// time frame

InpDateStart=D'2013.01.01 00:00'; // data de incio da cpia dos dados

//--- parmetros para escrever dados no arquivo


input string

InpFileName="EURUSD.txt";

// nome do arquivo

input string

InpDirectoryName="Data";

// nome do diretrio

//+------------------------------------------------------------------+
//| Estrutura para armazenar dados candlestick

//+------------------------------------------------------------------+
struct candlesticks

2000-2014, MetaQuotes Software Corp.

1314

Funes de Arquivo
{
double

open;

// preo de abertura

double

close; // preo de fechamento

double

high;

// preo de mximo

double

low;

// preo de mnimo

datetime

date;

// data

};
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
datetime

date_finish=TimeCurrent();

int

size;

datetime

time_buff[];

double

open_buff[];

double

close_buff[];

double

high_buff[];

double

low_buff[];

candlesticks cand_buff[];
//--- redefine o valor de erro
ResetLastError();
//--- receber o tempo da chegada das barras a partir do intervalo
if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
{
PrintFormat("Falha para copiar valores de tempo. Cdigo de erro = %d",GetLastError());
return;
}
//--- receber os preos de mximo das barras a partir do intervalo
if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1)
{

PrintFormat("Falha ao copiar os valores dos preos de mximo. Cdigo de erro = %d",GetLastErr


return;
}
//--- receber os preos de mnimo das barras a partir do intervalo
if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1)
{

PrintFormat("Falha ao copiar os valores dos preos de mnimo. Cdigo de erro = %d",GetLastErr


return;
}
//--- receber os preos de abertura das barras a partir do intervalo
if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1)
{

PrintFormat("Falha ao copiar os valores dos preos de abertura. Cdigo de erro = %d",GetLastE


return;
}
//--- receber os preos de fechamento das barras a partir do intervalo
if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
{

2000-2014, MetaQuotes Software Corp.

1315

Funes de Arquivo

PrintFormat("Falha ao copiar os valores dos preos de fechamento. Cdigo de erro = %d",GetLas


return;
}
//--- definir o tamanho de arrays
size=ArraySize(time_buff);
//--- salvar todos os dados na estrutura array
ArrayResize(cand_buff,size);
for(int i=0;i<size;i++)
{
cand_buff[i].open=open_buff[i];
cand_buff[i].close=close_buff[i];
cand_buff[i].high=high_buff[i];
cand_buff[i].low=low_buff[i];
cand_buff[i].date=time_buff[i];
}

//--- abrir o arquivo para escrever a estrutura array para o arquivo (se o arquivo estiver ausente,
ResetLastError();

int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_CO
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s arquivo est aberto para escrita",InpFileName);
PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
//--- preparar o contador do nmero de bytes
uint counter=0;
//--- escrever valores array no loop
for(int i=0;i<size;i++)
counter+=FileWriteStruct(file_handle,cand_buff[i]);
PrintFormat("%d bytes de informao est escrito para %s arquivo",InpFileName,counter);

PrintFormat("Nmero total de bytes: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counte


//--- fechar o arquivo
FileClose(file_handle);
PrintFormat("Os dados so escritos, %s arquivo esta fechado",InpFileName);
}
else
PrintFormat("Falha para abrir %s arquivo, Cdigo de erro = %d",InpFileName,GetLastError());
}

Tambm Veja
Estruturas e classes

2000-2014, MetaQuotes Software Corp.

1316

Funes de Arquivo

FolderCreate
A funo cria uma pasta no diretrio Arquivos (dependendo do valor de common_flag).
bool FolderCreate(
string folder_name,

// String com o nome da nova pasta

int

// escopo

common_flag=0

);

Parmetros
folder_name
[in] O nome do diretrio que deseja criar. Contm o caminho completo para a pasta.
common_flag=0
[in] Bandeira determinando a localizao do diretrio. Se common_flag=FILE_COMMON, ento o
diretrio est na pasta compartilhada para todos os terminais do cliente. Caso contrrio, o
diretrio est em uma pasta local (MQL5\files ou MQL5\tester\files na caso de testes).
Valor do Retorno
Retorna true se bem-sucedida, caso contrrio - false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FolderCreate.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- Descrio
#property description "O script mostra um exemplo de uso FolderCreate()."
#property description "Um parmetro externo define a pasta para criao de pastas."
#property description "Depois de executar o script, uma estrutura de pastas criada"
//--- Mostrar caixa de dilogo de parmetros de entrada quando se inicia o script
#property script_show_inputs
//--- O parmetro de entrada define a pasta em que o script est sendo executado
input bool

common_folder=false; // Uma pasta compartilhada de todos os terminais

int

flag=0;

// O valor da flag determina o lugar para a execuo de opera

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()

2000-2014, MetaQuotes Software Corp.

1317

Funes de Arquivo
{
string working_folder;
//--- Definir o valor da flag, se o parmetro externo common_folder==true
if(common_folder)
{
flag=FILE_COMMON;
//--- Localize a pasta em que estamos trabalhando
working_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH)+"\\MQL5\\Files";
}
else working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files";
//--- A pasta que ser criada na pasta MQL5\Files
string root="Folder_A";
if(CreateFolder(working_folder,root,flag))
{
//--- Crie uma pasta filho em Child_Folder_B1
string folder_B1="Child_Folder_B1";
string path=root+"\\"+folder_B1;

// Criar um nome de pasta baseado na estrutura

if(CreateFolder(working_folder,path,flag))
{
//--- Criar mais 3 pastas filho nesta pasta
string folder_C11="Child_Folder_C11";
string child_path=path+"\\"+folder_C11;// Criar um nome de pasta baseado na estrutura
CreateFolder(working_folder,child_path,flag);
//--- A segunda pasta filho
string folder_C12="Child_Folder_C12";
child_path=path+"\\"+folder_C12;
CreateFolder(working_folder,child_path,flag);
//--- A terceira pasta filho
string folder_C13="Child_Folder_C13";
child_path=path+"\\"+folder_C13;
CreateFolder(working_folder,child_path,flag);
}
}
//--}
//+------------------------------------------------------------------+
//| Tentar criar uma pasta e mostrar uma mensagem

//+------------------------------------------------------------------+
bool CreateFolder(string working_folder,string folder_path,int file_flag)
{
//--- Uma mensagem de depurao
PrintFormat("folder_path=%s",folder_path);
//--- Tentando criar uma pasta em relao ao caminho MQL5\Files
if(FolderCreate(folder_path,file_flag))
{
//--- Mostrar o caminho completo para a pasta criada
PrintFormat("Pasta %s foi criada",working_folder+"\\"+folder_path);
//--- Redefine o cdigo de erro

2000-2014, MetaQuotes Software Corp.

1318

Funes de Arquivo
ResetLastError();
//--- Retornar resultado bem-sucedido
return true;
}
else

PrintFormat("Falha ao criar a pasta %s. Cdigo de erro %d",working_folder+folder_path,GetLast


//--- Falhou
return false;
}

Tambm Veja
FileOpen(), FolderClean(), FileCopy()

2000-2014, MetaQuotes Software Corp.

1319

Funes de Arquivo

FolderDelete
A funo remove o diretrio especificado. Se a pasta no estiver vazia, ento ele no pode ser
removida.
bool FolderDelete(
string folder_name,

// String com o nome da pasta para deletar

int

// escopo

common_flag=0

);

Parmetros
folder_name
[in] O nome do diretrio que voc deseja excluir. Contm o caminho completo para a pasta.
common_flag=0
[in] Bandeira determinando a localizao do diretrio. Se common_flag=FILE_COMMON, ento o
diretrio est na pasta compartilhada para todos os terminais do cliente. Caso contrrio, o
diretrio est em uma pasta local (MQL5\files ou MQL5\tester\files no caso de testes).
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Se o diretrio contiver pelo menos um arquivo e / ou subdiretrio, ento este diretrio no pode ser
excludo, ele deve ser limpo primeiro. FolderClean() usado para limpar a pasta de todos os seus
arquivos ou sub-pastas.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FolderDelete.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- Descrio
#property description "O roteiro mostra um exemplo de uso FolderDelete()."

#property description "Primeiro duas pastas so criados, um deles est vazia, a segunda contm um a

#property description "Quando se tenta excluir uma pasta no-vazia, ser retornado um erro e um avi
//--- Mostrar a caixa de dilogo de parmetros de entrada quando se inicia o script
#property script_show_inputs
//--- Parmetros de entrada
input string

firstFolder="empty";

// Uma pasta vazia

2000-2014, MetaQuotes Software Corp.

1320

Funes de Arquivo
input string

secondFolder="nonempty";// A pasta, em que um arquivo ser criado

string filename="delete_me.txt";

// O nome do arquivo que ser criado na pasta secondFolder

//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- Escreva o manipulador de arquivo aqui
int handle;
//--- Descubra em qual pasta estamos trabalhando
string working_folder=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files";
//--- Uma mensagem de depurao
PrintFormat("working_folder=%s",working_folder);
//--- Tentando criar uma pasta vazia em relao ao caminho MQL5\Files
if(FolderCreate(firstFolder,0)) // 0 (zero) significa que estamos trabalhando na pasta local do
{
//--- Insira o caminho completo para a pasta criada
PrintFormat("Pasta %s foi criada",working_folder+"\\"+firstFolder);
//--- Redefine o cdigo de erro
ResetLastError();
}
else

PrintFormat("Falha ao criar a pasta %s. Cdigo de erro %d",working_folder+"\\"+firstFolder, G


//--- Agora, crie uma pasta no-vazia utilizando a funo FileOpen()
string filepath=secondFolder+"\\"+filename;

// Formar caminho do arquivo que desejamos abrir pa

handle=FileOpen(filepath,FILE_WRITE|FILE_TXT); // Flag FILE_WRITE neste caso obrigatria, cons


if(handle!=INVALID_HANDLE)
PrintFormat("Arquivo %s foi aberto para leitura",working_folder+"\\"+filepath);
else

PrintFormat("Falha para criar arquivo %s na pasta %s. Cdigo de erro=",filename,secondFolder,


Comment(StringFormat("Preparar para deletar pastas %s e %s", firstFolder, secondFolder));
//--- Uma pequena pausa de 5 segundos para ler uma mensagem no grfico
Sleep(5000); // Sleep() no pode ser utilizado em indicadores!
//--- Mostrar uma caixa de dilogo e pedir ao usurio

int choice=MessageBox(StringFormat("Voc quer apagar pastas %s e %s?", firstFolder, secondFolder


"Deletando pastas",
MB_YESNO|MB_ICONQUESTION); //

Dois botes - "Yes" e "No"

//--- Executar uma ao dependendo da variante selecionada


if(choice==IDYES)
{
//--- Excluir no grfico o formulrio de comentrio
Comment("");
//--- Adicione uma mensagem dentro do jornal "Experts"
PrintFormat("Tentando deletar pastas %s e %s",firstFolder, secondFolder);
ResetLastError();
//--- Deletar uma pasta vazia

2000-2014, MetaQuotes Software Corp.

1321

Funes de Arquivo
if(FolderDelete(firstFolder))
//--- A seguinte mensagem deve aparecer uma vez que a pasta est vazia
PrintFormat("Pasta %s foi deletada com sucesso",firstFolder);
else

PrintFormat("Falha para deletar pasta %s. Cdigo de erro=%d", firstFolder, GetLastError())


ResetLastError();
//--- Deletar a pasta que contm um arquivo
if(FolderDelete(secondFolder))
PrintFormat("Pasta %s foi deletada com sucesso", secondFolder);
else
//--- A seguinte mensagem deve aparecer uma vez que a pasta contm um arquivo

PrintFormat("Falha para deletar pasta %s. Cdigo de erro=%d", secondFolder, GetLastError()


}
else
Print("Excluso cancelada");
//--}

Tambm Veja
FileOpen(), FolderClean(), FileMove()

2000-2014, MetaQuotes Software Corp.

1322

Funes de Arquivo

FolderClean
A funo exclui todos os arquivos em uma pasta especificada.
bool FolderClean(
string folder_name,

// String com o nome da pasta eliminada

int

// escopo

common_flag=0

);

Parmetros
folder_name
[in] O nome do diretrio onde voc deseja excluir todos os arquivos. Contm o caminho completo
para a pasta.
common_flag=0
[in] Bandeira determinando a localizao do diretrio. Se common_flag = FILE_COMMON, ento o
diretrio est na pasta compartilhada para todos os terminais de clientes. Caso contrrio, o
diretrio est numa pasta local (MQL5\files ou MQL5\tester\files no caso dos testes).
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false.
Observao
Por razes de segurana, o trabalho com arquivos estritamente controlada na lngua MQL5.
Arquivos com que as operaes de arquivo so conduzidas usando os meios MQL5, no podem estar
fora da caixa de proteo do arquivo.
Esta funo deve ser usada com cuidado, uma vez que todos os arquivos e todos os subdiretrios
so excludos irremediavelmente.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_FolderClean.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

//--- Descrio
#property description "O script mostra um exemplo de uso FolderClean()."
#property description "Primeiro, os arquivos so criados na pasta especificada utilizando a funo

#property description "Ento, antes que os arquivos sejam apagados, um aviso mostrado usando Mess
//--- Mostrar caixa de dilogo de parmetros de entrada quando se inicia o script
#property script_show_inputs
//--- Parmetros de entrada
input string

foldername="demo_folder";

// Criar uma pasta em MQL5/Files/

input int

files=5;

// O nmero de arquivos para criar e excluir

2000-2014, MetaQuotes Software Corp.

1323

Funes de Arquivo
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
string name="testfile";
//---Primeiro abrir ou criar arquivos na pasta de dados do terminal
for(int N=0;N<files;N++)
{
//--- O nome do arquivo no formato demo_pasta\testfileN.txt'
string filemane=StringFormat("%s\\%s%d.txt",foldername,name,N);
//--- Abrir um arquivo com a bandeira para a escrita, neste caso, o 'demo_pasta' ser criado
int handle=FileOpen(filemane,FILE_WRITE);
//--- Descubra se a funo FileOpen() foi bem sucedida
if(handle==INVALID_HANDLE)
{
PrintFormat("Falha para criar arquivo %s. Cdigo de erro",filemane,GetLastError());
ResetLastError();
}
else
{
PrintFormat("Arquivo %s foi aberto com sucesso",filemane);
//--- O arquivo aberto no mais necessrio, ento fech-lo
FileClose(handle);
}
}
//--- Verifique o nmero de arquivos na pasta
int k=FilesInFolder(foldername+"\\*.*",0);
PrintFormat("Totalmente a pasta %s contm %d arquivos",foldername,k);
//--- Mostrar uma janela para perguntar ao usurio

int choice=MessageBox(StringFormat("Voc vai apagar %d arquivos da pasta %s. Voc quer continuar
"Excluindo arquivos da pasta",
MB_YESNO|MB_ICONQUESTION); // Dois botes - "Sim" e "No"
ResetLastError();
//--- Executar uma ao dependendo da variante selecionada
if(choice==IDYES)
{
//--- Comear deletar arquivos
PrintFormat("Tentando deletar todos os arquivos da pasta %s",foldername);
if(FolderClean(foldername,0))
PrintFormat("Arquivos foram deletados com sucesso, %d arquivos que restaram na pasta %s",
foldername,
FilesInFolder(foldername+"\\*.*",0));
else

PrintFormat("Falha ao deletar arquivos da pasta %s. Cdigo de erro %d",foldername,GetLastE


}
else

2000-2014, MetaQuotes Software Corp.

1324

Funes de Arquivo
PrintFormat("Excluso cancelada");
//--}
//+------------------------------------------------------------------+
//| Retornar o nmero de arquivos na pasta especificada

//+------------------------------------------------------------------+
int FilesInFolder(string path,int flag)
{
int count=0;
long handle;
string filename;
//--handle=FileFindFirst(path,filename,flag);
//--- Se pelo menos um arquivo encontrado, procurar por mais arquivos
if(handle!=INVALID_HANDLE)
{
//--- Mostrar o nome do arquivo
PrintFormat("Arquivo %s encontrado",filename);
//--- Aumentar o contador de arquivos/pastas encontrados
count++;
//--- Iniciar a pesquisa em todos arquivos/pastas
while(FileFindNext(handle,filename))
{
PrintFormat("Arquivo %s encontrado",filename);
count++;
}
//--- No se esquea de fechar o manipulador de pesquisa aps a concluso
FileFindClose(handle);
}
else // Falha ao obter o manipulador
{
PrintFormat("Pesquisa nos arquivos na pasta %s falhou",path);
}
//--- Retorna o resultado
return count;
}

Tambm Veja
FileFindFirst, FileFindNext, FileFindClose

2000-2014, MetaQuotes Software Corp.

1325

Indicadores Customizados

Indicadores Customizados
Este o grupo de funes utilizadas na criao dos indicadores personalizados. Estas funes no
podem ser usadas para escrever Expert Advisors e Scripts.
Funo

Ao

SetIndexBuffer

Vincula-se o buffer de indicador especificado


com dinmica unidimensional array do tipo
double

IndicatorSetDouble

Define o valor da propriedade de um indicador


do tipo double

IndicatorSetInteger

Define o valor da propriedade de um indicador


do tipo int

IndicatorSetString

Define o valor da propriedade de um indicador


do tipo string

PlotIndexSetDouble

Define o valor da propriedade de linha de um


indicador do tipo double

PlotIndexSetInteger

Define o valor da propriedade de linha de um


indicador do tipo int

PlotIndexSetString

Define o valor da propriedade de linha de um


indicador do tipo string

PlotIndexGetInteger

Retorna o valor da propriedade de linha de um


indicador do tipo inteiro

Propriedades de indicador podem ser definidas utilizando as diretivas de compilador ou o uso de


funes. Para entender melhor isso, recomendvel que voc estude estilos de indicador como
exemplos.
Todos os clculos necessrios de um indicador personalizado devem ser colocados na funo
predeterminada OnCalculate(). Se voc usar uma forma abreviada da funo chamada OnCalculate(),
como

int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& p

ento a varivel rates_total contm o valor do nmero total de elementos da ordem de price[],
passados como um parmetro de entrada para calcular os valores do indicador.
Parmetro prev_calculated o resultado da execuo de OnCalculate() na chamada anterior, que
permite organizar um algoritmo salvo para calcular os valores do indicador. Por exemplo, se o valor
corrente de rates_total = 1000, prev_calculated = 999, ento talvez seja bastante para fazer os
clculos apenas para um valor de cada buffer indicador.
Se a informao sobre o tamanho da entrada da ordem de preo fosse disponibilizado, ento isso
levaria necessidade de fazer clculos para 1000 valores de cada buffer de indicador. Na primeira
chamada do OnCalculate(), o valor prev_calculated = 0. Se a ordem de price[] foi alterado de alguma
forma, ento neste caso prev_calculated tambm igual a 0 (zero).

2000-2014, MetaQuotes Software Corp.

1326

Indicadores Customizados
O parmetro begin mostra o nmero de valores iniciais da ordem de preo, que no contm dados
para o clculo. Por exemplo, se o valor de Accelerator Oscillator (para os quais os primeiros 37 valores
no so calculados) foram utilizados como um parmetro de entrada, ento begin = 37. Por exemplo,
vamos considerar um simples indicador:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//---- plot Label1


#property indicator_label1

"Etiqueta 1"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- buffers do indicador


double

Label1Buffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//--Print("begin = ",begin,"

prev_calculated = ",prev_calculated,"

rates_total = ",rates_total);

//--- valor retorno de prev_calculated para a prxima chamada


return(rates_total);
}

Arrast-lo a partir da janela do "Navegador" para a janela do indicador Accelerator Oscillator e ns


indicamos que os clculos devem ser feitos com base nos valores do indicador anterior:

2000-2014, MetaQuotes Software Corp.

1327

Indicadores Customizados

Como um resultado, a primeira chamada do valor OnCalculate() de prev_calculated ser igual a zero, e
em outras chamadas ser igual ao valor rates_total (at que o nmero de barras no grfico de preo
aumenta).

O valor do parmetro begin ser exatamente igual ao nmero das barras iniciais, para os quais os
valores do indicador Accelerator no so calculados de acordo com a lgica do indicador. Se ns
olharmos para o cdigo fonte do indicador personalizado Accelerator.mq5, ns veremos as linha
seguintes na funo OnInit():
//--- define a primeira barra a partir do qual o ndice ser desenhado
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,37);

Usando a funo PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values), ns definimos o


nmero no-existente dos primeiros valores no array zero de um indicador personalizado, o qual no

2000-2014, MetaQuotes Software Corp.

1328

Indicadores Customizados
precisamos aceitar para o clculo (empty_first_values). Assim, temos mecanismos para:
1. definir o nmero de valores iniciais de um indicador, o qual no dever ser usado para os clculos
de outro indicador personalizado;
2. obter informaes sobre o nmero dos primeiros valores a serem ignorados quando voc chamar um
outro indicador personalizado , sem entrar na lgica de seus clculos.

2000-2014, MetaQuotes Software Corp.

1329

Indicadores Customizados

Estilos de Indicador em Exemplos


O MetaTrader 5 Terminal Cliente inclui 38 indicadores tcnicos que podem ser usados em MQL5
programas usando funes apropriadas. Mas a principal vantagem da lngua MQL5 a capacidade de
criar indicadores personalizados, os quais podem ento serem utilizados em Expert Advisors ou
simplesmente serem aplicados sobre grficos de preos para fins de anlise tcnica.
O conjunto total dos indicadores podem serem derivados a partir de vrias bases de estilos de
desenhos, conhecidas como plotagem. Plotagem denota uma forma de visualizao de dados, que o
indicador calcula, armazena e providencia o pedido. Existem sete tipos bsicos plotagem:
1. Uma linha
2. Uma seo (segmento)
3. Histograma
4. Seta (smbolo)
5. Uma rea pintada (canal preenchido)
6. Bars
7. Castial (candlesticks) japons
Cada plotagem requer um para cinco arrays do tipo double, em que os valores dos indicadores so
armazenados. Para efeitos de comodidade, estes arrays so associados com os buffers do indicador. O
nmero de buffers em um indicador deve ser declarado com antecedncia usando diretivas de
compilador, por exemplo:
#property indicator_buffers 3 // Nmero de buffers
#property indicator_plots

2 // Nmero de plotes

O nmero de buffers no indicador sempre maior ou igual ao nmero de plotagem no indicador.


Como cada tipo de plotagem bsica pode ter variao de cor ou detalhes de construo, o nmero real
de tipos de plotagem em MQL5 de 18:
Plotagem

Descrio

Buffers de valor

Buffers de cor

DRAW_NONE

No apresentado
visualmente
no
grfico,
mas
os
valores
do
buffer
correspondente podem
ser vistos na Janela de
Dados

DRAW_LINE

Uma linha plotada


sobre os valores do
buffer correspondente
(valores vazios no
buffer
so
indesejveis)

DRAW_SECTION

desenhado como
segmentos de linha
entre os valores do

2000-2014, MetaQuotes Software Corp.

1330

Indicadores Customizados
buffer correspondente
(geralmente
tem
muitos valores vazios)
DRAW_HISTOGRAM

desenhado como um
histograma a partir da
linha zero para os
valores
do
buffer
correspondente (pode
ter valores vazios)

DRAW_HISTOGRAM2

desenhado como um
histograma sobre dois
buffers de indicador
(pode
ter
valores
vazios)

DRAW_ARROW

desenhado
smbolos(pode
valores vazios)

como
ter

DRAW_ZIGZAG

Similar
ao
estilo
DRAW_SECTION, mas
diferentemente, pode
plotar
segmentos
verticais
em
uma
barra

DRAW_FILLING

Preenchimento de cor
entre duas linhas. 2
valores dos buffers
correspondentes
so
mostrados na Janela
de Dados

DRAW_BARS

desenhado como
barras. 2 valores dos
buffers
correspondentes
so
mostrados na Janela
de Dados

DRAW_CANDLES

Desenhado
como
Castiais
Japoneses
(candlesticks).
2
valores dos buffers
correspondentes
so
mostrados na Janela
de Dados

DRAW_COLOR_LINE

Uma linha para o qual


voc pode alternar as
cores em diferentes
barras ou mudar suas

2000-2014, MetaQuotes Software Corp.

1331

Indicadores Customizados
cores,
a
momento

qualquer

DRAW_COLOR_SECTIO
N

Similar
ao
estilo
DRAW_SECTION, mas
a cor de cada seo
pode ser ajustada
individualmente; cor
tambm
pode
ser
ajustada
dinamicamente

DRAW_COLOR_HISTO
GRAM

Similar
ao
estilo
DRAW_HISTOGRAM,
mas cada faixa pode
ter uma cor diferente,
voc pode definir a cor
dinamicamente

DRAW_COLOR_HISTO
GRAM2

Similar
ao
estilo
DRAW_HISTOGRAM2,
mas cada faixa pode
ter uma cor diferente,
voc pode definir a cor
dinamicamente

DRAW_COLOR_ARRO
W

Similar
ao
estilo
DRAW_ARROW, mas
cada smbolo pode ter
sua cor. Cor pode ser
mudada
dinamicamente

DRAW_COLOR_ZIGZAG

O estilo DRAW_ZIGZAG
com opes de cores
individuais das sees
e mudana dinmica
das cores

DRAW_COLOR_BARS

O estilo DRAW_BARS
com opes de cores
individuais das barras
e mudana dinmica
das cores

DRAW_COLOR_CANDL
ES

O
estilo
DRAW_CANDLES com
opes
de
cores
individuais
dos
castiais (candlesticks)
e mudana dinmica
das cores

2000-2014, MetaQuotes Software Corp.

1332

Indicadores Customizados

A diferena entre um buffer de indicador e um array


Cada indicador, no seu nvel global, voc deve declarar uma ou mais arrays do tipo double, o qual
ento deve ser usado como um buffer de indicador usando a funo SetIndexBuffer(). Para desenhar
plotagem de indicador, apenas os valores dos buffers do indicador so utilizados, quaisquer outros
arrays no podem ser usados para esta finalidade. Alm disso, os valores de buffer so exibidos na
Janela de Dados.
Um buffer de indicador deve ser dinmico e no requer especificao de tamanho o tamanho do
array usado como buffer de indicador, definido pelo subsistema do terminal com execuo
automtica.
Aps o array estar ligado ao buffer de indicador, a direo de indexao definida por padro num
arrays comum, mas pode usar a funo ArraySetAsSeries() para alterar o modo de acesso aos
elementos array. Por padro, o buffer de indicador usado para armazenar dados usados para
plotagem INDICATOR_DATA).
Se os clculos dos valores de indicador requerem segurana de clculos intermedirios e
armazenamento de valores adicionais para cada barra, ento esse array pode ser declarado como um
buffer de clculo durante a ligao (INDICATOR_CALCULATIONS). Para valores intermedirios, voc
tambm pode usar um array regular, mas neste caso, o programador tem que gerenciar o tamanho do
array.
Algumas plotagens permitem definir uma cor para cada barra. Para armazenar a informao sobre cor,
buffers de cores so usados (INDICATOR_COLOR_INDEX). A cor um tipo integer color, mas todos os
buffers de indicadores sero do tipo double. Valores de cor e buffers auxiliares
(INDICATOR_CALCULATIONS) no podem ser obtidos usando CopyBuffer().
O nmero de buffers de indicadores devem ser especificados usando a diretiva de compilador
#property indicator_buffers number_of_buffers:
#property indicator_buffers 3

//

o indicador tem 3 buffers

O nmero mximo permitido de buffers em um indicador 512.

Relevncia de Buffers de Indicadores e Plotagem


Cada plotagem baseada em um ou mais buffers do indicador. Assim, para a exibio de castiais
(candlesticks) simples, quatro valores so obrigatrios - Open (abertura), High (alta), Low (baixa) e
Close (fechamento) de preos. Conseqentemente, para exibir um indicador na forma de castiais
(candlesticks), necessrio declarar 4 buffers de indicadores e 4 arrays do tipo double para eles. Por
exemplo:
//--- O indicador tem quatro buffers de indicadores
#property indicator_buffers 4
//--- O indicador tem uma plotagem
#property indicator_plots

//--- Graficamente plotando nmero 1 aparecer como castiais (candlesticks)


#property indicator_type1

DRAW_CANDLES

//--- Castiais (candlesticks) sero desenhados em clrDodgerBlue

2000-2014, MetaQuotes Software Corp.

1333

Indicadores Customizados
#property indicator_color1

clrDodgerBlue

//--- 4 arrays para buffers de indicadores


double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

Graficamente, plotagens automticas usam buffers de indicadores de acordo com o nmero de


plotagem. A numerao da plotagem comea com um, a numerao dos buffers comea com zero. Se a
primeira plotagem requer 4 buffers do indicador, ento os primeiros quatro buffers do indicador sero
utilizados para desenh-lo. Estes quatro buffers devem estar lincados com os arrays apropriados com a
indexao correta usando a funo SetIndexBuffer().
//--- Arrays vinculados com buffers de indicador
SetIndexBuffer(0,OBuffer,INDICATOR_DATA);

// O primeiro buffer corresponde ao ndice zero

SetIndexBuffer(1,HBuffer,INDICATOR_DATA);

// O segundo buffer corresponde ao ndice 1

SetIndexBuffer(2,LBuffer,INDICATOR_DATA);

// O terceiro buffer corresponde ao ndice 2

SetIndexBuffer(3,CBuffer,INDICATOR_DATA);

// O quarto buffer corresponde ao ndice 3

A plotagem dos castiais (candlesticks), o indicador usar apenas o primeiro dos quatro buffers,
porque a plotagem do "candlestick" foi anunciado sobre o primeiro nmero.
Alterar o exemplo, e adicionar plotagem de uma linha simples - DRAW_LINE. Agora, suponha que a
linha numerada como 1, e os castiais (candlesticks) so o nmero 2. O nmero de buffers e o
nmero plotagem aumentou.
//--- O indicador tem 5 buffers de indicador
#property indicator_buffers 5
//--- O indicador tem 2 plotagens
#property indicator_plots

//--- Plotagem 1 uma linha


#property indicator_type1

DRAW_LINE

//--- A cor d linha clrDodgerRed


#property indicator_color1

clrDodgerRed

//--- Plotagem 2 desenhado como castial (candlestick) japons


#property indicator_type2

DRAW_CANDLES

//--- A cor do castial (candlestick) clrDodgerBlue


#property indicator_color2

clrDodgerBlue

//--- 5 arrays para buffers de indicador


double LineBuffer[];
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

A ordem das plotagem mudou, e agora a linha vem em primeiro lugar, seguido dos castiais
(candlesticks) Japoneses. Portanto, a ordem dos buffers apropriado - primeiro anunciamos um
buffer para a linha com o ndice zero, e ento quatro buffers para os castiais (candlesticks).
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);

// O primeiro buffer corresponde ao ndice 0

2000-2014, MetaQuotes Software Corp.

1334

Indicadores Customizados
//--- Ligando arrays com buffers de indicador para os castiais (candlesticks)
SetIndexBuffer(1,OBuffer,INDICATOR_DATA);

// O segundo buffer corresponde ao ndice 1

SetIndexBuffer(2,HBuffer,INDICATOR_DATA);

// O terceiro buffer corresponde ao ndice 2

SetIndexBuffer(3,LBuffer,INDICATOR_DATA);

// O quarto buffer corresponde ao ndice 3

SetIndexBuffer(4,CBuffer,INDICATOR_DATA);

// O quinto buffer corresponde ao ndice 4

O nmero de buffers e plotagens sero definidos usando somente diretivas de compilador,


impossvel alterar essas propriedades dinamicamente usando funes.

Verses Coloridas de Estilos


Como so vistos na tabela, os estilos so divididos em dois grupos. O primeiro grupo inclui estilos
cujo nome no existe a palavra COLOR, ns chamamos de estilos bsicos:
DRAW_LINE
DRAW_SECTION
DRAW_HISTOGRAM
DRAW_HISTOGRAM2
DRAW_ARROW
DRAW_ZIGZAG
DRAW_FILLING
DRAW_BARS
DRAW_CANDLES
No segundo grupo, os nomes de estilo contm a palavra COLOR, vamos cham-los de verses de
cores:
DRAW_COLOR_LINE
DRAW_COLOR_SECTION
DRAW_COLOR_HISTOGRAM
DRAW_COLOR_HISTOGRAM2
DRAW_COLOR_ARROW
DRAW_COLOR_ZIGZAG
DRAW_COLOR_BARS
DRAW_COLOR_CANDLES
Todas as verses de cores de estilos diferentes a partir das bsicas permitem especificar uma cor
para cada parte da plotagem. A parte mnima de plotagem uma barra, ento podemos dizer que as
verses de cores permitem definir a cor de cada bar.
As excees so os estilos DRAW_NONE e DRAW_FILLING, eles no tem verses de cores.
Para definir a plotagem da cor em cada barra, um buffer adicional para armazenar o ndice de cor foi
adicionada verso de cor. Estes ndices indicam o nmero de uma cor numa array especial, a qual
contm um conjunto predefinido de cores. O tamanho do array das cores 64. Isto significa que cada

2000-2014, MetaQuotes Software Corp.

1335

Indicadores Customizados
verso de cor de um estilo de pintura permite uma plotagem de 64 cores diferentes.
O conjunto e o nmero de cores na array especial de cores ser definido atravs de uma diretiva de
compilao #property indicator_color, onde pode especificar todas as cores necessrias separadas por
vrgulas. Por exemplo, como uma entrada de um indicador:
//--- Definir 8 cores para colorir os candlesticks (eles so armazenados na array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

Ele afirma que para plotar 1, 8 cores so definidas, que sero colocados em um array especial. Alm
disso o programa no especifica a cor da plotagem, mas apenas o seu ndice. Se quisermos definir a
cor vermelha para o nmero de barras K, o valor da cor do ndice a partir de array deve ser definido no
buffer de cor do indicador. A cor vermelha especificada pela primeira vez na diretiva, que
corresponde ao nmero de ndice 0.
//--- definir a cor clrRed para candlestick
col_buffer[buffer_index]=0;

O conjunto de cores no colocado de uma vez por todas, pode ser alterado de forma dinmica
usando PlotIndexSetInteger(). Exemplo:
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

color_array[i]);

//

Uma nova cor

Propriedades do indicador e plotagem


Para plotagem de indicadores, propriedades podem ser definidas por meio de diretivas de compilador
e usando as funes apropriadas. Ler maiores informaes sobre isto em Conexo entre Propriedades
do Indicador e Funes. Mudana dinmica de propriedades do indicador usando funes especiais
permitem a criao de indicadores personalizados mais flexveis.

Incio do Desenho do Indicador no Grfico


Em muitos casos, de acordo com as condies do algoritmo, impossvel iniciar o clculo dos valores
do indicador imediatamente com a barra atual, uma vez que necessrio proporcionar um nmero
mnimo de barras anteriores disponveis no histrico. Por exemplo, muitos tipos de alisamento
implicam na utilizao de um array de preos sobre N barras anteriores, e com base nestes valores, o
valor do indicador na barra atual calculado.
Nestes casos, no existe qualquer maneira para calcular os valores do indicador para as primeiras N
barras, ou estes valores no se destinam a ser apresentados no grfico e so apenas subsidiadas para
calcular novos valores. Para evitar a plotagem do indicador nas primeiras N barras do histrico, defina
o valor N para a propriedade PLOT_DRAW_BEGIN para a plotagem correspondente:
//--- Ligando arrays com buffers de indicador para os castiais (candlesticks)
PlotIndexSetInteger(number_of_plot,PLOT_DRAW_BEGIN,N);

2000-2014, MetaQuotes Software Corp.

1336

Indicadores Customizados
Onde:
number_of_plot um valor a partir de zero para indicator_plots-1 (numerao dos lotes inicia com
zero).
N - o nmero da primeira barra no histrico, no qual o indicador no deve ser exibido sobre o
grfico.

2000-2014, MetaQuotes Software Corp.

1337

Indicadores Customizados

DRAW_NONE
O estilo DRAW_NONE projetado para uso em casos onde necessrio calcular os valores de um
buffer e mostr-los na Janela de Dados, mas a plotagem no grfico no necessria. Para configurar
com preciso use a expresso IndicatorSetInteger(INDICATOR_DIGITS,num_chars) na funo OnInit():
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Define a preciso dos valores a serem exibidos na Janela de Dados
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--return(INIT_SUCCEEDED);
}

O nmero de buffers requeridos para plotagem de DRAW_NONE 1.


Um exemplo do indicador que mostra o nmero da barra na janela de dados, sobre a qual o mouse
passa sobre ela. A numerao corresponde as sries temporais (timeseries), significando que a atual
barra inacabada tem ndice zero e a mais antiga barra tem o maior ndice.

Note que apesar do fato de ser definida a plotagem para a cor vermelha #1, o indicador no desenha
nada no grfico.
//+------------------------------------------------------------------+
//|

DRAW_NONE.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1338

Indicadores Customizados
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar Invisvel


#property indicator_label1

"Barra ndice"

#property indicator_type1

DRAW_NONE

#property indicator_style1

STYLE_SOLID

#property indicator_color1

clrRed

#property indicator_width1

//--- buffers do indicador


double

InvisibleBuffer[];

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Ligando um array e um buffer de indicador
SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Define a preciso dos valores a serem exibidos na Janela de Dados
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static datetime lastbar=0;
//--- Se este for o primeiro clculo do indicador
if(prev_calculated==0)
{
//--- Renumerar as barras pela primeira vez
CalcValues(rates_total,close);
//--- Lembrar que a abertura do tempo da barra atual no fechamento da ltima barra
lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
}

2000-2014, MetaQuotes Software Corp.

1339

Indicadores Customizados
else
{
//--- Se uma nova barra apareceu, sua abertura de tempo difere da ltima barra
if(lastbar!=SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE))
{
//--- Renumerar as barras mais uma vez
CalcValues(rates_total,close);
//--- Atualizar o tempo de abertura da barra atual com a ltima barra
lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Nmero das barras como numa timeseries

//+------------------------------------------------------------------+
void CalcValues(int total,double const

&array[])

{
//--- Definir a indexao do buffer do indicador como numa timeseries
ArraySetAsSeries(InvisibleBuffer,true);
//--- Definir cada barra com sua numerao
for(int i=0;i<total;i++) InvisibleBuffer[i]=i;
}

2000-2014, MetaQuotes Software Corp.

1340

Indicadores Customizados

DRAW_LINE
DRAW_LINE desenha uma linha de cor especifica pelos valores do buffer do indicador. A largura, estilo
e cor da linha pode ser definido utilizando as diretivas de compilao e dinamicamente usando a
funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem "avivar" os
indicadores, de modo que suas mudanas de aparncia dependem da situao corrente.
O nmero de buffers requerido para plotagem de DRAW_LINE 1.
Um exemplo do indicador que desenha a linha usando o fechamento de preo das barras. A linha de
cor, a largura e o estilo mudam aleatoriamente a cada N=5 ticks.

Note que inicialmente para plot1 com DRAW_LINE, as propriedades so definidas usando a diretiva de
compilador #property, e ento na funo OnCalculate() estas trs propriedades so definidas
aleatoriamente. O parmetro N definido nos parmetros externos do indicador para a possibilidade
de configurao manual (o guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_LINE.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_LINE"


#property description "Ele desenha uma linha de uma cor especifica no fechamento dos preos"
#property description "Cor, a largura e o estilo de linhas alterado aleatoriamente"
#property description "depois de cada N ticks"

2000-2014, MetaQuotes Software Corp.

1341

Indicadores Customizados
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- Propriedades de linha so definidas usando as diretivas de compilao


#property indicator_label1

"Line"

// Nome de uma plotagem para a janela de dados

#property indicator_type1

DRAW_LINE

// Tipo de plotagem uma linha

#property indicator_color1

clrRed

// Cor da linha

#property indicator_style1

STYLE_SOLID // Estilo da linha

#property indicator_width1

// Largura da linha

//--- parmetros de entrada


input int

N=5;

// Nmero de ticks para mudar

//--- Um buffer do indicador para plotar


double

LineBuffer[];

//--- Um array para armazenar as cores


color colors[]={clrRed,clrBlue,clrGreen};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Ligando um array e um buffer de indicador
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//--- Inicializando o gerador de nmeros pseudo-aleatrios
MathSrand(GetTickCount());
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{

2000-2014, MetaQuotes Software Corp.

1342

Indicadores Customizados
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Bloco para clculo dos valores do indicador
for(int i=0;i<rates_total;i++)
{
LineBuffer[i]=close[i];
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a aparncia da linha desenhada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a cor da linha
//--- Obtm aleatoriamente um nmero
int number=MathRand();
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+(string)colors[color_index];
//--- Um bloco para alterar a largura da linha
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+", Width="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;

2000-2014, MetaQuotes Software Corp.

1343

Indicadores Customizados
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm=EnumToString(styles[style_index])+", "+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1344

Indicadores Customizados

DRAW_SECTION
DRAW_SECTION desenha sees da cor especfica pelos valores do buffer do indicador. A largura, cor e
estilo da linha podem ser especificadas como para o estilo DRAW_LINE - usando as diretivas de
compilao ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas dinmicas das
propriedades de plotagem permitem "avivar" os indicadores, de modo que suas aparncias sejam
alteradas dependendo da situao corrente.
Sees so desenhadas a partir de um valor no vazio para outro valor no vazio do buffer de
indicador, valores vazios so ignorados. Para especificar qual o valor que deve ser considerado como
"vazio", defina esse valor na propriedade PLOT_EMPTY_VALUE: Por exemplo, se o indicador deve ser
desenhado como uma seqncia de sees sobre valores diferentes de zero, ento voc precisa definir
o valor zero como um vazio:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_SECTION,PLOT_EMPTY_VALUE,0);

Sempre preencha explicitamente nos valores dos buffers do indicador, defina um valor vazio num
buffer para os elementos que no devem ser plotados.
O nmero de buffers requeridos para plotagem de DRAW_SECTION 1.
Um exemplo do indicador que desenha sees entre os preos de Alta (high) e de Baixa (low). A cor, a
largura, e o estilo de todas sees mudam aleatoriamente a cada N ticks.

Note que para inicializar plot1 com DRAW_SECTION, as propriedades so definidas usando a diretiva
do compilador #property, e ento na funo OnCalculate(), estas trs propriedades so definidas
aleatoriamente. O parmetro N definido nos parmetros externos do indicador para a possibilidade
de configurao manual (o guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_SECTION.mq5 |

2000-2014, MetaQuotes Software Corp.

1345

Indicadores Customizados
//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_SECTION"


#property description "Desenha sees em linha reta para cada barra"
#property description "A cor, a largura eo estilo de sees so alteradas aleatoriamente"
#property description "depois de cada N ticks"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar Seo


#property indicator_label1

"Seo"

#property indicator_type1

DRAW_SECTION

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

bars=5;

// O comprimento das sees nas barras

input int

N=5;

// O nmero de ticks para mudar o estilo das sees

//--- Um buffer do indicador para plotar


double

SectionBuffer[];

//--- Uma varivel auxiliar para calcular extremidades das sees


int

divider;

//--- Um array para armazenar as cores


color colors[]={clrRed,clrBlue,clrGreen};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Ligando um array e um buffer de indicador
SetIndexBuffer(0,SectionBuffer,INDICATOR_DATA);
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- Verifica o parmetro do indicador
if(bars<=0)
{
PrintFormat("Valor invalido do parmetro da barra=%d",barras);
return(INIT_PARAMETERS_INCORRECT);
}
else divider=2*bars;
//---+

2000-2014, MetaQuotes Software Corp.

1346

Indicadores Customizados
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- O nmero de barra a partir da qual o clculo dos valores do indicador inicia
int start=0;
//--- Se o indicador foi calculado antes, ento definir o incio na barra anterior
if(prev_calculated>0) start=prev_calculated-1;
//--- Aqui esto todos os clculos dos valores do indicador
for(int i=start;i<rates_total;i++)
{
//--- Obter um resto da diviso do nmero de barra por 2*Barras
int rest=i%divider;
//--- Se o nmero de barra divisvel por 2*Barras
if(rest==0)
{
//--- Definir o final da seo na alta de preo desta barra
SectionBuffer[i]=high[i];
}
//---Se o resto da diviso igual para barras,
else
{
//--- Definir o final da seo na alta de preo desta barra
if(rest==bars) SectionBuffer[i]=low[i];
//--- Se nada aconteceu, ignore a barra - definir 0

2000-2014, MetaQuotes Software Corp.

1347

Indicadores Customizados
else SectionBuffer[i]=0;
}
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Alterar a aparncia das sees no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco de mudana da cor da linha
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para alterar a largura da linha
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a largura


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- define o estilo da linha
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm="\r\n"+EnumToString(styles[style_index])+""+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1348

Indicadores Customizados

DRAW_HISTOGRAM
O estilo DRAW_HISTOGRAM desenha um histograma como uma seqncia de colunas de uma
especifica cor do zero para um especifico valor. Os valores so extrados do buffer do indicador. A
largura, cor e estilo da coluna pode ser especificado como para o estilo DRAW_LINE - usando diretivas
de compilao ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas dinmicas das
propriedades de plotagem permitem alterar o visual do histograma com base na situao atual.
Uma vez que uma coluna a partir do nvel zero desenhada sobre cada barra, DRAW_HISTOGRAM
deve ser melhor utilizada numa janela do grfico em separado. Na maioria das vezes este tipo de de
plotagem usada para criar indicadores do tipo de oscilador, por exemplo, Bears Power ou OsMA. Para
os valores vazios que no so visveis, o valor zero deve ser especificado.
O nmero de buffers requerido para plotagem de DRAW_HISTOGRAM 1.
Um exemplo do indicador que desenha uma senide de uma cor especfica com base na funo
MathSin(). A cor, a largura e o estilo de todas colunas do histograma mudam aleatoriamente a cada N
ticks. O parmetro de barras determina o perodo da senide, isto , aps um nmero especifico de
barras a senide vai repetir o ciclo.

Note que inicialmente para plot1 com DRAW_HISTOGRAM, as propriedades so definidas usando a
diretiva de compilador #property, e ento na funo OnCalculate() estas trs propriedades so
definidas aleatoriamente. O parmetro N definido nos parmetros externos do indicador para a
possibilidade de configurao manual (o guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_HISTOGRAM.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."

2000-2014, MetaQuotes Software Corp.

1349

Indicadores Customizados
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_HISTOGRAM"


#property description "Ele desenha um senide como um histograma em uma janela separada"
#property description "A cor e a largura das colunas so alterados aleatoriamente"
#property description "depois de cada N ticks"
#property description "O parmetro das barras define o nmero de barras no ciclo da senide"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar Histograma


#property indicator_label1

"Histograma"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

bars=30;

// O perodo de uma senide em barras

input int

N=5;

// O nmero de ticks para alterar o histograma

//--- buffers do indicador


double

HistogramBuffer[];

//--- Um fator para obter o ngulo 2Pi em radianos, quando multiplicado pelo parmetro das barras
double

multiplier;

//--- Um array para armazenar as cores


color colors[]={clrRed,clrBlue,clrGreen};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA);
//--- Calcular a multiplicao
if(bars>1)multiplier=2.*M_PI/bars;
else
{
PrintFormat("Defina o valor das barras=%d maior do que 1",bars);
//--- Finalizao antecipada do indicador
return(INIT_PARAMETERS_INCORRECT);
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

2000-2014, MetaQuotes Software Corp.

1350

Indicadores Customizados
//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Calcule os valores do indicador
int start=0;
//--- Se j foi calculado durante os incios anteriores do OnCalculate

if(prev_calculated>0) start=prev_calculated-1; // definir o incio do clculo com a penltima ba


//--- Preencher o buffer do indicador com valores
for(int i=start;i<rates_total;i++)
{
HistogramBuffer[i]=sin(i*multiplier);
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a aparncia das linhas no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a cor da linha
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;

2000-2014, MetaQuotes Software Corp.

1351

Indicadores Customizados
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para alterar a largura da linha
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a largura


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- define o estilo da linha
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm="\r\n"+EnumToString(styles[style_index])+""+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1352

Indicadores Customizados

DRAW_HISTOGRAM2
O estilo DRAW_HISTOGRAM2 desenha uma histograma de uma cor especifica segmentos verticais
usando os valores de dois buffers do indicator. A largura, cor e estilo dos segmentos podem ser
especificados para o estilo DRAW_LINE - usando diretivas de compilao ou dinamicamente usando a
funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem alterar o
visual do histograma com base na situao atual.
O estilo DRAW_HISTOGRAM2 pode ser usado numa sub-janela separada e na sua janela principal. Para
valores vazios nada desenhado, todos os valores nos buffers do indicador precisam ser definidos
explicitamente. Buffers no so inicializados com o valor zero.
O nmero de buffers requerido para plotagem de DRAW_HISTOGRAM2 2.
Um exemplo de indicador que plota um segmento vertical da cor especifica e largura entre a Abertura
(open) e o Fechamento (close) de preos de cada barra. A cor, a largura e o estilo de todas as colunas
do histograma mudam aleatoriamente a cada N ticks. durante a inicializao do indicador, na funo
OnInit(), o nmero do dia da semana em que no ser desenhado o histograma - invisible_day -
definido aleatoriamente. Para este fim um valor vazio definido PLOT_EMPTY_VALUE=0:
//--- Definir um valor vazio
PlotIndexSetDouble(index_of_plot_DRAW_SECTION,PLOT_EMPTY_VALUE,0);

Note que inicialmente para plot1 com DRAW_HISTOGRAM2, as propriedades so definidas usando a
diretiva de compilador #property, e ento na funo OnCalculate() estas trs propriedades so
definidas aleatoriamente. O parmetro N definido nos parmetros externos do indicador para a
possibilidade de configurao manual (o guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_HISTOGRAM2.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

2000-2014, MetaQuotes Software Corp.

1353

Indicadores Customizados
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Un indicador para demonstrar DRAW_HISTOGRAM2"


#property description " desenhado um segmento entre a abertura e fechamento em cada barra"
#property description "A cor, a largura e o estilo so alterados aleatoriamente"
#property description "depois de cada N ticks"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar Histogram_2


#property indicator_label1

"Histogram_2"

#property indicator_type1

DRAW_HISTOGRAM2

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// O nmero de ticks para alterar o histograma

//--- buffers do indicador


double

Histogram_2Buffer1[];

double

Histogram_2Buffer2[];

//--- O dia da semana, em que o indicador no plotado


int invisible_day;
//--- Um array para armazenar as cores
color colors[]={clrRed,clrBlue,clrGreen};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Histogram_2Buffer1,INDICATOR_DATA);
SetIndexBuffer(1,Histogram_2Buffer2,INDICATOR_DATA);
//--- Definir um valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- Obtm aleatoriamente um nmero a partir do 0 at 5
invisible_day=MathRand()%6;
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,

2000-2014, MetaQuotes Software Corp.

1354

Indicadores Customizados
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Calcule os valores do indicador
int start=0;
//--- Para obter o dia da semana pela abertura de preo de cada barra
MqlDateTime dt;
//--- Se j foi calculado durante os incios anteriores do OnCalculate

if(prev_calculated>0) start=prev_calculated-1; // definir o incio do clculo com a penltima ba


//--- Preencher o buffer do indicador com valores
for(int i=start;i<rates_total;i++)
{
TimeToStruct(time[i],dt);
if(dt.day_of_week==invisible_day)
{
Histogram_2Buffer1[i]=0;
Histogram_2Buffer2[i]=0;
}
else
{
Histogram_2Buffer1[i]=open[i];
Histogram_2Buffer2[i]=close[i];
}
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a aparncia das linhas no indicador

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1355

Indicadores Customizados
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco de mudana da cor da linha
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para alterar a largura da linha
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Define a largura da linha


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- define o estilo da linha
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm="\r\n"+EnumToString(styles[style_index])+""+comm;
//--- Adiciona informao sobre o dia que omitido nos clculos
comm="\r\nDia no plotado - "+EnumToString((ENUM_DAY_OF_WEEK)invisible_day)+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1356

Indicadores Customizados

DRAW_ARROW
O estilo DRAW_ARROW desenha setas de cor especfica (smbolos do conjunto Wingdings) baseado no
valor do buffer do indicador. A largura e a cor dos smbolos pode ser especificado semelhante ao
modelo DRAW_LINE - usando diretivas de compilador ou dinamicamente usando a funo
PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem alterar o visual de
um indicador baseado na situao atual.
O cdigo de smbolo definido usando a propriedade PLOT_ARROW.
//--- Definir o cdigo smbolo a partir das fontes Wingdings para desenhar em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,code);

O valor padro do PLOT_ARROW=159 (um crculo).


Cada seta na verdade um smbolo que tem a altura e o ponto de ancoragem e pode abranger algumas
informaes importantes num grfico (por exemplo, o preo de fechamento da barra). Assim,
podemos adicionalmente especificar o deslocamento vertical em pixels, o qual no depende da escala
do grfico. As setas sero deslocadas para baixo pelo nmero especificado de pixels, embora os
valores do indicador permanecero os mesmos:
//--- Definir o deslocamento vertical das setas em pixels
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,shift);

Um valor negativo de PLOT_ARROW_SHIFT significa a mudana de setas para cima, valores positivos
deslocam a seta para baixo.
O estilo DRAW_ARROW pode ser usado numa sub-janela separada de um grfico e em sua janela
principal. Valores vazios no so desenhados e no aparecem na "Janela de Dados", todos os valores
nos buffers do indicador devem ser definidos explicitamente. Buffers no so inicializados com o valor
zero.
//--- Definir um valor vazio
PlotIndexSetDouble(index_of_plot_DRAW_ARROW,PLOT_EMPTY_VALUE,0);

O nmero de buffers necessrios para plotagem DRAW_ARROW 1.


Um exemplo de indicador que desenha as setas em cada uma das barras com o preo mais alto do que
o preo final da barra anterior. A cor, a largura, deslocamento e smbolo de cdigo de todas setas so
alterados aleatoriamente a cada N ticks.

2000-2014, MetaQuotes Software Corp.

1357

Indicadores Customizados

No exemplo, para plot1 com o estilo DRAW_ARROW, as propriedades, a cor e o tamanho so


especificados usando a diretiva de compilador #property, e depois na funo OnCalculate() as
propriedades so definidas aleatoriamente. O parmetro N definido nos parmetros externos do
indicador para a possibilidade de configurao manual (o guia Parmetros na janela Propriedades do
indicador).
//+------------------------------------------------------------------+
//|

DRAW_ARROW.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_ARROW"


#property description "Desenha setas definidas pelos caracteres Unicode, sobre um grfico"

#property description "A cor, o tamanho, deslocamento e cdigo smbolo da seta, so alterados de fo
#property description "depois de cada N ticks"
#property description "O parmetro de cdigo define o valor da base: cdigo = 159 (um crculo)"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- Plotagem de Setas


#property indicator_label1

"Setas"

#property indicator_type1

DRAW_ARROW

#property indicator_color1

clrGreen

#property indicator_width1

//--- parmetros de entrada

2000-2014, MetaQuotes Software Corp.

1358

Indicadores Customizados
input int

N=5;

// Nmero de ticks para mudar

input ushort

code=159;

// Cdigo smbolo para desenhar em DRAW_ARROW

//--- Um buffer do indicador para plotar


double

ArrowsBuffer[];

//--- Um array para armazenar as cores


color colors[]={clrRed,clrBlue,clrGreen};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ArrowsBuffer,INDICATOR_DATA);
//--- Definir o cdigo smbolo para desenho em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,code);
//--- Definir o deslocamento vertical das setas em pixels
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,5);
//--- Definir como um valor vazio 0
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcular ticks para mudar a cor, tamanho, deslocamento e cdigo da seta
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Bloco para clculo dos valores do indicador

2000-2014, MetaQuotes Software Corp.

1359

Indicadores Customizados
int start=1;
if(prev_calculated>0) start=prev_calculated-1;
//--- Calculando loop
for(int i=1;i<rates_total;i++)
{
//--- Se o preo atual fechado mais alto do que o anterior, desenhar uma seta
if(close[i]>close[i-1])
ArrowsBuffer[i]=close[i];
//--- Otherwise specify the zero value
else
ArrowsBuffer[i]=0;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Alterar a aparncia dos smbolos no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para formar as informaes sobre as propriedades do indicador
string comm="";
//--- Um bloco para alterar a cor da seta
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para mudar o tamanho das setas
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// O tamanho definido a partir de 0 at 4

//--- Definir a cor com a propriedade PLOT_LINE_WIDTH


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a cor da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Um bloco para mudar o cdigo das setas (PLOT_ARROW)
number=MathRand();

//--- Obter o restante da diviso de nmero inteiro para calcular um novo cdigo da seta(a partir d
int code_add=number%20;
//--- Definir o novo smbolo de cdigo como o resultado de code+code_add
PlotIndexSetInteger(0,PLOT_ARROW,code+code_add);
//--- Escreva o cdigo de smbolo PLOT_ARROW

2000-2014, MetaQuotes Software Corp.

1360

Indicadores Customizados
comm="\r\n"+"PLOT_ARROW="+IntegerToString(code+code_add)+comm;
//--- Um bloco de mudana do deslocamento vertical das setas em pixels
number=MathRand();
//--- Obter o deslocamento como o restante da diviso inteira
int shift=20-number%41;
//--- Definir o deslocamento novo de -20 a 20
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,shift);
//--- Escrever o deslocamento PLOT_ARROW_SHIFT
comm="\r\n"+"PLOT_ARROW_SHIFT="+IntegerToString(shift)+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1361

Indicadores Customizados

DRAW_ZIGZAG
O estilo DRAW_ZIGZAG desenha segmentos da cor especifica baseada nos valor de dois buffers do
indicador. Este estilo muito similar ao DRAW_SECTION, mas ao contrrio deste ltimo, permite
desenhar segmentos verticais dentro de uma barra, se os valores de ambos os buffers do indicador
so definidos para este barra. Os segmentos so plotados a partir de um valor no primeiro buffer para
um valor no segundo buffer do indicador. Nenhum dos buffers pode conter somente valores vazios,
uma vez que neste caso nada plotado.
A largura, cor e estilo da linha podem ser especificadas como para o estilo DRAW_SECTION - usando
as diretivas de compilao ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas
dinmicas das propriedades de plotagem permitem "avivar" os indicadores, de modo que suas
aparncias sejam alteradas dependendo da situao corrente.
Sees so desenhadas a partir de um valor no vazio de um buffer para um valor no vazio de outro
buffer do indicador. Para especificar o valor que deve ser considerado como "vazio", defina esse valor
na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_ZIGZAG,PLOT_EMPTY_VALUE,0);

Sempre preencher explicitamente os valores dos buffers do indicador, definir um valor vazio num
buffer para ignorar barras.
O nmero de buffers requeridos para plotagem DRAW_ZIGZAG 2.
Um exemplo de indicador de que plota uma serra com base nos altas e baixas dos preos. A cor, a
largura eo estilo das linhas zigzag alteram aleatoriamente a cada N ticks.

Note que para inicializar plot1 com DRAW_ZIGZAG, as propriedades so definidas usando a diretiva de
compilar #property, e ento na funo OnCalculate() estas propriedades so definidas aleatoriamente.
O parmetro N definido nos parmetros externos do indicador para a possibilidade de configurao

2000-2014, MetaQuotes Software Corp.

1362

Indicadores Customizados
manual (o guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_ZIGZAG.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_ZIGZAG"


#property description "Ele desenha uma \"serra\" como segmentos de reta, ignorando as barras de um

#property description "O dia a ignorar selecionado aleatoriamente durante a inicializao do indi
#property description "A cor, a largura e tamanho dos segmentos so alterados aleatoriamente"
#property description " a cada N ticks"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar ZigZag


#property indicator_label1

"ZigZag"

#property indicator_type1

DRAW_ZIGZAG

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// Nmero de ticks para alterar

//--- buffers do indicador


double

ZigZagBuffer1[];

double

ZigZagBuffer2[];

//--- O dia da semana, em que o indicador no plotado


int invisible_day;
//--- Um array para armazenar as cores
color colors[]={clrRed,clrBlue,clrGreen};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Arrays de ligao e buffers do indicador
SetIndexBuffer(0,ZigZagBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ZigZagBuffer2,INDICATOR_DATA);
//--- Obter um valor aleatrio de 0 para 6, para este dia o indicador no plotado
invisible_day=MathRand()%6;
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

2000-2014, MetaQuotes Software Corp.

1363

Indicadores Customizados
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetString(0,PLOT_LABEL,"ZigZag1;ZigZag2");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- A estrutura de tempo necessrio para obter o dia da semana de cada barra
MqlDateTime dt;
//--- A posio inicial dos clculos
int start=0;

//--- Se o indicador foi calculado com o tick anterior, ento inicia o clculo com o passado, mas d
if(prev_calculated!=0) start=prev_calculated-1;
//--- Calculando loop
for(int i=start;i<rates_total;i++)
{
//--- Escreva o tempo de abertura da barra na estrutura
TimeToStruct(time[i],dt);
//--- Se o dia da semana desta barra igual para invisible_day
if(dt.day_of_week==invisible_day)
{
//--- Escrever valores vazios de buffers para este barra
ZigZagBuffer1[i]=0;
ZigZagBuffer2[i]=0;

2000-2014, MetaQuotes Software Corp.

1364

Indicadores Customizados
}
//--- Se o dia da semana OK, preencha os buffers
else
{
//--- Se o nmero de barra o mesmo
if(i%2==0)
{
//---

Escrever High (alta) no primeiro buffer a Low (baixa) no segundo

ZigZagBuffer1[i]=high[i];
ZigZagBuffer2[i]=low[i];
}
//--- O nmero da barra impar
else
{
//--- Preenchimento da barra na ordem inversa
ZigZagBuffer1[i]=low[i];
ZigZagBuffer2[i]=high[i];
}
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Alterar a aparncia dos segmentos zigzag

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de ZigZag
string comm="";
//--- Um bloco para mudar a cor do ziguezague
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para alterar a largura da linha
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a cor com a propriedade PLOT_LINE_WIDTH


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);

2000-2014, MetaQuotes Software Corp.

1365

Indicadores Customizados

//--- Um bloco para mudar o estilo da linha


number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm="\r\n"+EnumToString(styles[style_index])+""+comm;
//--- Adiciona informao sobre o dia que omitido nos clculos
comm="\r\nDia no plotado - "+EnumToString((ENUM_DAY_OF_WEEK)invisible_day)+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1366

Indicadores Customizados

DRAW_FILLING
O estilo DRAW_FILLING plota uma rea colorida entre valores de dois buffers do indicador. De fato,
este modelo desenha duas linhas e preenche o espao entre elas, com uma das duas cores especficas.
Ele usado para a criao de indicadores que desenham canais. Nenhum dos buffers podem conter
apenas valores vazios, uma vez que, neste caso, nada plotado.
Voc pode definir duas cores de preenchimento:
a primeira cor usada para as reas onde os valores do primeiro buffer so maiores do que os
valores do segundo buffer do indicador;
a segunda cor usada para as reas onde os valores de do segundo buffer do so maiores do que os
valores no primeiro buffer indicador.
A cor de preenchimento pode ser definida usando as diretivas do compilador ou dinamicamente usando
a funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem "avivar"
os indicadores, de modo que suas mudanas de aparncia dependem da situao corrente.
O indicador calculado para todas as barras, para a qual os valores dos dois buffers do indicador no
so iguais a 0 ou o valor vazio. Para especificar o valor que deve ser considerado como "vazio", defina
esse valor na propriedade PLOT_EMPTY_VALUE:
#define INDICATOR_EMPTY_VALUE -1.0
...
//--- INDICATOR_EMPTY_VALUE (valor vazio) no vai participar no clculo de
PlotIndexSetDouble (DRAW_FILLING_creation_index,PLOT_EMPTY_VALUE,INDICATOR_EMPTY_VALUE);

Desenhar sobre as barras que no participam no clculo do indicador depende dos valores nos buffers
do indicador:
Barras, para os quais os valores de ambos os buffers do indicador so iguais a 0, no participam no
desenho do indicador. Isto significa que a rea com valores iguais a zero no preenchida.

Barras, para as quais os valores dos buffers do indicador so iguais ao "valor vazio", participam no
desenho do indicador. A rea com valores vazios ser preenchida de modo que conecte as reas com
valores significativos.

2000-2014, MetaQuotes Software Corp.

1367

Indicadores Customizados

Deve ser notado que se o "valor vazio" igual a zero, as barras que no participam no clculo do
indicador tambm so preenchidas.
O nmero de buffers necessrios para plotagem DRAW_FILLING 2.
Um exemplo do indicador que desenha um canal entre duas MAs com diferentes perodos mdios em
uma janela separada. A mudana das cores no cruzamento das mdias mveis mostra visualmente a
mudana das tendncias ascendentes e descendentes. As cores alteram aleatoriamente a cada N ticks.
O parmetro N definido nos parmetro externos do indicador para a possibilidade de configurao
manual (na guia Parmetros na janela Propriedades do indicador).

Note que inicialmente para plot1 com DRAW_FILLING as propriedades so definidas usando a diretiva
de compilador #property, e ento na funo OnCalculate() novas cores so definidas aleatoriamente.
//+------------------------------------------------------------------+
//|

DRAW_FILLING.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."

2000-2014, MetaQuotes Software Corp.

1368

Indicadores Customizados
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_FILLING"


#property description "Ele desenha um canal entre duas MAs em uma janela separada"
#property description "O preenchimento da cor alterada aleatoriamente"
#property description "depois de cada N ticks"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar Interseo


#property indicator_label1

"Interseo"

#property indicator_type1

DRAW_FILLING

#property indicator_color1

clrRed,clrBlue

#property indicator_width1

//--- parmetros de entrada


input int

Fast=13;

// Perodo rpido da MA

input int

Slow=21;

// Perodo lento da MA

input int

shift=1;

// Deslocamento das MAs para frente (positivo)

input int

N=5;

// Nmero de ticks para alterar

//--- buffers do Indicador


double

IntersectionBuffer1[];

double

IntersectionBuffer2[];

int fast_handle;
int slow_handle;
//--- Um array para armazenar as cores

color colors[]={clrRed,clrBlue,clrGreen,clrAquamarine,clrBlanchedAlmond,clrBrown,clrCoral,clrDarkSl
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,IntersectionBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,IntersectionBuffer2,INDICATOR_DATA);
//--PlotIndexSetInteger(0,PLOT_SHIFT,shift);
//--fast_handle=iMA(_Symbol,_Period,Fast,0,MODE_SMA,PRICE_CLOSE);
slow_handle=iMA(_Symbol,_Period,Slow,0,MODE_SMA,PRICE_CLOSE);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,

2000-2014, MetaQuotes Software Corp.

1369

Indicadores Customizados
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Redefinir o contador de ticks para zero
ticks=0;
}

//--- Faz o primeiro clculo do indicador, ou os dados foram alterados e requerem um reclculo comp
if(prev_calculated==0)
{
//--- Copia todos os valores dos indicadores para os buffers apropriados
int copied1=CopyBuffer(fast_handle,0,0,rates_total,IntersectionBuffer1);
int copied2=CopyBuffer(slow_handle,0,0,rates_total,IntersectionBuffer2);
}
else // Preenche apenas os dados que so atualizados
{

//--- Obtm a diferena entre as barras atuais e as que iniciaram anteriormente ao OnCalculat
int to_copy=rates_total-prev_calculated;
//--- Se no existe qualquer diferena, ainda cpia um valor - na barra zero
if(to_copy==0) to_copy=1;
//--- copia valores to_copy para o fim dos buffers do indicador
int copied1=CopyBuffer(fast_handle,0,0,to_copy,IntersectionBuffer1);
int copied2=CopyBuffer(slow_handle,0,0,to_copy,IntersectionBuffer2);
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera as cores do preenchimento do canal

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a cor da linha

2000-2014, MetaQuotes Software Corp.

1370

Indicadores Customizados
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index1=number%size;
//--- Define a primeira cor como a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,colors[color_index1]);
//--- Escreve a primeira cor
comm=comm+"\r\nColor1 "+(string)colors[color_index1];
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
number=MathRand(); // Obtm um nmero aleatrio
int color_index2=number%size;
//--- Define a segunda cor como a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,colors[color_index2]);
//--- Escreve a segunda cor
comm=comm+"\r\nColor2 "+(string)colors[color_index2];
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1371

Indicadores Customizados

DRAW_BARS
O estilo DRAW_BARS desenha barras nos valores de quatro buffers do indicador, que contm a
Abertura (open), Alta (high), Baixa (low) e Fechamento (close) dos preos. usado para a criao de
indicadores personalizados como barras, incluindo aqueles numa sub-janela separada de um grfico e
sobre outros instrumentos financeiros.
A cor das barras pode ser definida usando as diretivas de compilador ou dinamicamente utilizando a
funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem "avivar" os
indicadores, de modo que suas mudanas de aparncia dependem da situao corrente.
O indicador desenhado apenas para as barras, para o qual os valores no vazios de todos quatro
buffers do indicador so definidos. Para especificar o valor que deve ser considerado como "vazio",
defina este valor na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_BARS,PLOT_EMPTY_VALUE,0);

Sempre preencher explicitamente os valores dos buffers do indicador, definir um valor vazio num
buffer para ignorar barras.
O nmero de buffers necessrios para plotagem de DRAW_BARS 4. Todos os buffers para a plotagem
devem ir um aps o outro na ordem dada: Open (abertura do preo), High (alta do preo), Low (baixa
do preo) e Close (fechamento do preo). Nenhum dos buffers podem conter apenas valores vazios,
uma vez que, neste caso, nada plotado.
Um exemplo do indicador que desenha barras sobre um instrumento financeiro selecionado numa
janela separada. A cor das barras muda aleatoriamente a cada N ticks. O parmetro N definido nos
parmetro externos do indicador para a possibilidade de configurao manual (na guia Parmetros na
janela Propriedades do indicador).

Por favor, note que para plot1 com o estilo DRAW_BARS, a cor definida usando a diretiva de

2000-2014, MetaQuotes Software Corp.

1372

Indicadores Customizados
compilador #property, e ento, na funo OnCalculate() a cor definida aleatoriamente a partir de
uma lista preparada anteriormente.
//+------------------------------------------------------------------+
//|

DRAW_BARS.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_BARS"


#property description "Ele desenha barras de uma seleo de smbolos numa janela separada"

#property description "A cor e a largura das barras, bem como o smbolo so alterados aleatoriament
#property description "cada N ticks"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots

//--- plotar Barras


#property indicator_label1

"Barras"

#property indicator_type1

DRAW_BARS

#property indicator_color1

clrGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// O nmero de ticks para alterar o tipo

input int

bars=500;

// O nmero de barras para mostrar

input bool

messages=false;

// Mostrar mensagens no log "Expert Advisors"

//--- buffers do Indicador


double

BarsBuffer1[];

double

BarsBuffer2[];

double

BarsBuffer3[];

double

BarsBuffer4[];

//--- Nome do smbolo


string symbol;
//--- Um array para armazenar as cores
color colors[]={clrRed,clrBlue,clrGreen,clrPurple,clrBrown,clrIndianRed};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Se as barras so muito pequenas - concluir o trabalho antes do tempo
if(bars<50)
{

Comment("Por favor, especifique um nmero maior de barras! A operao do indicador foi termin
return(INIT_PARAMETERS_INCORRECT);

2000-2014, MetaQuotes Software Corp.

1373

Indicadores Customizados
}
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,BarsBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,BarsBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,BarsBuffer3,INDICATOR_DATA);
SetIndexBuffer(3,BarsBuffer4,INDICATOR_DATA);
//--- O nome do smbolo, para o qual as barras so desenhadas
symbol=_Symbol;
//--- Definir a exibio do smbolo

PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");


IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_BARS("+symbol+")");
//--- Um valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Selecione um novo smbolo a partir da janela de observao do Mercado
symbol=GetRandomSymbolName();
//--- Alterar as propriedades da linha
ChangeLineAppearance();
int tries=0;
//--- Faa 5 tentativas de preencher os buffers com os preos a partir smbolo
while(!CopyFromSymbolToBuffers(symbol,rates_total) && tries<5)
{
//--- Um contador de chamadas da funo CopyFromSymbolToBuffers()
tries++;
}
//--- Redefinir o contador de ticks para zero

2000-2014, MetaQuotes Software Corp.

1374

Indicadores Customizados
ticks=0;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher os buffers do indicador com preos

//+------------------------------------------------------------------+
bool CopyFromSymbolToBuffers(string name,int total)
{

//--- No array de rates[], vamos copiar Open (abertura), High (alta), Low (baixa) e Close (fechamen
MqlRates rates[];
//--- O contador de tentativas
int attempts=0;
//--- Quanto foi copiado
int copied=0;
//--- Fazer 25 tentativas para obter uma srie temporal(timeseries) sobre o smbolo desejado
while(attempts<25 && (copied=CopyRates(name,_Period,0,bars,rates))<0)
{
Sleep(100);
attempts++;
if(messages) PrintFormat("%s Copiar taxas(%s) tentativas=%d",__FUNCTION__,nome,tentativas);
}
//--- Se falhou em copiar um nmero suficiente de barras
if(copied!=bars)
{
//--- Formar uma mensagem string

string comm=StringFormat("Para o smbolo %s, conseguiu receber somente %d barras de %d solici


name,
copied,
bars
);
//--- Mostrar uma mensagem num comentrio na janela do grfico principal
Comment(comm);
//--- Mostrar a mensagem
if(messages) Print(comm);
return(false);
}
else
{
//--- Definir a exibio do smbolo
PlotIndexSetString(0,PLOT_LABEL,name+" Open;"+name+" High;"+name+" Low;"+name+" Close");
IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_BARS("+name+")");
}
//--- Inicializar buffers com valores vazios
ArrayInitialize(BarsBuffer1,0.0);
ArrayInitialize(BarsBuffer2,0.0);
ArrayInitialize(BarsBuffer3,0.0);
ArrayInitialize(BarsBuffer4,0.0);

2000-2014, MetaQuotes Software Corp.

1375

Indicadores Customizados
//--- Copiar os preos para os buffers
for(int i=0;i<copied;i++)
{
//--- Calcular o ndice apropriado para os buffers
int buffer_index=total-copied+i;
//--- Escreva os preos para os buffers
BarsBuffer1[buffer_index]=rates[i].open;
BarsBuffer2[buffer_index]=rates[i].high;
BarsBuffer3[buffer_index]=rates[i].low;
BarsBuffer4[buffer_index]=rates[i].close;
}
return(true);
}
//+------------------------------------------------------------------+
//| Aleatoriamente retorna um smbolo de Observao do Mercado

//+------------------------------------------------------------------+
string GetRandomSymbolName()
{
//--- O nmero de smbolos mostrada na janela de observao do Mercado
int symbols=SymbolsTotal(true);
//--- A posio de um smbolo na lista - um nmero aleatrio de 0 para smbolos
int number=MathRand()%symbols;
//--- Retornar o nome de um smbolo na posio especificada
return SymbolName(number,true);
}
//+------------------------------------------------------------------+
//| Altera a aparncia das barras

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades da barra
string comm="";
//--- Um bloco para alterar a cor das barras
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor da linha
comm=comm+"\r\n"+(string)colors[color_index];
//--- Um bloco para alterar a largura das barras
number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a cor com a propriedade PLOT_LINE_WIDTH


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);

2000-2014, MetaQuotes Software Corp.

1376

Indicadores Customizados
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Escreve o nome do smbolo
comm="\r\n"+symbol+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1377

Indicadores Customizados

DRAW_CANDLES
O estilo DRAW_CANDLES desenha candlesticks sobre os valores dos quatro buffers do indicador, que
contm Open (abertura), High (alta), Low (baixa) e Close (fechamento) de preos. usado para a
criao de indicadores personalizados como uma seqncia de candlesticks, incluindo os inseridos
numa sub-janela separada de um grfico e noutros instrumentos financeiros.
A cor dos candlesticks pode ser definida usando as diretivas de compilador ou dinamicamente usando
a funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem "avivar"
os indicadores, de modo que suas mudanas de aparncia dependem da situao corrente.
O indicador desenhado apenas para as barras, para o qual os valores no vazios de todos quatro
buffers do indicador so definidos. Para especificar o valor que deve ser considerado como "vazio",
defina este valor na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_CANDLES,PLOT_EMPTY_VALUE,0);

Sempre preencher explicitamente os valores dos buffers do indicador, definir um valor vazio num
buffer para ignorar barras.
O nmero de buffers necessrios para plotagem de DRAW_CANDLES 4. Todos os buffers para a
plotagem devem ir um aps o outro na ordem dada: Open (abertura do preo), High (alta do preo),
Low (baixa do preo) e Close (fechamento do preo). Nenhum dos buffers podem conter apenas
valores vazios, uma vez que, neste caso, nada plotado.
Um exemplo de indicador que desenha candlesticks para um instrumento financeiro selecionado em
uma janela separada. A cor dos candlesticks muda aleatoriamente a cada N ticks. O parmetro N
definido nos parmetro externos do indicador para a possibilidade de configurao manual (na guia
Parmetros na janela Propriedades do indicador).

Por favor, note que para plot1, a cor definida usando a diretiva de compilador #property, e ento,

2000-2014, MetaQuotes Software Corp.

1378

Indicadores Customizados
na funo OnCalculate() a cor definida aleatoriamente a partir de uma lista preparada
anteriormente.
//+------------------------------------------------------------------+
//|

DRAW_CANDLES.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_CANDLES."


#property description "ele desenha candlesticks de um smbolo selecionado numa janela separada"
#property description " "
#property description "A cor e a largura dos candlesticks, bem como o smbolo so alterados"
#property description "aleatoriamente a cada N ticks"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots

//--- plotar Barras


#property indicator_label1

"DRAW_CANDLES1"

#property indicator_type1

DRAW_CANDLES

#property indicator_color1

clrGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// O nmero de ticks para alterar o tipo

input int

bars=500;

// O nmero de barras para mostrar

input bool

messages=false;

// Mostrar mensagens no log "Expert Advisors"

//--- buffers do Indicador


double

Candle1Buffer1[];

double

Candle1Buffer2[];

double

Candle1Buffer3[];

double

Candle1Buffer4[];

//--- Nome do smbolo


string symbol;
//--- Um array para armazenar as cores
color colors[]={clrRed,clrBlue,clrGreen,clrPurple,clrBrown,clrIndianRed};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Se as barras so muito pequenas - concluir o trabalho antes do tempo
if(bars<50)
{

2000-2014, MetaQuotes Software Corp.

1379

Indicadores Customizados

Comment("Por favor, especifique um nmero maior de barras! A operao do indicador foi termin
return(INIT_PARAMETERS_INCORRECT);
}
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Candle1Buffer1,INDICATOR_DATA);
SetIndexBuffer(1,Candle1Buffer2,INDICATOR_DATA);
SetIndexBuffer(2,Candle1Buffer3,INDICATOR_DATA);
SetIndexBuffer(3,Candle1Buffer4,INDICATOR_DATA);
//--- Um valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- O nome do smbolo, para o qual as barras so desenhadas
symbol=_Symbol;
//--- Definir a exibio do smbolo

PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");


IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_CANDLES("+symbol+")");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=INT_MAX-100;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Selecione um novo smbolo a partir da janela de observao do Mercado
symbol=GetRandomSymbolName();
//--- Alterar a forma
ChangeLineAppearance();
//--- Selecione um novo smbolo a partir da janela de observao do Mercado
int tries=0;
//--- Faa 5 tentativas de preencher os buffers de Plot1 com os preos a partir da smbolo
while(!CopyFromSymbolToBuffers(symbol,rates_total,0,
Candle1Buffer1,Candle1Buffer2,Candle1Buffer3,Candle1Buffer4)
&& tries<5)
{

2000-2014, MetaQuotes Software Corp.

1380

Indicadores Customizados
//--- Um contador de chamadas da funo CopyFromSymbolToBuffers()
tries++;
}
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenche o candlestick especificado

//+------------------------------------------------------------------+
bool CopyFromSymbolToBuffers(string name,
int total,
int plot_index,
double &buff1[],
double &buff2[],
double &buff3[],
double &buff4[]
)
{

//--- No array de rates[], vamos copiar Open (abertura), High (alta), Low (baixa) e Close (fechamen
MqlRates rates[];
//--- O contador de tentativas
int attempts=0;
//--- Quanto foi copiado
int copied=0;
//--- Fazer 25 tentativas para obter uma srie temporal(timeseries) sobre o smbolo desejado
while(attempts<25 && (copied=CopyRates(name,_Period,0,bars,rates))<0)
{
Sleep(100);
attempts++;
if(messages) PrintFormat("%s Copiar taxas(%s) tentativas=%d",__FUNCTION__,nome,tentativas);
}
//--- Se falhou em copiar um nmero suficiente de barras
if(copied!=bars)
{
//--- Formar uma mensagem string

string comm=StringFormat("Para o smbolo %s, conseguiu receber somente %d barras de %d solici


name,
copied,
bars
);
//--- Mostrar uma mensagem num comentrio na janela do grfico principal
Comment(comm);
//--- Mostrar a mensagem
if(messages) Print(comm);
return(false);
}

2000-2014, MetaQuotes Software Corp.

1381

Indicadores Customizados
else
{
//--- Definir a exibio do smbolo

PlotIndexSetString(plot_index,PLOT_LABEL,name+" Open;"+name+" High;"+name+" Low;"+name+" Clos


}
//--- Inicializar buffers com valores vazios
ArrayInitialize(buff1,0.0);
ArrayInitialize(buff2,0.0);
ArrayInitialize(buff3,0.0);
ArrayInitialize(buff4,0.0);
//--- Sobre cada tick copiado preos para os buffers
for(int i=0;i<copied;i++)
{
//--- Calcular o ndice apropriado para os buffers
int buffer_index=total-copied+i;
//--- Escreva os preos para os buffers
buff1[buffer_index]=rates[i].open;
buff2[buffer_index]=rates[i].high;
buff3[buffer_index]=rates[i].low;
buff4[buffer_index]=rates[i].close;
}
return(true);
}
//+------------------------------------------------------------------+
//| Aleatoriamente retorna um smbolo de Observao do Mercado

//+------------------------------------------------------------------+
string GetRandomSymbolName()
{
//--- O nmero de smbolos mostrada na janela de observao do Mercado
int symbols=SymbolsTotal(true);
//--- A posio de um smbolo na lista - um nmero aleatrio de 0 para smbolos
int number=MathRand()%symbols;
//--- Retornar o nome de um smbolo na posio especificada
return SymbolName(number,true);
}
//+------------------------------------------------------------------+
//| Altera a aparncia das barras

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades da barra
string comm="";
//--- Um bloco para alterar a cor das barras
int number=MathRand(); // Obter um nmero aleatrio
//--- O divisor igual ao tamanho do array colors[]
int size=ArraySize(colors);
//--- Obter o ndice para selecionar uma nova cor como o restante da diviso inteira
int color_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR

2000-2014, MetaQuotes Software Corp.

1382

Indicadores Customizados
PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- Escrever a cor
comm=comm+"\r\n"+(string)colors[color_index];
//--- Escreve o nome do smbolo
comm="\r\n"+symbol+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1383

Indicadores Customizados

DRAW_COLOR_LINE
O valor DRAW_COLOR_LINE uma variante colorida do estilo DRAW_LINE; ele tambm desenha uma
linha usando os valores do buffer do indicador. Mas esse estilo, como todos os estilos de cores com a
palavra COLOR em seu ttulo tem um buffer indicador adicional e especial que armazena o ndice de
cores (nmero) a partir de um conjunto especial array de cores. Assim, a cor de cada segmento de
linha pode ser definida atravs da especificao do ndice de cores para desenhar a linha naquela
barra.
A largura, o estilo e as cores das linhas podem ser definidas usando as diretivas de compilador e
dinamicamente usando a funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de
plotagem permitem "avivar" os indicadores, de modo que suas mudanas de aparncia dependem da
situao corrente.
O nmero de buffers requerido para plotagem de DRAW_COLOR_LINE 2.
um buffer para armazenar os valores do indicador utilizado para desenhar uma linha;
um buffer para armazenar o ndice de cores da linha em cada barra.
Cores sero especificadas pela diretiva de compilador #property indicator_color1 separada por uma
vrgula. O nmero de cores no pode exceder a 64.
//--- Define 5 cores para colorir cada barra (elas so armazenadas no array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrOrange,clrDeepPink // (Podem ser especificad

Um exemplo do indicador que desenha a linha usando o fechamento de preo das barras. A largura da
linha e estilo so alterados aleatoriamente a cada N=5 ticks.

As cores dos segmentos de linhas tambm so alteradas aleatoriamente na funo personalizada


ChangeColors().
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1384

Indicadores Customizados
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("LineColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],true
ChartSetString(0,CHART_COMMENT,comm);
}
//--}

O exemplo mostra a caracterstica das verses "cor" de indicadores - para mudar a cor de um
segmento de linha, voc no precisa alterar os valores no buffer ColorLineColors[] (que contm os
ndices de cores). Tudo que voc precisa fazer definir novas cores em um array especial. Isto
permite-lhe alterar rapidamente a cor de uma vez para toda a plotagem, mudando apenas um pequeno
array de cores utilizando a funo PlotIndexSetInteger().
Note que para inicializar plot1 com DRAW_COLOR_LINE as propriedades so definidas usando a
diretiva de compilador #property, e ento na funo OnCalculate() existem trs propriedades que so
definidas aleatoriamente.
O N e Length (o comprimento dos segmentos de corres nas barras) dos parmetros so definidos nos
parmetros externos do indicador para a possibilidade de configurao manual (a guia Parmetros na
janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_COLOR_LINE.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

2000-2014, MetaQuotes Software Corp.

1385

Indicadores Customizados

#property description "Um indicador para demonstrar RAW_COLOR_LINE"


#property description "Ele desenha uma linha no Fechamento do preo em partes coloridas de cada 20
#property description "A largura, estilo e cor de partes da linha so alteradas aleatoriamente"
#property description "cada N ticks"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar ColorLine


#property indicator_label1

"ColorLine"

#property indicator_type1

DRAW_COLOR_LINE

//--- Define 5 cores para colorir cada barra (elas so armazenadas no array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrOrange,clrDeepPink // (Podem ser especificad

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

//Nmero de ticks para alterar

input int

Length=20;

// A largura de cada parte de cor nas barras

int

line_colors=5; // O nmero para definir as cores 5 - ver #property indicator_color

//--- Um buffer para plotagem


double

ColorLineBuffer[];

//--- Um buffer para armazenar a cor da linha sobre cada barra


double

ColorLineColors[];

//--- O array para armazenar cores contendo 7 elementos


color colors[]={clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Ligando um array e um buffer de indicador
SetIndexBuffer(0,ColorLineBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorLineColors,INDICATOR_COLOR_INDEX);
//--- Inicializando o gerador de nmeros pseudo-aleatrios
MathSrand(GetTickCount());
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],

2000-2014, MetaQuotes Software Corp.

1386

Indicadores Customizados
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Alterar as cores de sees de linhas
ChangeColors(colors,5);
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Bloco para clculo dos valores do indicador
for(int i=0;i<rates_total;i++)
{
//--- Escrever o valor do indicador para o buffer
ColorLineBuffer[i]=close[i];
//--- Agora, aleatoriamente definir um ndice de cores para esta barra
int color_index=i%(5*Length);
color_index=color_index/Length;
//--- Para esta barra, a linha ter a cor com o ndice color_index
ColorLineColors[i]=color_index;
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{

2000-2014, MetaQuotes Software Corp.

1387

Indicadores Customizados
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("LineColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],true
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia de uma linha visualizada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+" Width="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
int size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm=EnumToString(styles[style_index])+", "+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1388

Indicadores Customizados

DRAW_COLOR_SECTION
O estilo DRAW_COLOR_SECTION uma verso de cor de DRAW_SECTION, mas ao contrrio deste
ltimo, permite sees de desenho de cores diferentes. O estilo DRAW_COLOR_SECTION, como todos
os estilos de cor com a palavra COLOR em seu ttulo tem um buffer de indicador adicional e especial
que armazena o ndice de cores (nmero) a partir de um conjunto especial array de cores. Assim, a cor
de cada uma das sees pode ser definido atravs da especificao do ndice de cores do ndice da
barra que corresponde a seo final.
A largura, cor e estilo das sees podem ser especificados como para o estilo DRAW_SECTION - usando
as as diretivas do compilador ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas
dinmicas das propriedades de plotagem permitem "avivar" os indicadores, de modo que suas
aparncias sejam alteradas dependendo da situao corrente.
Sees so desenhadas a partir de um valor no vazio para outro valor no vazio do buffer de
indicador, valores vazios so ignorados. Para especificar qual o valor que deve ser considerado como
"vazio", defina esse valor na propriedade PLOT_EMPTY_VALUE: Por exemplo, se o indicador deve ser
desenhado como uma seqncia de sees sobre valores diferentes de zero, ento voc precisa definir
o valor zero como um vazio:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_COLOR_SECTION,PLOT_EMPTY_VALUE,0);

Sempre preencha explicitamente nos valores dos buffers do indicador, defina um valor vazio num
buffer para os elementos que no devem ser plotados.
O nmero de buffers requirido para plotagem de DRAW_COLOR_SECTION 2.
um buffer para armazenar os valores do indicador utilizado para desenhar uma linha;
um buffer para armazenar o ndice de cor, que usada para desenhar a seo (faz sentido definir
apenas valores no vazios).
Cores sero especificadas pela diretiva de compilador #property indicator_color1 separada por uma
vrgula. O nmero de cores no pode exceder a 64.
Um exemplo do indicador que desenha sees coloridas a cada 5 barras longas, usando os valores da
alta do preo. A cor, a largura e o estilo das sees alteram aleatoriamente a cada N ticks.

2000-2014, MetaQuotes Software Corp.

1389

Indicadores Customizados

Note que para inicializar plot1 com DRAW_COLOR_SECTION, 8 cores so definidas usando a diretiva
de compilador #property. Ento na funo OnCalculate(), cores so definidas aleatoriamente a partir
do array de cores colors[].
O parmetro N defindo nos parmetros externos do indicador para a possibilidade de configurao
manual (na guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_COLOR_SECTION.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_SECTION"

#property description "Ele desenha seces coloridas com o comprimento igual ao nmero de barras es
#property description "A cor, a largura eo estilo de sees so alteradas aleatoriamente"
#property description "depois de cada N ticks"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar ColorSection


#property indicator_label1

"ColorSection"

#property indicator_type1

DRAW_COLOR_SECTION

//--- Definir 8 cores para colorir sees (eles so armazenados numa array especial)
#property indicator_color1

clrRed,clrGold,clrMediumBlue,clrLime,clrMagenta,clrBrown,clrTan,clrMedi

#property indicator_style1

STYLE_SOLID

2000-2014, MetaQuotes Software Corp.

1390

Indicadores Customizados
#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// Nmero de ticks para alterar

input int

bars_in_section=5;

// O comprimento das sees nas barras

//--- Uma varivel auxiliar para calcular extremidades das sees


int

divider;

int

color_sections;

//--- Um buffer para plotagem


double

ColorSectionBuffer[];

//--- Um buffer para armazenar a cor da linha sobre cada barra


double

ColorSectionColors[];

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorSectionBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorSectionColors,INDICATOR_COLOR_INDEX);
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---- O nmero de cores para colorir as seces
int color_sections=8;

//

veja um comentrio para #property indicator_color1

//--- Verifica o parmetro do indicador


if(bars_in_section<=0)
{
PrintFormat("Comprimento seo invlido=%d",bars_in_section);
return(INIT_PARAMETERS_INCORRECT);
}
else divider=color_sections*bars_in_section;
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],

2000-2014, MetaQuotes Software Corp.

1391

Indicadores Customizados
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Alterar cores utilizadas para plotar as sees
ChangeColors(colors,color_sections);
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- O nmero de barra a partir da qual o clculo dos valores do indicador inicia
int start=0;
//--- Se o indicador foi calculado antes, ento definir o incio na barra anterior
if(prev_calculated>0) start=prev_calculated-1;
//--- Aqui esto todos os clculos dos valores do indicador
for(int i=start;i<rates_total;i++)
{

//--- Se o nmero de barras divisvel pela section_length, isso significa que esta a extr
if(i%bars_in_section==0)
{
//--- Definir o final da seo na alta de preo desta barra
ColorSectionBuffer[i]=high[i];
//--- O resto da diviso do nmero de barra pela scetion_length*number_of_colors
int rest=i%divider;
//Obter o nmero da cor =

a partir de 0 para number_of_colors-1

int color_indext=rest/bars_in_section;
ColorSectionColors[i]=color_indext;
}
//---Se o resto da diviso igual para barras,
else
{
//--- Se nada aconteceu, ignore a barra - definir 0
else ColorSectionBuffer[i]=0;
}
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1392

Indicadores Customizados
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("SectionColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],t
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia de uma linha visualizada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+" Width="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
int size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;

2000-2014, MetaQuotes Software Corp.

1393

Indicadores Customizados
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm=EnumToString(styles[style_index])+", "+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1394

Indicadores Customizados

DRAW_COLOR_HISTOGRAM
O estilo DRAW_COLOR_HISTOGRAM desenha um histograma como uma seqncia de colunas coloridas
a partir de zero pra um valor especfico. Os valores so extrados do buffer do indicador. Cada coluna
pode ter a sua prpria cor a partir de um conjunto pr-definido de cores.
A largura, cor e estilo do histograma podem ser especificados como para o estilo DRAW_HISTOGRAM usando as diretivas de compilador ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas
dinmicas das propriedades de plotagem permitem alterar o visual do histograma com base na
situao atual.
Uma vez que uma coluna a partir do nvel zero desenhado em cada barra,
DRAW_COLOR_HISTOGRAM ser melhor utilizado numa janela de grfico em separado. Na maioria das
vezes este tipo de plotagem usada para criar indicadores do tipo osciladores, por exemplo, Awesome
Oscillator ou Market Facilitation Index. Para os valores vazios que no so visveis, o valor zero deve
ser especificado.
O nmero de buffers necessrios para plotagem DRAW_COLOR_HISTOGRAM 2.
um buffer para armazenar um valor que no seja zero do segmento vertical em cada barra, a
segunda extremidade do segmento estar sempre na linha zero do indicador;
um buffer para armazenar o ndice de cor, que usada para desenhar a seo (faz sentido definir
apenas valores no vazios).
Cores podem ser determinadas usando a diretiva de compilador #property indicator_color1 separadas
por uma vrgula. O nmero de cores no pode exceder a 64.
Um exemplo do indicador que desenha uma senide de uma cor especfica com base na funo
MathSin(). A cor, a largura e o estilo de todas colunas do histograma mudam aleatoriamente a cada N
ticks. O parmetro de barras determina o perodo da senide, isto , aps um nmero especifico de
barras a senide vai repetir o ciclo.

2000-2014, MetaQuotes Software Corp.

1395

Indicadores Customizados
Por favor note que para plot1 com o estilo DRAW_COLOR_HISTOGRAM, 5 cores so definidas usando a
diretiva de compilador #property, e ento na funo OnCalculate(), as cores so selecionadas
aleatoriamente a partir de quatorze cores armazenada no array de colors[]. O parmetro N definido
nos parmetros externos do indicador para a possibilidade de configurao manual (o guia Parmetros
na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_COLOR_HISTOGRAM.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_HISTOGRAM"


#property description "Ele desenha um senide como um histograma em uma janela separada"
#property description "A cor e a largura das colunas so alterados aleatoriamente"
#property description "depois de cada N ticks"
#property description "O parmetro de barras define o nmero de barras para repetir a senide"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- parmetros de entrada


input int

bars=30;

// O perodo de uma senide em barras

input int

N=5;

// O nmero de ticks para alterar o histograma

//--- plotar Color_Histogram


#property indicator_label1

"Color_Histogram"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

//--- Definir 8 cores para colorir sees (eles so armazenados numa array especial)
#property indicator_color1

clrRed,clrGreen,clrBlue,clrYellow,clrMagenta,clrCyan,clrMediumSeaGreen,

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- Um buffer de valores


double

Color_HistogramBuffer[];

//--- Um buffer de ndices de cor


double

Color_HistogramColors[];

//--- Um fator para obter o ngulo 2Pi em radianos, quando multiplicado pelo parmetro das barras
double

multiplier;

int

color_sections;

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};

2000-2014, MetaQuotes Software Corp.

1396

Indicadores Customizados
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Color_HistogramBuffer,INDICATOR_DATA);
SetIndexBuffer(1,Color_HistogramColors,INDICATOR_COLOR_INDEX);
//---- O nmero de cores para a colorir a senide
color_sections=8;

//

Veja comentrio para #property indicator_color1

//--- Calcular a multiplicao


if(bars>1)multiplier=2.*M_PI/bars;
else
{
PrintFormat("Defina o valor das barras=%d maior do que 1",bars);
//--- Finalizao antecipada do indicador
return(INIT_PARAMETERS_INCORRECT);
}
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Alterar cores usadas para o histograma
ChangeColors(colors,color_sections);
//--- Redefinir o contador de ticks para zero
ticks=0;
}

2000-2014, MetaQuotes Software Corp.

1397

Indicadores Customizados
//--- Calcule os valores do indicador
int start=0;
//--- Se j foi calculado durante os incios anteriores do OnCalculate

if(prev_calculated>0) start=prev_calculated-1; // definir o incio do clculo com a penltima ba


//--- Preencher o buffer do indicador com valores
for(int i=start;i<rates_total;i++)
{
//--- Um valor
Color_HistogramBuffer[i]=sin(i*multiplier);
//--- Cor
int color_index=i%(bars*color_sections);
color_index/=bars;
Color_HistogramColors[i]=color_index;
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("HistogramColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i]
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia de uma linha visualizada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()

2000-2014, MetaQuotes Software Corp.

1398

Indicadores Customizados
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+" Width="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
int size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm=EnumToString(styles[style_index])+", "+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1399

Indicadores Customizados

DRAW_COLOR_HISTOGRAM2
O estilo DRAW_COLOR_HISTOGRAM2 desenha uma histograma de uma cor especfica segmentos
verticais usando os valores de buffers do indicador. Mas diferentemente ao de uma cor
DRAW_HISTOGRAM2, este estilo pode ter a sua prpria cor a partir de um conjunto pr-definido em
cada coluna do histograma. Os valores de todos os segmentos so retirados do buffer do indicador.
A largura, o estilo e a cor do histograma pode ser especificado como para o estilo DRAW_HISTOGRAM2
usando as diretivas de compilador ou usando dinamicamente a funo PlotIndexSetInteger().
Mudanas dinmicas das propriedades de plotagem permitem alterar o visual do histograma com base
na situao atual.
O estilo DRAW_COLOR_HISTOGRAM2 pode ser usado em uma sub-janela separada de um grfico e em
sua janela principal. Para valores vazios nada desenhado, todos os valores nos buffers do indicador
precisam ser definidos explicitamente. Buffers no so inicializados com valores vazios.
O nmero de buffers necessrios para plotagem do DRAW_COLOR_HISTOGRAM2 3:
dois buffers para armazenar a extremidade superior e inferior do segmento vertical em cada barra;
um buffer para armazenar o ndice de cor, o qual usado para desenhar o segmento (faz sentido
definir apenas valores no vazios).
Um exemplo de indicador que desenha um histograma de uma cor especifica entre os preos de alta e
baixa. Para cada dia da semana, as linhas de histograma ter uma cor diferente. A cor do dia, a largura
e o estilo do histograma alterado aleatoriamente a cada N ticks.

Por favor note que para plot1 com o estilo DRAW_COLOR_HISTOGRAM2, 5 cores so definidas usando
a diretiva de compilador #property, e ento na funo OnCalculate() as cores so selecionadas
aleatoriamente a partir de 14 cores armazenadas no array colors[].
O parmetro N defindo nos parmetros externos do indicador para a possibilidade de configurao
manual (na guia Parmetros na janela Propriedades do indicador).

2000-2014, MetaQuotes Software Corp.

1400

Indicadores Customizados
//+------------------------------------------------------------------+
//|

DRAW_COLOR_HISTOGRAM2.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_HISTOGRAM2"


#property description " desenhado um segmento entre a abertura e fechamento em cada barra"
#property description "A cor, a largura e o estilo so alterados aleatoriamente"
#property description "depois de cada N ticks"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots

//--- plotar ColorHistogram_2


#property indicator_label1

"ColorHistogram_2"

#property indicator_type1

DRAW_COLOR_HISTOGRAM2

//--- Definir 5 cores para colorir o histograma com base nos dias de semana (elas so armazenadas n
#property indicator_color1

clrRed,clrBlue,clrGreen,clrYellow,clrMagenta

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

int

color_sections;

// O nmero de ticks para alterar o histograma

//--- Valores de buffers


double

ColorHistogram_2Buffer1[];

double

ColorHistogram_2Buffer2[];

//--- Um buffer de ndices de cor


double

ColorHistogram_2Colors[];

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorHistogram_2Buffer1,INDICATOR_DATA);
SetIndexBuffer(1,ColorHistogram_2Buffer2,INDICATOR_DATA);

2000-2014, MetaQuotes Software Corp.

1401

Indicadores Customizados
SetIndexBuffer(2,ColorHistogram_2Colors,INDICATOR_COLOR_INDEX);
//--- Definir um valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---- O nmero de cores para a colorir a senide
color_sections=8;

//

Veja um comentrio #property indicator_color1

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Mude as cores usadas para desenhar o histograma
ChangeColors(colors,color_sections);
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Calcule os valores do indicador
int start=0;
//--- Para obter o dia da semana pela abertura de preo de cada barra
MqlDateTime dt;
//--- Se j foi calculado durante os incios anteriores do OnCalculate

if(prev_calculated>0) start=prev_calculated-1; // definir o incio do clculo com a penltima ba


//--- Preencher o buffer do indicador com valores
for(int i=start;i<rates_total;i++)
{
TimeToStruct(time[i],dt);
//--- valor
ColorHistogram_2Buffer1[i]=high[i];
ColorHistogram_2Buffer2[i]=low[i];

2000-2014, MetaQuotes Software Corp.

1402

Indicadores Customizados
//--- Define o ndice de cores de acordo com o dia da semana
int day=dt.day_of_week;
ColorHistogram_2Colors[i]=day;
}
//--- Retorna o valor de prev_calculated para a prxima chamada da funo
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("HistogramColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i]
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia de uma linha visualizada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha

2000-2014, MetaQuotes Software Corp.

1403

Indicadores Customizados
comm=comm+" Width="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
int size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm=EnumToString(styles[style_index])+", "+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1404

Indicadores Customizados

DRAW_COLOR_ARROW
O estilo DRAW_COLOR_ARROW desenha setas coloridas (smbolos do conjunto Wingdings) baseado no
valor do buffer do indicador. Em contraste com DRAW_ARROW, neste estilo, possvel definir uma
cor partir de um conjunto predefinido de cores especificada pela propriedade indicator_color1 para
cada smbolo.
A largura e a cor dos smbolos podem ser especificadas com o estilo DRAW_ARROW usando diretivas
de compilador ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas dinmicas das
propriedades de plotagem permitem modificar a aparncia de um indicador com base na situao
atual.
O cdigo de smbolo definido usando a propriedade PLOT_ARROW.
//--- Definir o cdigo smbolo a partir das fontes Wingdings para desenhar em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,code);

O valor padro do PLOT_ARROW=159 (um crculo).


Cada seta na verdade um smbolo que tem a altura e o ponto de ancoragem e pode abranger algumas
informaes importantes num grfico (por exemplo, o preo de fechamento da barra). Assim,
podemos adicionalmente especificar o deslocamento vertical em pixels, o qual no depende da escala
do grfico. As setas sero deslocadas para baixo pelo nmero especificado de pixels, embora os
valores do indicador permanecero os mesmos:
//--- Definir o deslocamento vertical das setas em pixels
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,shift);

Um valor negativo de PLOT_ARROW_SHIFT significa a mudana de setas para cima, valores positivos
deslocam a seta para baixo.
O estilo DRAW_COLOR_ARROW pode ser usado em separado na sub-janela do grfico e em sua janela
principal. Valores vazios no so desenhados e no aparecem na "Janela de Dados", todos os valores
nos buffers do indicador devem ser definidos explicitamente. Buffers no so inicializados com o valor
zero.
//--- Definir um valor vazio
PlotIndexSetDouble(plot_index_DRAW_COLOR_ARROW,PLOT_EMPTY_VALUE,0);

O nmero de buffers necessrios para plotagem de DRAW_COLOR_ARROW 2.


Um buffer para armazenar o valor do preo que utilizado para desenhar o smbolo (alm de um
deslocamento em pixels, determinado na propriedade PLOT_ARROW_SHIFT);
Um buffer para guardar o ndice de corque utilizado para desenhar uma seta(faz sentido
configurar apenas valores no vazios).
Um exemplo de indicador que desenha as setas em cada uma das barras com o preo mais alto do que
o preo final da barra anterior. A largura, deslocamento e smbolo de cdigo de todas setas so
alterados aleatoriamente a cada N ticks. A cor do smbolo depende do nmero da barra na qual est
desenhada.

2000-2014, MetaQuotes Software Corp.

1405

Indicadores Customizados

Neste exemplo, para plot1 com o estilo DRAW_COLOR_ARROW, as propriedades, cor e tamanho so
especificadas usando a diretiva de compilador #property, e ento, na funo OnCalculate() as
propriedades so definidas aleatoriamente. O parmetro N definido nos parmetros externos do
indicador para a possibilidade de configurao manual (o guia Parmetros na janela Propriedades do
indicador).
Por favor, note que inicialmente oito cores so usadas na diretiva de compilador #property, e ento,
na funo OnCalculate(), a cor definida aleatoriamente a partir das 14 cores que so armazenadas
no array colors[].
//+------------------------------------------------------------------+
//|

DRAW_COLOR_ARROW.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_ARROW"

#property description "Desenha setas de diferentes cores definidas pelo caracteres Unicode, em um g
#property description "A cor, o tamanho, deslocamento e cdigo de smbolo da seta so alterados"
#property description " aleatoriamente a cada N ticks"
#property description "O parmetro de cdigo define o valor da base: cdigo = 159 (um crculo)"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar ColorArrow


#property indicator_label1

"ColorArrow"

2000-2014, MetaQuotes Software Corp.

1406

Indicadores Customizados
#property indicator_type1

DRAW_COLOR_ARROW

//--- Define 8 cores para colorir o histograma com base nos dias de semana (eles so armazenados no
#property indicator_color1

clrRed,clrBlue,clrSeaGreen,clrGold,clrDarkOrange,clrMagenta,clrYellowGr

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// Nmero de ticks para mudar

input ushort

code=159;

// Cdigo smbolo para desenhar em DRAW_ARROW

int

color_sections;

//--- Um buffer do indicador para plotar


double

ColorArrowBuffer[];

//--- Um buffer para armazenar ndices de cor


double

ColorArrowColors[];

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorArrowBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorArrowColors,INDICATOR_COLOR_INDEX);
//--- Definir o cdigo smbolo para desenho em PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,code);
//--- Definir o deslocamento vertical das setas em pixels
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,5);
//--- Definir como um valor vazio 0
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---- O nmero de cores para a colorir a senide
color_sections=8;

//

veja um comentrio #property indicator_color1

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[],

2000-2014, MetaQuotes Software Corp.

1407

Indicadores Customizados
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
static int ticks=0;
//--- Calcular ticks para mudar a cor, tamanho, deslocamento e cdigo da seta
ticks++;
//--- Se um nmero crtico de ticks tem sido acumulado
if(ticks>=N)
{
//--- Alterar propriedades de seta
ChangeLineAppearance();
//--- Mude as cores usadas para desenhar o histograma
ChangeColors(colors,color_sections);
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- Bloco para clculo dos valores do indicador
int start=1;
if(prev_calculated>0) start=prev_calculated-1;
//--- Calculando loop
for(int i=1;i<rates_total;i++)
{
//--- Se o preo atual fechado mais alto do que o anterior, desenhar uma seta
if(close[i]>close[i-1])
ColorArrowBuffer[i]=close[i];
//--- Caso contrrio, especificar o valor nulo
else
ColorArrowBuffer[i]=0;
//--- Cor da seta
int index=i%color_sections;
ColorArrowColors[i]=index;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Altera a cor dos segmentos de linha

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)

2000-2014, MetaQuotes Software Corp.

1408

Indicadores Customizados
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("ArrowColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],tru
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia de uma linha visualizada no indicador

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades de linha
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5; // A largura definida de 0 a 4
//--- Definir a cor com a propriedade PLOT_LINE_WIDTH
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+" Width="+IntegerToString(width);
//--- Um bloco para mudar o cdigo das setas (PLOT_ARROW)
number=MathRand();

//--- Obter o restante da diviso de nmero inteiro para calcular um novo cdigo da seta(a partir d
int code_add=number%20;
//--- Definir o novo smbolo de cdigo como o resultado de code+code_add
PlotIndexSetInteger(0,PLOT_ARROW,code+code_add);
//--- Escreva o cdigo de smbolo PLOT_ARROW
comm="\r\n"+"PLOT_ARROW="+IntegerToString(code+code_add)+comm;
//--- Um bloco de mudana do deslocamento vertical das setas em pixels
number=MathRand();
//--- Obter o deslocamento como o restante da diviso inteira
int shift=20-number%41;
//--- Define um deslocamento a partir de
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,shift);
//--- Escrever o deslocamento PLOT_ARROW_SHIFT
comm="\r\n"+"PLOT_ARROW_SHIFT="+IntegerToString(shift)+comm;

2000-2014, MetaQuotes Software Corp.

1409

Indicadores Customizados

//--- Mostrar a informao no grfico usando um comentrio


Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1410

Indicadores Customizados

DRAW_COLOR_ZIGZAG
O estilo DRAW_COLOR_ZIGZAG desenha segmentos cores diferentes, usando os valores de dois
buffers do indicador. Este estilo uma verso colorida de DRAW_ZIGZAG, ou seja, permite a
especificar para cada segmento uma cor individual a partir do conjunto pr-definido de cores. Os
segmentos so plotados a partir de um valor no primeiro buffer para um valor no segundo buffer do
indicador. Nenhum dos buffers pode conter somente valores vazios, uma vez que neste caso nada
plotado.
A largura, cor e estilo das linhas podem ser especificadas como para o estilo DRAW_ZIGZAG - usando
as diretivas de compilao ou dinamicamente usando a funo PlotIndexSetInteger(). Mudanas
dinmicas das propriedades de plotagem permitem "avivar" os indicadores, de modo que suas
aparncias sejam alteradas dependendo da situao corrente.
Sees so desenhadas a partir de um valor no vazio de um buffer para um valor no vazio de outro
buffer do indicador. Para especificar o valor que deve ser considerado como "vazio", defina esse valor
na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_COLOR_ZIGZAG,PLOT_EMPTY_VALUE,0);

Sempre preencha explicitamente nos valores dos buffers de indicador, defina um valor vazio num
buffer para saltar barras.
O nmero de buffers requerida para plotagem de DRAW_COLOR_ZIGZAG 3:
dois buffers para armazenar os valores das extremidades das sees em zigue-zague;
um buffer para armazenar o ndice de cor, que usada para desenhar a seo (faz sentido definir
apenas valores no vazios).
Um exemplo de indicador de que plota uma serra com base nos altas e baixas dos preos. A cor, a
largura e o estilo das linhas em ziguezague alteram aleatoriamente a cada N ticks.

2000-2014, MetaQuotes Software Corp.

1411

Indicadores Customizados
Por favor note que para plot1 com o estilo DRAW_COLOR_ZIGZAG, 8 cores so definidas usando a
diretiva de compilao #property, e ento na funo OnCalculate() a cor selecionada aleatoriamente
a partir de 14 cores armazenadas no array colors[].
O parmetro N defindo nos parmetros externos do indicador para a possibilidade de configurao
manual (na guia Parmetros na janela Propriedades do indicador).
//+------------------------------------------------------------------+
//|

DRAW_COLOR_ZIGZAG.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_ZIGZAG"


#property description "Ele desenha uma linha tracejada, como uma seqncia das sees coloridas, a
#property description "A cor, a largura e tamanho dos segmentos so alterados aleatoriamente"
#property description " a cada N ticks"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots

//--- plotar Color_Zigzag


#property indicator_label1

"Color_Zigzag"

#property indicator_type1

DRAW_COLOR_ZIGZAG

//--- Definir 8 cores para colorir sees (eles so armazenados numa array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// Nmero de ticks para alterar

int

color_sections;

//--- Buffers dos valores das extremidades do segmento


double

Color_ZigzagBuffer1[];

double

Color_ZigzagBuffer2[];

//--- Buffers do ndice de cores das extremidades dos segmento


double

Color_ZigzagColors[];

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//--- Um array para armazenar os estilos de linha
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

2000-2014, MetaQuotes Software Corp.

1412

Indicadores Customizados
//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Color_ZigzagBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,Color_ZigzagBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,Color_ZigzagColors,INDICATOR_COLOR_INDEX);
//----Nmero de corres para colorir o zigzag
color_sections=8;

//

veja um comentrio para a #property indicator_color1

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Calcule ticks para mudar o estilo, cor e largura da linha
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Alterar cores utilizadas para plotar as sees
ChangeColors(colors,color_sections);
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- A estrutura de tempo necessrio para obter o dia da semana de cada barra
MqlDateTime dt;
//--- A posio inicial dos clculos
int start=0;

//--- Se o indicador foi calculado com o tick anterior, ento inicia o clculo com o passado, mas d
if(prev_calculated!=0) start=prev_calculated-1;
//--- Calculando loop
for(int i=start;i<rates_total;i++)

2000-2014, MetaQuotes Software Corp.

1413

Indicadores Customizados
{
//--- Escreva o tempo de abertura da barra na estrutura
TimeToStruct(time[i],dt);
//--- Se ainda o nmero de barra
if(i%2==0)
{
//---

Escrever a alta no primeiro buffer e a baixa no segundo

Color_ZigzagBuffer1[i]=high[i];
Color_ZigzagBuffer2[i]=low[i];
//--- A cor do segmento
Color_ZigzagColors[i]=dt.day_of_year%color_sections;
}
//--- o nmero da barra mpar
else
{
//--- Preencha a barra numa ordem inversa
Color_ZigzagBuffer1[i]=low[i];
Color_ZigzagBuffer2[i]=high[i];
//--- A cor do segmento
Color_ZigzagColors[i]=dt.day_of_year%color_sections;
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Alterar a cor do segmento zigzag

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

2000-2014, MetaQuotes Software Corp.

1414

Indicadores Customizados

comm=comm+StringFormat("ZigzagColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],tr
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Alterar a aparncia dos segmentos zigzag

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao da informao sobre as propriedades de Color_ZigZag
string comm="";
//--- Um bloco para alterar a largura da linha
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a cor com a propriedade PLOT_LINE_WIDTH


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Um bloco para mudar o estilo da linha
number=MathRand();
//--- O divisor igual ao tamanho do array de estilos
int size=ArraySize(styles);
//--- Obter o ndice para selecionar um novo estilo como o resto da diviso inteira
int style_index=number%size;
//--- Definir a cor com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- Escrever o estilo de linha
comm="\r\n"+EnumToString(styles[style_index])+""+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1415

Indicadores Customizados

DRAW_COLOR_BARS
O estilo DRAW_COLOR_BARS desenha barra sobre valores de quatro buffers de indicador, que contm
Open (abertura), High (alta), Low (baixa) e Close (fechamento) de preos. Este estilo uma verso
avanada do DRAW_BARS e permite a especificao para cada barra de uma cor individual do conjunto
predefinido de cores. usado para a criao de indicadores personalizados como barras, incluindo
aqueles numa sub-janela separada de um grfico e sobre outros instrumentos financeiros.
A cor das barras pode ser definida usando as diretivas de compilador ou dinamicamente utilizando a
funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de plotagem permitem "avivar" os
indicadores, de modo que suas mudanas de aparncia dependem da situao corrente.
O indicador desenhado apenas para as barras, para o qual os valores no vazios de todos quatro
buffers do indicador so definidos. Para especificar o valor que deve ser considerado como "vazio",
defina este valor na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_COLOR_BARS,PLOT_EMPTY_VALUE,0);

Sempre preencher explicitamente os valores dos buffers do indicador, definir um valor vazio num
buffer para ignorar barras.
O nmero requerido de buffers para plotagem de DRAW_COLOR_BARS 5:
quatro buffers para armazenar Open, High, Low e Close;
um buffer para armazenar o ndice das cores, que usado para desenhar uma barra(faz sentido
defini-lo apenas para as barras que sero desenhadas).
Todos os buffers para a plotagem devem ir um aps o outro na ordem determinada: Open, High, Low,
Close e o buffer de cor. Nenhum dos buffers de preos podem conter valores nulos, uma vez que neste
caso nada plotado.
Um exemplo do indicador que desenha barras sobre um instrumento financeiro selecionado numa
janela separada. A cor das barras muda aleatoriamente a cada N ticks. O parmetro N definido nos
parmetro externos do indicador para a possibilidade de configurao manual (na guia Parmetros na
janela Propriedades do indicador).

2000-2014, MetaQuotes Software Corp.

1416

Indicadores Customizados

Por favor note que para plot1 com o estilo DRAW_COLOR_BARS, 8 cores so definidas usando a
diretiva de compilador #property, e ento na funo OnCalculate() a cor selecionada aleatoriamente
a partir de 14 cores armazenadas no array de colors[].
//+------------------------------------------------------------------+
//|

DRAW_COLOR_BARS.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_BARS"

#property description "Ele desenha diferentes cores nas barras de um smbolo selecionado numa janel

#property description "A cor e a largura das barras, bem como o smbolo so alterados aleatoriament
#property description "cada N ticks"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots

//--- plotar ColorBars


#property indicator_label1

"ColorBars"

#property indicator_type1

DRAW_COLOR_BARS

//--- Define 8 cores para colorir barras (elas so armazenadas num array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int

N=5;

// O nmero de ticks para alterar o tipo

2000-2014, MetaQuotes Software Corp.

1417

Indicadores Customizados
input int

bars=500;

// O nmero de barras para mostrar

input bool

messages=false;

// Mostrar mensagens no log "Expert Advisors"

//--- buffers do Indicador


double

ColorBarsBuffer1[];

double

ColorBarsBuffer2[];

double

ColorBarsBuffer3[];

double

ColorBarsBuffer4[];

double

ColorBarsColors[];

//--- Nome do smbolo


string symbol;
int

bars_colors;

//--- Um array para armazenar as cores que contm 14 elementos


color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrMagenta,clrCyan,clrMediumPurple
};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorBarsBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ColorBarsBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,ColorBarsBuffer3,INDICATOR_DATA);
SetIndexBuffer(3,ColorBarsBuffer4,INDICATOR_DATA);
SetIndexBuffer(4,ColorBarsColors,INDICATOR_COLOR_INDEX);
//---- Nmero de cores para colorir as barras
bars_colors=8;

//

veja uma comentrio para a #property indicator_color1

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=0;
//--- Conte ticks para mudar o estilo, cor e largura da barra

2000-2014, MetaQuotes Software Corp.

1418

Indicadores Customizados
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Selecione um novo smbolo a partir da janela de observao do Mercado
symbol=GetRandomSymbolName();
//--- Alterar as propriedades da linha
ChangeLineAppearance();
//--- Mude as cores usadas para desenhar os candlesticks
ChangeColors(colors,bars_colors);
int tries=0;
//--- Faa 5 tentativas de preencher os buffers com os preos a partir smbolo
while(!CopyFromSymbolToBuffers(symbol,rates_total,bars_colors) && tries<5)
{
//--- Um contador de chamadas da funo CopyFromSymbolToBuffers()
tries++;
}
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher os buffers do indicador com preos

//+------------------------------------------------------------------+
bool CopyFromSymbolToBuffers(string name,int total,int bar_colors)
{

//--- No array de rates[], vamos copiar Open (abertura), High (alta), Low (baixa) e Close (fechamen
MqlRates rates[];
//--- O contador de tentativas
int attempts=0;
//--- Quanto foi copiado
int copied=0;
//--- Fazer 25 tentativas para obter uma srie temporal(timeseries) sobre o smbolo desejado
while(attempts<25 && (copied=CopyRates(name,_Period,0,bars,rates))<0)
{
Sleep(100);
attempts++;
if(messages) PrintFormat("%s Copiar taxas(%s) tentativas=%d",__FUNCTION__,nome,tentativas);
}
//--- Se falhou em copiar um nmero suficiente de barras
if(copied!=bars)
{
//--- Formar uma mensagem string

string comm=StringFormat("Para o smbolo %s, conseguiu receber somente %d barras de %d solici


name,
copied,
bars

2000-2014, MetaQuotes Software Corp.

1419

Indicadores Customizados
);
//--- Mostrar uma mensagem num comentrio na janela do grfico principal
Comment(comm);
//--- Mostrar a mensagem
if(messages) Print(comm);
return(false);
}
else
{
//--- Definir a exibio do smbolo
PlotIndexSetString(0,PLOT_LABEL,name+" Open;"+name+" High;"+name+" Low;"+name+" Close");
IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_COLOR_BARS("+name+")");
}
//--- Inicializar buffers com valores vazios
ArrayInitialize(ColorBarsBuffer1,0.0);
ArrayInitialize(ColorBarsBuffer2,0.0);
ArrayInitialize(ColorBarsBuffer3,0.0);
ArrayInitialize(ColorBarsBuffer4,0.0);
//--- Copiar os preos para os buffers
for(int i=0;i<copied;i++)
{
//--- Calcular o ndice apropriado para os buffers
int buffer_index=total-copied+i;
//--- Escreva os preos para os buffers
ColorBarsBuffer1[buffer_index]=rates[i].open;
ColorBarsBuffer2[buffer_index]=rates[i].high;
ColorBarsBuffer3[buffer_index]=rates[i].low;
ColorBarsBuffer4[buffer_index]=rates[i].close;
//--ColorBarsColors[buffer_index]=i%bar_colors;
}
return(true);
}
//+------------------------------------------------------------------+
//| Aleatoriamente retorna um smbolo de Observao do Mercado

//+------------------------------------------------------------------+
string GetRandomSymbolName()
{
//--- O nmero de smbolos mostrada na janela de observao do Mercado
int symbols=SymbolsTotal(true);
//--- A posio de um smbolo na lista - um nmero aleatrio de 0 para smbolos
int number=MathRand()%symbols;
//--- Retornar o nome de um smbolo na posio especificada
return SymbolName(number,true);
}
//+------------------------------------------------------------------+
//|

Alterar a cor do segmento zigzag

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1420

Indicadores Customizados
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("BarColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],true)
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Altera a aparncia das barras

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades da barra
string comm="";
//--- Um bloco para alterar a largura das barras
int number=MathRand();
//--- Obter a largura do restante da diviso inteira
int width=number%5;

// A largura definida de 0 a 4

//--- Definir a cor com a propriedade PLOT_LINE_WIDTH


PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- Escrever a largura da linha
comm=comm+"\r\nWidth="+IntegerToString(width);
//--- Escreve o nome do smbolo
comm="\r\n"+symbol+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1421

Indicadores Customizados

2000-2014, MetaQuotes Software Corp.

1422

Indicadores Customizados

DRAW_COLOR_CANDLES
O estilo DRAW_COLOR_CANDLES style, como o DRAW_CANDLES, desenha candlesticks usando valores
de quatro buffers de indicador o qual contm Open (abertura), High (alta), Low (baixa) e Close
(fechamento) de preos. Alm disso, ele permite a especificao de uma cor para cada um candlestick
de um determinado conjunto. Para esta finalidade, o estilo tem um buffer de cor especial que
armazena os ndices de cor para cada barra. usado para a criao de indicadores personalizados
como uma seqncia de candlesticks, incluindo os inseridos numa sub-janela separada de um grfico e
noutros instrumentos financeiros.
O nmero de cores de candlesticks pode ser definido usando as diretivas de compilador ou
dinamicamente usando a funo PlotIndexSetInteger(). Mudanas dinmicas das propriedades de
plotagem permitem "avivar" os indicadores, de modo que suas mudanas de aparncia dependem da
situao corrente.
O indicador desenhado apenas para as barras, para o qual os valores no vazios de quatro buffers de
preos do indicador so definidos. Para especificar o valor que deve ser considerado como "vazio",
defina esse valor na propriedade PLOT_EMPTY_VALUE:
//--- O valor 0 (vazio) no vai participar no desenho
PlotIndexSetDouble(index_of_plot_DRAW_COLOR_CANDLES,PLOT_EMPTY_VALUE,0);

Sempre preencher explicitamente os valores dos buffers do indicador, definir um valor vazio num
buffer para ignorar barras.
O nmero de buffers necessrios para plotagem de DRAW_COLOR_CANDLES 5:
quatro buffers para armazenar Open, High, Low e Close;
um buffer para armazenar o ndice de cor, que usada para desenhar um candlestick (faz sentido
defini-lo apenas para os candlesticks que sero desenhados).
Todos os buffers para a plotagem devem ir um aps o outro na ordem determinada: Open, High, Low,
Close e o buffer de cor. Nenhum dos buffers de preos pode conter apenas valores vazios, uma vez
que, neste caso, nada plotado.
Um exemplo de indicador que desenha candlesticks para um instrumento financeiro selecionado em
uma janela separada. A cor dos candlesticks muda aleatoriamente a cada N ticks. O parmetro N
definido nos parmetro externos do indicador para a possibilidade de configurao manual (na guia
Parmetros na janela Propriedades do indicador).

2000-2014, MetaQuotes Software Corp.

1423

Indicadores Customizados

Por favor, note que para plot1, a cor definida usando a diretiva de compilador #property, e ento,
na funo OnCalculate() a cor definida aleatoriamente a partir de uma lista preparada
anteriormente.
//+------------------------------------------------------------------+
//|

DRAW_COLOR_CANDLES.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "Um indicador para demonstrar DRAW_COLOR_CANDLES."


#property description "ele desenha candlesticks de um smbolo selecionado numa janela separada"
#property description " "
#property description "A cor e a largura dos candlesticks, bem como o smbolo so alterados"
#property description "aleatoriamente a cada N ticks"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots

//--- Plotar ColorCandles


#property indicator_label1

"ColorCandles"

#property indicator_type1

DRAW_COLOR_CANDLES

//--- Definir 8 cores para colorir os candlesticks (eles so armazenados na array especial)
#property indicator_color1

clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

#property indicator_style1

STYLE_SOLID

#property indicator_width1

2000-2014, MetaQuotes Software Corp.

1424

Indicadores Customizados
//--- parmetros de entrada
input int

N=5;

// O nmero de ticks para alterar o tipo

input int

bars=500;

// O nmero de candlesticks para mostrar

input bool

messages=false;

// Mostrar mensagens no log "Expert Advisors"

//--- buffers do Indicador


double

ColorCandlesBuffer1[];

double

ColorCandlesBuffer2[];

double

ColorCandlesBuffer3[];

double

ColorCandlesBuffer4[];

double

ColorCandlesColors[];

int

candles_colors;

//--- Nome do smbolo


string symbol;
//--- Um array para armazenar as cores que contm 14 elementos
color colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrMagenta,clrCyan,clrMediumPurple
};
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- Se as barras so muito pequenas - concluir o trabalho antes do tempo
if(bars<50)
{

Comment("Por favor, especifique um nmero maior de barras! A operao do indicador foi termin
return(INIT_PARAMETERS_INCORRECT);
}
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorCandlesBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ColorCandlesBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,ColorCandlesBuffer3,INDICATOR_DATA);
SetIndexBuffer(3,ColorCandlesBuffer4,INDICATOR_DATA);
SetIndexBuffer(4,ColorCandlesColors,INDICATOR_COLOR_INDEX);
//--- Um valor vazio
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- O nome do smbolo, para o qual as barras so desenhadas
symbol=_Symbol;
//--- Definir a exibio do smbolo

PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");


IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_COLOR_CANDLES("+symbol+")");
//---- O nmero de cores para a cor dos candlesticks
candles_colors=8;

//

Veja uma comentrio para a #property indicator_color1

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1425

Indicadores Customizados
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int ticks=INT_MAX-100;
//--- Contar ticks para mudar o estilo e cor
ticks++;
//--- Se um nmero suficiente de ticks foi acumulado
if(ticks>=N)
{
//--- Selecione um novo smbolo a partir da janela de observao do Mercado
symbol=GetRandomSymbolName();
//--- Alterar a forma
ChangeLineAppearance();
//--- Mude as cores usadas para desenhar os candlesticks
ChangeColors(colors,candles_colors);
int tries=0;
//--- Faa 5 tentativas de preencher os buffers de Plot1 com os preos a partir da smbolo
while(!CopyFromSymbolToBuffers(symbol,rates_total,0,
ColorCandlesBuffer1,ColorCandlesBuffer2,ColorCandlesBuffer3,
ColorCandlesBuffer4,ColorCandlesColors,candles_colors)
&& tries<5)
{
//--- Um contador de chamadas da funo CopyFromSymbolToBuffers()
tries++;
}
//--- Redefinir o contador de ticks para zero
ticks=0;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenche o candlestick especificado

//+------------------------------------------------------------------+
bool CopyFromSymbolToBuffers(string name,
int total,
int plot_index,
double &buff1[],

2000-2014, MetaQuotes Software Corp.

1426

Indicadores Customizados
double &buff2[],
double &buff3[],
double &buff4[],
double &col_buffer[],
int

cndl_colors

)
{

//--- No array de rates[], vamos copiar Open (abertura), High (alta), Low (baixa) e Close (fechamen
MqlRates rates[];
//--- O contador de tentativas
int attempts=0;
//--- Quanto foi copiado
int copied=0;
//--- Fazer 25 tentativas para obter uma srie temporal(timeseries) sobre o smbolo desejado
while(attempts<25 && (copied=CopyRates(name,_Period,0,bars,rates))<0)
{
Sleep(100);
attempts++;
if(messages) PrintFormat("%s Copiar taxas(%s) tentativas=%d",__FUNCTION__,nome,tentativas);
}
//--- Se falhou em copiar um nmero suficiente de barras
if(copied!=bars)
{
//--- Formar uma mensagem string

string comm=StringFormat("Para o smbolo %s, conseguiu receber somente %d barras de %d solici


name,
copied,
bars
);
//--- Mostrar uma mensagem num comentrio na janela do grfico principal
Comment(comm);
//--- Mostrar a mensagem
if(messages) Print(comm);
return(false);
}
else
{
//--- Definir a exibio do smbolo

PlotIndexSetString(plot_index,PLOT_LABEL,name+" Open;"+name+" High;"+name+" Low;"+name+" Clos


IndicatorSetString(INDICATOR_SHORTNAME,"DRAW_COLOR_CANDLES("+symbol+")");
}
//--- Inicializar buffers com valores vazios
ArrayInitialize(buff1,0.0);
ArrayInitialize(buff2,0.0);
ArrayInitialize(buff3,0.0);
ArrayInitialize(buff4,0.0);
//--- Sobre cada tick copiado preos para os buffers
for(int i=0;i<copied;i++)
{

2000-2014, MetaQuotes Software Corp.

1427

Indicadores Customizados
//--- Calcular o ndice apropriado para os buffers
int buffer_index=total-copied+i;
//--- Escreva os preos para os buffers
buff1[buffer_index]=rates[i].open;
buff2[buffer_index]=rates[i].high;
buff3[buffer_index]=rates[i].low;
buff4[buffer_index]=rates[i].close;
//--- Definir a cor do candlestick
int color_index=i%cndl_colors;
col_buffer[buffer_index]=color_index;
}
return(true);
}
//+------------------------------------------------------------------+
//| Aleatoriamente retorna um smbolo de Observao do Mercado

//+------------------------------------------------------------------+
string GetRandomSymbolName()
{
//--- O nmero de smbolos mostrada na janela de observao do Mercado
int symbols=SymbolsTotal(true);
//--- A posio de um smbolo na lista - um nmero aleatrio de 0 para smbolos
int number=MathRand()%symbols;
//--- Retornar o nome de um smbolo na posio especificada
return SymbolName(number,true);
}
//+------------------------------------------------------------------+
//| Mudar a cor dos segmentos de candlestick

//+------------------------------------------------------------------+
void

ChangeColors(color

&cols[],int plot_colors)

{
//--- O nmero de cores
int size=ArraySize(cols);
//--string comm=ChartGetString(0,CHART_COMMENT)+"\r\n\r\n";
//--- Para cada ndice de cor definir uma nova cor aleatoriamente
for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
{
//--- Obter um valor aleatrio
int number=MathRand();
//--- Obter um ndice no array col[] como um resto da diviso inteira
int i=number%size;
//--- Definir a cor para cada ndice com a propriedade PLOT_LINE_COLOR
PlotIndexSetInteger(0,

//

O nmero do estilo grfico

PLOT_LINE_COLOR,

//

Identificador da propriedade

plot_color_ind,

//

O ndice da cor, onde se escreve a cor

cols[i]);

//

Uma nova cor

//--- Escrever as cores

comm=comm+StringFormat("CandleColorIndex[%d]=%s \r\n",plot_color_ind,ColorToString(cols[i],tr

2000-2014, MetaQuotes Software Corp.

1428

Indicadores Customizados
ChartSetString(0,CHART_COMMENT,comm);
}
//--}
//+------------------------------------------------------------------+
//| Mudar a aparncia dos candlesticks

//+------------------------------------------------------------------+
void ChangeLineAppearance()
{
//--- Uma string para a formao de informaes sobre as propriedades do candlestick
string comm="";
//--- Escreve o nome do smbolo
comm="\r\n"+symbol+comm;
//--- Mostrar a informao no grfico usando um comentrio
Comment(comm);
}

2000-2014, MetaQuotes Software Corp.

1429

Indicadores Customizados

Conexo entre as propriedades de indicadores e funes


correspondentes
Cada indicador personalizado tem inmeras propriedades, algumas das quais so obrigatrias e esto
sempre posicionadas no incio da descrio. So as seguintes propriedades:
indicao de uma janela
indicator_chart_window;

para

plotar

indicador

indicator_separate_window

ou

nmero de buffers do indicador indicator_buffers;


nmero de plotagem do indicador indicator_plots.
Tambm existem outras propriedades que podem ser definidas tanto atravs das diretivas pr
processador como das funes destinadas criao do indicador personalizado. Estas propriedades e
funes correspondentes so descritas na seguinte tabela.
Diretivas para propriedades
de sub-janela de indicador

Funes do tipo
IndicatorSet...()

Descrio para ajustar


propriedades da sub-janela

indicator_height

IndicatorSetInteger
(INDICATOR_INDICATOR_HEIG
HT, nHeight)

O valor fixo da altura da subjanela

indicator_minimum

IndicatorSetDouble
(INDICATOR_MINIMUM,
dMaxValue)

O valor
vertical

mnimo

do

eixo

indicator_maximum

IndicatorSetDouble
(INDICATOR_MAXIMUM,
dMinValue)

O valor mximo
vertical

do

eixo

indicator_levelN

IndicatorSetDouble
(INDICATOR_LEVELVALUE,
1, nLevelValue)

Valor de eixo vertical para N


nvel

nenhuma diretiva
processador

de

pr

N-

IndicatorSetString
(INDICATOR_LEVELTEXT, N-1,
sLevelName)

Nome de um nvel apresentado

indicator_levelcolor

IndicatorSetInteger
(INDICATOR_LEVELCOLOR, N1, nLevelColor)

Cor de N nvel

indicator_levelwidth

IndicatorSetInteger
(INDICATOR_LEVELWIDTH, N1, nLevelWidth)

Largura da linha para N nvel

indicator_levelstyle

IndicatorSetInteger
(INDICATOR_LEVELSTYLE, N-1,
nLevelStyle)

Estilo de linha para N nvel

Diretivas para plotagem de


propriedades
indicator_labelN

Funes do tipo
PlotIndexSet...()
PlotIndexSetString(N1,PLOT_LABEL,sLabel)

2000-2014, MetaQuotes Software Corp.

Descrio do ajuste da
propriedade de plotar
Nome abreviado do N nmero
de plotar. Ele exibido numa

1430

Indicadores Customizados

janela de dados e na dica popup quando passa-se o curso


sobre ele
indicator_colorN

PlotIndexSetInteger(N-1,
PLOT_LINE_COLOR, nColor)

Cor da linha para N plotagem

indicator_styleN

PlotIndexSetInteger(N-1,
PLOT_LINE_STYLE, nType)

Estilo da linha para N plotagem

indicator_typeN

PlotIndexSetInteger(N-1,
PLOT_DRAW_TYPE, nType)

Tipo de linha para N plotagem

indicator_widthN

PlotIndexSetInteger(N-1,
PLOT_LINE_WIDTH, nWidth)

Largura da
plotagem

Propriedades comum do
indicador

Funes do tipo
IndicatorSet...()

linha

para

Description

nenhuma diretiva
processador

de

pr

IndicatorSetString
(INDICATOR_SHORTNAME,
sShortName)

Define o nome abreviado


conveniente do indicador, que
ser exibido na lista de
indicadores
(aberto
no
terminal pressionando Ctrl+I).

nenhuma diretiva
processador

de

pr

IndicatorSetInteger
(INDICATOR_DIGITS, nDigits)

Conjuntos necessrios para


preciso da exibio de
valores dos indicadores nmero de casas decimais

nenhuma diretiva
processador

de

pr

IndicatorSetInteger
(INDICATOR_LEVELS, nLevels)

Define o nmero de nveis na


janela do indicador

Sem funo, a propriedade


pode ser definida apenas pela
diretiva pr processador.

Tipo do preo padro usado


para o clculo de indicadores.
Ele especificado quando
necessrio, somente quando o
OnCalculate() do primeiro tipo
usado.
O
valor da
propriedade
tambm pode ser definido a
partir
do
dilogo
de
propriedades do indicador na
aba "Parmetros" - "Aplicar
para".

indicator_applied_price

Deve notar-se que a numerao dos nveis e plotagens em termos de pr processador inicia-se com
um, enquanto a numerao das mesmas propriedades usando funes inicia-se com zero, ou seja, o
valor indicado deve ser pelo menos um do que o indicado para #property.
Existem vrias diretivas, para a qual no existem funes correspondentes:
Diretiva

Description

2000-2014, MetaQuotes Software Corp.

1431

Indicadores Customizados

indicator_chart_window

Indicador visualizado na janela principal

indicator_separate_window

Indicador
separada

indicator_buffers

Nmero necessrios de buffers do indicador

indicator_plots

Nmeros de plotagem no indicador

visualizado

2000-2014, MetaQuotes Software Corp.

numa

sub-janela

1432

Indicadores Customizados

SetIndexBuffer
A funo vincula um buffer especfico de indicador com um array unidimensional dinmico do tipo
double.
bool SetIndexBuffer(
int

index,

// ndice de buffer

double

buffer[],

// array

ENUM_INDEXBUFFER_TYPE data_type

// O que ser o armazenado

);

Parmetros
index
[in] Nmero do buffer do indicador. A numerao inicia com 0. O nmero deve ser inferior ao valor
declarado em #propertyindicator_buffers.
buffer[]
[in] Um array declarado no programa de indicador personalizado.
data_type
[in] Tipo de dados armazenados no array do indicador. Por padro ele INDICATOR_DATA (valores
de clculos do indicador). Ele tambm pode ter o valor de INDICATOR_COLOR_INDEX; neste caso,
este buffer usado para armazenar ndices de cor para o buffer do indicador anterior. Voc pode
especificar at cores na linha #propertyindicator_colorN. O valor INDICATOR_CALCULATIONS
significa que o buffer usado nos clculos intermedirio do indicador, e no se destina ao
desenho.
Valor do Retorno
Com sucesso, retorna true, do contrrio - false.
Observao
Aps a vinculao, o array buffer[] dinmico ser indexado como os arrays comuns, mesmo que a
indexao de timeseries seja obrigatoriamente pr-instalado para o array. Se voc quiser alterar a
ordem de acesso aos elementos do array do indicador, use a funo ArraySetAsSeries() aps a
vinculao do array usando a funo SetIndexBuffer(). Por favor, note que voc no pode alterar
o tamanho dos arrays dinmicos definidos como buffers do indicador pela funo SetIndexBuffer().
Para buffers do indicador, todas as operaes de alterao de tamanho so realizadas pela execuo
do sub-sistema do terminal.
Exemplo:
//+------------------------------------------------------------------+
//|

TestCopyBuffer1.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

2000-2014, MetaQuotes Software Corp.

1433

Indicadores Customizados
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- plotar MA
#property indicator_label1

"MA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input bool

AsSeries=true;

input int

period=15;

input ENUM_MA_METHOD

smootMode=MODE_EMA;

input ENUM_APPLIED_PRICE price=PRICE_CLOSE;


input int

shift=0;

//--- buffers do indicador


double

MABuffer[];

int

ma_handle;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
if(AsSeries) ArraySetAsSeries(MABuffer,true);
Print("Buffer do indicador timeseries = ",ArrayGetAsSeries(MABuffer));
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
Print("Buffer do indicador aps SetIndexBuffer() timeseries = ",
ArrayGetAsSeries(MABuffer));
//--- alterar a ordem dos elementos de acesso do buffer do indicador
ArraySetAsSeries(MABuffer,AsSeries);
IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//--ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[],

2000-2014, MetaQuotes Software Corp.

1434

Indicadores Customizados
const long &volume[],
const int &spread[])
{
//--- Copiar os valores da mdia mvel no buffer MABuffer
int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
Print("MABuffer[0] = ",MABuffer[0]);// Dependendo dos valores AsSeries
// Receber um valor mais antigo
// Ou para a barra atual inacabada
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

Tambm Veja
Propriedades dos indicadores personalizados, Acesso para indicadores e timeseries

2000-2014, MetaQuotes Software Corp.

1435

Indicadores Customizados

IndicatorSetDouble
A funo define o valor da propriedade do indicador correspondente. Propriedade do indicador deve
ser do tipo double. Existem duas variantes da funo.
Chamar especificando o identificador da propriedade.
bool IndicatorSetDouble(
int

prop_id,

double prop_value

// identificador
// valor para ser definido

);

Chamar especificando o identificador e o modificador da propriedade.


bool IndicatorSetDouble(
int

prop_id,

// identificador

int

prop_modifier,

// modificador

double prop_value

// valor para ser definido

Parmetros
prop_id
[in] Identificador da propriedade do indicador. O valor pode ser um dos valores do enumerador
ENUM_CUSTOMIND_PROPERTY_DOUBLE.
prop_modifier
[in] Modificador da propriedade especfica. Somente as propriedades de nvel requerem um
modificador. A numerao dos nveis a partir do 0. Isso significa que a fim de definir a
propriedade para o segundo nvel, voc precisa determinar 1 (menor que 1 quando usar a diretiva
de compilao).
prop_value
[in] Valor de propriedade.
Valor do Retorno
Em caso de execuo bem sucedida, retorna true, do contrrio - false.
Observao
Numerao das propriedades (modificadores) comea a partir de 1 (um) quando usa a diretiva de
#property, enquanto que a funo usa numerao a partir de (zero). No caso do nmero de nvel ser
definido incorretamente, o visor do indicador pode ser diferente do pretendido.
Por exemplo, o primeiro valor para o indicador de nvel de sub-janela separada pode ser ajustado de
duas maneiras:
property indicator_level1 50 - o valor 1 utilizado para especificar o nmero de nvel,
IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 50) - 0 usado para especificar o primeiro nvel.
Exemplo: indicador inverte para baixo os valores mximo e mnimo da janela do indicador e os
valores de nveis em que as linhas horizontais so colocadas.

2000-2014, MetaQuotes Software Corp.

1436

Indicadores Customizados

#property indicator_separate_window
//--- define o valor mximo e mnimo para a janela do indicador
#property indicator_minimum

#property indicator_maximum

100

//--- visualiza trs nveis horizontais na janela separada


#property indicator_level1 25
#property indicator_level2 50
#property indicator_level3 75
//--- definir a espessura dos nveis horizontais
#property indicator_levelwidth 1
//--- definir o estilo dos nveis horizontais
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- definir as descries dos nveis horizontais
IndicatorSetString(INDICATOR_LEVELTEXT,0,"Primeiro Nvel (ndice 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Segundo Nvel (ndice 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Terceiro Nvel (ndice 2)");
//--- define o mome abreviado para o indicador
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- definir a cor para cada nvel
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed);

2000-2014, MetaQuotes Software Corp.

1437

Indicadores Customizados
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int tick_counter=0;
static double level1=25,level2=50,level3=75;
static double max=100,min=0, shift=100;
//--- calcular ticks
tick_counter++;
//--- inverter os nveis a cada 10 tick
if(tick_counter%10==0)
{
//--- inverter sinal para os valores de nvel
level1=-level1;
level2=-level2;
level3=-level3;
//--- inverter sinal para os valores mximos e mnimos
max-=shift;
min-=shift;
//--- inverter o valor de deslocamento
shift=-shift;
//--- definir novo valor para nvel
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3);
//--- definir novos valores mximo e mnimo na janela do indicador
Print("Set up max = ",max,",

min = ",min);

IndicatorSetDouble(INDICATOR_MAXIMUM,max);
IndicatorSetDouble(INDICATOR_MINIMUM,min);
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Exemplos de Estilos de Indicador, Conexo entre Propriedades do Indicador e Funes, Estilos de
2000-2014, MetaQuotes Software Corp.

1438

Indicadores Customizados
Desenho

2000-2014, MetaQuotes Software Corp.

1439

Indicadores Customizados

IndicatorSetInteger
A funo define o valor da propriedade do indicador correspondente. Propriedade do indicador deve
ser do tipo int ou color. Existem duas variantes da funo.
Chamar especificando o identificador da propriedade.
bool IndicatorSetInteger(
int prop_id,

// identificador

int prop_value

// valor a ser definido

);

Chamar especificando o identificador e o modificador da propriedade.


bool IndicatorSetInteger(
int prop_id,

// identificador

int prop_modifier,

// modificador

int prop_value

// valor a ser definido

Parmetros
prop_id
[in] Identificador da propriedade do indicador. O valor pode ser um dos valores do enumerador
ENUM_CUSTOMIND_PROPERTY_INTEGER.
prop_modifier
[in] Modificador da propriedade especfica. Somente as propriedades de nvel requerem um
modificador.
prop_value
[in] Valor de propriedade.
Valor do Retorno
Em caso de execuo bem sucedida, retorna true, do contrrio - false.
Observao
Numerao das propriedades (modificadores) comea a partir de 1 (um) quando usa a diretiva de
#property, enquanto que a funo usa numerao a partir de (zero). No caso do nmero de nvel ser
definido incorretamente, o visor do indicador pode ser diferente do pretendido.
Por exemplo, para definir a espessura da primeira linha horizontal usar o ndice zero:
IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, 5) - ndice 0 usado para definir a espessura do
primeiro nvel.
Exemplo: indicador que define a cor, estilo e espessura do indicador de linhas horizontais.

2000-2014, MetaQuotes Software Corp.

1440

Indicadores Customizados

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- visualiza trs nveis horizontais na janela separada
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- definir a espessura dos nveis horizontais
#property indicator_levelwidth 5
//--- definir a cor dos nveis horizontais
#property indicator_levelcolor clrAliceBlue
//--- definir o estilo dos nveis horizontais
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- definir as descries dos nveis horizontais
IndicatorSetString(INDICATOR_LEVELTEXT,0,"Primeiro Nvel (ndice 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Segundo Nvel (ndice 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Terceiro Nvel (ndice 2)");
//--- define o mome abreviado para o indicador
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger() Demo");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1441

Indicadores Customizados
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
static int tick_counter=0;
//--- calcular ticks
tick_counter++;
//--- e calcular as cores dos nveis horizontais, dependendo do contador de tick
ChangeLevelColor(0,tick_counter,3,6,10); // trs ltimos parmetros esto comutando a cor
ChangeLevelColor(1,tick_counter,3,6,8);
ChangeLevelColor(2,tick_counter,4,7,9);
//--- modificar o estilo dos nveis horizontais
ChangeLevelStyle(0,tick_counter);
ChangeLevelStyle(1,tick_counter+5);
ChangeLevelStyle(2,tick_counter+15);
//--- obter a largura como o restante da diviso inteira por 5 ticks
int width=tick_counter%5;
//--- iterao em todos os nveis horizontais e definir espessura
for(int l=0;l<3;l++)
IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Definir a cor da linha horizontal na janela separada do indicador|
//+------------------------------------------------------------------+
void ChangeLevelColor(int level,

// nmero de linha horizontal

int tick_number,// dividendo, para obter o nmero do restante da diviso


int f_trigger,

// primeiro divisor de comutao de cor

int s_trigger,

// segundo divisor de comutao de cor

int t_trigger)

// terceiro divisor de comutao de cor

{
static color colors[3]={clrRed,clrBlue,clrGreen};
//--- ndice de cor a partir do array colors[]
int index=-1;
//--- calcular o nmero de cor a partir do array colors[] para pintar linha horizontal
if(tick_number%f_trigger==0)
index=0;

// se tick_number divide por f_trigger sem o restante

if(tick_number%s_trigger==0)
index=1;

// se tick_number divide por s_trigger sem o restante

2000-2014, MetaQuotes Software Corp.

1442

Indicadores Customizados
if(tick_number%t_trigger==0)
index=2;

// se tick_number divide por t_trigger sem o restante

//--- se a cor est definida, estabelea-a


if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//--}
//+------------------------------------------------------------------+
//| Define estilo de linha horizontal na janela do indicador separado|
//+------------------------------------------------------------------+
void ChangeLevelStyle(int level,

// nmero de linha horizontal

int tick_number// nmero para obter o resto da diviso


)
{
//--- array para armazenar estilos
static ENUM_LINE_STYLE styles[5]=
{STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- ndice de estilo a partir do array styles[]
int index=-1;
//--- calcular o nmero a partir do array styles[] para definir a linha horizontal
if(tick_number%50==0)
index=5;

// se tick_number divide por 50 sem o restante, ento o estilo STYLE_DASHDOTDOT

if(tick_number%40==0)
index=4;

// ... style is STYLE_DASHDOT

if(tick_number%30==0)
index=3;

// ... STYLE_DOT

if(tick_number%20==0)
index=2;

// ... STYLE_DASH

if(tick_number%10==0)
index=1;

// ... STYLE_SOLID

//--- se o estilo est definido, estabelea-o


if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
}

Tambm Veja
Propriedades de Indicador Personalizado, Propriedades (#property) de programa, Estilos de Desenho

2000-2014, MetaQuotes Software Corp.

1443

Indicadores Customizados

IndicatorSetString
A funo define o valor da propriedade do indicador correspondente. Propriedade do indicador deve
ser do tipo string. Existem duas variantes da funo.
Chamar especificando o identificador da propriedade.
bool IndicatorSetString(
int

prop_id,

string prop_value

// identificador
// valor a ser definido

);

Chamar especificando o identificador e o modificador da propriedade.


bool IndicatorSetString(
int

prop_id,

// identificador

int

prop_modifier,

// modificador

string prop_value

// valor a ser definido

Parmetros
prop_id
[in] Identificador da propriedade do indicador. O valor pode ser um dos valores do enumerador
ENUM_CUSTOMIND_PROPERTY_STRING.
prop_modifier
[in] Modificador da propriedade especfica. Somente as propriedades de nvel requerem um
modificador.
prop_value
[in] Valor de propriedade.
Valor do Retorno
Em caso de execuo bem sucedida, retorna true, do contrrio - false.
Observao
Numerao das propriedades (modificadores) comea a partir de 1 (um) quando usa a diretiva de
#property, enquanto que a funo usa numerao a partir de (zero). No caso do nmero de nvel ser
definido incorretamente, o visor do indicador pode ser diferente do pretendido.
Por exemplo, na ordem para definir a descrio da primeira linha horizontal usar o ndice zero:
IndicatorSetString(INDICATOR_LEVELTEXT, 0, "Primeiro Nvel") - ndice 0 usado para definir a
descrio de texto do primeiro nvel.
Exemplo: indicador que define etiquetas de texto para as linhas horizontais do indicador.

2000-2014, MetaQuotes Software Corp.

1444

Indicadores Customizados

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- visualiza trs nveis horizontais na janela separada
#property indicator_level1 30
#property indicator_level2 50
#property indicator_level3 70
//--- definir a cor dos nveis horizontais
#property indicator_levelcolor clrRed
//--- definir o estilo dos nveis horizontais
#property indicator_levelstyle STYLE_SOLID
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- definir as descries dos nveis horizontais
IndicatorSetString(INDICATOR_LEVELTEXT,0,"Primeiro Nvel (ndice 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Segundo Nvel (ndice 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Terceiro Nvel (ndice 2)");
//--- define o mome abreviado para o indicador
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetString() Demo");
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

2000-2014, MetaQuotes Software Corp.

1445

Indicadores Customizados
//+------------------------------------------------------------------+
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[])
{
//--//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}

Tambm Veja
Propriedades de Indicador Personalizado, Propriedades (#property) de Programa

2000-2014, MetaQuotes Software Corp.

1446

Indicadores Customizados

PlotIndexSetDouble
A funo define o valor da propriedade correspondente da linha do indicador correspondente. A
propriedade indicador deve ser do tipo double.
bool PlotIndexSetDouble(
int

plot_index,

// plotando o ndice do estilo

int

prop_id,

// propriedade identificador

double prop_value

// valor para ser definido

);

Parmetros
plot_index
[in] ndice de plotagem grfica
prop_id
[in] O valor pode ser um dos valores do enumerador ENUM_PLOT_PROPERTY_DOUBLE.
prop_value
[in] O valor da propriedade.
Valor do Retorno
Se com sucesso, retorna true, do contrrio false.

2000-2014, MetaQuotes Software Corp.

1447

Indicadores Customizados

PlotIndexSetInteger
A funo define o valor da propriedade correspondente da linha do indicador correspondente. A
propriedade do indicador deve ser do tipo int, char, bool ou color. Existem 2 variantes da funo.
Chamar indicando o identificador da propriedade.
bool PlotIndexSetInteger(
int plot_index,

// plotagem do ndice do estilo

int prop_id,

// propriedade identificador

int prop_value

// valor a ser definido

);

Chamar indicando o identificador e o modificador da propriedade.


bool PlotIndexSetInteger(
int plot_index,

// plotagem do ndice do estilo

int prop_id,

// propriedade identificador

int prop_modifier,

// propriedade modificador

int prop_value

// valor a ser definido

Parmetros
plot_index
[in] ndice de plotagem grfica
prop_id
[in] O valor pode ser um dos valores do enumerador ENUM_PLOT_PROPERTY_INTEGER.
prop_modifier
[in] Modificador da propriedade especfica. Somente as propriedades de nvel requerem um
modificador.
prop_value
[in] O valor da propriedade.
Valor do Retorno
Se com sucesso, retorna true, do contrrio false.
Exemplo: um indicador que desenha uma linha de trs cores. O esquema de cores muda a cada 5
ticks.

2000-2014, MetaQuotes Software Corp.

1448

Indicadores Customizados

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//---- plotar ColorLine


#property indicator_label1

"ColorLine"

#property indicator_type1

DRAW_COLOR_LINE

#property indicator_color1

clrRed,clrGreen,clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- buffers do indicador


double

ColorLineBuffer[];

double

ColorBuffer[];

int

MA_handle;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,ColorLineBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX);
//--- obter manipulador MA
MA_handle=iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE);
//--}
//+------------------------------------------------------------------+
//| Obter ndice de cor

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1449

Indicadores Customizados
int getIndexOfColor(int i)
{
int j=i%300;
if(j<100) return(0);// primeiro ndice
if(j<200) return(1);// segundo ndice
return(2); // terceiro ndice
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--static int ticks=0,modified=0;
int limit;
//--- primeiro clculo ou nmero de barras foi alterado
if(prev_calculated==0)
{
//--- copia valores da MA dentro do buffer do indicador ColorLineBuffer
int copied=CopyBuffer(MA_handle,0,0,rates_total,ColorLineBuffer);
if(copied<=0) return(0);// cpia falhou - lanar fora
//--- agora definir a cor da linha para cada barra
for(int i=0;i<rates_total;i++)
ColorBuffer[i]=getIndexOfColor(i);
}
else
{
//--- copia valores da MA dentro do buffer do indicador ColorLineBuffer
int copied=CopyBuffer(MA_handle,0,0,rates_total,ColorLineBuffer);
if(copied<=0) return(0);
ticks++;// contando ticks
if(ticks>=5)// hora de mudar o esquema de cores
{
ticks=0; // zerar o contador
modified++; // contador de mudanas de cor
if(modified>=3)modified=0;// zerar o contador
ResetLastError();
switch(modified)
{

2000-2014, MetaQuotes Software Corp.

1450

Indicadores Customizados
case 0:// primeiro esquema de cor
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrRed);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBlue);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrGreen);
Print("Esquema de cor "+modified);
break;
case 1:// segundo esquema de cor
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrYellow);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrPink);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrLightSlateGray);
Print("Esquema de cor "+modified);
break;
default:// terceiro esquema de cor
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrLightGoldenrod);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrOrchid);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrLimeGreen);
Print("Esquema de cor "+modified);
}
}
else
{
//--- definir posio inicial
limit=prev_calculated-1;
//--- Agora vamos definir a cor da linha para cada barra
for(int i=limit;i<rates_total;i++)
ColorBuffer[i]=getIndexOfColor(i);
}
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1451

Indicadores Customizados

PlotIndexSetString
A funo define o valor da propriedade correspondente da linha do indicador correspondente. A
propriedade indicador deve ser do tipo string.
bool PlotIndexSetString(
int

plot_index,

// plotando o ndice do estilo

int

prop_id,

// propriedade identificador

string prop_value

// valor para ser definido

);

Parmetros
plot_index
[in] ndice de representao grfica
prop_id
[in] O valor pode ser um dos valores do enumerador ENUM_PLOT_PROPERTY_STRING.
prop_value
[in] O valor da propriedade.
Valor do Retorno
Se com sucesso, retorna true, do contrrio false.

2000-2014, MetaQuotes Software Corp.

1452

Indicadores Customizados

PlotIndexGetInteger
A funo define o valor da propriedade correspondente da linha do indicador correspondente. A
propriedade do indicador deve ser do tipo int, color, bool ou char. Existem 2 variantes da funo.
Chamar indicando o identificador da propriedade.
int PlotIndexGetInteger(
int plot_index,

// plotagem do ndice do estilo

int prop_id,

// propriedade identificador

);

Chamar indicando o identificador e o modificador da propriedade.


int PlotIndexGetInteger(
int plot_index,

// plotagem do ndice

int prop_id,

// propriedade identificador

int prop_modifier

// propriedade modificador

Parmetros
plot_index
[in] ndice de plotagem grfica
prop_id
[in] O valor pode ser um dos valores do enumerador ENUM_PLOT_PROPERTY_INTEGER.
prop_modifier
[in] Modificador da propriedade especfica. Somente as propriedades de nvel requerem um
modificador.
Observao
Funo projetado para extrair as configuraes do desenho da linha da indicador apropriada. A
funo trabalha em conjunto com a funo PlotIndexSetInteger para copiar as propriedades de
desenho de uma linha para outra.
Exemplo: um indicador que colore as velas dependendo do dia da semana. Cores para cada dia so
criados de uma maneira programada.

2000-2014, MetaQuotes Software Corp.

1453

Indicadores Customizados

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots

//---- plotar ColorCandles


#property indicator_label1

"ColorCandles"

#property indicator_type1

DRAW_COLOR_CANDLES

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- buffers do indicador


double

OpenBuffer[];

double

HighBuffer[];

double

LowBuffer[];

double

CloseBuffer[];

double

ColorCandlesColors[];

color

ColorOfDay[6]={CLR_NONE,clrMediumSlateBlue,
clrDarkGoldenrod,clrForestGreen,clrBlueViolet,clrRed};

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
void OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
SetIndexBuffer(4,ColorCandlesColors,INDICATOR_COLOR_INDEX);
//--- definir o nmero de cores em buffer de cor

2000-2014, MetaQuotes Software Corp.

1454

Indicadores Customizados
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,6);
//--- definir cores para o buffer de cores
for(int i=1;i<6;i++)
PlotIndexSetInteger(0,PLOT_LINE_COLOR,i,ColorOfDay[i]);
//--- define acuracidade
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
printf("We have %u colors of days",PlotIndexGetInteger(0,PLOT_COLOR_INDEXES));
//--}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--int i;
MqlDateTime t;
//---if(prev_calculated==0) i=0;
else i=prev_calculated-1;
//---while(i<rates_total)
{
OpenBuffer[i]=open[i];
HighBuffer[i]=high[i];
LowBuffer[i]=low[i];
CloseBuffer[i]=close[i];
//--- definir a cor de cada vela
TimeToStruct(time[i],t);
ColorCandlesColors[i]=t.day_of_week;
//--i++;
}
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1455

Funes de Objeto

Funes de Objeto
Este o grupo de funes destinadas ao trabalho com objetos grficos relativos a qualquer grfico
especifico.
The functions defining the properties of graphical objects, as well as ObjectCreate() and ObjectMove()
operations for creating and moving objects along the chart are actually used for sending commands to
the chart. If these functions are executed successfully, the command is included in the common queue
of the chart events. Visual changes in the properties of graphical objects are implemented when
handling the queue of the chart events.
Thus, do not expect an immediate visual update of graphical objects after calling these functions.
Generally, the graphical objects on the chart are 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 graphical objects.
Funo

Ao

ObjectCreate

Cria um objecto de tipo especfico para um


grfico especfico

ObjectName

Retorna o nome de um objeto do tipo


correspondente para um grfico especfico
(grfico de sub-janela especfica)

ObjectDelete

Remove o objeto com o nome especfico a


partir de um grfico especfico (a partir de
grfico de sub-janela especfica)

ObjectsDeleteAll

Remove todos os objetos com o tipo especfico


a partir de um grfico especfico (a partir de
grfico de sub-janela especfica)

ObjectFind

Pesquisa um objeto com o ID especificado pelo


nome

ObjectGetTimeByValue

Retorna o valor de tempo ao valor do preo do


objeto especifico

ObjectGetValueByTime

Retorna o valor do preo de um objeto ao


perodo especificado

ObjectMove

Muda as coordenadas do ponto de ancoragem


do objeto especificado

ObjectsTotal

Retorna o nmero de objetos do tipo especifico


no grfico especificado (grfico de sub-janela
especfica)

ObjectGetDouble

Retorna o valor double da propriedade do


objeto correspondente

ObjectGetInteger

Retorna o valor integer da propriedade do


objeto correspondente

ObjectGetString

Retorna o valor string da propriedade do objeto

2000-2014, MetaQuotes Software Corp.

1456

Funes de Objeto

correspondente
ObjectSetDouble

Define o valor da propriedade do objeto


correspondente

ObjectSetInteger

Define o valor da propriedade do objeto


correspondente

ObjectSetString

Define o valor da propriedade do objeto


correspondente

TextSetFont

Define a fonte para exibir o texto usando


mtodos de desenho (Arial 20, usado por
padro)

TextOut

Transfere o texto para um array personalizado


(buffer) projetado para a criao de recursos
grficos

TextGetSize

Retorna a largura e a altura da string nas


configuraes das fontes usadas no momento

Todos os objetos grficos devem ter um nico nome dentro de um grfico, incluindo suas sub-janelas.
Mudana de nome de um objeto grfico gera dois eventos: evento de excluso de um objeto com o
antigo nome, e evento de criao de um objeto com um novo nome.
Aps um objeto ser criado ou uma propriedade de objeto ser modificada, recomendado chamar a
funo ChartRedraw(), a qual comanda o terminal do cliente, forando o desenho de um grfico (e
todos os objetos visveis dentro dele).

2000-2014, MetaQuotes Software Corp.

1457

Funes de Objeto

ObjectCreate
A funo cria um objeto com o nome especifico, o tipo e as coordenadas iniciais na sub-janela de
grfico especifico. Durante a criao at 30 coordenadas podem ser especificadas.
bool ObjectCreate(
long

chart_id,

// identificador grfico

string

name,

// nome objeto

ENUM_OBJECT

type,

// tipo objeto

sub_window

nwin,

// ndice janela

datetime

time1,

// tempo do primeiro ponto de ancoragem

double

price1,

// preo do primeiro ponto de ancoragem

datetime

timeN=0,

// tempo de N ponto de ancoragem

double

priceN=0,

// preo de N ponto de ancoragem

datetime

time30=0,

// tempo do trigsimo ponto de ancoragem

double

price30=0

// preo do trigsimo ponto de ancoragem

...

...

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto. O nome deve ser nico dentro de um grfico, incluindo suas sub-janelas.
type
[in] Tipo do e objeto. O valor pode ser um dos valores do enumerador ENUM_OBJECT.
sub_window
[in] Nmero de sub-janela do grfico. 0 (zero) significa a principal janela do grfico. A sub-janela
especifica deve existir, caso contrrio, a funo retorna false.
time1
[in] A coordenada do tempo da primeira ancoragem.
price1
[in] A coordenada do preo do primeiro ponto de ancoragem.
timeN=0
[in] Tempo de N ponto de ancoragem.
priceN=0
[in] A coordenada do preo de N ponto de ancoragem.
time30=0
[in] A coordenada de tempo de N ponto de ancoragem.
price30=0
[in] A coordenada do preo do trigsimo ponto de ancoragem.

2000-2014, MetaQuotes Software Corp.

1458

Funes de Objeto

Valor do Retorno
Retorna verdadeiro ou falso independente se o objeto criado ou no. Para ler mais sobre o erro
chamar GetLastError(). Se o objeto j foi criado, a funo tenta mudar suas coordenadas.
Observao
A numerao das sub-janelas do grfico (se houver sub-janelas com indicadores no grfico) comea
com 1. A janela principal do grfico sempre tem ndice 0.
O maior nmero de pontos de ancoragem (at 30) implementado para uso futuro. Ao mesmo
tempo, o limite de 30 possveis pontos de ancoragem para os objetos grficos determinado pela
limitao do nmero de parmetros (no mais do que 64), que pode ser usado quando chama uma
funo.
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.
H um certo nmero de pontos de ancoragem que devem ser especificados durante a criao de
cada tipo de objeto:
ID

Description

Pontos de Ancoragem

OBJ_VLINE

Linha Vertical

Um ponto de ancoragem.
Efetivamente
apenas
as
coordenadas de tempo so
usadas.

OBJ_HLINE

Linha Horizontal

Um ponto de ancoragem.
Efetivamente
apenas
a
coordenada de preo usada.

OBJ_TREND

Linha de Tendncia

Dois pontos para Ancoragem.

OBJ_TRENDBYANGLE

Linha de Tendncia por ngulo

Dois pontos para Ancoragem.

OBJ_CYCLES

Linhas de Ciclo

Dois pontos para Ancoragem.

OBJ_ARROWED_LINE

Linha de Seta

Dois pontos para Ancoragem.

OBJ_CHANNEL

Canal Eqidistante

Trs pontos para Ancoragem.

OBJ_STDDEVCHANNEL

Canal de Desvio Padro

Dois pontos para Ancoragem.

OBJ_REGRESSION

Canal de Regresso Linear

Dois pontos para Ancoragem.

OBJ_PITCHFORK

Forquilha de Andrews

Trs pontos para Ancoragem.

OBJ_GANNLINE

Linha Gann

Dois pontos para Ancoragem.

OBJ_GANNFAN

Ventilador Gann

Dois pontos para Ancoragem.

OBJ_GANNGRID

Grade Gann

Dois pontos para Ancoragem.

OBJ_FIBO

Retrao de Fibonacci

Dois pontos para Ancoragem.

OBJ_FIBOTIMES

Fusos Horrios de Fibonacci

Dois pontos para Ancoragem.

2000-2014, MetaQuotes Software Corp.

1459

Funes de Objeto

OBJ_FIBOFAN

Fibonacci Fan

Dois pontos para Ancoragem.

OBJ_FIBOARC

Arcos de Fibonacci

Dois pontos para Ancoragem.

OBJ_FIBOCHANNEL

Canal de Fibonacci

Trs pontos para Ancoragem.

OBJ_EXPANSION

Expanso de Fibonacci

Trs pontos para Ancoragem.

OBJ_ELLIOTWAVE5

Onda Motriz de Elliott

Dois pontos para Ancoragem.

OBJ_ELLIOTWAVE3

Onde de Correo de Elliott

Trs pontos para Ancoragem.

OBJ_RECTANGLE

Rectangle

Dois pontos para Ancoragem.

OBJ_TRIANGLE

Triangle

Trs pontos para Ancoragem.

OBJ_ELLIPSE

Ellipse

Trs pontos para Ancoragem.

OBJ_ARROW_THUMB_UP

Polegares para cima

Um ponto de ancoragem.

OBJ_ARROW_THUMB_DOWN

Polegar para Baixo

Um ponto de ancoragem.

OBJ_ARROW_UP

Seta para cima

Um ponto de ancoragem.

OBJ_ARROW_DOWN

Seta para baixo

Um ponto de ancoragem.

OBJ_ARROW_STOP

Sinal Stop

Um ponto de ancoragem.

OBJ_ARROW_CHECK

Conferido

Um ponto de ancoragem.

OBJ_ARROW_LEFT_PRICE

Etiqueta de Preo Esquerda

Um ponto de ancoragem.

OBJ_ARROW_RIGHT_PRICE

Rtulo de Preo Direito

Um ponto de ancoragem.

OBJ_ARROW_BUY

Comprar

Um ponto de ancoragem.

OBJ_ARROW_SELL

Vender

Um ponto de ancoragem.

OBJ_ARROW

Seta

Um ponto de ancoragem.

OBJ_TEXT

Text

Um ponto de ancoragem.

OBJ_LABEL

Rtulo

Posio ser definida usando


as
propriedades
OBJPROP_XDISTANCE
e
OBJPROP_YDISTANCE.

OBJ_BUTTON

Boto

Posio ser definida usando


as
propriedades
OBJPROP_XDISTANCE
e
OBJPROP_YDISTANCE.

OBJ_CHART

Grfico

Posio ser definida usando


as
propriedades
OBJPROP_XDISTANCE
e
OBJPROP_YDISTANCE.

OBJ_BITMAP

Bitmap

Um ponto de ancoragem.

OBJ_BITMAP_LABEL

Rtulo Bitmap

Posio ser definida usando


as
propriedades

2000-2014, MetaQuotes Software Corp.

1460

Funes de Objeto

OBJPROP_XDISTANCE
OBJPROP_YDISTANCE.

OBJ_EDIT

Edit

Posio ser definida usando


as
propriedades
OBJPROP_XDISTANCE
e
OBJPROP_YDISTANCE.

OBJ_EVENT

O
objeto
"Evento"
correspondendo a um evento
no calendrio econmico

Um ponto de ancoragem.
Efetivamente
apenas
as
coordenadas de tempo so
usadas.

OBJ_RECTANGLE_LABEL

O objeto "Rtulo de Retngulo"


para criao e design de
interface grfico customizada.

Posio ser definida usando


as
propriedades
OBJPROP_XDISTANCE
e
OBJPROP_YDISTANCE.

2000-2014, MetaQuotes Software Corp.

1461

Funes de Objeto

ObjectName
A funo retorna o nome do objeto correspondente no grfico determinado, na sub-janela especfica,
de tipo especfico.
string ObjectName(
long chart_id,

// identificador grfico

int

pos,

// nmero da lista de objetos

int

sub_window=-1,

// ndice janela

int

type=-1

// tipo objeto

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
pos
[in] Nmero ordinal do objeto de acordo com o filtro especfico pelo nmero e tipo de sub-janela.
sub_window=-1
[in] Nmero de sub-janela do grfico. 0 significa janela do grfico principal, -1 significa todas
sub-janelas do grfico, incluindo a janela principal.
type=-1
[in] Tipo de objeto. O valor pode ser um dos valores do enumerador ENUM_OBJECT. -1 significa
todos os tipos.
Valor do Retorno
Nome do objeto retornado em caso de sucesso.
Observao
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.

2000-2014, MetaQuotes Software Corp.

1462

Funes de Objeto

ObjectDelete
A funo remove o objeto com nome especfico a partir de um grfico especificado.
bool ObjectDelete(
long

chart_id,

string name

// identificador grfico
// nome objeto

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto para ser deletado.
Valor do Retorno
Retorna verdadeiro se a remoo for bem sucedida, caso contrrio, retorna false. Para ler mais
sobre o erro, chamar GetLastError().
Observao
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.

2000-2014, MetaQuotes Software Corp.

1463

Funes de Objeto

ObjectsDeleteAll
Remove todos os objetos a partir de um grfico especfico, especfica sub-janela do grfico, do tipo
especificado.
int ObjectsDeleteAll(
long chart_id,

// identificador grfico

int

sub_window=-1,

// ndice janela

int

type=-1

// tipo objeto

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
sub_window=-1
[in] Nmero de sub-janelas do grfico. 0 significa janela do grfico principal, -1 significa todas
sub-janelas do grfico, incluindo a janela principal.
type=-1
[in] Tipo de objeto. O valor pode ser um dos valores do enumerador ENUM_OBJECT. -1 significa
todos os tipos.
Valor do Retorno
Retorna o nmero de objetos excludos. Para ler mais sobre o erro, chamar GetLastError().

2000-2014, MetaQuotes Software Corp.

1464

Funes de Objeto

ObjectFind
A funo pesquisa por um objeto com o nome especfico no grfico com o ID especifico.
int ObjectFind(
long

chart_id,

string name

// identificador grfico
// nome objeto

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] O nome do objeto pesquisado.
Valor do Retorno
Se for bem sucedido, a funo retorna o nmero da sub-janela (0 significa a janela principal do
grfico), no qual o objeto foi encontrado. Se o objeto no for encontrado, a funo retorna um
nmero negativo. Para ler mais sobre o erro, chamar GetLastError().
Observao
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.

2000-2014, MetaQuotes Software Corp.

1465

Funes de Objeto

ObjectGetTimeByValue
A funo retorna o valor de tempo para o valor do preo especfico de um objeto especfico.
datetime ObjectGetTimeByValue(
long

chart_id,

// identificador grfico

string name,

// nome objeto

double value,

// Preo

int

// Nmero linha

line_id

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
value
[in] Valor do preo.
line_id
[in] Identificador de linha.
Valor do Retorno
O valor de tempo para o valor de determinado preo de um objeto especfico.
Observao
Um objeto pode ter vrios valores em uma coordenada de preo, portanto necessrio especificar o
nmero da linha. Esta funo aplica-se apenas aos seguintes objetos:
Linha de Tendncia (OBJ_TREND)
Linha de tendncia pelo ngulo (OBJ_TRENDBYANGLE)
Linha de Gann(OBJ_GANNLINE)
Canal eqidistante (OBJ_CHANNEL) - 2 linhas
Canal de regresso Linear (OBJ_REGRESSION) - 3 linhas
Canal de desvio padro (OBJ_STDDEVCHANNEL) - 3 linhas
Linha com setas (OBJ_ARROWED_LINE)
Tambm Veja
Tipos de Objeto

2000-2014, MetaQuotes Software Corp.

1466

Funes de Objeto

ObjectGetValueByTime
A funo retorna o valor do preo para o valor de tempo indicado de um objeto especfico.
double ObjectGetValueByTime(
long

chart_id,

// identificador grfico

string

name,

// nome objeto

datetime time,

// Tempo

int

// Nmero Linha

line_id

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
time
[in] Valor de tempo.
line_id
[in] ID de Linha.
Valor do Retorno
O valor do preo para o valor de tempo indicado de um objeto especfico.
Observao
Um objeto pode ter vrios valores em uma coordenada de preo, portanto necessrio especificar o
nmero da linha. Esta funo aplica-se apenas aos seguintes objetos:
Linha de Tendncia (OBJ_TREND)
Linha de tendncia pelo ngulo (OBJ_TRENDBYANGLE)
Linha de Gann(OBJ_GANNLINE)
Canal eqidistante (OBJ_CHANNEL) - 2 linhas
Canal de regresso Linear (OBJ_REGRESSION) - 3 linhas
Canal de desvio padro (OBJ_STDDEVCHANNEL) - 3 linhas
Linha com setas (OBJ_ARROWED_LINE)
Tambm Veja
Tipos de Objeto

2000-2014, MetaQuotes Software Corp.

1467

Funes de Objeto

ObjectMove
A funo altera as coordenadas do ponto de ancoragem do objeto especfico.
bool ObjectMove(
long

chart_id,

// identificador grfico

string

name,

// nome objeto

int

point_index,

// nmero ponto ancoragem

datetime time,

// Tempo

double

// Preo

price

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
point_index
[in] ndice do ponto de ancoragem. O nmero de pontos de ancoragem depende do tipo de objeto.
time
[in] Coordenada de tempo do ponto de ancoragem selecionado.
price
[in] Coordenada de preo do ponto de ancoragem selecionado.
Valor do Retorno
Se bem sucedido, retorna true, em caso de falha, retorna false. Para ler mais sobre o erro, chamar
GetLastError().

2000-2014, MetaQuotes Software Corp.

1468

Funes de Objeto

ObjectsTotal
A funo retorna o nmero de objetos na tabela determinada, sub-janela especifica, do tipo
especificado.
int ObjectsTotal(
long chart_id,

// identificador grfico

int

sub_window=-1,

// ndice janela

int

type=-1

// tipo objeto

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
sub_window=-1
[in] Nmero de sub-janela do grfico. 0 significa janela do grfico principal, -1 significa todas
sub-janelas do grfico, incluindo a janela principal.
type=-1
[in] Tipo de objeto. O valor pode ser um dos valores do enumerador ENUM_OBJECT. -1 significa
todos os tipos.
Valor do Retorno
O nmero de objetos.

2000-2014, MetaQuotes Software Corp.

1469

Funes de Objeto

ObjectSetDouble
A funo define o valor da propriedade do objeto correspondente. A propriedade objeto deve ser do
tipo double. Existem 2 variantes da funo.
Define valor da propriedade, sem modificador
bool ObjectSetDouble(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

// propriedade

prop_id,

double prop_value

// valor

);

Define um valor de propriedade que indica o modificador


bool ObjectSetDouble(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// propriedade

int

prop_modifier,

// modificador

double prop_value

// valor

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_DOUBLE.
prop_modifier
[in] Modificador da propriedade especfica. Ela indica o nmero do nvel em ferramentas
Fibonacci e no objeto grfico Tridente de Andrew. A numerao dos nveis comea a partir do
zero.
prop_value
[in] O valor da propriedade.
Valor do Retorno
A funo retorna true somente se o comando para alterar as propriedades de um objeto grfico foi
enviado a um grfico com sucesso. Do contrrio ele retorna false. Para ler mais sobre o erro,
chamar GetLastError().
Exemplo de criao de um objeto Fibonacci e adicionando um novo nvel nele
//| Programa Script da funo start (iniciar)

2000-2014, MetaQuotes Software Corp.

1470

Funes de Objeto
//+------------------------------------------------------------------+
void OnStart()
{
//--- arrays auxiliares
double high[],low[],price1,price2;
datetime time[],time1,time2;
//--- Copiar os preos de abertura - 100 barras mais recentes so suficientes
int copied=CopyHigh(Symbol(),0,0,100,high);
if(copied<=0)
{
Print("Falha ao copiar os valores da srie de preos de Alta");
return;
}
//--- Copiar os preo de fechamento - mais de 100 barras so suficientes
copied=CopyLow(Symbol(),0,0,100,low);
if(copied<=0)
{
Print("Falha ao copiar os valores da srie de preos de Baixa");
return;
}
//--- Copiar os tempos de abertura para as ltimas 100 barras
copied=CopyTime(Symbol(),0,0,100,time);
if(copied<=0)
{
Print("Falha ao copiar os valores da srie de preos de tempo");
return;
}
//--- Organizar o acesso aos dados copiados como para timeseries - retrocesso
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(time,true);
//--- Coordenadas do primeiro ponto de ancoragem do objeto Fibo
price1=high[70];
time1=time[70];
//--- Coordenadas do segundo ponto de ancoragem do objeto Fibo
price2=low[50];
time2=time[50];
//--- Tempo para criar o objeto Fibo
bool created=ObjectCreate(0,"Fibo",OBJ_FIBO,0,time1,price1,time2,price2);
if(created) // Se o objeto for criado com sucesso
{
//--- definir a cor dos nveis de Fibo
ObjectSetInteger(0,"Fibo",OBJPROP_LEVELCOLOR,Blue);
//--- a propsito, quanto nveis Fibo temos?
int levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
Print("Fibo levels before = ",levels);
//---sada para Jornal => nmero de nvel: valor level_desription

2000-2014, MetaQuotes Software Corp.

1471

Funes de Objeto
for(int i=0;i<levels;i++)
{
Print(i,": ",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
"

",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));

}
//--- Tentar aumentar o nmero de nveis por unidade
bool modified=ObjectSetInteger(0,"Fibo",OBJPROP_LEVELS,levels+1);
if(!modified) // falha ao alterar o nmero de nveis
{
Print("Falhou ao alterar o nmero de nveis da Fibo, erro ",GetLastError());
}
//--- apenas informa
Print("Nveis de Fibo depois = ",ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS));
//--- definir um valor para um nvel recm-criado
bool added=ObjectSetDouble(0,"Fibo",OBJPROP_LEVELVALUE,levels,133);
if(added) // conseguiu definir um valor para o nvel
{
Print("Definido com sucesso mais um nvel Fibo");
//--- Tambm no se esquea de definir o nvel da descrio
ObjectSetString(0,"Fibo",OBJPROP_LEVELTEXT,levels,"my level");
ChartRedraw(0);
//--- Obter o valor real do nmero de nveis no objeto Fibo
levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
Print("Nveis de Fibo depois de adicionar = ",levels);
//--- mais uma vez a sada de todos os nveis - s para ter certeza
for(int i=0;i<levels;i++)
{
Print(i,":",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
"

",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));

}
}
else // Falha se voc tentar aumentar o nmero de nveis no objeto Fibo
{
Print("Falhou ao definir mais um nvel Fibo. Error ",GetLastError());
}
}
}

Tambm Veja
Tipos de Objetos, Propriedades de objeto

2000-2014, MetaQuotes Software Corp.

1472

Funes de Objeto

ObjectSetInteger
A funo define o valor da propriedade do objeto correspondente. A propriedade do objeto deve ser do
tipo datetime,int,color,boolouchar. Existem 2 variantes da funo.
Define valor da propriedade, sem modificador
bool ObjectSetInteger(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// propriedade

long

prop_value

// valor

);

Define um valor de propriedade que indica o modificador


bool ObjectSetInteger(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// propriedade

int

prop_modifier,

// modificador

long

prop_value

// valor

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_INTEGER.
prop_modifier
[in] Modificador da propriedade especfica. Indica o nmero do nvel em ferramentas Fibonacci e
no objeto grfico do tipo Tridente de Andrew. A numerao dos nveis comea a partir do zero.
prop_value
[in] O valor da propriedade.
Valor do Retorno
A funo retorna true somente se o comando para alterar as propriedades de um objeto grfico foi
enviado a um grfico com sucesso. Do contrrio ele retorna false. Para ler mais sobre o erro,
chamar GetLastError().
Um exemplo de como criar uma tabela de cores da Web
//+------------------------------------------------------------------+
//|

Tabela de Cores da Web|

2000-2014, MetaQuotes Software Corp.

1473

Funes de Objeto
//|

Copyright 2011, MetaQuotes Software Corp |

//|

http://www.metaquotes.net |

//+------------------------------------------------------------------+
#define X_SIZE 140

// largura de uma edio de objeto

#define Y_SIZE 33

// altura de uma edio de objeto

//+------------------------------------------------------------------+
//| Array de cores da Web

//+------------------------------------------------------------------+
color ExtClr[140]=
{

clrAliceBlue,clrAntiqueWhite,clrAqua,clrAquamarine,clrAzure,clrBeige,clrBisque,clrBlack,clrBlanc

clrBlue,clrBlueViolet,clrBrown,clrBurlyWood,clrCadetBlue,clrChartreuse,clrChocolate,clrCoral,clr

clrCornsilk,clrCrimson,clrCyan,clrDarkBlue,clrDarkCyan,clrDarkGoldenrod,clrDarkGray,clrDarkGreen

clrDarkMagenta,clrDarkOliveGreen,clrDarkOrange,clrDarkOrchid,clrDarkRed,clrDarkSalmon,clrDarkSea

clrDarkSlateBlue,clrDarkSlateGray,clrDarkTurquoise,clrDarkViolet,clrDeepPink,clrDeepSkyBlue,clrD

clrDodgerBlue,clrFireBrick,clrFloralWhite,clrForestGreen,clrFuchsia,clrGainsboro,clrGhostWhite,c

clrGoldenrod,clrGray,clrGreen,clrGreenYellow,clrHoneydew,clrHotPink,clrIndianRed,clrIndigo,clrIv

clrLavender,clrLavenderBlush,clrLawnGreen,clrLemonChiffon,clrLightBlue,clrLightCoral,clrLightCya

clrLightGoldenrod,clrLightGreen,clrLightGray,clrLightPink,clrLightSalmon,clrLightSeaGreen,clrLig

clrLightSlateGray,clrLightSteelBlue,clrLightYellow,clrLime,clrLimeGreen,clrLinen,clrMagenta,clrM

clrMediumAquamarine,clrMediumBlue,clrMediumOrchid,clrMediumPurple,clrMediumSeaGreen,clrMediumSla

clrMediumSpringGreen,clrMediumTurquoise,clrMediumVioletRed,clrMidnightBlue,clrMintCream,clrMisty

clrNavajoWhite,clrNavy,clrOldLace,clrOlive,clrOliveDrab,clrOrange,clrOrangeRed,clrOrchid,clrPale

clrPaleGreen,clrPaleTurquoise,clrPaleVioletRed,clrPapayaWhip,clrPeachPuff,clrPeru,clrPink,clrPlu

clrPurple,clrRed,clrRosyBrown,clrRoyalBlue,clrSaddleBrown,clrSalmon,clrSandyBrown,clrSeaGreen,cl

clrSienna,clrSilver,clrSkyBlue,clrSlateBlue,clrSlateGray,clrSnow,clrSpringGreen,clrSteelBlue,clr

clrThistle,clrTomato,clrTurquoise,clrViolet,clrWheat,clrWhite,clrWhiteSmoke,clrYellow,clrYellowG
};
//+------------------------------------------------------------------+
//| Criando e inicializando uma edio de objeto

//+------------------------------------------------------------------+
void CreateColorBox(int x,int y,color c)
{
//--- gerar um nome para uma nova edio de objeto
string name="ColorBox_"+(string)x+"_"+(string)y;
//--- criar uma nova edio de objeto
if(!ObjectCreate(0,name,OBJ_EDIT,0,0,0))
{
Print("No possvel criar: '",name,"'");
return;
}
//--- definir coordenadas, largura e altura
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x*X_SIZE);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y*Y_SIZE);
ObjectSetInteger(0,name,OBJPROP_XSIZE,X_SIZE);
ObjectSetInteger(0,name,OBJPROP_YSIZE,Y_SIZE);
//--- definir a cor do texto
if(clrBlack==c) ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite);
else

ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);

2000-2014, MetaQuotes Software Corp.

1474

Funes de Objeto
//--- definir a cor de fundo
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,c);
//--- definir o texto
ObjectSetString(0,name,OBJPROP_TEXT,(string)c);
}
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- criar tabela de cores 7x20 para edio de objetos
for(uint i=0;i<140;i++)
CreateColorBox(i%7,i/7,ExtClr[i]);
}

Tambm Veja
Tipos de Objetos, Propriedades de objeto

2000-2014, MetaQuotes Software Corp.

1475

Funes de Objeto

ObjectSetString
A funo define o valor da propriedade do objeto correspondente. A propriedade do objeto deve ser do
tipo string. Existem 2 variantes da funo.
Define valor da propriedade, sem modificador
bool ObjectSetString(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

// propriedade

prop_id,

string prop_value

// valor

);

Define um valor de propriedade que indica o modificador


bool ObjectSetString(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// propriedade

int

prop_modifier,

// modificador

string prop_value

// valor

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_STRING.
prop_modifier
[in] Modificador da propriedade especfica. Indica o nmero do nvel em ferramentas Fibonacci e
no objeto grfico do tipo Tridente de Andrew. A numerao dos nveis comea a partir do zero.
prop_value
[in] O valor da propriedade.
Valor do Retorno
A funo retorna true somente se o comando para alterar as propriedades de um objeto grfico foi
enviado a um grfico com sucesso. Do contrrio ele retorna false. Para ler mais sobre o erro,
chamar GetLastError().
Observao
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():

2000-2014, MetaQuotes Software Corp.

1476

Funes de Objeto
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.

2000-2014, MetaQuotes Software Corp.

1477

Funes de Objeto

ObjectGetDouble
A funo retorna o valor da propriedade do objeto correspondente. A propriedade objeto deve ser do
tipo double. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
double ObjectGetDouble(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier=0

// modificador propriedade, se requerida

);

2. Retorna true ou false, dependendo do sucesso da funo. Se bem sucedido, o valor da


propriedade colocado para receber uma varivel passada como referncia pelo ltimo parmetro.
bool ObjectGetDouble(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier,

// modificador propriedade

double&double_var

// aqui ns aceitamos o valor da propriedade

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_DOUBLE.
prop_modifier
[in] Modificador da propriedade especfica. Para a primeira variante, o modificador tem valor
padro igual a 0. A maioria das propriedades no requerem um modificador. Indica o nmero do
nvel em ferramentas Fibonacci e no objeto grfico do tipo Tridente de Andrew. A numerao dos
nveis comea a partir do zero.
double_var
[out] Varivel do tipo double que recebeu o valor do propriedade solicitada.
Valor do Retorno
Valor do tipo double para a primeira variante chamada.
Para a segunda variante, se essa propriedade mantida e o valor foi colocado na varivel
double_var, a funo retorna true, caso contrrio, retorna false. Para ler mais sobre o erro, chamar
GetLastError().

2000-2014, MetaQuotes Software Corp.

1478

Funes de Objeto

ObjectGetInteger
A funo retorna o valor da propriedade do objeto correspondente. A propriedade do objeto deve ser
do tipo datetime,int,color,boolouchar. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
long ObjectGetInteger(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier=0

// modificador de propriedade, se requerida

);

2. Retorna true ou false, dependendo do sucesso da funo. Se bem sucedido, o valor da


propriedade colocado para receber uma varivel passada como referncia pelo ltimo parmetro.
bool ObjectGetInteger(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier,

// modificador propriedade

long&

long_var

// aqui ns aceitamos o valor da propriedade

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_INTEGER.
prop_modifier
[in] Modificador da propriedade especfica. Para a primeira variante, o modificador tem valor
padro igual a 0. A maioria das propriedades no requerem um modificador. Indica o nmero do
nvel em ferramentas Fibonacci e no objeto grfico do tipo Tridente de Andrew. A numerao dos
nveis comea a partir do zero.
long_var
[out] Varivel do tipo long que recebe o valor da propriedade requisitada.
Valor do Retorno
O valor long para a primeira chamada da variante.
A funo retorna true para a segunda variante, se essa propriedade for mantida e o valor foi
colocado na varivel long_var, caso contrrio, retorna false. Para ler mais sobre o erro, chamar
GetLastError().

2000-2014, MetaQuotes Software Corp.

1479

Funes de Objeto

ObjectGetString
A funo retorna o valor da propriedade do objeto correspondente. A propriedade do objeto deve ser
do tipo string. Existem 2 variantes da funo.
1. Imediatamente retorna o valor da propriedade.
string ObjectGetString(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier=0

// modificador de propriedade, se requisitada

);

2. Retorna true ou false, dependendo do sucesso da funo. Se bem sucedido, o valor da


propriedade colocado para receber uma varivel passada como referncia pelo ltimo parmetro.
bool ObjectGetString(
long

chart_id,

// identificador Grfico

string name,

// nome objeto

int

prop_id,

// identificador propriedade

int

prop_modifier,

// modificador propriedade

string&string_var

// aqui ns aceitamos o valor da propriedade

);

Parmetros
chart_id
[in] Identificador do grfico. Significa o grfico atual.
name
[in] Nome do objeto.
prop_id
[in]
ID da propriedade do objeto. O valor pode ser um dos valores do enumerador
ENUM_OBJECT_PROPERTY_STRING.
prop_modifier
[in] Modificador da propriedade especfica. Para a primeira variante, o modificador tem valor
padro igual a 0. A maioria das propriedades no requerem um modificador. Indica o nmero do
nvel em ferramentas Fibonacci e no objeto grfico do tipo Tridente de Andrew. A numerao dos
nveis comea a partir do zero.
string_var
[out] Varivel do tipo string que recebe o valor das propriedades requisitadas.
Valor do Retorno
Valor string para a primeira verso da chamada.
Retorna true para a segunda verso da chamada, se essa propriedade for mantida e o valor foi
colocado na varivel string_var, caso contrrio, retorna false. Para ler mais sobre o erro, chamar
GetLastError().

2000-2014, MetaQuotes Software Corp.

1480

Funes de Objeto

Observao
Quando um objeto renomeado, dois eventos so formados simultaneamente. Estes eventos podem
ser manipulados em um Expert Advisor ou o indicador pela funo OnChartEvent():
um evento de excluso de um objeto com o nome antigo;
um evento de criao de um objeto com um novo nome.

2000-2014, MetaQuotes Software Corp.

1481

Funes de Objeto

TextSetFont
A funo define a fonte para exibir o texto usando mtodos de desenho e retorna o resultado dessa
operao. Fonte Arial com o tamanho -120 (12 pt) usado por padro.
bool TextSetFont(
const string
int

name,

// nome da fonte ou caminho para o arquivo da fonte no disco

size,

// tamanho da fonte

uint

flags,

// combinao de sinalizadores

int

orientation=0

// ngulo de inclinao do texto

);

Parmetros
name
[in] Nome da fonte no sistema ou o nome do recurso contendo a fonte ou o caminho ao arquivo da
fonte no disco.
size
[in] O tamanho da fonte, que pode ser definida usando valores positivos e negativos. No caso de
valores negativos, o valor definido em dcimos de um ponto e o tamanho do texto depende das
configuraes do sistema operacional ("escala padro" ou "grande escala"). No caso de valores
negativos, o valor definido em dcimos de um ponto e o tamanho do texto depende das
configuraes do sistema operacional ("escala padro" ou "grande escala"). Veja a Nota abaixo
para mais informaes sobre as diferenas entre os modos.
flags
[in] Combinao de sinalizadores descrevendo o estilo da fonte.
orientation
[in] Inclinao horizontal do texto em relao ao eixo X, a unidade de medida 0,1 grau. Isso
significa que orientao=450 est para inclinao igual a 45 graus.
Valor de retorno
Retorna verdadeiro se a fonte atual instalado com xito, caso contrrio falso. Possibilidade de
erros de cdigos:
ERR_INVALID_PARAMETER(4003) - name apresenta NULL ou"" (string vazia),
ERR_INTERNAL_ERROR(4001) - erro de sistema operacional (por exemplo, uma tentativa de criar
uma fonte inexistente).
Observao
Se "::" usado em nome da fonte, a fonte baixada do recurso EX5. Se name nome da fonte
especificado com uma extenso, a fonte baixada do arquivo, se o caminho comea com "\" ou "/",
o arquivo procurado em relao ao diretrio MQL5. Caso contrrio, ele procurado em relao ao
caminho do arquivo EX5 que chamou a funo TextSetFont().
O tamanho da fonte definido usando valores positivos ou negativos. Esse fato define a
dependncia do tamanho do texto a partir das configuraes do sistema operacional (escala de
tamanho).
Se o tamanho especificado por um nmero positivo, este tamanho transformado em unidades
de medidas fsicas de um dispositivo (pixels) quando se muda de uma fonte lgica para uma fsica,
2000-2014, MetaQuotes Software Corp.

1482

Funes de Objeto
e este tamanho corresponde altura dos smbolos glifos escolhidos entre as fontes disponveis.
Este caso no recomendado quando os textos exibidos pela funo TextOut() e os exibidos pelo
OBJ_LABEL ("Etiquetas"), onde objetos grfico esto a ser utilizados em conjunto no grfico.
Se o tamanho determinado por um nmero negativo, este nmero deve ser definido em dcimos
de um ponto lgico (-350 igual a 35 pontos lgicos) dividido em 10. Um valor obtido ento
transformado em unidades de medidas fsicas de um dispositivo (pixels) e corresponde ao valor
absoluto da altura de um smbolo escolhido a partir das fontes disponveis. Multiplicar o do
tamanho de fonte determinada nas propriedades do objeto por -10 para tornar o tamanho de um
texto na tela semelhante ao de um objeto OBJ_LABEL.
Os sinalizadores podem ser usados com a combinao de sinalizadores de estilo com um dos
sinalizadores especificando a largura da fonte. Nome dos sinalizadores so mostrados abaixo.
Sinalizadores para especificar o estilo da fonte
Flag

Description

FONT_ITALIC

Itlico

FONT_UNDERLINE

Sublinhado

FONT_STRIKEOUT

Riscado

Sinalizadores para especificar a largura da fonte


Flag
FW_DONTCARE
FW_THIN
FW_EXTRALIGHT
FW_ULTRALIGHT
FW_LIGHT
FW_NORMAL
FW_REGULAR
FW_MEDIUM
FW_SEMIBOLD
FW_DEMIBOLD
FW_BOLD
FW_EXTRABOLD
FW_ULTRABOLD
FW_HEAVY
FW_BLACK
Tambm Veja

2000-2014, MetaQuotes Software Corp.

1483

Funes de Objeto
Recursos, ResourceCreate(), ResourceSave(), TextOut()

2000-2014, MetaQuotes Software Corp.

1484

Funes de Objeto

TextOut
A funo exibe um texto num array personalizado (buffer) e retorna o resultado dessa operao. O
array projetado para criar o recurso grfico.
bool TextOut(
const string

text,

// texto exibido

int

x,

// coordenada X

y,

// coordenada Y

int
uint

anchor,

// tipo de ncora

uint

&data[],

// buffer de sada

uint

width,

// largura de buffer em pixels

uint

height,

// altura de buffer em pixels

uint

color,

// cor do texto

color_format

// formato de cor para a sada

ENUM_COLOR_FORMAT
);

Parmetros
text
[in] Texto exibido que ser escrito para o buffer. Somente o texto de uma linha exibido.
x
[in] Coordenada X do ponto de ancoragem do texto exibido.
y
[in] Coordenada Y do ponto de ancoragem do texto exibido.
anchor
[in] O valor de sada dos 9 mtodos pr-definidos de localizao do ponto de ancoragem do texto
exibido. O valor definido por uma combinao de dois sinalizadores - sinalizadores de
alinhamento de texto horizontal e vertical. Nomes dos sinalizadores esto listados na Nota abaixo.
data[]
[in] Buffer, na qual o texto exibido. O buffer usado para criar o recurso grfico.
width
[in] Largura do buffer em pixels.
height
[in] Altura do buffer em pixels.
color
[in] Cor do texto.
color_format
[in] Formato de cor definida pelo valor do enumerador ENUM_COLOR_FORMAT.
Valor de retorno
Retorna true se bem sucedido, caso contrrio false.
Observao

2000-2014, MetaQuotes Software Corp.

1485

Funes de Objeto
Ponto de ancoragem determinado por anchor uma combinao de dois sinalizadores de
alinhamento de texto horizontal e vertical. Sinalizador de alinhamento de texto horizontal:
TA_LEFT ponto de ancoragem no lado esquerdo da caixa delimitada
TA_CENTER ponto de ancoragem horizontal localiza-se no centro da caixa delimitada
TA_RIGHT ponto de ancoragem no lado direito da caixa delimitada
Sinalizador de alinhamento de texto vertical:
TA_TOP ponto de ancoragem no lado superior da caixa delimitada
TA_VCENTER ponto de ancoragem verticais est localizado no centro da caixa delimitada
TA_BOTTOM ponto de ancoragem no lado inferior da caixa delimitada
Combinaes possveis de sinalizadores e pontos de ancoragem determinados so mostrados na
imagem.

Exemplo:
//--- largura e altura da tela (usado para o desenho)
#define IMG_WIDTH

200

#define IMG_HEIGHT 200


//--- exibir a janela de parmetro antes de lanar o script
#property script_show_inputs
//--- permite definir o formato de cor
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- array de desenho (buffer)
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| Programa Script da funo start (iniciar)

//+------------------------------------------------------------------+
void OnStart()
{
//--- criar o objeto OBJ_BITMAP_LABEL para desenhar
ObjectCreate(0,"RELGIO",OBJ_BITMAP_LABEL,0,0,0);
//--- especificar o nome do recurso grfico para escrever no objeto RELGIO
ObjectSetString(0,"RELGIO",OBJPROP_BMPFILE,"::IMG");
//--- variveis auxiliares
double a;

// seta no canto

uint

nm=2700;

// minutos no canto

uint

nh=2700*12;

// horas no canto

uint

w,h;

// variveis para receber string de tamanhos de texto

2000-2014, MetaQuotes Software Corp.

1486

Funes de Objeto
int

x,y;

// variveis para o clculo das coordenadas atuais da string de texto dos p

//--- girar ponteiros do relgio em um loop infinito, at que o script seja interrompido
while(!IsStopped())
{
//--- limpar o buffer do array do desenho do relgio
ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
//--- definir a fonte para desenhar dgitos para o rosto do relgio
TextSetFont("Arial",-200,FW_EXTRABOLD,0);
//--- desenhar a face do relgio
for(int i=1;i<=12;i++)
{
//--- receber o tamanho da hora atual sobre a face do relgio
TextGetSize(string(i),w,h);
//--- calcular as coordenadas da hora atual sobre a face do relgio
a=-((i*300)%3600*M_PI)/1800.0;
x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2);
y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2);
//--- sada da hora na face do relgio atravs do buffer ExtImg[]
TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
}
//--- agora, especificar a fonte para desenhar o ponteiro dos minutos
TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
//--- receber o tamanho do ponteiro dos minutos
TextGetSize("----->",w,h);
//--- calcular as coordenadas do ponteiro dos minutos sobre a face do relgio
a=-(nm%3600*M_PI)/1800.0;
x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
//--- sada do ponteiro dos minutos na face do relgio atravs do buffer ExtImg[]
TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
//--- agora, definir a fonte para desenhar o ponteiro dos minutos
TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
TextGetSize("==>",w,h);
//--- calcular as coordenadas do ponteiro das horas na face do relgio
a=-(nh/12%3600*M_PI)/1800.0;
x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
//--- sada do ponteiro das horas na face do relgio atravs do buffer ExtImg[]
TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
//--- atualizar o recurso grfico
ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
//--- forar a atualizao do grfico
ChartRedraw();
//--- aumentar os contadores da hora e minuto
nm+=60;
nh+=60;

2000-2014, MetaQuotes Software Corp.

1487

Funes de Objeto
//--- mantendo uma pequena pausa entre os quadros
Sleep(10);
}
//--- excluir o objeto RELGIO quando completar a operao do script
ObjectDelete(0,"CLOCK");
//--}

Tambm Veja
Recursos, ResourceCreate(), ResourceSave(), TextGetSize(), TextSetFont()

2000-2014, MetaQuotes Software Corp.

1488

Funes de Objeto

TextGetSize
A funo retorna a largura da linha e altura nas configuraes das fonte atuais.
bool TextGetSize(
const string

text,

// string de texto

uint&

width,

// largura do buffer em pixels

uint&

height

// altura de buffer em pixels

);

Parmetros
text
[in] String, para o qual deve ser obtido o comprimento e a largura.
width
[out] Parmetro de entrada para o recebimento da largura.
height
[out] Parmetro de entrada para o recebimento da altura.
Valor de retorno
Retorna true se bem sucedido, caso contrrio false. Possibilidade de erros de cdigos:
ERR_INTERNAL_ERROR(4001) - erro do sistema operacional.
Tambm Veja
Recursos, ResourceCreate(), ResourceSave(), TextSetFont(), TextOut()

2000-2014, MetaQuotes Software Corp.

1489

Indicadores Tcnicos

Funes Indicadores Tcnicos


Todas as funes, como iMA, iAC, iMACD, iIchimoku etc, tem uma cpia do indicador tcnico
correspondente criada no cache global do terminal do cliente. Se uma cpia do indicador com esses
parmetros j existe, a nova cpia no criada, e o contador de referncias para a cpia existente
aumenta.
Essas funes retornam o manipulador da cpia apropriada do indicador. Alm disso, usando este
manipulador, voc pode receber os dados calculados pelo indicador correspondente. Os dados do buffer
correspondentes (indicadores tcnicos contm dados calculados nos seus buffers internos, que podem
variar de 1 a 5, dependendo do indicador) podem ser copiados para um programa de MQL5 utilizando a
funo CopyBuffer().
Voc no pode consultar os dados do indicador diretamente aps ter sido criado, porque o clculo de
valores dos indicadores requer algum tempo, por isso melhor criar o indicador manipulando em
OnInit(). A Funo iCustom() cria o indicador personalizado correspondente, e retorna seu manipulador
no caso de ser criado com xito. Indicadores personalizadas podem conter at 512 buffers de
indicador, o contedo do qual pode tambm ser obtida atravs da funo CopyBuffer(), usando o
manipulador obtido.
Existe um mtodo universal para a criao qualquer indicador tcnico usando a funo
IndicatorCreate(). Esta funo aceita os seguintes dados como parmetros de entrada:
Nome do smbolo;
timeframe;
tipo de indicador para criar;
nmero de parmetros de entrada do indicador;
um array do tipo MqlParam contendo todos os parmetros de entrada necessrios.
A memria do computador pode ser liberada a partir de um indicador que no mais utilizado, usando
a funo IndicatorRelease(),onde o manipulador de indicador transmitido.
Nota. Chamada repetida da funo do indicador com os mesmos parmetros dentro de um MQL5programa no resulta num aumento mltiplo do contador de referncia, o contador ser aumentado
apenas uma vez por 1. No entanto, recomendado obter os manipuladores de indicadores em funo
OnInit() ou no construtor da classe, e ainda utilizar estes manipuladores em outras funes. O
contador de referncia diminui quando um MQL5-programa desinicializado.
Todas as funes de indicador tem pelo menos dois parmetros - o smbolo e o perodo. O NULL Valor
do smbolo significa o smbolo corrente, o valor 0 (zero) do perodo significa o prazo corrente.
Funo

Retorna o manipulador do indicador:

iAC

Accelerator Oscillator

iAD

Accumulation/Distribution

iADX

Average Directional Index

iADXWilder

Average Directional Index by Welles Wilder

iAlligator

Alligator

2000-2014, MetaQuotes Software Corp.

1490

Indicadores Tcnicos

iAMA

Adaptive Moving Average

iAO

Awesome Oscillator

iATR

Average True Range

iBearsPower

Bears Power

iBands

Bollinger Bands

iBullsPower

Bulls Power

iCCI

Commodity Channel Index

iChaikin

Chaikin Oscillator

iCustom

Custom indicator

iDEMA

Double Exponential Moving Average

iDeMarker

DeMarker

iEnvelopes

Envelopes

iForce

Force Index

iFractals

Fractals

iFrAMA

Fractal Adaptive Moving Average

iGator

Gator Oscillator

iIchimoku

Ichimoku Kinko Hyo

iBWMFI

Market Facilitation Index by Bill Williams

iMomentum

Momentum

iMFI

Money Flow Index

iMA

Moving Average

iOsMA

Moving Average of Oscillator (MACD histogram)

iMACD

Moving Averages Convergence-Divergence

iOBV

On Balance Volume

iSAR

Parabolic Stop And Reverse System

iRSI

Relative Strength Index

iRVI

Relative Vigor Index

iStdDev

Standard Deviation

iStochastic

Stochastic Oscillator

iTEMA

Triple Exponential Moving Average

iTriX

Triple Exponential Moving Averages Oscillator

iWPR

Williams' Percent Range

2000-2014, MetaQuotes Software Corp.

1491

Indicadores Tcnicos

iVIDyA

Variable Index DYnamic Average

iVolumes

Volumes

2000-2014, MetaQuotes Software Corp.

1492

Indicadores Tcnicos

iAC
A funo cria o Accelerator Oscillator num cach global do terminal do cliente e retorna seu
manipulador. Tem apenas um buffer.
int iAC(
string

symbol,

ENUM_TIMEFRAMES period

// smbolo nome
// perodo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores do enumerador ENUM_TIMEFRAMES, 0 (zero)
significa o prazo corrente.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iAC.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iAC."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotagem do iAC


#property indicator_label1

"iAC"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

#property indicator_color1

clrGreen, clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

2000-2014, MetaQuotes Software Corp.

1493

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iAC,

// usar iAC

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iAC;

// tipo da funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double iACBuffer[];
double iACColors[];
//--- varivel para armazenamento do manipulador do indicador iAC
int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- ns manteremos o nmero de valores no indicador Accelerator Oscillator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,iACBuffer,INDICATOR_DATA);
SetIndexBuffer(1,iACColors,INDICATOR_COLOR_INDEX);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iAC)
handle=iAC(name,period);
else
handle=IndicatorCreate(name,period,IND_AC);
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)

2000-2014, MetaQuotes Software Corp.

1494

Indicadores Tcnicos
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iAC para o smbolo %s/%s, cdigo de er


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo do indicador Accelerator Oscillator, calculado para
short_name=StringFormat("iAC(%s/%s)",name,EnumToString(period));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iAC
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores em que o indica

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- Se o array iACBuffer maior do que o nmero de valores no indicador iAC para smbolo/p
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

2000-2014, MetaQuotes Software Corp.

1495

Indicadores Tcnicos

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}

//--- preencher os arrays iACBuffer e iACColors com valores a partir do indicador Accelerator Oscil

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffer(iACBuffer,iACColors,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Accelerator Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenchendo buffers do indicador a partir do indicador iAC

//+------------------------------------------------------------------+
bool FillArraysFromBuffer(double &values[],

// valores do buffer do indicator Accelerator Os

double &color_indexes[], // buffer de cor(para armazenar o ndice das cor


int ind_handle,

// manipulador do indicador iAC

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iACBuffer com valores a partir do buffer do indicador que tem o
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iAC, cdigo de erro %d",GetLastError


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- agora copiar o ndice de cores
if(CopyBuffer(ind_handle,1,0,amount,color_indexes)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar valores de cor a partir do indicador iAC, cdigo de erro %d",Get
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}

2000-2014, MetaQuotes Software Corp.

1496

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1497

Indicadores Tcnicos

iAD
A funo retorna o manipulador do indicador Accumulation/Distribution. Tem apenas um buffer.
int iAD(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para o clculo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores do enumerador ENUM_TIMEFRAMES, 0 (zero)
significa o prazo corrente.
applied_volume
[in] O volume utilizado. Can be any of ENUM_APPLIED_VOLUME values.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iAD.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "dos buffers do indicador para o indicador tcnico iAD."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iAD


#property indicator_label1

"iAD"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

2000-2014, MetaQuotes Software Corp.

1498

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iAD,

// usar iAD

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iAD;

// tipo da funo

input ENUM_APPLIED_VOLUME

volumes;

// volume usado

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iADBuffer[];

//--- varivel para armazenar o manipulador do indicador iAD


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Accumulation/Distribution
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iADBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iAD)
handle=iAD(name,period,volumes);
else
{
//--- preencher a estrutura com os parmetros do indicador

2000-2014, MetaQuotes Software Corp.

1499

Indicadores Tcnicos
MqlParam pars[1];
pars[0].type=TYPE_INT;
pars[0].integer_value=volumes;
handle=IndicatorCreate(name,period,IND_AD,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iAD para o smbolo %s/%s, cdigo de er


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo, o indicador de Accumulation/Distribution calculado para
short_name=StringFormat("iAD(%s/%s)",name,EnumToString(period));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iAD
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores em que o indica

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

2000-2014, MetaQuotes Software Corp.

1500

Indicadores Tcnicos

//--- se o array iADBuffer maior do que o nmero de valores no indicador iAD para smbolo/p
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iADBuffer com valores do indicador Accumulation/Distribution

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArrayFromBuffer(iADBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Accumulation/Distribution
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenchendo buffers do indicador a partir do indicador iAD

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// valores do buffer do indicator da linha Accumulatio

int ind_handle,

// manipulador do indicador iAD

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iADBuffer com valores a partir do buffer do indicador que tem o
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iAD, cdigo de erro %d",GetLastError


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

2000-2014, MetaQuotes Software Corp.

1501

Indicadores Tcnicos
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1502

Indicadores Tcnicos

iADX
A funo retorna o manipulador do indicador Average Directional Movement Index.
int iADX(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

adx_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
adx_period
[in] Perodo para calcular o ndice.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros do buffer so os seguintes: 0 - MAIN_LINE, 1 - PLUSDI_LINE, 2 - MINUSDI_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iADX.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "dos buffers do indicador para o indicador tcnico iADX."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots

2000-2014, MetaQuotes Software Corp.

1503

Indicadores Tcnicos
//--- plotar ADX
#property indicator_label1

"ADX"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar DI_plus


#property indicator_label2

"DI_plus"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrYellowGreen

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- plotar DI_minus


#property indicator_label3

"DI_minus"

#property indicator_type3

DRAW_LINE

#property indicator_color3

clrWheat

#property indicator_style3

STYLE_SOLID

#property indicator_width3

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iADX,

// usar iADX

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iADX;

// tipo da funo

input int

adx_period=14;

// clculo do perodo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

ADXBuffer[];

double

DI_plusBuffer[];

double

DI_minusBuffer[];

//--- varivel para armazenar o manipulador do indicador iADX


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Average Directional Movement Index
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador

2000-2014, MetaQuotes Software Corp.

1504

Indicadores Tcnicos
SetIndexBuffer(0,ADXBuffer,INDICATOR_DATA);
SetIndexBuffer(1,DI_plusBuffer,INDICATOR_DATA);
SetIndexBuffer(2,DI_minusBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iADX)
handle=iADX(name,period,adx_period);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
pars[0].type=TYPE_INT;
pars[0].integer_value=adx_period;
handle=IndicatorCreate(name,period,IND_ADX,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iADX para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo, o indicador de Average Directional Movement Index calculado para
short_name=StringFormat("iADX(%s/%s period=%d)",name,EnumToString(period),adx_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],

2000-2014, MetaQuotes Software Corp.

1505

Indicadores Tcnicos
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- nmero de valores copiados a partir do indicador iADX
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores em que o indica

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iADXBuffer maior do que o nmero de valores no indicador iADX para smbolo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Average Directional Movement Index

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,

if(!FillArraysFromBuffers(ADXBuffer,DI_plusBuffer,DI_minusBuffer,handle,values_to_copy)) return(
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Average Directional Movement Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenchendo buffers do indicador a partir do indicador iADX

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1506

Indicadores Tcnicos
bool FillArraysFromBuffers(double &adx_values[],

// buffer do indicador da linha ADX

double &DIplus_values[],

// buffer do indicador para DI+

double &DIminus_values[],

// buffer do indicador para DI-

int ind_handle,

// manipulador do indicador iADXWilder

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iADXBuffer com valores a partir do buffer do indicador que tem
if(CopyBuffer(ind_handle,0,0,amount,adx_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iADX, cdigo de erro %d",GetLastErro


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array DI_plusBuffer com valores a partir do buffer do indicador que te
if(CopyBuffer(ind_handle,1,0,amount,DIplus_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iADX, cdigo de erro %d",GetLastErro


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array DI_plusBuffer com valores a partir do buffer do indicador que te
if(CopyBuffer(ind_handle,2,0,amount,DIminus_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iADX, cdigo de erro %d",GetLastErro


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1507

Indicadores Tcnicos

iADXWilder
A funo retorna o manipulador de Average Directional Movement Index por Welles Wilder.
int iADXWilder(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

adx_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
adx_period
[in] Perodo para calcular o ndice.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros do buffer so os seguintes: 0 - MAIN_LINE, 1 - PLUSDI_LINE, 2 - MINUSDI_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

iADXWilder.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "dos buffers do indicador para o indicador tcnico iADXWilder."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots

2000-2014, MetaQuotes Software Corp.

1508

Indicadores Tcnicos
//--- plotar ADX
#property indicator_label1

"ADX"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar DI_plus


#property indicator_label2

"DI_plus"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrYellowGreen

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- plotar DI_minus


#property indicator_label3

"DI_minus"

#property indicator_type3

DRAW_LINE

#property indicator_color3

clrWheat

#property indicator_style3

STYLE_SOLID

#property indicator_width3

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iADXWilder,

// usar iADXWilder

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iADXWilder;

// tipo da funo

input int

adx_period=14;

// clculo do perodo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

ADXBuffer[];

double

DI_plusBuffer[];

double

DI_minusBuffer[];

//--- varivel para armazenar o manipulador do indicador iADXWilder


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;

//--- manteremos o nmero de valores no indicador Average Directional Movement Index por Welles Wil
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador

2000-2014, MetaQuotes Software Corp.

1509

Indicadores Tcnicos
SetIndexBuffer(0,ADXBuffer,INDICATOR_DATA);
SetIndexBuffer(1,DI_plusBuffer,INDICATOR_DATA);
SetIndexBuffer(2,DI_minusBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iADXWilder)
handle=iADXWilder(name,period,adx_period);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
pars[0].type=TYPE_INT;
pars[0].integer_value=adx_period;
handle=IndicatorCreate(name,period,IND_ADXW,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iADXWilder para o smbolo %s/%s, cdig


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo, o indicador de Average Directional Movement Index por Welles Wilder
short_name=StringFormat("iADXWilder(%s/%s period=%d)",name,EnumToString(period),adx_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],

2000-2014, MetaQuotes Software Corp.

1510

Indicadores Tcnicos
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- nmero de valores copiados a partir do indicador iADXWilder
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores em que o indica

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iADXBuffer maior do que o nmero de valores no indicador iADXWilder para s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}

//--- preencher o array com valores do indicador Average Directional Movement Index por Welles Wild

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,

if(!FillArraysFromBuffers(ADXBuffer,DI_plusBuffer,DI_minusBuffer,handle,values_to_copy)) return(
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Average Directional Movement Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenchendo buffers do indicador a partir do indicador iADXWilder|
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1511

Indicadores Tcnicos
bool FillArraysFromBuffers(double &adx_values[],

// buffer do indicador da linha ADX

double &DIplus_values[],

// buffer do indicador para DI+

double &DIminus_values[],

// buffer do indicador para DI-

int ind_handle,

// manipulador do indicador iADXWilder

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iADXBuffer com valores a partir do buffer do indicador que tem
if(CopyBuffer(ind_handle,0,0,amount,adx_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Failed to copy data from the iADXWilder indicator, error code %d",GetLastError()
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array DI_plusBuffer com valores a partir do buffer do indicador que te
if(CopyBuffer(ind_handle,1,0,amount,DIplus_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Failed to copy data from the iADXWilder indicator, error code %d",GetLastError()
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array DI_plusBuffer com valores a partir do buffer do indicador que te
if(CopyBuffer(ind_handle,2,0,amount,DIminus_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Failed to copy data from the iADXWilder indicator, error code %d",GetLastError()
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1512

Indicadores Tcnicos

iAlligator
A funo retorna o manipulador do indicador Alligator.
int iAlligator(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

jaw_period,

// perodo para clculo da mandbula

int

jaw_shift,

// deslocamento horizontal da mandbula

int

teeth_period,

// perodo para clculo dos dentes

int

teeth_shift,

// deslocamento horizontal dos dentes

int

lips_period,

// perodo para o clculo da boca

int

lips_shift,

// deslocamento horizontal da boca

ENUM_MA_METHOD

ma_method,

// tipo de suavizao

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
jaw_period
[in] Perodo mdio para a linha azul (mandbula do Alligator)
jaw_shift
[in] O deslocamento da linha azul em relao tabela de preos.
teeth_period
[in] Perodo mdio para a linha vermelha (dentes do Alligator).
teeth_shift
[in] O deslocamento da linha vermelha em relao para a tabela de preos.
lips_period
[in] Perodo mdio para a linha verde (boca de Alligator).
lips_shift
[in] O deslocamento da linha verde em relao tabela de preos.
ma_method
[in] O mtodo da mdia. Pode ser qualquer um dos valores do ENUM_MA_METHOD.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.

2000-2014, MetaQuotes Software Corp.

1513

Indicadores Tcnicos

Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros do buffer so os seguintes: 0 - GATORJAW_LINE, 1 - GATORTEETH_LINE, 2 GATORLIPS_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iAlligator.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "dos buffers do indicador para o indicador tcnico iAlligator."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares aos do padro Alligator."
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots

//--- plot Jaws


#property indicator_label1

"Jaws"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plot Teeth


#property indicator_label2

"Teeth"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- plot Lips


#property indicator_label3

"Lips"

#property indicator_type3

DRAW_LINE

#property indicator_color3

clrLime

#property indicator_style3

STYLE_SOLID

#property indicator_width3

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1514

Indicadores Tcnicos
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iAlligator,

// usar iAlligator

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iAlligator;

// tipo de funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

input int

jaw_period=13;

// perodo da linha da mandbula

input int

jaw_shift=8;

// deslocamento da linha da mandbula

input int

teeth_period=8;

// perodo da linha dos dentes

input int

teeth_shift=5;

// deslocamento da linha dos dentes

input int

lips_period=5;

// perodo da linha da boca

input int

lips_shift=3;

// deslocamento da linha da boca

input ENUM_MA_METHOD

MA_method=MODE_SMMA;

// mtodo das linhas mdias do Alligator

input ENUM_APPLIED_PRICE

applied_price=PRICE_MEDIAN;// tipo de preo utilizado para o clculo do

//--- buffers do indicador


double

JawsBuffer[];

double

TeethBuffer[];

double

LipsBuffer[];

//--- varivel para armazenar o manipulador do indicador


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores dentro do indicador Alligator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,JawsBuffer,INDICATOR_DATA);
SetIndexBuffer(1,TeethBuffer,INDICATOR_DATA);
SetIndexBuffer(2,LipsBuffer,INDICATOR_DATA);
//--- definir o deslocamento de cada linha
PlotIndexSetInteger(0,PLOT_SHIFT,jaw_shift);
PlotIndexSetInteger(1,PLOT_SHIFT,teeth_shift);
PlotIndexSetInteger(2,PLOT_SHIFT,lips_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);

2000-2014, MetaQuotes Software Corp.

1515

Indicadores Tcnicos
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iAlligator)
handle=iAlligator(name,period,jaw_period,jaw_shift,teeth_period,
teeth_shift,lips_period,lips_shift,MA_method,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[8];

//--- perodos e deslocamentos das linhas do Alligator


pars[0].type=TYPE_INT;
pars[0].integer_value=jaw_period;
pars[1].type=TYPE_INT;
pars[1].integer_value=jaw_shift;
pars[2].type=TYPE_INT;
pars[2].integer_value=teeth_period;
pars[3].type=TYPE_INT;
pars[3].integer_value=teeth_shift;
pars[4].type=TYPE_INT;
pars[4].integer_value=lips_period;
pars[5].type=TYPE_INT;
pars[5].integer_value=lips_shift;

//--- tipo de suavizao


pars[6].type=TYPE_INT;
pars[6].integer_value=MA_method;
//--- tipo de preo
pars[7].type=TYPE_INT;
pars[7].integer_value=applied_price;
//--- criar manipulador
handle=IndicatorCreate(name,period,IND_ALLIGATOR,8,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iAlligator para o smbolo %s/%s, cdig


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo do indicador Alligator calculado para
short_name=StringFormat("iAlligator(%s/%s, %d,%d,%d,%d,%d,%d)",name,EnumToString(period),

2000-2014, MetaQuotes Software Corp.

1516

Indicadores Tcnicos
jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iAlligator
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores que mudou o ind

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{
//--- Se o array JawsBuffer maior do que o nmero dos valores do indicador iAlligator para
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com os valores do indicador de Alligator

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,

if(!FillArraysFromBuffers(JawsBuffer,jaw_shift,TeethBuffer,teeth_shift,LipsBuffer,lips_shift,han
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),

2000-2014, MetaQuotes Software Corp.

1517

Indicadores Tcnicos
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores dentro do indicador Alligator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iAlligator

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &jaws_buffer[],
int j_shift,

// buffer do indicador para a linha da mandbula


// deslocamento da linha da mandbula

double &teeth_buffer[], // buffer do indicador para a linha de dentes


int t_shift,

// deslocamento da linha dos dentes

double &lips_buffer[],

// buffer do indicador para a linha da boca

int l_shift,

// deslocamento da linha da boca

int ind_handle,

// manipulador do indicator iAlligator

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array JawsBuffer com valores a partir do buffer do indicador que tem
if(CopyBuffer(ind_handle,0,-j_shift,amount,jaws_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha para copiar dados a partir do indicador iAlligator, cdigo de erro %d",Get
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array TeethBuffer com valores a partir do buffer do indicador que tem
if(CopyBuffer(ind_handle,1,-t_shift,amount,teeth_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha para copiar dados a partir do indicador iAlligator, cdigo de erro %d",Get
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array LipsBuffer com valores a partir do buffer do indicador que tem o
if(CopyBuffer(ind_handle,2,-l_shift,amount,lips_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha para copiar dados a partir do indicador iAlligator, cdigo de erro %d",Get
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);

2000-2014, MetaQuotes Software Corp.

1518

Indicadores Tcnicos
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1519

Indicadores Tcnicos

iAMA
A funo retorna o manipulador do indicador Adaptive Moving Average. Tem apenas um buffer.
int iAMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ama_period,

// perodo mdio para AMA

int

fast_ma_period,

// perodo rpido MA

int

slow_ma_period,

// perodo lento MA

int

ama_shift,

// deslocamento horizontal do indicador

ENUM_APPLIED_PRICE applied_price

// tipo do preo ou manipular

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ama_period
[in] O perodo de clculo, em que o coeficiente de eficincia calculado.
fast_ma_period
[in] Perodo rpido para o clculo do coeficiente de suavizao de um mercado de rpido.
slow_ma_period
[in] Perodo lento para o clculo do coeficiente de suavizao na ausncia de tendncia.
ama_shift
[in] Deslocamento do indicador relativo ao grfico de preos.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iAMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1520

Indicadores Tcnicos
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iAMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so semelhantes aos do padro AMA."
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iAMA


#property indicator_label1

"iAMA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iAMA,

// use iAMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iAMA;

// tipo de funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

input int

ama_period=15;

// perodo para clculo

input int

fast_ma_period=2;

// perodo da MA rpida

input int

slow_ma_period=30;

// perodo da MA lenta

input int

ama_shift=0;

// deslocamento horizontal

input ENUM_APPLIED_PRICE

applied_price;

// tipo de preo

//--- buffer do indicador


double

iAMABuffer[];

//--- varivel para armazenar o manipulador do indicador iAMA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Adaptive Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1521

Indicadores Tcnicos
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,iAMABuffer,INDICATOR_DATA);
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ama_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iAMA)
handle=iAMA(name,period,ama_period,fast_ma_period,slow_ma_period,ama_shift,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[5];
pars[0].type=TYPE_INT;
pars[0].integer_value=ama_period;
pars[1].type=TYPE_INT;
pars[1].integer_value=fast_ma_period;
pars[2].type=TYPE_INT;
pars[2].integer_value=slow_ma_period;
pars[3].type=TYPE_INT;
pars[3].integer_value=ama_shift;
//--- tipo de preo
pars[4].type=TYPE_INT;
pars[4].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_AMA,5,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o indicador iAMA para o smbolo %s/%s, cdigo de erro %d",
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/prazo, o indicador Adaptive Moving Average calculado para

2000-2014, MetaQuotes Software Corp.

1522

Indicadores Tcnicos

short_name=StringFormat("iAMA(%s/%s,%d,%d,%d,d)",name,EnumToString(period),ama_period,fast_ma_pe
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iAMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}
//--- se o primeiro arranque do clculo do indicador ou se o nmero de valores do indicador iAMA

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iAMABuffer maior do que o nmero de valores do indicador iAMA para smbolo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com os valores do indicador Adaptive Moving Average

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArrayFromBuffer(iAMABuffer,ama_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),

2000-2014, MetaQuotes Software Corp.

1523

Indicadores Tcnicos
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Adaptive Moving Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher o buffer do indicador a partir do indicador iAMA

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &ama_buffer[],

// buffer do indicador da linha AMA

int a_shift,

// deslocamento da linha AMA

int ind_handle,

// manipulador do indicador iAMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- Preencher a partir do array iAMABuffer com os valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-a_shift,amount,ama_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados a partir do indicador iAMA, cdigo de erro %d",GetLastErro


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1524

Indicadores Tcnicos

iAO
A funo retorna o manipulador do indicador Awesome Oscillator. Tem apenas um buffer.
int iAO(
string

symbol,

ENUM_TIMEFRAMES period

// smbolo nome
// perodo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iAO.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iAO."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar iAO


#property indicator_label1

"iAO"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

#property indicator_color1

clrGreen,clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1525

Indicadores Tcnicos
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iAO,

// usar iAO

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iAO;

// tipo de funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

iAOBuffer[];

double

iAOColors[];

//--- varivel para armazenar o manipulador do indicador iAO


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Awesome Oscillator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,iAOBuffer,INDICATOR_DATA);
SetIndexBuffer(1,iAOColors,INDICATOR_COLOR_INDEX);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iAO)
handle=iAO(name,period);
else
handle=IndicatorCreate(name,period,IND_AO);
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{

2000-2014, MetaQuotes Software Corp.

1526

Indicadores Tcnicos
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iAO para o smbolo %s/%s, cdigo de er


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar o smbolo/perodo o indicador Awesome Oscillator calculado para
short_name=StringFormat("iAO(%s/%s)",name,EnumToString(period));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiado do indicator iAO
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o primeiro arranque do clculo do indicador, ou se o nmero de valores no indicador fo

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iAOBuffer maior do que os valores no indicador iAO para smbolo/perodo, e
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama

2000-2014, MetaQuotes Software Corp.

1527

Indicadores Tcnicos
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}

//--- preencher os arrays iAOBuffer e iAOColors com valores a partir do indicador Awesome Oscillato

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffer(iAOBuffer,iAOColors,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Accelerator Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher os buffers do indicador a partir do indicador iAO

//+------------------------------------------------------------------+
bool FillArraysFromBuffer(double &values[],

// buffer do indicador dos valores do Awesome Os

double &color_indexes[], // buffer de cor(para armazenar o ndice das cor


int ind_handle,

// manipulador do indicador iAO

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iAOBuffer com valores a partir do buffer do indicador que tem n
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iAO, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- agora copiar o ndice de cores
if(CopyBuffer(ind_handle,1,0,amount,color_indexes)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar valores de cor do indicador iAO, cdigo de erro %d",GetLastError


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1528

Indicadores Tcnicos
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1529

Indicadores Tcnicos

iATR
A funo retorna o manipulador do indicador Average True Range. Tem apenas um buffer.
int iATR(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

ma_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] O valor do perodo mdio para clculo do indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iATR.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iATR


#property indicator_label1

"iATR"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

2000-2014, MetaQuotes Software Corp.

1530

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iATR,// usar iATR
Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input int

atr_period=14;

// clculo do perodo

input Creation

type=Call_iATR;

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

// tipo da funo

//--- buffer do indicador


double

iATRBuffer[];

//--- varivel para armazenamento do manipulador do indicador iAC


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero dos valores do indicador Average True Range indicator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iATRBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iATR)
handle=iATR(name,period,atr_period);
else
{
//--- preencher a estrutura com os parmetros do indicador

2000-2014, MetaQuotes Software Corp.

1531

Indicadores Tcnicos
MqlParam pars[1];
pars[0].type=TYPE_INT;
pars[0].integer_value=atr_period;
handle=IndicatorCreate(name,period,IND_ATR,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iATR para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador True Range calculado para
short_name=StringFormat("iATR(%s/%s, period=%d)",name,EnumToString(period),atr_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iATR
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se o princpio de clculo do indicador ou se o nmero de valores modificados do indicador

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

2000-2014, MetaQuotes Software Corp.

1532

Indicadores Tcnicos

//--- se o array iATRBuffer maior do que o nmero de valores no indicador iATR para smbolo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iATRBuffer com valores do indicador Average True Range
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iATRBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Accelerator Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preenchendo os buffers do indicator a partir do indicador iATR

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicador para valores ATR values

int ind_handle,

// manipulador do indicador iATR

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher parte do array iATRBuffer com valores a partir do buffer do indicador que tem ndic
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar a partir do indicador iATR , cdigo de erro %d",GetLastError());


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

2000-2014, MetaQuotes Software Corp.

1533

Indicadores Tcnicos
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1534

Indicadores Tcnicos

iBearsPower
A funo retorna o manipulador do indicador Bears Power. Tem apenas um buffer.
int iBearsPower(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] O valor do perodo mdio para clculo do indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iBearsPower.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iBearsPower."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iBearsPower


#property indicator_label1

"iBearsPower"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrSilver

2000-2014, MetaQuotes Software Corp.

1535

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iBearsPower,

// usar iBearsPower

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iBearsPower;

// tipo da funo

input int

ma_period=13;

// perodo da mdia mvel

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iBearsPowerBuffer[];

//--- varivel para armazenar o manipulador do indicador iBearsPower


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Bears Power
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iBearsPowerBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iBearsPower)
handle=iBearsPower(name,period,ma_period);
else
{
//--- preencher a estrutura com os parmetros do indicador

2000-2014, MetaQuotes Software Corp.

1536

Indicadores Tcnicos
MqlParam pars[1];
//--- perodo da mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
handle=IndicatorCreate(name,period,IND_BEARS,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iBearsPower para o smbolo %s/%s, cdi


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar que o smbolo/perodo do indicador Bears Power calculado para
short_name=StringFormat("iBearsPower(%s/%s, period=%d)",name,EnumToString(period),ma_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iBearsPower
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)

2000-2014, MetaQuotes Software Corp.

1537

Indicadores Tcnicos
{

//--- se o array iBearsPowerBuffer maior do que o nmero de valores no indicador iBearsPowe


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iBearsPowerBuffer com os valores do indicador Bears Power
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iBearsPowerBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Bears Power
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iBearsPower |
//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicador para valores do indicador Bears

int ind_handle,

// manipulador do indicator iBearsPower

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iBearsPowerBuffer com valores do indicador buffer do indicador q
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iBearsPower, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1538

Indicadores Tcnicos
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1539

Indicadores Tcnicos

iBands
A funo retorna o manipulador do indicador Bollinger Bands.
int iBands(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

bands_period,

// perodo para o clculo da mdia da linha

int

bands_shift,

// deslocamento horizontal do indicador

double

deviation,

// nmero de desvios padro

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
bands_period
[in] O perodo mdio da linha principal do indicador.
bands_shift
[in] O deslocamento do indicador em relao ao grfico de preo.
deviation
[in] Desvio a partir da linha principal.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer so os seguintes: 0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iBands.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1540

Indicadores Tcnicos
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "buffers do indicador para o indicador tcnico iBands."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots

//--- plotar linha superior


#property indicator_label1

"Upper"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrMediumSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar linha inferior


#property indicator_label2

"Lower"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrMediumSeaGreen

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- plotar linha mdia


#property indicator_label3

"Middle"

#property indicator_type3

DRAW_LINE

#property indicator_color3

clrMediumSeaGreen

#property indicator_style3

STYLE_SOLID

#property indicator_width3

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iBands,

// usar iBands

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iBands;

// tipo da funo

input int

bands_period=20;

// perodo da mdia mvel

input int

bands_shift=0;

// deslocamento

input double

deviation=2.0;

// nmero de desvios padro

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

UpperBuffer[];

double

LowerBuffer[];

2000-2014, MetaQuotes Software Corp.

1541

Indicadores Tcnicos
double

MiddleBuffer[];

//--- varivel para armazenar o manipulador do indicador iBands


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Bollinger Bands
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,UpperBuffer,INDICATOR_DATA);
SetIndexBuffer(1,LowerBuffer,INDICATOR_DATA);
SetIndexBuffer(2,MiddleBuffer,INDICATOR_DATA);
//--- definir o deslocamento de cada linha
PlotIndexSetInteger(0,PLOT_SHIFT,bands_shift);
PlotIndexSetInteger(1,PLOT_SHIFT,bands_shift);
PlotIndexSetInteger(2,PLOT_SHIFT,bands_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iBands)
handle=iBands(name,period,bands_period,bands_shift,deviation,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo da mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=bands_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=bands_shift;
//--- nmero do desvio padro
pars[2].type=TYPE_DOUBLE;
pars[2].double_value=deviation;

2000-2014, MetaQuotes Software Corp.

1542

Indicadores Tcnicos
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_BANDS,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iBands para o smbolo %s/%s, cdigo de


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Bollinger Bands calculado para
short_name=StringFormat("iBands(%s/%s, %d,%d,%G,%s)",name,EnumToString(period),
bands_period,bands_shift,deviation,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iBands
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)

2000-2014, MetaQuotes Software Corp.

1543

Indicadores Tcnicos
{

//--- se o tamanho buffers do indicador maior do que o nmero de valores no indicador iBand
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Bollinger Bands

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,

if(!FillArraysFromBuffers(MiddleBuffer,UpperBuffer,LowerBuffer,bands_shift,handle,values_to_copy
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Bollinger Bands
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iBands

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &base_values[],

// buffer do indicador da linha mdia do Boll

double &upper_values[],

// buffer do indicador da borda superior

double &lower_values[],

// buffer do indicador da borda inferior

int shift,

// deslocamento

int ind_handle,

// manipulador do indicador iBands

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array MiddleBuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-shift,amount,base_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iBands, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

2000-2014, MetaQuotes Software Corp.

1544

Indicadores Tcnicos
//--- preencher uma parte do array UpperBuffer com valores do buffer do indicador que tem ndice 1
if(CopyBuffer(ind_handle,1,-shift,amount,upper_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iBands, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array LowerBuffer com valores do buffer do indicador que tem o ndice
if(CopyBuffer(ind_handle,2,-shift,amount,lower_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iBands, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1545

Indicadores Tcnicos

iBullsPower
A funo retorna o manipulador do indicador Bulls Power. Tem apenas um buffer.
int iBullsPower(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] O perodo mdio para clculo do indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iBullsPower.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iBullsPower."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iBullsPower


#property indicator_label1

"iBullsPower"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrSilver

2000-2014, MetaQuotes Software Corp.

1546

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iBullsPower,

// usar iBullsPower

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iBullsPower;

// tipo da funo

input int

ma_period=13;

// perodo da mdia mvel

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iBullsPowerBuffer[];

//--- varivel para armazenar o manipulador do indicador iBullsPower


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Bulls Power
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iBullsPowerBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iBullsPower)
handle=iBullsPower(name,period,ma_period);
else
{
//--- preencher a estrutura com os parmetros do indicador

2000-2014, MetaQuotes Software Corp.

1547

Indicadores Tcnicos
MqlParam pars[1];
//--- perodo da mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
handle=IndicatorCreate(name,period,IND_BULLS,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iBullsPower para o smbolo %s/%s, cdi


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostrar que o smbolo/perodo do indicador Bulls Power calculado para
short_name=StringFormat("iBullsPower(%s/%s, period=%d)",name,EnumToString(period),ma_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iBullsPower
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)

2000-2014, MetaQuotes Software Corp.

1548

Indicadores Tcnicos
{

//--- se o array iBullsPowerBuffer maior do que o nmero de valores no indicador iBullsPowe


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iBullsPowerBuffer com os valores do indicador Bulls Power
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iBullsPowerBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Bulls Power
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iBullsPower|
//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicador para valores do indicador Bulls

int ind_handle,

// manipulador do indicator iBullsPower

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iBullsPowerBuffer com valores do indicador buffer do indicador q
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iBullsPower, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1549

Indicadores Tcnicos
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1550

Indicadores Tcnicos

iCCI
A funo retorna o manipulador do indicador Commodity Channel Index. Tem apenas um buffer.
int iCCI(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou de manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] O perodo mdio para o clculo de indicadores.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iCCI.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iCCI."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1

2000-2014, MetaQuotes Software Corp.

1551

Indicadores Tcnicos
#property indicator_plots

//--- plotar iCCI


#property indicator_label1

"iCCI"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- nveis horizontais na janela de indicador


#property indicator_level1

-100.0

#property indicator_level2

100.0

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iCCI,

// usar iCCI

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iCCI;

// tipo da funo

input int

ma_period=14;

// perodo da mdia mvel

input ENUM_APPLIED_PRICE

applied_price=PRICE_TYPICAL;

// tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iCCIBuffer[];

//--- varivel para armazenar o manipulador do indicator iCCI


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Commodity Channel Index
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iCCIBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{

2000-2014, MetaQuotes Software Corp.

1552

Indicadores Tcnicos
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iCCI)
handle=iCCI(name,period,ma_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- tipo de preo
pars[1].type=TYPE_INT;
pars[1].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_CCI,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iCCI para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador iCCI calculado para
short_name=StringFormat("iCCI(%s/%s, %d, %s)",name,EnumToString(period),
ma_period,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])

2000-2014, MetaQuotes Software Corp.

1553

Indicadores Tcnicos
{
//--- nmero de valores copiados a partir do indicador iCCI
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iCCIBuffer maior do que o nmero de valores no indicador iCCI para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iCCIBuffer com valores do indicador Commodity Channel Index
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iCCIBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Commodity Channel Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iCCI

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicador de valores do Commodity Channel

int ind_handle,

// manipulador do indicador iCCI

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro

2000-2014, MetaQuotes Software Corp.

1554

Indicadores Tcnicos
ResetLastError();

//--- preencher uma parte do array iCCIBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iCCI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1555

Indicadores Tcnicos

iChaikin
A funo retorna o manipulador do indicador Chaikin Oscillator. Tem apenas um buffer.
int iChaikin(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

fast_ma_period,

// perodo rpido

int

slow_ma_period,

// perodo lento

ENUM_MA_METHOD

ma_method,

// tipo suavizado

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
fast_ma_period
[in] Perodo mdio rpido para clculos.
slow_ma_period
[in] Perodo mdio lento para clculos.
ma_method
[in] Tipo suavizado. Pode ser uma das mdias constantes de ENUM_MA_METHOD.
applied_volume
[in] O volume usado. Pode ser uma das constantes do ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iChaikin.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"

2000-2014, MetaQuotes Software Corp.

1556

Indicadores Tcnicos
#property description "de buffers do indicador para o indicador tcnico iChaikin."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iChaikin


#property indicator_label1

"iChaikin"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iChaikin,

// usar iChaikin

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iChaikin;

// tipo da funo

input int

fast_ma_period=3;

// perodo rpido da mdia mvel

input int

slow_ma_period=10;

// perodo lento da mdia mvel

input ENUM_MA_METHOD

ma_method=MODE_EMA;

// tipo de suavizao

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;

// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iChaikinBuffer[];

//--- varivel para armazenar o manipulador do indicator iChaikin


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Chaikin Oscillator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iChaikinBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;

2000-2014, MetaQuotes Software Corp.

1557

Indicadores Tcnicos
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iChaikin)
handle=iChaikin(name,period,fast_ma_period,slow_ma_period,ma_method,applied_volume);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo rpido da mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=fast_ma_period;
//--- perodo lento da mdia mvel
pars[1].type=TYPE_INT;
pars[1].integer_value=slow_ma_period;
//--- tipo de suavizao
pars[2].type=TYPE_INT;
pars[2].integer_value=ma_method;
//--- tipo de volume
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_volume;
handle=IndicatorCreate(name,period,IND_CHAIKIN,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iChaikin para o smbolo %s/%s, cdigo
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Chaikin Oscillator calculado para
short_name=StringFormat("iChaikin(%s/%s, %d, %d, %s, %s)",name,EnumToString(period),
fast_ma_period,slow_ma_period,
EnumToString(ma_method),EnumToString(applied_volume));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}

2000-2014, MetaQuotes Software Corp.

1558

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iChaikin
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iCCIBuffer maior do que o nmero de valores no indicador iChaikin para o s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iChaikinBuffer com valores do indicador Chaikin Oscillator
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iChaikinBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Chaikin Oscillator

2000-2014, MetaQuotes Software Corp.

1559

Indicadores Tcnicos
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iChaikin

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Chaikin Oscillat

int ind_handle,

// manipulador do indicador iChaikin

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iChaikinBuffer com valores do buffer do indicador que tem ndice
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iChaikin, cdigo de erro %d",GetLastError());


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1560

Indicadores Tcnicos

iCustom
A funo retorna o manipulador de um indicador personalizado especifico.
int iCustom(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

string

// folder/nome_do_indicador_personalizado

...

name

// lista de parmetros de entrada do indicador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
name
[in] O nome do indicador personalizado, com o caminho relativo ao diretrio raiz de indicadores
(MQL5\Indicators\). Se um indicador est localizado em um subdiretrio, por exemplo, em MQL5/
Indicadores/Exemplos, o
seu nome deve ser especificado
como:
"Examples\
\nome_do_indicador" ( necessrio utilizar uma barra dupla, em vez de uma nica barra como um
separador).
...
[in] entrada-parmetros de um indicador personalizado, separados por vrgulas. Tipo e ordem dos
parmetros devem coincidir. Se no h parmetros especficos, ento valores padres sero
usados.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Um indicador personalizado deve ser compilado (com extenso EX5) e localizado no diretrio MQL5/
Indicadores do terminal do cliente ou seu subdiretrio.
Indicadores que requerem teste so definidos automaticamente a partir da chamada da funo
iCustom(), se o correspondente parmetro for definido atravs de um string constante. Para todos
os outros casos (uso da funo IndicatorCreate() ou uso de uma string no-constante no parmetro
de define o nome do indicador) a propriedade #property tester_indicator requerida:
#property tester_indicator "indicator_name.ex5"

Se o primeiro formulrio de chamada usado no indicador, ento na inicializao do indicador, na


aba "Parmetros", voc pode escolher dados adicionais para clculo. Se a opo "Aplicar para" do
parmetro no selecionada, o clculo padro baseia-se nos valores "Fechamento" dos preos.

2000-2014, MetaQuotes Software Corp.

1561

Indicadores Tcnicos

Quando voc chama um indicador personalizado a partir do programa MQL5, o parmetro


Applied_Price ou um manipulador de outro indicador deve ser passado por ltimo, depois de todas as
variveis de entrada do indicador personalizado.
Tambm Veja
Propriedades de Programa, Sries Temporais e Acesso a Indicadores,IndicatorCreate(),
IndicatorRelease()
Exemplo:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//---- Plotar Etiqueta1


#property indicator_label1

"Etiqueta1"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- parmetros de entrada


input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- buffers do indicador
double

Label1Buffer[];

//--- Manipulador do indicador personalizado Moving Average.mq5


int MA_handle;
//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeamento de buffers do indicador
SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
ResetLastError();

2000-2014, MetaQuotes Software Corp.

1562

Indicadores Tcnicos
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
MA_Period,
MA_Shift,
MA_Method,
PRICE_CLOSE // usando o fechamento de preos
);
Print("MA_handle = ",MA_handle,"

error = ",GetLastError());

//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- Copiar os valores do indicador Custom Moving Average para o nosso buffer do indicador
int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
Print("copy = ",copy,"

rates_total = ",rates_total);

//--- Se a nossa tentativa falhou - Reportar isto


if(copy<=0)
Print("Uma tentativa de obter os valores se houve falha do Custom Moving Average");
//--- valor retorno de prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1563

Indicadores Tcnicos

iDEMA
A funo retorna o manipulador do indicador Double Exponential Moving Average. Tem apenas um
buffer.
int iDEMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

int

ma_shift,

// deslocamento horizontal

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio (barras contadas) para os clculos.
ma_shift
[in] Deslocamento do indicador relativo ao grfico de preos.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iDEMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iDEMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"

2000-2014, MetaQuotes Software Corp.

1564

Indicadores Tcnicos
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iDEMA


#property indicator_label1

"iDEMA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iDEMA,

// usar iDEMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iDEMA;

// tipo de funo

input int

ma_period=14;

// perodo de mdia mvel

input int

ma_shift=0;

// deslocamento

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iDEMABuffer[];

//--- varivel para armazenar o manipulador do indicator iDEMA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Double Exponential Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iDEMABuffer,INDICATOR_DATA);
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda

2000-2014, MetaQuotes Software Corp.

1565

Indicadores Tcnicos
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iDEMA)
handle=iDEMA(name,period,ma_period,ma_shift,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[3];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de preo
pars[2].type=TYPE_INT;
pars[2].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_DEMA,3,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iDEMA para o smbolo %s/%s, cdigo de
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Double Exponential Moving Average calculado para
short_name=StringFormat("iDEMA(%s/%s, %d, %d, %s)",name,EnumToString(period),
ma_period,ma_shift,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,

2000-2014, MetaQuotes Software Corp.

1566

Indicadores Tcnicos
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[])
{
//--- nmero de valores copiados a partir do indicador iDEMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iDEMABuffer maior do que o nmero de valores no indicador iDEMA para o sm
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iDEMABuffer com valores do indicador Double Exponential Moving Average
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iDEMABuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Double Exponential Moving Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1567

Indicadores Tcnicos
//| Preencher buffers do indicador a partir do indicador iDEMA

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Double Exponenti

int shift,

// deslocamento

int ind_handle,

// manipulador do indicador iDEMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iDEMABuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iDEMA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1568

Indicadores Tcnicos

iDeMarker
A funo retorna o manipulador do indicador Double DeMarker. Tem apenas um buffer.
int iDeMarker(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

ma_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio (barras contadas) para os clculos.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iDeMarker.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iDeMarker."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iDeMarker


#property indicator_label1

"iDeMarker"\

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

2000-2014, MetaQuotes Software Corp.

1569

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- nveis horizontais na janela de indicador


#property indicator_level1

0.3

#property indicator_level2

0.7

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iDeMarker,

// usar iDeMarker

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iDeMarker;

// tipo de funo

input int

ma_period=14;

// perodo de mdia mvel

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iDeMarkerBuffer[];

//--- varivel para armazenar o manipulador do indicator iDeMarker


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador DeMarker
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iDeMarkerBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iDeMarker)
handle=iDeMarker(name,period,ma_period);

2000-2014, MetaQuotes Software Corp.

1570

Indicadores Tcnicos
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
handle=IndicatorCreate(name,period,IND_DEMARKER,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iDeMarker para o smbolo %s/%s, cdigo


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador DeMarker calculado para
short_name=StringFormat("iDeMarker(%s/%s, period=%d)",name,EnumToString(period),ma_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iDeMarker
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

2000-2014, MetaQuotes Software Corp.

1571

Indicadores Tcnicos

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iDeMarkerBuffer maior do que o nmero de valores no indicador iDeMarker pa


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iDeMarkerBuffer com valores do indicador DeMarker
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iDeMarkerBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador DeMarker
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iDeMarker

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do DeMarker

int ind_handle,

// manipulador do indicador iDeMarker

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iDeMarkerBuffer com valores do buffer do indicador que tem ndic
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iDeMarker, cdigo de erro %d",GetLastError())


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem

2000-2014, MetaQuotes Software Corp.

1572

Indicadores Tcnicos
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1573

Indicadores Tcnicos

iEnvelopes
A funo retorna o manipulador do indicador Envelopes.
int iEnvelopes(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo para o clculo da linha da mdia mvel

int

ma_shift,

// deslocamento horizontal do indicador

ENUM_MA_METHOD

ma_method,

// tipo de suavizao

ENUM_APPLIED_PRICE applied_price,

// tipo de preo ou de manipulador

double

// desvio dos limites da linha mediana (em percentagens)

deviation

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo da mdia mvel para a linha principal.
ma_shift
[in] O deslocamento do indicador em relao grfico de preo.
ma_method
[in] Tipo suavizado. Pode ser um dos valores ENUM_MA_METHOD.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
deviation
[in] O desvio da linha principal (em porcentagem).
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer: 0 - UPPER_LINE, 1 - LOWER_LINE.
Exemplo:
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1574

Indicadores Tcnicos
//|

Demo_iEnvelopes.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar linha superior


#property indicator_label1

"Upper"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar linha inferior


#property indicator_label2

"Lower"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iEnvelopes,

// usar iEnvelopes

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iEnvelopes;

// tipo de funo

input int

ma_period=14;

// perodo de mdia mvel

input int

ma_shift=0;

// deslocamento

input ENUM_MA_METHOD

ma_method=MODE_SMA;

// tipo de suavizao

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input double

deviation=0.1;

// desvio das bordas da mdia mvel

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

UpperBuffer[];

double

LowerBuffer[];

//--- varivel para armazenar o manipulador do indicator iEnvelopes

2000-2014, MetaQuotes Software Corp.

1575

Indicadores Tcnicos
int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Envelopes
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,UpperBuffer,INDICATOR_DATA);
SetIndexBuffer(1,LowerBuffer,INDICATOR_DATA);
//--- definir o deslocamento de cada linha
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
PlotIndexSetInteger(1,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iEnvelopes)
handle=iEnvelopes(name,period,ma_period,ma_shift,ma_method,applied_price,deviation);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[5];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de suavizao
pars[2].type=TYPE_INT;
pars[2].integer_value=ma_method;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
//--- tipo de preo

2000-2014, MetaQuotes Software Corp.

1576

Indicadores Tcnicos
pars[4].type=TYPE_DOUBLE;
pars[4].double_value=deviation;
handle=IndicatorCreate(name,period,IND_ENVELOPES,5,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iEnvelopes para o smbolo %s/%s, cdig


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Envelopes calculado para
short_name=StringFormat("iEnvelopes(%s/%s, %d, %d, %s,%s, %G)",name,EnumToString(period),
ma_period,ma_shift,EnumToString(ma_method),EnumToString(applied_price),deviation);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iEnvelopes
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

2000-2014, MetaQuotes Software Corp.

1577

Indicadores Tcnicos
//--- se o array UpperBuffer maior do que o nmero de valores no indicador iEnvelopes para
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays UpperBuffer e LowerBuffer com valores do indicador Envelopes
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArraysFromBuffers(UpperBuffer,LowerBuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Envelopes
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iEnvelopes

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &upper_values[],

// buffer do indicator linha da borda superio

double &lower_values[],

// indicador da linha da borda inferior

int shift,

// deslocamento

int ind_handle,

// manipulador do indicador iEnvelopes

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array UpperBuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-shift,amount,upper_values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iEnvelopes, cdigo de erro %d",GetLastError()


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array LowerBuffer com valores do buffer do indicador que tem ndice 1
if(CopyBuffer(ind_handle,1,-shift,amount,lower_values)<0)
{

2000-2014, MetaQuotes Software Corp.

1578

Indicadores Tcnicos
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iEnvelopes, cdigo de erro %d",GetLastError()


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1579

Indicadores Tcnicos

iForce
A funo retorna o manipulador do indicador Force Index. Tem apenas um buffer.
int iForce(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

ENUM_MA_METHOD

ma_method,

// tipo suavizado

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para clculo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio para clculo do indicador.
ma_method
[in] Tipo suavizado. Pode ser um dos valores ENUM_MA_METHOD.
applied_volume
[in] O volume usado. Pode ser um dos valores ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iForce.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iForce."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

2000-2014, MetaQuotes Software Corp.

1580

Indicadores Tcnicos

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- desenhando iForce


#property indicator_label1

"iForce"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iForce,

// usar iForce

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iForce;

// tipo de funo

input int

ma_period=13;

// perodo mdio

input ENUM_MA_METHOD

ma_method=MODE_SMA;

// tipo de suavizao

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;

// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iForceBuffer[];

//--- varivel para armazenar o manipulador do indicator iForce


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Force
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iForceBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)

2000-2014, MetaQuotes Software Corp.

1581

Indicadores Tcnicos
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iForce)
handle=iForce(name,period,ma_period,ma_method,applied_volume);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[3];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- tipo de suavizao
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_method;
//--- tipo de volume
pars[2].type=TYPE_INT;
pars[2].integer_value=applied_volume;
//--- tipo de preo
handle=IndicatorCreate(name,period,IND_FORCE,3,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iForce para o smbolo %s/%s, cdigo de


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Force calculado para
short_name=StringFormat("iForce(%s/%s, %d, %s, %s)",name,EnumToString(period),
ma_period,EnumToString(ma_method),EnumToString(applied_volume));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],

2000-2014, MetaQuotes Software Corp.

1582

Indicadores Tcnicos
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- nmero de valores copiados a partir do indicador iForce
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iForceBuffer maior do que o nmero de valores no indicador iForce para o s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iForceBuffer com valores do indicador Force
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iForceBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Force
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iForce

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Force Index

2000-2014, MetaQuotes Software Corp.

1583

Indicadores Tcnicos
int ind_handle,

// manipulador do indicador iForce

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iForceBuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iForce, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1584

Indicadores Tcnicos

iFractals
A funo retorna o manipulador do indicador Fractals.
int iFractals(
string

symbol,

ENUM_TIMEFRAMES period

// smbolo nome
// perodo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer so os seguintes: 0 - UPPER_LINE, 1 - LOWER_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iFractals.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iFractals."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar FractalUp

2000-2014, MetaQuotes Software Corp.

1585

Indicadores Tcnicos
#property indicator_label1

"FractalUp"

#property indicator_type1

DRAW_ARROW

#property indicator_color1

clrBlue

//--- plotar FractalDown


#property indicator_label2

"FractalDown"

#property indicator_type2

DRAW_ARROW

#property indicator_color2

clrRed

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iFractals,

// usar iFractals

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iFractals;

// tipo de funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

FractalUpBuffer[];

double

FractalDownBuffer[];

//--- varivel para armazenar o manipulador do indicator iFractals


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Fractals
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,FractalUpBuffer,INDICATOR_DATA);
SetIndexBuffer(1,FractalDownBuffer,INDICATOR_DATA);

//--- definir cdigos usando um smbolo do conjunto de caractres Wingdings para a propriedade PLOT_
PlotIndexSetInteger(0,PLOT_ARROW,217); // seta acima
PlotIndexSetInteger(1,PLOT_ARROW,218); // seta abaixo
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{

2000-2014, MetaQuotes Software Corp.

1586

Indicadores Tcnicos
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iFractals)
handle=iFractals(name,period);
else
handle=IndicatorCreate(name,period,IND_FRACTALS);
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iFractals para o smbolo %s/%s, cdigo


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Fractals calculado para
short_name=StringFormat("iFractals(%s/%s)",name,EnumToString(period));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iFractals
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

2000-2014, MetaQuotes Software Corp.

1587

Indicadores Tcnicos

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array FractalUpBuffer maior do que o nmero de valores no indicador iFractals pa


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays FractalUpBuffer e FractalDownBuffer com valores do indicador Fractals
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArraysFromBuffers(FractalUpBuffer,FractalDownBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Fractals
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iFractals

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &up_arrows[],

// buffer do indicator para setas acima

double &down_arrows[],

// buffer do indicator para setas abaixo

int ind_handle,

// manipulador do indicador iFractals

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array FractalUpBuffer com valores do buffer do indicador que tem ndic
if(CopyBuffer(ind_handle,0,0,amount,up_arrows)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iFractals ao array FractalUpBuffer array, cd


GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

2000-2014, MetaQuotes Software Corp.

1588

Indicadores Tcnicos

//--- preencher uma parte do array FractalDownBuffer com valores do buffer do indicador que tem nd
if(CopyBuffer(ind_handle,1,0,amount,down_arrows)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iFractals ao array FractalDownBuffer array, c


GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1589

Indicadores Tcnicos

iFrAMA
A funo retorna o manipulador do indicador Fractal Adaptive Moving Average. Tem apenas um buffer.
int iFrAMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

int

ma_shift,

// deslocamento horizontal no grfico

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo (contando as barras) para os clculos do indicador.
ma_shift
[in] Deslocamento do indicador no grfico de preo.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iFrAMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iFrAMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

2000-2014, MetaQuotes Software Corp.

1590

Indicadores Tcnicos

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- desenhando iFrAMA


#property indicator_label1

"iFrAMA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iFrAMA,

// usar iFrAMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iFrAMA;

// tipo de funo

input int

ma_period=14;

// perodo da mdia mvel

input int

ma_shift=0;

// deslocamento

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE;

// tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iFrAMABuffer[];

//--- varivel para armazenar o manipulador do indicator iFrAMA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Fractal Adaptive Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iFrAMABuffer,INDICATOR_DATA);
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);

2000-2014, MetaQuotes Software Corp.

1591

Indicadores Tcnicos
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iFrAMA)
handle=iFrAMA(name,period,ma_period,ma_shift,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[3];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de preo
pars[2].type=TYPE_INT;
pars[2].integer_value=applied_price;
//--- tipo de preo
handle=IndicatorCreate(name,period,IND_FRAMA,3,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iFrAMA para o smbolo %s/%s, cdigo de


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador iFrAMA calculado para
short_name=StringFormat("iFrAMA(%s/%s, %d, %d, %s)",name,EnumToString(period),
ma_period,ma_shift,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,

2000-2014, MetaQuotes Software Corp.

1592

Indicadores Tcnicos
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[])
{
//--- nmero de valores copiados a partir do indicador iFrAMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iFrAMABuffer maior do que o nmero de valores no indicador iFrAMA para o s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iFrAMABuffer com valores do indicador Fractal Adaptive Moving Average
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iFrAMABuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Fractal Adaptive Moving Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1593

Indicadores Tcnicos
//| Preencher buffers do indicador a partir do indicador iFrAMA

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Fractal Adaptive

int shift,

// deslocamento

int ind_handle,

// manipulador do indicador iFrAMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iFrAMABuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iFrAMA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1594

Indicadores Tcnicos

iGator
A funo retorna o manipulador do indicador Gator. O oscilador mostra a diferena entre as linhas azul
e vermelha do Jacar (histograma superior) e diferena entre as linhas vermelha e verde (menor
histograma).
int iGator(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

jaw_period,

// perodo para clculo da mandbula

int

jaw_shift,

// deslocamento horizontal da mandbula

int

teeth_period,

// perodo para clculo dos dentes

int

teeth_shift,

// deslocamento horizontal dos dentes

int

lips_period,

// perodo para o clculo da boca

int

lips_shift,

// deslocamento horizontal da boca

ENUM_MA_METHOD

ma_method,

// tipo de suavizao

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
jaw_period
[in] Perodo mdio para a linha azul (mandbula do Alligator).
jaw_shift
[in] O deslocamento da linha azul em relao tabela de preos. No est diretamente ligado ao
deslocamento visual do histograma do indicador.
teeth_period
[in] Perodo mdio para a linha vermelha (dentes do Alligator).
teeth_shift
[in] O deslocamento da linha vermelha em relao para a tabela de preos. No est diretamente
ligado ao deslocamento visual do histograma do indicador.
lips_period
[in] Perodo mdio para a linha verde (boca de Alligator).
lips_shift
[in] O deslocamento da linha verde em relao tabela de preos. No est diretamente ligado ao
deslocamento visual do histograma do indicador.
ma_method
[in] Tipo suavizado. Pode ser um dos valores ENUM_MA_METHOD.

2000-2014, MetaQuotes Software Corp.

1595

Indicadores Tcnicos
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Nmeros de buffer: 0 - UPPER_HISTOGRAM, 1 - buffer de cor do histograma superior, 2 LOWER_HISTOGRAM, 3 - buffer de cor do histograma inferior.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iGator.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "dos buffers do indicador para o indicador tcnico iGator."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares aos do padro Gator Oscillator."
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots

//--- desenhando GatorUp


#property indicator_label1

"GatorUp"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

#property indicator_color1

clrGreen, clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- desenhando GatorDown


#property indicator_label2

"GatorDown"

#property indicator_type2

DRAW_COLOR_HISTOGRAM

#property indicator_color2

clrGreen, clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation

2000-2014, MetaQuotes Software Corp.

1596

Indicadores Tcnicos
{
Call_iGator,

// usar iGator

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iGator;

// tipo de funo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

input int

jaw_period=13;

// perodo da linha da mandbula

input int

jaw_shift=8;

// deslocamento da linha da mandbula

input int

teeth_period=8;

// perodo da linha dos dentes

input int

teeth_shift=5;

// deslocamento da linha dos dentes

input int

lips_period=5;

// perodo da linha da boca

input int

lips_shift=3;

// deslocamento da linha da boca

input ENUM_MA_METHOD

MA_method=MODE_SMMA;

// mtodo das linhas mdias do Alligator

input ENUM_APPLIED_PRICE

applied_price=PRICE_MEDIAN;// tipo de preo utilizado para o clculo do

//--- buffers do indicador


double

GatorUpBuffer[];

double

GatorUpColors[];

double

GatorDownBuffer[];

double

GatorDownColors[];

//--- varivel para armazenar o manipulador do indicator iGator


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- deslocamento dos valores para os histogramas superior e inferior
int shift;
//--- manteremos o nmero de valores no indicador Gator Oscillator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,GatorUpBuffer,INDICATOR_DATA);
SetIndexBuffer(1,GatorUpColors,INDICATOR_COLOR_INDEX);
SetIndexBuffer(2,GatorDownBuffer,INDICATOR_DATA);
SetIndexBuffer(3,GatorDownColors,INDICATOR_COLOR_INDEX);
/*

Todas as mudanas nos parmetros especificados referem-se o indicador Alligator, que a base par

Isso porque eles no se movem como o indicador Gator em si, mas eles se movem conforme as linha
Cujo os valores so utilizados para calcular o Gator Oscillator!
*/

//--- vamos calcular o deslocamento para os histogramas superior e inferior, que igual diferen
shift=MathMin(jaw_shift,teeth_shift);
PlotIndexSetInteger(0,PLOT_SHIFT,shift);

2000-2014, MetaQuotes Software Corp.

1597

Indicadores Tcnicos

//--- apesar do indicador conter dois histogramas, o mesmo deslocamento usado - esta a execuo
PlotIndexSetInteger(1,PLOT_SHIFT,shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iGator)
handle=iGator(name,period,jaw_period,jaw_shift,teeth_period,teeth_shift,
lips_period,lips_shift,MA_method,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[8];
//--- perodos e deslocamentos da linhas do Alligator
pars[0].type=TYPE_INT;
pars[0].integer_value=jaw_period;
pars[1].type=TYPE_INT;
pars[1].integer_value=jaw_shift;
pars[2].type=TYPE_INT;
pars[2].integer_value=teeth_period;
pars[3].type=TYPE_INT;
pars[3].integer_value=teeth_shift;
pars[4].type=TYPE_INT;
pars[4].integer_value=lips_period;
pars[5].type=TYPE_INT;
pars[5].integer_value=lips_shift;
//--- tipo de suavizao
pars[6].type=TYPE_INT;
pars[6].integer_value=MA_method;
//--- tipo de preo
pars[7].type=TYPE_INT;
pars[7].integer_value=applied_price;
//--- criando o manipulador
handle=IndicatorCreate(name,period,IND_GATOR,8,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iGator para o smbolo %s/%s, cdigo de

2000-2014, MetaQuotes Software Corp.

1598

Indicadores Tcnicos
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Gator Oscillator calculado para
short_name=StringFormat("iGator(%s/%s, %d, %d ,%d, %d, %d, %d)",name,EnumToString(period),
jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iGator
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{
//--- se o array GatorUpBuffer maior do que o nmero de valores no indicador iGator para o
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada

2000-2014, MetaQuotes Software Corp.

1599

Indicadores Tcnicos
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador Gator Oscillator

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffers(GatorUpBuffer,GatorUpColors,GatorDownBuffer,GatorDownColors,
shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Gator Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iGator

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &ups_buffer[],

// buffer do indicator para o histograma s

double &up_color_buffer[],

// buffer do indicator para o ndice de pr

double &downs_buffer[],

// buffer do indicator para o histograma i

double &downs_color_buffer[], // buffer do indicator para o ndice de pr


int u_shift,

// deslocamento para o histograma superior

int ind_handle,

// manipulador do indicador iGator

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array GatorUpBuffer com valores do buffer do indicador que tem ndice
if(CopyBuffer(ind_handle,0,-u_shift,amount,ups_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iGator, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array GatorUpColors com valores do buffer do indicador que tem ndice
if(CopyBuffer(ind_handle,1,-u_shift,amount,up_color_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iGator, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

2000-2014, MetaQuotes Software Corp.

1600

Indicadores Tcnicos

//--- preencher uma parte do array GatorDownBuffer com valores do buffer do indicador que tem ndic
if(CopyBuffer(ind_handle,2,-u_shift,amount,downs_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iGator, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array GatorDownColors com valores do buffer do indicador que tem ndic
if(CopyBuffer(ind_handle,3,-u_shift,amount,downs_color_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iGator, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1601

Indicadores Tcnicos

iIchimoku
A funo retorna o manipulador do indicador Ichimoku Kinko Hyo.
int iIchimoku(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

tenkan_sen,

// perodo Tenkan-sen

int

kijun_sen,

// perodo Kijun-sen

int

senkou_span_b

// perodo Senkou Span B

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
tenkan_sen
[in] Perodo mdio para Tenkan Sen.
kijun_sen
[in] Perodo mdio para Kijun Sen.
senkou_span_b
[in] Perodo mdio para Senkou Span B.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer: 0 - TENKANSEN_LINE, 1 - KIJUNSEN_LINE, 2 - SENKOUSPANA_LINE, 3 SENKOUSPANB_LINE, 4 - CHINKOUSPAN_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iIchimoku.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"

2000-2014, MetaQuotes Software Corp.

1602

Indicadores Tcnicos
#property description "de buffers do indicador para o indicador tcnico iIchimoku."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros, assim como no padro Ichimoku Kinko Hyo."
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots

//--- plotar Tenkan_sen


#property indicator_label1

"Tenkan_sen"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar Kijun_sen


#property indicator_label2

"Kijun_sen"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrBlue

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- plotar Senkou_Span


#property indicator_label3

"Senkou Span A;Senkou Span B" // two fields will be shown in Data Windo

#property indicator_type3

DRAW_FILLING

#property indicator_color3

clrSandyBrown, clrThistle

#property indicator_style3

STYLE_SOLID

#property indicator_width3

//--- plotar Chinkou_Span


#property indicator_label4

"Chinkou_Span"

#property indicator_type4

DRAW_LINE

#property indicator_color4

clrLime

#property indicator_style4

STYLE_SOLID

#property indicator_width4

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iIchimoku,

// usar iIchimoku

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iIchimoku;

// tipo de funo

input int

tenkan_sen=9;

// perodo Tenkan-sen

input int

kijun_sen=26;

// perodo Kijun-sen

input int

senkou_span_b=52;

// perodo Senkou Span B

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador

2000-2014, MetaQuotes Software Corp.

1603

Indicadores Tcnicos
double

Tenkan_sen_Buffer[];

double

Kijun_sen_Buffer[];

double

Senkou_Span_A_Buffer[];

double

Senkou_Span_B_Buffer[];

double

Chinkou_Span_Buffer[];

//--- varivel para armazenar o manipulador do indicator iIchimoku


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Ichimoku Kinko Hyo
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,Tenkan_sen_Buffer,INDICATOR_DATA);
SetIndexBuffer(1,Kijun_sen_Buffer,INDICATOR_DATA);
SetIndexBuffer(2,Senkou_Span_A_Buffer,INDICATOR_DATA);
SetIndexBuffer(3,Senkou_Span_B_Buffer,INDICATOR_DATA);
SetIndexBuffer(4,Chinkou_Span_Buffer,INDICATOR_DATA);
//--- definir o deslocamento para o canal Senkou Span das barras kijun_sen na futura direo
PlotIndexSetInteger(2,PLOT_SHIFT,kijun_sen);

//--- no necessrio definir um deslocamento para a linha Span Chinkou, uma vez que os dados Chin
//--- j esto armazenados com um deslocamento na iIchimoku
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iIchimoku)
handle=iIchimoku(name,period,tenkan_sen,kijun_sen,senkou_span_b);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[3];
//--- perodos e deslocamentos da linhas do Alligator
pars[0].type=TYPE_INT;
pars[0].integer_value=tenkan_sen;

2000-2014, MetaQuotes Software Corp.

1604

Indicadores Tcnicos
pars[1].type=TYPE_INT;
pars[1].integer_value=kijun_sen;
pars[2].type=TYPE_INT;
pars[2].integer_value=senkou_span_b;
//--- criando o manipulador
handle=IndicatorCreate(name,period,IND_ICHIMOKU,3,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iIchimoku para o smbolo %s/%s, cdigo


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Ichimoku Kinko Hyo calculado para
short_name=StringFormat("iIchimoku(%s/%s, %d, %d ,%d)",name,EnumToString(period),
tenkan_sen,kijun_sen,senkou_span_b);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iIchimoku
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

2000-2014, MetaQuotes Software Corp.

1605

Indicadores Tcnicos

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{
//--- se o array Tenkan_sen_Buffer maior do que o nmero de valores no indicador iIchimoku
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador Ichimoku Kinko Hyo

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,

if(!FillArraysFromBuffers(Tenkan_sen_Buffer,Kijun_sen_Buffer,Senkou_Span_A_Buffer,Senkou_Span_B_
kijun_sen,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Ichimoku Kinko Hyo
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iIchimoku

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &tenkan_sen_buffer[],

// buffer do indicador da linha Tenkan-

double &kijun_sen_buffer[],

// buffer do indicator da linha Kijun_s

double &senkou_span_A_buffer[],

// buffer do indicator da linha Senkou

double &senkou_span_B_buffer[],

// buffer do indicator da linha Senkou

double &chinkou_span_buffer[],

// buffer do indicator da linha Chinkou

int senkou_span_shift,

// deslocamento das linhas Senkou Span

int ind_handle,

// manipulador do iIchimoku

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array Tenkan_sen_Buffer com valores do buffer do indicador que tem nd
if(CopyBuffer(ind_handle,0,0,amount,tenkan_sen_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

2000-2014, MetaQuotes Software Corp.

1606

Indicadores Tcnicos

PrintFormat("1.Falha ao copiar dados do indicador iIchimoku, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array Kijun_sen_Buffer com valores do buffer do indicador que tem ndi
if(CopyBuffer(ind_handle,1,0,amount,kijun_sen_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("2.Falha ao copiar dados do indicador iIchimoku, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array Chinkou_Span_Buffer com valores do buffer do indicador que tem
//--- se senkou_span_shift>0, a linha deslocada na direo futura pelas barras senkou_span_shift
if(CopyBuffer(ind_handle,2,-senkou_span_shift,amount,senkou_span_A_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("3.Falha ao copiar dados do indicador iIchimoku, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array com valores do buffer do indicador que tem ndice 3 (trs)
//--- se senkou_span_shift>0, a linha deslocada na direo futura pelas barras senkou_span_shift
if(CopyBuffer(ind_handle,3,-senkou_span_shift,amount,senkou_span_B_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("4.Falha ao copiar dados do indicador iIchimoku, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- preencher uma parte do array Senkou_Span_B_Buffer com valores do buffer do indicador que tem

//--- ao copiar Chinkou Span, no precisamos considerar a mudana, uma vez que os dados Chinkou Spa
//--- j esto armazenados com um deslocamento na iIchimoku
if(CopyBuffer(ind_handle,4,0,amount,chinkou_span_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("5.Falha ao copiar dados do indicador iIchimoku, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

2000-2014, MetaQuotes Software Corp.

1607

Indicadores Tcnicos
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1608

Indicadores Tcnicos

iBWMFI
A funo retorna o manipulador do indicador Market Facilitation Index. Tem apenas um buffer.
int iBWMFI(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para o clculo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
applied_volume
[in] O volume usado. Pode ser uma das constantes do ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iBWMFI.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iBWMFI."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar iBWMFI


#property indicator_label1

"iBWMFI"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

#property indicator_color1

clrLime,clrSaddleBrown,clrBlue,clrPink

2000-2014, MetaQuotes Software Corp.

1609

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iBWMFI,

// usar iBWMFI

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iBWMFI;

// tipo de funo

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iBWMFIBuffer[];

double

iBWMFIColors[];

//--- varivel para armazenar o manipulador do indicator iBWMFI


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;

//--- varivel para armazenar o manipulador do indicador Market Facilitation Index por Bill William
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,iBWMFIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,iBWMFIColors,INDICATOR_COLOR_INDEX);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iBWMFI)
handle=iBWMFI(name,period,applied_volume);
else

2000-2014, MetaQuotes Software Corp.

1610

Indicadores Tcnicos
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
//--- tipo de volume
pars[0].type=TYPE_INT;
pars[0].integer_value=applied_volume;
handle=IndicatorCreate(name,period,IND_BWMFI,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iBWMFI para o smbolo %s/%s, cdigo de


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}

//--- mostrar que o smbolo/perodo do indicador Market Facilitation Index por Bill Williams calc
short_name=StringFormat("iBWMFI(%s/%s, %s)",name,EnumToString(period),
EnumToString(applied_volume));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiado do indicador iBWMFI
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

2000-2014, MetaQuotes Software Corp.

1611

Indicadores Tcnicos

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iBWMFIBuffer maior do que o nmero de valores no indicador iBWMFI para o s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com os valores do indicador Market Facilitation Index por Bill Williams

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffers(iBWMFIBuffer,iBWMFIColors,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Market Facilitation Index por Bill Williams
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iBWMFI

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &values[],

// buffer do indicator para os valores do histogram

double &colors[],

// buffer do indicator para cores do histograma

int ind_handle,

// manipulado do indicador iBWMFI

int amount

// nmero de valores copiado

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iBWMFIBuffer com valores do indicador buffer do indicador que te
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iBWMFI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

2000-2014, MetaQuotes Software Corp.

1612

Indicadores Tcnicos

//--- preencher uma parte do array iBWMFIColors com valores do buffer do indicador que tem ndice 1
if(CopyBuffer(ind_handle,1,0,amount,colors)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iBWMFI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1613

Indicadores Tcnicos

iMomentum
A funo retorna o manipulador do indicador Momentum. Tem apenas um buffer.
int iMomentum(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

mom_period,

// perodo mdio

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou de manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
mom_period
[in] Perodo mdio(barras contadas) para o clculo de modificao do preo.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iMomentum.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iMomentum."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares ao padro Momentum."
#property indicator_separate_window

2000-2014, MetaQuotes Software Corp.

1614

Indicadores Tcnicos
#property indicator_buffers 1
#property indicator_plots

//--- plotar iMomentum


#property indicator_label1

"iMomentum"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrDodgerBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iMomentum,

// usar iMomentum

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iMomentum;

// tipo de funo

input int

mom_period=14;

// perodo do indicador Momentum

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iMomentumBuffer[];

//--- varivel para armazenar o manipulador do indicator iMomentum


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Momentum
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iMomentumBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;

2000-2014, MetaQuotes Software Corp.

1615

Indicadores Tcnicos
}
//--- criar manipulador do indicador
if(type==Call_iMomentum)
handle=iMomentum(name,period,mom_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=mom_period;
//--- tipo de preo
pars[1].type=TYPE_INT;
pars[1].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_MOMENTUM,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iMomentum para o smbolo %s/%s, cdigo


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Momentum calculado para
short_name=StringFormat("iMomentum(%s/%s, %d, %s)",name,EnumToString(period),
mom_period, EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iMomentum

2000-2014, MetaQuotes Software Corp.

1616

Indicadores Tcnicos
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iMomentumBuffer maior do que o nmero de valores no indicador iMomentum pa


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iMomentumBuffer com valores do indicador Momentum
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iMomentumBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Momentum
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iMomentum

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Momentum

int ind_handle,

// manipulador do indicador iMomentum

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iMomentumBuffer com valores do buffer do indicador que tem ndic

2000-2014, MetaQuotes Software Corp.

1617

Indicadores Tcnicos
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iMomentum, cdigo de erro %d",GetLastError())


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1618

Indicadores Tcnicos

iMFI
A funo retorna o manipulador do indicador Money Flow Index.
int iMFI(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para o clculo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio (barras contadas) para clculo.
applied_volume
[in] O volume usado. Pode ser um dos valores ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iMFI.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iMFI."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares ao padro Money Flow Index."
#property indicator_separate_window
#property indicator_buffers 1

2000-2014, MetaQuotes Software Corp.

1619

Indicadores Tcnicos
#property indicator_plots

//--- plotar iMFI


#property indicator_label1

"iMFI"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrDodgerBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- nveis horizontais na janela de indicador


#property indicator_level1

20

#property indicator_level2

80

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iMFI,

// usar iMFI

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iMFI;

// tipo de funo

input int

ma_period=14;

// perodo

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;

// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iMFIBuffer[];

//--- varivel para armazenar o manipulador do indicator iMFI


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Money Flow Index
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iMFIBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{

2000-2014, MetaQuotes Software Corp.

1620

Indicadores Tcnicos
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iMFI)
handle=iMFI(name,period,ma_period,applied_volume);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- tipo de volume
pars[1].type=TYPE_INT;
pars[1].integer_value=applied_volume;
handle=IndicatorCreate(name,period,IND_MFI,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador para o smbolo %s/%s, cdigo de erro %


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Money Flow Index calculado para
short_name=StringFormat("iMFI(%s/%s, %d, %s)",name,EnumToString(period),
ma_period, EnumToString(applied_volume));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])

2000-2014, MetaQuotes Software Corp.

1621

Indicadores Tcnicos
{
//--- nmero de valores copiados a partir do indicador iMFI
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iMFIBuffer maior do que o nmero de valores no indicador iMFI para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iMFIBuffer com valores do indicador Money Flow Index
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iMFIBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Flow Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iMFI

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],

// buffer do indicator para valores do Money Flow Index

int ind_handle,

// manipulador do indicador iMFI

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro

2000-2014, MetaQuotes Software Corp.

1622

Indicadores Tcnicos
ResetLastError();

//--- preencher uma parte do array iMFIBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iMFI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1623

Indicadores Tcnicos

iMA
A funo retorna o manipulador do indicador Moving Average. Tem apenas um buffer.
int iMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

int

ma_shift,

// deslocamento horizontal

ENUM_MA_METHOD

ma_method,

// tipo suavizado

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou de manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio para clculo da mdia mvel.
ma_shift
[in] Deslocamento do indicador relativo ao grfico de preos.
ma_method
[in] Tipo suavizado. Pode ser um dos valores ENUM_MA_METHOD.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

2000-2014, MetaQuotes Software Corp.

1624

Indicadores Tcnicos
#property description "O indicador demonstra como obter dados"
#property description "de buffers do indicador para o indicador tcnico iMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros, assim como no padro Moving Average."
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iMA


#property indicator_label1

"iMA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iMA,

// usar iMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iMA;

// tipo de funo

input int

ma_period=10;

// perodo da mdia mvel

input int

ma_shift=0;

// deslocamento

input ENUM_MA_METHOD

ma_method=MODE_SMA;

// tipo de suavizao

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE;

// tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iMABuffer[];

//--- varivel para armazenar o manipulador do indicator iMA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iMABuffer,INDICATOR_DATA);

2000-2014, MetaQuotes Software Corp.

1625

Indicadores Tcnicos
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iMA)
handle=iMA(name,period,ma_period,ma_shift,ma_method,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de suavizao
pars[2].type=TYPE_INT;
pars[2].integer_value=ma_method;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_MA,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iMA para o smbolo %s/%s, cdigo de er


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Moving Average calculado para
short_name=StringFormat("iMA(%s/%s, %d, %d, %s, %s)",name,EnumToString(period),

ma_period, ma_shift,EnumToString(ma_method),EnumToString(applied_price))
IndicatorSetString(INDICATOR_SHORTNAME,short_name);

2000-2014, MetaQuotes Software Corp.

1626

Indicadores Tcnicos
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iMABuffer maior do que o nmero de valores no indicador iMA para o smbolo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array iMABuffer com valores do indicador Adaptive Moving Average
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iMABuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);

2000-2014, MetaQuotes Software Corp.

1627

Indicadores Tcnicos
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Moving Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador MA

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &values[],
int shift,

// buffer do indicator para valores do Moving Average


// deslocamento

int ind_handle,

// manipulador do indicador iMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iMABuffer com valores do buffer do indicador que tem ndice 0 (z
if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iMA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1628

Indicadores Tcnicos

iOsMA
A funo retorna o manipulador do indicador Moving Average of Oscillator. O oscilador s mostra a
diferena entre valores do indicador MACD e sua linha de sinal. Tem apenas um buffer.
int iOsMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

fast_ema_period,

// perodo Mdia Mvel Rpida

int

slow_ema_period,

// perodo Mdia Mvel Lenta

int

signal_period,

// perodo para diferena entre as mdias

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou de manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
fast_ema_period
[in] Perodo para clculo da Mdia Mvel Rpida.
slow_ema_period
[in] Perodo para clculo da Mdia Mvel Lenta.
signal_period
[in] Perodo para o clculo da linha de sinal.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Em alguns sistemas este oscilador tambm conhecido como histograma MACD.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iOsMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

2000-2014, MetaQuotes Software Corp.

1629

Indicadores Tcnicos
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iOsMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

#property description "Todos os outros parmetros so similares ao padro Moving Average of Oscilla
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iOsMA


#property indicator_label1

"iOsMA"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrSilver

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iOsMA,

// usar iOsMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iOsMA;

// tipo de funo

input int

fast_ema_period=12;

// perodo da Mdia Mvel Rpida

input int

slow_ema_period=26;

// perodo da Mdia Mvel Lenta

input int

signal_period=9;

// perodo da diferena entre as mdias mvei

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iOsMABuffer[];

//--- varivel para armazenar o manipulador do indicador iAMA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

1630

Indicadores Tcnicos
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iOsMABuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iOsMA)
handle=iOsMA(name,period,fast_ema_period,slow_ema_period,signal_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo da mdia mvel rpida
pars[0].type=TYPE_INT;
pars[0].integer_value=fast_ema_period;
//--- perodo lento da mdia mvel
pars[1].type=TYPE_INT;
pars[1].integer_value=slow_ema_period;
//--- perodo mdio da diferena entre a mdia mvel rpida e a lenta
pars[2].type=TYPE_INT;
pars[2].integer_value=signal_period;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_OSMA,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iOsMA para o smbolo %s/%s, cdigo de
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Moving Average of Oscillator calculado para
short_name=StringFormat("iOsMA(%s/%s,%d,%d,%d,%s)",name,EnumToString(period),

2000-2014, MetaQuotes Software Corp.

1631

Indicadores Tcnicos

fast_ema_period,slow_ema_period,signal_period,EnumToString(applied_price
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iOsMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iOsMABuffer maior do que o nmero de valores no indicador iOsMA para o sm
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador iOsMA
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iOsMABuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),

2000-2014, MetaQuotes Software Corp.

1632

Indicadores Tcnicos
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Moving Average of Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iOsMA

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &ama_buffer[],

// buffer do indicator para valores do OsMA

int ind_handle,

// manipulador do indicador iOsMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iOsMABuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,0,amount,ama_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iOsMA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1633

Indicadores Tcnicos

iMACD
A funo retorna o manipulador do indicador Moving Averages Convergence/Divergence. Em sistemas
onde s chamado Histograma MACD, este indicador apresentado com duas linhas. No terminal
do cliente, o indicador Moving Averages Convergence/Divergence apresentado como um histograma.
int iMACD(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

fast_ema_period,

// perodo para clculo da mdia mvel rpida

int

slow_ema_period,

// perodo para clculo da mdia mvel lenta

int

signal_period,

// perodo para diferena entre as mdias

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou de manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
fast_ema_period
[in] Perodo para clculo da Mdia Mvel Rpida.
slow_ema_period
[in] Perodo para clculo da Mdia Mvel Lenta.
signal_period
[in] Perodo para clculo da linha de Sinal.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer so os seguintes: 0 - MAIN_LINE, 1 - SIGNAL_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iMACD.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

2000-2014, MetaQuotes Software Corp.

1634

Indicadores Tcnicos
//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iMACD."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros, assim como no padro MACD."
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar MACD


#property indicator_label1

"MACD"

#property indicator_type1

DRAW_HISTOGRAM

#property indicator_color1

clrSilver

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar Signal


#property indicator_label2

"Signal"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrRed

#property indicator_style2

STYLE_DOT

#property indicator_width2

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iMACD,

// usar iMACD

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iMACD;

// tipo de funo

input int

fast_ema_period=12;

// perodo da Mdia Mvel Rpida

input int

slow_ema_period=26;

// perodo da Mdia Mvel Lenta

input int

signal_period=9;

// perodo da diferena entre as mdias mvei

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

MACDBuffer[];

double

SignalBuffer[];

//--- varivel para armazenar o manipulador do indicator iMACD


int

handle;

//--- varivel para armazenamento

2000-2014, MetaQuotes Software Corp.

1635

Indicadores Tcnicos
string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Moving Averages Convergence/Divergence
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,MACDBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iMACD)
handle=iMACD(name,period,fast_ema_period,slow_ema_period,signal_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo da mdia mvel rpida
pars[0].type=TYPE_INT;
pars[0].integer_value=fast_ema_period;
//--- perodo lento da mdia mvel
pars[1].type=TYPE_INT;
pars[1].integer_value=slow_ema_period;
//--- perodo mdio da diferena entre a mdia mvel rpida e a lenta
pars[2].type=TYPE_INT;
pars[2].integer_value=signal_period;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_MACD,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

2000-2014, MetaQuotes Software Corp.

1636

Indicadores Tcnicos
PrintFormat("Falha ao criar o manipulador do indicador iMACD para o smbolo %s/%s, cdigo de
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}

//--- mostra que o smbolo/prazo do indicador Moving Average Convergence/Divergence calculado par
short_name=StringFormat("iMACD(%s/%s,%d,%d,%d,%s)",name,EnumToString(period),

fast_ema_period,slow_ema_period,signal_period,EnumToString(applied_price
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iMACD
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array MACDBuffer maior do que o nmero de valores no indicador iMACD para o smb
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama

2000-2014, MetaQuotes Software Corp.

1637

Indicadores Tcnicos
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador iMACD

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffers(MACDBuffer,SignalBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicadorMoving Averages Convergence/Divergence
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iMACD

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &macd_buffer[],

// buffer do indicator para valores de MACD

double &signal_buffer[],

// buffer do indicator da linha de sinal do in

int ind_handle,

// manipulador do indicador iMACD

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iMACDBuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,0,amount,macd_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iMACD, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array SignalBuffer com valores do buffer do indicador que tem ndice 1
if(CopyBuffer(ind_handle,1,0,amount,signal_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iMACD, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}

2000-2014, MetaQuotes Software Corp.

1638

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1639

Indicadores Tcnicos

iOBV
A funo retorna o manipulador do indicador On Balance Volume. Tem apenas um buffer.
int iOBV(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para clculo

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
applied_volume
[in] O volume usado. Pode ser um dos valores ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iOBV.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iOBV."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iOBV


#property indicator_label1

"iOBV"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

2000-2014, MetaQuotes Software Corp.

1640

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iOBV ,

// usar iOBV

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iOBV;

// tipo de funo

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;

// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

iOBVBuffer[];

//--- varivel para armazenar o manipulador do indicator iOBV


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador On Balance Volume
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iOBVBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iOBV)
handle=iOBV(name,period,applied_volume);
else
{
//--- preencher a estrutura com os parmetros do indicador

2000-2014, MetaQuotes Software Corp.

1641

Indicadores Tcnicos
MqlParam pars[1];
//--- tipo de volume
pars[0].type=TYPE_INT;
pars[0].integer_value=applied_volume;
handle=IndicatorCreate(name,period,IND_OBV,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador para o smbolo %s/%s, cdigo de erro %


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador On Balance Volume calculado para
short_name=StringFormat("iOBV(%s/%s, %s)",name,EnumToString(period),
EnumToString(applied_volume));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iOBV
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud

2000-2014, MetaQuotes Software Corp.

1642

Indicadores Tcnicos
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iOBVBuffer maior do que o nmero de valores no indicador iOBV para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador iOBV
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iOBVBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador On Balance Volume
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iOBV

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &obv_buffer[],

// buffer do indicator para valores do OBV

int ind_handle,

// manipulador do indicador iOBV

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iOBVBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,obv_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iOBV, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}

2000-2014, MetaQuotes Software Corp.

1643

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1644

Indicadores Tcnicos

iSAR
A funo retorna o manipulador do indicador Parabolic Stop and Reverse system. Tem apenas um
buffer.
int iSAR(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

double

step,

// incrementar passo

double

maximum

// mximo nvel de parada

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
step
[in] O nvel de parada incrementado, usualmente 0.02.
maximum
[in] O mximo nvel de parada, usualmente 0.2.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iSAR.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iSAR."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

#property description "Todos os outros parmetros so similares ao padro Parabolic Stop and Revers
#property indicator_chart_window

2000-2014, MetaQuotes Software Corp.

1645

Indicadores Tcnicos
#property indicator_buffers 1
#property indicator_plots

//--- desenhando iSAR


#property indicator_label1

"iSAR"

#property indicator_type1

DRAW_ARROW

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iSAR,

// usar iSAR

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iSAR;

// tipo de funo

input double

step=0.02;

// passo - o fator de acelerao para arra

input double

maximum=0.2;

// mximo valor do passo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

iSARBuffer[];

//--- varivel para armazenar o manipulador do indicator iSAR


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Parabolic SAR
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iSARBuffer,INDICATOR_DATA);

//--- definir um cdigo de smbolo do conjunto de caracteres Wingdings para a propriedade PLOT_ARRO
PlotIndexSetInteger(0,PLOT_ARROW,159);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{

2000-2014, MetaQuotes Software Corp.

1646

Indicadores Tcnicos
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iSAR)
handle=iSAR(name,period,step,maximum);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- valor do passo
pars[0].type=TYPE_DOUBLE;
pars[0].double_value=step;
//--- limite do valor do passo que pode ser usado para os clculos
pars[1].type=TYPE_DOUBLE;
pars[1].double_value=maximum;
handle=IndicatorCreate(name,period,IND_SAR,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iSAR para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Parabolic SAR calculado para
short_name=StringFormat("iSAR(%s/%s, %G, %G)",name,EnumToString(period),
step,maximum);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])

2000-2014, MetaQuotes Software Corp.

1647

Indicadores Tcnicos
{
//--- nmero de valores copiados a partir do indicador iSAR
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iSARBuffer maior do que o nmero de valores no indicador iSAR para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador iSAR
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iSARBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador SAR
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iSAR

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &sar_buffer[],

// buffer do indicator para valores do Parabolic SA

int ind_handle,

// manipulador do indicador iSAR

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro

2000-2014, MetaQuotes Software Corp.

1648

Indicadores Tcnicos
ResetLastError();

//--- preencher uma parte do array iSARBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,sar_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iSAR, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1649

Indicadores Tcnicos

iRSI
A funo retorna o manipulador do indicador Relative Strength Index. Tem apenas um buffer.
int iRSI(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio para clculo do RSI.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iRSI.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iRSI."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

#property description "Todos os outros parmetros so similares ao padro Relative Strength Index."
#property indicator_separate_window

2000-2014, MetaQuotes Software Corp.

1650

Indicadores Tcnicos
#property indicator_buffers 1
#property indicator_plots

//--- desenhando iRSI


#property indicator_label1

"iRSI"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrDodgerBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- limites para mostrar os valores na janela do indicador


#property indicator_maximum 100
#property indicator_minimum 0
//--- nveis horizontais na janela de indicador
#property indicator_level1

70.0

#property indicator_level2

30.0

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iRSI,

// usar iRSI

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iRSI;

// tipo de funo

input int

ma_period=14;

// perodo da mdia mvel

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE;

// tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iRSIBuffer[];

//--- varivel para armazenar o manipulador do indicator iRSI


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Relative Strength Index
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iRSIBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);

2000-2014, MetaQuotes Software Corp.

1651

Indicadores Tcnicos
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iRSI)
handle=iRSI(name,period,ma_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- perodo de mdia mvel
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- limite do valor do passo que pode ser usado para os clculos
pars[1].type=TYPE_INT;
pars[1].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_RSI,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iRSI para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Relative Strength Index calculado para
short_name=StringFormat("iRSI(%s/%s, %d, %d)",name,EnumToString(period),
ma_period,applied_price);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],

2000-2014, MetaQuotes Software Corp.

1652

Indicadores Tcnicos
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- nmero de valores copiados a partir do indicador iRSI
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iRSIBuffer maior do que o nmero de valores no indicador iRSI para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador iRSI
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iRSIBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Relative Strength Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &rsi_buffer[],
int ind_handle,

// buffer do indicator para valores do Relative Str


// manipulador do indicador iRSI

2000-2014, MetaQuotes Software Corp.

1653

Indicadores Tcnicos
int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iRSIBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,rsi_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iRSI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1654

Indicadores Tcnicos

iRVI
A funo retorna o manipulador do indicador Relative Vigor Index.
int iRVI(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

ma_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio para clculo do indicador RVI.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
Os nmeros de buffer so os seguintes: 0 - MAIN_LINE, 1 - SIGNAL_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iRVI.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iRVI."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares ao padro Relative Vigor Index."
#property indicator_separate_window
#property indicator_buffers 2

2000-2014, MetaQuotes Software Corp.

1655

Indicadores Tcnicos
#property indicator_plots

//--- plotar RVI


#property indicator_label1

"RVI"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar Signal


#property indicator_label2

"Signal"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iRVI,

// usar iRVI

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iRVI;

// tipo de funo

input int

ma_period=10;

// perodo para clculos

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

RVIBuffer[];

double

SignalBuffer[];

//--- varivel para armazenar o manipulador do indicator iRVI


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Relative Vigor Index
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,RVIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);

2000-2014, MetaQuotes Software Corp.

1656

Indicadores Tcnicos
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iRVI)
handle=iRVI(name,period,ma_period);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
//--- perodo para clculos
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
handle=IndicatorCreate(name,period,IND_RVI,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iRVI para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Relative Vigor Index calculado para
short_name=StringFormat("iRVI(%s/%s, %d, %d)",name,EnumToString(period),ma_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])

2000-2014, MetaQuotes Software Corp.

1657

Indicadores Tcnicos
{
//--- nmero de valores copiados a partir do indicador iRVI
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array RVIBuffer maior do que o nmero de valores no indicador iRVI para o smbol
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador iRVI
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(RVIBuffer,SignalBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Relative Vigor Index
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iRVI

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &rvi_buffer[],

// buffer do indicator para valores do Relative

double &signal_buffer[],

// buffer do indicator da linha de sinal

int ind_handle,

// manipulador do indicador iRVI

int amount

// nmero de valores copiados

)
{

2000-2014, MetaQuotes Software Corp.

1658

Indicadores Tcnicos
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iRVIBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,rvi_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iRVI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array SignalBuffer com valores do buffer do indicador que tem ndice 1
if(CopyBuffer(ind_handle,1,0,amount,signal_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iRVI, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1659

Indicadores Tcnicos

iStdDev
A funo retorna o manipulador do indicador Standard Deviation. Tem apenas um buffer.
int iStdDev(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

int

ma_shift,

// deslocamento horizontal

ENUM_MA_METHOD

ma_method,

// tipo suavizado

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio para clculos do indicador.
ma_shift
[in] Deslocamento do indicador relativo ao grfico de preos.
ma_method
[in] Tipo de mdia. Pode ser qualquer um dos valores do ENUM_MA_METHOD.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iStdDev.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

2000-2014, MetaQuotes Software Corp.

1660

Indicadores Tcnicos
#property description "O indicador demonstra como obter dados"
#property description "de buffers do indicador para o indicador tcnico iStdDev."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares ao padro Deviation."
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iStdDev


#property indicator_label1

"iStdDev"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrMediumSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iStdDev,

// usar iStdDev

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iStdDev;

// tipo de funo

input int

ma_period=20;

// perodo mdio

input int

ma_shift=0;

// deslocamento

input ENUM_MA_METHOD

ma_method=MODE_SMA;

// tipo de suavizao

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iStdDevBuffer[];

//--- varivel para armazenar o manipulador do indicator iStdDev


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Standard Deviation
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iStdDevBuffer,INDICATOR_DATA);

2000-2014, MetaQuotes Software Corp.

1661

Indicadores Tcnicos
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iStdDev)
handle=iStdDev(name,period,ma_period,ma_shift,ma_method,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de suavizao
pars[2].type=TYPE_INT;
pars[2].integer_value=ma_method;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_STDDEV,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iStdDev para o smbolo %s/%s, cdigo d


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Standard Deviation calculado para
short_name=StringFormat("iStdDev(%s/%s, %d, %d, %s, %s)",name,EnumToString(period),

ma_period,ma_shift,EnumToString(ma_method),EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);

2000-2014, MetaQuotes Software Corp.

1662

Indicadores Tcnicos
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iStdDev
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iStdDevBuffer maior do que o nmero de valores no indicador iStdDev para o
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Standard Deviation
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iStdDevBuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);

2000-2014, MetaQuotes Software Corp.

1663

Indicadores Tcnicos
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Standard Deviation
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iStdDev

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &std_buffer[],

// buffer do indicator para linha Standard Deviatio

int std_shift,

// deslocamento da linha Standard Deviation

int ind_handle,

// manipulador do indicador iStdDev

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iStdDevBuffer com valores do buffer do indicador que tem ndice
if(CopyBuffer(ind_handle,0,-std_shift,amount,std_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iStdDev, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1664

Indicadores Tcnicos

iStochastic
A funo retorna o manipulador do indicador Stochastic Oscillator.
int iStochastic(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

Kperiod,

// K-period (nmero de barras para clculos)

int

Dperiod,

// D-period (perodo da primeira suavizao)

int

slowing,

// final da suavizao

ENUM_MA_METHOD

ma_method,

// tipo de suavizao

ENUM_STO_PRICE

price_field

// mtodo de clculo estocstico

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
Kperiod
[in] Perodo mdio (barras contadas) para o clculo da linha K%.
Dperiod
[in] Perodo mdio (barras contadas) para o clculo da linha %D.
slowing
[in] Valor da desacelerao.
ma_method
[in] Tipo de mdia. Pode ser qualquer um dos valores do ENUM_MA_METHOD.
price_field
[in] Parmetros de seleo de preo para clculos. Pode ser um dos valoresENUM_STO_PRICE.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Observao
O nmero de buffer: 0 - MAIN_LINE, 1 - SIGNAL_LINE.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iStochastic.mq5 |

2000-2014, MetaQuotes Software Corp.

1665

Indicadores Tcnicos
//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iStochastic."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property description "Todos os outros parmetros so similares ao padro."
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar Stochastic


#property indicator_label1

"Stochastic"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrLightSeaGreen

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- plotar Signal


#property indicator_label2

"Signal"

#property indicator_type2

DRAW_LINE

#property indicator_color2

clrRed

#property indicator_style2

STYLE_SOLID

#property indicator_width2

//--- definir o limite dos valores do indicador


#property indicator_minimum 0
#property indicator_maximum 100
//--- nveis horizontais na janela de indicador
#property indicator_level1

-100.0

#property indicator_level2

100.0

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iStochastic,

// usar iStochastic

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iStochastic;

// tipo de funo

input int

Kperiod=5;

// o perodo K ( o nmero de barras para clc

input int

Dperiod=3;

// o perodo D (o perodo da suavizao prim

input int

slowing=3;

// perodo final da suavizao

input ENUM_MA_METHOD

ma_method=MODE_SMA;

// tipo de suavizao

input ENUM_STO_PRICE

price_field=STO_LOWHIGH;

// mtodo de clculo do Estocstico

2000-2014, MetaQuotes Software Corp.

1666

Indicadores Tcnicos
input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

StochasticBuffer[];

double

SignalBuffer[];

//--- varivel para armazenar o manipulador do indicator iStochastic


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Stochastic Oscillatorr
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de arrays para buffers do indicador
SetIndexBuffer(0,StochasticBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iStochastic)
handle=iStochastic(name,period,Kperiod,Dperiod,slowing,ma_method,price_field);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[5];
//--- o perodo K para clculos
pars[0].type=TYPE_INT;
pars[0].integer_value=Kperiod;
//--- o perodo D para suavizao primria
pars[1].type=TYPE_INT;
pars[1].integer_value=Dperiod;
//--- o perodo K final para suavizao
pars[2].type=TYPE_INT;
pars[2].integer_value=slowing;
//--- tipo de suavizao

2000-2014, MetaQuotes Software Corp.

1667

Indicadores Tcnicos
pars[3].type=TYPE_INT;
pars[3].integer_value=ma_method;
//--- mtodo de clculo do Estocstico
pars[4].type=TYPE_INT;
pars[4].integer_value=price_field;
handle=IndicatorCreate(name,period,IND_STOCHASTIC,5,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador para o smbolo %s/%s, cdigo de erro %


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Stochastic Oscillator calculado para
short_name=StringFormat("iStochastic(%s/%s, %d, %d, %d, %s, %s)",name,EnumToString(period),

Kperiod,Dperiod,slowing,EnumToString(ma_method),EnumToString(price_field
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iStochastic
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

2000-2014, MetaQuotes Software Corp.

1668

Indicadores Tcnicos

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array StochasticBuffer maior do que o nmero de valores no indicador iStochastic


//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador iStochastic

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffers(StochasticBuffer,SignalBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Stochastic Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iStochastic |
//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &main_buffer[],

// buffer do indicador dos valores do Stochast

double &signal_buffer[],

// buffer do indicator da linha de sinal

int ind_handle,

// manipulador do indicador iStochastic

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array StochasticBuffer com valores do buffer do indicador que tem ndi
if(CopyBuffer(ind_handle,MAIN_LINE,0,amount,main_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iStochastic, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array SignalBuffer com valores do buffer do indicador que tem ndice 1

2000-2014, MetaQuotes Software Corp.

1669

Indicadores Tcnicos
if(CopyBuffer(ind_handle,SIGNAL_LINE,0,amount,signal_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iStochastic, cdigo de erro %d",GetLastError(


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1670

Indicadores Tcnicos

iTEMA
A funo retorna o manipulador do indicador Triple Exponential Moving Average. Tem apenas um
buffer.
int iTEMA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

int

ma_shift,

// deslocamento horizontal indicador

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio (barras contadas) para clculo.
ma_shift
[in] Deslocamento do indicador relativo tabela de preos.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iTEMA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iTEMA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"

2000-2014, MetaQuotes Software Corp.

1671

Indicadores Tcnicos
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

#property description "Todos os outros parmetros so similares ao padro Triple Exponential Moving
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iTEMA


#property indicator_label1

"iTEMA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iTEMA,

// usar iTEMA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iTEMA;

// tipo de funo

input int

ma_period=14;

// perodo mdio

input int

ma_shift=0;

// deslocamento

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iTEMABuffer[];

//--- varivel para armazenar o manipulador do indicator Triple Exponential Moving Average
int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Triple Exponential Moving Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iTEMABuffer,INDICATOR_DATA);
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;

2000-2014, MetaQuotes Software Corp.

1672

Indicadores Tcnicos
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iTEMA)
handle=iTEMA(name,period,ma_period,ma_shift,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[3];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- deslocamento
pars[1].type=TYPE_INT;
pars[1].integer_value=ma_shift;
//--- tipo de preo
pars[2].type=TYPE_INT;
pars[2].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_TEMA,3,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iTEMA para o smbolo %s/%s, cdigo de
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Triple Exponential Moving Average calculado para
short_name=StringFormat("iTEMA(%s/%s, %d, %d, %s)",name,EnumToString(period),
ma_period,ma_shift,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,

2000-2014, MetaQuotes Software Corp.

1673

Indicadores Tcnicos
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[])
{
//--- nmero de valores copiados a partir do indicador iTEMA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iTEMABuffer maior do que o nmero de valores no indicador iTEMA para o sm
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Triple Exponential Moving Average
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iTEMABuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Triple Exponential Moving Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}

2000-2014, MetaQuotes Software Corp.

1674

Indicadores Tcnicos
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iTEMA

//+------------------------------------------------------------------+

bool FillArrayFromBuffer(double &tema_buffer[], // buffer do indicator para valores do Triple Expon


int t_shift,

// deslocamento da linha

int ind_handle,

// manipulador do indicador iTEMA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iTEMABuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-t_shift,amount,tema_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iTEMA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1675

Indicadores Tcnicos

iTriX
A funo retorna o manipulador do indicador Triple Exponential Moving Averages Oscillator. Tem
apenas um buffer.
int iTriX(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

ma_period,

// perodo mdio

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
ma_period
[in] Perodo mdio (barras contadas) para clculos.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iTriX.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iTriX."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window

2000-2014, MetaQuotes Software Corp.

1676

Indicadores Tcnicos
#property indicator_buffers 1
#property indicator_plots

//--- plotar iTriX


#property indicator_label1

"iTriX"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrRed

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iTriX,

// usar iTriX

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iTriX;

// tipo de funo

input int

ma_period=14;

// perodo

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iTriXBuffer[];

//--- varivel para armazenar o manipulador do indicator iTriX


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Triple Exponential Moving Averages Oscillator
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iTriXBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;

2000-2014, MetaQuotes Software Corp.

1677

Indicadores Tcnicos
}
//--- criar manipulador do indicador
if(type==Call_iTriX)
handle=iTriX(name,period,ma_period,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[2];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=ma_period;
//--- tipo de preo
pars[1].type=TYPE_INT;
pars[1].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_TRIX,2,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iTriX para o smbolo %s/%s, cdigo de
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}

//--- mostra que o smbolo/prazo do indicador Triple Exponential Moving Averages Oscillator calcu
short_name=StringFormat("iTriX(%s/%s, %d, %s)",name,EnumToString(period),
ma_period,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iTriX

2000-2014, MetaQuotes Software Corp.

1678

Indicadores Tcnicos
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iTriXBuffer maior do que o nmero de valores no indicador iTriX para o sm
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Triple Exponential Moving Averages Oscillator
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iTriXBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Triple Exponential Moving Averages Oscillator
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iTriX

//+------------------------------------------------------------------+

bool FillArrayFromBuffer(double &trix_buffer[], // buffer do indicator para valores do Triple Expon


int ind_handle,

// manipulador do indicador iTriX

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();
//--- preencher uma parte do array iTriXBuffer com valores do buffer do indicador que tem ndice 0

2000-2014, MetaQuotes Software Corp.

1679

Indicadores Tcnicos
if(CopyBuffer(ind_handle,0,0,amount,trix_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iTriX, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1680

Indicadores Tcnicos

iWPR
A funo retorna o manipulador do indicador Larry Williams' Percent Range. Tem apenas um buffer.
int iWPR(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES period,

// perodo

int

// perodo mdio

calc_period

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
calc_period
[in] Perodo (barras contadas) para clculo do indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iWPR.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iWPR."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iWPR


#property indicator_label1

"iWPR"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrCyan

2000-2014, MetaQuotes Software Corp.

1681

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//--- definir o limite dos valores do indicador


#property indicator_minimum -100
#property indicator_maximum 0
//--- nveis horizontais na janela de indicador
#property indicator_level1

-20.0

#property indicator_level2

-80.0

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iWPR,

// usar iWPR

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iWPR;

// tipo de funo

input int

calc_period=14;

// perodo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iWPRBuffer[];

//--- varivel para armazenar o manipulador do indicator iWPR


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Larry Williams' Percent Range
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iWPRBuffer,INDICATOR_DATA);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}

2000-2014, MetaQuotes Software Corp.

1682

Indicadores Tcnicos
//--- criar manipulador do indicador
if(type==Call_iWPR)
handle=iWPR(name,period,calc_period);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
//--- perodo
pars[0].type=TYPE_INT;
pars[0].integer_value=calc_period;
handle=IndicatorCreate(name,period,IND_WPR,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iWPR para o smbolo %s/%s, cdigo de e


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Williams' Percent Range calculado para
short_name=StringFormat("iWPR(%s/%s, %d)",name,EnumToString(period),calc_period);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iWPR
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{

2000-2014, MetaQuotes Software Corp.

1683

Indicadores Tcnicos
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iWPRBuffer maior do que o nmero de valores no indicador iWPR para o smbo
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Williams' Percent Range
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iWPRBuffer,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Larry Williams' Percent Range
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iWPR

//+------------------------------------------------------------------+
bool FillArrayFromBuffer(double &wpr_buffer[],

// buffer do indicator para valores do Williams' Pe

int ind_handle,

// manipulador do indicador iWPR

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iWPRBuffer com valores do buffer do indicador que tem ndice 0 (
if(CopyBuffer(ind_handle,0,0,amount,wpr_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iWPR, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado

2000-2014, MetaQuotes Software Corp.

1684

Indicadores Tcnicos
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1685

Indicadores Tcnicos

iVIDyA
A funo retorna o manipulador do indicador Variable Index Dynamic Average. Tem apenas um buffer.
int iVIDyA(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

int

cmo_period,

// perodo para indicador Chande Momentum

int

ema_period,

// perodo suavizado do indicador EMA

int

ma_shift,

// deslocamento horizontal no grfico

ENUM_APPLIED_PRICE applied_price

// tipo de preo ou manipulador

);

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
cmo_period
[in] Perodo (barras contadas) para clculo do indicador Chande Momentum Oscillator.
ema_period
[in] Perodo do indicador EMA (barras contadas) para clculo do fator de suavizao.
ma_shift
[in] Deslocamento do indicador relativo ao grfico de preos.
applied_price
[in] O preo usado. Pode ser qualquer das constantes de preos ENUM_APPLIED_PRICE ou um
manipulador de outro indicador.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iVIDyA.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

2000-2014, MetaQuotes Software Corp.

1686

Indicadores Tcnicos
#property description "O indicador demonstra como obter dados"
#property description "de buffers do indicador para o indicador tcnico iVIDyA."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t

#property description "Todos os outros parmetros so similares ao padro Variable Index Dynamic Av
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots

//--- plotar iVIDyA


#property indicator_label1

"iVIDyA"

#property indicator_type1

DRAW_LINE

#property indicator_color1

clrBlue

#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iVIDyA,

// usar iVIDyA

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iVIDyA;

// tipo de funo

input int

cmo_period=15;

// o perodo do indicador Chande Momentum

input int

ema_period=12;

// perodo do fator de suavizao

input int

ma_shift=0;

// deslocamento

input ENUM_APPLIED_PRICE

applied_price=PRICE_CLOSE; // tipo de preo

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffer do indicador


double

iVIDyABuffer[];

//--- varivel para armazenar o manipulador do indicator iVIDyA


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Variable Index Dynamic Average
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iVIDyABuffer,INDICATOR_DATA);

2000-2014, MetaQuotes Software Corp.

1687

Indicadores Tcnicos
//--- definir deslocamento
PlotIndexSetInteger(0,PLOT_SHIFT,ma_shift);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iVIDyA)
handle=iVIDyA(name,period,cmo_period,ema_period,ma_shift,applied_price);
else
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[4];
//--- o perodo do indicador Chande Momentum
pars[0].type=TYPE_INT;
pars[0].integer_value=cmo_period;
//--- perodo do fator de suavizao
pars[1].type=TYPE_INT;
pars[1].integer_value=ema_period;
//--- deslocamento
pars[2].type=TYPE_INT;
pars[2].integer_value=ma_shift;
//--- tipo de preo
pars[3].type=TYPE_INT;
pars[3].integer_value=applied_price;
handle=IndicatorCreate(name,period,IND_VIDYA,4,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro

PrintFormat("Falha ao criar o manipulador do indicador iVIDyA para o smbolo %s/%s, cdigo de


name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Variable Index Dynamic Average calculado para
short_name=StringFormat("iVIDyA(%s/%s, %d, %d, %d, %s)",name,EnumToString(period),
cmo_period,ema_period,ma_shift,EnumToString(applied_price));
IndicatorSetString(INDICATOR_SHORTNAME,short_name);

2000-2014, MetaQuotes Software Corp.

1688

Indicadores Tcnicos
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador iVIDyA
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iVIDyABuffer maior do que o nmero de valores no indicador iVIDyA para o s
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher o array com valores do indicador Variable Index Dynamic Average
//--- se FillArrayFromBuffer retorna falso, significa que a informao no est pronta ainda, sair
if(!FillArrayFromBuffer(iVIDyABuffer,ma_shift,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);

2000-2014, MetaQuotes Software Corp.

1689

Indicadores Tcnicos
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Variable Index Dynamic Average
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iVIDyA

//+------------------------------------------------------------------+

bool FillArrayFromBuffer(double &vidya_buffer[],// buffer do indicator para valores do Variable Ind


int v_shift,

// deslocamento da linha

int ind_handle,

// manipulador do indicador iVIDyA

int amount

// nmero de valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iVIDyABuffer com valores do buffer do indicador que tem ndice 0
if(CopyBuffer(ind_handle,0,-v_shift,amount,vidya_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro
PrintFormat("Falha ao copiar dados do indicador iVIDyA, cdigo de erro %d",GetLastError());
//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1690

Indicadores Tcnicos

iVolumes
A funo retorna o manipulador do indicador. Tem apenas um buffer.
int iVolumes(
string

symbol,

// smbolo nome

ENUM_TIMEFRAMES

period,

// perodo

ENUM_APPLIED_VOLUME applied_volume

// tipo de volume para o clculo

Parmetros
symbol
[in] O nome do smbolo de segurana, os dados que devem ser usados para calcular o indicador. O
valor NULL significa o smbolo atual.
period
[in] O valor do perodo pode ser um dos valores ENUM_TIMEFRAMES, 0 (zero) significa o prazo
corrente.
applied_volume
[in] O volume utilizado. Pode ser um dos valores ENUM_APPLIED_VOLUME.
Valor de retorno
Retorna o manipulador de um indicador tcnico especifico, em caso de falha de retorna
INVALID_HANDLE. A memria do computador pode ser liberada a partir de um indicador que no
mais utilizado, usando a funo IndicatorRelease(), onde o manipulador de indicador transmitido.
Exemplo:
//+------------------------------------------------------------------+
//|

Demo_iVolumes.mq5 |

//|

Copyright 2011, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

#property description "O indicador demonstra como obter dados"


#property description "de buffers do indicador para o indicador tcnico iVolumes."
#property description "Um smbolo e o prazo utilizado para o clculo do indicador,"
#property description "so definidos pelos parmetros de smbolo e perodo."

#property description "O mtodo de criao do manipulador definido atravs do parmetro "type" (t
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots

//--- plotar iVolumes


#property indicator_label1

"iVolumes"

#property indicator_type1

DRAW_COLOR_HISTOGRAM

#property indicator_color1

clrGreen, clrRed

2000-2014, MetaQuotes Software Corp.

1691

Indicadores Tcnicos
#property indicator_style1

STYLE_SOLID

#property indicator_width1

//+------------------------------------------------------------------+
//| Enumerador dos mtodos de criao do manipulador

//+------------------------------------------------------------------+
enum Creation
{
Call_iVolumes,

// usar iVolumes

Call_IndicatorCreate

// usar IndicatorCreate

};
//--- parmetros de entrada
input Creation

type=Call_iVolumes;

// tipo de funo

input ENUM_APPLIED_VOLUME

applied_volume=VOLUME_TICK;

// tipo de volume

input string

symbol=" ";

// smbolo

input ENUM_TIMEFRAMES

period=PERIOD_CURRENT;

// timeframe

//--- buffers do indicador


double

iVolumesBuffer[];

double

iVolumesColors[];

//--- varivel para armazenar o manipulador do indicator iVolumes


int

handle;

//--- varivel para armazenamento


string name=symbol;
//--- nome do indicador num grfico
string short_name;
//--- manteremos o nmero de valores no indicador Volumes
int

bars_calculated=0;

//+------------------------------------------------------------------+
//| Funo de inicializao do indicador customizado

//+------------------------------------------------------------------+
int OnInit()
{
//--- atribuio de array para buffer do indicador
SetIndexBuffer(0,iVolumesBuffer,INDICATOR_DATA);
SetIndexBuffer(1,iVolumesColors,INDICATOR_COLOR_INDEX);
//--- determinar o smbolo do indicador, desenhado para
name=symbol;
//--- excluir os espaos direita e esquerda
StringTrimRight(name);
StringTrimLeft(name);
//--- se resulta em comprimento zero da string do 'name'
if(StringLen(name)==0)
{
//--- tomar o smbolo do grfico, o indicador est anexado para
name=_Symbol;
}
//--- criar manipulador do indicador
if(type==Call_iVolumes)
handle=iVolumes(name,period,applied_volume);
else

2000-2014, MetaQuotes Software Corp.

1692

Indicadores Tcnicos
{
//--- preencher a estrutura com os parmetros do indicador
MqlParam pars[1];
//--- tipo de preo
pars[0].type=TYPE_INT;
pars[0].integer_value=applied_volume;
handle=IndicatorCreate(name,period,IND_VOLUMES,1,pars);
}
//--- se o manipulador no criado
if(handle==INVALID_HANDLE)
{
//--- mensagem sobre a falha e a sada do cdigo de erro
PrintFormat("Falha ao criar o manipulador do indicador iVolumes para o smbolo %s/%s, cdigo
name,
EnumToString(period),
GetLastError());
//--- o indicador interrompido precocemente
return(INIT_FAILED);
}
//--- mostra que o smbolo/prazo do indicador Volumes calculado para

short_name=StringFormat("iVolumes(%s/%s, %s)",name,EnumToString(period),EnumToString(applied_vol
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- inicializao normal do indicador
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de iterao do indicador customizado

//+------------------------------------------------------------------+
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[])
{
//--- nmero de valores copiados a partir do indicador
int values_to_copy;
//--- determinar o nmero de valores calculados no indicador
int calculated=BarsCalculated(handle);
if(calculated<=0)
{
PrintFormat("BarsCalculated() retornando %d, cdigo de erro %d",calculated,GetLastError());
return(0);
}

//--- se for o princpio do clculo do indicador, ou se o nmero de valores modificado no indicad

2000-2014, MetaQuotes Software Corp.

1693

Indicadores Tcnicos

//--- ou se necessrio clculo do indicador para duas ou mais barras (isso significa que algo mud
if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
{

//--- se o array iVolumesBuffer maior do que o nmero de valores no indicador iVolumes para
//--- caso contrrio, copiamos menor do que o tamanho dos buffers do indicador
if(calculated>rates_total) values_to_copy=rates_total;
else

values_to_copy=calculated;

}
else
{

//--- isso significa que no a primeira vez do clculo do indicador, desde a ltima chama
//--- para o clculo no mais do que uma barra adicionada
values_to_copy=(rates_total-prev_calculated)+1;
}
//--- preencher os arrays com valores do indicador iVolumes

//--- se FillArraysFromBuffer retorna falso, isto significa que a informao ainda no est pronta,
if(!FillArraysFromBuffers(iVolumesBuffer,iVolumesColors,handle,values_to_copy)) return(0);
//--- formar a mensagem
string comm=StringFormat("%s ==>

Valor atualizado no indicador %s: %d",

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),
short_name,
values_to_copy);
//--- exibir a mensagem de servio no grfico
Comment(comm);
//--- memorizar o nmero de valores no indicador Volumes
bars_calculated=calculated;
//--- retorna o valor prev_calculated para a prxima chamada
return(rates_total);
}
//+------------------------------------------------------------------+
//| Preencher buffers do indicador a partir do indicador iVolumes

//+------------------------------------------------------------------+
bool FillArraysFromBuffers(double &volume_buffer[],

// buffer do indicator para valores do Volume

double &color_buffer[],

// buffer do indicator de cores

int ind_handle,

// manipulador do indicador iVolumes

int amount

// nmero dos valores copiados

)
{
//--- redefinir o cdigo de erro
ResetLastError();

//--- preencher uma parte do array iVolumesBuffer com valores do buffer do indicador que tem ndice
if(CopyBuffer(ind_handle,0,0,amount,volume_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iVolumes, cdigo de erro %d",GetLastError());


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}

//--- preencher uma parte do array iVolumesColors com valores do buffer do indicador que tem ndice

2000-2014, MetaQuotes Software Corp.

1694

Indicadores Tcnicos
if(CopyBuffer(ind_handle,1,0,amount,color_buffer)<0)
{
//--- Se a cpia falhar, informe o cdigo de erro

PrintFormat("Falha ao copiar dados do indicador iVolumes, cdigo de erro %d",GetLastError());


//--- parar com resultado zero - significa que indicador considerado como no calculado
return(false);
}
//--- est tudo bem
return(true);
}
//+------------------------------------------------------------------+
//| Funo de desinicializao do indicador

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- limpar o grfico aps excluir o indicador
Comment("");
}

2000-2014, MetaQuotes Software Corp.

1695

Trabalhando com Resultados de Otimizao

Trabalhando com Resultados de Otimizao


Funes para organizar processamento personalizado da otimizao resultando no testador de
estratgia. Elas podem ser chamadas durante a otimizao de agentes de teste, bem como localmente
em Expert Advisors e scripts.
Quando voc executa um Expert Advisor no testador de estratgia, voc pode criar seu prprio
conjunto de dados com base nos tipos simples ou estruturas simples (no contm strings, objetos de
classe ou objetos de arrays dinmicas). Este conjunto de dados podem ser salvos utilizando a funo
FrameAdd() numa estrutura especial chamando um quadro. Durante a otimizao de um Expert
Advisor cada agente pode enviar uma srie de quadros para o terminal. Todos os quadros recebidos
so gravados no arquivo *.MQD na pasta terminal_directory/MQL5/Files/Tester expert nomeada igual
ao Expert Advisor. Eles so escritos na ordem em que so recebidas dos agentes. O recebimento de
um quadro no terminal do cliente a partir de um agente de teste gera o evento TesterPass.
Os quadros podem ser armazenados na memria do computador e num arquivo com o nome
especifico. A linguagem MQL5 no estabelece limitaes sobre o nmero de quadros.
Funo

Ao

FrameFirst

Move um ponteiro de leitura de quadro para o


incio e redefine previamente um conjunto de
filtros

FrameFilter

Define a estrutura do filtro de leitura e move o


ponteiro para o incio

FrameNext

L um quadro e move o ponteiro para o


prximo

FrameInputs

Recebe parmetros de entrada, no qual o


quadro formado

FrameAdd

Adiciona um quadro com dados

ParameterGetRange

Recebe os dados na faixa de valores e o passo


de alterao para uma varivel de entrada ao
otimizar um Expert Advisor no Testador de
Estratgia

ParameterSetRange

Especifica o uso de varivel de entrada ao


otimizar um Expert Advisor no Testador de
Estratgia: valor, mudana de passo, os valores
iniciais e finais

Tambm Veja
Testando Estatsticas, Propriedades de Execuo do Programa MQL5

2000-2014, MetaQuotes Software Corp.

1696

Trabalhando com Resultados de Otimizao

FrameFirst
Move um ponteiro de leitura de quadro para o incio e redefine um conjunto de filtros.
bool FrameFirst();

Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a
funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1697

Trabalhando com Resultados de Otimizao

FrameFilter
Define a estrutura do filtro de leitura e move o ponteiro para o incio.
bool FrameFilter(
const string

name,

// Nome pblico/etiqueta

long

id

// ID Pblica

);

Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a
funo GetLastError().
Observao
Se uma string vazia passado como o primeiro parmetro, o filtro funcionar apenas com um
parmetro numrico, ou seja, apenas quadros com o id especifico sero vistos. Se o valor do
segundo parmetro ULONG_MAX, apenas o filtro de texto funcionar.
Chamar FrameFilter("", ULONG_MAX) equivalente a chamar FrameFirst(), ou seja, igual a no
utilizao de qualquer filtro.

2000-2014, MetaQuotes Software Corp.

1698

Trabalhando com Resultados de Otimizao

FrameNext
L um quadro e move o ponteiro para o prximo. Existem duas variantes da funo.
1. Chamando para receber um valor numrico
bool FrameNext(
ulong&

pass,

// O nmero de uma passagem na otimizao, durante o qual o quadro foi adici

string& name,

// Nome pblico/etiqueta

long&

// ID pblica

id,

double& value

// Valor

);

2. Chamando para receber todos os dados de um quadro


bool FrameNext(
ulong&

pass,

// O nmero de uma passagem na otimizao, durante o qual o quadro foi adici

string& name,

// Nome pblico/etiqueta

long&

// ID pblica

id,

double& value,

// Valor

void&

// Array de qualquer tipo

data[]

);

Parmetros
pass
[out] O nmero de um passe durante a otimizao do testador de estratgia.
name
[out] O nome do identificador.
id
[out] O valor do identificador.
value
[out] Um valor numrico nico.
data
[out] Uma array de qualquer tipo.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a
funo GetLastError().
Observao
Na segunda verso da chamada, voc deve manipular corretamente os dados recebidos no array
data[].

2000-2014, MetaQuotes Software Corp.

1699

Trabalhando com Resultados de Otimizao

FrameInputs
Recebe parmetros de entrada, no qual o quadro com o nmero especificado de passe formado.
bool FrameInputs(
ulong

pass,

// O nmero de um passe na otimizao

string& parameters[],

// Um array de strings na forma "parameterN=valueN"

uint&

// O nmero total de parmetros

parameters_count

);

Parmetros
pass
[out] O nmero de um passe durante a otimizao do testador de estratgia.
parameters
[out] Um array de uma string com a descrio de nomes e valores de parmetros
parameters_count
[out] O nmero de elementos no array parameters[].
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a
funo GetLastError().
Observao
Tendo obtido o nmero de strings parameters_count no array parameters[], pode organizar um loop
para percorrer todos os registros. Isso ajudar voc a encontrar os valores dos parmetros de
entrada de um Expert Advisor para o nmero de passe especificado.

2000-2014, MetaQuotes Software Corp.

1700

Trabalhando com Resultados de Otimizao

FrameAdd
Adicionar um quadro com dados. Existem duas variantes da funo.
1. Adicionar dados a partir de um arquivo
bool FrameAdd(
const string name,

// Nome pblico/etiqueta

long

id,

// ID pblico

double

value,

// Valor

const string

filename

// Nome de um arquivo de dados

);

2. Adicionando dados a partir de um array de qualquer tipo


bool FrameAdd(
const string name,

// Nome pblico/etiqueta

long

id,

// ID pblico

double

value,

// Valor

const void&

data[]

// Array de qualquer tipo

);

Parmetros
name
[in] Etiqueta de um quadro Pblico. Ele pode ser usado para um filtro na funo FrameFilter().
id
[in] Um identificador pblico do quadro. Ele pode ser usado para um filtro na funo
FrameFilter().
value
[in] Um valor numrico para escrever no quadro. Ele utilizado para transmitir um passe nico
como resultado da funo OnTester().
filename
[in] O nome do arquivo que contm os dados para adicionar ao quadro. O arquivo deve ser
localizar na pasta MQL5/Files.
data
[in] Uma array de um tipo qualquer para escrever no quadro. Passado por referncia.
Valor do Retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, chamar a
funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1701

Trabalhando com Resultados de Otimizao

ParameterGetRange
Recebe os dados na faixa de valores e o passo de alterao para uma varivel de entrada ao otimizar
um Expert Advisor no Testador de Estratgia. Existem 2 variantes da funo.
1. Recebimento de dados do parmetro de entrada para o tipo integer
bool ParameterGetRange(
const string name,

// nome do parmetro (varivel de entrada)

bool&

enable,

// parmetro de otimizao habilitado

long&

value,

// o valor do parmetro

long&

start,

// valor inicial

long&

step,

// alterar passo

long&

stop

// valor final

);

2. Recebendo dados para o parmetro de entrada tipo real


bool ParameterGetRange(
const string name,

// nome do parmetro (varivel de entrada)

double&

enable,

// parmetro de otimizao habilitado

double&

value,

// valor do parmetro

double&

start,

// valor inicial

double&

step,

// alterar passo

double&

stop

// valor final

);

Parmetros
name
[in] varivel de entrada ID. Essas variveis so parmetros externos de uma aplicao. Seus
valores podem ser especificados quando do lanamento num grfico ou durante um nico teste.
enable
[out] Sinaliza que este parmetro pode ser usado para enumerar os valores durante a otimizao
no Testador de Estratgia.
value
[out] Valor do parmetro.
start
[out] Valor do parmetro inicial durante a otimizao.
step
[out] Parmetro altera o passo ao enumerar os seus valores.
stop
[out] Valor do parmetro final durante a otimizao.
Valor de retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, utilize a

2000-2014, MetaQuotes Software Corp.

1702

Trabalhando com Resultados de Otimizao


funo GetLastError().
Observao
A funo pode ser chamado apenas pelos manipuladores OnTesterInit(), OnTesterPass() e
OnTesterDeinit(). Foi introduzida para receber os valores dos parmetros de entrada do Expert
Advisor e faixas de variao durante a otimizao no Testador de Estratgia.
Quando chamado em OnTesterInit(), os dados obtidos podem ser usados para redefinir as regras de
enumerao de qualquer varivel de entrada usando ParameterSetRange(). Portanto, novo Start,
Stop e valores do Step podem ser definidos no parmetro de entrada e podem at mesmo serem
completamente excludos a partir da otimizao, independentemente das configuraes do Testador
de Estratgia. Isto permite-lhe gerenciar a rea dos parmetros de entrada durante a otimizao,
excluindo alguns parmetros a partir da otimizao de acordo com os valores dos parmetros
fundamentais do Expert Advisor.
Exemplo:
#property description "Expert Advisor para a demonstrao da funo ParameterGetRange()."
#property description "Deve ser lanado no modo de otimizao do Testador de Estratgia"
//--- parmetros de entrada
input int

Input1=1;

input double

Input2=2.0;

input bool

Input3=false;

input ENUM_DAY_OF_WEEK

Input4=SUNDAY;

//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- Expert Advisor projetado para operao somente no Testador de Estratgia
if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
{
MessageBox("Deve ser lanado no modo de otimizao do Testador de Estratgia!");
//--- finalizar a operao do Expert Advisor com antecedncia e remover do grfico
return(INIT_FAILED);
}
//--- completada com sucesso a inicializao
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo TesterInit

//+------------------------------------------------------------------+
void OnTesterInit()
{
//--- exemplo de parmetros de entrada tipo long
string name="Input1";
bool enable;
long par1,par1_start,par1_step,par1_stop;
ParameterGetRange(name,enable,par1,par1_start,par1_step,par1_stop);

2000-2014, MetaQuotes Software Corp.

1703

Trabalhando com Resultados de Otimizao


Print("Primeiro parmetro");
PrintFormat("%s=%d

habilitado=%s

a partir de %d para %d com passo=%d",

name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- exemplo de parmetros de entrada tipo double
name="Input2";
double par2,par2_start,par2_step,par2_stop;
ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
Print("Segundo parmetro");
PrintFormat("%s=%G

habilitado=%s

a partir de %G para %G com passo=%G",

name,par2,(string)enable,par2_start,par2_stop,par2_step);
//--- exemplo de parmetros de entrada tipo bool
name="Input3";
long par3,par3_start,par3_step,par3_stop;
ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
Print("Terceiro parmetro");
PrintFormat("%s=%s

habilitado=%s

a partir de %s para %s",

name,(string)par3,(string)enable,
(string)par3_start,(string)par3_stop);
//--- exemplo de parmetros de entrada tipo enumerador
name="Input4";
long par4,par4_start,par4_step,par4_stop;
ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
Print("Quarto parmetro");
PrintFormat("%s=%s

habilitado=%s

a partir de %s para %s",

name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
EnumToString((ENUM_DAY_OF_WEEK)par4_start),
EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
}
//+------------------------------------------------------------------+
//| Funo TesterDeinit

//+------------------------------------------------------------------+
void OnTesterDeinit()
{
//--- esta mensagem ser mostrada aps a otimizao ser concluda
Print(__FUNCTION__," Otimizao concluda");
}

2000-2014, MetaQuotes Software Corp.

1704

Trabalhando com Resultados de Otimizao

ParameterSetRange
Especifica o uso de varivel de entrada ao otimizar um Expert Advisor no Testador de Estratgia:
valor, mudana de passo, os valores iniciais e finais. Existem 2 variantes da funo.
1. Especificando os valores para o parmetro de entrada do tipo integer
bool ParameterSetRange(
const string name,

// nome do parmetro (varivel de entrada)

bool

enable,

// parmetro de otimizao habilitado

long

value,

// valor do parmetro

long

start,

// valor inicial

long

step,

// mudar etapa

long

stop

// valor final

);

2. Especificando os valores para o parmetro de entrada de tipo real


bool ParameterSetRange(
const string name,

// nome do parmetro (varivel de entrada)

double

enable,

// parmetro de otimizao habilitado

double

value,

// valor dos parmetros

double

start,

// valor inicial

double

step,

// mudar etapa

double

stop

// valor final

);

Parmetros
name
[in] input ou sinput ID varivel. Essas variveis so parmetros externos de uma aplicao. Seus
valores podem ser especificados quando iniciar o programa.
enable
[in] Ativar este parmetro para enumerar os valores durante a otimizao no Testador de
Estratgia.
value
[in] valor do parmetro.
start
[in] Valor do parmetro inicial durante a otimizao.
step
[in] Alterao de parmetro etapa ao enumerar seus valores.
stop
[in] Valor do parmetro final durante a otimizao.
Valor de retorno
Retorna true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, utilize a

2000-2014, MetaQuotes Software Corp.

1705

Trabalhando com Resultados de Otimizao


funo GetLastError().
Observao
A funo s pode ser chamado pelo manipulador OnTesterInit() ao lanar otimizao a partir do
Testador de Estratgia. Ele projetado para especificar o alcance do parmetro e alterar o passo. O
parmetro pode ser completamente excludo da otimizao, independentemente das configuraes
do Testador de Estratgia. Ele tambm permite o uso de variveis declaradas com modificador de
entrada no processo de otimizao.
A funo ParameterSetRange() permite que voc gerencie uma otimizao Expert Advisor no
Testador de Estratgia dependendo dos valores de seus parmetros fundamentais, incluindo ou
excluindo os parmetros de entrada necessrios a partir da otimizao e definir o intervalo
necessrio e o passo de mudana.

2000-2014, MetaQuotes Software Corp.

1706

Trabalhando com Eventos

Funes de Eventos
Este grupo contm funes para trabalhar com eventos personalizados e eventos de timer. Alm deste
grupo, h funes especiais para manipulao de eventos pr-definidos.
Funo

Ao

EventSetMillisecondTimer

Inicia gerador de eventos de timer de alta


resoluo com um perodo de menos de 1
segundo para o grfico em curso

EventSetTimer

Inicia o gerador de eventos do time com a


periodicidade especificada para o grfico atual

EventKillTimer

Interrompe a gerao de eventos pelo timer no


quadro atual

EventChartCustom

Gera um evento personalizado para o grfico


especificado

Tambm Veja
Tipos de Eventos de Grficos

2000-2014, MetaQuotes Software Corp.

1707

Trabalhando com Eventos

EventSetMillisecondTimer
A funo indica ao terminal de cliente que eventos de timer devem ser gerados em intervalos
inferiores a um segundo, para este Expert Advisor ou aquele indicador.
bool EventSetMillisecondTimer(
int milliseconds

// nmero de milissegundos

);

Parmetros
milliseconds
[in] Nmero de milissegundos que definem a freqncia de eventos de timer.
Valor de retorno
No caso de sucesso na execuo, retorna true, do contrrio - false. Para receber um cdigo de erro,
a funo GetLastError() dever ser utilizada.
Observao
Este recurso projetado para os casos em que necessrio timer de alta resoluo. Em outras
palavras, eventos de timer devem ser recebidos com mais freqncia do que uma vez por segundo.
Se um timer convencional, com o perodo de mais de um segundo o suficiente para voc, use o
evento EventSetTimer().
O intervalo mnimo de 1000 milissegundos usado no dispositivo para testar estratgia. Em geral,
quando o perodo do timer reduzido, o tempo de teste maior, ento o manipulador de eventos de
timer utilizado mais frequentemente. Ao trabalhar em modo de tempo real, os eventos de timer
so gerados no mais do que uma vez em 10-16 milissegundos, devido a limitaes de hardware.
Normalmente, esta funo ser chamada pela funo OnInit() ou no construtor de classe. Para
manipular eventos provenientes do timer, um Expert Advisor ou um indicador deve usar a funo
OnTimer().
Cada Expert Advisor e cada indicador trabalha com o seu prprio timer, recebendo eventos
exclusivamente deste timer. Durante fechamento do aplicativo MQL5, o cronmetro forosamente
encerrado caso tenha sido criado, mas no foi desativado pela funo EventKillTimer().
Apenas um timer pode ser utilizado para cada programa. Cada aplicativo MQL5 e grfico tem sua
prpria lista de eventos, onde todos os novos eventos so colocados. Se a lista j contm eventos
de Timer ou este evento est em fase de processamento, ento o novo evento de Timer no
adicionado a fila do aplicativo MQL5.

2000-2014, MetaQuotes Software Corp.

1708

Trabalhando com Eventos

EventSetTimer
A funo indica ao terminal do cliente que para este indicador ou Expert Advisor, eventos do timer
devem ser gerados com a periodicidade especificada.
bool EventSetTimer(
int seconds

// nmero de segundos

);

Parmetros
seconds
[in] Nmero de segundos que determinam a freqncia de ocorrncia do evento timer.
Valor do Retorno
Em caso de sucesso retorna verdadeiro, caso contrrio falso. A fim de obter o cdigo de erro, a
funo GetLastError() deve ser chamada.
Observao
Normalmente, esta funo deve ser chamada a partir da funo OnInit() ou de uma classe
construtor. A fim de manipular eventos provenientes do timer, o Expert Advisor deve ter a funo
OnTimer().
Todo Expert Advisor, assim como todo indicador funciona com seu prprio timer e recebe eventos
apenas a partir dele. Assim quando um programa MQL5 deixa de funcionar, o timer destrudo
foradamente se ele foi criado, mas ainda no foi desativado pela funo EventKillTimer().
Para cada programa no mais de que um timer pode ser executado. Cada programa MQL5 e cada
grfico tem a sua prpria fila de eventos em que todos os eventos recentemente recebidos so
colocados. Se o evento Timer est presente ou est a ser processado, o novo evento de timer no
ser colocado na fila do programa MQL5.

2000-2014, MetaQuotes Software Corp.

1709

Trabalhando com Eventos

EventKillTimer
Especifica o terminal do cliente o que necessrio para finalizar a gerao de eventos do Timer.
void EventKillTimer();

Valor do Retorno
Sem valor de retorno.
Observao
Normalmente, esta funo deve ser chamada a partir de uma funo OnDeinit(), se a funo
EventSetTimer() for chamada de OnInit(). Esta funo tambm pode ser chamada para formar o
destruidor de classe, se a funo EventSetTimer() foi chamada no construtor dessa classe.
Todo Expert Advisor, assim como todo indicador funciona com seu prprio timer e recebe eventos
apenas a partir dele. Assim quando programa MQL5 deixa de funcionar, o timer destrudo
foradamente se ele foi criado, mas ainda no foi desativado pela funo EventKillTimer().

2000-2014, MetaQuotes Software Corp.

1710

Trabalhando com Eventos

EventChartCustom
A funo gera um evento personalizado para o grfico especificado.
bool EventChartCustom(
long

chart_id,

// identificador do evento recebendo grfico

ushort custom_event_id,

// identificador de evento

long

// parmetro do tipo long

lparam,

double dparam,

// parmetro do tipo double

string sparam

// parmetro de string do evento

);

Parmetros
chart_id
[in] Identificador grfico. Significa o grfico atual.
custom_event_id
[in] ID dos usurios do evento. Este identificador automaticamente adicionado ao valor
CHARTEVENT_CUSTOM e convertido para o tipo integer.
lparam
[in] Evento parmetro do tipo long passado para a funo OnChartEvent.
dparam
[in] Evento parmetro do tipo double passado para a funo OnChartEvent.
sparam
[in] Evento parmetro do tipo string passado para a funo OnChartEvent. Se a string maior do
que 63 caracteres, ser truncado.
Valor do Retorno
Retorna verdadeiro se um evento personalizado foi colocada com sucesso na fila do grfico de
eventos que recebe os eventos. Em caso de falha, ele retorna false. Use GetLastError() para obter o
cdigo de erro.
Observao
Um Expert Advisor ou o indicador ligado a tabela especificada manipula o evento utilizando a
funo OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam).
Para cada tipo de evento, os parmetros de entrada da funo OnChartEvent() tm valores definidos
que so requeridos para o processamento deste evento. Os eventos e valores passados atravs destes
parmetros so listados na tabela abaixo.
Evento

Valor
do
parmetro id

Valor
parmetro
lparam

do

Evento de uma
teclada

CHARTEVENT_KE
YDOWN

cdigo de uma
tecla pressionada

Valor
parmetro
dparam

do

Repita
a
contagem
(o
nmero de vezes

2000-2014, MetaQuotes Software Corp.

Valor
parmetro
sparam

do

O valor da string
de uma pequena
mscara
de

1711

Trabalhando com Eventos

que a tecla
repetida
como
um resultado de
que o usurio
pressiona
a
tecla)

descrever
o
estado de botes
do teclado

Evento
do
mouse (se a
propriedade
CHART_EVENT_
MOUSE_MOVE=tr
ue,
ento

definido para o
grfico)

CHARTEVENT_MO
USE_MOVE

a coordenada X

a coordenada Y

O valor de string
de uma mscara
de
bites
descrevendo
o
estado de botes
de mouse

Evento
de
criao
de
objeto
grfico
(se
CHART_EVENT_O
BJECT_CREATE=t
rue, ento
definido para o
grfico)

CHARTEVENT_OB
JECT_CREATE

Nome do objeto
grfico criado

Evento
de
mudana de uma
propriedade de
objeto via janela
de dilogo de
propriedades

CHARTEVENT_OB
JECT_CHANGE

Nome do objeto
grfico
modificado

Caso
de
apagamento
objeto
grfico
(se
CHART_EVENT_O
BJECT_DELETE=t
rue, ento
definido para o
grfico)

CHARTEVENT_OB
JECT_DELETE

Nome do objeto
grfico excludo

Evento de um
click de mouse
no grfico

CHARTEVENT_C
LICK

a coordenada X

a coordenada Y

Evento de um
click de mouse
num
objeto
grfico
pertencente ao
grfico

CHARTEVENT_OB
JECT_CLICK

a coordenada X

a coordenada Y

Nome do objeto
grfico, na qual
o evento ocorreu

2000-2014, MetaQuotes Software Corp.

1712

Trabalhando com Eventos

Evento de um
objeto
grfico
arrastado usando
o mouse

CHARTEVENT_OB
JECT_DRAG

Nome do objeto
grfico movido

Evento da edio
de
texto
finalizada
na
caixa de entrada
do objeto grfico
LabelEdit

CHARTEVENT_OB
JECT_ENDEDIT

Nome do objeto
grfico
LabelEdit, cuja
edio de texto
foi concluda

Evento
mudana
grfico

CHARTEVENT_C
HART_CHANGE

CHARTEVENT_CU
STOM+N

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

Valor
definido
pela
funo
EventChartCusto
m()

de
no

ID do evento de
usurio sob N
nmero

Exemplo:
//+------------------------------------------------------------------+
//|

ButtonClickExpert.mq5 |

//|

Copyright 2009, MetaQuotes Software Corp. |

//|

http://www.mql5.com |

//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

#property version

"1.00"

string buttonID="Boto";
string labelID="Informao";
int broadcastEventID=5000;
//+------------------------------------------------------------------+
//| Funo de inicializao do Expert

//+------------------------------------------------------------------+
int OnInit()
{
//--- Criar um boto para enviar eventos personalizados
ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite);
ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGray);
ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
ObjectSetString(0,buttonID,OBJPROP_TEXT,"Boto");
ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);

2000-2014, MetaQuotes Software Corp.

1713

Trabalhando com Eventos


ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
//--- Criar uma etiqueta para exibir informaes
ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
ObjectSetInteger(0,labelID,OBJPROP_COLOR,clrRed);
ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
ObjectSetString(0,labelID,OBJPROP_TEXT,"No informado");
ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
//--return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funo de Desinicializao do Expert

//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--ObjectDelete(0,buttonID);
ObjectDelete(0,labelID);
}
//+------------------------------------------------------------------+
//| Funo tick (ponto) de um Expert

//+------------------------------------------------------------------+
void OnTick()
{
//--}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- Verifique o evento pressionando um boto do mouse
if(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
//--- Se voc clicar sobre o objeto com o nome buttonID
if(clickedChartObject==buttonID)
{
//--- Estado do boto - pressionado ou no
bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
//--- registrar uma mensagem de depurao
Print("Boto pressionado = ",selected);

2000-2014, MetaQuotes Software Corp.

1714

Trabalhando com Eventos


int customEventID; // Nmero do evento personalizado para enviar
string message;

// Mensagem a ser enviada no caso

//--- Se o boto for pressionado


if(selected)
{
message="Boto pressionado";
customEventID=CHARTEVENT_CUSTOM+1;
}
else // Boto no est pressionado
{
message="Boto no est pressionado";
customEventID=CHARTEVENT_CUSTOM+999;
}
//--- Enviar um evento personalizado "nosso" grfico
EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
///--- Envie uma mensagem para todos os grficos abertos
BroadcastEvent(ChartID(),0,"Transmisso de mensagem");
//--- Depurar mensagem
Print("Enviar um evento com ID = ",customEventID);
}
ChartRedraw();// Redesenho forado de todos os objetos de grfico
}
//--- Verificar o evento pertence ao evento de utilizador
if(id>CHARTEVENT_CUSTOM)
{
if(id==broadcastEventID)
{
Print("Tem transmisso de mensagem a partir de um grfico com id = "+lparam);
}
else
{
//--- Ns lemos uma mensagem de texto no evento
string info=sparam;
Print("Manipular o evento do usurio com o ID = ",id);
//--- Exibe uma mensagem numa etiqueta
ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
ChartRedraw();// Redesenho forado de todos os objetos de grfico
}
}
}
//+------------------------------------------------------------------+
//| Enviar evento de transmisso para todos os grficos abertos

//+------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
{
int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
long currChart=ChartFirst();
int i=0;

2000-2014, MetaQuotes Software Corp.

1715

Trabalhando com Eventos


while(i<CHARTS_MAX)

// Temos, certamente, no mais do que CHARTS_MAX abrindo gr

{
EventChartCustom(currChart,eventID,lparam,dparam,sparam);
currChart=ChartNext(currChart); // Recebemos um novo grfico do anterior
if(currChart==-1) break;

// Alcanado o final da lista de grficos

i++;// No esquea de aumentar o contador


}
}
//+------------------------------------------------------------------+

Tambm Veja
Eventos do Terminal Cliente, Funes de Manipulao de Evento

2000-2014, MetaQuotes Software Corp.

1716

Trabalhando com OpenCL

Trabalhando com OpenCL


Programas em OpenCLso utilizados para a realizao de clculos sobre placas de vdeo que suportam
OpenCL 1.1 ou superior. Placas de vdeo modernas contm centenas de pequenos processadores
especializados que podem executar simultaneamente operaes matemticas simples, com fluxos de
dados de entrada. A linguagem OpenCL organiza computao paralela e proporciona maior velocidade
para uma certa classe de tarefas.
Funes para os programas em execuo em OpenCL:
Funo

Ao

CLHandleType

Retorna o tipo do manipulador de OpenCL como


valor
da
enumerao
ENUM_OPENCL_HANDLE_TYPE

CLGetInfoInteger

Retorna o valor da propriedade de uma integer


para um objeto ou dispositivo OpenCL

CLContextCreate

Cria um contexto OpenCL

CLContextFree

Remove um contexto OpenCL

CLGetDeviceInfo

Receives device property from OpenCL driver

CLProgramCreate

Cria um programa OpenCL a partir de um


cdigo fonte

CLProgramFree

Remove um programa OpenCL

CLKernelCreate

Cria uma funo de partida OpenCL

CLKernelFree

Remove uma funo de partida OpenCL

CLSetKernelArg

Define um parmetro para a funo OpenCL

CLSetKernelArgMem

Define um buffer OpenCL como um parmetro


da funo OpenCL

CLBufferCreate

Cria um buffer OpenCL

CLBufferFree

Exclui um buffer OpenCL

CLBufferWrite

Grava um array num buffer OpenCL

CLBufferRead

L um buffer de OpenCL num array

CLExecute

Executa um programa OpenCL

2000-2014, MetaQuotes Software Corp.

1717

Trabalhando com OpenCL

CLHandleType
Retorna o tipo de um manipulador
ENUM_OPENCL_HANDLE_TYPE.

de

OpenCL

como

um

valor

do

enumerador

ENUM_OPENCL_HANDLE_TYPE CLHandleType(
int handle

// Manipulao de um objeto OpenCL

);

Parmetros
handle
[in] Um manipulador para um objeto OpenCL: um contexto, um kernel ou um programa OpenCL.
Valor do Retorno
O tipo de manipulador de OpenCL como valor do enumerador ENUM_OPENCL_HANDLE_TYPE.
ENUM_OPENCL_HANDLE_TYPE
Identificador

Descrio

OPENCL_INVALID

Manipulador incorreto

OPENCL_CONTEXT

Um manipulador de contexto OpenCL

OPENCL_PROGRAM

Um manipulador do programa OpenCL

OPENCL_KERNEL

Um manipulador do kernel OpenCL

OPENCL_BUFFER

Um manipulador do buffer OpenCL

2000-2014, MetaQuotes Software Corp.

1718

Trabalhando com OpenCL

CLGetInfoInteger
Retorna o valor de uma propriedade integer para um objeto ou dispositivo OpenCL.
long CLGetInfoInteger(
int handle,

// O manipulador do objeto OpenCL ou o nmero do disposit

ENUM_OPENCL_PROPERTY_INTEGER prop

// Propriedade solicitada

);

Parmetros
handle
[in] Um manipulador para o objeto OpenCL ou o nmero do dispositivo OpenCL. A numerao dos
dispositivos OpenCL comea com um zero.
prop
[in] O tipo de uma propriedade solicitada do enumerador ENUM_OPENCL_PROPERTY_INTEGER, o
valor que voc deseja obter.
Valor do Retorno
O valor da propriedade, se for bem-sucedido ou -1 em caso de erro. Para obter informaes sobre o
erro, utilize a funo GetLastError().
ENUM_OPENCL_PROPERTY_INTEGER
Identificador

Descrio

Tipo

CL_DEVICE_COUNT

O nmero de dispositivos com


suporte a OpenCL. Esta
propriedade no requer a
especificao do
primeiro
parmetro, ou seja, voc pode
passar um valor zero para o
parmetro do manipulador.

int

CL_DEVICE_TYPE

Tipo de dispositivo

ENUM_CL_DEVICE_TYPE

CL_DEVICE_VENDOR_ID

Identificador
fornecedor

do

uint

CL_DEVICE_MAX_COMPUTE_UN
ITS

Nmero de tarefas paralelas


calculados em dispositivos
OpenCL. Um grupo de trabalho
resolve
uma
tarefa
computacional. O menor valor
1

uint

CL_DEVICE_MAX_CLOCK_FREQ
UENCY

Define a maior freqncia do


dispositivo em MHz.

uint

CL_DEVICE_GLOBAL_MEM_SIZ
E

Tamanho da memria global


do dispositivo em bites

ulong

CL_DEVICE_LOCAL_MEM_SIZE

Tamanho

uint

nico

dos

dados

2000-2014, MetaQuotes Software Corp.

1719

Trabalhando com OpenCL


processados
(cena)
memria local, em bites

de

O enumerador ENUM_CL_DEVICE_TYPE contm possveis tipos de dispositivos que suportam OpenCL.


Voc pode receber o tipo de dispositivo pelo seu nmero ou o manipulador do objeto OpenCL,
chamando CLGetInfoInteger(handle_or_deviceN, CL_DEVICE_TYPE).
ENUM_CL_DEVICE_TYPE
Identificador

Descrio

CL_DEVICE_ACCELERATOR

Aceleradores OpenCL dedicados (por exemplo, a


IBM CELL Blade). Estes dispositivos se
comunicam com o processador hospedeiro
utilizando uma interconexo de perifricos,
como PCIe.

CL_DEVICE_CPU

Um dispositivo OpenCL que o processador


hospedeiro. O processador hospedeiro executa
as implementaes OpenCL, sendo uma nica
ou multi-core CPU.

CL_DEVICE_GPU

Um dispositivo OpenCL que uma GPU.

CL_DEVICE_DEFAULT

O dispositivo padro OpenCL no sistema. O


dispositivo padro no pode ser um dispositivo
CL_DEVICE_TYPE_CUSTOM.

CL_DEVICE_CUSTOM

Aceleradores dedicados que no


programas escritos em OpenCL C.

suportam

Exemplo:
void OnStart()
{
int cl_ctx;
//--- inicializar contexto OpenCL
if((cl_ctx=CLContextCreate(CL_USE_GPU_ONLY))==INVALID_HANDLE)
{
Print("OpenCL no encontrado");
return;
}
//--- Exibir informaes sobre a plataforma

Print("Tipo OpenCL: ",EnumToString((ENUM_CL_DEVICE_TYPE)CLGetInfoInteger(cl_ctx,CL_DEVICE_TYPE))


Print("Fornecedor ID OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_VENDOR_ID));
Print("Unidades OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_COMPUTE_UNITS));
Print("Freqncia OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_CLOCK_FREQUENCY)," MHz");
Print("Memria global OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_GLOBAL_MEM_SIZE)," bytes");
Print("Memria local OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_LOCAL_MEM_SIZE)," bytes");
//--}

2000-2014, MetaQuotes Software Corp.

1720

Trabalhando com OpenCL

CLGetInfoString
Retorna valor string de uma propriedade para o objeto OpenCL ou dispositivo.
bool CLGetInfoString(
int handle,

// Objeto manipulador de OpenCL ou nmero de dispositivo

ENUM_OPENCL_PROPERTY_STRING
string& value

prop,

// propriedade solicitada
// string referenciada

);

Parmetros
handle
[in] Objeto manipulador de OpenCL ou nmero de dispositivo OpenCL. A numerao dos
dispositivos OpenCL comea com um zero.
prop
[in] Tipo de propriedade requerida do enumerador ENUM_OPENCL_PROPERTY_STRING, o valor do
qual deve ser obtido.
value
[out] String para receber o valor da propriedade.
Valor de retorno
true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, utilize a funo
GetLastError().
ENUM_OPENCL_PROPERTY_STRING
Identificador
CL_PLATFORM_PROFILE

Descrio
CL_PLATFORM_PROFILE - Perfil OpenCL. Nome do
perfil pode ser um dos seguintes valores:
FULL_PROFILE - implementao suporta
OpenCL (funcionalidade definida como a
parte da especificao do kernel sem
necessidade de extenses adicionais para o
apoio OpenCL);
EMBEDDED_PROFILE
implementao
suporta OpenCL como um suplemento. Perfil
alterado definido como um subconjunto
para cada verso OpenCL.

CL_PLATFORM_VERSION

Verso OpenCL

CL_PLATFORM_VENDOR

Nome do fornecedor da Plataforma

CL_PLATFORM_EXTENSIONS

Lista de extenses suportadas pela plataforma.


Nomes de extenso deve ser suportado por todos
os dispositivos relacionados com esta plataforma

CL_DEVICE_NAME

O nome do dispositivo

2000-2014, MetaQuotes Software Corp.

1721

Trabalhando com OpenCL


CL_DEVICE_VENDOR

Nome do fornecedor

CL_DRIVER_VERSION

Verso
do
driver
OpenCL
major_number.minor_number

CL_DEVICE_PROFILE

Perfil de dispositivo OpenCL. Nome do perfil pode


ser um dos seguintes valores:

em

formato

FULL_PROFILE - implementao suporta


OpenCL (funcionalidade definida como a
parte da especificao do kernel sem
necessidade de extenses adicionais para o
apoio OpenCL);
EMBEDDED_PROFILE
implementao
suporta OpenCL como um suplemento. Perfil
alterado definido como um subconjunto
para cada verso OpenCL.
CL_DEVICE_VERSION

OpenCL
verso
em
formato
"OpenCL<space><major_version.minor_version><s
pace><vendor-specific information>"

CL_DEVICE_EXTENSIONS

Lista de extenses suportadas pelo dispositivo. A


lista pode conter extenses suportadas pelo
fornecedor, bem como um ou mais nomes
aprovados:
cl_khr_int64_base_atomics
cl_khr_int64_extended_atomics
cl_khr_fp16
cl_khr_gl_sharing
cl_khr_gl_event
cl_khr_d3d10_sharing
cl_khr_dx9_media_sharing
cl_khr_d3d11_sharing

CL_DEVICE_BUILT_IN_KERNELS

A lista de kernels suportados separados por ";".

CL_DEVICE_OPENCL_C_VERSION

A verso mximo suportado pelo compilador para


este dispositivo. Verso formato:
"OpenCL<space>C<space><major_version.minor_ve
rsion><space><vendor-specific information> "

Exemplo:
void OnStart()
{
int cl_ctx;
string str;
//--- inicializar contexto OpenCL
if((cl_ctx=CLContextCreate(CL_USE_GPU_ONLY))==INVALID_HANDLE)
{
Print("OpenCL no encontrado");
return;
}

2000-2014, MetaQuotes Software Corp.

1722

Trabalhando com OpenCL


//--- Exibir informaes sobre a plataforma
if(CLGetInfoString(cl_ctx,CL_PLATFORM_NAME,str))
Print("Nome da plataforma OpenCL: ");
if(CLGetInfoString(cl_ctx,CL_PLATFORM_VENDOR,str))
Print("Fornecedor da plataforma OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_PLATFORM_VERSION,str))
Print("Verso da plataforma OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_PLATFORM_PROFILE,str))
Print("Perfil da plataforma OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_PLATFORM_EXTENSIONS,str))
Print("Extenso da plataforma OpenCL: ",str);
//--- Exibir informaes sobre o dispositivo
if(CLGetInfoString(cl_ctx,CL_DEVICE_NAME,str))
Print("Nome do dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_PROFILE,str))
Print("Perfil do dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_BUILT_IN_KERNELS,str))
Print("Kernels dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_EXTENSIONS,str))
Print("Extenso do dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_VENDOR,str))
Print("Fornecedor do dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_VERSION,str))
Print("Verso do dispositivo OpenCL: ",str);
if(CLGetInfoString(cl_ctx,CL_DEVICE_OPENCL_C_VERSION,str))
Print("Verso do c OpenCL: ",str);
//--- Exibir informaes gerais sobre o dispositivo OpenCL

Print("Tipo OpenCL: ",EnumToString((ENUM_CL_DEVICE_TYPE)CLGetInfoInteger(cl_ctx,CL_DEVICE_TYPE))


Print("Fornecedor ID OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_VENDOR_ID));
Print("Unidades OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_COMPUTE_UNITS));
Print("Freqncia OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_CLOCK_FREQUENCY));
Print("Memria global OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_GLOBAL_MEM_SIZE));
Print("Memria local OpenCL: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_LOCAL_MEM_SIZE));
//--}

2000-2014, MetaQuotes Software Corp.

1723

Trabalhando com OpenCL

CLContextCreate
Cria um contexto OpenCL e retorna seu manipulador.
int CLContextCreate(
int device

// Nmero de srie do dispositivo OpenCL ou macro

);

Parmetro
device
[in] O nmero ordinal do dispositivo-OpenCL no sistema. Instead of a specific number, you can
specify one of the following values:
CL_USE_ANY any available device with OpenCL support is allowed;
CL_USE_CPU_ONLY only OpenCL emulation on CPU is allowed;
CL_USE_GPU_ONLY OpenCL emulation is prohibited and only specialized devices with OpenCL
support (video cards) can be used.
Valor do Retorno
Um manipulador para o contexto OpenCL se for bem sucedido, caso contrrio, -1. Para obter
informaes sobre o erro, utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1724

Trabalhando com OpenCL

CLContextFree
Remove um contexto OpenCL.
void CLContextFree(
int context

// Manipulador para um contexto OpenCL

);

Parmetros
context
[in] Manipula o contexto OpenCL.
Valor do Retorno
Nenhum. No caso de um erro interno o valor do modificador _LastError. Para obter informaes
sobre o erro, utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1725

Trabalhando com OpenCL

CLGetDeviceInfo
The function receives device property from OpenCL driver.
bool CLGetDeviceInfo(
int

handle,

// manipulador de dispositivo OpenCL

int

property_id,

// solicitado propriedade ID

uchar&

data[],

// array para recebimento de dados

uint&

size

// deslocamento na array de elementos, 0 por padro

);

Parmetros
handle
[in] OpenCL device index or OpenCL handle created by CLContextCreate() function.
property_id
[in] ID of the OpenCL device property that should be received. The values can be of one of the
predetermined ones listed in the table below.
data[]
[out] The array for receiving data on the requested property.
size
[out] Size of the received data in the array data[].
Valor de retorno
true se bem sucedido, caso contrrio false. Para obter informaes sobre o erro, utilize a funo
GetLastError().
Observao
Para array unidimensionais, o nmero do elemento, com o qual a leitura de dados para a escrita
num buffer de OpenCL comea, calculado tendo em conta os sinalizadores AS_SERIES.
The list of available IDs of OpenCL device properties
Exact description of the property and its functions can be found at the official OpenCL web site.
Identificador

Valor

CL_DEVICE_TYPE

0x1000

CL_DEVICE_VENDOR_ID

0x1001

CL_DEVICE_MAX_COMPUTE_UNITS

0x1002

CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS

0x1003

CL_DEVICE_MAX_WORK_GROUP_SIZE

0x1004

CL_DEVICE_MAX_WORK_ITEM_SIZES

0x1005

CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHA
R

0x1006

2000-2014, MetaQuotes Software Corp.

1726

Trabalhando com OpenCL

CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHO
RT

0x1007

CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT

0x1008

CL_DEVICE_PREFERRED_VECTOR_WIDTH_LON
G

0x1009

CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLO
AT

0x100A

CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOU
BLE

0x100B

CL_DEVICE_MAX_CLOCK_FREQUENCY

0x100C

CL_DEVICE_ADDRESS_BITS

0x100D

CL_DEVICE_MAX_READ_IMAGE_ARGS

0x100E

CL_DEVICE_MAX_WRITE_IMAGE_ARGS

0x100F

CL_DEVICE_MAX_MEM_ALLOC_SIZE

0x1010

CL_DEVICE_IMAGE2D_MAX_WIDTH

0x1011

CL_DEVICE_IMAGE2D_MAX_HEIGHT

0x1012

CL_DEVICE_IMAGE3D_MAX_WIDTH

0x1013

CL_DEVICE_IMAGE3D_MAX_HEIGHT

0x1014

CL_DEVICE_IMAGE3D_MAX_DEPTH

0x1015

CL_DEVICE_IMAGE_SUPPORT

0x1016

CL_DEVICE_MAX_PARAMETER_SIZE

0x1017

CL_DEVICE_MAX_SAMPLERS

0x1018

CL_DEVICE_MEM_BASE_ADDR_ALIGN

0x1019

CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE

0x101A

CL_DEVICE_SINGLE_FP_CONFIG

0x101B

CL_DEVICE_GLOBAL_MEM_CACHE_TYPE

0x101C

CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE

0x101D

CL_DEVICE_GLOBAL_MEM_CACHE_SIZE

0x101E

CL_DEVICE_GLOBAL_MEM_SIZE

0x101F

CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE

0x1020

CL_DEVICE_MAX_CONSTANT_ARGS

0x1021

CL_DEVICE_LOCAL_MEM_TYPE

0x1022

CL_DEVICE_LOCAL_MEM_SIZE

0x1023

CL_DEVICE_ERROR_CORRECTION_SUPPORT

0x1024

2000-2014, MetaQuotes Software Corp.

1727

Trabalhando com OpenCL

CL_DEVICE_PROFILING_TIMER_RESOLUTION

0x1025

CL_DEVICE_ENDIAN_LITTLE

0x1026

CL_DEVICE_AVAILABLE

0x1027

CL_DEVICE_COMPILER_AVAILABLE

0x1028

CL_DEVICE_EXECUTION_CAPABILITIES

0x1029

CL_DEVICE_QUEUE_PROPERTIES

0x102A

CL_DEVICE_NAME

0x102B

CL_DEVICE_VENDOR

0x102C

CL_DRIVER_VERSION

0x102D

CL_DEVICE_PROFILE

0x102E

CL_DEVICE_VERSION

0x102F

CL_DEVICE_EXTENSIONS

0x1030

CL_DEVICE_PLATFORM

0x1031

CL_DEVICE_DOUBLE_FP_CONFIG

0x1032

CL_DEVICE_PREFERRED_VECTOR_WIDTH_HAL
F

0x1034

CL_DEVICE_HOST_UNIFIED_MEMORY

0x1035

CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR

0x1036

CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT

0x1037

CL_DEVICE_NATIVE_VECTOR_WIDTH_INT

0x1038

CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG

0x1039

CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT

0x103A

CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE

0x103B

CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF

0x103C

CL_DEVICE_OPENCL_C_VERSION

0x103D

CL_DEVICE_LINKER_AVAILABLE

0x103E

CL_DEVICE_BUILT_IN_KERNELS

0x103F

CL_DEVICE_IMAGE_MAX_BUFFER_SIZE

0x1040

CL_DEVICE_IMAGE_MAX_ARRAY_SIZE

0x1041

CL_DEVICE_PARENT_DEVICE

0x1042

CL_DEVICE_PARTITION_MAX_SUB_DEVICES

0x1043

CL_DEVICE_PARTITION_PROPERTIES

0x1044

CL_DEVICE_PARTITION_AFFINITY_DOMAIN

0x1045

2000-2014, MetaQuotes Software Corp.

1728

Trabalhando com OpenCL

CL_DEVICE_PARTITION_TYPE

0x1046

CL_DEVICE_REFERENCE_COUNT

0x1047

CL_DEVICE_PREFERRED_INTEROP_USER_SYNC

0x1048

CL_DEVICE_PRINTF_BUFFER_SIZE

0x1049

CL_DEVICE_IMAGE_PITCH_ALIGNMENT

0x104A

CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMEN
T

0x104B

Exemplo:
void OnStart()
{
//--int dCount= CLGetInfoInteger(0,CL_DEVICE_COUNT);
for(int i = 0; i<dCount; i++)
{
int clCtx=CLContextCreate(i);
if(clCtx == -1)
Print("ERRO na CLContextCreate");
string device;
CLGetInfoString(clCtx,CL_DEVICE_NAME,device);
Print(i,": ",device);
uchar data[1024];
uint size;
CLGetDeviceInfo(clCtx,CL_DEVICE_VENDOR,data,size);
Print("tamanho = ",size);
string str=CharArrayToString(data);
Print(str);
}
}
//--- example of entries in Experts journal
//

2013.07.24 10:50:48

opencl (EURUSD,H1)

2: Advanced Micro Devices, Inc.

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

size = 32

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

Tahiti

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

Intel(R) Corporation

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

size = 21

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

1:

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

NVIDIA Corporation

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

size = 19

//

2013.07.24 10:50:48

opencl (EURUSD,H1)

0: GeForce GTX 580

2000-2014, MetaQuotes Software Corp.

Intel(R) Core(TM) i7-3770 CPU @ 3.40G

1729

Trabalhando com OpenCL

CLProgramCreate
Cria um programa OpenCL a partir de um cdigo fonte.
int CLProgramCreate(
int

context,

const string source

// Manipulador para um contexto OpenCL


// O cdigo-fonte

);

Parmetros
context
[in] Manipula o contexto OpenCL.
source
[in] String com o cdigo-fonte do programa OpenCL.
Valor do Retorno
Um manipulador para um objeto OpenCL se for bem sucedido. Em caso de erro retornado -1. Para
obter informaes sobre o erro, utilize a funo GetLastError().
Observao
At o momento, so utilizados os seguintes cdigos de erro:
ERR_OPENCL_INVALID_HANDLE manipulador invlido para lidar com o OpenCL contexto.
ERR_INVALID_PARAMETER parmetro invlido de string.
ERR_NOT_ENOUGH_MEMORY no h memria suficiente para concluir a operao.
ERR_OPENCL_PROGRAM_CREATE erro interno do OpenCL ou erro de compilao.

2000-2014, MetaQuotes Software Corp.

1730

Trabalhando com OpenCL

CLProgramFree
Remove um programa OpenCL.
void CLProgramFree(
int program

// Manipulador para um objeto OpenCL

);

Parmetros
program
[in] Manipulador para um objeto OpenCL.
Valor do Retorno
Nenhum. No caso de um erro interno o valor do modificador _LastError. Para obter informaes
sobre o erro, utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1731

Trabalhando com OpenCL

CLKernelCreate
Cria o kernel do programa OpenCL e retorna seu manipulador.
int CLKernelCreate(
int

program,

// Manipulador para um objeto OpenCL

const string kernel_name

// Nome do kernel

);

Parmetros
program
[in] Manipulador para um objeto do programa OpenCL.
kernel_name
[in] O nome da funo do kernel no programa apropriado OpenCL, em que a execuo se inicia.
Valor do Retorno
Um manipulador para um objeto OpenCL se for bem sucedido. Em caso de erro retornado -1. Para
obter informaes sobre o erro, utilize a funo GetLastError().
Observao
At o momento, so utilizados os seguintes cdigos de erro:
ERR_OPENCL_INVALID_HANDLE - manipulador invlido para lidar com o programa OpenCL.
ERR_INVALID_PARAMETER - parmetro invlido de string.
ERR_OPENCL_TOO_LONG_KERNEL_NAME - nome do kernel contm mais de 127 caracteres.
ERR_OPENCL_KERNEL_CREATE - Ocorreu um erro interno durante a criao de um objeto OpenCL.

2000-2014, MetaQuotes Software Corp.

1732

Trabalhando com OpenCL

CLKernelFree
Remove uma funo inicial OpenCL.
void CLKernelFree(
int kernel

// Manipulador para o kernel de um programa OpenCL

);

Parmetros
kernel_name
[in] Manipulador do objeto do kernel.
Valor do Retorno
Nenhum. No caso de um erro interno o valor do modificador _LastError. Para obter informaes
sobre o erro, utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1733

Trabalhando com OpenCL

CLSetKernelArg
Define um parmetro para a funo OpenCL.
bool CLSetKernelArg(
int

kernel,

// Manipulador para o kernel de um programa OpenCL

uint

arg_index,

// O nmero do argumento da funo OpenCL

void arg_value

// Cdigo-fonte

);

Parmetros
kernel
[in] Manipulador para um kernel do programa OpenCL.
arg_index
[in] O nmero do argumento da funo, a numerao comea com zero.
arg_value
[in] O valor do argumento da funo.
Valor do Retorno
Retorna true se for bem sucedido, caso contrrio retorna false. Para obter informaes sobre o erro,
utilize a funo GetLastError().
Observao
At o momento, so utilizados os seguintes cdigos de erro:
ERR_INVALID_PARAMETER,
ERR_OPENCL_INVALID_HANDLE manipulador invlido para o kernel OpenCL.
ERR_OPENCL_SET_KERNEL_PARAMETER - erro interno do OpenCL.

2000-2014, MetaQuotes Software Corp.

1734

Trabalhando com OpenCL

CLSetKernelArgMem
Define um buffer OpenCL como um parmetro da funo OpenCL.
bool CLSetKernelArgMem(
int

kernel,

// Manipulador para o kernel de um programa OpenCL

uint

arg_index,

// O nmero do argumento da funo OpenCL

int

cl_mem_handle

// Manipulador para buffer de OpenCL

);

Parmetros
kernel
[in] Manipulador para um kernel do programa OpenCL.
arg_index
[in] O nmero do argumento da funo, a numerao comea com zero.
cl_mem_handle
[in] Um manipulador para um buffer OpenCL.
Valor do Retorno
Retorna true se for bem sucedido, caso contrrio retorna false. Para obter informaes sobre o erro,
utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1735

Trabalhando com OpenCL

CLBufferCreate
Cria um buffer OpenCL e retorna seu manipulador.
int CLBufferCreate(
int

context,

// Manipulador para um contexto OpenCL

uint

size,

// Tamanho do buffer

uint flags

// Combinao de sinalizadores que especifique as propriedades do buffer Open

);

Parmetros
context
[in] Um manipulador de contexto OpenCL.
size
[in] Tamanho do buffer em bites.
flags
[in]
Propriedades de buffer que
sinalizadores:CL_MEM_READ_WRITE,
CL_MEM_ALLOC_HOST_PTR.

so definidas usando
CL_MEM_WRITE_ONLY,

uma combinao de
CL_MEM_READ_ONLY,

Valor do Retorno
Um manipulador para um buffer OpenCL se for bem sucedido. Em caso de erro retornado -1. Para
obter informaes sobre o erro, utilize a funo GetLastError().
Observao
At o momento, so utilizados os seguintes cdigos de erro:
ERR_OPENCL_INVALID_HANDLE - invlido manipulador ao contexto OpenCL.
ERR_NOT_ENOUGH_MEMORY memria insuficiente.
ERR_OPENCL_BUFFER_CREATE erro interno criando buffers.

2000-2014, MetaQuotes Software Corp.

1736

Trabalhando com OpenCL

CLBufferFree
Exclui um buffer de OpenCL.
void CLBufferFree(
int

buffer

// Manipulador para um buffer OpenCL

);

Parmetros
buffer
[in] Um manipulador para um buffer OpenCL.
Valor do Retorno
Nenhum. No caso de um erro interno o valor do modificador _LastError. Para obter informaes
sobre o erro, utilize a funo GetLastError().

2000-2014, MetaQuotes Software Corp.

1737

Trabalhando com OpenCL

CLBufferWrite
Escreve para o buffer OpenCL e retorna o nmero de elementos escritos.
uint CLBufferWrite(
int

buffer,

// Um manipulador para o buffer OpenCL

const void& data[],

// Uma array de valores

uint

buffer_offset=0,

// Um deslocamento no buffer OpenCL em bites, 0 por padr

uint

data_offset=0,

// Um deslocamento na array de elementos, 0 por padro

uint

data_count=WHOLE_ARRAY

// O nmero de valores a partir do array para a escrita,

);

Parmetros
buffer
[in] O manipulador do buffer OpenCL.
data[]
[in] Um array de valores que deve ser escrito no buffer OpenCL. Passado por referncia.
buffer_offset
[in] Uma compensao no buffer OpenCL em bites, a partir do qual comea a escrita. Por padro,
a escrita comea com o incio do buffer.
data_offset
[in] O ndice do primeiro elemento array, comeando a partir do qual valores de array so escritos
no buffer OpenCL. Por padro, so tomados os valores desde o incio do array.
data_count
[in] O nmero de valores que devem ser escritos. Todos os valores do array, por padro.
Valor do Retorno
O nmero de elementos escritos. 0 (zero) devolvido em caso de erro. Para obter informaes
sobre o erro, utilize a funo GetLastError().
Observao
Para arrays unidimensionais, o nmero do elemento, com o qual a leitura de dados para a escrita
num buffer de OpenCL comea, calculado tendo em conta os sinalizadores AS_SERIES.
Um array de duas ou mais dimenses apresentado como unidimensional. Neste caso, data_offset
o nmero de elementos que devem ser ignorados na apresentao, e no o nmero de elementos na
primeira dimenso.

2000-2014, MetaQuotes Software Corp.

1738

Trabalhando com OpenCL

CLBufferRead
L um buffer de OpenCL em uma array e retorna o nmero de elementos de leitura.
uint CLBufferRead(
int

buffer,

// Um manipulador para o buffer OpenCL

const void& data[],

// Uma array de valores

uint

buffer_offset=0,

// Um deslocamento no buffer OpenCL em bites, 0 por padr

uint

data_offset=0,

// Um deslocamento na array de elementos, 0 por padro

uint

data_count=WHOLE_ARRAY

// O nmero de valores a partir da buffer de leitura, to

);

Parmetros
buffer
[in] Um manipulador do buffer OpenCL.
data[]
[in] Um array para receber os valores do buffer OpenCL. Passado por referncia.
buffer_offset
[in] Um deslocamento no buffer OpenCL em bites, a partir da qual se inicia a leitura. Por padro,
a leitura comea com o incio do buffer.
data_offset
[in] O ndice do primeiro elemento array para escrever os valores de buffer OpenCL. Por padro, a
escrita dos valores lidos em um array comea a partir do ndice zero.
data_count
[in] O nmero de valores que devem ser lidos. Todo o buffer OpenCL lido por padro.
Valor do Retorno
O nmero de elementos de leitura. 0 (zero) devolvido em caso de erro. Para obter informaes
sobre o erro, utilize a funo GetLastError().
Observao
Para arrays unidimensionais, o nmero do elemento, em que a escrita de dados num buffer de
OpenCL inicia, calculado tendo em conta os sinalizadores AS_SERIES.
Um array de duas ou mais dimenses apresentado como unidimensional. Neste caso, data_offset
o nmero de elementos que devem ser ignorados na apresentao, e no o nmero de elementos na
primeira dimenso.

2000-2014, MetaQuotes Software Corp.

1739

Trabalhando com OpenCL

CLExecute
A funo executa um programa OpenCL. Existem trs verses da funo:
1. Lanamento das funes kernel usando um kernel
bool CLExecute(
int

kernel

// Manipulador para o kernel de um programa OpenCL

);

2. Lanamento de vrias cpias do kernel (funo OpenCL) com descrio do espao de tarefas
bool CLExecute(
int

kernel,

// Manipulador para o kernel de um programa OpenCL

uint

work_dim,

// Dimenso do espao de tarefas

const uint& global_work_offset[],

// Compensao inicial no espao de tarefas

const uint& global_work_size[]

// Nmero total de tarefas

);

3. Lanamento de vrias cpias do kernel (funo OpenCL) com descrio do espao de tarefa e
especificao do tamanho de subconjunto de tarefa local do grupo
bool CLExecute(
int

kernel,

// Manipulador para o kernel de um programa OpenCL

uint

work_dim,

// Dimenso do espao de tarefas

const uint& global_work_offset[],

// Compensao inicial no espao de tarefas

const uint& global_work_size[],

// Nmero total de tarefas

const uint& local_work_size[]

// Nmero de tarefas no grupo local

);

Parmetros
kernel
[in] Manipulador para o kernel OpenCL.
work_dim
[in] Dimenso do espao tarefas.
global_work_offset[]
[in] Compensao inicial no espao de tarefas.
global_work_size[]
[in] O tamanho de um subconjunto de tarefas.
local_work_size[]
[in] O tamanho do subconjunto de tarefa local do grupo.
Valor do Retorno
Retorna true se for bem sucedido, caso contrrio retorna false. Para obter informaes sobre o erro,
utilize a funo GetLastError().
Observao

2000-2014, MetaQuotes Software Corp.

1740

Trabalhando com OpenCL


Considerar o uso dos parmetros no exemplo a seguir:
work_dim especifica work_items[] da dimenso do array descrevendo as tarefas. Se work_dim=3,
array tridimensional work_items[N1, N2, N3] usado.
global_work_size[] contm os valores definindo o tamanho array do work_items[]. Se work_dim=3,
array do global_work_size[3] pode ser {40, 100, 320}. Ento ns temos work_items[40, 100, 320].
Assim, o nmero total de tarefas 40 100 320 = 1 280 000.
local_work_size[] define o subconjunto das tarefas que sero executadas pelo kernel especfico de
programa OpenCL. A sua dimenso igual a dimensowork_items[] e permite a diviso exata da
tarefa comum de subconjunto dentro de subconjuntos menores. Na verdade, os tamanhos do array
do local_work_size[] devem ser selecionados de modo a dividir a tarefa global work_items[]
definindo dentro de subconjuntos menores. local_work_size[3]={10, 10, 10} vai se encaixar no
exemplo corrente, como work_items[40, 100, 320] podem ser obtidos a partir do array do
local_items[10, 10, 10] sem excesso.

2000-2014, MetaQuotes Software Corp.

1741

Standard Library

Standard Library
This group of chapters contains the technical details of the MQL5 Standard Library and descriptions of
all its key components.
MQL5 Standard Library is written in MQL5 and is designed to facilitate writing programs (indicators,
scripts, experts) to end users. Library provides convenient access to most of the internal functions
MQL5.
MQL5 Standard Library is placed in the working directory of the terminal in the 'Include' folder.
Section

Location

Base class

Include\

Classes of data

Include\Arrays\

Classes for file operations

Include\Files\

Classes for string operations

Include\Strings\

Classes for graphic objects

Include\Objects\

Class for creating custom graphics

Include\Canvas\

Class for working with chart

Include\Charts\

Technical indicators

Include\Indicators\

Trade classes

Include\Trade\

Trading strategy classes

Include\Expert\

Classes for creation of control panels and


dialogs

Include\Controls\

2000-2014, MetaQuotes Software Corp.

1742

Standard Library

Basic Class CObject


Class CObject is the base class for constructing a MQL5 Standard Library .

Description
Class CObject provides all its descendants to be part of a linked list. Also identifies a number of
virtual methods for further implementation in descendant classes.

Declaration
class CObject

Title
#include <Object.mqh>

Class Methods
Attributes
Prev

Gets the value of the previous item

Prev

Sets the value of the previous item

Next

Gets the value of the subsequent element

Next

Sets the next element

Compare methods
virtual Compare

Returns the result of comparison with another


object

Input/output
virtual Save

Writes object to a file

virtual Load

Reads the object from the file

virtual Type

Returns the type of object

Derived classes:
CArray
CChartObject
CChart
CString
CFile
CList
CTreeNode

2000-2014, MetaQuotes Software Corp.

1743

Standard Library

Prev
Gets a pointer to the previous list item.
CObject* Prev()

Return Value
Pointer to the previous list item. If an item is listed first, then return NULL.
Example:
//--- example for CObject::Prev()
#include <Object.mqh>
//--void OnStart()
{
CObject *object_first,*object_second;
//--object_first=new CObject;
if(object_first==NULL)
{
printf("Object create error");
return;
}
object_second=new CObject;
if(object_second==NULL)
{
printf("Object create error");
delete object_first;
return;
}
//--- set interconnect
object_first.Next(object_second);
object_second.Prev(object_first);
//--- use prev object
CObject *object=object_second.Prev();
//--- delete objects
delete object_first;
delete object_second;
}

2000-2014, MetaQuotes Software Corp.

1744

Standard Library

Prev
Sets the pointer to the previous list item.
void Prev(
CObject* object

// Pointer to the previous list item

Parameters
object
[in] New value pointer to the previous list item.
Example:
//--- example for CObject::Prev(CObject*)
#include <Object.mqh>
//--void OnStart()
{
CObject *object_first,*object_second;
//--object_first=new CObject;
if(object_first==NULL)
{
printf("Object create error");
return;
}
object_second=new CObject;
if(object_second==NULL)
{
printf("Object create error");
delete object_first;
return;
}
//--- set interconnect
object_first.Next(object_second);
object_second.Prev(object_first);
//--- use objects
//--- ...
//--- delete objects
delete object_first;
delete object_second;
}

2000-2014, MetaQuotes Software Corp.

1745

Standard Library

Next
Gets a pointer to the next element of the list.
CObject* Next()

Return Value
Pointer to the next item in the list. If the last item in the list, returns NULL.
Example:
//--- example for CObject::Next()
#include <Object.mqh>
//--void OnStart()
{
CObject *object_first,*object_second;
//--object_first=new CObject;
if(object_first==NULL)
{
printf("Object create error");
return;
}
object_second=new CObject;
if(object_second==NULL)
{
printf("Object create error");
delete object_first;
return;
}
//--- set interconnect
object_first.Next(object_second);
object_second.Prev(object_first);
//--- use next object
CObject *object=object_first.Next();
//--- delete objects
delete object_first;
delete object_second;
}

2000-2014, MetaQuotes Software Corp.

1746

Standard Library

Next
Sets the pointer to the next element of the list.
void Next(
CObject* object

// Pointer to the next list item

Parameters
object
[in] New value pointer to the next list item.
Example:
//--- example for CObject::Next(CObject*)
#include <Object.mqh>
//--void OnStart()
{
CObject *object_first,*object_second;
//--object_first=new CObject;
if(object_first==NULL)
{
printf("Object create error");
return;
}
object_second=new CObject;
if(object_second==NULL)
{
printf("Object create error");
delete object_first;
return;
}
//--- set interconnect
object_first.Next(object_second);
object_second.Prev(object_first);
//--- use objects
//--- ...
//--- delete objects
delete object_first;
delete object_second;
}

2000-2014, MetaQuotes Software Corp.

1747

Standard Library

Compare
Compares the data item in the list with data on another element of the list.
virtual int Compare(
CObject const * node,

// Node to compare with

int

// Compare mode

mode=0

) const

Parameters
node
[in] Pointer to a list item to compare
mode=0
[in] Variant Comparison
Return Value
0 - in case the list items are equal, -1 - if the list item is less than the item in the list for
comparison (node), 1 - if the list item more than item in the list for comparison (node).
Note
Method Compare () in class CObject always returns 0 and does not perform any action.If you want to
compare data derived class, the method Compare (...) Should be implemented.The mode parameter
should be used when implementing multivariate comparison.
Example:
//--- example for CObject::Compare(...)
#include <Object.mqh>
//--void OnStart()
{
CObject *object_first,*object_second;
//--object_first=new CObject;
if(object_first==NULL)
{
printf("Object create error");
return;
}
object_second=new CObject;
if(object_second==NULL)
{
printf("Object create error");
delete object_first;
return;
}
//--- set interconnect
object_first.Next(object_second);

2000-2014, MetaQuotes Software Corp.

1748

Standard Library
object_second.Prev(object_first);
//--- compare objects
int result=object_first.Compare(object_second);
//--- delete objects
delete object_first;
delete object_second;
}

2000-2014, MetaQuotes Software Corp.

1749

Standard Library

Save
Saves data element list in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (), binary
Return Value
true - if successfully completed, false - if an error.
Note
Method Save (int) in class CObject always returns true and does not perform any action. If you want
to save the data derived class in the file, the method Save (int) should be implemented.
Example:
//--- example for CObject::Save(int)
#include <Object.mqh>
//--void OnStart()
{
int

file_handle;

CObject *object=new CObject;


//--if(object!=NULL)
{
printf("Object create error");
return;
}
//--- set objects data
//--- . . .
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!object.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete object;
FileClose(file_handle);
//--return;
}

2000-2014, MetaQuotes Software Corp.

1750

Standard Library
FileClose(file_handle);
}
delete object;
}

2000-2014, MetaQuotes Software Corp.

1751

Standard Library

Load
Loads data item in the list from a file.
virtual bool Load(
int file_handle

// handle to file

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (), binary
Return Value
true if successfully completed, false - if an error.
Note
Method Load (int) in class CObject always returns true and does not perform any action. If you want
to load the data derived class from a file, the method Load (int) should be implemented.
Example:
//--- example for CObject::Load(int)
#include <Object.mqh>
//--void OnStart()
{
int

file_handle;

CObject *object=new CObject;


//--if(object!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!object.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete object;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}

2000-2014, MetaQuotes Software Corp.

1752

Standard Library
//--- use object
//--- . . .
delete object;
}

2000-2014, MetaQuotes Software Corp.

1753

Standard Library

Type
Gets the type identifier.
virtual int Type() const

Return Value
Type identifier (for CObject - 0).
Example:
//--- example for CObject::Type()
#include <Object.mqh>
//--void OnStart()
{
CObject *object=new CObject;
//--object=new CObject;
if(object ==NULL)
{
printf("Object create error");
return;
}
//--- get objects type
int type=object.Type();
//--- delete object
delete object;
}

2000-2014, MetaQuotes Software Corp.

1754

Standard Library

Data Structures
This section contains the technical details of working with various data structures (arrays, linked lists,
etc.) and description of the relevant components of the MQL5 Standard Library .
Using classes of data structures, will save time when creating custom data stores of various formats
(including composite data structures).
MQL5 Standard Library (in terms of data sets) is placed in the working directory of the terminal in the
Include\Arrays folder.

Data Arrays
Use of classes of dynamic arrays of data will save time when creating a custom data stores of various
formats (including multidimensional arrays).
MQL5 Standard Library (in terms of arrays of data) is placed in the working directory of the terminal in
the Include\Arrays folder.
Class

Description

Base class of dynamic data array CArray

Base class of dynamic data array

CArrayChar

Dynamic array of variables of type char or uchar

CArrayShort

Dynamic array of variables of type short or


ushort

CArrayInt

Dynamic array of variables of type int or uint

CArrayLong

Dynamic array of variables of type long or ulong

CArrayFloat

Dynamic array of variables of type float

CArrayDouble

Dynamic array of variables of type double

CArrayString

Dynamic array of variables of type string

Base class of object array CArrayObj

Dynamic array of pointers CObject

Base class of list CList

Provides the ability to work with a list of


instances of CObject and its descendant

CTreeNode

Provides the ability to work with nodes of the


binary tree CTree

CTree

Provides the ability to work with the binary tree


of the CTreeNode class instances and its
descendants

2000-2014, MetaQuotes Software Corp.

1755

Standard Library

CArray
CArray class is the base class a dynamic array of variables.

Description
Class CArray provides the ability to work with a dynamic array of variables in the part of the attributes
of management of memory allocation, sorting, and working with files.

Declaration
class CArray : public CObject

Title
#include <Arrays\Array.mqh>

Class Methods
Attributes
Step

Gets the step increment size of the array

Step

Set the increment size of the array

Total

Gets the number of elements in the array

Available

Gets the number of free elements of the array


are available without additional memory
allocation

Max

Gets the maximum possible size of the array


without memory reallocation

IsSorted

Gets sign sorted array to the specified option

SortMode

Gets the version of the sorting array

Clear methods
Clear

Deletes all of the array elements without


memory release

Sort methods
Sort

Sorts an array to the specified option

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

Derived classes:
CArrayChar

2000-2014, MetaQuotes Software Corp.

1756

Standard Library
CArrayShort
CArrayInt
CArrayLong
CArrayFloat
CArrayDouble
CArrayString
CArrayObj

2000-2014, MetaQuotes Software Corp.

1757

Standard Library

Step
Gets the step increment size of the array.
int Step() const

Return Value
Increment size of the array.
Example:
//--- example for CArray::Step()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get resize step
int step=array.Step();
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1758

Standard Library

Step
Sets the increment size of the array.
bool Step(
int step

// step

Parameters
step
[in] The new value of step increments in the size of the array.
Return Value
true if successful, false - if there was an attempt to establish a step less than or equal to zero.
Example:
//--- example for CArray::Step(int)
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- set resize step
bool result=array.Step(1024);
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1759

Standard Library

Total
Gets the number of elements in the array.
int Total() const;

Return Value
Number of elements in the array.
Example:
//--- example for CArray::Total()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- check total
int total=array.Total();
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1760

Standard Library

Available
Gets the number of free elements of the array are available without additional memory allocation.
int Available() const

Return Value
Number of free elements of the array are available without additional memory allocation.
Example:
//--- example for CArray::Available()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- check available
int available=array.Available();
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1761

Standard Library

Max
Gets the maximum possible size of the array without memory reallocation.
int Max() const

Return Value
The maximum possible size of the array without reallocation memory.
Example:
//--- example for CArray::Max()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- check maximum size
int max=array.Max();
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1762

Standard Library

IsSorted
Gets sign sorted array to the specified option.
bool IsSorted(
int mode=0

// Sorting mode

) const

Parameters
mode=0
[in] Tested version of the sort.
Return Value
Flag of the sorted list. If the list is sorted by the specified version - true, otherwise - false.
Note
Symptom sorted array can not be changed directly. Symptom sorted set method Sort () and reset any
methods to add / insert except InsertSort (...).
Example:
//--- example for CArray::IsSorted()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- check sorted
if(array.IsSorted())
{
//--- use methods for sorted array
//--- ...
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1763

Standard Library

SortMode
Gets the version of the sorting array.
int SortMode() const;

Return Value
Sorting mode.
Example:
//--- example for CArray::SortMode()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- check sort mode
int sort_mode=array.SortMode();
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1764

Standard Library

Clear
Deletes all of the array elements without memory release.
void Clear()

Return Value
None.

Example:
//--- example for CArray::Clear()
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- use array
//--- ...
//--- clear array
array.Clear();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1765

Standard Library

Sort
Sorts an array to the specified option.
void Sort(
int mode=0

// Sorting mode

Parameters
mode=0
[in] Mode of array sorting.
Return Value
No.
Note
Sorting an array is always ascending.For arrays of primitive data types (CArrayChar, CArrayShort,
etc.), the parameter mode is not used.For the array CArrayObj, multivariate sort should be
implemented in the method Sort (int) derived class.
Example:
//--- example for CArray::Sort(int)
#include <Arrays\Array.mqh>
//--void OnStart()
{
CArray *array=new CArray;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- sorting by mode 0
array.Sort(0);
//--- use array
//--- ...
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1766

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArray::Save(int)
#include <Arrays\Array.mqh>
//--void OnStart()
{
int

file_handle;

CArray *array=new CArray;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1767

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArray::Load(...)
#include <Arrays\Array.mqh>
//--void OnStart()
{
int

file_handle;

CArray *array=new CArray;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1768

Standard Library

CArrayChar
CArrayChar class is a class of dynamic array of variables of type char or uchar.

Description
Class CArrayChar provides the ability to work with a dynamic array of variables of type char or uchar.In
the class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayChar : public CArray

Title
#include <Arrays\ArrayChar.mqh>

Class Methods
Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Modify methods
Update

Changes the element at the specified position


array

2000-2014, MetaQuotes Software Corp.

1769

Standard Library

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array methods


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the sample in


the sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

1770

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayChar::Reserve(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1771

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayChar::Resize(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1772

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayChar::Shutdown()
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1773

Standard Library

Add
Adds an element to the end of the array.
bool Add(
char element

// Element to add

Parameters
element
[in] value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayChar::Add(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1774

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const char& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayChar::AddArray(const char &[])
#include <Arrays\ArrayChar.mqh>
//--char src[];
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1775

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayChar* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayChar-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayChar::AddArray(const CArrayChar*)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayChar *src=new CArrayChar;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1776

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1777

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
char element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayChar::Insert(char,int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1778

Standard Library

InsertArray
Inserts an array of elements from another array with the specified position.
bool InsertArray(
const char& src[],

// Source array

int

// Position

pos

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayChar::InsertArray(const char &[],int)
#include <Arrays\ArrayChar.mqh>
//--char src[];
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1779

Standard Library

InsertArray
Inserts an array of elements from another array with the specified position.
bool InsertArray(
CArrayChar* src,

// Pointer to the source

int

// Position

pos

Parameters
src
[in] Pointer to an instance of class CArrayChar-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayChar::InsertArray(const CArrayChar*,int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayChar *src=new CArrayChar;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1780

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1781

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const char& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayChar::AssignArray(const char &[])
#include <Arrays\ArrayChar.mqh>
//--char src[];
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1782

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayChar* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayChar-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayChar::AssignArray(const CArrayChar*)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayChar *src

=new CArrayChar;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

1783

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1784

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

char element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayChar::Update(int,char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,'A'))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1785

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Value

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayChar::Shift(int,int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1786

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] Position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayChar::Delete(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1787

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Positions of the last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayChar::DeleteRange(int,int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1788

Standard Library

At
Gets the element from the given position in the array.
char At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, CHAR_MAX-if there was an attempt to get an element
of not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, CHAR_MAX may be a valid value of an array element, so having a value, always check the
last error code.
Example:
//--- example for CArrayChar::At(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
char result=array.At(i);
if(result==CHAR_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- error of reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1789

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1790

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const char& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayChar::CompareArray(const char &[])
#include <Arrays\ArrayChar.mqh>
//--char src[];
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1791

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const CArrayChar* src

// Pointer to the sources

) const

Parameters
src
[in] Pointer to an instance of class CArrayChar-source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayChar::CompareArray(const CArrayChar*)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayChar *src=new CArrayChar;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1792

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
char element

// Element to insert

Parameters
element
[in] Value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayChar::InsertSort(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort('A'))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1793

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::Search(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1794

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchGreat(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1795

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchLess(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1796

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array
int SearchGreatOrEqual(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchGreatOrEqual(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1797

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchLessOrEqual(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1798

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchFirst(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1799

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayChar::SearchLast(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1800

Standard Library

SearchLinear
Searches for the element equal to the sample in the array.
int SearchLinear(
char element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayChar::SearchLinear(char)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear('A')!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1801

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true if successfully completed, false - if an error.
Example:
//--- example for CArrayChar::Save(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
int

file_handle;

CArrayChar *array=new CArrayChar;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1802

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true if successfully completed, false - if an error.
Example:
//--- example for CArrayChar::Load(int)
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
int

file_handle;

CArrayChar *array=new CArrayChar;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %c",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1803

Standard Library
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1804

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayChar - 77).
Example:
//--- example for CArrayChar::Type()
#include <Arrays\ArrayChar.mqh>
//--void OnStart()
{
CArrayChar *array=new CArrayChar;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1805

Standard Library

CArrayShort
CArrayShort class is a class of dynamic array of variables of type short or ushort.

Description
Class CArrayShort provides the ability to work with a dynamic array of variables of type short or
ushort.In the class implemented the ability to add / insert / delete elements in an array, sort array,
searching in sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayShort : public CArray

Title
#include <Arrays\ArrayShort.mqh>

Class Methods
Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods
Update

Changes the element at the specified position


array

2000-2014, MetaQuotes Software Corp.

1806

Standard Library

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

1807

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayShort::Reserve(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1808

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayShort::Resize(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1809

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayShort::Shutdown()
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1810

Standard Library

Add
Adds an element to the end of the array.
bool Add(
short element

// Element to add

Parameters
element
[in] Value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayShort::Add(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1811

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const short& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayShort::AddArray(const short &[])
#include <Arrays\ArrayShort.mqh>
//--short src[];
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1812

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayShort* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayShort-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayShort::AddArray(const CArrayShort*)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayShort *src=new CArrayShort;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1813

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1814

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
short element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayShort::Insert(short,int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1815

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
const short& src[],
int

pos

// Source array
// Position

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayShort::InsertArray(const short &[],int)
#include <Arrays\ArrayShort.mqh>
//--short src[];
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1816

Standard Library

InsertArray
Inserts an array of elements from another array ukazannogy position.
bool InsertArray(
CArrayShort* src,
int

pos

// Pointer to the source


// Position

Parameters
src
[in] Pointer to an instance of class CArrayShort-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayShort::InsertArray(const CArrayShort*,int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayShort *src=new CArrayShort;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1817

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1818

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const short& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayShort::AssignArray(const short &[])
#include <Arrays\ArrayShort.mqh>
//--short src[];
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1819

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayShort* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayShort-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayShort::AssignArray(const CArrayShort*)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayShort *src

=new CArrayShort;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

1820

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1821

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

short element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayShort::Update(int,short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,100))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1822

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Positions

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayShort::Shift(int,int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1823

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] Position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayShort::Delete(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1824

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of the lase element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayShort::DeleteRange(int,int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1825

Standard Library

At
Gets the element from the given position in the array.
short At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, SHORT_MAX-if there was an attempt to get an element
of not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, SHORT_MAX may be a valid value of an array element, so having a value, always check
the last error code.
Example:
//--- example for CArrayShort::At(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
short result=array.At(i);
if(result==SHORT_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- error of reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1826

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1827

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const short& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayShort::CompareArray(const short &[])
#include <Arrays\ArrayShort.mqh>
//--short src[];
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1828

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const CArrayShort* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayShort-source elements for comparison.
Return Value
true if arrays are equal, false - if not.

Example:
//--- example for CArrayShort::CompareArray(const CArrayShort*)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayShort *src=new CArrayShort;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1829

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
short element

// Element to insert

Parameters
element
[in] Value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayShort::InsertSort(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(100))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1830

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::Search(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1831

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchGreat(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1832

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchLess(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1833

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchGreatOrEqual(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1834

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchLessOrEqual(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1835

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchFirst(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1836

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayShort::SearchLast(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1837

Standard Library

SearchLinear
Searches for the element equal to the sample in the array.
int SearchLinear(
short element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayShort::SearchLinear(short)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear(100)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1838

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayShort::Save(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
int

file_handle;

CArrayShort *array=new CArrayShort;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(i);
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

1839

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1840

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayShort::Load(int)
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
int

file_handle;

CArrayShort *array=new CArrayShort;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %d",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1841

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1842

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayShort - 82).
Example:
//--- example for CArrayShort::Type()
#include <Arrays\ArrayShort.mqh>
//--void OnStart()
{
CArrayShort *array=new CArrayShort;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1843

Standard Library

CArrayInt
CArrayInt class is a class of dynamic array of variables of type int or uint.

Description
Class CArrayInt provides the ability to work with a dynamic array of variables of type int or uint.In the
class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayInt : public CArray

Title
#include <Arrays\ArrayInt.mqh>

Class Methods
Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods
Update

Changes the element at the specified position


array

2000-2014, MetaQuotes Software Corp.

1844

Standard Library

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

1845

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayInt::Reserve(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1846

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Number

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayInt::Resize(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1847

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayInt::Shutdown()
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1848

Standard Library

Add
Adds an element to the end of the array.
bool Add(
int element

// Element to add

Parameters
element
[in] value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayInt::Add(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1849

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const int& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayInt::AddArray(const int &[])
#include <Arrays\ArrayInt.mqh>
//--int src[];
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1850

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayInt* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayInt-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayInt::AddArray(const CArrayInt*)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayInt *src=new CArrayInt;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1851

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1852

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
int element,

// Element to insert

int pos

// Position

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayInt::Insert(int,int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1853

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
const int& src[],
int

pos

// Source array
// Position

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayInt::InsertArray(const int &[],int)
#include <Arrays\ArrayInt.mqh>
//--int src[];
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1854

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
CArrayInt* src,
int

pos

// Pointer to the source


// Position

Parameters
src
[in] Pointer to an instance of class CArrayInt-source elements to insert.
pos
[in] Position in the array to insert.
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayInt::InsertArray(const CArrayInt*,int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayInt *src=new CArrayInt;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1855

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1856

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const int& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayInt::AssignArray(const int &[])
#include <Arrays\ArrayInt.mqh>
//--int src[];
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1857

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayInt* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayInt-source element to copy.
Return Value
true if successful, false - if you can not copy the items.

Example:
//--- example for CArrayInt::AssignArray(const CArrayInt*)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayInt *src

=new CArrayInt;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}

2000-2014, MetaQuotes Software Corp.

1858

Standard Library
//--- arrays is identical
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1859

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int pos,

// Position

int element

// Value

Parameters
pos
[in] Position of the element in the array to change.
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayInt::Update(int,int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,10000))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1860

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayInt::Shift(int,int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1861

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] Position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayInt::Delete(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1862

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of the last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayInt::DeleteRange(int,int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1863

Standard Library

At
Gets the element from the given position in the array.
int At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, INT_MAX-if there was an attempt to get an element of
not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, INT_MAX could be a valid value of an array element, so having a value, always check the
last error code.
Example:
//--- example for CArrayInt::At(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
int result=array.At(i);
if(result==INT_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- error of reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1864

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1865

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const int& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayInt::CompareArray(const int &[])
#include <Arrays\ArrayInt.mqh>
//--int src[];
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1866

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const CArrayInt* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayInt-source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayInt::CompareArray(const CArrayInt*)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayInt *src=new CArrayInt;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1867

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
int element

// Element to insert

Parameters
element
[in] value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayInt::InsertSort(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(10000))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1868

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::Search(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1869

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::SearchGreat(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1870

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::SearchLess(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1871

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
int element

// Element to search

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::SearchGreatOrEqual(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1872

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::SearchLessOrEqual(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1873

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt:: SearchFirst(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1874

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayInt::SearchLast(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1875

Standard Library

SearchLinear
Searches for the element equal to the sample in the array.
int SearchLinear(
int element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayInt::SearchLinear(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear(10000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1876

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayInt::Save(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
int

file_handle;

CArrayInt *array=new CArrayInt;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(i);
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

1877

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1878

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayInt::Load(int)
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
int

file_handle;

CArrayInt *array=new CArrayInt;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %d",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1879

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1880

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayInt - 82).
Example:
//--- example for CArrayInt::Type()
#include <Arrays\ArrayInt.mqh>
//--void OnStart()
{
CArrayInt *array=new CArrayInt;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1881

Standard Library

CArrayLong
CArrayLong class is a class of dynamic array of variables of type long or ulong.

Description
Class CArrayLong provides the ability to work with a dynamic array of variables of type long or ulong.In
the class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayLong : public CArray

Title
#include <Arrays\ArrayLong.mqh>

Class Methods
Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods
Update

Changes the element at the specified position


array

2000-2014, MetaQuotes Software Corp.

1882

Standard Library

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

1883

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayLong::Reserve(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1884

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayLong::Resize(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1885

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayLong::Shutdown()
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1886

Standard Library

Add
Adds an element to the end of the array.
bool Add(
long element

// Element to add

Parameters
element
[in] Value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayLong::Add(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1887

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const long& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayLong::AddArray(const long &[])
#include <Arrays\ArrayLong.mqh>
//--long src[];
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1888

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayLong* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayLong-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayLong::AddArray(const CArrayLong*)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayLong *src=new CArrayLong;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1889

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1890

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
long element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayLong::Insert(long,int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1891

Standard Library

InsertArray
Inserts an array of elements from another array ukazannogy position.
bool InsertArray(
const long& src[],
int

pos

// Source array
// Position

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayLong::InsertArray(const long &[],int)
#include <Arrays\ArrayLong.mqh>
//--long src[];
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1892

Standard Library

InsertArray
Inserts an array of elements from another array ukazannogy position.
bool InsertArray(
CArrayLong* src,
int

pos

// Pointer to the source


// Position

Parameters
src
[in] Pointer to an instance of class CArrayLong-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayLong::InsertArray(const CArrayLong*,int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayLong *src=new CArrayLong;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1893

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1894

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const long& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayLong::AssignArray(const long &[])
#include <Arrays\ArrayLong.mqh>
//--long src[];
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1895

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayLong* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayLong-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayLong::AssignArray(const CArrayLong*)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayLong *src

=new CArrayLong;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

1896

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1897

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

long element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayLong::Update(int,long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,1000000))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1898

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayLong::Shift(int,int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1899

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] Position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayLong::Delete(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1900

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of the last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayLong::DeleteRange(int,int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1901

Standard Library

At
Gets the element from the given position in the array.
long At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, LONG_MAX if there was an attempt to get an element
of not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, LONG_MAX may be a valid value of an array element, so having a value, always check the
last error code.
Example:
//--- example for CArrayLong::At(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
long result=array.At(i);
if(result==LONG_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- Error reading from the array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1902

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1903

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const long& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayLong::CompareArray(const long &[])
#include <Arrays\ArrayLong.mqh>
//--long src[];
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1904

Standard Library

CompareArrayconst
Compares array with another array.
bool CompareArrayconst(
const CArrayLong* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayLong-source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayLong::CompareArray(const CArrayLong*)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayLong *src=new CArrayLong;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1905

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
long element

// Element to insert

Parameters
element
[in] Value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.

Example:
//--- example for CArrayLong::InsertSort(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(1000000))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1906

Standard Library

Search
Searches for an element equal to the model in sorted array.
int Search(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::Search(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1907

Standard Library

SearchGreat
Searches for an element of larger sample, in sorted array.
int SearchGreat(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchGreat(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1908

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchLess(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1909

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the model in sorted array.
int SearchGreatOrEqual(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchGreatOrEqual(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1910

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the model in sorted array.
int SearchLessOrEqual(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchLessOrEqual(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1911

Standard Library

SearchFirst
Finds the first element equal to the model in sorted array.
int SearchFirst(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchFirst(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1912

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayLong::SearchLast(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1913

Standard Library

SearchLinear
Searches for the element equal to the model in the array.
int SearchLinear(
long element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayLong::SearchLinear(long)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear(1000000)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1914

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true if successfully completed, false - if an error.
Example:
//--- example for CArrayLong::Save(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
int

file_handle;

CArrayLong *array=new CArrayLong;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(i);
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

1915

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1916

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true if successfully completed, false - if an error.
Example:
//--- example for CArrayLong::Load(int)
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
int

file_handle;

CArrayLong *array=new CArrayLong;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %I64",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1917

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1918

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayLong - 84).
Example:
//--- example for CArrayLong::Type()
#include <Arrays\ArrayLong.mqh>
//--void OnStart()
{
CArrayLong *array=new CArrayLong;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1919

Standard Library

CArrayFloat
CArrayFloat class is a class of dynamic array of variables of type float.

Description
Class CArrayFloat provides the ability to work with a dynamic array of variables of type float.In the
class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayFloat : public CArray

Title
#include <Arrays\ArrayFloat.mqh>

Class Methods
Attributes
Delta

Set the comparison tolerance

Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods

2000-2014, MetaQuotes Software Corp.

1920

Standard Library

Update

Changes the element at the specified position


array

Shift

Moves an item from a given position in the


array to the specified offset

Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

1921

Standard Library

Delta
Set tolerance comparison.
void Delta(
float delta

// Tolerance

Parameters
delta
[in] the new value of the admission of comparison.
Return Value
None
Note
Admission of comparison used in the search. Values are considered equal if their difference is less
than or equal to tolerance. The default tolerance is 0.0.
Example:
//--- example for CArrayFloat::Delta(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- set compare variation
array.Delta(0.001);
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1922

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayFloat::Reserve(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1923

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayFloat::Resize(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1924

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayFloat::Shutdown()
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1925

Standard Library

Add
Adds an element to the end of the array.
bool Add(
float element

// Element to add

Parameters
element
[in] Value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayFloat::Add(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1926

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const float& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayFloat::AddArray(const float &[])
#include <Arrays\ArrayFloat.mqh>
//--float src[];
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1927

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayFloat* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayFloat-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayFloat::AddArray(const CArrayFloat*)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayFloat *src=new CArrayFloat;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1928

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1929

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
float element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayFloat::Insert(float,int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1930

Standard Library

InsertArray
Inserts an array of elements from another array with the specified position.
bool InsertArray(
const float& src[],
int

pos

// Source array
// Position

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayFloat::InsertArray(const float &[],int)
#include <Arrays\ArrayFloat.mqh>
//--float src[];
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1931

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
CArrayFloat* src,
int

pos

// Pointer to the source


// Position

Parameters
src
[in] Pointer to an instance of class CArrayFloat-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayFloat::InsertArray(const CArrayFloat*,int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayFloat *src=new CArrayFloat;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1932

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1933

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const float& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayFloat::AssignArray(const float &[])
#include <Arrays\ArrayFloat.mqh>
//--float src[];
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1934

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayFloat* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayFloat-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayFloat::AssignArray(const CArrayFloat*)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayFloat *src

=new CArrayFloat;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

1935

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1936

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

float element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayFloat::Update(int,float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,100.0))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1937

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayFloat::Shift(int,int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1938

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] Position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayFloat::Delete(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1939

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayFloat::DeleteRange(int,int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1940

Standard Library

At
Gets the element from the given position in the array.
float At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, FLT_MAX if there was an attempt to get an element of
not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, FLT_MAX may be a valid value of an array element, so having a value, always check the
last error code.
Example:
//--- example for CArrayFloat::At(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
float result=array.At(i);
if(result==FLT_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- error reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1941

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1942

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const float& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayFloat::CompareArray(const float &[])
#include <Arrays\ArrayFloat.mqh>
//--float src[];
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1943

Standard Library

AssignArrayconst
Copies the array elements from another array.
bool AssignArrayconst(
const CArrayFloat* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayFloat-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayFloat::CompareArray(const CArrayFloat*)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayFloat *src=new CArrayFloat;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1944

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
float element

// Element to insert

Parameters
element
[in] Value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayFloat::InsertSort(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(100.0))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1945

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::Search(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1946

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::SearchGreat(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1947

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat:: SearchLess(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1948

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::SearchGreatOrEqual(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1949

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::SearchLessOrEqual(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1950

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::SearchFirst(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1951

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayFloat::SearchLast(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1952

Standard Library

SearchLinear
Searches for the element equal to the sample in the array.
int SearchLinear(
float element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayFloat::SearchLinear(float)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1953

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayFloat::Save(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
int

file_handle;

CArrayFloat *array=new CArrayFloat;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(i);
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

1954

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1955

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayFloat::Load(int)
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
int

file_handle;

CArrayFloat *array=new CArrayFloat;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %f",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1956

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

1957

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayFloat - 87).
Example:
//--- example for CArrayFloat::Type()
#include <Arrays\ArrayFloat.mqh>
//--void OnStart()
{
CArrayFloat *array=new CArrayFloat;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1958

Standard Library

CArrayDouble
CArrayDouble class is a class of dynamic array of variables of type double.

Description
Class CArrayDouble provides the ability to work with a dynamic array of variables of type double.In the
class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayDouble : public CArray

Title
#include <Arrays\ArrayDouble.mqh>

Class Methods
Attributes
Delta

Set the comparison tolerance

Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a full memory release

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods

2000-2014, MetaQuotes Software Corp.

1959

Standard Library

Update

Changes the element at the specified position


array

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Search for min/max


Minimum

Gets index of the lowest element of the array in


the specified range

Maximum

Gets index of the highest element of the array


in the specified range

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

2000-2014, MetaQuotes Software Corp.

1960

Standard Library

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

Derived classes:
CIndicatorBuffer

2000-2014, MetaQuotes Software Corp.

1961

Standard Library

Delta
Set tolerance comparison.
void Delta(
double delta

// Tolerance

Parameters
delta
[in] The new value of the admission of comparison.
Return Value
No
Note
Admission of comparison used in the search. Values are considered equal if their difference is less
than or equal to tolerance. The default tolerance is 0.0.
Example:
//--- example for CArrayDouble::Delta(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- set compare variation
array.Delta(0.001);
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1962

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayDouble::Reserve(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1963

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayDouble::Resize(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1964

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayDouble::Shutdown()
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1965

Standard Library

Add
Adds an element to the end of the array.
bool Add(
double element

// Element to add

Parameters
element
[in] value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayDouble::Add(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(i))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1966

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const double& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayDouble::AddArray(const double &[])
#include <Arrays\ArrayDouble.mqh>
//--double src[];
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1967

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayDouble* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayDouble-source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayDouble::AddArray(const CArrayDouble*)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayDouble *src=new CArrayDouble;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

1968

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1969

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
double element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayDouble::Insert(double,int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(i,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1970

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
const double& src[],

// Source array

int

// Position

pos

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayDouble::InsertArray(const double &[],int)
#include <Arrays\ArrayDouble.mqh>
//--double src[];
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1971

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
CArrayDouble* src,

// Pointer to the source

int

// Position

pos

Parameters
src
[in] Pointer to an instance of class CArrayDouble-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayDouble::InsertArray(const CArrayDouble*,int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayDouble *src=new CArrayDouble;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

1972

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1973

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const double& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayDouble::AssignArray(const double &[])
#include <Arrays\ArrayDouble.mqh>
//--double src[];
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1974

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayDouble* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayDouble-source element to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayDouble::AssignArray(const CArrayDouble*)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayDouble *src

=new CArrayDouble;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

1975

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1976

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

double element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value.
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayDouble::Update(int,double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,100.0))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1977

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayDouble::Shift(int,int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1978

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayDouble::Delete(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1979

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayDouble::DeleteRange(int,int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1980

Standard Library

At
Gets the element from the given position in the array.
double At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, DBL_MAX if there was an attempt to get an element of
not existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, DBL_MAX may be a valid value of an array element, so having a value, always check the
last error code.
Example:
//--- example for CArrayDouble::At(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
double result=array.At(i);
if(result==DBL_MAX && GetLastError()==ERR_OUT_OF_RANGE)
{
//---

Error reading from the array

printf("Get element error");


delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

1981

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1982

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const double& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayDouble::CompareArray(const double &[])
#include <Arrays\ArrayDouble.mqh>
//--double src[];
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1983

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const CArrayDouble* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayDouble-source elements for comparison.
Return Value
true if arrays are equal, false - if not.

Example:
//--- example for CArrayDouble::CompareArray(const CArrayDouble*)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayDouble *src=new CArrayDouble;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

1984

Standard Library

Minimum
Gets index of the lowest element of the array in the specified range.
int Minimum(
int start,

// starting index

int count

// number of elements to proceed

) const

Parameters
start
[in] Starting index of the array.
count
[in] Number of elements to proceed.
Returned value
Index of the lowest element of the array in the specified range.

2000-2014, MetaQuotes Software Corp.

1985

Standard Library

Maximum
Gets index of the highest element of the array in the specified range.
int Maximum(
int start,

// starting index

int count

// number of elements to proceed

) const

Parameters
start
[in] Starting index of the array.
count
[in] Number of elements to proceed.
Returned value
Index of the highest element of the array in the specified range.

2000-2014, MetaQuotes Software Corp.

1986

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
double element

// Element to insert

Parameters
element
[in] value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayDouble::InsertSort(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(100.0))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1987

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::Search(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1988

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::SearchGreat(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1989

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble:: SearchLess(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1990

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::SearchGreatOrEqual(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1991

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::SearchLessOrEqual(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1992

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::SearchFirst(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1993

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayDouble::SearchLast(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1994

Standard Library

SearchLinear
Searches for the element equal to the sample in the sorted array.
int SearchLinear(
double element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayDouble::SearchLinear(double)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear(100.0)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

1995

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayDouble::Save(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
int

file_handle;

CArrayDouble *array=new CArrayDouble;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(i);
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

1996

Standard Library
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1997

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayDouble::Load(int)
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
int

file_handle;

CArrayDouble *array=new CArrayDouble;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %f",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

1998

Standard Library
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

1999

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayDouble - 87).
Example:
//--- example for CArrayDouble::Type()
#include <Arrays\ArrayDouble.mqh>
//--void OnStart()
{
CArrayDouble *array=new CArrayDouble;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2000

Standard Library

CArrayString
CArrayString class is a class of dynamic array of variables of type string.

Description
Class CArrayString provides the ability to work with a dynamic array of variables of type string.In the
class implemented the ability to add / insert / delete elements in an array, sort array, searching in
sorted array.In addition, the implemented methods of work with the file.

Declaration
class CArrayString : public CArray

Title
#include <Arrays\ArrayString.mqh>

Class Methods
Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Sets a new (smaller) size of the array

Add methods
Add

Adds an element to the end of the array

AddArray

Adds to the end of the array elements from


another array

AddArray

Adds to the end of the array elements from


another array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

AssignArray

Copies the array elements from another array

Update methods
Update

Changes the element at the specified position


array

2000-2014, MetaQuotes Software Corp.

2001

Standard Library

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

CompareArray

Compares array with another array

Sorted array opetations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the sample in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the sample in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the sample in sorted array

SearchFirst

Finds the first element equal to the sample in


sorted array

SearchLast

Finds the last element equal to the sample in


sorted array

SearchLinear

Searches for the element equal to the sample in


the array

Input/output
virtual Save

Saves data array in the file

virtual Load

Loads data array from a file

virtual Type

Gets the type identifier of the array

2000-2014, MetaQuotes Software Corp.

2002

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayString::Reserve(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reserve memory
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2003

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
true if successful, false - if there was an attempt to set the size of less than or equal to zero.
Note
Changing the size of the array allows optimal use of memory.Superfluous elements on the right
lost.To reduce fragmentation of memory, change the size of the array is made with a step
previously given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayString::Resize(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2004

Standard Library

Shutdown
Clears the array with a full memory release.
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Example:
//--- example for CArrayString::Shutdown()
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2005

Standard Library

Add
Adds an element to the end of the array.
bool Add(
string element

// Element to add

Parameters
element
[in] value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Example:
//--- example for CArrayString::Add(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(IntegerToString(i)))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2006

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const string& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayString::AddArray(const string &[])
#include <Arrays\ArrayString.mqh>
//--string src[];
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2007

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayString* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayString - the source of elements to add.
Return Value
true if successful, false - if you can not add items.
Example:
//--- example for CArrayString::AddArray(const CArrayString*)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayString *src=new CArrayString;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array
delete src;

2000-2014, MetaQuotes Software Corp.

2008

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2009

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
string element,

// Element to insert

int

// Position

pos

Parameters
element
[in] Value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayString::Insert(string,int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(IntegerToString(i),0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2010

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
const string& src[],
int

// Source array

pos

// Position

Parameters
src[]
[in] Reference to an array of source elements to insert
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayString::InsertArray(const string &[],int)
#include <Arrays\ArrayString.mqh>
//--string src[];
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2011

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
CArrayString* src,
int

pos

// Pointer to the source


// Position

Parameters
src
[in] Pointer to an instance of class CArrayString - the source of elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Example:
//--- example for CArrayString::InsertArray(const CArrayString*,int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayString *src=new CArrayString;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- insert another array
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;

2000-2014, MetaQuotes Software Corp.

2012

Standard Library
return;
}
//--- delete source array
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2013

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const string& src[]

// Source array

Parameters
src[]
[in] Reference to an array of source elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayString::AssignArray(const string &[])
#include <Arrays\ArrayString.mqh>
//--string src[];
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2014

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayString* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayString - source of elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Example:
//--- example for CArrayString::AssignArray(const CArrayString*)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayString *src

=new CArrayString;

if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array

2000-2014, MetaQuotes Software Corp.

2015

Standard Library
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2016

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

string element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Example:
//--- example for CArrayString::Update(int, string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,"ABC"))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2017

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayString::Shift(int,int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2018

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Example:
//--- example for CArrayString::Delete(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete element
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2019

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Example:
//--- example for CArrayString::DeleteRange(int,int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2020

Standard Library

At
Gets the element from the given position in the array.
string At(
int pos

// Position

) const

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element in case of success, "- if there was an attempt to get an element of not
existing positions (the last error ERR_OUT_OF_RANGE).
Note
Of course, "" may be a valid value of an array element, so having a value, always check the last
error code.
Example:
//--- example for CArrayString::At(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
string result=array.At(i);
if(result=="" && GetLastError()==ERR_OUT_OF_RANGE)
{
//--- Error reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2021

Standard Library
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2022

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const string& src[]

// Source array

) const

Parameters
src[]
[in] Reference to an array of source elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayString::CompareArray(const string &[])
#include <Arrays\ArrayString.mqh>
//--string src[];
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- compare with another array
int result=array.CompareArray(src);
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2023

Standard Library

CompareArray
Compares array with another array.
bool CompareArrays(
const CArrayString* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayString - the source of elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayString::CompareArray(const CArrayString*)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayString *src=new CArrayString;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- add source arrays elements
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

2024

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
string element

// Element to insert

Parameters
element
[in] value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Example:
//--- example for CArrayString::InsertSort(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort("ABC"))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2025

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString::Search(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.Search("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2026

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString::SearchGreat(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreat("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2027

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString:: SearchLess(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLess("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2028

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString:: SearchGreatOrEqual(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchGreatOrEqual("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2029

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString:: SearchLessOrEqual(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLessOrEqual("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2030

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString:: SearchFirst(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchFirst("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2031

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayString:: SearchLast(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- search element
if(array.SearchLast("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2032

Standard Library

SearchLinear
Searches for the element equal to the sample in the array.
int SearchLinear(
string element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the element was not found.
Note
The method uses the linear search (or sequential search) algorithm for unsorted arrays.
Example:
//--- example for CArrayString::SearchLinear(string)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- search element
if(array.SearchLinear("ABC")!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2033

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayString::Save(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
int

file_handle;

CArrayString *array=new CArrayString;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
array.Add(IntegerToString(i));
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);

2000-2014, MetaQuotes Software Corp.

2034

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

2035

Standard Library

Load
Loads data array from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayString::Load(int)
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
int

file_handle;

CArrayString *array=new CArrayString;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrays elements
for(int i=0;i<array.Total();i++)
{
printf("Element[%d] = %s",i,array.At(i));

2000-2014, MetaQuotes Software Corp.

2036

Standard Library
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

2037

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayString - 89).
Example:
//--- example for CArrayString::Type()
#include <Arrays\ArrayString.mqh>
//--void OnStart()
{
CArrayString *array=new CArrayString;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2038

Standard Library

CArrayObj
CArrayObj class is a class of dynamic array of pointers to instances of CObject and his heirs.

Description
Class CArrayObj provides the ability to work with a dynamic array of pointers to instances of CObject
and his heirs. This gives the possibility to work as a multidimensional dynamic arrays of primitive data
types, and the more difficult for organized data structures.
In the class implemented the ability to add / insert / delete elements in an array, sort array, searching
in sorted array. In addition, the implemented methods of work with the file.
There are certain subtleties of the class CArrayObj.

Declaration
class CArrayObj : public CArray

Title
#include <Arrays\ArrayObj.mqh>

Class Method
Attributes
FreeMode

Gets the flag memory management

FreeMode

Sets the flag memory management

Memory control
Reserve

Allocates memory to increase the size of the


array

Resize

Sets a new (smaller) size of the array

Shutdown

Clears the array with a total exemption memory


array (not element).

Add methods
Add

Adds an element to the end of the array

AddArray

Adds an element to the end of the array

Insert

Inserts an element in the array to the specified


position

InsertArray

Inserts an array of elements from another array


with the specified position

AssignArray

Copies the array elements from another array

Update methods

2000-2014, MetaQuotes Software Corp.

2039

Standard Library

Update

Changes the element at the specified position


array

Shift

Moves an item from a given position in the


array to the specified offset

Delete methods
Detach

Gets the element from the specified position


and removing it from the array

Delete

Removes the element from the specified


position array

DeleteRange

Deletes a group of elements from the specified


position array

Clear

Removes all elements of the array without the


release of the memory array

Access methods
At

Gets the element from the specified position


array

Compare methods
CompareArray

Compares array with another array

Sorted array operations


InsertSort

Inserts element in a sorted array

Search

Searches for an element equal to the model in


sorted array

SearchGreat

Searches for an element of more samples in


sorted array

SearchLess

Searches for an element less than the sample in


the sorted array

SearchGreatOrEqual

Searches for an element greater than or equal


to the model in sorted array

SearchLessOrEqual

Searches for an element less than or equal to


the model in sorted array

SearchFirst

Finds the first element equal to the model in


sorted array

SearchLast

Finds the last element equal to the model in


sorted array

Input/output
Save

Saves data array in the file

Load

Loads data array from a file

2000-2014, MetaQuotes Software Corp.

2040

Standard Library

Type

Gets the type identifier of the array

Derived classes:
CIndicator
CIndicators
Practical application of arrays are descendants of class CObject (including all classes of the standard
library).
For example, consider the options for two-dimensional array:
#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
int i,j;
int first_size=10;
int second_size=100;
//--- create array
CArrayObj

*array=new CArrayObj;

CArrayDouble *sub_array;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create subarrays
for(i=0;i<first_size;i++)
{
sub_array=new CArrayDouble;
if(sub_array==NULL)
{
delete array;
printf("Object create error");
return;
}
//--- fill array
for(j=0;j<second_size;j++)
{
sub_array.Add(i*j);
}
array.Add(sub_array);
}
//--- create array OK
for(i=0;i<first_size;i++)
{

2000-2014, MetaQuotes Software Corp.

2041

Standard Library
sub_array=array.At(i);
for(j=0;j<second_size;j++)
{
double element=sub_array.At(j);
//--- use array element
}
}
delete array;
}

Subtleties
The class has a mechanism to control dynamic memory, so be careful when working with elements of
the array.
Mechanism of memory management can be switched on / off using the method FreeMode (bool). By
default, the mechanism is enabled.
Accordingly, there are two options for dealing with the class CArrayObj:
1. Mechanism of memory management is enabled. (default)
In this case, CArrayObj take responsibility for freeing the memory elements after their removal from
the array. In this program the user should not free the array elements.
Example:
int i;
//--- Create an array
CArrayObj *array=new CArrayObj;
//--- Fill array elements
for(i=0;i<10;i++) array.Add(new CObject);
//--- Do something
for(i=0;i<array.Total();i++)
{
CObject *object=array.At(i);
//--- Action with an element
. . .
}
//--- Remove the array with the elements
delete array;

2. Mechanism of memory management is turned off.


In this case, CArrayObj not otvetstvechaet for freeing the memory elements after their removal from
the array. In this program the user must free the array elements.
Example:
int i;
//--- Create an array

2000-2014, MetaQuotes Software Corp.

2042

Standard Library

CArrayObj *array=new CArrayObj;


//--- Disable the mechanism of memory management
array.FreeMode(false);
//--- Fill array elements
for(i=0;i<10;i++) array.Add(new CObject);
//--- Do something
for(i=0;i<array.Total();i++)
{
CObject *object=array.At(i);
//--- Action with an element
. . .
}
//--- Remove array elements
while(array.Total()) delete array.Detach();
//--- Remove empty array
delete array;

2000-2014, MetaQuotes Software Corp.

2043

Standard Library

FreeMode
Gets the flag memory management.
bool FreeMode() const

Return Value
Flag of memory management.
Example:
//--- example for CArrayObj::FreeMode()
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get free mode flag
bool array_free_mode=array.FreeMode();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2044

Standard Library

FreeMode
Sets the flag memory management.
void FreeMode(
bool mode

// New flag

Parameters
mode
[in] New value of the flag memory management.
Return Value
None.
Note
Setting the flag memory management - an important point in the use of class CArrayObj.Since the
array elements are pointers to dynamic objects, it is important to determine what to do with them
when removing from the array.
If the flag is set, removing an element from the array, the element is automatically deleted by the
operator delete.If the flag is not set, it is assumed that a pointer to the deleted object is still
somewhere in the user program and will be relieved of it (the program) then.
If the user resets the flag memory management, the user must understand their responsibility for
the removal of the array before the completion of the program, because otherwise, is not freed
memory occupied by the elements when they create new operator.
When large amounts of data, it could lead, eventually, even to break your terminal.If the user does
not reset the flag memory management, there is another "reef".
Using pointers, array, stored somewhere in the local variables, after removing the array will lead to
a critical error and crashes the program user.By default, the memory management flag is set, ie the
class of the array is responsible for freeing the memory elements.
Example:
//--- example for CArrayObj::FreeMode(bool)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- reset free mode flag
array.FreeMode(false);

2000-2014, MetaQuotes Software Corp.

2045

Standard Library
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2046

Standard Library

Reserve
Allocates memory to increase the size of the array.
bool Reserve(
int size

// Number

Parameters
size
[in] The number of additional elements of the array.
Return Value
true if successful, false - if there was an attempt to seek the amount is less than or equal to zero,
or if the array did not increase.
Note
To reduce memory fragmentation, increase the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayObj::Reserve(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
if(!array.Reserve(1024))
{
printf("Reserve error");
delete array;
return;
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2047

Standard Library

Resize
Sets a new (smaller) size of the array.
bool Resize(
int size

// Size

Parameters
size
[in] New size of the array.
Return Value
To reduce fragmentation of memory, change the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Note
Changing the size of array allows to use memory in the optimal way. Excess element located to the
right are lost. The memory for lost elements is released or not depending on the mode of memory
management.
To reduce fragmentation of memory, change the size of the array is made with a step previously
given through the method of Step (int), or 16 (default).
Example:
//--- example for CArrayObj::Resize(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- resize array
if(!array.Resize(10))
{
printf("Resize error");
delete array;
return;
}
//--- delete array
delete array;

2000-2014, MetaQuotes Software Corp.

2048

Standard Library
}

2000-2014, MetaQuotes Software Corp.

2049

Standard Library

Clear
Removes all elements of the array without the release of the memory array.
void Clear()

Return Value
No.
Note
If enabled memory management, memory, deleted items are exempt.
Example:
//--- example for CArrayObj::Clear()
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- clear array
array.Clear();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2050

Standard Library

Shutdown
Clears the array with a total exemption memory array (not element).
bool Shutdown()

Return Value
true if successful, false - if an error occurred.
Note
If enabled memory management, memory, deleted items are exempt.
Example:
//--- example for CArrayObj::Shutdown()
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shutdown array
if(!array.Shutdown())
{
printf("Shutdown error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2051

Standard Library

CreateElement
Creates a new array element at the specified position.
bool CreateElement(
int index

// Position

Parameters
index
[in] position in which you want to create a new element.
Return Value
true if successful, false - if you can not create element.
Note
Method CreateElement (int) in class CArrayObj always returns false and does not perform any action.
If necessary, in a derived class, method CreateElement (int) should be implemented.
Example:
//--- example for CArrayObj::CreateElement(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
int

size=100;

CArrayObj *array=new CArrayObj;


//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- fill array
array.Reserve(size);
for(int i=0;i<size;i++)
{
if(!array.CreateElement(i))
{
printf("Element create error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;

2000-2014, MetaQuotes Software Corp.

2052

Standard Library
}

2000-2014, MetaQuotes Software Corp.

2053

Standard Library

Add
Adds an element to the end of the array.
bool Add(
CObject* element

// Element to add

Parameters
element
[in] value of the element to add to the array.
Return Value
true if successful, false - if you can not add an element.
Note
Element is not added to the array if the value for transmit invalid pointer (such as NULL).
Example:
//--- example for CArrayObj::Add(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add 100 arrays elements
for(int i=0;i<100;i++)
{
if(!array.Add(new CObject))
{
printf("Element addition error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2054

Standard Library

AddArray
Adds to the end of the array elements from another array.
bool AddArray(
const CArrayObj * src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayDouble - source of elements to add.
Return Value
true if successful, false - if you can not add items.
Note
Adding elements of the array in the array is actually copying the pointers.Therefore, when calling the
method, there is a "reef" - that there may be a pointer to a dynamic object in more than one
variable.
//--- example
extern bool

make_error;

extern int

error;

extern CArrayObj *src;


//--- Create a new instance CArrayObj
//--- Default memory management is turned on
CArrayObj *array=new CArrayObj;
//--- Add (copy) the elements of the array-istochika
if(array!=NULL)
bool result=array.AddArray(src);
if(make_error)
{
//--- Commit wrongdoing
switch(error)
{
case 0:
//--- Remove the array-source, without checking its flag memory management
delete src;
//--- Result:
//--- May appeal
//--- For "bitomu" pointer in the array receiver
break;
case 1:
//--- Disable the mechanism of memory management in an array of source
if(src.FreeMode()) src.FreeMode(false);
//--- But do not remove the array-source
//--- Result:
//--- After removal of the array, the receiver may appeal

2000-2014, MetaQuotes Software Corp.

2055

Standard Library
//--- For "bitomu" pointer in the array-source
break;
case 2:
//--- Disable the mechanism of memory management in an array of source
src.FreeMode(false);
//--- Disable the mechanism of memory management in an array receiver
array.FreeMode(false);
//--- Result:
//--- After the completion of the program, obtain a "memory leak"
break;
}
}
else
{
//--- Disable the mechanism of memory management in an array of source
if(src.FreeMode()) src.FreeMode(false);
//--- Remove the array-source
delete src;
//--- Result:
//--- Treatment for an array-recepient be correct
//--- Delete the array, the receiver will delete its elements
}

Example:
//--- example for CArrayObj::AddArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayObj *src=new CArrayObj;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- reset free mode flag
src.FreeMode(false);
//--- fill source array

2000-2014, MetaQuotes Software Corp.

2056

Standard Library
//--- . . .
//--- add another array
if(!array.AddArray(src))
{
printf("Array addition error");
delete src;
delete array;
return;
}
//--- delete source array without elements
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2057

Standard Library

Insert
Inserts an element in the array to the specified position.
bool Insert(
CObject* element,

// Element to insert

int

// Position

pos

Parameters
element
[in] value of the element to be inserted into an array
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not insert the element.
Note
Element is not added to the array if the value for transmit invalid pointer (such as NULL).
Example:
//--- example for CArrayObj::Insert(CObject*,int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- insert elements
for(int i=0;i<100;i++)
{
if(!array.Insert(new CObject,0))
{
printf("Insert error");
delete array;
return;
}
}
//--- use array
//--- . . .
//--- delete array

2000-2014, MetaQuotes Software Corp.

2058

Standard Library
delete array;
}

2000-2014, MetaQuotes Software Corp.

2059

Standard Library

InsertArray
Inserts an array of elements from another array specified position.
bool InsertArray(
const CArrayObj* src,

// Pointer to the source

int

// Position

pos

Parameters
src
[in] Pointer to an instance of class CArrayObj-source elements to insert.
pos
[in] Position in the array to insert
Return Value
true if successful, false - if you can not paste items.
Note
See: CArrayObj::AddArray(const CArrayObj*).
Example:
//--- example for CArrayObj::InsertArray(const CArrayObj*,int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayObj *src=new CArrayObj;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- reset free mode flag
src.FreeMode(false);
//--- fill source array
//--- . . .
//--- insert another array

2000-2014, MetaQuotes Software Corp.

2060

Standard Library
if(!array.InsertArray(src,0))
{
printf("Array inserting error");
delete src;
delete array;
return;
}
//--- delete source array without elements
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2061

Standard Library

AssignArray
Copies the array elements from another array.
bool AssignArray(
const CArrayObj* src

// Pointer to the source

Parameters
src
[in] Pointer to an instance of class CArrayObj - source of elements to copy.
Return Value
true if successful, false - if you can not copy the items.
Note
If the challenge AssignArray array receiver is not empty, all its elements will be removed from the
array and, if the flag memory management, memory, deleted items will be released.Array-receiver
is an exact copy of the array source. Additionally see CArrayObj::AddArray(const CArrayObj*).
Example:
//--- example for CArrayObj::AssignArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayObj *src=new CArrayObj;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- reset free mode flag
src.FreeMode(false);
//--- fill source array
//--- . . .
//--- assign another array
if(!array.AssignArray(src))
{

2000-2014, MetaQuotes Software Corp.

2062

Standard Library
printf("Array assigned error");
delete src;
delete array;
return;
}
//--- arrays is identical
//--- delete source array without elements
delete src;
//--- use array
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2063

Standard Library

Update
Changes the element at the specified position array.
bool Update(
int

pos,

CObject* element

// Position
// Value

Parameters
pos
[in] Position of the element in the array to change
element
[in] New value element
Return Value
true if successful, false - if you can not change the element.
Note
The element does not change if we as a parameter to pass an invalid pointer (ie NULL). If enabled
memory management, memory placeholder released.
Example:
//--- example for CArrayObj::Update(int,CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- update element
if(!array.Update(0,new CObject))
{
printf("Update error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2064

Standard Library

Shift
Moves an item from a given position in the array to the specified offset.
bool Shift(
int pos,

// Position

int shift

// Shift

Parameters
pos
[in] Position of the moved element array
shift
[in] The value of displacement (both positive and negative).
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CArrayObj::Shift(int,int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- shift element
if(!array.Shift(10,-5))
{
printf("Shift error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2065

Standard Library

Detach
Remove an item from a given position in the array.
CObject* Detach(
int pos

// Position

Parameters
pos
[in] Position of the seized item in the array.
Return Value
Pointer to the removal of elements in case of success, NULL - if you can not remove the element.
Note
When removed from the array element is not removed in any state of the flag memory
management. Pointer to the array element withdrawn from the ingredients of the release after use.
Example:
//--- example for CArrayObj::Detach(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
CObject *object=array.Detach(0);
if(object==NULL)
{
printf("Detach error");
delete array;
return;
}
//--- use element
//--- . . .
//--- delete element
delete object;
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2066

Standard Library

Delete
Removes the element from the given position in the array.
bool Delete(
int pos

// Position

Parameters
pos
[in] position removes the element in the array.
Return Value
true if successful, false - if you can not remove the element.
Note
If enabled memory management, memory, deleted items are exempt.
Example:
//--- example for CArrayObj::Delete(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
if(!array.Delete(0))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2067

Standard Library

DeleteRange
Deletes a group of elements from a given position in the array.
bool DeleteRange(
int from,

// Position of the first element

int to

// Position of last element

Parameters
from
[in] Position of the first removes the element in the array.
to
[in] Position of the last deleted element in the array.
Return Value
true if successful, false - if you can not remove elements.
Note
If enabled memory management, memory, deleted items are exempt.
Example:
//--- example for CArrayObj::DeleteRange(int,int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- delete elements
if(!array.DeleteRange(0,10))
{
printf("Delete error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2068

Standard Library

At
Gets the element from the given position in the array.
CObject* At(
int pos

// Position

Parameters
pos
[in] Position of the desired element in the array.
Return Value
The value of the element, if successful, NULL-if there was an attempt to get an element of nonexistent position.
Example:
//--- example for CArrayObj::At(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add elements
//--- . . .
for(int i=0;i<array.Total();i++)
{
CObject *result=array.At(i);
if(result==NULL)
{
//--- Error reading from array
printf("Get element error");
delete array;
return;
}
//--- use element
//--- . . .
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

2069

Standard Library

CompareArray
Compares array with another array.
bool CompareArray(
const CArrayObj* src

// Pointer to the source

) const

Parameters
src
[in] Pointer to an instance of class CArrayObj - the source of elements for comparison.
Return Value
true if arrays are equal, false - if not.
Example:
//--- example for CArrayObj::CompareArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- create source array
CArrayObj *src=new CArrayObj;
if(src==NULL)
{
printf("Object create error");
delete array;
return;
}
//--- fill source array
//--- . . .
//--- compare with another array
int result=array.CompareArray(src);
//--- delete arrays
delete src;
delete array;
}

2000-2014, MetaQuotes Software Corp.

2070

Standard Library

InsertSort
Inserts element in a sorted array.
bool InsertSort(
CObject* element

// Element to insert

Parameters
element
[in] Value of the element to be inserted into a sorted array
Return Value
true if successful, false - if you can not insert the element.
Note
Element is not added to the array if the value for transmit invalid pointer (such as NULL).
Example:
//--- example for CArrayObj::InsertSort(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- insert element
if(!array.InsertSort(new CObject))
{
printf("Insert error");
delete array;
return;
}
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2071

Standard Library

Search
Searches for an element equal to the sample in the sorted array.
int Search(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj::Search(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.Search(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2072

Standard Library

SearchGreat
Searches for an element of more samples in sorted array.
int SearchGreat(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj::SearchGreat(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchGreat(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2073

Standard Library

SearchLess
Searches for an element less than the sample in the sorted array.
int SearchLess(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj:: SearchLess(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchLess(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2074

Standard Library

SearchGreatOrEqual
Searches for an element greater than or equal to the sample in the sorted array.
int SearchGreatOrEqual(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj::SearchGreatOrEqual(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchGreatOrEqual(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2075

Standard Library

SearchLessOrEqual
Searches for an element less than or equal to the sample in the sorted array.
int SearchLessOrEqual(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj:: SearchLessOrEqual(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchLessOrEqual(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2076

Standard Library

SearchFirst
Finds the first element equal to the sample in the sorted array.
int SearchFirst(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj::SearchFirst(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchFirst(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2077

Standard Library

SearchLast
Finds the last element equal to the model in sorted array.
int SearchLast(
CObject* element

// Sample

) const

Parameters
element
[in] The sample element to search in the array.
Return Value
The position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CArrayObj:: SearchLast(CObject*)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- sort array
array.Sort();
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete array;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(array.SearchLast(sample)!=-1) printf("Element found");
else

printf("Element not found");

//--- delete array


delete array;
}

2000-2014, MetaQuotes Software Corp.

2078

Standard Library

Save
Saves data array in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to previously opened by FileOpen (...) function binary file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CArrayObj::Save(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
int

file_handle;

CArrayObj *array=new CArrayObj;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- add arrays elements
//--- . . .
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
delete array;
}

2000-2014, MetaQuotes Software Corp.

2079

Standard Library

Load
Loads data array from a file.s
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle to open earlier, with the function FileOpen (...), binary file.
Return Value
true - if successfully completed, false - if an error.
Note
When reading from the file array to create each element of the method is
CArrayObj::CreateElement(int).
Example:
//--- example for CArrayObj::Load(int)
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
int

file_handle;

CArrayObj *array=new CArrayObj;


//--if(array!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!array.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete array;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}

2000-2014, MetaQuotes Software Corp.

called

2080

Standard Library
//--- use arrays elements
//--- . . .
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2081

Standard Library

Type
Gets the type identifier of the array.
virtual int Type() const

Return Value
ID type of the array (for CArrayObj - 7778).
Example:
//--- example for CArrayObj::Type()
#include <Arrays\ArrayObj.mqh>
//--void OnStart()
{
CArrayObj *array=new CArrayObj;
//--if(array==NULL)
{
printf("Object create error");
return;
}
//--- get array type
int type=array.Type();
//--- delete array
delete array;
}

2000-2014, MetaQuotes Software Corp.

2082

Standard Library

CList
CList Class is a class of dynamic list of instances of the class CObject and his heirs.

Description
Class CList provides the ability to work with a list of instances of CObject and his heirs. In the class
implemented the ability to add / insert / delete items in the list, sort the list, search in sorted list. In
addition, the implemented methods of work with the file.
There are some subtleties of working with the class CList. The class has a mechanism to control
dynamic memory, so be careful when working with elements of the list.
Subtleties of the mechanism of memory management similar to those described in CArrayObj.

Declaration
class CList : public CObject

Title
#include <Arrays\List.mqh>

Class Methods
Attributes
FreeMode

Gets the flag memory management when


deleting list items.

FreeMode

Sets the flag memory management when


deleting items in the list

Total

Gets the number of elements in the list

IsSorted

Gets flag sorted list

SortMode

Gets the version of the sorting

Create methods
CreateElement

Creates a new item to the list

Add methods
Add

Adds element to the end of the list

Insert

Inserts element in the list in the specified


position

Delete methods
DetachCurrent

Remove an item from the current position of


the list without deleting it "physically"

DeleteCurrent

Removes the element from the current position


in the list

2000-2014, MetaQuotes Software Corp.

2083

Standard Library

Delete

Removes the element from the specified


position in the list

Clear

Removes all list items

Navigation
IndexOf

Gets the index of the list item

GetNodeAtIndex

Gets an item with the specified index of the list

GetFirstNode

Gets the first element of the list

GetPrevNode

Gets the previous element list

GetCurrentNode

Gets the current list item

GetNextNode

Gets the next item in the list

GetLastNode

Gets the last item

Ordering methods
Sort

Sort list

MoveToIndex

Moves the current item list to the specified


position

Exchange

Changes elements of the list seats

Compare methods
CompareList

Compares the list with another list

Search methods
Search

Searches for an element equal to the model in


sorted list

Input/output
virtual Save

Saves data in the file list

virtual Load

Loads data from file list

virtual Type

Gets the type identifier list

2000-2014, MetaQuotes Software Corp.

2084

Standard Library

FreeMode
Gets the flag memory management when deleting list items.
bool FreeMode() const

Return Value
Flag of memory management.
Example:
//--- example for CList::FreeMode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- get free mode flag
bool list_free_mode=list.FreeMode();
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2085

Standard Library

FreeMode
Sets the flag memory management when deleting list items.
void FreeMode(
bool mode

// New value

Parameters
mode
[in] New value of the flag memory management.
Note
Setting the flag memory management - an important point in the use of class CList.Since the
elements of the list are pointers to dynamic objects, it is important to determine what to do with
them when you delete from the list.If the flag is set, then when you delete an item from the list, the
item is automatically deleted by the operator delete.If the flag is not set, it is assumed that a
pointer to the deleted object is still somewhere in the user program and will be relieved of it (the
program) then.
If the user resets the flag memory management, the user must understand their responsibility for
the removal of items in the list before completing the program, because otherwise, is not freed
memory occupied by the elements when they create new operator.When large amounts of data, it
could lead, eventually, even to break your terminal.
If the user does not reset the flag memory management, there is another "reef".Using pointers-list
items that are stored somewhere in the local variables, after removing the list, will lead to a critical
error and crashes the program user.By default, the memory management flag is set, ie the class list,
is responsible for freeing the memory elements.
Example:
//--- example for CList::FreeMode(bool)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- reset free mode flag
list.FreeMode(false);
//--- use list
//--- . . .
//--- delete list
delete list;

2000-2014, MetaQuotes Software Corp.

2086

Standard Library
}

2000-2014, MetaQuotes Software Corp.

2087

Standard Library

Total
Gets the number of elements in the list.
int Total() const

Return Value
Number of elements in the list.
Example:
//--- example for CList::Total()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- check total
int total=list.Total();
//--- use list
//--- ...
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2088

Standard Library

IsSorted
Gets the flag sorted list.
bool IsSorted(
int mode=0

// Sorting mode

) const

Parameters
mode=0
[in] Tested version sorting
Return Value
Flag of the sorted list. If the list is sorted by the specified option? true, otherwise? false.
Note
Flag of the sorted list can not be changed directly. Flag set by Sort (int) and resets any methods to
add / insert.
Example:
//--- example for CList::IsSorted()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- check sorted
if(list.IsSorted(0))
{
//--- use methods for sorted list
//--- ...
}
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2089

Standard Library

SortMode
Gets the version of the sort.
int SortMode() const

Return Value
Option sorting, or -1 if the list is not sorted.
Example:
//--- example for CList::SortMode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- check sort mode
int sort_mode=list.SortMode();
//--- use list
//--- ...
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2090

Standard Library

CreateElement
Creates a new item to the list.
CObject* CreateElement()

Return Value
Pointer to the newly created element, if successful, NULL - if you can not create element.
Note
Method CreateElement () in class CList always returns NULL and does not perform any actions. If
necessary, in a derived class, method CreateElement () should be implemented.
Example:
//--- example for CList::CreateElement(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
int

size=100;

CList *list=new CList;


//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- fill list
for(int i=0;i<size;i++)
{
CObject *object=list.CreateElement();
if(object==NULL)
{
printf("Element create error");
delete list;
return;
}
list.Add(object);
}
//--- use list
//--- . . .
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2091

Standard Library

Add
Adds an element to the end of the list.
int Add(
CObject* element

// Element to add

Parameters
element
[in] Value of the element to add to the list.
Return Value
If successful, it returns the index of added element, or -1 in the case of error.
Note
Element is not added to the list, if the parameter does not pass valid pointer (ie NULL).
Example:
//--- example for CList::Add(Cobject*)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add 100 elements
for(int i=0;i<100;i++)
{
if(list.Add(new CObject)==-1)
{
printf("Element addition error");
delete list;
return;
}
}
//--- use list
//--- . . .
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2092

Standard Library

Insert
Inserts element in the list in the specified position.
int Insert(
CObject* element,

// Element to insert

int

// Position

pos

Parameters
element
[in] value of the element to insert in the list
pos
[in] Position in the list to insert
Return Value
If successful, it returns the index of inserted element, or -1 in the case of error.
Note
Element is not added to the list, if the parameter does not pass valid pointer (ie NULL).
Example:
//--- example for CList::Insert(CObject*,int)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- insert 100 elements
for(int i=0;i<100;i++)
{
if(list.Insert(new CObject,0)==-1)
{
printf("Element insert error");
delete list;
return;
}
}
//--- use list
//--- . . .
//--- delete list

2000-2014, MetaQuotes Software Corp.

2093

Standard Library
delete list;
}

2000-2014, MetaQuotes Software Corp.

2094

Standard Library

DetachCurrent
Extracts an element from the current position without its "physical" deleteion.
CObject* DetachCurrent()

Return Value
Pointer to the removal of elements in case of success, NULL - if you can not remove the element.
Note
When removed from the list, the item is not removed in any state of the flag memory management.
Pointer to withdraw from the list of ingredients of the release element after use.
Example:
//--- example for CList::DetachCurrent()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.DetachCurrent();
if(object==NULL)
{
printf("Detach error");
delete list;
return;
}
//--- use element
//--- . . .
//--- delete element
delete object;
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2095

Standard Library

DeleteCurrent
Removes the element from the current position in the list.
bool DeleteCurrent()

Return Value
true if successful, false - if you can not remove the element.
Note
If enabled memory management, memory, removes the element is released.
Example:
//--- example for CList::DeleteCurrent()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
if(!list.DeleteCurrent())
{
printf("Delete error");
delete list;
return;
}
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2096

Standard Library

Delete
Removes the element from the given position in the list.
bool Delete(
int pos

// Position

Parameters
pos
[in] position removes the element in the list.
Return Value
true if successful, false - if you can not remove the element.
Note
If enabled memory management, memory, removes the element is released.
Example:
//--- example for CList::Delete(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
if(!list.Delete(0))
{
printf("Delete error");
delete list;
return;
}
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2097

Standard Library

Clear
Removes all elements of the list.
void Clear()

Note
If enabled memory management, memory, deleted items are exempt.
Example:
//--- example for CList::Clear()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
//--- clear list
list.Clear();
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2098

Standard Library

IndexOf
Gets the index of the list item.
int IndexOf(
CObject* element

// Pointer to the element

Parameters
element
[in] Pointer to the list item.
Return Value
Index item in the list, or -1.
Example:
//--- example for CList::IndexOf(CObject*)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
CObject *object=new CObject;
if(object==NULL)
{
printf("Element create error");
delete list;
return;
}
if(list.Add(object))
{
int pos=list.IndexOf(object);
}
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2099

Standard Library

GetNodeAtIndex
Gets an item with the specified index of the list.
CObject* GetNodeAtIndex(
int pos

// position

Parameters
pos
[in] item index in the list.
Returned value
Pointer to the item in case of success, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetNodeAtIndex(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetNodeAtIndex(10);
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2100

Standard Library

GetFirstNode
Gets the first element of the list.
CObject* GetFirstNode()

Return Value
Pointer to the first item in case of success, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetFirstNode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetFirstNode();
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2101

Standard Library

GetPrevNode
Gets the previous element of the list.
CObject* GetPrevNode()

Return Value
Pointer to the previous element, if successful, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetPrevNode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetPrevNode();
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2102

Standard Library

GetCurrentNode
Gets the current list item.
CObject* GetCurrentNode()

Return Value
Pointer to the current item, if successful, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetCurrentNode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetCurrentNode();
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2103

Standard Library

GetNextNode
Gets the next item in the list.
CObject* GetNextNode()

Return Value
Pointer to the next item if successful, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetNextNode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetNextNode();
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2104

Standard Library

GetLastNode
Gets the last element of the list.
CObject* GetLastNode()

Return Value
Pointer to the last element in the case of success, NULL - if you can not get a pointer.
Example:
//--- example for CList::GetLastNode()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add list elements
//--- . . .
CObject *object=list.GetLastNode();
if(object==NULL)
{
printf("Get node error");
delete list;
return;
}
//--- use element
//--- . . .
//--- do not delete element
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2105

Standard Library

Sort
Sorts a list.
void Sort(
int mode

// Sorting mode

Parameters
mode
[in] Sorting mode.
Return Value
No.
Note
Sorting the list is always in ascending order.
Example:
//--- example for CList::Sort(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- sorting by mode 0
list.Sort(0);
//--- use list
//--- ...
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2106

Standard Library

MoveToIndex
Moves the current item list to the specified position.
bool MoveToIndex(
int pos

// Position

Parameters
pos
[in] Position in the list to move.
Return Value
true if successful, false - if you can not move the item.
Example:
//--- example for CList::MoveToIndex(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- move current node to begin
list.MoveToIndex(0);
//--- use list
//--- . . .
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2107

Standard Library

Exchange
Changes elements of the list seats.
bool Exchange(
CObject* node1,

// List item

CObject* node2

// List item

Parameters
node1
[in] List item
node2
[in] List item
Return Value
true if successful, false - if you can not change the elements in some places.
Example:
//--- example for CList::Exchange(CObject*,CObject*)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- exchange
list.Exchange(list.GetFirstNode(),list.GetLastNode());
//--- use list
//--- . . .
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2108

Standard Library

CompareList
Compares the list with another list.
bool CompareList(
CList* list

// With whom we compare

Parameters
list
[in] A pointer to an instance of class CList-source elements for comparison.
Return Value
true if the lists are equal, false - if not.
Example:
//--- example for CList::CompareList(const CList*)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- create source list
CList *src=new CList;
if(src==NULL)
{
printf("Object create error");
delete list;
return;
}
//--- fill source list
//--- . . .
//--- compare with another list
bool result=list.CompareList(src);
//--- delete lists
delete src;
delete list;
}

2000-2014, MetaQuotes Software Corp.

2109

Standard Library

Search
Searches for an element equal to the model in the sorted list.
CObject* Search(
CObject* element

// Sample

Parameters
element
[in] Sample cell to search for in the list.
Return Value
Pointer to the found item if successful, NULL - if the item was not found.
Example:
//--- example for CList::Search(CObject*)
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- add lists elements
//--- . . .
//--- sort list
list.Sort(0);
//--- create sample
CObject *sample=new CObject;
if(sample==NULL)
{
printf("Sample create error");
delete list;
return;
}
//--- set sample attributes
//--- . . .
//--- search element
if(list.Search(sample)!=NULL) printf("Element found");
else

printf("Element not found");

//--- delete list


delete list;
}

2000-2014, MetaQuotes Software Corp.

2110

Standard Library

Save
Saves data in the file list.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the previously opened using the function FileOpen (...) file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CList::Save(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
int

file_handle;

CList *list=new CList;


//--if(list!=NULL)
{
printf("Object create error");
return;
}
//--- add lists elements
//--- . . .
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!list.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
delete list;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- delete list
delete list;

2000-2014, MetaQuotes Software Corp.

2111

Standard Library
}

2000-2014, MetaQuotes Software Corp.

2112

Standard Library

Load
Loads list data from a file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] Handle of the previously open, with the function FileOpen (...), binary
Return Value
true - if successfully completed, false - if an error.
Note
When reading from the file list items to create each element of the method is called CList::
CreateElement ().
Example:
//--- example for CLoad::Load(int)
#include <Arrays\List.mqh>
//--void OnStart()
{
int

file_handle;

CList *list=new CList;


//--if(list!=NULL)
{
printf("Object create error");
return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!list.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
delete list;
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}

2000-2014, MetaQuotes Software Corp.

2113

Standard Library
//--- use list elements
//--- . . .
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2114

Standard Library

Type
Gets the type identifier list.
virtual int Type()

Return Value
Type identifier list (for CList - 7779).
Example:
//--- example for CList::Type()
#include <Arrays\List.mqh>
//--void OnStart()
{
CList *list=new CList;
//--if(list==NULL)
{
printf("Object create error");
return;
}
//--- get list type
int type=list.Type();
//--- delete list
delete list;
}

2000-2014, MetaQuotes Software Corp.

2115

Standard Library

CTreeNode
Class CTreeNode is a class of node of the binary tree CTree.

Description
Class CTreeNode provides the ability to work with nodes of the binary tree CTree. Options of
navigation through the tree is implemented in the class. Besides that methods of work with a file are
implemented.

Declaration
class CTreeNode : public CObject

Title
#include <Arrays\TreeNode.mqh>

Class Methods
Attributes
Owner

Gets/sets the pointer of the owner node

Left

Gets/sets the pointer of the left node

Right

Gets/sets the pointer of the right node

Balance

Gets the node balance

BalanceL

Gets the balance of the left sub-branch of the


node

BalanceR

Gets the balance of the right sub-branch of the


node

Creation of a new element


CreateSample

Creates a new node instance

Comparison
RefreshBalance

Recalculates the node balance

Search
GetNext

Gets the pointer of the next node

Input/Output
SaveNode

Saves the node data to a file

LoadNode

Downloads the node data from a file

virtual Type

Gets the identifier of the node type

Derived classes:

2000-2014, MetaQuotes Software Corp.

2116

Standard Library
CTree
Trees of CTreeNode class descendants get practical application.
A descendant of class CTreeNode must have predefined methods: CreateSample that creates a new
instance of the descendant class of CTreeNode, Compare that compares values of key fields of the
descendant class of CTreeNode, Type (if it's necessary to identify a node), SaveNode and LoadNode (if
it's necessary to work with a file).
Let's consider and example of a CTree descendant class.
//+------------------------------------------------------------------+
//|

MyTreeNode.mq5 |

//|

Copyright 2010, MetaQuotes Software Corp. |

//|

http://www.metaquotes.net/ |

//+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

//--#include <Arrays\TreeNode.mqh>
//+------------------------------------------------------------------+
//| Describe classderived from CTreeNode.

//+------------------------------------------------------------------+
//| Class CMyTreeNode.

//| Purpose: Class of element of a binary tree.

//|

Descendant of class CTreeNode.

//+------------------------------------------------------------------+
class CMyTreeNode : public CTreeNode
{
protected:
//--- user's data
long

m_long;

// key field of type long

double

m_double;

// custom variable of type double

string

m_string;

// custom variable of type string

datetime

m_datetime;

// custom variable of type datetime

public:
CMyTreeNode();
//--- methods of accessing these user's data
long

GetLong(void)

{ return(m_long); }

void

SetLong(long value)

{ m_long=value;

double

GetDouble(void)

{ return(m_double); }

void

SetDouble(double value)

{ m_double=value;

string

GetString(void)

{ return(m_string); }

void

SetString(string value)

{ m_string=value;

datetime

GetDateTime(void)

{ return(m_datetime); }

void

SetDateTime(datetime value)

{ m_datetime=value;

//--- methods of working with files


virtual bool

Save(int file_handle);

virtual bool

Load(int file_handle);

2000-2014, MetaQuotes Software Corp.

}
}
}

2117

Standard Library
protected:
virtual int

Compare(const CObject *node,int mode);

//--- methods of creating class instances


virtual CTreeNode* CreateSample();
};
//+------------------------------------------------------------------+
//| CMyTreeNode class constructor.

//| INPUT:

none.

//| OUTPUT: none.

//| REMARK: none.

//+------------------------------------------------------------------+
void CMyTreeNode::CMyTreeNode()
{
//--- initialization of user's data
m_long

=0;

m_double

=0.0;

m_string

="";

m_datetime

=0;

}
//+------------------------------------------------------------------+
//| Comparison with another three node by the specified algorithm.

//| INPUT:

node - array element to compare,

//|

mode - identifier of comparison algorithm.

//| OUTPUT: result of comparison (>0,0,<0).

//| REMARK: none.

//+------------------------------------------------------------------+
int CMyTreeNode::Compare(const CObject *node,int mode)
{
//--- parameter mode is ignored, because tree construction algorithm is the only one
int res=0;
//--- explicit type casting
CMyTreeNode *n=node;
res=(int)(m_long-n.m_long);
//--return(res);
}
//+------------------------------------------------------------------+
//| Creation of a new class instance.

//| INPUT:

none.

//| OUTPUT: pointer to a new instance of class CMyTreeNode.

//| REMARK: none.

//+------------------------------------------------------------------+
CTreeNode* CMyTreeNode::CreateSample()
{
CMyTreeNode *result=new CMyTreeNode;
//--return(result);
}
//+------------------------------------------------------------------+

2000-2014, MetaQuotes Software Corp.

2118

Standard Library
//| Write tree node data to a file.

//| INPUT:

file_handle -handle of a file pre-opened for writing.

//| OUTPUT: true if OK, otherwise false.

//| REMARK: none.

//+------------------------------------------------------------------+
bool CMyTreeNode::Save(int file_handle)
{
uint i=0,len;
//--- checks
if(file_handle<0) return(false);
//--- writing user data
//--- writing custom variable of type long
if(FileWriteLong(file_handle,m_long)!=sizeof(long))

return(false);

//--- writing custom variable of type double


if(FileWriteDouble(file_handle,m_double)!=sizeof(double))

return(false);

//--- writing custom variable of type string


len=StringLen(m_string);
//--- write string length
if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE)

return(false);

//--- write the string


if(len!=0 && FileWriteString(file_handle,m_string,len)!=len) return(false);
//--- writing custom variable of type datetime
if(FileWriteLong(file_handle,m_datetime)!=sizeof(long))

return(false);

//--return(true);
}
//+------------------------------------------------------------------+
//| Read tree node data from a file.

//| INPUT:

file_handle -handle of a file pre-opened for reading.

//| OUTPUT: true if OK, otherwise false.

//| REMARK: none.

//+------------------------------------------------------------------+
bool CMyTreeNode::Load(int file_handle)
{
uint i=0,len;
//--- checks
if(file_handle<0) return(false);
//--- reading
if(FileIsEnding(file_handle)) return(false);
//--- reading custom variable of type char
//--- reading custom variable of type long
m_long=FileReadLong(file_handle);
//--- reading custom variable of type double
m_double=FileReadDouble(file_handle);
//--- reading custom variable of type string
//--- read the string length
len=FileReadInteger(file_handle,INT_VALUE);
//--- read the string
if(len!=0) m_string=FileReadString(file_handle,len);

2000-2014, MetaQuotes Software Corp.

2119

Standard Library
else

m_string="";

//--- reading custom variable of type datetime


m_datetime=FileReadLong(file_handle);
//--return(true);
}

2000-2014, MetaQuotes Software Corp.

2120

Standard Library

Owner
Gets the pointer of the owner node.
CTreeNode* Owner()

Return Value
Pointer of the node-owner.

Owner
Sets the pointer of the owner node.
void Owner(
CTreeNode* node

// node

Parameters
node
[in] New value of the pointer of the owner node.
Return Value
None.

2000-2014, MetaQuotes Software Corp.

2121

Standard Library

Left
Gets the pointer of the left node.
CTreeNode* Left()

Return Value
Pointer of the left node.

Left
Sets the pointer of the left node.
void Left(
CTreeNode* node

// node

Parameters
node
[in] New value of the pointer of the left node.
Return Value
None.

2000-2014, MetaQuotes Software Corp.

2122

Standard Library

Right
Gets the pointer of the right node.
CTreeNode* Right()

Return Value
The pointer of the right node.

Right
Sets the pointer of the right node.
void Right(
CTreeNode* node

// node

Parameters
node
[in] New value of the pointer of the right node.
Return Value
None.

2000-2014, MetaQuotes Software Corp.

2123

Standard Library

Balance
Gets the node balance.
int Balance() const

Return Value
Node balance.

2000-2014, MetaQuotes Software Corp.

2124

Standard Library

BalanceL
Gets the balance of the left sub-branch of the node.
int BalanceL() const

Return Value
Balance of the left sub-branch of the node.

2000-2014, MetaQuotes Software Corp.

2125

Standard Library

BalanceR
Gets the balance of the right sub-branch of the node.
int BalanceR() const

Return Value
Balance of the right sub-branch of the node.

2000-2014, MetaQuotes Software Corp.

2126

Standard Library

CreateSample
Creates a new node sample.
virtual CTreeNode* CreateSample()

Return Value
Pointer to the new node sample or NULL.

2000-2014, MetaQuotes Software Corp.

2127

Standard Library

RefreshBalance
Recalculates the node balance.
int RefreshBalance()

Return Value
Node balance.

2000-2014, MetaQuotes Software Corp.

2128

Standard Library

GetNext
Gets the pointer of the next node.
CTreeNode* GetNext(
CTreeNode* node

// node

Parameters
node
[in] Node of the search start.
Return Value
Pointer of the next node.

2000-2014, MetaQuotes Software Corp.

2129

Standard Library

SaveNode
Writes node data to a file.
bool SaveNode(
int file_handle

// handle

Parameters
file_handle
[in] Handle of a binary file that was earlier opened for writing.
Return Value
true in case of success, otherwise false.

2000-2014, MetaQuotes Software Corp.

2130

Standard Library

LoadNode
Reads node data from a file.
bool LoadNode(
int

file_handle,

CTreeNode* main

// handle
// node

Parameters
file_handle
[in] Handle of a binary file that was earlier opened for reading.
main
[in] Node for data.
Return Value
true in case of success, otherwise false.

2000-2014, MetaQuotes Software Corp.

2131

Standard Library

Type
Gets the identifier of the node type.
virtual int Type() const

Return Value
Identifier of the node type.

2000-2014, MetaQuotes Software Corp.

2132

Standard Library

CTree
Class CTree is a class of the binary tree of samples of class CTreeNode and its descendants.

Description
Class CTree privides the possibility to work with a binary tree of CTreeNode class samples and its
descendants. Options of adding/inserting/deleting of three elements and search in a tree are
implemented in the class. Besides that, methods of work with a file are implemented.
Note that mechanism of dynamic memory management is not implemented in class CTree (as distinct
from classes CList and CArrayObj). All tree nodes are deleted with memory release.

Declaration
class CTree : public CTreeNode

Title
#include <Arrays\Tree.mqh>

Class Methods
Attributes
Root

Gets a root node of the tree

Creation of a new element


CreateElement

Creates a new node instance

Filling
Insert

Adds a node to a tree

Deletion
Detach

Detaches a specified node from a tree

Delete

Deletes a specified node from a tree

Clear

Deletes all nodes of a tree

Search
Find

Searches for a node in a tree by sample

Input/output
virtual Save

Saves all the tree data to a file

virtual Load

Downloads tree data from a file

virtual Type

Gets identifier of the tree type

Trees of CTreeNode class descendants descendants of class CTree get practical application.

2000-2014, MetaQuotes Software Corp.

2133

Standard Library
Descendant of class CTree must have a predefined method CreateElement that creates a new sample
of descendant class CTreeNode.
Let's consider an example of descendant class CTree.
//+------------------------------------------------------------------+
//|

MyTree.mq5 |

//|

Copyright 2010, MetaQuotes Software Corp. |

//|

http://www.metaquotes.net/ |

//+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link

"http://www.mql5.com"

//--#include <Arrays\Tree.mqh>
#include "MyTreeNode.mqh"
//--input int extCountedNodes = 100;
//+------------------------------------------------------------------+
//| Describe class CMyTree derived from CTree.

//+------------------------------------------------------------------+
//| Class CMyTree.

//| Purpose: Construction and navigation of a binary search tree.

//+------------------------------------------------------------------+
class CMyTree : public CTree
{
public:
//--- methods of search on the tree by custom data
CMyTreeNode*

FindByLong(long find_long);

//--- method of creation of the tree element


virtual CTreeNode *CreateElement();
};
//--CMyTree MyTree;
//+------------------------------------------------------------------+
//| Creation of a new tree node.

//| INPUT:

none.

//| OUTPUT: pointer to the new tree node of OK, or NULL.

//| REMARK: none.

//+------------------------------------------------------------------+
CTreeNode *CMyTree::CreateElement()
{
CMyTreeNode *node=new CMyTreeNode;
//--return(node);
}
//+------------------------------------------------------------------+
//| Search of element in a list by value m_long.

//| INPUT:

find_long - searched value.

//| OUTPUT: pointer of a found list element, or NULL.

2000-2014, MetaQuotes Software Corp.

2134

Standard Library
//| REMARK: none.

//+------------------------------------------------------------------+
CMyTreeNode* CMyTree::FindByLong(long find_long)
{
CMyTreeNode *res=NULL;
CMyTreeNode *node;
//--- create a tree node to pass the search parameter
node=new CMyTreeNode;
if(node==NULL) return(NULL);
node.SetLong(find_long);
//--res=Find(node);
delete node;
//--return(res);
}
//+------------------------------------------------------------------+
//| script "testing of class CMyTree"

//+------------------------------------------------------------------+
//---

array for string initialization

string str_array[11]={"p","oo","iii","uuuu","yyyyy","ttttt","rrrr","eee","ww","q","999"};
//--int OnStart() export
{
int

i;

uint

pos;

int

beg_time,end_time;

CMyTreeNode *node; //--- temporary pointer to the sample of class CMyTreeNode


//--printf("Start test %s.",__FILE__);
//--- Fill out MyTree with samples of class MyTreeNode in the amount of extCountedNodes.
beg_time=GetTickCount();
for(i=0;i<extCountedNodes;i++)
{
node=MyTree.CreateElement();
if(node==NULL)
{
//--- emergency exit
printf("%s (%4d): create error",__FILE__,__LINE__);
return(__LINE__);
}
NodeSetData(node,i);
node.SetLong(i);
MyTree.Insert(node);
}
end_time=GetTickCount();
printf("Filling time of MyTree is %d ms.",end_time-beg_time);
//--- Create a temporary tree TmpMyTree.
CMyTree TmpMyTree;

2000-2014, MetaQuotes Software Corp.

2135

Standard Library
//--- Detach 50% of tree elements (all even)
//--- and add them to the temporary tree TmpMyTree.
beg_time=GetTickCount();
for(i=0;i<extCountedNodes;i+=2)
{
node=MyTree.FindByLong(i);
if(node!=NULL)
if(MyTree.Detach(node)) TmpMyTree.Insert(node);
}
end_time=GetTickCount();

printf("Deletion time of %d elements from MyTree is %d ms.",extCountedNodes/2,end_time-beg_time)


//--- Return the detached
node=TmpMyTree.Root();
while(node!=NULL)
{
if(TmpMyTree.Detach(node)) MyTree.Insert(node);
node=TmpMyTree.Root();
}
//--- Check work of method Save(int file_handle);
int file_handle;
file_handle=FileOpen("MyTree.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!MyTree.Save(file_handle))
{
//--- error writing to a file
//--- emergency exit
printf("%s: Error %d in %d!",__FILE__,GetLastError(),__LINE__);
//--- close file before leaving!!!
FileClose(file_handle);
return(__LINE__);
}
FileClose(file_handle);
}
//--- Check work of method Load(int file_handle);
file_handle=FileOpen("MyTree.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!TmpMyTree.Load(file_handle))
{
//--- error reading from file
//--- emergency exit
printf("%s: Error %d in %d!",__FILE__,GetLastError(),__LINE__);
//--- close file before leaving!!!
FileClose(file_handle);
return(__LINE__);
}
FileClose(file_handle);
}

2000-2014, MetaQuotes Software Corp.

2136

Standard Library
//--MyTree.Clear();
TmpMyTree.Clear();
//--printf("End test %s. OK!",__FILE__);
//--return(0);
}
//+------------------------------------------------------------------+
//| Function of output of node contents to journal

//+------------------------------------------------------------------+
void NodeToLog(CMyTreeNode *node)
{
printf("

%I64d,%f,'%s','%s'",
node.GetLong(),node.GetDouble(),
node.GetString(),TimeToString(node.GetDateTime()));

}
//+------------------------------------------------------------------+
//| Function of "filling" of node with random values

//+------------------------------------------------------------------+
void NodeSetData(CMyTreeNode *node,int mode)
{
if(mode%2==0)
{
node.SetLong(mode*MathRand());
node.SetDouble(MathPow(2.02,mode)*MathRand());
}
else
{
node.SetLong(mode*(long)(-1)*MathRand());
node.SetDouble(-MathPow(2.02,mode)*MathRand());
}
node.SetString(str_array[mode%10]);
node.SetDateTime(10000*mode);
}

2000-2014, MetaQuotes Software Corp.

2137

Standard Library

Root
Gets the root node of the tree.
CTreeNode* Root() const

Return Value
Pointer of the root node of the tree.

2000-2014, MetaQuotes Software Corp.

2138

Standard Library

CreateElement
Creates a new instance of the node.
virtual CTreeNode* CreateElement()

Return Value
Pointer of the new instance of the node or NULL.

2000-2014, MetaQuotes Software Corp.

2139

Standard Library

Insert
Adds a node to a tree.
CTreeNode* Insert(
CTreeNode* new_node

// node

Parameters
new_node
[in] pointer of a node to insert to a tree.
Return Value
Pointer of the owner node or NULL.

2000-2014, MetaQuotes Software Corp.

2140

Standard Library

Detach
Detaches a specified node from a tree.
bool Detach(
CTreeNode* node

// node

Parameters
node
[in] Node pointer to detach.
Return Value
true in case of success, otherwise false.
Note
After detachment the node pointer is not released. The tree is balanced.

2000-2014, MetaQuotes Software Corp.

2141

Standard Library

Delete
Deletes a specified node from a tree.
bool Delete(
CTreeNode* node

// node

Parameters
node
[in] Node pointer to delete.
Return Value
true in case of success, otherwise false.
Note
After deletion a node pointer is released. The tree is balanced.

2000-2014, MetaQuotes Software Corp.

2142

Standard Library

Clear
Deletes all nodes of a tree.
void Clear()

Return Value
None.
Note
After deletion node pointers are released.

2000-2014, MetaQuotes Software Corp.

2143

Standard Library

Find
Searches for a node in a tree by sample.
CTreeNode* Find(
CTreeNode* node

// node

Parameters
node
[in] Node that contains data-search sample.
Return Value
Pointer of the found node or NULL.

2000-2014, MetaQuotes Software Corp.

2144

Standard Library

Save
Writes tree data to a file.
virtual bool Save(
int file_handle

// handle

Parameters
file_handle
[in] Handle of a binary file that was earlier opened for writing.
Return Value
true in case of success, otherwise false.

2000-2014, MetaQuotes Software Corp.

2145

Standard Library

Load
Reads tree data to a file.
virtual bool Load(
int file_handle

// handle

Parameters
file_handle
[in] Handle of a binary file that was earlier opened for reading.
Return Value
true in case of success, otherwise false.

2000-2014, MetaQuotes Software Corp.

2146

Standard Library

Type
Gets identifier of the tree type.
virtual int Type() const

Return Value
Identifier of the tree type.

2000-2014, MetaQuotes Software Corp.

2147

Standard Library

Graphic Objects
This section contains the technical details of working with classes of graphical objects and a
description of the relevant components of the MQL5 Standard Library .
The use of classes of graphical objects, will save time when creating custom programs (scripts,
expert).
MQL5 Standard Library (in terms of graphical objects) is placed in the working directory of the
terminal in the Include\ChartObjects folder.
Class/Group

Description

Base class for graphical object CChartObject

Base class of a graphic object

Lines

Group classes "Lines"

Channels

Group classes "Channels"

Gann Tools

Group classes "Gann"

Fibonacci Tools

Group classes "Fibonacci"

Elliott Tools

Group classes "Elliott"

Shapes

Group classes "Shapes"

Arrows

Group classes "Arrows"

Controls

Group classes "Controls"

2000-2014, MetaQuotes Software Corp.

2148

Standard Library

CChartObject
CChartObject is a base class of graphic objects of chart type of the Standard MQL5 library.

Description
Class CChartObject provides the simplified access for all of its descendants to MQL5 API functions.

Declaration
class CChartObject : public CObject

Title
#include <ChartObjects\ChartObject.mqh>

Class Methods
Attributes
ChartId

Gets the ID chart, who owns a graphic

Window

Gets the number of windows in which the chart


is a graphic

Name

Gets/sets the name of a graphic object

NumPoints

Gets the number of anchor points

Assign
Attach

Binds a graphic chart

SetPoint

Sets the anchor point

Delete
Delete

Deletes a graphic chart

Detach

Untie a graphic chart

Shift
ShiftObject

The relative movement of the object

ShiftPoint

The relative movement of the object point

Object properties
Time

Gets/sets the time coordinates of the object


point

Price

Gets/sets the price coordinate of a point object

Color

Gets/sets the color of the object

Style

Gets/sets the line style object

Width

Gets/sets the width of the line object

2000-2014, MetaQuotes Software Corp.

2149

Standard Library

BackGround

Gets/sets the flag drawing object background

Selected

Gets/sets the flag sit on an object

Selectable

Gets/sets the flag selectable object

Description

Gets/sets the text of the object

Tooltip

Gets/sets the tooltip of the object

Timeframes

Gets/sets the mask of flags visibility of the


object

Z_Order

Gets/sets the priority of clicking on a chart

CreateTime

Gets the time object creation

Levels properties of the object


LevelsCount

Gets/sets the number of levels of object

LevelColor

Gets/sets the color of the line level

LevelStyle

Gets/sets the line style level

LevelWidth

Gets/sets the width of the line level

LevelValue

Gets/sets the level

LevelDescription

Gets/sets the text level

Access to MQL5 API functions


GetInteger

Gets the value of the object properties

SetInteger

Sets the object properties

GetDouble

Gets the value of the object properties

SetDouble

Sets the object properties

GetString

Gets the value of the object properties

SetString

Sets the object properties

Input/Output
virtual Save

Virtual method entry in the file

virtual Load

Virtual method of reading from a file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectArrow
CChartObjectBitmap
CChartObjectBmpLabel
CChartObjectCycles
CChartObjectElliottWave3
CChartObjectEllipse
2000-2014, MetaQuotes Software Corp.

2150

Standard Library
CChartObjectFiboArc
CChartObjectFiboFan
CChartObjectFiboTimes
CChartObjectHLine
CChartObjectRectangle
CChartObjectSubChart
CChartObjectText
CChartObjectTrend
CChartObjectTriangle
CChartObjectVLine

2000-2014, MetaQuotes Software Corp.

2151

Standard Library

ChartId
Gets the ID chart, who owns a graphic object.
long ChartId() const

Return Value
Id chart on which the graphic object. If object not found, it returns -1.
Example:
//--- example for CChartObject::ChartId
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get chart idintifier of chart object
long chart_id=object.ChartId();
}

2000-2014, MetaQuotes Software Corp.

2152

Standard Library

Window
Gets the number of windows in which the chart is a graphic object.
int Window() const

Return Value
Number of windows in which the chart is a graphic object (0 - main window). If object not found, it
returns -1.
Example:
//--- example for CChartObject::Window
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get window of chart object
int window=object.Window();
}

2000-2014, MetaQuotes Software Corp.

2153

Standard Library

Name (Get Method)


Gets the name of the graphic object.
string Name() const

Return Value
Name of the graphic object tied to an instance of the class. If object not found, returns NULL.

Name (Set Method)


Sets the name of the graphic object.
bool Name(
string name

// new name

Parameters
name
[in] The new name of the graphic object.
Return Value
true if successful, false - if you can not change the name.
Example:
//--- example for CChartObject::Name
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get name of chart object
string object_name=object.Name();
if(object_name!="MyChartObject")
{
//--- set name of chart object
object.Name("MyChartObject");
}
}

2000-2014, MetaQuotes Software Corp.

2154

Standard Library

NumPoints
Gets the number of anchor points of a graphic object.
int NumPoints() const

Return Value
Number of points linking a graphic object that is bound to an instance of the class. If not bound
object, it returns 0.
Example:
//--- example for CChartObject::NumPoints
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get points count of chart object
int points=object.NumPoints();
}

2000-2014, MetaQuotes Software Corp.

2155

Standard Library

Attach
Binds a graphical object to an instance of the class.
bool Attach(
long

chart_id,

// Chart ID

string name,

// Name of the object

int

window,

// Chart window

int

points

// Number of points

Parameters
chart_id
[out] Chart identifier.
name
[in] Name of the graphic object.
window
[in] Chart window number (0 main window).
points
[in] Number of points anchor graphic object.
Return Value
true - if successful, false - if you can not bind object.
Example:
//--- example for CChartObject::Attach
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- attach chart object
if(!object.Attach(ChartID(),"MyObject",0,2))
{
printf("Object attach error");
return;
}
}

2000-2014, MetaQuotes Software Corp.

2156

Standard Library

SetPoint
Sets the new coordinates of this anchor point graphic object.
bool SetPoint(
int

point,

// Point number

datetime new_time,

// Time coordinate

double

// Price coordinate

new_price

Parameters
point
[in] Number anchor point graphic object.
new_time
[in] The new value of the coordinates of this point of time bindings.
new_price
[in] New value coordinates of the price specified anchor point.
Return Value
true - if successful, false - if you can not change the coordinates of the point.
Example:
//--- example for CChartObject::SetPoint
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
double

price;

//--if(object.NumPoints()>0)
{
//--- set point of chart object
object.SetPoint(0,CurrTime(),price);
}
}

2000-2014, MetaQuotes Software Corp.

2157

Standard Library

Delete
Removes a graphical object with the attached chart.
bool Delete()

Return Value
true - if successful, false - if you can not remove the object.
Example:
//--- example for CChartObject::Delete
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- detach chart object
if(!object.Delete())
{
printf("Object delete error");
return;
}
}

2000-2014, MetaQuotes Software Corp.

2158

Standard Library

Detach
Untie graphic object.
bool Detach()

Return Value
true - if successful, false - if you can not decouple the object.
Example:
//--- example for CChartObject::Detach
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- detach chart object
if(!object.Detach())
{
printf("Object detach error");
return;
}
}

2000-2014, MetaQuotes Software Corp.

2159

Standard Library

ShiftObject
Moves a graphic object.
bool ShiftObject(
datetime d_time,

// Increment of time coordinate

double

// Increment of price coordinate

d_price

Parameters
d_time
[in] Increment the coordinates of all points of time bindings
d_price
[in] Increment the coordinates of the prices of all waypoints.
Return Value
true - if successful, false - if you can not move the object.
Example:
//--- example for CChartObject::ShiftObject
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
datetime

d_time;

double

d_price;

//--- shift chart object


object.ShiftObject(d_time,d_price);
}

2000-2014, MetaQuotes Software Corp.

2160

Standard Library

ShiftPoint
Moves a specified point anchor graphic.
bool ShiftPoint(
int

point,

// Point number

datetime d_time,

// Increment of time coordinate

double

// Increment of price coordinate

d_price

Parameters
point
[in] Number anchor point graphic object.
d_time
[in] Increment the coordinates of time specified anchor point.
d_price
[in] Increment the coordinates of the price specified anchor point.
Return Value
true - if successful, false - if you can not move the point.
Example:
//--- example for CChartObject::ShiftPoint
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
datetime

d_time;

double

d_price;

//--if(object.NumPoints()>0)
{
//--- shift point of chart object
object.ShiftPoint(0,d_time,d_price);
}
}

2000-2014, MetaQuotes Software Corp.

2161

Standard Library

Time (Get Method)


The coordinates of time specified anchor point graphic object.
datetime Time(
int point

// Point number

) const

Parameters
point
[in] Number anchor point graphic object.
Return Value
Coordinates of time specified anchor point graphic object that is bound to an instance of the class.
If not bound object or the object is not this point, it returns 0.

Time (Set Method)


Sets the coordinate of time specified anchor point graphic object.
bool Time(
int

point,

datetime new_time

// Point number
// Time

Parameters
point
[in] Number anchor point graphic object.
new_time
[in] The new value of the coordinates of this point of time anchor graphic object.
Return Value
true - if successful, false - if you can not change the coordinate of time.
Example:
//--- example for CChartObject::Time
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.NumPoints();i++)
{
//--- get time of point chart object
datetime point_time=object.Time(i);
if(point_time==0)

2000-2014, MetaQuotes Software Corp.

2162

Standard Library
{
//--- set time of point chart object
object.Time(i,TimeCurrent());
}
}
}

2000-2014, MetaQuotes Software Corp.

2163

Standard Library

Price (Get Method)


Gets the coordinate of the price specified anchor point graphic object.
double Price(
int point

// Point number

) const

Parameters
point
[in] Number anchor point graphic object.
Return Value
Coordinate prices specified anchor point graphic object that is bound to an instance of the class. If
not bound object or the object is not this point, it returns EMPTY_VALUE.

Price (Set Method)


Sets the coordinate of the price specified anchor point graphic object.
bool Price(
int

point,

double new_price

// Point number
// Price

Parameters
point
[in] Number anchor point graphic object.
new_price
[in] News value coordinates of the price specified anchor point graphic object.
Return Value
true - if successful, false - if you can not change the coordinate prices.
Example:
//--- example for CChartObject::Price
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
double

price;

//--for(int i=0;i<object.NumPoints();i++)
{
//--- get price of point chart object
double point_price=object.Price(i);

2000-2014, MetaQuotes Software Corp.

2164

Standard Library
if(point_price!=price)
{
//--- set price of point chart object
object.Price(i,price);
}
}
}

2000-2014, MetaQuotes Software Corp.

2165

Standard Library

Color (Get Method)


Gets the line color of the graphic object.
color Color() const

Return Value
Color line of graphic object, assigned to the class instance. If there is no object assigned, it returns
CLR_NONE.

Color (Set Method)


Sets the color of the line for the graphic object.
bool Color(
color new_color

// New color

Parameters
new_color
[in] New value line color graphic object.
Return Value
true - if successful, false - if you can not change the color.
Example:
//--- example for CChartObject::Color
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get color of chart object
color object_color=object.Color();
if(object_color!=clrRed)
{
//--- set color of chart object
object.Color(clrRed);
}
}

2000-2014, MetaQuotes Software Corp.

2166

Standard Library

Style (Get Method)


Gets the line style graphic.
ENUM_LINE_STYLE Style() const

Return Value
Style line of the graphic object, assigned to the class instance. If there is no object assigned, it
returns WRONG_VALUE.

Style (Set Method)


Sets the line style graphic.
bool Style(
ENUM_LINE_STYLE new_style

// Style

Parameters
new_style
[in] New value-style line drawing object.
Return Value
true - if successful, false - if you can not change the style.
Example:
//--- example for CChartObject::Style
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get style of chart object
ENUM_LINE_STYLE style=object.Style();
if(style!=STYLE_SOLID)
{
//--- set style of chart object
object.Style(STYLE_SOLID);
}
}

2000-2014, MetaQuotes Software Corp.

2167

Standard Library

Width (Get Method)


Gets the thickness of the line graphic object.
int Width() const

Return Value
The thickness of the line graphic object that is bound to an instance of the class. If not bound
object, it returns -1.

Width (Set Method)


Sets the thickness of the line graphic object.
bool Width(
int new_width

// Thickness

Parameters
new_width
[in] The new value of the thickness of the line graphic object.
Return Value
true - if successful, false - if you can not change the thickness.
Example:
//--- example for CChartObject::Width
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get width of chart object
int width=object.Width();
if(width!=1)
{
//--- set width of chart object
object.Width(1);
}
}

2000-2014, MetaQuotes Software Corp.

2168

Standard Library

Background (Get Method)


Gets the flag drawing a graphic object in the background.
bool Background() const

Return Value
Flag of drawing in the background, a graphic object that is bound to an instance of the class. If not
bound object returns false.

Background (Set Method)


Sets the flag drawing a graphic object in the background.
bool Background(
bool background

// Value of the flag

Parameters
background
[in] New value of the flag drawing a graphic object in the background.
Return Value
true - if successful, false - if you can not change the flag.
Example:
//--- example for CChartObject::Background
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get background flag of chart object
bool background_flag=object.Background();
if(!background_flag)
{
//--- set background flag of chart object
object.Background(true);
}
}

2000-2014, MetaQuotes Software Corp.

2169

Standard Library

Selected (Get Method)


Gets the "selected" flag of a graphic object. In other words - is a graphic object selected or not.
bool Selected() const

Return Value
The "selected" flag of a graphic object that is bound to an instance of the class. If there is no bound
object, returns false.

Selected (Set Method)


Sets the "selected" flag of a graphic object.
bool Selected(
bool selected

// Value of the flag

Parameters
selected
[in] New value of the "selected" flag of a graphic object.
Return Value
true - if successful, false - if you can not change the flag.
Example:
//--- example for CChartObject::Selected
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get the "selected" flag of chart object
bool selected_flag=object.Selected();
if(selected_flag)
{
//--- set the "selected" flag of chart object
object.Selected(false);
}
}

2000-2014, MetaQuotes Software Corp.

2170

Standard Library

Selectable (Get Method)


Gets the "selectable" flag of a graphic object. In other words - can you select a graphic object or not.
bool Selectable() const

Return Value
The "selectable" flag of a graphic object that is bound to an instance of the class. If there is no
bound object, returns false.

Selectable (Set Method)


Sets the "selectable" flag of a graphic object.
bool Selectable(
bool selectable

// Value of the flag

Parameters
selectable
[in] New value of the "selectable" flag of a graphic object.
Return Value
true - if successful, false - if you can not change the flag.
Example:
//--- example for CChartObject::Selectable
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get the "selectable" flag of chart object
bool selectable_flag=object.Selectable();
if(selectable_flag)
{
//--- set the "selectable" flag of chart object
object.Selectable(false);
}
}

2000-2014, MetaQuotes Software Corp.

2171

Standard Library

Description (Get Method)


Gets a description (text) graphic object.
string Description() const

Return Value
Description (text) graphic object that is bound to an instance of the class. If no bound object, it
returns NULL.

Description (Set Method)


Sets the description (text) graphic object.
bool Description(
string text

// Text

Parameters
text
[in] New value descriptions (text) graphic object.
Return Value
true - if successful, false - if you can not change the description (text).
Example:
//--- example for CChartObject::Description
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get description of chart object
string description=object.Description();
if(description=="")
{
//--- set description of chart object
object.Description("MyObject");
}
}

2000-2014, MetaQuotes Software Corp.

2172

Standard Library

Tooltip (Get Method)


Gets the text of the tooltip of graphic object.
string Tooltip() const

Returned value
The text of a tooltip. If the object is not assigned, it returns NULL.

Tooltip (Set Method)


Sets the text of a tooltip.
bool Tooltip(
string new_tooltip

// new text of a tooltip

Parameters
new_tooltip
[in] New value of a tooltip
Returned value
true if successful, false if tooltip change has failed.
Note:
If the property is not set, then the tooltip generated automatically by the terminal is shown. A
tooltip can be disabled by setting the "\n" (line feed) value.

2000-2014, MetaQuotes Software Corp.

2173

Standard Library

Timeframes (Get Method)


Gets the visibility flag graphic object.
int Timeframes() const

Return Value
Flags visibility graphic object that is bound to an instance of the class. If not bound object, it
returns 0.

Timeframes (Set Method)


Sets the visibility flag graphic.
bool Timeframes(
int new_timeframes

// Visibility flags

Parameters
new_timeframes
[in] New flags visibility graphic object.
Return Value
true - if successful, false - if you can not change the flags of visibility.
Example:
//--- example for CChartObject::Timeframes
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get timeframes of chart object
int timeframes=object.Timeframes();
if(!(timeframes&OBJ_PERIOD_H1))
{
//--- set timeframes of chart object
object.Timeframes(timeframes|OBJ_PERIOD_H1);
}
}

2000-2014, MetaQuotes Software Corp.

2174

Standard Library

Z_Order (Get Method)


Gets the value of priority of graphical object of clicking on a chart (CHARTEVENT_CLICK).
long Z_Order() const

Return Value
Priority of a graphic object, assigned to the class instance. If there is no object assigned, it returns
0.

Z_Order (Set Method)


Sets priority of graphical object of clicking on a chart (CHARTEVENT_CLICK).
bool Z_Order(
long value

// new priority

Parameters
value
[in] New value of priority of a graphical object of clicking on a chart (CHARTEVENT_CLICK).
Return Value
true - if successful, false - if you can not change the priority.
Note
Z_Order is a priority of a graphical object for receiving events of clicking on a chart
(CHARTEVENT_CLICK). By setting the value, greater than 0(default value) you can increase the object
priority.

2000-2014, MetaQuotes Software Corp.

2175

Standard Library

CreateTime
Gets the time to create graphical object.
datetime CreateTime() const

Return Value
Time to create graphical object that is bound to an instance of the class. If not bound object, it
returns 0.
Example:
//--- example for CChartObject::CreateTime
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get create time of chart object
datetime create_time=object.CreateTime();
}

2000-2014, MetaQuotes Software Corp.

2176

Standard Library

LevelsCount (Get Method)


Gets the number of levels of graphical object.
int LevelsCount() const

Return Value
Number of levels of graphical object that is bound to an instance of the class. If not bound object, it
returns 0.

LevelsCount (Set Method)


Sets the number of levels of graphical object.
bool LevelsCount(
int levels

// Number of levels

Parameters
levels
[in] the number of new levels of graphic object.
Return Value
true - if successful, false - if you can not change the number of levels.
Example:
//--- example for CChartObject::LevelsCount
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get levels count of chart object
int levels_count=object.LevelsCount();
//--- set levels count of chart object
object.LevelsCount(levels_count+1);
}

2000-2014, MetaQuotes Software Corp.

2177

Standard Library

LevelColor (Get Method)


Gets the line color specified level of graphic object.
color LevelColor(
int level

// Level number

) const

Parameters
level
[in] Number of levels of graphical object.
Return Value
Color Line level specified graphic object that is bound to an instance of the class. If not bound
object or the object is no specified level, it returns CLR_NONE.

LevelColor (Set Method)


Sets the line color specified level of graphic object.
bool LevelColor(
int

level,

color new_color

// Level number
// New color

Parameters
level
[in] Number of levels of graphical object.
new_color
[in] New value line color of the level of graphic object.
Return Value
true - if successful, false - if you can not change the color.
Example:
//--- example for CChartObject::LevelColor
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get level color of chart object
color level_color=object.LevelColor(i);
if(level_color!=clrRed)

2000-2014, MetaQuotes Software Corp.

2178

Standard Library
{
//--- set level color of chart object
object.LevelColor(i,clrRed);
}
}
}

2000-2014, MetaQuotes Software Corp.

2179

Standard Library

LevelStyle (Get Method)


Gets the line style specified level of graphical object.
ENUM_LINE_STYLE LevelStyle(
int level

// Level number

) const

Parameters
level
[in] Number of levels of graphical object.
Return Value
Line style specified level graphical object that is bound to an instance of the class. If not bound
object or the object is no specified level of returns WRONG_VALUE.

LevelStyle (Set Method)


Sets the line style specified level of graphical object.
int LevelStyle(
int

level,

ENUM_LINE_STYLE style

// Level number
// Line Style

Parameters
level
[in] Number of levels of graphical object.
style
[in] New value-style line level specified graphical object.
Return Value
true - if successful, false - if you can not change the style.
Example:
//--- example for CChartObject::LevelStyle
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get level style of chart object
ENUM_LINE_STYLE level_style=object.LevelStyle(i);
if(level_style!=STYLE_SOLID)

2000-2014, MetaQuotes Software Corp.

2180

Standard Library
{
//--- set level style of chart object
object.LevelStyle(i,STYLE_SOLID);
}
}
}

2000-2014, MetaQuotes Software Corp.

2181

Standard Library

LevelWidth (Get Method)


Gets the line thickness specified level of graphic object.
int LevelWidth(
int level

// Level number

) const

Parameters
level
[in] Number of levels of graphical object.
Return Value
The thickness of the lines of the level of graphical object that is bound to an instance of the class. If
not bound object or the object is no specified level, it returns -1.

LevelWidth (Set Method)


Finds the last element equal to the model in sorted array.
bool LevelWidth(
int level,

// Level number

int new_width

// New width

Parameters
level
[in] Number of levels of graphical object.
new_width
[in] New value line thickness specified level graphical object.
Return Value
position of the found element, if successful, -1 - if the item was not found.
Example:
//--- example for CChartObject::LevelWidth
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get level width of chart object
int level_width=object.LevelWidth(i);
if(level_width!=1)

2000-2014, MetaQuotes Software Corp.

2182

Standard Library
{
//--- set level width of chart object
object.LevelWidth(i,1);
}
}
}

2000-2014, MetaQuotes Software Corp.

2183

Standard Library

LevelValue (Get Method)


Gets the value of the level of graphic object.
double LevelValue(
int level

// Level number

) const

Parameters
level
[in] Number of levels of graphical object.
Return Value
The value of this level of graphical object that is bound to an instance of the class. If not bound
object or the object is no level specified, returns EMPTY_VALUE.

LevelValue (Set Method)


Sets the value of the specified level of graphic object.
bool LevelValue(
int

level,

double new_value

// Level number
// New value

Parameters
level
[in] Number of levels of graphical object.
new_value
[in] New value of the level of graphic object.
Return Value
true - if successful, false - if you can not change the level.
Example:
//--- example for CChartObject::LevelValue
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get level value of chart object
double level_value=object.LevelValue(i);
if(level_value!=0.1*i)

2000-2014, MetaQuotes Software Corp.

2184

Standard Library
{
//--- set level value of chart object
object.LevelValue(i,0.1*i);
}
}
}

2000-2014, MetaQuotes Software Corp.

2185

Standard Library

LevelDescription (Get Method)


Gets a description (text) of the level of graphical object.
string LevelDescription(
int level

// Level number

) const

Parameters
level
[in] Number of levels of graphical object.
Return Value
Description (text) of the level of graphical object that is bound to an instance of the class. If not
bound object or the object is no specified level, returns NULL.

LevelDescription (Set Method)


Sets the description (text) of the level of graphical object.
bool LevelDescription(
int

level ,

string text

// Level number
// Text

Parameters
level
[in] Number of level of graphical object.
text
[in] New value of description (text) of the level of graphic object.
Return Value
true if successful, false - if you can not change the description (text).
Example:
//--- example for CChartObject::LevelDescription
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get level description of chart object
string level_description=object.LevelDescription(i);
if(level_description=="")

2000-2014, MetaQuotes Software Corp.

2186

Standard Library
{
//--- set level description of chart object
object.LevelDescription(i,"Level_"+IntegerToString(i));
}
}
}

2000-2014, MetaQuotes Software Corp.

2187

Standard Library

GetInteger
Provides simplified access to the functions of API MQL5 ObjectGetInteger() for integer-value
properties (of type bool, char, uchar, short, ushort, int, uint, ling, ulong, datetime, color) bound to an
instance of the class graphic.There are two versions of a function call:
Getting a property value without checking the correctness
long GetInteger(
ENUM_OBJECT_PROPERTY_INTEGER prop_id,

// Identifier of integer-property

int

// Modifier

modifier=-1

) const

Parameters
prop_id
[in] ID of double-graphic properties.
modifier=-1
[in] Modifier (index) double-features.
Return Value
If successfull, it returns the value of integer-type property, if error, it returns 0.
Getting a property value in verifying the correctness of such treatment
bool GetInteger(
ENUM_OBJECT_PROPERTY_INTEGER prop_id,

// Identifier of integer-property

int

modifier,

// Modifier

long&

value

// Link to variable

) const

Parameters
prop_id
[in] ID integer-graphic properties of the object.
modifier
[in] Modifier (index) integer-property.
value
[out] Reference to a variable to accommodate the integer-value properties.
Return Value
true - if successful, false - if you can not get integer-property.
Example:
//--- example for CChartObject::GetInteger
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()

2000-2014, MetaQuotes Software Corp.

2188

Standard Library
{
CChartObject object;
//--- get color of chart object by easy method
printf("Objects color is %s",ColorToString(object.GetInteger(OBJPROP_COLOR),true));
//--- get color of chart object by classic method
long color_value;
if(!object.GetInteger(OBJPROP_COLOR,0,color_value))
{
printf("Get integer property error %d",GetLastError());
return;
}
else
printf("Objects color is %s",color_value);
for(int i=0;i<object.LevelsCount();i++)
{
//--- get levels width by easy method
printf("Level %d width is %d",i,object.GetInteger(OBJPROP_LEVELWIDTH,i));
//--- get levels width by classic method
long width_value;
if(!object.GetInteger(OBJPROP_LEVELWIDTH,i,width_value))
{
printf("Get integer property error %d",GetLastError());
return;
}
else
printf("Level %d width is %d",i,width_value);
}
}

2000-2014, MetaQuotes Software Corp.

2189

Standard Library

SetInteger
Provides simplified access to the functions of API MQL5 ObjectSetInteger() to change the integerproperties (with types bool, char, uchar, short, ushort, int, uint, ling, ulong, datetime, color) bound to
an instance of the class graphic.There are two versions of a function call:
Setting a property value that does not require a modifier
bool SetInteger(
ENUM_OBJECT_PROPERTY_INTEGER prop_id,

// Identifier of integer-property

long

// Value

value

Parameters
prop_id
[in] ID integer-graphic properties of the object.
value
[in] new mutable integer-value properties.
Setting a property value indicating the modifier
bool SetInteger(
ENUM_OBJECT_PROPERTY_INTEGER prop_id,

// Identifier of integer-property

int

modifier,

// Modifier

long

value

// Value

Parameters
prop_id
[in] ID integer-graphic properties of the object.
modifier
[in] Modifier (index) integer-property.
value
[in] new mutable integer-value properties.
Return Value
true - if successful, false - if you can not change the integer-property.
Example:
//--- example for CChartObject::SetInteger
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- set new color of chart object

2000-2014, MetaQuotes Software Corp.

2190

Standard Library
if(!object.SetInteger(OBJPROP_COLOR,clrRed))
{
printf("Set integer property error %d",GetLastError());
return;
}
for(int i=0;i<object.LevelsCount();i++)
{
//--- set levels width
if(!object.SetInteger(OBJPROP_LEVELWIDTH,i,i))
{
printf("Set integer property error %d",GetLastError());
return;
}
}
}

2000-2014, MetaQuotes Software Corp.

2191

Standard Library

GetDouble
Provides simplified access to the functions of API MQL5 ObjectGetDouble() to get the values doubleproperties (having type float and double) of the graphic object, assigned to the class instance. There
are two versions of a function call:
Getting a property value without checking the correctness
double GetDouble(
ENUM_OBJECT_PROPERTY_DOUBLE prop_id,

// Identifier of double-property

int

// Modifier

modifier=-1

) const

Parameters
prop_id
[in] ID of double-graphic properties.
modifier=-1
[in] Modifier (index) double-features.
Return Value
If successful, it returns the value of property of double type, if error, it returns EMPTY_VALUE.
Getting a property value in verifying the correctness of such treatment
bool GetDouble(
ENUM_OBJECT_PROPERTY_DOUBLE prop_id,

// Identifier of double-property

int

modifier,

// Modifier

double&

value

// Link to variable

) const

Parameters
prop_id
[in] ID of double-graphic properties.
modifier
[in] Modifier (index) double-features.
value
[out] Reference to a variable to accommodate the double-value properties.
Return Value
true - if successful, false - if you can not get a double-feature.
Example:
//--- example for CChartObject::GetDouble
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()

2000-2014, MetaQuotes Software Corp.

2192

Standard Library
{
CChartObject object;
//--for(int i=0;i<object.LevelsCount();i++)
{
//--- get levels value by easy method
printf("Level %d value=%f",i,object.GetDouble(OBJPROP_LEVELVALUE,i));
//--- get levels value by classic method
double value;
if(!object.SetDouble(OBJPROP_LEVELVALUE,i,value))
{
printf("Get double property error %d",GetLastError());
return;
}
else
printf("Level %d value=%f",i,value);
}
}

2000-2014, MetaQuotes Software Corp.

2193

Standard Library

SetDouble
Provides simplified access to the functions of API MQL5 ObjectSetDouble() to change the doubleproperties (having type float and double) bound to an instance of the class graphic object. There are
two versions of a function call:
Setting a property value that does not require a modifier
bool SetDouble(
ENUM_OBJECT_PROPERTY_DOUBLE prop_id,

// Identifier of double-property

double

// Value

value

Parameters
prop_id
[in] ID of double-graphic properties.
value
[in] New value mutable double-features.
Setting a property value indicating the modifier
bool SetDouble(
ENUM_OBJECT_PROPERTY_DOUBLE prop_id,

// Identifier of double-property

int

modifier,

// Modifier

double

value

// Value

Parameters
prop_id
[in] ID of double-graphic properties.
modifier
[in] Modifier (index) of double-property.
value
[in] New value mutable double-property.
Return Value
true - if successful, false - if you can not change the double-feature.
Example:
//--- example for CChartObject::SetDouble
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//---

2000-2014, MetaQuotes Software Corp.

2194

Standard Library
for(int i=0;i<object.LevelsCount();i++)
{
//--- set level value of chart object
if(!object.SetDouble(OBJPROP_LEVELVALUE,i,0.1*i))
{
printf("Set double property error %d",GetLastError());
return;
}
}
}

2000-2014, MetaQuotes Software Corp.

2195

Standard Library

GetString
Provides simplified access to the functions of API MQL5 ObjectGetString() for string-value properties,
is bound to an instance of the class graphic object. There are two versions of a function call:
Getting a property value without checking the correctness
string GetString(
ENUM_OBJECT_PROPERTY_STRING prop_id,

// Identifier of string-property

int

// Modifier

modifier=-1

) const

Parameters
prop_id
[in] Identifier string-properties of graphic object.
modifier=-1
[in] Modifier (index) string-properties.
Return Value
Value of string-property.
Getting a property value in verifying the correctness of such treatment
bool GetString(
ENUM_OBJECT_PROPERTY_STRING prop_id,

// Identifier of string-property

int

modifier,

// Modifier

string&

value

// Link to variable

) const

Parameters
prop_id
[in] Identifier string-properties of graphic object.
modifier
[in] Modifier (index) string-properties.
value
[out] Reference to a variable to accommodate the string-value properties.
Return Value
true - if successful, false - if you can not get a string-property.
Example:
//--- example for CChartObject::GetString
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{

2000-2014, MetaQuotes Software Corp.

2196

Standard Library
CChartObject object;
string

value;

//--- get name of chart object by easy method


printf("Object name is '%s'",object.GetString(OBJPROP_NAME));
//--- get name of chart object by classic method
if(!object.GetString(OBJPROP_NAME,0,value))
{
printf("Get string property error %d",GetLastError());
return;
}
else
printf("Object name is '%s'",value);
for(int i=0;i<object.LevelsCount();i++)
{
//--- get levels description by easy method
printf("Level %d description is '%s'",i,object.GetString(OBJPROP_LEVELTEXT,i));
//--- get levels description by classic method
if(!object.GetString(OBJPROP_LEVELTEXT,i,value))
{
printf("Get string property error %d",GetLastError());
return;
}
else
printf("Level %d description is '%s'",i,value);
}
}

2000-2014, MetaQuotes Software Corp.

2197

Standard Library

SetString
Provides simplified access to the functions of API MQL5 ObjectSetString() to change the properties of
string-tied to the instance of the class graphic object. There are two versions of a function call:
Setting a property value that does not require a modifier
bool SetString(
ENUM_OBJECT_PROPERTY_STRING prop_id,

// Identifier of string-property

string

// Value

value

Parameters
prop_id
[in] Identifier string-properties of graphic object.
value
[in] New value mutable string-properties.
Setting a property value indicating the modifier
bool SetString(
ENUM_OBJECT_PROPERTY_STRING prop_id,

// Identifier of string-property

int

modifier,

// Modifier

string

value

// Value

Parameters
prop_id
[in] Identifier string-properties of graphic object.
modifier
[in] Modifier (index) string-properties.
value
[in] New value mutable string-properties.
Return Value
true - if successful, false - if you can not change the string-property.
Example:
//--- example for CChartObject::SetString
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- set new name of chart object
if(!object.SetString(OBJPROP_NAME,"MyObject"))

2000-2014, MetaQuotes Software Corp.

2198

Standard Library
{
printf("Set string property error %d",GetLastError());
return;
}
for(int i=0;i<object.LevelsCount();i++)
{
//--- set levels description
if(!object.SetString(OBJPROP_LEVELTEXT,i,"Level_"+IntegerToString(i)))
{
printf("Set string property error %d",GetLastError());
return;
}
}
}

2000-2014, MetaQuotes Software Corp.

2199

Standard Library

Save
Saves parameters of the object in the file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the previously opened using the function FileOpen (...) file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CChartObject::Save
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
int

file_handle;

CChartObject object=new CChartObject;


//--- set object parameters
//--- . . .
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!object.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
}

2000-2014, MetaQuotes Software Corp.

2200

Standard Library

Load
Loads the parameters of the object from the file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the previously opened using the function FileOpen (...) file.
Return Value
true - if successfully completed, false - if an error.
Example:
//--- example for CChartObject::Load
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
int

file_handle;

CChartObject object;
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!object.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use object
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2201

Standard Library

Type
Gets the type identifier graphic object.
virtual int Type() const

Return Value
Object type identifier (0x8888 for CChartObject).
Example:
//--- example for CChartObject::Type
#include <ChartObjects\ChartObject.mqh>
//--void OnStart()
{
CChartObject object;
//--- get object type
int type=object.Type();
}

2000-2014, MetaQuotes Software Corp.

2202

Standard Library

Objects Lines
A group of graphic objects "Lines".
This section contains the technical details of working with a group of classes of graphical objects
"Lines" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectVLine

Graphic object "Vertical Line"

CChartObjectHLine

Graphic object "Horizontal Line"

CChartObjectTrend

Graphic object "Trend Line"

CChartObjectTrendByAngle

Graphic object "Trend Line by Angle"

CChartObjectCycles

Graphic object "Cyclic Lines"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2203

Standard Library

CChartObjectVLine
Class CChartObjectVLine is a class for simplified access to "Vertical Line" graphic object properties.

Description
Class CChartObjectVLine provides access to "Vertical Line" object properties.

Declaration
class CChartObjectVLine : public CChartObject

Title
#include <ChartObjects\ChartObjectsLines.mqh>

Class Methods
Create
Create

Creates graphic object "Vertical Line"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2204

Standard Library

Create
Creates graphic object "Vertical Line".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time

// Time coordinate

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time
[in] Time coordinate of the anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2205

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_VLINE for CChartObjectVLine).

2000-2014, MetaQuotes Software Corp.

2206

Standard Library

CChartObjectHLine
Class CChartObjectHLine is a class for simplified access to "Horizontal Line" graphic object properties.

Description
Class CChartObjectHLine provides access to "Horizonal Line" object properties.

Declaration
class CChartObjectHLine : public CChartObject

Title
#include <ChartObjects\ChartObjectsLines.mqh>

Class Methods
Create
Create

Creates graphic object "Horizontal Line"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2207

Standard Library

Create
Creates graphic object "Horizontal Line".
bool Create(
long

chart_id,

// Chart identifier

string name,

// Object name

long

// Chart window

window,

double price

// Price coordinate

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
price
[in] Price coordinate of the anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2208

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_HLINE for CChartObjectHLine).

2000-2014, MetaQuotes Software Corp.

2209

Standard Library

CChartObjectTrend
Class CChartObjectTrend is a class for simplified access to "Trend Line" graphic object properties.

Description
Class CChartObjectTrend provides access to "Trend Line" object properties.

Declaration
class CChartObjectTrend : public CChartObject

Title
#include <ChartObjects\ChartObjectsLines.mqh>

Class Methods
Create
Create

Creates graphic object "Trend Line"

Properties
RayLeft

Gets/Sets property "Ray Left"

RayRight

Gets/Sets property "Ray Right"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectChannel
CChartObjectFibo
CChartObjectFiboChannel
CChartObjectFiboExpansion
CChartObjectGannFan
CChartObjectGannGrid
CChartObjectPitchfork
CChartObjectRegression
CChartObjectStdDevChannel
CChartObjectTrendByAngle
See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2210

Standard Library

Create
Creates graphic object "Trend Line".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// 1st time coordinate

double

// 1st price coordinate

price1,

datetime time2,

// 2nd time coordinate

double

// 2nd price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2211

Standard Library

RayLeft (Get Method)


Gets the value of "Ray Left" property.
bool RayLeft() const

Returned value
The value of "Ray Left" property, assigned to the class instance. If there is no object assigned, it
returns false.

RayLeft (Set Method)


Sets new flag value for the "Ray Left" property.
bool RayLeft(
bool ray

// flag

Parameters
ray
[in] New value of the "Ray Left" property.
Returned value
true if successful, false if flag hasn't changed error.

2000-2014, MetaQuotes Software Corp.

2212

Standard Library

RayRight (Get Method)


Gets the value of "Ray Right" property.
bool RayRight() const

Returned value
The value of "Ray Right" property, assigned to the class instance. If there is no object assigned, it
returns false.

RayRight (Set Method)


Sets new flag value for the "Ray Right" property.
bool RayRight(
bool ray

// flag

Parameters
ray
[in] New value of the "Ray Right" property.
Returned value
true if successful, false if flag hasn't changed error.

2000-2014, MetaQuotes Software Corp.

2213

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...) .
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2214

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2215

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_TREND for CChartObjectTrend).

2000-2014, MetaQuotes Software Corp.

2216

Standard Library

CChartObjectTrendByAngle
Class CChartObjectTrendByAngle is a class for simplified access to "Trend Line by Angle" graphic
object properties.

Description
Class CChartObjectTrendByAngle provides access to "Trend Line by Angle" object properties.

Declaration
class CChartObjectTrendByAngle : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsLines.mqh>

Class Methods
Create
Create

Creates graphic object "Trend Line by Angle"

Properties
Angle

Gets/Sets property "Angle"

Input/output
virtual Type

Virtual method of identification

Derived classes:
CChartObjectGannLine
See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2217

Standard Library

Create
Creates graphic object "Trend Line by Angle"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// 1st time coordinate

double

// 1st price coordinate

price1,

datetime time2,

// 2nd time coordinate

double

// 2nd price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2218

Standard Library

Angle (Get Method)


Gets the value of "Angle" property.
double Angle() const

Returned value
The value of "Angle" property, assigned to the class instance. If there is no object assigned, it
returns EMPTY_VALUE.

Angle (Set Method)


Sets new value for the "Angle" property.
bool Angle(
double angle

// Angle

Parameters
angle
[in] New value of the "Angle" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2219

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_TRENDBYANGLE for CChartObjectTrendByAngle).

2000-2014, MetaQuotes Software Corp.

2220

Standard Library

CChartObjectCycles
Class CChartObjectCycles is a class for simplified access to "Cyclic Lines" graphic object properties.

Description
Class CChartObjectCycles provides access to "Cyclic Lines" object properties.

Declaration
class CChartObjectCycles : public CChartObject

Title
#include <ChartObjects\ChartObjectsLines.mqh>

Class Methods
Create
Create

Creates graphic object "Cycle Lines"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2221

Standard Library

Create
Creates graphic object "Cyclic Lines"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// 1st time coordinate

double

// 1st price coordinate

price1,

datetime time2,

// 2nd time coordinate

double

// 2nd price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2222

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_CYCLES for CChartObjectCycles).

2000-2014, MetaQuotes Software Corp.

2223

Standard Library

Objects Channels
A group of graphic objects "Channels".
This section contains the technical details of working with a group of classes of graphical objects
"Channels" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectChannel

Graphic object "Equidistant Channel"

CChartObjectRegression

Graphic object "Linear Regression Channel"

CChartObjectStdDevChannel

Graphic object "Standard deviations Channel"

CChartObjectPitchfork

Graphic object "Andrew's Pitchfork"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2224

Standard Library

CChartObjectChannel
The CChartObjectChannel is a class for simplified access to "Equidistant Channel" graphic object
properties.

Description
The class CChartObjectChannel provides access to "Equidistant Channel" object properties.

Declaration
class CChartObjectChannel : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsChannels.mqh>

Class Methods
Create
Create

Creates graphic object "Equidistant Channel"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2225

Standard Library

Create
Creates graphic object "Equidistant Channel"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,
double

// Time coordinate

price1,

datetime time2,
double

price2,

datetime time3,
double

price3

Parameters
chart_id
[in] Chart ID (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2226

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_CHANNEL for CChartObjectChannel).

2000-2014, MetaQuotes Software Corp.

2227

Standard Library

CChartObjectRegression
Class CChartObjectRegression is a class for simplified access to "Linear Regression Channel" graphic
object properties.

Description
Class CChartObjectRegression provides access to "Linear Regression Channel" object properties.

Declaration
class CChartObjectRegression : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsChannels.mqh>

Class Methods
Create
Create

Creates graphic object "Linear Regression


Channel"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2228

Standard Library

Create
Creates graphic object "Linear Regression Channel"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// First time coordinate

datetime time2

// Second time coordinate

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2229

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_REGRESSION for CChartObjectRegression).

2000-2014, MetaQuotes Software Corp.

2230

Standard Library

CChartObjectStdDevChannel
Class CChartObjectStdDevChannel is a class for simplified access to "Standard Deviation Channel"
graphic object properties.

Description
Class CChartObjectStdDevChannel provides access to "Standard Deviation Channel" object properties.

Declaration
class CChartObjectStdDevChannel : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsChannels.mqh>

Class Methods
Create
Create

Creates graphic object "Standard Deviation


Channel"

Properties
Deviations

Gets/Sets property "Deviation"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2231

Standard Library

Create
Creates graphic object "Standard Deviation Channel"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

datetime time2,

// Second time coordinate

double

// Deviation

deviation

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
deviation
[in] Numerical value for "Deviation" property.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2232

Standard Library

Deviation (Get Method)


Gets numerical value for "Deviation" property.
double Deviation() const

Returned value
Numerical value of "Deviation" property, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

Deviation (Set Method)


Sets numerical value for "Deviation" property.
bool Deviation(
double deviation

// Deviation

Parameters
deviation
[in] New value for "Deviation" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2233

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...) .
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2234

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...) .
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2235

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_STDDEVCHANNEL for CChartObjectStdDevChannel).

2000-2014, MetaQuotes Software Corp.

2236

Standard Library

CChartObjectPitchfork
Class CChartObjectPitchfork is a class for simplified access to "Andrew's Pitchfork" graphic object
properties.

Description
Class CChartObjectPitchfork provides access to "Andrew's Pitchfork" object properties.

Declaration
class CChartObjectPitchfork : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsChannels.mqh>

Class Methods
Create
Create

Creates graphic object "Andrew's Pitchfork"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2237

Standard Library

Create
Creates graphic object "Andrew's Pitchfork"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// 1st time coordinate

double

// 1st price coordinate

price1,

datetime time2,
double

// ...

price2,

datetime time3,
double

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point..
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the first anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2238

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_PITCHFORK for CChartObjectPitchfork).

2000-2014, MetaQuotes Software Corp.

2239

Standard Library

Gann Tools
A group of graphic objects "Gann Tools".
This section contains the technical details of working with a group of classes of graphical objects
"Gann Tools" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectGannLine

Graphic object "Gann Line"

CChartObjectGannFan

Graphic object "Gann Fan"

CChartObjectGannGrid

Graphic object "Gann Grid"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2240

Standard Library

CChartObjectGannLine
Class CChartObjectGannLine is a class for simplified access to "Gann Line" graphic object properties.

Description
Class CChartObjectGannLine provides access to "Gann Line" object properties.

Declaration
class CChartObjectGannLine : public CChartObjectTrendByAngle

Title
#include <ChartObjects\ChartObjectsGann.mqh>

Class Methods
Create
Create

Creates graphic object "Gann Line"

Properties
PipsPerBar

Gets/Sets property "Scale"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2241

Standard Library

Create
Creates graphic object "Gann Line".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Pips per bar

ppb

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
ppb
[in] Pips per bar.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2242

Standard Library

PipsPerBar (Get Method)


Gets the value of "Pips per bar" property.
double PipsPerBar() const

Returned value
Value of "Pips per bar" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

PipsPerBar (Set Method)


Sets new value for "Pips per bar" property.
bool PipsPerBar(
double ppb

// Pips per bar

Parameters
ppb
[in] New value for "Pips per bar" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2243

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2244

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2245

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_GANNLINE for CChartObjectGannLine).

2000-2014, MetaQuotes Software Corp.

2246

Standard Library

CChartObjectGannFan
Class CChartObjectGannFan is a class for simplified access to "Gann Fan" graphic object properties.

Description
Class CChartObjectGannFan provides access to "Gann Fan" object properties.

Declaration
class CChartObjectGannFan : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsGann.mqh>

Class Methods
Create
Create

Creates graphic object "Gann Fan"

Properties
PipsPerBar

Gets/Sets property "Pips per bar"

Downtrend

Gets/Sets property "Downtrend"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2247

Standard Library

Create
Creates graphic object "Gann Fan".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Pips per bar

ppb

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
ppb
[in] Pips per bar.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2248

Standard Library

PipsPerBar (Get Method)


Gets the value of "Pips per bar" property.
double PipsPerBar() const

Returned value
Value of "Pips per bar" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

PipsPerBar (Set Method)


Sets new value for "Pips per bar" property.
bool PipsPerBar(
double ppb

// Pips per bar

Parameters
ppb
[in] New value for "Pips per bar" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2249

Standard Library

Downtrend (Get Method)


Gets the value of "Downtrend" property.
bool Downtrend() const

Returned value
Value of the "Downtrend" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

Downtrend (Set Method)


Sets new value of "Downtrend" property.
bool Downtrend(
bool downtrend

// Flag value

Parameters
downtrend
[in] New value for "Downtrend" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2250

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2251

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2252

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_GANNFAN for CChartObjectGannFan).

2000-2014, MetaQuotes Software Corp.

2253

Standard Library

CChartObjectGannGrid
Class CChartObjectGannGrid is a class for simplified access to "Gann Grid" graphic object properties.

Description
Class CChartObjectGannGrid provides access to "Gann Grid" object properties.

Declaration
class CChartObjectGannGrid : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsGann.mqh>

Class Methods
Create
Create

Creates graphic object "Gann Grid"

Properties
PipsPerBar

Gets/Sets property "Pips per bar"

Downtrend

Gets/Sets property "Downtrend"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2254

Standard Library

Create
Creates graphic object "Gann Grid".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Pips per bar

ppb

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
ppb
[in] Pips per bar.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2255

Standard Library

PipsPerBar (Get Method)


Gets the value of "Pips per bar" property.
double PipsPerBar() const

Returned value
Value of "Pips per bar" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

PipsPerBar (Set Method)


Sets new value for "Pips per bar" property.
bool PipsPerBar(
double ppb

// Pips per bar

Parameters
ppb
[in] New value for "Pips per bar" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2256

Standard Library

Downtrend (Get Method)


Gets the value of "Downtrend" property.
bool Downtrend() const

Returned value
Value of "Downtrend" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

Downtrend (Set Method)


Sets new value of "Downtrend" property.
bool Downtrend(
bool downtrend

// Flag value

Parameters
downtrend
[in] New value for "Downtrend" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2257

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2258

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2259

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_GANNGRID for CChartObjectGannGrid).

2000-2014, MetaQuotes Software Corp.

2260

Standard Library

Fibonacci Tools
A group of graphic objects "Fibonacci Tools".
This section contains the technical details of working with a group of classes of graphical objects
"Fibonacci Tools" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectFibo

Graphic object "Fibonacci Retracement"

CChartObjectFiboTimes

Graphic object "Fibonacci Time Zones"

CChartObjectFiboFan

Graphic object "Fibonacci Fan"

CChartObjectFiboArc

Graphic object "Fibonacci Arc"

CChartObjectFiboChannel

Graphic object "Fibonacci Channel"

CChartObjectFiboExpansion

Graphic object "Fibonacci Expansion"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2261

Standard Library

CChartObjectFibo
Class CChartObjectFibo is a class for simplified access to "Fibonacci Retracement" graphic object
properties.

Description
Class CChartObjectFibo provides access to "Fibonacci Retracement" object properties.

Declaration
class CChartObjectFibo : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Retracement"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2262

Standard Library

Create
Creates graphic object "Fibonacci Retracement".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2263

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_FIBO for CChartObjectFibo).

2000-2014, MetaQuotes Software Corp.

2264

Standard Library

CChartObjectFiboTimes
Class CChartObjectFiboTimes is a class for simplified access to "Fibonacci Time Zones" graphic object
properties.

Description
Class CChartObjectFiboTimes provides access to "Fibonacci Time Zones" object properties.

Declaration
class CChartObjectFiboTimes : public CChartObject

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Time Zones"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2265

Standard Library

Create
Creates graphic object "Fibonacci Time Zones".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2266

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_FIBOTIMES for CChartObjectFiboTimes).

2000-2014, MetaQuotes Software Corp.

2267

Standard Library

CChartObjectFiboFan
Class CChartObjectFiboFan is a class for simplified access to "Fibonacci Fan" graphic object
properties.

Description
Class CChartObjectFiboFan provides access to "Fibonacci Fan" object properties.

Declaration
class CChartObjectFiboFan : public CChartObject

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Fan"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2268

Standard Library

Create
Creates graphic object "Fibonacci Fan".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2269

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_FIBOFAN for CChartObjectFiboFan).

2000-2014, MetaQuotes Software Corp.

2270

Standard Library

CChartObjectFiboArc
Class CChartObjectFiboArc is a class for simplified access to "Fibonacci Arc" graphic object properties.

Description
Class CChartObjectFiboArc provides access to "Fibonacci Arc" object properties.

Declaration
class CChartObjectFiboArc : public CChartObject

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Arc"

Properties
Scale

Gets/Sets property "Scale"

Ellipse

Gets/Sets property "Ellipse"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2271

Standard Library

Create
Creates graphic object "Fibonacci Arc"
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

price2,

// Second price coordinate

double

scale

// Scale

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
scale
[in] Scale.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2272

Standard Library

Scale (Get Method)


Gets the value of "Scale" property.
double Scale() const

Returned value
Value of "Scale" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

Scale (Set Method)


Sets new value for "Scale" property.
bool Scale(
double scale

// Scale

Parameters
scale
[in] New value for "Scale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2273

Standard Library

Ellipse (Get Method)


Gets the value of "Ellipse" property.
bool Ellipse() const

Returned value
Value of "Ellipse" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

Ellipse (Set Method)


Sets new flag value for "Ellipse" property.
bool Ellipse(
bool ellipse

// flag value

Parameters
ellipse
[in] New value for "Scale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2274

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2275

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2276

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_FIBOARC for CChartObjectFiboArc).

2000-2014, MetaQuotes Software Corp.

2277

Standard Library

CChartObjectFiboChannel
Class CChartObjectFiboChannel is a class for simplified access to "Fibonacci Channel" graphic object
properties.

Description
Class CChartObjectFiboChannel provides access to "Fibonacci Channel" object properties.

Declaration
class CChartObjectFiboChannel : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Channel"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2278

Standard Library

Create
Creates graphic object "Fibonacci Channel".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2279

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_FIBOCHANNEL for CChartObjectFiboChannel).

2000-2014, MetaQuotes Software Corp.

2280

Standard Library

CChartObjectFiboExpansion
Class CChartObjectFiboExpansion is a class for simplified access to "Fibonacci Expansion" graphic
object properties.

Description
Class CChartObjectFiboExpansion provides access to "Fibonacci Expansion" object properties.

Declaration
class CChartObjectFiboExpansion : public CChartObjectTrend

Title
#include <ChartObjects\ChartObjectsFibo.mqh>

Class Methods
Create
Create

Creates graphic object "Fibonacci Expansion"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2281

Standard Library

Create
Creates graphic object "Fibonacci Expansion".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2282

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_EXPANSION for CChartObjectFiboExpansion).

2000-2014, MetaQuotes Software Corp.

2283

Standard Library

Elliott Tools
A group of graphic objects "Elliott Tools".
This section contains the technical details of working with a group of classes of graphical objects
"Elliott Tools" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectElliottWave3

Graphic object "Correcting Wave"

CChartObjectElliottWave5

Graphic object "Impulse Wave"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2284

Standard Library

CChartObjectElliottWave3
Class CChartObjectElliottWave3 is a class for simplified access to "Correcting Wave" graphic object
properties.

Description
Class CChartObjectElliottWave3 provides access to "Correcting Wave" object properties.

Declaration
class CChartObjectElliottWave3 : public CChartObject

Title
#include <ChartObjects\ChartObjectsElliott.mqh>

Class Methods
Create
Create

Creates graphic object "Correcting Wave"

Properties
Degree

Gets/Sets property "Degree"

Lines

Gets/Sets property "Lines"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectElliottWave5
See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2285

Standard Library

Create
Creates graphic object "Correcting Wave".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Time coordinate of the third anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2286

Standard Library

Degree (Get Method)


Gets the value of "Degree" property.
ENUM_ELLIOT_WAVE_DEGREE Degree() const

Returned value
Value of "Degree" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Degree (Set Method)


Sets new value for "Degree" property.
bool Degree(
ENUM_ELLIOT_WAVE_DEGREE degree

// property value

Parameters
degree
[in] New value for "Degree" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2287

Standard Library

Lines (Get Method)


Gets the value of "Lines" property.
bool Lines() const

Returned value
Value of "Lines" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

Lines (Set Method)


Sets new value for "Lines" property.
bool Lines(
bool lines

// flag value

Parameters
lines
[in] New value for "Lines" property.
Returned value
true if successful, false if flag hasn't changed.

2000-2014, MetaQuotes Software Corp.

2288

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2289

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened using by function FileOpen(...).
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2290

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_ELLIOTWAVE3 for CChartObjectElliottWave3).

2000-2014, MetaQuotes Software Corp.

2291

Standard Library

CChartObjectElliottWave5
Class CChartObjectElliottWave5 is a class for simplified access to "Impulse Wave" graphic object
properties.

Description
Class CChartObjectElliottWave5 provides access to "Impulse Wave" object properties.

Declaration
class CChartObjectElliottWave5 : public CChartObjectElliottWave3

Title
#include <ChartObjects\ChartObjectsElliott.mqh>

Class Methods
Create
Create

Creates graphic object "Impulse Wave"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2292

Standard Library

Create
Creates graphic object "Impulse Wave".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3,

datetime time4,

// Fourth time coordinate

double

// Fourth price coordinate

price4,

datetime time5

// Fifth time coordinate

double

// Fifth price coordinate

price5,

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
time4
[in] Time coordinate of the fourth anchor point.

2000-2014, MetaQuotes Software Corp.

2293

Standard Library
price4
[in] Price coordinate of the fourth anchor point.
time5
[in] Time coordinate of the fifth anchor point.
price5
[in] Price coordinate of the fifth anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2294

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_ELLIOTWAVE5 for CChartObjectElliottWave5).

2000-2014, MetaQuotes Software Corp.

2295

Standard Library

Objects Shapes
A group of graphic objects "Shapes".
This section contains the technical details of working with a group of classes of graphical objects
"Shapes" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectRectangle

Graphic object "Rectangle"

CChartObjectTriangle

Graphic object "Triangle"

CChartObjectEllipse

Graphic object "Ellipse"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2296

Standard Library

CChartObjectRectangle
Class CChartObjectRectangle is a class for simplified access to "Rectangle" graphic object properties.

Description
Class CChartObjectRectangle provides access to "Rectangle" object properties.

Declaration
class CChartObjectRectangle : public CChartObject

Title
#include <ChartObjects\ChartObjectsShapes.mqh>

Class Methods
Create
Create

Creates graphic object "Rectangle"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2297

Standard Library

Create
Creates graphic object "Rectangle".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
Returned value
true if successful, 0 if error

2000-2014, MetaQuotes Software Corp.

2298

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_RECTANGLE for CChartObjectRectangle).

2000-2014, MetaQuotes Software Corp.

2299

Standard Library

CChartObjectTriangle
Class CChartObjectTriangle is a class for simplified access to "Triangle" graphic object properties.

Description
Class CChartObjectTriangle provides access to "Triangle" object properties.

Declaration
class CChartObjectTriangle : public CChartObject

Title
#include <ChartObjects\ChartObjectsShapes.mqh>

Class Methods
Create
Create

Creates graphic object "Triangle"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2300

Standard Library

Create
Creates graphic object "Triangle".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

long

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error

2000-2014, MetaQuotes Software Corp.

2301

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_TRIANGLE for CChartObjectTriangle).

2000-2014, MetaQuotes Software Corp.

2302

Standard Library

CChartObjectEllipse
Class CChartObjectEllipse is a class for simplified access to "Ellipse" graphic object properties.

Description
Class CChartObjectEllipse provides access to "Ellipse" object properties.

Declaration
class CChartObjectEllipse : public CChartObject

Title
#include <ChartObjects\ChartObjectsShapes.mqh>

Class Methods
Create
Create

Creates graphic object "Ellipse"

Input/output
virtual Type

Virtual method of identification

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2303

Standard Library

Create
Creates graphic object "Ellipse".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time1,

// First time coordinate

double

// First price coordinate

price1,

datetime time2,

// Second time coordinate

double

// Second price coordinate

price2,

datetime time3,

// Third time coordinate

double

// Third price coordinate

price3

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time1
[in] Time coordinate of the first anchor point.
price1
[in] Price coordinate of the first anchor point.
time2
[in] Time coordinate of the second anchor point.
price2
[in] Price coordinate of the second anchor point.
time3
[in] Time coordinate of the third anchor point.
price3
[in] Price coordinate of the third anchor point.
Returned value
true if successful, false if error

2000-2014, MetaQuotes Software Corp.

2304

Standard Library

Type
Returns object type identifier of the graphic object.
int Type() const

Returned value
Object type identifier (OBJ_ELLIPSE for CChartObjectEllipse).

2000-2014, MetaQuotes Software Corp.

2305

Standard Library

Objects Arrows
Group for graphic objects Arrows.
This section contains the technical details of working with a group of classes of graphical objects
"Arrow" and a description of the relevant components of the MQL5 Standard Library . In essence, the
arrow - this is some icon to be displayed to the user, which matches a certain code. There are two
types of graphical objects "Arrow" to display icons on the charts:
Object "Arrow", which allows you to specify the code icon displayed object.
Group objects to display certain types of icons (and the corresponding certain fixed code).

Class for the arrow displays icons of arbitrary code


Class name

Name of the object arrow

CChartObjectArrow

Arrow

Classes for the arrow icon fixed code


Class name

Name of the object arrow

CChartObjectArrowCheck

Check

CChartObjectArrowDown

Arrow Up

CChartObjectArrowUp

Arrow Down

CChartObjectArrowStop

Stop Sign

CChartObjectArrowThumbDown

Thumbs Up

CChartObjectArrowThumbUp

Thumbs Down

CChartObjectArrowLeftPrice

Left Price Label

CChartObjectArrowRightPrice

Right Price Label

See also
Object types, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2306

Standard Library

CChartObjectArrow
Class CChartObjectArrow is a class for simplified access to "Arrow" graphic object properties.

Description
Class CChartObjectArrow provides access to common properties of objects "Arrow" to all of its
descendants.

Declaration
class CChartObjectArrow : public CChartObject

Title
#include <ChartObjects\ChartObjectsArrows.mqh>

Class Methods
Create
Create

Creates graphic object "Arrow"

Properties
ArrowCode

Gets/Sets property "Arrow Code"

Anchor

Gets/Sets property "Anchor"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2307

Standard Library

Create
Creates graphic object "Arrow".
bool Create(
long

chart_id,

// Chart ID

string

name,

// Object Name

int

window,

// Chart Window

datetime time,

// Time

double

price,

// Price

char

code

// Arrow Code

Parameters
chart_id
[in] Chart Identifier (0 current chart).
name
[in] Object name (Should be unique).
window
[in] Chart window number (0 base window).
time
[in] Time coordinate.
price
[in] Price coordinate.
code
[in] "Arrow" code (Wingdings).
Returned value
true if successful, otherwise false.
Example:
//--- example for CChartObjectArrow::Create
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
CChartObjectArrow arrow;
//--- set object parameters
double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"Arrow",0,TimeCurrent(),price,181))
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//---

2000-2014, MetaQuotes Software Corp.

2308

Standard Library
return;
}
//--- use arrow
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2309

Standard Library

ArrowCode (Get Method)


Gets code of the symbol for "Arrow".
char ArrowCode() const

Returned value
Symbol code of "Arrow" object, assigned to the class instance. If there is no object assigned, it
returns 0.

ArrowCode (Set Method)


Sets symbol code for "Arrow"
bool ArrowCode(
char code

// Code value

Parameters
code
[in] new value for "arrow" code (Wingdings).
Returned value
true if successful, false if code hasn't changed.
Example:
//--- example for CChartObjectArrow::ArrowCode
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
CChartObjectArrow arrow;
char

code=181;

//--- set object parameters


double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"Arrow",0,TimeCurrent(),price,code))
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//--return;
}
//--- use arrow to possible changes code
//--- . . .
//--- get code of arrow
if(arrow.ArrowCode()!=code)
{
//--- set code of arrow

2000-2014, MetaQuotes Software Corp.

2310

Standard Library
arrow.ArrowCode(code);
}
//--- use arrow
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2311

Standard Library

Anchor (Get Method)


Gets anchor type of the "Arrow" object
ENUM_ARROW_ANCHOR Anchor() const

Returned value
Anchor type of "Arrow" object, assigned to the class instance. If there is no object assigned, it
returns WRONG_VALUE.

Anchor (Set Method)


Sets color for graphic object
bool Anchor(
ENUM_ARROW_ANCHOR new_color

// new color

Parameters
new_color
[in] New value of color for line of the graphic object.
Returned value
true if successful, false if color hasn't changed.
Example:
//--- example for CChartObject::Anchor
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
CChartObjectArrow arrow;
ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM;
//--- set object parameters
double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"Arrow",0,TimeCurrent(),price,181))
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//--return;
}
//--- get anchor of arrow
if(arrow.Anchor()!=anchor)
{
//--- set anchor of arrow
arrow.Anchor(anchor);
}
//--- use arrow

2000-2014, MetaQuotes Software Corp.

2312

Standard Library
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2313

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// file handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...) .
Returned value
true if successful, otherwise false.
Example:
//--- example for CChartObjectArrow::Save
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
int

file_handle;

CChartObjectArrow arrow;
//--- set object parameters
double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"Arrow",0,TimeCurrent(),price,181))
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//--return;
}
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!arrow.Save(file_handle))
{
//--- file save error
printf("File save: Error %d!",GetLastError());
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
}

2000-2014, MetaQuotes Software Corp.

2314

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// file handle

Parameters
file_handle
[in] handle of the file already opened using by function FileOpen(...).
Returned value
true if successful, otherwise false.
Example:
//--- example for CChartObjectArrow::Load
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
int

file_handle;

CChartObjectArrow arrow;
//--- open file
file_handle=FileOpen("MyFile.bin",FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!arrow.Load(file_handle))
{
//--- file load error
printf("File load: Error %d!",GetLastError());
FileClose(file_handle);
//--return;
}
FileClose(file_handle);
}
//--- use arrow
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2315

Standard Library

Type
Returns graphic object type identifier
virtual int Type() const

Returned value
Object type identifier (for example, OBJ_ARROW for CChartObjectArrow)
Example:
//--- example for CChartObjectArrow::Type
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
CChartObjectArrow arrow;
//--- get arrow type
int type=arrow.Type();
}

2000-2014, MetaQuotes Software Corp.

2316

Standard Library

Arrows with fixed code


Classes "Arrows with fixed code" are classes for simplified access to the properties of the following
graphic objects:
Class name

Arrow object name

CChartObjectArrowCheck

"Arrow Check"

CChartObjectArrowDown

"Arrow Down"

CChartObjectArrowUp

"Arrow Up"

CChartObjectArrowStop

"Arrow Stop"

CChartObjectArrowThumbDown

"Good" ("Big finger up")

CChartObjectArrowThumbUp

"Bad" ("Big finger down")

CChartObjectArrowLeftPrice

"Left price" arrow

CChartObjectArrowRightPrice

"Right price" arrow

Description
Classes "Arrows with fixed code" provides access to the object properties.

Declarations
class CChartObjectArrowCheck

: public CChartObjectArrow;

class CChartObjectArrowDown

: public CChartObjectArrow;

class CChartObjectArrowUp

: public CChartObjectArrow;

class CChartObjectArrowStop

: public CChartObjectArrow;

class CChartObjectArrowThumbDown

: public CChartObjectArrow;

class CChartObjectArrowThumbUp

: public CChartObjectArrow;

class CChartObjectArrowLeftPrice

: public CChartObjectArrow;

class CChartObjectArrowRightPrice : public CChartObjectArrow;

Title
<ChartObjects\ChartObjectsArrows.mqh>

Class Methods
Create
Create

Creates graphic object specified

Properties
ArrowCode

"Gag" for method of code change

Input/output
virtual Type

Virtual method of identification

2000-2014, MetaQuotes Software Corp.

2317

Standard Library

See also
Object types, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2318

Standard Library

Create
Creates graphic object "Arrow with fixed code".
bool Create(
long

chart_id,

// Chart ID

string

name,

// Object Name

int

window,

// Chart Window

datetime time,

// Time

double

// Price

price

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] Unique name of the object to create.
window
[in] Chart window number (0 base window).
time
[in] Time coordinate.
price
[in] Price coordinate.
Returned value
true if successful, false if error.
Example:
//--- example for CChartObjectArrowCheck::Create
//--- example for CChartObjectArrowDown::Create
//--- example for CChartObjectArrowUp::Create
//--- example for CChartObjectArrowStop::Create
//--- example for CChartObjectArrowThumbDown::Create
//--- example for CChartObjectArrowThumbUp::Create
//--- example for CChartObjectArrowLeftPrice::Create
//--- example for CChartObjectArrowRightPrice::Create
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
//--- for example, take CChartObjectArrowCheck
CChartObjectArrowCheck arrow;
//--- set object parameters
double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"ArrowCheck",0,TimeCurrent(),price))

2000-2014, MetaQuotes Software Corp.

2319

Standard Library
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//--return;
}
//--- use arrow
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2320

Standard Library

ArrowCode
Prohibits code changes for "Arrow".
bool ArrowCode(
char code

// code value

Parameters
code
[in] any value
Returned value
Always false.
Example:
//--- example for CChartObjectArrowCheck::ArrowCode
//--- example for CChartObjectArrowDown::ArrowCode
//--- example for CChartObjectArrowUp::ArrowCode
//--- example for CChartObjectArrowStop::ArrowCode
//--- example for CChartObjectArrowThumbDown::ArrowCode
//--- example for CChartObjectArrowThumbUp::ArrowCode
//--- example for CChartObjectArrowLeftPrice::ArrowCode
//--- example for CChartObjectArrowRightPrice::ArrowCode
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
//--- for example, take CChartObjectArrowCheck
CChartObjectArrowCheck arrow;
//--- set object parameters
double price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
if(!arrow.Create(0,"ArrowCheck",0,TimeCurrent(),price))
{
//--- arrow create error
printf("Arrow create: Error %d!",GetLastError());
//--return;
}
//--- set code of arrow
if(!arrow.ArrowCode(181))
{
//--- it is not error
printf("Arrow code can not be changed");
}
//--- use arrow
//--- . . .
}

2000-2014, MetaQuotes Software Corp.

2321

Standard Library

Type
Returns graphic object type identifier
virtual int Type() const

Returned value
Object type identifier (OBJ_ARROW_CHECK for CChartObjectArrowCheck, OBJ_ARROW_DOWN for
CChartObjectArrowDown, OBJ_ARROW_UP for CChartObjectArrowUp, OBJ_ARROW_STOP for
CChartObjectArrowStop,
OBJ_ARROW_THUMB_DOWN
for
CChartObjectArrowThumbDown,
OBJ_ARROW_THUMB_UP
for
CChartObjectArrowThumbUp,
OBJ_ARROW_LEFT_PRICE
for
CChartObjectArrowLeftPrice, OBJ_ARROW_RIGHT_PRICE for CChartObjectArrowRightPrice).
Example:
//--- example for CChartObjectArrowCheck::Type
//--- example for CChartObjectArrowDown::Type
//--- example for CChartObjectArrowUp::Type
//--- example for CChartObjectArrowStop::Type
//--- example for CChartObjectArrowThumbDown::Type
//--- example for CChartObjectArrowThumbUp::Type
//--- example for CChartObjectArrowLeftPrice::Type
//--- example for CChartObjectArrowRightPrice::Type
#include <ChartObjects\ChartObjectsArrows.mqh>
//--void OnStart()
{
//--- for example, take CChartObjectArrowCheck
CChartObjectArrowCheck arrow;
//--- get arrow type
int type=arrow.Type();
}

2000-2014, MetaQuotes Software Corp.

2322

Standard Library

Object Controls
A group of graphic objects "Object Controls".
This section contains the technical details of working with a group of classes of graphical objects
"Object Controls" and a description of the relevant components of the MQL5 Standard Library .
Class name

Object

CChartObjectText

Graphic object "Text"

CChartObjectLabel

Graphic object "Text Label"

CChartObjectEdit

Graphic object "Edit"

CChartObjectButton

Graphic object "Button"

CChartObjectSubChart

Graphic object "Chart"

CChartObjectBitmap

Graphic object "Bitmap"

CChartObjectBmpLabel

Graphic object "Bitmap Label"

CChartObjectRectLabel

Graphic object "Rectangle Label"

See also
Object types, Graphic objects

2000-2014, MetaQuotes Software Corp.

2323

Standard Library

CChartObjectText
Class CChartObjectText is a class for simplified access to "Text" graphic object properties.

Description
Class CChartObjectText provides access to "Text" object properties.

Declaration
class CChartObjectText : public CChartObject

Title
#include <ChartObjects\ChartObjectsTxtControls.mqh>

Class Methods
Create
Create

Creates graphic object "Text"

Properties
Angle

Gets/Sets property "Angle"

Font

Gets/Sets property "Font"

FontSize

Gets/Sets property "FontSize"

Anchor

Gets/Sets property "Anchor"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectLabel
See also
Object types, Object properties, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2324

Standard Library

Create
Creates graphic object "Text".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time,

// Time coordinate

double

// Price coordinate

price

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time
[in] Time coordinate of the anchor point.
price
[in] Price coordinate of the anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2325

Standard Library

Angle (Get Method)


Gets the value of "Angle" property.
double Angle() const

Returned value
Value of "Angle" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

Angle (Set Method)


Sets new value for "Angle" property.
bool Angle(
double angle

// new angle

Parameters
angle
[in] New value for "Angle" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2326

Standard Library

Font (Get Method)


Gets the value of "Font" property.
string Font() const

Returned value
Value of "Font" property of the object, assigned to the class instance. If there is no object assigned,
it returns "".

Font (Set Method)


Sets new value for "Font" property.
bool Font(
string font

// new font

Parameters
font
[in] New value for "Font" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2327

Standard Library

FontSize (Get Method)


Gets the value of "FontSize" property.
int FontSize() const

Returned value
Value of "FontSize" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

FontSize (Set Method)


Sets new value for "FontSize" property.
bool FontSize(
int size

// new font size

Parameters
size
[in] New value for "Font" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2328

Standard Library

Anchor (Get Method)


Gets the value of "Anchor" property.
ENUM_ANCHOR_POINT Anchor() const

Returned value
Value of "Anchor" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Anchor (Set Method)


Sets new value for "Anchor" property.
bool Anchor(
ENUM_ANCHOR_POINT anchor

// new value

Parameters
anchor
[in] New value for "Anchor" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2329

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2330

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2331

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_TEXT for CChartObjectText).

2000-2014, MetaQuotes Software Corp.

2332

Standard Library

CChartObjectLabel
Class CChartObjectLabel is a class for simplified access to "Label" graphic object properties.

Description
Class CChartObjectLabel provides access to "Label" object properties.

Declaration
class CChartObjectLabel : public CChartObjectText

Title
#include <ChartObjects\ChartObjectsTxtControls.mqh>

Class Methods
Create
Create

Creates graphic object "Label"

Properties
X_Distance

Gets/Sets property "X_Distance"

Y_Distance

Gets/Sets property "Y_Distance"

X_Size

Gets/Sets property "X_Size"

Y_Size

Gets/Sets property "Y_Size"

Corner

Gets/Sets property "Corner"

Time

"Gag" for Time Coordinate change

Price

"Gag" for Price Coordinate change

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectEdit
See also
Object types, Object properties, Chart angle, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2333

Standard Library

Create
Creates graphic object "Label".
bool Create(
long

chart_id,

// Chart identifier

string name,

// Object name

int

window,

// Chart window

int

X,

// X coordinate

int

// Y coordinate

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
X
[in] X coordinate.
Y
[in] Y coordinate.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2334

Standard Library

X_Distance (Get Method)


Gets the value of "X_Distance" property.
int X_Distance() const

Returned value
Value of "X_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Distance (Set Method)


Sets new value for "X_Distance" property.
bool X_Distance(
int X

// new value

Parameters
X
[in] New value for "X_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2335

Standard Library

Y_Distance (Get Method)


Gets the value of "Y_Distance" property.
int Y_Distance() const

Returned value
Value of "Y_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Distance (Set Method)


Sets new value for "Y_Distance" property.
bool Y_Distance(
int Y

// new value

Parameters
Y
[in] New value for "Y_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2336

Standard Library

X_Size
Gets the value of "X_Size" property.
int X_Size() const

Returned value
Value of "X_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2337

Standard Library

Y_Size
Gets the value of "Y_Size" property.
int Y_Size() const

Returned value
Value of "Y_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2338

Standard Library

Corner (Get Method)


Gets the value of "Corner" property.
ENUM_BASE_CORNER Corner() const

Returned value
Value of "Corner" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Corner (Set Method)


Sets new value for "Corner" property.
bool Corner(
ENUM_BASE_CORNER corner

// new value

Parameters
corner
[in] New value for "Corner" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2339

Standard Library

Time
Prohibits changes of the time coordinate.
bool Time(
datetime time

// any value

Parameters
time
[in] Any value of datetime type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2340

Standard Library

Price
Prohibits changes of the price coordinate.
bool Price(
double price

// any value

Parameters
price
[in] Any value of double type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2341

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2342

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2343

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_LABEL for CChartObjectLabel).

2000-2014, MetaQuotes Software Corp.

2344

Standard Library

CChartObjectEdit
Class CChartObjectEdit is a class for simplified access to "Edit" graphic object properties.

Description
Class CChartObjectEdit provides access to "Edit" object properties.

Declaration
class CChartObjectEdit : public CChartObjectLabel

Title
#include <ChartObjects\ChartObjectsTxtControls.mqh>

Class Methods
Create
Create

Creates "Edit" graphic object

Properties
TextAlign

Gets/Sets "TextAlign" property

X_Size

Gets "X Size" property

Y_Size

Gets "Y Size" property

BackColor

Gets/Sets "Background Color" property

BorderColor

Gets/Sets "Border Color" property

Angle

Gets/Sets "Angle" property

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

Derived classes:
CChartObjectButton
See also
Object types, Object properties, Chart angle, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2345

Standard Library

Create
Creates graphic object "Edit".
bool Create(
long

chart_id,

// Chart identifier

string name,

// Object name

int

window,

// Chart window

int

X,

// X coordinate

int

Y,

// Y coordinate

int

sizeX,

// X size

int

sizeY

// Y size

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
X
[in] X coordinate.
Y
[in] Y coordinate.
sizeX
[in] X size.
sizeY
[in] Y size.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2346

Standard Library

TextAlign (Get method)


Gets the value of "TextAlign" property (text alignment mode).
ENUM_ALIGN_MODE TextAlign() const

Returned value
Value of "TextAlign" property of the object, assigned to the class instance.

TextAlign (Set method)


Sets the value of "TextAlign" property (text aligment mode).
bool TextAlign(
ENUM_ALIGN_MODE align

// new value

Parameters
align
[in] New value of "TextAlign" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2347

Standard Library

X_Size
Sets new value for "X_Size" property.
bool X_Size(
int size

// new size

Parameters
size
[in] New value for "X_Size" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2348

Standard Library

Y_Size
Sets new value for "Y_Size" property.
bool Y_Size(
int size

// new size

Parameters
size
[in] New value for "Y_Size" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2349

Standard Library

BackColor (Get Method)


Gets the value of "BackColor" property.
color BackColor() const

Returned value
Value of "BackColor" property of the object, assigned to the class instance. If there is no object
assigned, it returns CLR_NONE.

BackColor (Set Method)


Sets new value for "BackColor" property.
bool BackColor(
color new_color

// new background color

Parameters
new_color
[in] New value for "BackColor" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2350

Standard Library

BorderColor (Get Method)


Gets the value of "Border Color" property.
color BorderColor() const

Returned value
Value of "Border Color" property of the object, assigned to the class instance. If there is no object
assigned, it returns CLR_NONE.

BorderColor (Set Method)


Sets new value for "Border Color" property.
bool BorderColor(
color new_color

// new border color

Parameters
new_color
[in] New value for "Border Color" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2351

Standard Library

Angle
Prohibits changes of the "Angle" property.
bool Angle(
double angle

// any value

Parameters
angle
[in] Any value of double type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2352

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2353

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2354

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_EDIT for CChartObjectEdit).

2000-2014, MetaQuotes Software Corp.

2355

Standard Library

CChartObjectButton
Class CChartObjectButton is a class for simplified access to "Button" graphic object properties.

Description
Class CChartObjectButton provides access to "Button" object properties.

Declaration
class CChartObjectButton : public CChartObjectEdit

Title
#include <ChartObjects\ChartObjectsTxtControls.mqh>

Class Methods
Create
Create

Inherited form class CChartObjectEdit

Properties
State

Gets/Sets button state (Pressed/Depressed)

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Object properties, Chart angle, Methods of binding sites, Graphic objects

2000-2014, MetaQuotes Software Corp.

2356

Standard Library

State (Get Method)


Gets the value of "State" property.
bool State() const

Returned value
Value of "State" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

State (Set Method)


Sets new value for "State" property.
bool State(
bool state

// new state value

Parameters
X
[in] New value for "State" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2357

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2358

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2359

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_BUTTON for CChartObjectButton).

2000-2014, MetaQuotes Software Corp.

2360

Standard Library

CChartObjectSubChart
Class CChartObjectSubChart is a class for simplified access to "Chart" graphic object properties.

Description
Class CChartObjectSubChart provides access to "Chart" object properties.

Declaration
class CChartObjectSubChart : public CChartObject

Title
#include <ChartObjects\ChartObjectSubChart.mqh>

Class Methods
Create
Create

Creates graphic object "Chart"

Properties
X_Distance

Gets/Sets property "X_Distance"

Y_Distance

Gets/Sets property "Y_Distance"

Corner

Gets/Sets property "Corner"

X_Size

Gets/Sets property "X_Size"

Y_Size

Gets/Sets property "Y_Size"

Symbol

Gets/Sets property "Symbol"

Period

Gets/Sets property "Period"

Scale

Gets/Sets property "Scale"

DateScale

Gets/Sets property "Show date scale"

PriceScale

Gets/Sets property "Show price scale"

Time

"Gag" for time coordinate change

Price

"Gag" for price coordinate change

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also

2000-2014, MetaQuotes Software Corp.

2361

Standard Library
Object types, Object properties, Chart angle, Graphic objects

2000-2014, MetaQuotes Software Corp.

2362

Standard Library

Create
Creates graphic object "SubChart".
bool Create(
long

chart_id,

// Chart identifier

string name,

// Object name

int

window,

// Chart window

int

X,

// X coordinate

int

Y,

// Y coordinate

int

sizeX,

// X size

int

sizeY

// Y size

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
X
[in] X coordinate.
Y
[in] Y coordinate.
sizeX
[in] X size.
sizeY
[in] Y size.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2363

Standard Library

X_Distance (Get Method)


Gets the value of "X_Distance" property.
int X_Distance() const

Returned value
Value of "X_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Distance (Set Method)


Sets new value for "X_Distance" property.
bool X_Distance(
int X

// new value

Parameters
X
[in] New value for "X_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2364

Standard Library

Y_Distance (Get Method)


Gets the value of "Y_Distance" property.
int Y_Distance() const

Returned value
Value of "Y_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Distance (Set Method)


Sets new value for "Y_Distance" property.
bool Y_Distance(
int Y

// new value

Parameters
Y
[in] New value for "Y_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2365

Standard Library

Corner (Get Method)


Gets the value of "Corner" property.
ENUM_BASE_CORNERCorner() const

Returned value
Value of "Corner" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Corner (Set Method)


Sets new value for "Corner" property.
bool Corner(
ENUM_BASE_CORNER corner

// new value

Parameters
corner
[in] New value for "Corner" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2366

Standard Library

X_Size (Get Method)


Gets the value of "X_Size" property.
int X_Size() const

Returned value
Value of "X_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Size (Set Method)


Sets new value for "X_Size" property.
bool X_Size(
int X

// new value

Parameters
X
[in] New value for "X_Size" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2367

Standard Library

Y_Size (Get Method)


Gets the value of "Y_Size" property.
int Y_Size() const

Returned value
Value of "Y_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Size (Set Method)


Sets new value for "Y_Size" property.
bool Y_Size(
int Y

// new value

Parameters
Y
[in] New value for "Y_Size" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2368

Standard Library

Symbol (Get Method)


Gets the value of "Symbol" property.
string Symbol() const

Returned value
Value of "Symbol" property of the object, assigned to the class instance. If there is no object
assigned, it returns "".

Symbol (Set Method)


Sets new value for "Symbol" property.
bool Symbol(
string symbol

// new symbol

Parameters
symbol
[in] New value for "Symbol" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2369

Standard Library

Period (Get Method)


Gets the value of "Period" property.
int Period() const

Returned value
Value of "Period" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Period (Set Method)


Sets new value for "Period" property.
bool Period(
int period

// new period

Parameters
period
[in] New value for "Period" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2370

Standard Library

Scale (Get Method)


Gets the value of "Scale" property.
double Scale() const

Returned value
Value of "Scale" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

Scale (Set Method)


Sets new value for "Scale" property.
bool Scale(
double scale

// new scale

Parameters
scale
[in] New value for "Scale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2371

Standard Library

DateScale (Get Method)


Gets the value of "DateScale" property.
bool DateScale() const

Returned value
Value of "DateScale" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

DateScale (Set Method)


Sets new value for "DateScale" property.
bool DateScale(
bool scale

// new value

Parameters
scale
[in] New value for "DateScale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2372

Standard Library

PriceScale (Get Method)


Gets the value of "PriceScale" property.
bool PriceScale() const

Returned value
Value of "PriceScale" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

PriceScale (Set Method)


Sets new value for "PriceScale" property.
bool PriceScale(
bool scale

// new value

Parameters
scale
[in] New value for "PriceScale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2373

Standard Library

Time
Prohibits changes of the time coordinate.
bool Time(
datetime time

// any value

Parameters
time
[in] Any value of datetime type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2374

Standard Library

Price
Prohibits changes of the price coordinate.
bool Price(
double price

// any value

Parameters
price
[in] Any value of double type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2375

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2376

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2377

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_CHART for CChartObjectSubChart).

2000-2014, MetaQuotes Software Corp.

2378

Standard Library

CChartObjectBitmap
Class CChartObjectBitmap is a class for simplified access to "Bitmap" graphic object properties.

Description
Class CChartObjectBitmap provides access to "Bitmap" object properties.

Declaration
class CChartObjectBitmap : public CChartObject

Title
#include <ChartObjects\ChartObjectsBmpControls.mqh>

Class Methods
Create
Create

Creates graphic object "Bitmap"

Properties
BmpFile

Gets/Sets property "BMP Filename"

X_Offset

Gets/Sets property "X_Offset"

Y_Offset

Gets/Sets property "Y_Offset"

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Object properties, Graphic objects

2000-2014, MetaQuotes Software Corp.

2379

Standard Library

Create
Creates graphic object "Bitmap".
bool Create(
long

chart_id,

// Chart identifier

string

name,

// Object name

int

window,

// Chart window

datetime time,

// Time coordinate

double

// Price coordinate

price

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] An unique name of the object to create.
window
[in] Chart window number (0 base window).
time
[in] Time coordinate of the anchor point.
price
[in] Price coordinate of the anchor point.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2380

Standard Library

BmpFile (Get Method)


Gets the value of "BmpFile" property.
string BmpFile() const

Returned value
Value of "BmpFile" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

BmpFile (Set Method)


Sets new value for "BmpFile" property.
bool BmpFile(
string name

// new file name

Parameters
X
[in] New value for "BmpFile" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2381

Standard Library

X_Offset (Get Method)


Gets the value of "X_Offset" property (the X coordinate of the upper left corner of the rectangular
visible area in the graphical objects).
int X_Offset() const

Returned value
Value of "X_Offset" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Offset (Set Method)


Sets new value for "X_Offset" property (the X coordinate of the upper left corner of the rectangular
visible area in the graphical objects). The value is set in pixels relative to the upper left corner of the
original image.
bool X_Offset(
int X

// new value

Parameters
X
[in] New value for "X_Offset" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2382

Standard Library

Y_Offset (Get Method)


Gets the value of "Y_Offset" property (the Y coordinate of the upper left corner of the rectangular
visible area in the graphical objects).
int Y_Offset() const

Returned value
Value of "Y_Offset" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Offset (Set Method)


Sets new value for "X_Offset" property (the Y coordinate of the upper left corner of the rectangular
visible area in the graphical objects). The value is set in pixels relative to the upper left corner of the
original image.
bool Y_Offset(
int Y

// new value

Parameters
Y
[in] New value for "Y_Offset" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2383

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2384

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2385

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_BITMAP for CChartObjectBitmap).

2000-2014, MetaQuotes Software Corp.

2386

Standard Library

CChartObjectBmpLabel
Class CChartObjectBmpLabel is a class for simplified access to "Bitmap Label" graphic object
properties.

Description
Class CChartObjectBmpLabel provides access to "Bitmap Label" object properties.

Declaration
class CChartObjectBmpLabel : public CChartObject

Title
#include <ChartObjects\ChartObjectsBmpControls.mqh>

Class Methods
Create
Create

Creates graphic object "BmpLabel"

Properties
X_Distance

Gets/Sets property "X_Distance"

Y_Distance

Gets/Sets property "Y_Distance"

X_Offset

Gets/Sets property "X_Offset"

Y_Offset

Gets/Sets property "Y_Offset"

Corner

Gets/Sets property "Corner"

X_Size

Gets/Sets property "X_Size"

Y_Size

Gets/Sets property "Y_Size"

BmpFileOn

Gets/Sets property "BmpFileOn" for button


pressed state (On)

BmpFileOff

Gets/Sets property "BmpFileOff" for button


depressed state (Off)

State

Gets/Sets property "Button State" (Pressed/


Depressed)

Time

"Gag" for time coordinate change

Price

"Gag" for price coordinate change

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

2000-2014, MetaQuotes Software Corp.

2387

Standard Library

virtual Type

Virtual method of identification

See also
Object types, Object properties, Chart angle, Graphic objects

2000-2014, MetaQuotes Software Corp.

2388

Standard Library

Create
Creates graphic object "BmpLabel".
bool Create(
long

chart_id,

// Chart identifier

string name,

// Object name

int

window,

// Chart window

int

X,

// X coordinate

int

// Y coordinate

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] A unique name of the object to create.
window
[in] Chart window number (0 base window).
X
[in] X coordinate.
Y
[in] Y coordinate.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2389

Standard Library

X_Distance (Get Method)


Gets the value of "X_Distance" property.
int X_Distance() const

Returned value
Value of "X_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Distance (Set Method)


Sets new value for "X_Distance" property.
bool X_Distance(
int X

// new value

Parameters
X
[in] New value for "X_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2390

Standard Library

Y_Distance (Get Method)


Gets the value of "Y_Distance" property.
int Y_Distance() const

Returned value
Value of "Y_Distance" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Distance (Set Method)


Sets new value for "Y_Distance" property.
bool Y_Distance(
int Y

// new value

Parameters
Y
[in] New value for "Y_Distance" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2391

Standard Library

X_Offset (Get Method)


Gets the value of "X_Offset" property (the X coordinate of the upper left corner of the rectangular
visible area in the graphical objects).
int X_Offset() const

Returned value
Value of "X_Offset" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

X_Offset (Set Method)


Sets new value for "X_Offset" property (the X coordinate of the upper left corner of the rectangular
visible area in the graphical objects). The value is set in pixels relative to the upper left corner of the
original image.
bool X_Offset(
int X

// new value

Parameters
X
[in] New value for "X_Offset" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2392

Standard Library

Y_Offset (Get Method)


Gets the value of "Y_Offset" property (the Y coordinate of the upper left corner of the rectangular
visible area in the graphical objects).
int Y_Offset() const

Returned value
Value of "Y_Offset" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Y_Offset (Set Method)


Sets new value for "X_Offset" property (the Y coordinate of the upper left corner of the rectangular
visible area in the graphical objects). The value is set in pixels relative to the upper left corner of the
original image.
bool Y_Offset(
int Y

// new value

Parameters
Y
[in] New value for "Y_Offset" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2393

Standard Library

Corner (Get Method)


Gets the value of "Corner" property.
ENUM_BASE_CORNERCorner() const

Returned value
Value of "Corner" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Corner (Set Method)


Sets new value for "Corner" property.
bool Corner(
ENUM_BASE_CORNER corner

// new value

Parameters
corner
[in] New value for "Corner" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2394

Standard Library

X_Size
Gets the value of "X_Size" property.
int X_Size() const

Returned value
Value of "X_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2395

Standard Library

Y_Size
Gets the value of "Y_Size" property.
int Y_Size() const

Returned value
Value of "Y_Size" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2396

Standard Library

BmpFileOn (Get Method)


Gets the value of "BmpFileOn" property.
string BmpFileOn() const

Returned value
Value of "BmpFileOn" property of the object, assigned to the class instance. If there is no object
assigned, it returns "".

BmpFileOn (Set Method)


Sets new value for "BmpFileOn" property.
bool BmpFileOn(
string name

// file name

Parameters
name
[in] New value for "BmpFileOn" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2397

Standard Library

BmpFileOff (Get Method)


Gets the value of "BmpFileOff" property.
string BmpFileOff() const

Returned value
Value of "BmpFileOff" property of the object, assigned to the class instance. If there is no object
assigned, it returns "".

BmpFileOff (Set Method)


Sets new value for "BmpFileOff" property.
bool BmpFileOff(
string name

// file name

Parameters
name
[in] New value for "BmpFileOff" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2398

Standard Library

State (Get Method)


Gets the value of "State" property.
bool State() const

Returned value
Value of "State" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

State (Set Method)


Sets new value for "State" property.
bool State(
bool state

// new state value

Parameters
X
[in] New value for "State" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2399

Standard Library

Time
Prohibits changes of the time coordinate.
bool Time(
datetime time

// any value

Parameters
time
[in] Any value of datetime type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2400

Standard Library

Price
Prohibits changes of the price coordinate.
bool Price(
double price

// any value

Parameters
price
[in] Any value of double type.
Returned value
always false.

2000-2014, MetaQuotes Software Corp.

2401

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2402

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2403

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_BITMAP_LABEL for CChartObjectBmpLabel).

2000-2014, MetaQuotes Software Corp.

2404

Standard Library

CChartObjectRectLabel
Class CChartObjectRectLabel is a class for simplified access to "Rectangle Label" graphic object
properties.

Description
Class CChartObjectRectLabel provides access to "Rectangle Label" object properties.

Declaration
class CChartObjectRectLabel : public CChartObjectLabel

Title
#include <ChartObjects\ChartObjectsTxtControls.mqh>

Class Methods
Create
Create

Creates "RectLabel" graphic object

Properties
X_Size

Sets the horizontal size

Y_Size

Sets the vertical size

BackColor

Gets/Sets the background color

Angle

A gag method

BorderType

Gets/Sets type of the border

Input/output
virtual Save

Virtual method for writing to file

virtual Load

Virtual method for reading from file

virtual Type

Virtual method of identification

See also
Object types, Object properties, Graphic objects

2000-2014, MetaQuotes Software Corp.

2405

Standard Library

Create
Creates the "CChartObjectRectLabel" graphic object.
bool Create(
long

chart_id,

// Chart ID

string name,

// Object name

int

window,

// Chart window

int

X,

// X coordinate

int

Y,

// Y coordinate

int

sizeX,

// Horizontal size

int

sizeY

// Vertical size

Parameters
chart_id
[in] Chart identifier (0 current chart).
name
[in] A unique name of the object to create.
window
[in] Chart window number (0 base window).
X
[in] X coordinate.
Y
[in] Y coordinate.
sizeX
[in] Horizontal size.
sizeY
[in] Vertical size.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2406

Standard Library

X_Size
Sets the value of "X_Size" property.
bool X_Size(
int size

// Horizontal size

Parameters
size
[in] New horizontal size.
Returned value
true if successful, false if the property hasn't been changed.
Note
To get the values of "X_Size" and "Y_Size" properties use the X_Size and Y_Size methods of the
parent CChartObjectLabel class.

2000-2014, MetaQuotes Software Corp.

2407

Standard Library

Y_Size
Sets the value of "Y_Size" property.
bool Y_Size(
int size

// Vertical size

Parameters
size
[in] New vertical size.
Returned value
true if successful, false if the property hasn't been changed.
Note
To get the values of "X_Size" and "Y_Size" properties use the X_Size and Y_Size methods of the
parent CChartObjectLabel class.

2000-2014, MetaQuotes Software Corp.

2408

Standard Library

BackColor
Gets the background color.
color BackColor() const

Returned value
Background color of the object, assigned to the class instance. If there is no object assigned, it
returns 0.

BackColor
Sets the background color.
bool BackColor(
color new_color

// New color

Parameters
new_color
[in] New background color.
Returned value
true if successful, false if property hasn't been changed.

2000-2014, MetaQuotes Software Corp.

2409

Standard Library

Angle
A gag method.
bool Angle(
double angle

// any value

Parameters
angle
[in] Any value of double type.
Returned value
Always false.

2000-2014, MetaQuotes Software Corp.

2410

Standard Library

BorderType
Gets border type.
int BorderType() const

Returned value
Border type of the object, assigned to the class instance. If there is no object assigned, it returns 0.

BorderType
Sets border type.
bool BorderType(
int type

// Border type

Parameters
type
[in] New border type.
Returned value
true if successful, false if property hasn't been changed.

2000-2014, MetaQuotes Software Corp.

2411

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2412

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2413

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (OBJ_RECTANGLE_LABEL for CChartObjectRectangleLabel).

2000-2014, MetaQuotes Software Corp.

2414

Standard Library

CCanvas
CCanvas is a class for simplified creation of custom images.

Description
CCanvas provides creation of a graphical resource (with or without binding to a chart object) and
drawing graphic primitives.

Declaration
class CCanvas

Title
#include <Canvas\Canvas.mqh>

Class Methods by Groups


Creating
Create

Creates a graphical resource without binding to


a chart object

CreateBitmap

Creates a graphical resource bound to a chart


object

CreateBitmapLabel

Creates a graphical resource bound to a chart


object

Destroy

Destroys a graphical resource

Properties
ChartObjectName

Receives the name of a bound chart object

ResourceName

Receives the name of a graphical resource

Width

Receives the width of a graphical resource

Height

Receives the height of a graphical resource

LineStyleSet

Sets the line style

Updating an object on the screen


Update

Displays changes on the screen

Resize

Resizes a graphical resource

Erasing/Filling with color


Erase

Erases or fills with the specified color

Data access
PixelGet

Receives color of the dot with the specified


coordinates

2000-2014, MetaQuotes Software Corp.

2415

Standard Library

PixelSet

Sets color of the dot with the specified


coordinates

Drawing primitives
LineVertical

Draws a vertical line

LineHorizontal

Draws a horizontal line

Line

Draws a freehand line

Polyline

Draws a polyline

Polygon

Draws a polygon

Rectangle

Draws a rectangle

Circle

Draws a circle

Triangle

Draws a triangle

Drawing filled primitives


FillRectangle

Draws a filled rectangle

FillCircle

Draws a filled circle

FillTriangle

Draws a filled triangle

Fill

Fills an area

Drawing primitives with antialiasing


PixelSetAA

Draws a pixel

LineAA

Draws a line

PolylineAA

Draws a polyline

PolygonAA

Draws a polygon

TriangleAA

Draws a triangle

CircleAA

Draws a circle

Text
FontSet

Sets font parameters

FontNameSet

Sets font name

FontSizeSet

Sets font size

FontFlagsSet

Sets font flags

FontAngleSet

Sets font slope angle

FontGet

Receives font parameters

FontNameGet

Receives font name

FontSizeGet

Receives font size

FontFlagsGet

Receives font flags

2000-2014, MetaQuotes Software Corp.

2416

Standard Library

FontAngleGet

Receives font slope angle

TextOut

Displays text

TextWidth

Receives the text width

TextHeight

Receives the text height

TextSize

Receives the text size

Transparency
TransparentLevelSet

Sets transparency level

Input/output
LoadFromFile

Reads an image from a BMP file

2000-2014, MetaQuotes Software Corp.

2417

Standard Library

ChartObjectName
Receives the name of a bound chart object.
string ChartObjectName();

Returned value
the name of a bound chart object

2000-2014, MetaQuotes Software Corp.

2418

Standard Library

Circle
Draws a circle
void Circle(
int

x,

// X coordinate

int

y,

// Y coordinate

int

r,

// radius

const uint clr

// color

);

Parameters
x
[in] X coordinate of the center of the circle.
y
[in] Y coordinate of the center of the circle.
r
[in] Circle radius.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2419

Standard Library

CircleAA
Draws a circle using antialiasing algorithm
void CircleAA(
const int

x,

// X coordinate

const int

y,

// Y coordinate

const double r,

// radius

const uint

// color

clr

);

Parameters
x
[in] X coordinate of the center of the circle.
y
[in] Y coordinate of the center of the circle.
r
[in] Circle radius.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2420

Standard Library

Create
Creates a graphical resource without binding to a chart object.
virtual bool Create(
const string

name,

// name

const int

width,

// width

const int

height,

// height

ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA

// format

);

Parameters
name
[in] Basis for a graphical resource name. A resource name is generated during the creation by
adding a pseudorandom string.
width
[in] Width (size along X axis) in pixels.
height
[in] Height (size along Y axis) in pixels.
clrfmt=COLOR_FORMAT_XRGB_NOALPHA
[in] Color processing method. See ResourceCreate() function description to learn more about color
processing methods.
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2421

Standard Library

CreateBitmap
Creates a graphical resource bound to a chart object.
1. Creates a graphical resource in the main window of the current chart.
bool CreateBitmap(
const string

name,

// name

const datetime

time,

// time

const double

price,

// price

const int

width,

// width

const int

height,

// height

ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA

// format

);

2. Creates a graphical resource using a chart ID and a subwindow number.


bool CreateBitmap(
const long

chart_id,

// chart ID

const int

subwin,

// subwindow number

const string

name,

// name

const datetime

time,

// time

const double

price,

// price

const int

width,

// width

const int

height,

// height

ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA
);

Parameters
chart_id
[in] Chart ID for creating an object.
subwin
[in] Chart subwindow number for creating an object.
name
[in] Chart object name and a basis for a graphical resource name.
time
[in] Chart object anchor point time coordinate.
price
[in] Chart object anchor point price coordinate.
width
[in] Graphical resource width (size along X axis) in pixels.
height
[in] Graphical resource height (size along Y axis) in pixels.
clrfmt=COLOR_FORMAT_XRGB_NOALPHA

2000-2014, MetaQuotes Software Corp.

// format

2422

Standard Library
[in] Color processing method. See ResourceCreate() function description to learn more about color
processing methods.
Returned value
true - if successful, otherwise - false
Note
If the first function version is used, the object is created in the main window of the current chart.
Object size coincides with the size of a graphical resource.

2000-2014, MetaQuotes Software Corp.

2423

Standard Library

CreateBitmapLabel
Creates a graphical resource bound to a chart object.
1. Creates a graphical resource in the main window of the current chart.
bool CreateBitmapLabel(
const string

name,

// name

const int

x,

// X coordinate

const int

y,

// Y coordinate

const int

width,

// width

const int

height,

// height

ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA

// format

);

2. Creates a graphical resource using a chart ID and a subwindow number.


bool CreateBitmapLabel(
const long

chart_id,

// chart ID

const int

subwin,

// subwindow number

const string

name,

// name

const int

x,

// X coordinate

const int

y,

// Y coordinate

const int

width,

// width

const int

height,

// height

ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA
);

Parameters
chart_id
[in] Chart ID for creating an object.
subwin
[in] Chart subwindow number for creating an object.
name
[in] Chart object name and a basis for a graphical resource name.
x
[in] Chart object anchor point X coordinate.
y
[in] Chart object anchor point Y coordinate.
width
[in] Graphical resource width (size along X axis) in pixels.
height
[in] Graphical resource height (size along Y axis) in pixels.
clrfmt=COLOR_FORMAT_XRGB_NOALPHA

2000-2014, MetaQuotes Software Corp.

// format

2424

Standard Library
[in] Color processing method. See ResourceCreate() function description to learn more about color
processing methods.
Returned value
true - if successful, otherwise - false
Note
If the first function version is used, the object is created in the main window of the current chart.
Object size coincides with the size of a graphical resource.

2000-2014, MetaQuotes Software Corp.

2425

Standard Library

Destroy
Destroys a graphical resource.
void Destroy();

Note
If a graphical resource has been bound to a chart object, the latter is deleted.

2000-2014, MetaQuotes Software Corp.

2426

Standard Library

Erase
Erases or fills with the specified color.
void Erase(
const uint clr=0

// color

);

Parameters
clr=0
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2427

Standard Library

Fill
Fills an area.
void Fill(
int

x,

// X coordinate

int

y,

// Y coordinate

const uint clr

// color

);

Parameters
x
[in] X coordinate of filling starting point.
y
[in] Y coordinate of filling starting point.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2428

Standard Library

FillCircle
Draws a filled circle.
void FillCircle(
int

x,

// X coordinate

int

y,

// Y coordinate

int

r,

// radius

const uint clr

// color

);

Parameters
x
[in] X coordinate of a filled circle center.
y
[in] Y coordinate of a filled circle center.
r
[in] Filled circle radius.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2429

Standard Library

FillRectangle
Draws a filled rectangle.
void FillRectangle(
int

x1,

// X coordinate

int

y1,

// Y coordinate

int

x2,

// X coordinate

int

y2,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] X coordinate of the first point forming a rectangle.
y1
[in] Y coordinate of the first point forming a rectangle.
x2
[in] X coordinate of the second point forming a rectangle.
y2
[in] Y coordinate of the second point forming a rectangle.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2430

Standard Library

FillTriangle
Draws a filled triangle.
void FillTriangle(
int

x1,

// X coordinate

int

y1,

// Y coordinate

int

x2,

// X coordinate

int

y2,

// Y coordinate

int

x3,

// X coordinate

int

y3,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] X coordinate of the triangle's first corner.
y1
[in] Y coordinate of the triangle's first corner.
x2
[in] X coordinate of the triangle's second corner.
y2
[in] Y coordinate of the triangle's second corner.
x3
[in] X coordinate of the triangle's third corner.
y3
[in] Y coordinate of the triangle's third corner.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2431

Standard Library

FontAngleGet
Receives font slope angle.
uint FontAngleGet();

Returned value
font slope angle

2000-2014, MetaQuotes Software Corp.

2432

Standard Library

FontAngleSet
Sets font slope angle.
bool FontAngleSet(
uint angle

// angle

);

Parameters
angle
[in] Font slope angle in tenths of a degree.
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2433

Standard Library

FontFlagsGet
Receives font flags.
uint FontFlagsGet();

Returned value
font flags

2000-2014, MetaQuotes Software Corp.

2434

Standard Library

FontFlagsSet
Sets font flags.
bool FontFlagsSet(
uint flags

// flags

);

Parameters
flags
[in] Font creation flags. See TextSetFont() function description to learn more about the flags.
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2435

Standard Library

FontGet
Receives the current font parameters.
void FontGet(
string& name,

// name

int&

size,

// size

uint&

flags,

// flags

uint&

angle

// slope angle

);

Parameters
name
[out] Reference to the variable for returning a font name.
size
[out] Reference to the variable for returning a font size.
flags
[out] Reference to the variable for returning font flags.
angle
[out] Reference to the variable for returning a font slope angle.

2000-2014, MetaQuotes Software Corp.

2436

Standard Library

FontNameGet
Receives font name.
string FontNameGet();

Returned value
font name

2000-2014, MetaQuotes Software Corp.

2437

Standard Library

FontNameSet
Sets font name.
bool FontNameSet(
string name

// name

);

Parameters
name
[in] Font name. For example, "Arial".
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2438

Standard Library

FontSet
Sets the current font.
bool FontSet(
const string name,

// name

const int

size,

// size

const uint

flags=0,

// flags

const uint

angle=0

// angle

);

Parameters
name
[in] Font name. For example, "Arial".
size
[in] Font size. See TextSetFont() function description to learn more about setting a size.
flags=0
[in] Font creation flags. See TextSetFont() function description to learn more about the flags.
angle=0
[in] Font slope angle in tenths of a degree.
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2439

Standard Library

FontSizeGet
Receives font size.
int FontSizeGet();

Returned value
font size

2000-2014, MetaQuotes Software Corp.

2440

Standard Library

FontSizeSet
Sets font size.
bool FontSizeSet(
int size

// size

);

Parameters
size
[in] Font size. See TextSetFont() function description to learn more about setting a size.
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2441

Standard Library

Height
Receives the height of a graphical resource.
int Height();

Returned value
height of a graphical resource

2000-2014, MetaQuotes Software Corp.

2442

Standard Library

Line
Draws a segment of a freehand line.
void Line(
int

x1,

// X coordinate

int

y1,

// Y coordinate

int

x2,

// X coordinate

int

y2,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] X coordinate of the segment's first point.
y1
[in] Y coordinate of the segment's first point.
x2
[in] X coordinate of the segment's second point.
y2
[in] Y coordinate of the segment's second point.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2443

Standard Library

LineAA
Draws a segment of a freehand line using antialiasing algorithm.
void LineAA(
const int

x1,

// X coordinate

const int

y1,

// Y coordinate

const int

x2,

// X coordinate

const int

y2,

// Y coordinate

const uint clr,

// color

const uint style=UINT_MAX

// line style

);

Parameters
x1
[in] X coordinate of the segment's first point.
y1
[in] Y coordinate of the segment's first point.
x2
[in] X coordinate of the segment's second point.
y2
[in] Y coordinate of the segment's second point.
clr
[in] Color in ARGB format.
style=UINT_MAX
[in] Line style is one of ENUM_LINE_STYLE enumeration's values or a custom value.

2000-2014, MetaQuotes Software Corp.

2444

Standard Library

LineHorizontal
Draws a segment of a horizontal line.
void LineHorizontal(
int

x1,

// X coordinate

int

x2,

// X coordinate

int

y,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] Segment's X coordinate.
x2
[in] X coordinate of the segment's first point.
y
[in] Y coordinate of the segment's second point.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2445

Standard Library

LineStyleSet
Sets the line style.
void LineStyleSet(
const uint style

// style

);

Parameters
style
[in] Line style.
Note
The input parameter can have any of ENUM_LINE_STYLE enumeration values. Besides, it is possible
to create a custom line drawing style.

2000-2014, MetaQuotes Software Corp.

2446

Standard Library

LineVertical
Draws a segment of a vertical line.
void LineVertical(
int

x,

// X coordinate

int

y1,

// Y coordinate

int

y2,

// Y coordinate

const uint clr

// color

);

Parameters
x
[in] Segment's X coordinate.
y1
[in] Y coordinate of the segment's first point.
y2
[in] Y coordinate of the segment's second point.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2447

Standard Library

LoadFromFile
Reads an image from a BMP file.
bool LoadFromFile(
const string filename

// file name

);

Parameters
filename
[in] File name (including "BMP" extension).
Returned value
true - if successful, otherwise - false

2000-2014, MetaQuotes Software Corp.

2448

Standard Library

PixelGet
Receives color of the point with the specified coordinates.
uint PixelGet(
const int x,

// X coordinate

const int y

// Y coordinate

);

Parameters
x
[in] Point's X coordinate.
y
[in] Point's Y coordinate.
Returned value
Point color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2449

Standard Library

PixelSet
Sets color of the point with the specified coordinates.
void PixelSet(
const int

x,

// X coordinate

const int

y,

// Y coordinate

const uint clr

// color

);

Parameters
x
[in] Point's X coordinate.
y
[in] Point's Y coordinate.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2450

Standard Library

PixelSetAA
Draws a point using antialiasing algorithm.
void PixelSetAA(
const double x,

// X coordinate

const double y,

// Y coordinate

const uint

// color

clr

);

Parameters
x
[in] Point's X coordinate.
y
[in] Point's Y coordinate.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2451

Standard Library

Polygon
Draws a polygon.
void Polygon(
int&

x[],

// array of X coordinates

int&

y[],

// array of Y coordinates

const uint clr

// color

);

Parameters
x[]
[in] Array of X coordinates of a polygon points.
y[]
[in] Array of Y coordinates of a polygon points.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2452

Standard Library

PolygonAA
Draws a polygon using antialiasing algorithm.
void PolygonAA(
int&

x[],

// array of X coordinates

int&

y[],

// array of Y coordinates

const uint clr,

// color

const uint style=UINT_MAX

// line style

);

Parameters
x[]
[in] Array of X coordinates of a polygon points.
y[]
[in] Array of Y coordinates of a polygon points.
clr
[in] Color in ARGB format.
style=UINT_MAX
[in] Line style is one of ENUM_LINE_STYLE enumeration's values or a custom value.

2000-2014, MetaQuotes Software Corp.

2453

Standard Library

Polyline
Draws a polyline.
void Polyline(
int&

x[],

// array of X coordinates

int&

y[],

// array of Y coordinates

const uint clr

// color

);

Parameters
x[]
[in] Array of X coordinates of a polyline.
y[]
[in] Array of Y coordinates of a polyline.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2454

Standard Library

PolylineAA
Draws a polyline using antialiasing algorithm.
void PolylineAA(
int&

x[],

// array of X coordinates

int&

y[],

// array of Y coordinates

const uint clr,

// color

const uint style=UINT_MAX

// line style

);

Parameters
x[]
[in] Array of X coordinates of a polyline.
y[]
[in] Array of Y coordinates of a polyline.
clr
[in] Color in ARGB format.
style=UINT_MAX
[in] Line style is one of ENUM_LINE_STYLE enumeration's values or a custom value.

2000-2014, MetaQuotes Software Corp.

2455

Standard Library

Rectangle
Draws a rectangle using two points.
void Rectangle(
int

x1,

// X coordinate

int

y1,

// Y coordinate

int

x2,

// X coordinate

int

y2,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] X coordinate of the first point forming a rectangle.
y1
[in] Y coordinate of the first point forming a rectangle.
x2
[in] X coordinate of the second point forming a rectangle.
y2
[in] Y coordinate of the second point forming a rectangle.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2456

Standard Library

Resize
Resizes a graphical resource.
bool Resize(
const int width,

// width

const int height

// height

);

Parameters
width
[in] New width of a graphical resource.
height
[in] New height of a graphical resource.
Returned value
true - if successful, otherwise - false
Note
When resizing, the previous image is not saved.

2000-2014, MetaQuotes Software Corp.

2457

Standard Library

ResourceName
Receives the name of a graphical resource.
string ResourceName();

Returned value
name of a graphical resource

2000-2014, MetaQuotes Software Corp.

2458

Standard Library

TextHeight
Receives the text height.
int TextHeight(
const string text

// text

);

Parameters
text
[in] Text for measuring.
Returned value
text height in pixels
Note
The current font is used for measuring the text.

2000-2014, MetaQuotes Software Corp.

2459

Standard Library

TextOut
Displays text.
void TextOut(
int

x,

// X coordinate

int

y,

// Y coordinate

string

text,

// text

const uint clr,

// color

uint

// alignment

alignment=0

);

Parameters
x
[in] Text anchor's X coordinate.
y
[in] Text anchor's Y coordinate.
text
[in] Text to be displayed.
clr
[in] Color in ARGB format.
alignment=0
[in] Text anchoring method. See TextOut() function description to learn more about anchoring
methods.
Note
The current font is used to display the text.

2000-2014, MetaQuotes Software Corp.

2460

Standard Library

TextSize
Receives the text size.
void TextSize(
const string text,

// text

int&

width,

// width

int&

height

// height

);

Parameters
text
[in] Text for measuring.
width
[out] Reference to the variable for returning a text width.
height
[out] Reference to the variable for returning a text height.
Note
The current font is used to measure the text.

2000-2014, MetaQuotes Software Corp.

2461

Standard Library

TextWidth
Receives the text width.
int TextWidth(
const string text

// text

);

Parameters
text
[in] Text for measuring.
Returned value
text height in pixels
Note
The current font is used to measure the text.

2000-2014, MetaQuotes Software Corp.

2462

Standard Library

TransparentLevelSet
Sets transparency level.
void TransparentLevelSet(
const uchar value

// value

);

Parameters
value
[in] New value of the transparency level.
Note
0 stands for full transparency, while 255 - for full opacity.
Setting of a transparency level affects all that was previously drawn. The specified transparency
level does not affect further constructions.

2000-2014, MetaQuotes Software Corp.

2463

Standard Library

Triangle
Draws a triangle.
void Triangle(
int

x1,

// X coordinate

int

y1,

// Y coordinate

int

x2,

// X coordinate

int

y2,

// Y coordinate

int

x3,

// X coordinate

int

y3,

// Y coordinate

const uint clr

// color

);

Parameters
x1
[in] X coordinate of the triangle's first corner.
y1
[in] Y coordinate of the triangle's first corner.
x2
[in] X coordinate of the triangle's second corner.
y2
[in] Y coordinate of the triangle's second corner.
x3
[in] X coordinate of the triangle's third corner.
y3
[in] Y coordinate of the triangle's third corner.
clr
[in] Color in ARGB format.

2000-2014, MetaQuotes Software Corp.

2464

Standard Library

TriangleAA
Draws a triangle using antialiasing algorithm.
void TriangleAA(
const int

x1,

// X coordinate

const int

y1,

// Y coordinate

const int

x2,

// X coordinate

const int

y2,

// Y coordinate

const int

x3,

// X coordinate

const int

y3,

// Y coordinate

const uint clr,

// color

const uint style=UINT_MAX

// line style

);

Parameters
x1
[in] X coordinate of the triangle's first corner.
y1
[in] Y coordinate of the triangle's first corner.
x2
[in] X coordinate of the triangle's second corner.
y2
[in] Y coordinate of the triangle's second corner.
x3
[in] X coordinate of the triangle's third corner.
y3
[in] Y coordinate of the triangle's third corner.
clr
[in] Color in ARGB format.
style=UINT_MAX
[in] Line style is one of ENUM_LINE_STYLE enumeration's values or a custom value.

2000-2014, MetaQuotes Software Corp.

2465

Standard Library

Update
Displays changes on the screen.
void Update(
const bool redraw=true

// flag

);

Parameters
redraw=true
Flag of a chart redrawing necessity.

2000-2014, MetaQuotes Software Corp.

2466

Standard Library

Width
Receives the width of a graphical resource.
int Width();

Returned value
graphical resource width

2000-2014, MetaQuotes Software Corp.

2467

Standard Library

CChart
Class CChart is a class for simplified access to "Chart" graphic object properties.

Description
Class CChart provides access to "Chart" object properties.

Declaration
class CChart : public CObject

Title
<Charts\Chart.mqh>

Class Methods
Access to protected data
ChartID

Gets identifier of the chart

General properties
Mode

Gets/Sets the value of "Mode" property (bar,


candle or line)

Foreground

Gets/Sets the value of "Foreground" property

Shift

Gets/Sets the value of "Shift" property

ShiftSize

Gets/Sets the value of "ShiftSize" property (in


percents)

AutoScroll

Gets/Sets the value of "AutoScroll" property

Scale

Gets/Sets the value of "Scale" property

ScaleFix

Gets/Sets the value of "ScaleFix" property


(fixed chart scale or not)

ScaleFix_11

Gets/Sets the value of "ScaleFix_11" property


(chart scale is 1:1, or not)

FixedMax

Gets/Sets the value of "FixedMax" property


(fixed maximal price)

FixedMin

Gets/Sets the value of "FixedMin" property


(fixed minimal price)

ScalePPB

Gets/Sets the value of "ScalePPB" property


(scale is "point per bar" or not)

PointsPerBar

Gets/Sets the value of "PointsPerBar" property


(in points per bar)

Show properties

2000-2014, MetaQuotes Software Corp.

2468

Standard Library

ShowOHLC

Gets/Sets the value of "ShowOHLC" property

ShowLineBid

Gets/Sets the value of "ShowLineBid" property

ShowLineAsk

Gets/Sets the value of "ShowLineAsk" property

ShowLastLine

Gets/Sets the value of "ShowLastLine" property

ShowPeriodSep

Gets/Sets the value of "ShowPeriodSep"


property (show period separators)

ShowGrid

Gets/Sets the value of "ShowGrid" property

ShowVolumes

Gets/Sets the value of "ColorVolumes" property


(color for volumes and levels of opened
positions)

ShowObjectDescr

Gets/Sets the value of "ShowObjectDescr"


property (show description for graphic objects)

ShowDateScale

Sets the value of "ShowDateScale" property


(date scale of the chart)

ShowPriceScale

Sets the value of "ShowPriceScale" property


(price scale of the chart)

Colors properties
ColorBackground

Gets/Sets the value of "ColorBackground"


property (background color of the chart)

ColorForeground

Gets/Sets the value of "ColorForeground"


property (color of axes, scale and OHLC strings
of the chart)

ColorGrid

Gets/Sets the value of "ColorGrid" property


(color of the grid)

ColorBarUp

Gets/Sets the value of "ColorBarUp" property


(color for bull bars, its shadow and candle body
outlines)

ColorBarDown

Gets/Sets the value of "ColorBarDown" property


(color for bear bars, its shadow and candle body
outlines)

ColorCandleBull

Gets/Sets the value of "ColorCandleBull"


property (body color of the bull candle)

ColorCandleBear

Gets/Sets the value of "ColorCandleBear"


property (body color of the bear candle)

ColorChartLine

Gets/Sets the value of "ColorChartLine"


property (color for line chart and Doji candles)

ColorVolumes

Gets/Sets the value of "ColorVolumes" property


(color for volumes and levels of opened
positions)

2000-2014, MetaQuotes Software Corp.

2469

Standard Library

ColorLineBid

Gets/Sets the value of "ColorLineBid" property


(color of Bid line)

ColorLineAsk

Gets/Sets the value of "ColorLineAsk" property


(color of Ask line)

ColorLineLast

Gets/Sets the value of "ColorLineLast" property


(color of the last deal price line)

ColorStopLevels

Gets/Sets the value of "ColorStopLevels"


property (color of the SL and TP levels)

Read only properties


VisibleBars

Gets total number of visible chart bars

WindowsTotal

Gets total number of chart windows, including


the chart indicator subwindows

WindowIsVisible

Gets visibility flag of the specified chart


subwindow

WindowHandle

Gets window handle of the chart (HWND)

FirstVisibleBar

Gets the number of the first visible bar of the


chart

WidthInBars

Gets window width in bars.

WidthInPixels

Gets subwindow width in pixels.

HeightInPixels

Gets subwindow height in pixels.

PriceMin

Gets minimal price of the specified subwindow

PriceMax

Gets maximal price of the specified subwindow

Properties
Attach

Assigns the current chart to the class instance

FirstChart

Assigns the first chart of the client terminal to


the class instance

NextChart

Assigns the next chart of the client terminal to


the class instance

Open

Opens chart with specified parameters and


assign it to the class instance

Detach

Detaches chart from the class instance

Close

Closes chart, assigned to the class instance

BringToTop

Show chart on top of other charts

EventObjectCreate

Sets a flag to send notifications of an event of


new object creation on a chart

EventObjectDelete

Sets a flag to send notifications of an event of


object deletion on a chart

2000-2014, MetaQuotes Software Corp.

2470

Standard Library

Indicators
IndicatorAdd

Adds an indicator with the specified handle into


a specified chart subwindow

IndicatorDelete

Removes an indicator with a specified name


from the specified chart subwindow

IndicatorsTotal

Returns the number of all indicators applied to


the specified chart subwindow

IndicatorName

Returns the short name of the indicator on the


specified chart subwindow

Navigation
Navigate

Navigates the chart

Access to MQL5 API


Symbol

Gets symbol of the chart

Period

Gets period of the chart

Redraw

Redraws chart, assigned to the class instance

GetInteger

The function returns the


corresponding object property

SetInteger

Sets new value for the property of the integer


type

GetDouble

The function returns the


corresponding object property

SetDouble

Sets new value for the property of the double


type

GetString

The function returns the


corresponding object property

SetString

Sets new value for the property of the string


type

SetSymbolPeriod

Changes symbol and period of the chart,


assigned to the class instance

ApplyTemplate

Applies specified template to the chart

ScreenShot

Creates screenshot of the specified chart and


saves it to .gif file

WindowOnDropped

Gets chart subwindow number corresponding to


the object (expert or script) drop point

PriceOnDropped

Gets price coordinate corresponding to the


object (expert or script) drop point

TimeOnDropped

Gets time coordinate corresponding to the


object (expert or script) drop point

2000-2014, MetaQuotes Software Corp.

value

value

value

of

of

of

the

the

the

2471

Standard Library

XOnDropped

Gets X coordinate corresponding to the object


(expert or script) drop point

YOnDropped

Gets Y coordinate corresponding to the object


(expert or script) drop point

Input/Output
virtual Save

Saves object parameters to file

virtual Load

Loads object parameters from file

virtual Type

Gets graphic object type identifier

2000-2014, MetaQuotes Software Corp.

2472

Standard Library

ChartID
Returns identifier of the chart.
long ChartID() const

Returned value
Chart identifier, assigned to the class instance. If there is no object assigned, it returns -1.

2000-2014, MetaQuotes Software Corp.

2473

Standard Library

Mode (Get Method)


Gets the value of "Mode" property (bar, candle or line).
ENUM_CHART_MODE Mode() const

Returned value
Value of "Mode" property of the object, assigned to the class instance. If there is no object
assigned, it returns WRONG_VALUE.

Mode (Set Method)


Sets new value for "Mode" property (bar, candle or line).
bool Mode(
ENUM_CHART_MODE mode

// new chart mode

Parameters
mode
[in] Chart mode (candle, bar or line) of ENUM_CHART_MODE enumeration.
Returned value
true if successful, false if mode hasn't changed.

2000-2014, MetaQuotes Software Corp.

2474

Standard Library

Foreground (Get Method)


Gets the value of "Foreground" property.
bool Foreground() const

Returned value
Value of "Foreground" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

Foreground (Set Method)


Sets new value for "Foreground" property.
bool Foreground(
bool foreground

// new flag value

Parameters
foreground
[in] New value for "Foreground" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2475

Standard Library

Shift (Get Method)


Gets the value of "Shift" property.
bool Shift() const

Returned value
Value of "Shift" property of the object, assigned to the class instance. If there is no object assigned,
it returns false.

Shift (Set Method)


Sets new value for "Shift" property.
bool Shift(
bool shift

// new flag value

Parameters
shift
[in] New value for "Shift" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2476

Standard Library

ShiftSize (Get Method)


Gets the value of "ShiftSize" property (in percents).
double ShiftSize() const

Returned value
Value of "ShiftSize" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

ShiftSize (Set Method)


Sets new value for "Shift" property (in percents).
bool ShiftSize(
double shift_size

// new property value

Parameters
shift_size
[in] New value for "ShiftSize" property (in percents).
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2477

Standard Library

AutoScroll (Get Method)


Gets the value of "AutoScroll" property.
bool AutoScroll() const

Returned value
Value of "AutoScroll" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

AutoScroll (Set Method)


Sets new value for "AutoScroll" property.
bool AutoScroll(
bool autoscroll

// new flag value

Parameters
autoscroll
[in] New value for "Autoscroll" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2478

Standard Library

Scale (Get Method)


Gets the value of "Scale" property.
int Scale() const

Returned value
Value of "Scale" property of the object, assigned to the class instance. If there is no object
assigned, it returns 0.

Scale (Set Method)


Sets new value for "Scale" property.
bool Scale(
int scale

// new value

Parameters
scale
[in] New value for "Scale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2479

Standard Library

ScaleFix (Get Method)


Gets the value of "ScaleFix" property (fixed chart scale or not).
bool ScaleFix() const

Returned value
Value of "ScaleFix" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

ScaleFix (Set Method)


Sets new value for "ScaleFix" property.
bool ScaleFix(
bool scale_fix

// new value

Parameters
scale_fix
[in] New value for "ScaleFix" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2480

Standard Library

ScaleFix_11 (Get Method)


Gets the value of "ScaleFix_11" property (chart scale is 1:1, or not).
bool ScaleFix_11() const

Returned value
Value of "ScaleFix_11" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

ScaleFix_11 (Set Method)


Sets new value for "ScaleFix_11" property.
bool ScaleFix_11(
string scale_11

// new value

Parameters
scale_11
[in] New value for "ScaleFix_11" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2481

Standard Library

FixedMax (Get Method)


Gets the value of "FixedMax" property (fixed maximal price).
double FixedMax() const

Returned value
Value of "FixedMax" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

FixedMax (Set Method)


Sets new value for "FixedMax" property.
bool FixedMax(
double max

// new fixed maximum

Parameters
max
[in] New value for "FixedMax" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2482

Standard Library

FixedMin (Get Method)


Gets the value of "FixedMin" property (fixed minimal price).
double FixedMin() const

Returned value
Value of "FixedMin" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

FixedMin (Set Method)


Sets new value for "FixedMin" property.
bool FixedMax(
double min

// new fixed minimum

Parameters
max
[in] New value for "FixedMin" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2483

Standard Library

PointsPerBar (Get Method)


Gets the value of "PointsPerBar" property (in points per bar).
double PointsPerBar() const

Returned value
Value of "PointsPerBar" property of the object, assigned to the class instance. If there is no object
assigned, it returns EMPTY_VALUE.

PointsPerBar (Set Method)


Sets new value for "PointsPerBar" property.
bool PointsPerBar(
double ppb

// new scale (in points per bar)

Parameters
ppb
[in] New value for scale (in points per bar).
Returned value
true if successful, false if scale hasn't changed.

2000-2014, MetaQuotes Software Corp.

2484

Standard Library

ScalePPB (Get Method)


Gets the value of "ScalePPB" property (scale is "point per bar" or not).
bool ScalePPB() const

Returned value
Value of "ScalePPB" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

ScalePPB (Set Method)


Sets new value for "ScalePPB" property.
bool ScalePPB(
bool scale_ppb

// new flag value

Parameters
scale_ppb
[in] New value for "ScalePPB" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2485

Standard Library

ShowOHLC (Get Method)


Gets the value of "ShowOHLC" property.
bool ShowOHLC() const

Returned value
Value of "ShowOHLC" property of the object, assigned to the class instance. If there is no object
assigned, it returns false.

ShowOHLC (Set Method)


Sets new value for "ShowOHLC" property.
bool ShowOHLC(
bool show

// new value

Parameters
show
[in] New value for "ShowOHLC" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2486

Standard Library

ShowLineBid (Get Method)


Gets the value of "ShowLineBid" property.
bool ShowLineBid() const

Returned value
Value of "ShowLineBid" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowLineBid (Set Method)


Sets new value for "ShowLineBid" property.
bool ShowLineBid(
bool show

// new value

Parameters
show
[in] New value for "ShowLineBid" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2487

Standard Library

ShowLineAsk (Get Method)


Gets the value of "ShowLineAsk" property.
bool ShowLineAsk() const

Returned value
Value of "ShowLineAsk" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowLineAsk (Set Method)


Sets new value for "ShowLineAsk" property.
bool ShowLineAsk(
bool show

// new value

Parameters
show
[in] New value for "ShowLineAsk" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2488

Standard Library

ShowLastLine (Get Method)


Gets the value of "ShowLastLine" property.
bool ShowLastLine() const

Returned value
Value of "ShowLastLine" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowLastLine (Set Method)


Sets new value for "ShowLastLine" property.
bool ShowLastLine(
bool show

// new flag value

Parameters
show
[in] New value for "ShowLastLine" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2489

Standard Library

ShowPeriodSep (Get Method)


Gets the value of "ShowPeriodSep" property (show period separators).
bool ShowPeriodSep() const

Returned value
Value of "ShowPeriodSep" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowPeriodSep (Set Method)


Sets new value for "ShowPeriodSep" property.
bool ShowPeriodSep(
bool show

// new value

Parameters
show
[in] New value for "ShowPeriodSep" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2490

Standard Library

ShowGrid (Get Method)


Gets the value of "ShowGrid" property.
bool ShowGrid() const

Returned value
Value of "ShowGrid" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowGrid (Set Method)


Sets new value for "ShowGrid" property.
bool ShowGrid(
bool show

// new value

Parameters
show
[in] New value for "ShowGrid" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2491

Standard Library

ShowVolumes (Get Method)


Gets the value of "ShowVolumes" property.
bool ShowVolumes() const

Returned value
Value of "ShowVolumes" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowVolumes (Set Method)


Sets new value for "ShowVolumes" property.
bool ShowVolumes(
bool show

// new value

Parameters
show
[in] New value for "ShowVolumes" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2492

Standard Library

ShowObjectDescr (Get Method)


Gets the value of "ShowObjectDescr" property (show description for graphic objects).
bool ShowObjectDescr() const

Returned value
Value of "ShowObjectDescr" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns false.

ShowObjectDescr (Set Method)


Sets new value for "ShowObjectDescr" property.
bool ShowObjectDescr(
bool show

// New value

Parameters
show
[in] New value for "ShowObjectDescr" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2493

Standard Library

ShowDateScale
Sets new value for "ShowDateScale" property.
bool ShowDateScale(
bool show

// New value

Parameters
show
[in] New value for "ShowDateScale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2494

Standard Library

ShowPriceScale
Sets new value for "ShowPriceScale" property.
bool ShowPriceScale(
bool show

// New value

Parameters
show
[in] New value for "ShowPriceScale" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2495

Standard Library

ColorBackground (Get Method)


Gets the value of "ColorBackground" property (background color of the chart).
color ColorBackground() const

Returned value
Value of "ColorBackground" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorBackground (Set Method)


Sets new value for "ColorBackground" property.
bool ColorBackground(
color new_color

// new background color

Parameters
new_color
[in] New background color.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2496

Standard Library

ColorForeground (Get Method)


Gets the value of "ColorForeground" property (color of axes, scale and OHLC strings of the chart).
color ColorForeground() const

Returned value
Value of "ColorForeground" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorForeground (Set Method)


Sets new value for "ColorForeground" property (for axes, scale, and OHLC string).
bool ColorForeground(
color new_color

// New color

Parameters
new_color
[in] New color for axes, scale and OHLC string.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2497

Standard Library

ColorGrid (Get Method)


Gets the value of "ColorGrid" property (color of the grid).
color ColorGrid() const

Returned value
Value of "ColorGrid" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorGrid (Set Method)


Sets new value for "ColorGrid" property.
bool ColorGrid(
color new_color

// new grid color

Parameters
new_color
[in] New grid color.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2498

Standard Library

ColorBarUp (Get Method)


Gets the value of "ColorBarUp" property (color for bull bars, its shadow and candle body outlines).
color ColorBarUp() const

Returned value
Value of "ColorBarUp" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorBarUp (Set Method)


Sets new value for "ColorBarUp" property.
bool ColorBarUp(
color new_color

// new color for bull bars

Parameters
new_color
[in] New color for bull bars.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2499

Standard Library

ColorBarDown (Get Method)


Gets the value of "ColorBarDown" property (color for bear bars, its shadow and candle body outlines).
color ColorBarDown() const

Returned value
Value of "ColorBarDown" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorBarDown (Set Method)


Sets new value for "ColorBarDown" property.
bool ColorBarDown(
color new_color

// new color for bear bars

Parameters
new_color
[in] New color for bear bars.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2500

Standard Library

ColorCandleBull (Get Method)


Gets the value of "ColorCandleBull" property (body color of the bull candle).
color ColorCandleBull() const

Returned value
Value of "ColorCandleBull" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorCandleBull (Set Method)


Sets new value for "ColorBarBull" property.
bool ColorCandleBull(
color new_color

// new color for bull candle body

Parameters
new_color
[in] New color of the bull candle body.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2501

Standard Library

ColorCandleBear (Get Method)


Gets the value of "ColorCandleBear" property (body color of the bear candle).
color ColorCandleBear() const

Returned value
Value of "ColorCandleBear" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorCandleBear (Set Method)


Sets new value for "ColorBarBear" property.
bool ColorCandleBear(
color new_color

// new color for bear candle body

Parameters
new_color
[in] New color of the bear candle body.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2502

Standard Library

ColorChartLine (Get Method)


Gets the value of "ColorChartLine" property (color for line chart and Doji candles).
color ColorChartLine() const

Returned value
Value of "ColorChartLine" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorChartLine (Set Method)


Sets new value for "ColorChartLine" property.
bool ColorChartLine(
color new_color

// new color of the chart lines

Parameters
new_color
[in] New color of the chart lines (Doji candles).
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2503

Standard Library

ColorVolumes (Get Method)


Gets the value of "ColorVolumes" property (color for volumes and levels of opened positions).
color ColorVolumes() const

Returned value
Value of "ColorVolumes" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorVolumes (Set Method)


Sets new value for "ColorVolumes" property.
bool ColorVolumes(
color new_color

// new color of the volumes (open position levels)

Parameters
new_color
[in] New color of the volumes (open position levels).
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2504

Standard Library

ColorLineBid (Get Method)


Gets the value of "ColorLineBid" property (color of Bid line).
color ColorLineBid() const

Returned value
Value of "ColorLineBid" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorLineBid (Set Method)


Sets new value for "ColorLineBid" property.
bool ColorLineBid(
color new_color

// new color for Bid line

Parameters
new_color
[in] New color for Bid line.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2505

Standard Library

ColorLineAsk (Get Method)


Gets the value of "ColorLineAsk" property (color of Ask line).
color ColorLineAsk() const

Returned value
Value of "ColorLineAsk" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorLineAsk (Set Method)


Sets new value for "ColorLineAsk" property.
bool ColorLineAsk(
color new_color

// new color for Ask line

Parameters
new_color
[in] New color for Ask line.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2506

Standard Library

ColorLineLast (Get Method)


Gets the value of "ColorLineLast" property (color of the last deal price line).
color ColorLineLast() const

Returned value
Value of "ColorLineLast" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorLineLast (Set Method)


Sets new value for "ColorLineLast" property.
bool ColorLineLast(
color new_color

// new color of the last deal price line

Parameters
new_color
[in] New color of the last deal price line.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2507

Standard Library

ColorStopLevels (Get Method)


Gets the value of "ColorStopLevels" property (color of the SL and TP levels).
color ColorStopLevels() const

Returned value
Value of "ColorStopLevels" property of the chart, assigned to the class instance. If there is no chart
assigned, it returns CLR_NONE.

ColorStopLevels (Set Method)


Sets new value for "ColorStopLevels" property.
bool ColorStopLevels(
color new_color

// new color of the SL and TP price levels

Parameters
new_color
[in] New color of the Stop Loss and Take Profit price levels.
Returned value
true if successful, false if color hasn't changed.

2000-2014, MetaQuotes Software Corp.

2508

Standard Library

VisibleBars
Gets total number of visible chart bars.
int VisibleBars() const

Returned value
Gets total number of visible bars of the chart, assigned to the class instance. If there is no chart
assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2509

Standard Library

WindowsTotal
Gets total number of chart windows, including the chart indicator subwindows.
int WindowsTotal() const

Returned value
Total number of windows, including the chart indicator subwindows, assigned to the class instance.
If there is no chart assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2510

Standard Library

WindowIsVisible
Gets visibility flag of the specified chart subwindow.
bool WindowIsVisible(
int num

// subwindow number

) const

Parameters
num
[in] Subwindow number (0 means base window).
Returned value
Returns visibility flag of the specified chart subwindow, assigned to the chart instance. If there is
no chart assigned, it returns false.

2000-2014, MetaQuotes Software Corp.

2511

Standard Library

WindowHandle
Gets window handle of the chart (HWND).
int WindowHandle() const

Returned value
Window handle of the chart, assigned to the chart instance. If there is no chart assigned, it returns
INVALID_HANDLE.

2000-2014, MetaQuotes Software Corp.

2512

Standard Library

FirstVisibleBar
Gets the number of the first visible bar of the chart.
int FirstVisibleBar() const

Returned value
Number of the first visible bar of the chart, assigned to the chart instance. If there is no chart
assigned, it returns -1.

2000-2014, MetaQuotes Software Corp.

2513

Standard Library

WidthInBars
Gets window width in bars.
int WidthInBars() const

Returned value
Window width in chart bars, assigned to the chart instance. If there is no chart assigned, it returns
0.

2000-2014, MetaQuotes Software Corp.

2514

Standard Library

WidthInPixels
Gets subwindow width in pixels.
int WidthInPixels() const

Returned value
Subwindow width in chart pixels, assigned to the chart instance. If there is no chart assigned, it
returns 0.

2000-2014, MetaQuotes Software Corp.

2515

Standard Library

HeightInPixels
Gets subwindow height in pixels.
int HeightInPixels(
int num

// subwindow number

) const

Parameters
num
[in] Subwindow number (0 means base window).
Returned value
Subwindow height in chart pixels, assigned to the chart instance. If there is no chart assigned, it
returns 0.

2000-2014, MetaQuotes Software Corp.

2516

Standard Library

PriceMin
Gets minimal price of the specified subwindow.
double PriceMin(
int num

// subwindow number

) const

Parameters
num
[in] Subwindow number (0 means base window).
Returned value
Minimal price value of the chart, assigned to the class instance. If there is not chart assigned, it
returns EMPTY_VALUE.

2000-2014, MetaQuotes Software Corp.

2517

Standard Library

PriceMax
Gets maximal price of the specified subwindow.
double PriceMax(
int num

// subwindow number

) const

Parameters
num
[in] Subwindow number (0 means base window).
Returned value
Maximal price value of the chart, assigned to the class instance. If there is not chart assigned, it
returns EMPTY_VALUE.

2000-2014, MetaQuotes Software Corp.

2518

Standard Library

Attach
Assigns the current chart to the class instance.
void Attach()

Attach
Assigns the specified chart to the class instance.
void Attach(
long chart

// Chart identifier

Parameters
chart
[in] Identifier of the chart to assign.

2000-2014, MetaQuotes Software Corp.

2519

Standard Library

FirstChart
Assigns the first chart of the client terminal to the class instance.
void FirstChart()

2000-2014, MetaQuotes Software Corp.

2520

Standard Library

NextChart
Assigns the next chart of the client terminal to the class instance.
void NextChart()

2000-2014, MetaQuotes Software Corp.

2521

Standard Library

Open
Opens chart with specified parameters and assign it to the class instance.
long Open(
const string

symbol_name,

ENUM_TIMEFRAMES timeframe

// Symbol name
// Period

Parameters
symbol_name
[in] Symbol name. NULL means the symbol of the current chart (to which expert attached).
timeframe
[in] Chart timeframe (ENUM_TIMEFRAMES enumeration). 0 means the current timeframe.
Returned value
Chart identifier.

2000-2014, MetaQuotes Software Corp.

2522

Standard Library

Detach
Detaches chart from the class instance.
void Detach()

2000-2014, MetaQuotes Software Corp.

2523

Standard Library

Close
Closes chart, assigned to the class instance.
void Close()

2000-2014, MetaQuotes Software Corp.

2524

Standard Library

BringToTop
Show chart on top of other charts.
bool BringToTop() const

Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2525

Standard Library

EventObjectCreate
Sets a flag to send notifications of an event of new object creation to all MQL5-programs on a chart.
bool EventObjectCreate(
bool flag

// flag

Parameters
flag
[in] New flag value.
Returned value
true if successful, false - if flag hasn't been changed.

2000-2014, MetaQuotes Software Corp.

2526

Standard Library

EventObjectDelete
Sets a flag to send notifications of an event of object deletion to all MQL5-programs on a chart.
bool EventObjectDelete(
bool flag

// flag

Parameters
flag
[in] New flag value.
Returned value
true if successful, false - if flag hasn't been changed.

2000-2014, MetaQuotes Software Corp.

2527

Standard Library

IndicatorAdd
Adds an indicator with the specified handle into a specified chart window.
bool IndicatorAdd(
int

sub_win

// number of the sub-window

int

handle

// handle of the indicator

);

Parameters
sub_win
[in] The number of the chart sub-window. 0 means the main chart window. if the number of a notexisting window is specified, a new window will be created.
handle
[in] The handle of the indicator.
Return Value
The function returns true in case of success, otherwise it returns false. In order to obtain
information about the error, call the GetLastError() function.
See Also
IndicatorDelete(), IndicatorsTotal(), IndicatorName().

2000-2014, MetaQuotes Software Corp.

2528

Standard Library

IndicatorDelete
Removes an indicator with a specified name from the specified chart window.
bool IndicatorDelete(
int

sub_win

// number of the subwindow

const string

name

// short name of the indicator

);

Parameters
sub_win
[in] Number of the chart subwindow. 0 denotes the main chart subwindow.
const name
[in] The short name of the indicator which is set in the INDICATOR_SHORTNAME property with
the IndicatorSetString() function. To get the short name of an indicator use the IndicatorName()
function.
Return Value
Returns true in case of successful deletion of the indicator. Otherwise it returns false. To get error
details use the GetLastError() function.
Note
If two indicators with identical short names exist in the chart subwindow, the first one in a row will
be deleted.
If other indicators on this chart are based on the values of the indicator that is being deleted, such
indicators will also be deleted.
Do not confuse the indicator short name and the file name that is specified when creating an
indicator using functions iCustom() and IndicatorCreate(). If the short name of an indicator is not
set explicitly, then the name of the file containing the source code of the indicator will be specified
during compilation.
Deletion of an indicator from a chart doesn't mean that its calculation part will be deleted from the
terminal memory. To release the indicator handle use the IndicatorRelease() function.
The indicator's short name should be formed correctly. It will be written to the
INDICATOR_SHORTNAME property using the IndicatorSetString() function. It is recommended that
the short name should contain values of all the input parameters of the indicator, because the
indicator to be deleted from the chart by the IndicatorDelete() function is identified by the short
name.
See also
IndicatorAdd(), IndicatorsTotal(), IndicatorName(), iCustom(), IndicatorCreate(),
IndicatorSetString().

2000-2014, MetaQuotes Software Corp.

2529

Standard Library

IndicatorsTotal
Returns the number of all indicators applied to the specified chart window.
int IndicatorsTotal(
int

sub_win

// number of the subwindow

);

Parameters
sub_win
[in] Number of the chart subwindow. 0 denotes the main chart subwindow.
Return Value
The number of indicators in the specified chart window. To get error details use the GetLastError()
function.
Note
The function allows going searching through all the indicators attached to the chart. The number of
all the windows of the chart can be obtained from the CHART_WINDOWS_TOTAL property using the
GetInteger() function.
See also
IndicatorAdd(), IndicatorDelete(), IndicatorsTotal(), iCustom(), IndicatorCreate(),
IndicatorSetString().

2000-2014, MetaQuotes Software Corp.

2530

Standard Library

IndicatorName
Returns the short name of the indicator by the index in the indicators list on the specified chart
window.
string IndicatorName(
int

sub_win

// number of the subwindow

int

index

// index of the indicator in the list of indicators added to the chat subwindo

);

Parameters
sub_win
[in] Number of the chart subwindow. 0 denotes the main chart subwindow.
index
[in] the index of the indicator in the list of indicators. The numeration of indicators start with
zero, i.e. the first indicator in the list has the 0 index. To obtain the number of indicators in the
list use the IndicatorsTotal() function.
Return Value
The short name of the indicator which is set in the INDICATOR_SHORTNAME property with the
IndicatorSetString() function. To get error details use the GetLastError() function.
Note
Do not confuse the indicator short name and the file name that is specified when creating an
indicator using functions iCustom() and IndicatorCreate(). If the short name of an indicator is not
set explicitly, then the name of the file containing the source code of the indicator will be specified
during compilation.
The indicator's short name should be formed correctly. It will be written to the
INDICATOR_SHORTNAME property using the IndicatorSetString() function. It is recommended that
the short name should contain values of all the input parameters of the indicator, because the
indicator to be deleted from the chart by the IndicatorDelete() function is identified by the short
name.
See also
IndicatorAdd(), IndicatorDelete, IndicatorsTotal, iCustom(), IndicatorCreate(), IndicatorSetString().

2000-2014, MetaQuotes Software Corp.

2531

Standard Library

Navigate
Navigates the chart.
bool Navigate(
ENUM_CHART_POSITION position,

// Position

int

// Shift

shift=0

Parameters
position
[in] Value of ENUM_CHART_POSITION enumeration.
shift=0
[in] Number of bars to shift.
Returned value
true if successful, false if chart hasn't navigated.

2000-2014, MetaQuotes Software Corp.

2532

Standard Library

Symbol
Gets symbol of the chart.
string Symbol() const

Returned value
Symbol of the chart, assigned to the class instance. If there is no chart assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2533

Standard Library

Period
Gets period of the chart.
ENUM_TIMEFRAMES Period() const

Returned value
Period of the chart, assigned to the class instance. If there is no chart assigned, it returns 0.

2000-2014, MetaQuotes Software Corp.

2534

Standard Library

Redraw
Redraws chart, assigned to the class instance.
void Redraw()

2000-2014, MetaQuotes Software Corp.

2535

Standard Library

GetInteger
The function returns the value of the corresponding object property. The object property must be of
the integer type. There are 2 variants of the function.
1. Immediately returns the property value.
long GetInteger(
ENUM_CHART_PROPERTY_INTEGER prop_id,

// property identifier

int

// subwindow number

sub_window=0

) const

2. If successful, puts the value of property to the specified variable of integer type, passed by
reference as last parameter.
bool GetInteger(
ENUM_CHART_PROPERTY_INTEGER prop_id,

// property identifier

int

sub_window,

// subwindow number

long&

value

// here we get the property value

) const

Parameters
prop_id
[in] Property identifier (ENUM_CHART_PROPERTY_INTEGER enumeration).
sub_window
[in] Chart subwindow number.
value
[in] Variable of the integer type that received the value of the requested property.
Return Value
Value of property of the chart, assigned to the class instance. If there isn't any chart assigned, it
returns -1.
For the second variant the function returns true, if this property is maintained and the value has
been placed into the value variable, otherwise returns false. To read more about the error call
GetLastError().

2000-2014, MetaQuotes Software Corp.

2536

Standard Library

SetInteger
Sets new value for the property of the integer type.
bool SetInteger(
ENUM_CHART_PROPERTY_INTEGER prop_id,

// property identifier

long

// new value

value

Parameters
prop_id
[in] Property identifier (ENUM_CHART_PROPERTY_INTEGER enumeration).
value
[in] New value of the property.
Returned value
true if successful, false if property of the integer type hasn't changed.

2000-2014, MetaQuotes Software Corp.

2537

Standard Library

GetDouble
The function returns the value of the corresponding object property. The object property must be of
the double type. There are 2 variants of the function.
1. Immediately returns the property value.
double GetDouble(
ENUM_CHART_PROPERTY_DOUBLE prop_id,

// property identifier

int

// subwindow number

sub_window=0

) const

2. If successful, puts the value of property to the specified variable of double type, passed by
reference as last parameter.
bool GetDouble(
ENUM_CHART_PROPERTY_DOUBLE prop_id,

// property identifier

int

sub_window,

// subwindow number

double&

value

// here we get the property value

) const

Parameters
prop_id
[in] Property identifier (ENUM_CHART_PROPERTY_DOUBLE enumeration).
sub_window
[in] Chart subwindow number.
value
[in] Variable of the double type that received the value of the requested property.
Return Value
Value of property of the chart, assigned to the class instance. If there isn't any chart assigned, it
returns EMPTY_VALUE.
For the second variant the function returns true, if this property is maintained and the value has
been placed into the value variable, otherwise returns false. To read more about the error call
GetLastError().

2000-2014, MetaQuotes Software Corp.

2538

Standard Library

SetDouble
Sets new value for the property of the double type.
bool SetDouble(
ENUM_CHART_PROPERTY_DOUBLE prop_id,

// property identifier

double

// new value

value

Parameters
prop_id
[in] Property idenitifier (ENUM_CHART_PROPERTY_DOUBLE enumeration).
value
[in] New value for the property.
Returned value
true if successful, false if property of the double type hasn't changed.

2000-2014, MetaQuotes Software Corp.

2539

Standard Library

GetString
The function returns the value of the corresponding object property. The object property must be of
the string type. There are 2 variants of the function.
1. Immediately returns the property value.
string GetString(
ENUM_CHART_PROPERTY_STRING prop_id

// property identifier

) const

2. If successful, puts the value of property to the specified variable of string type, passed by reference
as last parameter.
bool GetString(
ENUM_CHART_PROPERTY_STRING prop_id,

// property identifier

string&

// here we get the property value

value

) const

Parameters
prop_id
[in] Property identifier (ENUM_CHART_PROPERTY_STRING enumeration).
sub_window
[in] Chart subwindow number.
value
[in] Variable of the string type that received the value of the requested property.
Return Value
Value of property of the chart, assigned to the class instance. If there isn't any chart assigned, it
returns "".
For the second variant the function returns true, if this property is maintained and the value has
been placed into the value variable, otherwise returns false. To read more about the error call
GetLastError().

2000-2014, MetaQuotes Software Corp.

2540

Standard Library

SetString
Sets new value for the property of the string type.
bool SetString(
ENUM_CHART_PROPERTY_STRING prop_id,

// property identifier

string

// new property value

value

Parameters
prop_id
[in] Property idenitifier (ENUM_CHART_PROPERTY_STRING enumeration).
value
[in] New value for the property.
Returned value
true if successful, false if property of the string type hasn't changed.

2000-2014, MetaQuotes Software Corp.

2541

Standard Library

SetSymbolPeriod
Changes symbol and period of the chart, assigned to the class instance.
bool SetSymbolPeriod(
const string

symbol_name,

ENUM_TIMEFRAMES timeframe

// Symbol
// Period

Parameters
symbol_name
[in] New symbol name. NULL means the symbol of the current chart (to which expert attached).
timeframe
[in] New chart timeframe (ENUM_TIMEFRAMES enumeration). 0 means the current timeframe.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

2542

Standard Library

ApplyTemplate
Applies specified template to the chart.
bool ApplyTemplate(
const string filename

// template file name

Parameters
filename
[in] File name of the template.
Returned value
true if successful, false if template hasn't applied.

2000-2014, MetaQuotes Software Corp.

2543

Standard Library

ScreenShot
Creates screenshot of the specified chart and saves it to .gif file.
bool ScreenShot(
string

filename,

// File name

int

width,

// Width

int

height,

// Height

ENUM_ALIGN_MODE align_mode=ALIGN_RIGHT

// Align type

) const

Parameters
filename
[in] File name for screenshot.
width
[in] Screenshot width in pixels.
height
[in] Screenshot height in pixels.
align_mode=ALIGN_RIGHT
[in] Align mode, if screenshot is narrow.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2544

Standard Library

WindowOnDropped
Gets chart subwindow number corresponding to the object (expert or script) drop point.
int WindowOnDropped() const

Returned value
Chart subwindow number of the object drop point. 0 means main chart window.

2000-2014, MetaQuotes Software Corp.

2545

Standard Library

PriceOnDropped
Gets price coordinate corresponding to the object (expert or script) drop point.
double PriceOnDropped() const

Returned value
Price coordinate of the object drop point.

2000-2014, MetaQuotes Software Corp.

2546

Standard Library

TimeOnDropped
Gets time coordinate corresponding to the object (expert or script) drop point.
datetime TimeOnDropped() const

Returned value
Time coordinate of the object drop point.

2000-2014, MetaQuotes Software Corp.

2547

Standard Library

XOnDropped
Gets X coordinate corresponding to the object (expert or script) drop point.
int XOnDropped() const

Returned value
X coordinate of the object drop point.

2000-2014, MetaQuotes Software Corp.

2548

Standard Library

YOnDropped
Gets Y coordinate corresponding to the object (expert or script) drop point.
int YOnDropped() const

Returned value
Y coordinate of the object drop point.

2000-2014, MetaQuotes Software Corp.

2549

Standard Library

Save
Saves object parameters to file.
virtual bool Save(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen(...) function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2550

Standard Library

Load
Loads object parameters from file.
virtual bool Load(
int file_handle

// File handle

Parameters
file_handle
[in] handle of the binary file already opened by FileOpen(...) function.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2551

Standard Library

Type
Returns graphic object type identifier.
virtual int Type() const

Returned value
Object type identifier (0x1111 for CChart).

2000-2014, MetaQuotes Software Corp.

2552

Standard Library

File Operations
This section contains the technical details of the file operations classes and descriptions of the
corresponding components of the standard MQL5 library.
The file operations classes use will save time in developing applications which uses file input/output
operations.
The MQL5 Standard Library is placed in the working directory of the terminal in the Include\Files
folder.
Class

Description

CFile

Base file operations class

CFileBin

Binary file operations class

CFileTxt

Text file operations class

2000-2014, MetaQuotes Software Corp.

2553

Standard Library

CFile
CFile is a base class for CFileBin and CFileTxt classes.

Description
Class CFile provides the simplified access for all of its descendants to MQL5 API file and folder
functions.

Declaration
class CFile: public CObject

Title
#include <Files\File.mqh>

Class Methods
Attributes
Handle

Gets file handle

Filename

Gets file name

Flags

Gets file flags

SetUnicode

Sets/Clears the FILE_UNICODE flag

SetCommon

Sets/Clears the FILE_COMMON flag

General methods for files


Open

Opens file

Close

Closes file

Delete

Deletes file

IsExist

Checks file for existence

Copy

Copies file

Move

Renames/moves file

Size

Gets file size

Tell

Gets current file position

Seek

Sets current file position

Flush

Flushes data on disk

IsEnding

Checks file for end

IsLineEnding

Checks line for end

General methods for folders

2000-2014, MetaQuotes Software Corp.

2554

Standard Library

FolderCreate

Creates folder

FolderDelete

Deletes folder

FolderClean

Clears folder

Search methods
FileFindFirst

Begin file search

FileFindNext

Continue file search

FileFindClose

Close search handle

Derived classes:
CFileBin
CFileTxt

2000-2014, MetaQuotes Software Corp.

2555

Standard Library

Handle
Gets file handle of the opened file.
int Handle()

Returned value
Handle of the opened file, assigned to the class instance. If there is no file assigned, it returns -1.

2000-2014, MetaQuotes Software Corp.

2556

Standard Library

FileName
Gets file name of the opened file.
string FileName()

Returned value
File name of the opened file, assigned to the class instance. If there is no file assigned, it returns
"".

2000-2014, MetaQuotes Software Corp.

2557

Standard Library

Flags
Gets flags of the opened file.
int Flags()

Returned value
Flags of the opened file, assigned to the class instance.

2000-2014, MetaQuotes Software Corp.

2558

Standard Library

SetUnicode
Sets/Clears the FILE_UNICODE flag.
void SetUnicode(
bool unicode

// New flag value

Parameters
unicode
[in] New value for FILE_UNICODE flag.
Note
The result of string operations is dependent on the FILE_UNICODE flag. If it's false, the ANSI codes
are used (one byte symbols). If it set, the UNICODE codes are used (two byte symbols). If the file
has already opened, the flag cannot be changed.

2000-2014, MetaQuotes Software Corp.

2559

Standard Library

SetCommon
Sets/Clears the FILE_COMMON flag.
void SetCommon(
bool common

// New flag value

Parameters
common
[in] New value for FILE_COMMON flag.
Note
The FILE_UNICODE flag determines the current work folder. If it's false, the local terminal folder
used as the current work folder. If it's true, the general folder used as the current work folder. If the
file has already opened, the flag cannot be changed.

2000-2014, MetaQuotes Software Corp.

2560

Standard Library

Open
Open the specified file and if it successful, assigns it to the class instance.
int Open(
const string file_name,

// File name

int

flags,

// Flags

short

delimiter=9

// Separator

Parameters
file_name
[in] File name to open.
flags
[in] File open flags.
delimiter=9
[in] CSV file separator.
Returned value
Handle of the opened file.
Note
The work folder is dependent on the FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2561

Standard Library

Close
Closes file, assigned to the class instance.
void Close()

2000-2014, MetaQuotes Software Corp.

2562

Standard Library

Delete
Deletes the file, assigned to the file instance.
void Delete()

Delete
Deletes the specified file.
void Delete(
const string file_name

// File name

Parameters
file_name
[in] File name of the file to delete.
Note
The work folder is dependent on FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2563

Standard Library

IsExist
Checks file for existence
bool IsExist(
const string file_name

// File name

Parameters
file_name
[in] Name of the file to check.
Returned value
true, if file exists.

2000-2014, MetaQuotes Software Corp.

2564

Standard Library

Copy
Copies a file.
bool Copy(
const string src_name,

// Source file name

int

// Flag

src_flag,

const string dst_name,

// Destination file name

int

// Flags

dst_flags

Parameters
src_name
[in] File name of the file to copy.
src_flag
[in] Flags of the file to copy (only FILE_COMMON is used).
dst_name
[in] File name of the destination file.
dst_flags
[in] Flags of the destination file (only FILE_REWRITE and FILE_COMMON are used).
Returned value
true if successful, false if it hasn't been copied.

2000-2014, MetaQuotes Software Corp.

2565

Standard Library

Move
Renames/moves file.
bool Move(
const string src_name,

// Source file name

int

// Flag

src_flag,

const string dst_name,

// Destination file name

int

// Flags

dst_flags

Parameters
src_name
[in] File name of the file to move.
src_flag
[in] Flags of the file to copy (only FILE_COMMON is used).
dst_name
[in] File name of the destination file.
dst_flags
[in] Flags of the destination file (only FILE_REWRITE and FILE_COMMON are used).
Returned value
true if successful, false if it hasn't been moved.

2000-2014, MetaQuotes Software Corp.

2566

Standard Library

Size
Gets file size in bytes.
ulong Size()

Returned value
File size in bytes. If there isn't any file assigned, it returns ULONG_MAX.

2000-2014, MetaQuotes Software Corp.

2567

Standard Library

Tell
Gets the current file position.
ulong Tell()

Returned value
The current file position. If there isn't any file assigned, it returns ULONG_MAX.

2000-2014, MetaQuotes Software Corp.

2568

Standard Library

Seek
Sets current file position.
void Seek(
long

offset,

ENUM_FILE_POSITION origin

// Offset
// Origin

Parameters
offset
[in] File offset in bytes (can be negative).
origin
[in] Origin of the offset.
Returned value
true if successful, false if file position hasn't been changed.

2000-2014, MetaQuotes Software Corp.

2569

Standard Library

Flush
Flushes all of the file input/output buffer data on disk.
void Flush()

2000-2014, MetaQuotes Software Corp.

2570

Standard Library

IsEnding
Checks file for end. It's used during the file read operations.
bool IsEnding()

Returned value
true if end of file has been achieved after read or seek operation.

2000-2014, MetaQuotes Software Corp.

2571

Standard Library

IsLineEnding
Checks file for end of line. It's used during the file read operations.
bool IsLineEnding()

Returned value
true if end of line has been achieved after the txt or csv file read operation (CR-LF chars).

2000-2014, MetaQuotes Software Corp.

2572

Standard Library

FolderCreate
Creates new folder.
bool FolderCreate(
const string folder_name

// Folder name

Parameters
folder_name
[in] Name of the folder to create. It contains path to the folder relative to the folder defined by
FILE_COMMON flag.
Returned value
true if successful, and false if the folder hasn't been created.
Note
The work folder is dependent on FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2573

Standard Library

FolderDelete
Deletes specified folder.
bool FolderDelete(
const string folder_name

// Folder name

Parameters
folder_name
[in] Name of the folder to delete. It contains path to the folder relative to the folder defined by
FILE_COMMON flag.
Returned value
true if successful, and false if the folder hasn't been deleted.
Note
The work folder is dependent on FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2574

Standard Library

FolderClean
Cleans specified folder.
bool FolderClean(
const string folder_name

// Folder name

Parameters
folder_name
[in] Name of the folder to delete. It contains path to the folder relative to the folder defined by
FILE_COMMON flag.
Returned value
true if successful, and false if the folder hasn't been cleaned.
Note
The work folder is dependent on FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2575

Standard Library

FileFindFirst
It began file search using the filter specified.
int FileFindFirst(
const string filter,

// Search Filter

string&

// Reference to string

file_name

Parameters
filter
[in] Search filter.
file_name
[out] The reference to string for the first file found.
Returned value
If successful, it returns handle, that can be used for further file search using FileFindNext, or
INVALID_HANDLE if there isn't any file corresponding to the filter specified.
Note
The work folder is dependent on FILE_COMMON flag, defined by SetCommon() method.

2000-2014, MetaQuotes Software Corp.

2576

Standard Library

FileFindNext
It continue search, started by function FileFindFirst().
bool FileFindNext(
int

search_handle,

string& file_name

// Search handle
// Reference to string for the next file found

Parameters
search_handle
[in] Search handle, returned by FileFindFirst() method.
file_name
[in] The reference to string for the name of the file found if successful.
Returned value
true if successful, false if there isn't any file, corresponding to the filter specified.

2000-2014, MetaQuotes Software Corp.

2577

Standard Library

FileFindClose
Closes search handle.
void FileFindClose(
int search_handle

// Search handle

Parameters
search_handle
[in] Search handle, returned by FileFindFirst() method.

2000-2014, MetaQuotes Software Corp.

2578

Standard Library

CFileBin
CFileBin is a class for simplified access to binary files.

Description
Class CFileBin provides an access to binary files.

Declaration
class CFileBin: public CFile

Title
#include <Files\FileBin.mqh>

Class Methods
Open methods
Open

Opens a binary file

Write methods
WriteChar

Writes char or uchar type variable

WriteShort

Writes short or ushort type variable

WriteInteger

Writes int or uint type variable

WriteLong

Writes long or ulong type variable

WriteFloat

Writes float type variable

WriteDouble

Writes double type variable

WriteString

Writes string type variable

WriteCharArray

Writes an array of char or uchar type variables

WriteShortArray

Writes an array of short or ushort type


variables

WriteIntegerArray

Writes an array of int or uint type variables

WriteLongArray

Writes an array of long or ulong type variables

WriteFloatArray

Writes an array of float variables

WriteDoubleArray

Writes an array of double type variables

WriteObject

Writes data of the CObject class inheritor


instance

Read methods
ReadChar

Reads char or uchar type variable

ReadShort

Reads short or ushort type variable

2000-2014, MetaQuotes Software Corp.

2579

Standard Library

ReadInteger

Reads int or uint type variable

ReadLong

Reads long or ulong type variable

ReadFloat

Reads float type variable

ReadDouble

Reads double type variable

ReadString

Reads string type variable

ReadCharArray

Reads an array of char or uchar type variables

ReadShortArray

Reads an array of short or ushort type variables

ReadIntegerArray

Reads an array of int or uint type variables

ReadLongArray

Reads an array of long or ulong type variables

ReadFloatArray

Reads an array of float type variables

ReadDoubleArray

Reads an array of double type variables

ReadObject

Reads data of the CObject class inheritor


instance

2000-2014, MetaQuotes Software Corp.

2580

Standard Library

Open
Open the specified binary file and if it successful, assigns it to the class instance.
int Open(
const string file_name,

// File name

int

// Flags

flags

Parameters
file_name
[in] File name of the file to open.
flags
[in] File open flags (there is a forced set of the FILE_BIN flag).
Returned value
Handle of the opened file.

2000-2014, MetaQuotes Software Corp.

2581

Standard Library

WriteChar
Writes char or uchar type variable to file.
uint WriteChar(
char value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2582

Standard Library

WriteShort
Writes short or ushort type variable to file.
uint WriteShort(
short value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2583

Standard Library

WriteInteger
Writes int or uint type variable to file.
uint WriteInteger(
int value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2584

Standard Library

WriteLong
Writes long or ulong type variable to file.
uint WriteLong(
long value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2585

Standard Library

WriteFloat
Writes float type variable to file.
uint WriteFloat(
float value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2586

Standard Library

WriteDouble
Writes double type variable to file.
uint WriteDouble(
double value

// Value

Parameters
value
[in] Variable to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2587

Standard Library

WriteString
Writes string type variable to file.
uint WriteString(
const string value

// Value

Parameters
value
[in] String to write.
Returned value
Number of bytes written.

WriteString
Writes string type variable to file.
uint WriteString(
const string value,

// Value

int

// Size

size

Parameters
value
[in] String to write.
size
[in] Number of bytes to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2588

Standard Library

WriteCharArray
Writes an array of char or uchar type variables to file.
uint WriteCharArray(
char& array[],

// Array reference

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2589

Standard Library

WriteShortArray
Writes an array of short or ushort type variables to file.
uint WriteShortArray(
short& array[],

// Array to write

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to write

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2590

Standard Library

WriteIntegerArray
Writes an array of int or uint type variables to file.
uint WriteIntegerArray(
int& array[],

// Array to write

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to write

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2591

Standard Library

WriteLongArray
Writes an array of long or ulong type variables to file.
uint WriteLongArray(
long& array[],

// Array to write

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to write

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2592

Standard Library

WriteFloatArray
Writes an array of float type variables to file.
uint WriteFloatArray(
float& array[],

// Array to write

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to write

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2593

Standard Library

WriteDoubleArray
Writes an array of double type variables to file.
uint WriteDoubleArray(
double& array[],

// Array to write

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to write

Parameters
array[]
[in] Array to write.
start_item=0
[in] Start element to write from.
items_count=-1
[in] Number of elements to write (-1 - for whole array).
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2594

Standard Library

WriteObject
Writes data of the CObject class inheritor instance to file.
bool WriteObject(
CObject* object

// Reference to the object

Parameters
object
[in] Reference to the CObject class inheritor instance to write.
Returned value
true if successful, false if data hasn't been written.

2000-2014, MetaQuotes Software Corp.

2595

Standard Library

ReadChar
Reads char or uchar type variable from file.
bool ReadChar(
char& value

// Target variable

Parameters
value
[in] Target variable of type char.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2596

Standard Library

ReadShort
Reads short or ushort type variable from file.
bool ReadShort(
short& value
)

Parameters
value
[in] Target variable of type short or ushort.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2597

Standard Library

ReadInteger
Reads int or uint type variable from file.
bool ReadInteger(
int& value

// Target variable

Parameters
value
[in] Target variable of type int or uint.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2598

Standard Library

ReadLong
Reads long or ulong type variable from file.
bool ReadLong(
long& value
)

Parameters
value
[in] Target variable of type long or ulong.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2599

Standard Library

ReadFloat
Reads float type variable from file.
bool ReadFloat(
float& value

// Target variable

Parameters
value
[in] Target variable of type float.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2600

Standard Library

ReadDouble
Reads double type variable from file.
bool ReadDouble(
double& value
)

Parameters
value
[in] Target variable of type double.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2601

Standard Library

ReadString
Reads string type variable from file.
bool ReadString(
string& value

// Target string

Parameters
value
[in] Target variable of type string.
Returned value
true if successful, false if data hasn't been read.

ReadString
Reads string type variable from file.
bool ReadString(
string& value
)

Parameters
value
[in] Target variable of type string.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2602

Standard Library

ReadCharArray
Reads an array of char or uchar type variables from file.
bool ReadCharArray(
char& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type char or uchar.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2603

Standard Library

ReadShortArray
Reads an array of short or ushort type variables from file.
bool ReadShortArray(
short& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type short or ushort.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2604

Standard Library

ReadIntegerArray
Reads an array of int or uint type variables from file.
bool ReadIntegerArray(
int& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type int or uint.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2605

Standard Library

ReadLongArray
Reads an array of long or ulong type variables from file.
bool ReadLongArray(
long& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type long or ulong.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2606

Standard Library

ReadFloatArray
Reads an array of float type variables from file.
bool ReadFloatArray(
float& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type float.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2607

Standard Library

ReadDoubleArray
Reads an array of double type variables from file.
bool ReadDoubleArray(
double& array[],

// Target array

int

start_item=0,

// Start element

int

items_count=-1

// Number of elements to read

Parameters
array[]
[in] Reference to the target array of type double.
start_item=0
[in] Start element to read from.
items_count=-1
[in] Number of elements to read (-1 - read to the end of file).
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2608

Standard Library

ReadObject
Reads data of the CObject class inheritor instance from file.
bool ReadObject(
CObject* object

// Reference to the object

Parameters
object
[in] Reference to the target CObject class inheritor instance for read to.
Returned value
true if successful, false if data hasn't been read.

2000-2014, MetaQuotes Software Corp.

2609

Standard Library

CFileTxt
CFileTxt is a class for simplified access to text files.

Description
Class CFileTxt provides an access to text files.

Declaration
class CFileTxt: public CFile

Title
#include <Files\FileTxt.mqh>

Class Methods
Open methods
Open

Open a text file

Write methods
WriteString

Writes string type variable to file

Read methods
ReadString

Reads string type variable from file

2000-2014, MetaQuotes Software Corp.

2610

Standard Library

Open
Open the specified text file and if it successful, assigns it to the class instance.
int Open(
const string file_name,

// file name

int

// flags

flags

Parameters
file_name
[in] File name to open.
flags
[in] File open flags (there is a forced set of the FILE_TXT flag).
Returned value
Opened file handle.

2000-2014, MetaQuotes Software Corp.

2611

Standard Library

WriteString
Writes string type variable to file.
uint WriteString(
const string value

// String to write

Parameters
value
[in] String to write.
Returned value
Number of bytes written.

2000-2014, MetaQuotes Software Corp.

2612

Standard Library

ReadString
Reads string type variable from file.
string ReadString()

Returned value
String which has been read.

2000-2014, MetaQuotes Software Corp.

2613

Standard Library

String operations
This section contains the technical details of the string operations classes and descriptions of the
corresponding components of the standard MQL5 library.
The use of string operations classes will save time in developing applications which uses text
processing operations.
The MQL5 Standard Library is placed in the working directory of the terminal in the Include\Strings
folder.
Class

Description

CString

Class for string operations

2000-2014, MetaQuotes Software Corp.

2614

Standard Library

CString
CString is a class for simplified access to the variables of string type.

Description
Class CFile provides the simplified access for all of its descendants to MQL5 API string functions.

Declaration
class CString: public CObject

Title
#include <Strings\String.mqh>

Class Methods
Data access methods
Str

Gets a string

Len

Gets length of a string

Copy

Copies a string

Fill methods
Fill

Fills a string with specified char

Assign

Assigns a string

Append

Appends a string

Insert

Inserts a string

Compare methods
Compare

Compares a string

CompareNoCase

Compares a strings case insensitive

Substring methods
Left

Gets a specified number of characters from the


left side of a string

Right

Gets a specified number of characters from the


right side of a string

Mid

Gets a specified number of characters from a


string

Trim/delete methods
Trim

Removes all leading and trailing occurrences of


a set of specified characters from a string

2000-2014, MetaQuotes Software Corp.

2615

Standard Library

TrimLeft

Removes all leading occurrences of a set of


specified characters from a string

TrimRight

Removes all trailing occurrences of a set of


specified characters from a string

Clear

Clears a string

Convert methods
ToUpper

Converts a string to uppercase.

ToLower

Converts a string to lowercase.

Reverse

Reverses a string

Search methods
Find

Searches for the first match of a substring

FindRev

Searches for the last match of a substring

Remove

Deletes a substring from a string

Replace

Replaces a substring

2000-2014, MetaQuotes Software Corp.

2616

Standard Library

Str
Gets a string.
string Str() const;

Returned value
Copy of a string.

2000-2014, MetaQuotes Software Corp.

2617

Standard Library

Len
Gets length of a string.
uint Len() const;

Returned value
Length of a string.

2000-2014, MetaQuotes Software Corp.

2618

Standard Library

Copy
Copies a string by reference.
void Copy(
string& copy

// Reference

) const;

Parameters
copy
[in] Reference to a string to copy.

Copy
Copies a string to the CString class instance.
void Copy(
CString* copy

// Object descriptor

) const;

Parameters
copy
[in] CString class object descriptor.

2000-2014, MetaQuotes Software Corp.

2619

Standard Library

Fill
Fills a string with specified char.
bool Fill(
short character

// Character

Parameters
character
[in] Character for filling.
Returned value
true if successful, false if a string hasn't been filled.

2000-2014, MetaQuotes Software Corp.

2620

Standard Library

Assign
Assigns a string.
void Assign(
const string str

// String to assign

Parameters
str
[in] String to assign.

Assign
Assigns a string to the CString class instance.
void Assign(
CString* str

// Object descriptor

Parameters
str
[in] CString class object descriptor to assign.

2000-2014, MetaQuotes Software Corp.

2621

Standard Library

Append
Appends a string.
void Append(
const string str

// String to append

Parameters
str
[in] String to append.

Append
Appends a string to the CString class instance.
void Append(
CString* string

// Object descriptor

Parameters
string
[in] CString class object descriptor to append.

2000-2014, MetaQuotes Software Corp.

2622

Standard Library

Insert
Inserts a string to the specified position.
uint Insert(
uint

pos,

const string str

// Position
// String to insert

Parameters
pos
[in] Insert position.
str
[in] String to insert.
Returned value
Resulted string length.

Insert
Inserts a string to the specified position to the CString class instance.
uint Insert(
uint

pos,

CString* str

// Position
// Object descriptor

Parameters
pos
[in] Insert position.
str
[in] CString class object descriptor to insert.
Returned value
Resulted string length.

2000-2014, MetaQuotes Software Corp.

2623

Standard Library

Compare
Compares a string.
int Compare(
const string str

// String to compare

) const;

Parameters
str
[in] String to compare.
Returned value
I returns 0 if a strings are equal, -1 if a string of the class is lower than a string to compare, -1 if
the class string greater than a string to compare.

Compare
Compares a string with a string of the CString class instance.
int Compare(
CString* str

// Object descriptor

) const;

Parameters
str
[in] CString class object descriptor to compare.
Returned value
I returns 0 if a strings are equal, -1 if a string of the class is lower than a string to compare, -1 if
the class string greater than a string to compare.

2000-2014, MetaQuotes Software Corp.

2624

Standard Library

CompareNoCase
Compares a strings case insensitive.
int CompareNoCase(
const string str

// String to compare

) const;

Parameters
str
[in] String to compare.
Returned value
I returns 0 if a strings are equal, -1 if a string of the class is lower than a string to compare, -1 if
the class string greater than a string to compare.

CompareNoCase
Compares a string (case insensitive) with a string of the CString class instance.
int CompareNoCase(
CString* str

// Object descriptor

) const;

Parameters
str
[in] CString class object descriptor to compare.
Returned value
I returns 0 if a strings are equal, -1 if a string of the class is lower than a string to compare, -1 if
the class string greater than a string to compare.

2000-2014, MetaQuotes Software Corp.

2625

Standard Library

Left
Gets a specified number of characters from the left side of a string.
string Left(
uint count

// Number of characters

Parameters
count
[in] Number of characters.
Returned value
Resulted substring.

2000-2014, MetaQuotes Software Corp.

2626

Standard Library

Right
Gets a specified number of characters from the right side of a string.
string Right(
uint count

// Number of characters

Parameters
count
[in] Number of characters.
Returned value
Resulted substring.

2000-2014, MetaQuotes Software Corp.

2627

Standard Library

Mid
Gets a specified number of characters from a string.
string Mid(
uint pos,

// Position

uint count

// Number of characters

Parameters
pos
[in] Position of a string.
count
[in] Number of characters.
Returned value
Resulted substring.

2000-2014, MetaQuotes Software Corp.

2628

Standard Library

Trim
Removes all leading and trailing occurrences of a set of specified characters (and ' ','\t','\r','\n') from a
string.
int Trim(
const string targets

// Set of characters to remove

Parameters
targets
[in] Set of characters to remove.
Returned value
Number of characters removed.

Example:
//--- example for CString::Trim
#include <Strings\String.mqh>
//--void OnStart()
{
CString str;
//--str.Assign("

\t\tABCD\r\n");

printf("Source string '%s'",str.Str());


//--str.Trim("DA-DA-DA");
printf("Result string '%s'",str.Str());
}

2000-2014, MetaQuotes Software Corp.

2629

Standard Library

TrimLeft
Removes all leading occurrences of a set of specified characters (and ' ','\t','\r','\n') from a string.
int TrimLeft(
const string targets

// Set of characters to remove

Parameters
targets
[in] Set of characters to remove.
Returned value
Number of characters removed.

2000-2014, MetaQuotes Software Corp.

2630

Standard Library

TrimRight
Removes all trailing occurrences of a set of specified characters (and ' ','\t','\r','\n') from a string.
int TrimRight(
const string targets

// Set of characters to remove

Parameters
targets
[in] Set of characters to remove.
Returned value
Number of characters removed.

2000-2014, MetaQuotes Software Corp.

2631

Standard Library

Clear
Clears a string.
bool Clear()

Returned value
true if successful, false if a string hasn't been cleared.

2000-2014, MetaQuotes Software Corp.

2632

Standard Library

ToUpper
Converts a string to uppercase.
bool ToUpper()

Returned value
true if successful, false if a string hasn't been converted.

2000-2014, MetaQuotes Software Corp.

2633

Standard Library

ToLower
Converts a string to lowercase.
bool ToLower()

Returned value
true if successful, false if a string hasn't been converted.

2000-2014, MetaQuotes Software Corp.

2634

Standard Library

Reverse
Reverses of a string.
void Reverse()

2000-2014, MetaQuotes Software Corp.

2635

Standard Library

Find
Searches for the first match of a substring.
int Find(
uint

start,

const string substring

// Position
// Substring to search for

) const;

Parameters
start
[in] The index of the character in the string to begin the search with, or 0 to start from the
beginning.
substring
[in] Substring to search for.
Returned value
The index of the first character that matches the requested substring; -1 if the substring is not
found.

2000-2014, MetaQuotes Software Corp.

2636

Standard Library

FindRev
Searches for the last match of a substring.
int FindRev(
const string substring

// Substring

) const;

Parameters
substring
[in] A substring to search for.
Returned value
The index of the last character that matches the requested substring; -1 if the substring is not
found.

2000-2014, MetaQuotes Software Corp.

2637

Standard Library

Remove
Deletes a substring from a string.
uint Remove(
const string substring

// Substring to remove

Parameters
substring
[in] A substring to search for.
Returned value
Number of substrings deleted.

2000-2014, MetaQuotes Software Corp.

2638

Standard Library

Replace
Replaces a substring from a string.
uint Replace(
const string substring,

// Substring to replace

const string newstring

// New substring

Parameters
substring
[in] A substring to search for.
newstring
[in] A substring to replace for.
Returned value
Number of substrings replaced.

2000-2014, MetaQuotes Software Corp.

2639

Standard Library

Technical Indicators and Timeseries


This section contains the technical details of the technical indicator and timeseries classes and
description of the corresponding components of the standard MQL5 library.
The use of the technical indicator and timeseries classes will save time in developing applications
(scripts, Expert Advisors).
The MQL5 Standard Library is placed in the working directory of the terminal in the Include\Indicators
folder.
Class/group

Description

Base classes

Group of base and auxiliary classes

Timeseries classes

Group of timeseries classes

Trend Indicators

Group of Trend indicator classes

Oscillators

Group of Oscillator indicator classes

Volume Indicators

Group of Volume indicator classes

Bill Williams Indicators

Bill Williams indicator classes

Custom indicators

Custom indicator class

2000-2014, MetaQuotes Software Corp.

2640

Standard Library

Base and Auxiliary Technical Indicator and Timeseries Classes


This section contains the technical details of base and auxiliary technical indicator and timeseries
classes and description of the corresponding components of the Standard MQL5 library.
Class/group

Description

CSpreadBuffer

Historical spread buffer class

CTimeBuffer

Historical opening prices buffer class

CTickVolumeBuffer

Historical tick volumes buffer class

CRealVolumeBuffer

Historical real volumes buffer class

CDoubleBuffer

Base class of double type data buffer

COpenBuffer

Opening bar prices buffer class

CHighBuffer

High bar prices buffer class

CLowBuffer

Low bar prices buffer class

CCloseBuffer

Closing bar prices buffer class

CIndicatorBuffer

Technical indicator buffer class

CSeries

Base class for access to timeseries data

CPriceSeries

Base class for access to price data

CIndicator

Base class of technical indicator

CIndicators

Technical indicator and series collection

2000-2014, MetaQuotes Software Corp.

2641

Standard Library

CSpreadBuffer
CSpreadBuffer is a class for simplified access to spreads of the bars in the history.

Description
The CSpreadBuffer class provides an access to spreads of the bars in the history.

Declaration
class CSpreadBuffer: public CArrayInt

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Attributes
Size

Sets buffer size

Settings
SetSymbolPeriod

Sets symbol and period

Data Access Methods


At

Gets the buffer element by index

Data Update Methods


virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2642

Standard Library

Size
Sets buffer size.
void Size(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2643

Standard Library

SetSymbolPeriod
Sets symbol and period.
void SetSymbolPeriod(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] New symbol.
period
[in] New period (ENUM_TIMEFRAMES enumeration).

2000-2014, MetaQuotes Software Corp.

2644

Standard Library

At
Gets the buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2645

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2646

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2647

Standard Library

CTimeBuffer
CTimeBuffer is a class for simplified access to opening times of the bars in the history.

Description
The CTimeBuffer class provides an access to opening times of the bars in the history.

Declaration
class CTimeBuffer: public CArrayLong

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Attributes
Size

Sets buffer size

Settings
SetSymbolPeriod

Sets symbol and period

Data Access Methods


At

Gets the buffer element by index

Data Update Methods


virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2648

Standard Library

Size
Sets buffer size.
void Size(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2649

Standard Library

SetSymbolPeriod
Sets symbol and period.
void SetSymbolPeriod(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] New symbol.
period
[in] New period (ENUM_TIMEFRAMES enumeration).

2000-2014, MetaQuotes Software Corp.

2650

Standard Library

At
Gets the buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2651

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2652

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2653

Standard Library

CTickVolumeBuffer
CTickVolumeBuffer is a class for simplified access to tick volumes of bars in the history.

Description
The CTickVolumeBuffer class provides an access to tick volumes of bars in the history.

Declaration
class CTickVolumeBuffer: public CArrayLong

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Attributes
Size

Sets buffer size

Settings
SetSymbolPeriod

Sets symbol and period

Data Access Methods


At

Gets the buffer element by index

Data Update Methods


virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2654

Standard Library

Size
Sets buffer size.
void Size(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2655

Standard Library

SetSymbolPeriod
Sets symbol and period.
void SetSymbolPeriod(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] New symbol.
period
[in] New period (ENUM_TIMEFRAMES enumeration).

2000-2014, MetaQuotes Software Corp.

2656

Standard Library

At
Gets the buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2657

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2658

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2659

Standard Library

CRealVolumeBuffer
CRealVolumeBuffer is a class for simplified access to real volumes of bars in the history.

Description
The CTickVolumeBuffer class provides an access to real volumes of bars in the history.

Declaration
class CRealVolumeBuffer: public CArrayLong

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Attributes
Size

Sets buffer size

Settings
SetSymbolPeriod

Sets symbol and period

Data Access Methods


At

Gets the buffer element by index

Data Update Methods


virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2660

Standard Library

Size
Sets buffer size.
void Size(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2661

Standard Library

SetSymbolPeriod
Sets symbol and period.
void SetSymbolPeriod(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] New symbol.
period
[in] New period (ENUM_TIMEFRAMES enumeration).

2000-2014, MetaQuotes Software Corp.

2662

Standard Library

At
Gets the buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2663

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2664

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2665

Standard Library

CDoubleBuffer
CDoubleBuffer is a base class for simplified access to data buffers of double type.

Description
The CDoubleBuffer class provides an access to the data of the buffer of double type.

Declaration
class CDoubleBuffer: public CArrayDouble

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Attributes
Size

Sets buffer size

Settings
SetSymbolPeriod

Sets symbol and period

Data Access Methods


At

Gets the buffer element

Data Update Methods


virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2666

Standard Library

Size
Sets buffer size.
void Size(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2667

Standard Library

SetSymbolPeriod
Sets symbol and period.
void SetSymbolPeriod(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] New symbol.
period
[in] New period (ENUM_TIMEFRAMES enumeration).

2000-2014, MetaQuotes Software Corp.

2668

Standard Library

At
Gets the buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2669

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2670

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2671

Standard Library

COpenBuffer
COpenBuffer is a class for simplified access to open prices of bars in the history.

Description
The COpenBuffer class provides an access to open prices of bars in the history.

Declaration
class COpenBuffer: public CDoubleBuffer

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Data Update Methods
virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2672

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2673

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2674

Standard Library

CHighBuffer
CHighBuffer is a class for simplified access to high prices of bars in the history.

Description
The CHighBuffer class provides an access to high prices of bars in the history.

Declaration
class CHighBuffer: public CDoubleBuffer

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Data Update Methods
virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2675

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2676

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2677

Standard Library

CLowBuffer
CLowBuffer is a class for simplified access to low prices of bars in the history.

Description
The CLowBuffer class provides an access to low prices of bars in the history.

Declaration
class CLowBuffer: public CDoubleBuffer

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Data Update Methods
virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2678

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2679

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2680

Standard Library

CCloseBuffer
CCloseBuffer is a class for simplified access to close prices of bars in the history.

Description
The CCloseBuffer class provides an access to close prices of bars in the history.

Declaration
class CCloseBuffer: public CDoubleBuffer

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Data Update Methods
virtual Refresh

Updates the buffer

virtual RefreshCurrent

Updates the current value

2000-2014, MetaQuotes Software Corp.

2681

Standard Library

Refresh
Updates the buffer.
virtual bool Refresh()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2682

Standard Library

RefreshCurrent
Updates the current (zeroth) element of the buffer.
virtual bool RefreshCurrent()

Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2683

Standard Library

CIndicatorBuffer
CIndicatorBuffer is a class for simplified access to the data of the indicator's buffer.

Description
The CIndicatorBuffer class provides the simplified access to the data buffer of technical indicator.

Declaration
class CIndicatorBuffer: public CDoubleBuffer

Title
#include <Indicators\Indicator.mqh>

Class Methods
Attributes
Offset

Gets/Sets offset of the buffer

Name

Gets/Sets buffer name

Data Access Methods


At

Gets buffer's element

Data Update Methods


Refresh

Updates the buffer

RefreshCurrent

Updates only current value

2000-2014, MetaQuotes Software Corp.

2684

Standard Library

Offset
Gets offset of the buffer.
int Offset() const

Returned value
Buffer offset.

Offset ()
Sets offset of the buffer.
void Offset(
int offset

// offset

Parameters
offset
[in] New buffer offset.

2000-2014, MetaQuotes Software Corp.

2685

Standard Library

Name
Gets the name of the buffer.
string Name() const

Returned value
Name of the buffer.

Name
Sets the name of the buffer.
void Name(
string name

// name

Parameters
name
[in] New name of the buffer.

2000-2014, MetaQuotes Software Corp.

2686

Standard Library

At
Gets buffer element by index.
long At(
int index

// index

Parameters
index
[in] Index of buffer element.
Returned value
Buffer element with the specified index.

2000-2014, MetaQuotes Software Corp.

2687

Standard Library

Refresh
Updates the whole buffer.
bool Refresh(
int handle,

// handle

int num

// buffer number

Parameters
handle
[in] Handle of the indicator.
num
[in] Buffer index of the indicator.
Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2688

Standard Library

RefreshCurrent
Updates the current (zeroth) buffer element.
bool RefreshCurrent(
int handle,

// handle of the indicator

int num

// buffer number

Parameters
handle
[in] Handle of the indicator.
num
[in] Buffer number.
Returned value
true if successful, false if the buffer hasn't been updated.

2000-2014, MetaQuotes Software Corp.

2689

Standard Library

CSeries
CSeries is a base class for an access to the timeseries data of the Standard Library.

Description
The CSeries class provides the simplified access to MQL5 timeseries functions to all its descendants.

Declaration
class CSeries: public CArrayObj

Title
#include <Indicators\Series.mqh>

Class Methods
Attributes
Name

Gets the name of timeseries or indicator

BuffersTotal

Gets the number of buffers of timeseries or


indicator

Timeframe

Gets the timeframe flag of timeseries or


indicator

Symbol

Gets the symbol of timeseries or indicator

Period

Gets the period of timeseries or indicator

RefreshCurrent

Gets/Sets the flag of updating the current data

Data Access Methods


virtual BufferResize

Sets buffer size of timeseries or indicator

Data Update Methods


virtual Refresh
PeriodDescription

Update the data of timeseries or indicator


Gets the period as a string

2000-2014, MetaQuotes Software Corp.

2690

Standard Library

Name
Gets the name of timeseries or indicator
string Name() const

Returned value
The name of timeseries or indicator.

2000-2014, MetaQuotes Software Corp.

2691

Standard Library

BuffersTotal
Gets the number of buffers of timeseries or indicator.
int BuffersTotal() const

Returned value
The number of buffers of timeseries or indicator.
Note
The timeseries has an only one buffer.

2000-2014, MetaQuotes Software Corp.

2692

Standard Library

Timeframe
Gets the timeframe flag of timeseries or indicator.
int Timeframe() const

Returned value
The timeframe flag of timeseries or indicator.
Note
It's the visibility flag of some timeframes.

2000-2014, MetaQuotes Software Corp.

2693

Standard Library

Symbol
Gets the symbol of timeseries or indicator.
string Symbol() const

Returned value
The symbol of timeseries or indicator.

2000-2014, MetaQuotes Software Corp.

2694

Standard Library

Period
Gets the period of timeseries or indicator.
ENUM_TIMEFRAMES Period() const

Returned value
The period (value of ENUM_TIMEFRAMES enumeration) of timeseries or indicator.

2000-2014, MetaQuotes Software Corp.

2695

Standard Library

RefreshCurrent
Sets a flag to update the current values of timeseries or indicator.
string RefreshCurrent(
bool flag

// new flag

Parameters
flag
[in] New flag.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

2696

Standard Library

BufferSize
Returns the amount of data available in timeseries buffer or indicator buffer.
int BufferSize()

Returned value
Amount of data available in timeseries buffer or indicator buffer.

2000-2014, MetaQuotes Software Corp.

2697

Standard Library

BufferResize
Sets buffer size of timeseries or indicator.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New size of the buffers.
Note
All the timeseries or indicator buffers have the same size.

2000-2014, MetaQuotes Software Corp.

2698

Standard Library

Refresh
Updates the data of timeseries or indicator.
virtual void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframes to update (flag).

2000-2014, MetaQuotes Software Corp.

2699

Standard Library

PeriodDescription
Gets the string representation of the specified ENUM_TIMEFRAMES enumeration.
string PeriodDescription(
int val=0

// value

) const

Parameters
val=0
[in] Value to convert.
Returned value
The string representation of the specified ENUM_TIMEFRAMES enumeration.
Note
If the value isn't specified or equal to zero, it returns the timeframe of timeseries or indicator.

2000-2014, MetaQuotes Software Corp.

2700

Standard Library

CPriceSeries
CPriceSeries is a base class for access to the price data.

Description
The CSeries class provides the simplified access to MQL5 functions for working with price data to all
its descendants.

Declaration
class CPriceSeries: public CSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
virtual BufferResize

Sets size of the buffer

Data Access Methods


virtual GetData

Gets the specified buffer element by index

Data Update Methods


virtual Refresh

Updates timeseries data

Data Search Methods


virtual MinIndex

Gets the index of minimal element in the


specified range

virtual MinValue

Gets the value and index of minimal element in


the specified range

virtual MaxIndex

Gets the index of maximal element in the


specified range

virtual MaxValue

Gets the value and index of maximal element in


the specified range

2000-2014, MetaQuotes Software Corp.

2701

Standard Library

BufferResize
Sets new size of the buffer.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2702

Standard Library

GetData
Gets the specified buffer element by index.
virtual double GetData(
int index

// index

) const

Parameters
index
[in] Index of buffer element.
Returned value
The buffer element with the specified index or EMPTY_VALUE.

2000-2014, MetaQuotes Software Corp.

2703

Standard Library

Refresh
Updates the timeseries data
virtual void Refresh(
int flags

// timeframe flags

Parameters
flags
[in] Timeframes to update (flag).

2000-2014, MetaQuotes Software Corp.

2704

Standard Library

MinIndex
Gets the index of minimal element in the specified range.
virtual int MinIndex(
int start,

// starting index

int count

// number of elements to scan

) const

Parameters
start
[in] Starting index.
count
[in] Number of elements to proceed.
Returned value
The index of minimal element in the specified range, or -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2705

Standard Library

MinValue
Gets the value and index of minimal element in the specified range.
virtual double MinValue(
int

start,

// starting index

int

count,

// number of elements to scan

int& index

// reference to the variable for index

) const

Parameters
start
[in] Starting index.
count
[in] Number of elements to proceed.
index
[out] Reference to the variable of integer type.
Returned value
The value of minimal element of the buffer in the specified range, or EMPTY_VALUE if error.
Note
The index of minimal element is stored in the variable index.

2000-2014, MetaQuotes Software Corp.

2706

Standard Library

MaxIndex
Gets the index of maximal element in the specified range.
virtual int MaxIndex(
int start,

// starting index

int count

// number of elements to scan

) const

Parameters
start
[in] Starting index.
count
[in] Number of elements to proceed.
Returned value
The index of the maximal element in the specified range, or -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2707

Standard Library

MaxValue
Gets the value and index of maximal element in the specified range.
virtual double MaxValue(
int

start,

// starting index

int

count,

// number of elements to scan

int& index

// reference to the variable for index

) const

Parameters
start
[in] Starting index.
count
[in] Number of elements to proceed.
index
[out] Reference to the variable of integer type.
Returned value
The value of maximal element of the buffer in the specified range, or EMPTY_VALUE if error.
Note
The index of maximal element is stored in the variable index.

2000-2014, MetaQuotes Software Corp.

2708

Standard Library

CIndicator
CIndicator is a base class for technical indicator classes of the standard MQL Library.

Description
The CIndicator class provides the simplified access for all of its descendants to MQL5 API technical
indicator functions.

Declaration
class CIndicator: public CSeries

Title
#include <Indicators\Indicator.mqh>

Class Methods
Attributes
Handle

Gets the indicator's handle.

Status

Gets the status of the indicator.

FullRelease

Sets a flag to release the handle of the


indicator.

Creation
Create

Creates the indicators

BufferResize

Sets new buffer size

Data Access Methods


GetData

Copying the data from the indicator's buffer

Data Update Methods


Refresh

Updates the indicator's data

Finding Min/Max Values


Minimum

Gets the index of minimal element of the


specified buffer in a specified range.

MinValue

Gets the value and index of minimal element of


the specified buffer in a specified range.

Maximum

Gets the index of maximal element of the


specified buffer in a specified range.

MaxValue

Gets the value and index of maximal element of


the specified buffer in a specified range.

Conversion of Enumerations

2000-2014, MetaQuotes Software Corp.

2709

Standard Library

MethodDescription

Gets the value of


enumeration as string

ENUM_MA_METHOD

PriceDescription

Gets the value of


enumeration as string

VolumeDescription

Gets the value of ENUM_APPLIED_VOLUME


enumeration as string

ENUM_APPLIED_PRICE

Working with chart


AddToChart

Adds the indicator to the chart

DeleteFromChart

Deletes the indicator from the chart

Derived classes:
CiAC
CiAD
CiADX
CiADXWilder
CiAlligator
CiAMA
CiAO
CiATR
CiBands
CiBearsPower
CiBullsPower
CiBWMFI
CiCCI
CiChaikin
CiDEMA
CiDeMarker
CiEnvelopes
CiForce
CiFractals
CiFrAMA
CiGator
CiIchimoku
CiMA
CiMACD
CiMFI
CiMomentum
CiOBV

2000-2014, MetaQuotes Software Corp.

2710

Standard Library
CiOsMA
CiRSI
CiRVI
CiSAR
CiStdDev
CiStochastic
CiTEMA
CiTriX
CiVIDyA
CiVolumes
CiWPR

2000-2014, MetaQuotes Software Corp.

2711

Standard Library

Handle
Gets the indicator's handle.
int Handle() const

Returned value
Handle of the indicator.

2000-2014, MetaQuotes Software Corp.

2712

Standard Library

Status
Gets the status of the indicator.
string Status() const

Returned value
The status of indicator creation.

2000-2014, MetaQuotes Software Corp.

2713

Standard Library

FullRelease
Sets a flag to release the handle of the indicator.
void FullRelease(
bool flag

// flag

Parameters
flag
[in] New value of the handle release flag.

2000-2014, MetaQuotes Software Corp.

2714

Standard Library

Create
Creates the indicator with specified parameters.
bool Create(
string

symbol,

// symbol

ENUM_TIMEFRAMES period,

// period

ENUM_INDICATOR

type,

// type

int

num_params,

// number of parameters

MqlParam&

params

// reference to the parameters array

Parameters
symbol
[in] Symbol name.
period
[in] Period (ENUM_TIMEFRAMES enumeration).
type
[in] Indicator's type (ENUM_INDICATOR enumeration).
num_params
[in] Number of indicator's parameters.
params
[in] Reference to the parameters array for the indicator.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2715

Standard Library

BufferResize
Sets the size of the indicator's buffer.
void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.
Note
All the indicator's buffers have the same size.

2000-2014, MetaQuotes Software Corp.

2716

Standard Library

BarsCalculated
Returns the number of calculated data for the indicator.
int BarsCalculated();

Return Value
Returns the amount of calculated data in the indicator buffer or -1 in the case of error (data not
calculated yet).

2000-2014, MetaQuotes Software Corp.

2717

Standard Library

GetData
Gets the specified element from the specified buffer of the indicator.
double GetData(
int buffer_num,

// buffer number

int index

// element index

) const

Parameters
buffer_num
[in] Buffer number.
index
[in] Element index.
Returned value
If successful, it returns the numerical value of element, or EMPTY_VALUE in the case of error.

GetData
Gets the data from the indicator's buffer by starting position and number of necessary data.
int GetData(
int

start_pos,

// position

int

count,

// number of elements needed

int

buffer_num,

// buffer number

double& buffer

// target array for data

) const

Parameters
start_pos
[in] Starting position of the indicator's buffer.
count
[in] Number of elements needed.
buffer_num
[in] Number of the indicator's buffer.
buffer
[in] Reference to the target array for the data.
Returned value
If successful, it returns the number of elements, received from the specified indicator buffer,
otherwise -1.

GetData
Gets the data from the indicator's buffer by start time and number of necessary data.

2000-2014, MetaQuotes Software Corp.

2718

Standard Library
int GetData(
datetime start_time,

// starting time

int

count,

// number of elements needed

int

buffer_num,

// buffer number

double&

buffer

// target array for data

) const

Parameters
start_time
[in] Starting time.
count
[in] Number of elements needed.
buffer_num
[in] Number of the indicator's buffer.
buffer
[in] Reference to the target array.
Returned value
If successful, it returns the number of elements, received from the specified indicator buffer,
otherwise -1.

GetData
Gets the data from the indicator's buffer by start and stop time and number of necessary data.
int GetData(
datetime start_time,

// start time

datetime stop_time,

// stop time

int

buffer_num,

// number of buffer

double&

buffer

// target array for data

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer_num
[in] Number of the indicator's buffer.
buffer
[in] Reference to the target array.
Returned value
If successful, it returns the number of elements, received from the specified indicator buffer,
2000-2014, MetaQuotes Software Corp.

2719

Standard Library
otherwise -1.

2000-2014, MetaQuotes Software Corp.

2720

Standard Library

Refresh
Updates the indicator's data.
void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframe update flags.

2000-2014, MetaQuotes Software Corp.

2721

Standard Library

Minimum
Returns the index of minimal element of the specified buffer in a specified range.
int Minimum(
int buffer_num,

// buffer number

int start,

// starting index

int count

// number of elements to proceed

) const

Parameters
buffer_num
[in] Buffer number to search the value in.
start
[in] Starting index of the search.
count
[in] Number of elements to search.
Returned value
Index of the minimal element of the specified buffer in a specified range.

2000-2014, MetaQuotes Software Corp.

2722

Standard Library

MinValue
Returns the value and index of minimal element of the specified buffer in a specified range.
double MinValue(
int

buffer_num,

// buffer number

int

start,

// starting index

int

count,

// number of elements to proceed

int& index

// reference

) const

Parameters
buffer_num
[in] Buffer number to search the value in.
start
[in] Starting index.
count
[in] Number of elements to proceed.
index
[out] Reference to the variable of int type for the minimal element index.
Returned value
The value of the minimal element of the specified buffer in a specified range.
Note
The index of minimal buffer element is stored into the variable index, passed by reference.

2000-2014, MetaQuotes Software Corp.

2723

Standard Library

Maximum
Returns the index of maximal element of the specified buffer in a specified range.
int Maximum(
int buffer_num,

// buffer number

int start,

// starting index

int count

// number of elements to proceed

) const

Parameters
buffer_num
[in] Buffer number to search the value in.
start
[in] Starting index of the search.
count
[in] Number of elements to search.
Returned value
Index of the maximal element of the specified buffer in a specified range.

2000-2014, MetaQuotes Software Corp.

2724

Standard Library

MaxValue
Returns the value and index of maximal element of the specified buffer in a specified range.
double MaxValue(
int

buffer_num,

// buffer number

int

start,

// starting index

int

count,

// number of elements to proceed

int& index

// reference

) const

Parameters
buffer_num
[in] Buffer number to search the value in.
start
[in] Starting index.
count
[in] Number of elements to proceed.
index
[out] Reference to the variable of int type for the maximal element index.
Returned value
The value of the maximal element of the specified buffer in a specified range.
Note
The index of maximal buffer element is stored into the variable index, passed by reference.

2000-2014, MetaQuotes Software Corp.

2725

Standard Library

MethodDescription
The function returns the value of ENUM_MA_METHOD enumeration as a string.
string MethodDescription(
int val==0

// value

) const

Parameters
val==0
[in] Value of ENUM_MA_METHOD enumeration.
Returned value
The value of ENUM_MA_METHOD enumeration as a string.

2000-2014, MetaQuotes Software Corp.

2726

Standard Library

PriceDescription
The method returns the value of ENUM_APPLIED_PRICE enumeration as a string.
string PriceDescription(
int val==0

// value

) const

Parameters
val==0
[in] Value of ENUM_APPLIED_PRICE enumeration.
Returned value
The value of ENUM_APPLIED_PRICE enumeration as a string.

2000-2014, MetaQuotes Software Corp.

2727

Standard Library

VolumeDescription
The method returns the value of ENUM_APPLIED_VOLUME enumeration as a string.
string VolumeDescription(
int val==0

// value

) const

Parameters
val==0
[in] Value of ENUM_APPLIED_VOLUME enumeration.
Returned value
The value of ENUM_APPLIED_VOLUME enumeration as a string.

2000-2014, MetaQuotes Software Corp.

2728

Standard Library

AddToChart
Adds the indicator to the chart.
bool AddToChart(
long chart,

// chart ID

int subwin

// chart subwindow

Parameters
chart
[in] Chart ID.
subwin
[in] Chart subwindow.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2729

Standard Library

DeleteFromChart
Deletes the indicator from the chart.
bool DeleteFromChart(
long chart,

// chart ID

int subwin

// chart subwindow

Parameters
chart
[in] Chart ID.
subwin
[in] Chart subwindow.
Returned value
true if successful, false if error.

2000-2014, MetaQuotes Software Corp.

2730

Standard Library

CIndicators
The CIndicators is a class for collecting instances of timeseries and technical indicators classes.

Description
The CIndicators class provides creation of the technical indicators class instances, their storage and
management (data synchronization, handle and memory management).

Declaration
class CIndicators: public CArrayObj

Title
#include <Indicators\Indicators.mqh>

Class Methods
Create Methods
Create

Creates technical indicator

Data Update Methods


Refresh

Updates data for all technical indicators in the


collection

2000-2014, MetaQuotes Software Corp.

2731

Standard Library

Create
It creates the indicator with the specified parameters.
CIndicator* Create(
string

symbol,

// Symbol name

ENUM_TIMEFRAMES period,

// Period

ENUM_INDICATOR

type,

// Indicator's type

int

count,

// Number of parameters

MqlParam&

params

// Parameters array reference

Parameters
symbol
[in] Symbol name.
period
[in] Period (ENUM_TIMEFRAMES enumeration).
type
[in] Indicator's type (ENUM_INDICATOR).
count
[in] Number of parameters for the indicator.
params
[in] Reference to the parameters array for the indicator.
Returned value
If successful, it returns the reference to the created indicator, and NULL if the indicator hasn't been
created.

2000-2014, MetaQuotes Software Corp.

2732

Standard Library

Refresh
Updates data for all technical indicators in the collection.
int Refresh()

Returned value
It returns the updated timeframe flags (formed as an object visibility flags).

2000-2014, MetaQuotes Software Corp.

2733

Standard Library

Timeseries classes
This group of chapters contains technical details of timeseries classes of the MQL5 Standard Library
and descriptions of all its key components.
Class

Description

CiSpread

Provides an access to spread historical data

CiTime

Provides an access to open times of the bars in


the history

CiTickVolume

Provides an access to tick volumes of the bars


in the history

CiRealVolume

Provides an access to real volumes of the bars


in the history

CiOpen

Provides an access to open prices of the bars in


the history

CiHigh

Provides an access to high prices of the bars in


the history

CiLow

Provides an access to low prices of the bars in


the history

CiClose

Provides an access to close prices of the bars in


the history

2000-2014, MetaQuotes Software Corp.

2734

Standard Library

CiSpread
CiSpread is a class designed for access to spreads of the bars in the history.

Description
The CiSpread class provides an access to spread historical data.

Declaration
class CiSpread: public CSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

BufferResize

Sets buffer size

Data Access Methods


GetData

Gets the data

Data Update Methods


Refresh

Updates the data

2000-2014, MetaQuotes Software Corp.

2735

Standard Library

Create
Creates a timeseries with the specified parameters for access to the spreads history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2736

Standard Library

BufferResize
Sets new size of the series.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2737

Standard Library

GetData
Gets the element of timeseries by index.
int GetData(
int index

// index

) const

Parameters
index
[in] Index of the element needed.
Returned value
The timeseries buffer element, or 0.

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

int& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

count,

// number of elements

int&

buffer

// target array

) const

Parameters
start_time
2000-2014, MetaQuotes Software Corp.

2738

Standard Library
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

int&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2739

Standard Library

Refresh
Updates the data of timeseries.
virtual void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframe flags.

2000-2014, MetaQuotes Software Corp.

2740

Standard Library

CiTime
CiTime is a class designed for access to open times of the bars in the history.

Description
The CiTime class provides an access to open times of the bars in the history.

Declaration
class CiTime: public CSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

BufferResize

Sets buffer size

Data Access Methods


GetData

Gets the data

Data Update Methods


Refresh

Updates the data

2000-2014, MetaQuotes Software Corp.

2741

Standard Library

Create
Creates a timeseries with the specified parameters for access to the opening times of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2742

Standard Library

BufferResize
Sets new size of the series.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2743

Standard Library

GetData
Gets the element of timeseries by index.
datetime GetData(
int index

// index

) const

Parameters
index
[in] Index of the element needed.
Returned value
The timeseries buffer element, or 0.

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

long& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

count,

// number of elements

long&

buffer

// target array

) const

Parameters
start_time
2000-2014, MetaQuotes Software Corp.

2744

Standard Library
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

long&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2745

Standard Library

Refresh
Updates the data of timeseries.
virtual void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframe flags.

2000-2014, MetaQuotes Software Corp.

2746

Standard Library

CiTickVolume
CiTickVolume is a class designed for access to tick volumes of the bars in the history.

Description
The CiTickVolume class provides an access to tick volumes of the bars in the history.

Declaration
class CiTickVolume: public CSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

BufferResize

Sets buffer size

Data Access Methods


GetData

Gets the data

Data Update Methods


Refresh

Updates the data

2000-2014, MetaQuotes Software Corp.

2747

Standard Library

Create
Creates a timeseries with the specified parameters for access to the tick volumes of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2748

Standard Library

BufferResize
Sets new size of the series.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2749

Standard Library

GetData
Gets the element of timeseries by index.
datetime GetData(
int index

// index

) const

Parameters
index
[in] Index of the element needed.
Returned value
The timeseries buffer element, or 0.

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

long& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

count,

// number of elements

long&

buffer

// target array

) const

Parameters
start_time
2000-2014, MetaQuotes Software Corp.

2750

Standard Library
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

long&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2751

Standard Library

Refresh
Updates the data of timeseries.
virtual void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframe flags.

2000-2014, MetaQuotes Software Corp.

2752

Standard Library

CiRealVolume
CiRealVolume is a class designed for access to real volumes of the bars in the history.

Description
The CiRealVolume class provides an access to real volumes of the bars in the history.

Declaration
class CiRealVolume: public CSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

BufferResize

Sets buffer size

Data Access Methods


GetData

Gets the data

Data Update Methods


Refresh

Updates the data

2000-2014, MetaQuotes Software Corp.

2753

Standard Library

Create
Creates a timeseries with the specified parameters for access to the real volumes of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2754

Standard Library

BufferResize
Sets new size of the series.
virtual void BufferResize(
int size

// new size

Parameters
size
[in] New buffer size.

2000-2014, MetaQuotes Software Corp.

2755

Standard Library

GetData
Gets the element of timeseries by index.
datetime GetData(
int index

// index

) const

Parameters
index
[in] Index of the element needed.
Returned value
The timeseries buffer element, or 0.

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

long& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

count,

// number of elements

long&

buffer

// target array

) const

Parameters
start_time
2000-2014, MetaQuotes Software Corp.

2756

Standard Library
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

long&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2757

Standard Library

Refresh
Updates the data of timeseries.
virtual void Refresh(
int flags

// flags

Parameters
flags
[in] Timeframe flags.

2000-2014, MetaQuotes Software Corp.

2758

Standard Library

CiOpen
CiOpen is a class designed for access to open prices of the bars in the history.

Description
The CiOpen class provides an access to open prices of the bars in the history.

Declaration
class CiOpen: public CPriceSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

Data Access Methods


GetData

Gets the data

2000-2014, MetaQuotes Software Corp.

2759

Standard Library

Create
Creates a timeseries with the specified parameters for access to the open prices of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2760

Standard Library

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

double& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

// number of elements

double&

count,
buffer

// target array

) const

Parameters
start_time
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.

2000-2014, MetaQuotes Software Corp.

2761

Standard Library
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

double&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2762

Standard Library

CiHigh
CiHigh is a class designed for access to high prices of the bars in the history.

Description
The CiHigh class provides an access to high prices of the bars in the history.

Declaration
class CiHigh: public CPriceSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

Data Access Methods


GetData

Gets the data

2000-2014, MetaQuotes Software Corp.

2763

Standard Library

Create
Creates a timeseries with the specified parameters for access to the high prices of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2764

Standard Library

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

double& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

// number of elements

double&

count,
buffer

// target array

) const

Parameters
start_time
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.

2000-2014, MetaQuotes Software Corp.

2765

Standard Library
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

double&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2766

Standard Library

CiLow
CiLow is a class designed for access to low prices of the bars in the history.

Description
The CiLow class provides an access to low prices of the bars in the history.

Declaration
class CiLow: public CPriceSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

Data Access Methods


GetData

Gets the data

2000-2014, MetaQuotes Software Corp.

2767

Standard Library

Create
Creates a timeseries with the specified parameters for access to the low prices of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2768

Standard Library

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

double& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

// number of elements

double&

count,
buffer

// target array

) const

Parameters
start_time
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.

2000-2014, MetaQuotes Software Corp.

2769

Standard Library
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

double&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2770

Standard Library

CiClose
CiClose is a class designed for access to close prices of the bars in the history.

Description
The CiClose class provides an access to close prices of the bars in the history.

Declaration
class CiClose: public CPriceSeries

Title
#include <Indicators\TimeSeries.mqh>

Class Methods
Create Methods
Create

Creates a timeseries

Data Access Methods


GetData

Gets the data

2000-2014, MetaQuotes Software Corp.

2771

Standard Library

Create
Creates a timeseries with the specified parameters for access to the closing prices of the bars in the
history.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// symbol
// period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if timeseries hasn't been created.

2000-2014, MetaQuotes Software Corp.

2772

Standard Library

GetData
Gets the element of timeseries by starting position and number of elements.
int GetData(
int

start_pos,

// starting position

int

count,

// number of elements to get

double& buffer

// target array

) const

Parameters
start_pos
[in] Starting position of timeseries.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for the data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting time and number of elements.
int GetData(
datetime start_time,

// starting time

int

// number of elements

double&

count,
buffer

// target array

) const

Parameters
start_time
[in] Starting time.
count
[in] Number of elements needed.
buffer
[in] Reference to the target array for data.
Returned value
>=0 if successful, -1 in the case of error.

GetData
Gets the element of timeseries by starting and stop times.

2000-2014, MetaQuotes Software Corp.

2773

Standard Library
int GetData(
datetime start_time,

// starting time

datetime stop_time,

// stop time

double&

// target array

buffer

) const

Parameters
start_time
[in] Starting time.
stop_time
[in] Stop time.
buffer
[in] Reference to the target array for data
Returned value
>=0 if successful, -1 in the case of error.

2000-2014, MetaQuotes Software Corp.

2774

Standard Library

Trend Indicator Classes


This group of chapters contains technical details of Trend Indicator classes of the MQL5 Standard
Library and descriptions of all its key components.
Class/group

Description

CiADX

Average Directional Index

CiADXWilder

Average Directional Index by Welles Wilder

CiBands

Bollinger Bands

CiEnvelopes

Envelopes

CiIchimoku

Ichimoku Kinko Hyo

CiMA

Moving Average

CiSAR

Parabolic Stop And Reverse System

CiStdDev

Standard Deviation

CiDEMA

Double Exponential Moving Average

CiTEMA

Triple Exponential Moving Average

CiFrAMA

Fractal Adaptive Moving Average

CiAMA

Adaptive Moving Average

CiVIDyA

Variable Index DYnamic Average

2000-2014, MetaQuotes Software Corp.

2775

Standard Library

CiADX
CiADX is a class intended for using the Average Directional Index technical indicator.

Description
The CiADX class provides the creation and access to the data of the Average Directional Index
indicator.

Declaration
class CiADX: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the main line

Plus

Returns the buffer element of the +DI line

Minus

Returns the buffer element of the -DI line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2776

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2777

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2778

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2779

Standard Library

Plus
Returns the buffer element of the +DI line by the specified index.
double Plus(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the +DI line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

2780

Standard Library

Minus
Returns the buffer element of the -DI line by the specified index.
double Minus(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the -DI line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

2781

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ADX for CiADX).

2000-2014, MetaQuotes Software Corp.

2782

Standard Library

CiADXWilder
CiADXWilder is a class intended for using the Average Directional Index by Welles Wilder technical
indicator.

Description
The CiADXWilder class provides the creation and access to the data of the Average Directional Index
by Welles Wilder indicator.

Declaration
class CiADXWilder: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the main line

Plus

Returns the buffer element of the +DI line

Minus

Returns the buffer element of the -DI line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2783

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2784

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2785

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2786

Standard Library

Plus
Returns the buffer element of the +DI line by the specified index.
double Plus(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the +DI line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

2787

Standard Library

Minus
Returns the buffer element of the -DI line by the specified index.
double Minus(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the -DI line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

2788

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ADXW for CiADXWilder).

2000-2014, MetaQuotes Software Corp.

2789

Standard Library

CiBands
CiBands is a class intended for using the Bollinger Bands technical indicator.

Description
The CiBands class provides the creation and access to the data of the Bollinger Bands indicator.

Declaration
class CiBands: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

MaShift

Returns the horizontal shift

Deviation

Returns the deviation

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the base line

Upper

Returns the buffer element of the upper line

Lower

Returns the buffer element of the lower line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2790

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2791

Standard Library

MaShift
Returns the horizontal shift of the indicator.
int MaShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2792

Standard Library

Deviation
Returns the deviation.
double Deviation() const

Returned value
Returns the deviation, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2793

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2794

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Shift

double

deviation,

// Deviation

int

applied

// applied price, or handle

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift of the indicator.
deviation
[in] Deviation.
applied
[in] Volume type to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2795

Standard Library

Base
Returns the buffer element of the base line by the specified index.
double Base(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the Base line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

2796

Standard Library

Upper
Returns the buffer element of the upper line by the specified index.
double Upper(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the upper line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2797

Standard Library

Lower
Returns the buffer element of the lower line by the specified index.
double Lower(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the lower line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2798

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_BANDS for CiBands).

2000-2014, MetaQuotes Software Corp.

2799

Standard Library

CiEnvelopes
CiEnvelopes is a class intended for using the Envelopes technical indicator.

Description
The CiEnvelopes class provides the creation and access to the data of the Envelopes indicator.

Declaration
class CiEnvelopes: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

MaShift

Returns the horizontal shift

MaMethod

Returns the averaging method

Deviation

Returns the deviation

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Upper

Returns the buffer element of the upper line

Lower

Returns the buffer element of the lower line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2800

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2801

Standard Library

MaShift
Returns the horizontal shift of the indicator.
int MaShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2802

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2803

Standard Library

Deviation
Returns the value of deviation.
double Deviation() const

Returned value
Returns the value of deviation, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2804

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2805

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Horizontal shift

ENUM_MA_METHOD

ma_method,

// Averaging method

int

applied,

// Price type or handle to apply

double

deviation

// Deviation

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Price type of handle to apply.
deviation
[in] Deviation.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2806

Standard Library

Upper
Returns the buffer element of the upper line by the specified index.
double Upper(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the upper line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2807

Standard Library

Lower
Returns the buffer element of the lower line by the specified index.
double Lower(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the lower line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2808

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ENVELOPES for CiEnvelopes).

2000-2014, MetaQuotes Software Corp.

2809

Standard Library

CiIchimoku
CiIchimoku is a class intended for using the Ichimoku Kinko Hyo technical indicator.

Description
The CiIchimoku class provides the creation, setup and access to the data of the Ichimoku Kinko Hyo
indicator.

Declaration
class CiIchimoku: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
TenkanSenPeriod

Returns the TenkanSen period

KijunSenPeriod

Returns the KijunSen period

SenkouSpanBPeriod

Returns the SenkouSpanB period

Create Methods
Create

Creates the indicator

Data Access Methods


TenkanSen

Returns the buffer element of the TenkanSen


line

KijunSen

Returns the buffer element of the KijunSen line

SenkouSpanA

Returns the buffer element of the SenkouSpanA


line

SenkouSpanB

Returns the buffer element of the SenkouSpanB


line

ChinkouSpan

Returns the buffer element of the ChinkouSpan


line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2810

Standard Library

TenkanSenPeriod
Returns the TenkanSen period.
int TenkanSenPeriod() const

Returned value
Returns the TenkanSen period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2811

Standard Library

KijunSenPeriod
Returns the KijunSen period.
int KijunSenPeriod() const

Returned value
Returns the KijunSen period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2812

Standard Library

SenkouSpanBPeriod
Returns the SenkouSpanB period.
int SenkouSpanBPeriod() const

Returned value
Returns the SenkouSpanB period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2813

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

tenkan_sen,

// Period of TenkanSen

int

kijun_sen,

// Period of KijunSen

int

senkou_span_b

// Period of SenkouSpanB

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
tenkan_sen
[in] Period of TenkanSen.
kijun_sen
[in] Period of KijunSen.
senkou_span_b
[in] Period of SenkouSpanB.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2814

Standard Library

TenkanSen
Returns the buffer element of the TenkanSen line by the specified index.
double TenkanSen(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the TenkanSen line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2815

Standard Library

KijunSen
Returns the buffer element of the KijunSen line by the specified index.
double KijunSen(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the KijunSen line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2816

Standard Library

SenkouSpanA
Returns the buffer element of the SenkouSpanA line by the specified index.
double SenkouSpanA(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the SenkouSpanA line of the specified index, or EMPTY_VALUE if there isn't
any correct data.

2000-2014, MetaQuotes Software Corp.

2817

Standard Library

SenkouSpanB
Returns the buffer element of the SenkouSpanB line by the specified index.
double SenkouSpanB(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the SenkouSpanB line of the specified index, or EMPTY_VALUE if there isn't
any correct data.

2000-2014, MetaQuotes Software Corp.

2818

Standard Library

ChinkouSpan
Returns the buffer element of the ChinkouSpan line by the specified index.
double ChinkouSpan(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the ChinkouSpan line of the specified index, or EMPTY_VALUE if there isn't
any correct data.

2000-2014, MetaQuotes Software Corp.

2819

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ICHIMOKU for CiIchimoku).

2000-2014, MetaQuotes Software Corp.

2820

Standard Library

CiMA
CiMA is a class intended for using the Moving Average technical indicator.

Description
The CiMA class provides the creation, setup and access to the data of the Moving Average indicator.

Declaration
class CiMA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

MaShift

Returns the horizontal shift

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2821

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2822

Standard Library

MaShift
Returns the horizontal shift of the indicator.
int MaShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2823

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method (value of ENUM_MA_METHOD enumeration), defined at the indicator
creation.

2000-2014, MetaQuotes Software Corp.

2824

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2825

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

string,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Horizontal shift

ENUM_MA_METHOD

ma_method,

// Averaging method

int

applied

// Price type of handle to apply

Parameters
string
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2826

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2827

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_MA for CiMA).

2000-2014, MetaQuotes Software Corp.

2828

Standard Library

CiSAR
CiSAR is a class intended for using the Parabolic Stop And Reverse System technical indicator.

Description
The CiSAR class provides the creation, setup and access to the data of the Parabolic Stop And Reverse
System indicator.

Declaration
class CiSAR: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
SarStep

Returns the step for the velocity increasing

Maximum

Returns the coefficient of price following

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2829

Standard Library

SarStep
Returns the step for the velocity increasing (acceleration coefficient).
double SarStep() const

Returned value
The step for the velocity increasing, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2830

Standard Library

Maximum
Returns the coefficient of price following.
double Maximum() const

Returned value
The price following coefficient, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2831

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

double

step,

// Step

double

maximum

// Coefficient

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
step
[in] Step for the velocity increasing.
maximum
[in] Price following coefficient.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2832

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2833

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_SAR for CiSAR).

2000-2014, MetaQuotes Software Corp.

2834

Standard Library

CiStdDev
CiStdDev is a class intended for using the Standard Deviation technical indicator.

Description
The CiStdDev class provides the creation, setup and access to the data of the Standard Deviation
indicator.

Declaration
class CiStdDev: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

MaShift

Returns the horizontal shift

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2835

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2836

Standard Library

MaShift
Returns the horizontal shift of the indicator.
int MaShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2837

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method (value of ENUM_MA_METHOD enumeration), defined at the indicator
creation.

2000-2014, MetaQuotes Software Corp.

2838

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2839

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Horizontal shift

ENUM_MA_METHOD

ma_method,

// Averaging method

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2840

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2841

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_STDDEV for CiStdDev).

2000-2014, MetaQuotes Software Corp.

2842

Standard Library

CiDEMA
CiDEMA is a class intended for using the Double Exponential Moving Average technical indicator.

Description
The CiDEMA class provides the creation, setup and access to the data of the Double Exponential
Moving Average indicator.

Declaration
class CiDEMA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

IndShift

Returns the horizontal shift

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2843

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2844

Standard Library

IndShift
Returns the horizontal shift of the indicator.
int IndShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2845

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2846

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

string,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ind_shift,

// Shift

int

applied

// Price type of handle to apply

Parameters
string
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ind_shift
[in] Horizontal shift.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2847

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2848

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_DEMA for CiDEMA).

2000-2014, MetaQuotes Software Corp.

2849

Standard Library

CiTEMA
CiTEMA is a class intended for using the Triple Exponential Moving Average technical indicator.

Description
The CiTEMA class provides the creation, setup and access to the data of the Triple Exponential Moving
Average indicator.

Declaration
class CiTEMA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

IndShift

Returns the horizontal shift

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2850

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2851

Standard Library

IndShift
Returns the horizontal shift of the indicator.
int IndShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2852

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2853

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Offset

int

applied

// Price type of handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2854

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2855

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_TEMA for CiTEMA).

2000-2014, MetaQuotes Software Corp.

2856

Standard Library

CiFrAMA
CiFrAMA is a class intended for using the Fractal Adaptive Moving Average technical indicator.

Description
The CiFrAMA class provides the creation, setup and access to the data of the Fractal Adaptive Moving
Average indicator.

Declaration
class CiFrAMA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

IndShift

Returns the horizontal shift

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2857

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2858

Standard Library

IndShift
Returns the horizontal shift of the indicator.
int IndShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2859

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2860

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

ma_shift,

// Offset

int

applied

// Price type of handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_shift
[in] Horizontal shift.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2861

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2862

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_FRAMA for CiFrAMA).

2000-2014, MetaQuotes Software Corp.

2863

Standard Library

CiAMA
CiAMA is a class intended for using the Adaptive Moving Average technical indicator.

Description
The CiAMA class provides the creation, setup and access to the data of the Adaptive Moving Average
indicator.

Declaration
class CiAMA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

FastEmaPeriod

Returns the averaging period for the fast EMA

SlowEmaPeriod

Returns the averaging period for the slow EMA

IndShift

Returns the horizontal shift

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2864

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2865

Standard Library

FastEmaPeriod
Returns the averaging period for the fast EMA.
int FastEmaPeriod() const

Returned value
Returns the averaging period for the fast EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2866

Standard Library

SlowEmaPeriod
Returns the averaging period for the slow EMA.
int SlowEmaPeriod() const

Returned value
Returns the averaging period for the slow EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2867

Standard Library

IndShift
Returns the horizontal shift of the indicator.
int IndShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2868

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2869

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

string,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

fast_ema_period,

// Fast EMA period

int

slow_ema_period,

// Slow EMA period

int

ind_shift,

// Shift

int

applied

// Price type or handle to apply

Parameters
string
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
fast_ema_period
[in] Fast EMA averaging period.
slow_ema_period
[in] Slow EMA averaging period.
ind_shift
[in] Horizontal shift.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2870

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2871

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_AMA for CiAMA).

2000-2014, MetaQuotes Software Corp.

2872

Standard Library

CiVIDyA
CiVIDyA is a class intended for using the Variable Index DYnamic Average technical indicator.

Description
The CiVIDyA class provides the creation, setup and access to the data of the Variable Index DYnamic
Average indicator.

Declaration
class CiVIDyA: public CIndicator

Title
#include <Indicators\Trend.mqh>

Class Methods
Attributes
CmoPeriod

Returns the period for Momentum

EmaPeriod

Returns the averaging period for EMA

IndShift

Returns the horizontal shift

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2873

Standard Library

CmoPeriod
Returns the period for Momentum.
int CmoPeriod() const

Returned value
Returns the period for Momentum, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2874

Standard Library

EmaPeriod
Returns the averaging period for EMA.
int EmaPeriod() const

Returned value
Returns the averaging period for EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2875

Standard Library

IndShift
Returns the horizontal shift of the indicator.
int IndShift() const

Returned value
Returns the horizontal shift value, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2876

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2877

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

cmo_period,

// Momentum period

int

ema_period,

// Averaging period

int

ind_shift,

// Shift

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
cmo_period
[in] Momentum period.
ema_period
[in] Averaging period.
ind_shift
[in] Horizontal shift.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2878

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2879

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_VIDYA for CiVIDyA).

2000-2014, MetaQuotes Software Corp.

2880

Standard Library

Oscillators
This group of chapters contains the technical details of Oscillators classes of the MQL5 Standard
Library and descriptions of all its key components.
Class/group

Description

CiATR

Average True Range

CiBearsPower

Bears Power

CiBullsPower

Bulls Power

CiCCI

Commodity Channel Index

CiChaikin

Chaikin Oscillator

CiDeMarker

DeMarker

CiForce

Force Index

CiMACD

Moving Averages Convergence-Divergence

CiMomentum

Momentum

CiOsMA

Moving Average of Oscillator (MACD histogram)

CiRSI

Relative Strength Index

CiRVI

Relative Vigor Index

CiStochastic

Stochastic Oscillator

CiWPR

Williams' Percent Range

CiTriX

Triple Exponential Moving Averages Oscillator

2000-2014, MetaQuotes Software Corp.

2881

Standard Library

CiATR
CiATR is a class intended for using the Average True Range technical indicator.

Description
The CiATR class provides the creation, setup and access to the data of the Average True Range
indicator.

Declaration
class CiATR: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2882

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2883

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2884

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2885

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ATR for CiATR).

2000-2014, MetaQuotes Software Corp.

2886

Standard Library

CiBearsPower
CiBearsPower is a class intended for using the Bears Power technical indicator.

Description
The CiBearsPower class provides the creation, setup and access to the data of the Bears Power
indicator.

Declaration
class CiBearsPower: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2887

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2888

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2889

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2890

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_BEARS for CiBearsPower).

2000-2014, MetaQuotes Software Corp.

2891

Standard Library

CiBullsPower
CiBullsPower is a class intended for using the Bulls Power technical indicator.

Description
The CiBullsPower class provides the creation, setup and access to the data of the Bulls Power indicator.

Declaration
class CiBullsPower: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2892

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2893

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2894

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2895

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_BULLS for CiBullsPower).

2000-2014, MetaQuotes Software Corp.

2896

Standard Library

CiCCI
CiCCI is a class intended for using the Commodity Channel Index technical indicator.

Description
The CiCCI class provides the creation, setup and access to the data of the Commodity Channel Index
indicator.

Declaration
class CiCCI: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2897

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2898

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2899

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2900

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2901

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_CCI for CiCCI).

2000-2014, MetaQuotes Software Corp.

2902

Standard Library

CiChaikin
CiChaikin is a class intended for using the Chaikin Oscillator technical indicator.

Description
The CiChaikin class provides the creation, setup and access to the data of the Chaikin Oscillator
indicator.

Declaration
class CiChaikin: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
FastMaPeriod

Returns the averaging period for the fast MA

SlowMaPeriod

Returns the averaging period for the slow MA

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2903

Standard Library

FastMaPeriod
Returns the averaging period for the fast EMA.
int FastMaPeriod() const

Returned value
Returns the averaging period for the fast EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2904

Standard Library

SlowMaPeriod
Returns the averaging period for the slow EMA.
int SlowMaPeriod() const

Returned value
Returns the averaging period for the slow EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2905

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2906

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2907

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

int

fast_ma_period,

// Fast EMA period

int

slow_ma_period,

// Slow EMA period

ENUM_MA_METHOD

ma_method,

// Averaging method

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
fast_ma_period
[in] Period for fast EMA.
slow_ma_period
[in] Period for slow EMA.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2908

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2909

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_CHAIKIN for CiChaikin).

2000-2014, MetaQuotes Software Corp.

2910

Standard Library

CiDeMarker
CiDeMarker is a class intended for using the DeMarker technical indicator.

Description
The CiDeMarker class provides the creation, setup and access to the data of the DeMarker indicator.

Declaration
class CiDeMarker: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2911

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2912

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2913

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2914

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_DEMARKER for CiDeMarker).

2000-2014, MetaQuotes Software Corp.

2915

Standard Library

CiForce
CiForce is a class intended for using the Force Index technical indicator.

Description
The CiForce class provides the creation, setup and access to the data of the Force Index indicator.

Declaration
class CiForce: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2916

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2917

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2918

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2919

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

int

ma_period,

// Averaging period

ENUM_MA_METHOD

ma_method,

// Averaging method

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2920

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2921

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_FORCE for CiForce).

2000-2014, MetaQuotes Software Corp.

2922

Standard Library

CiMACD
CiMACD is a class intended for using the Moving Averages Convergence-Divergence technical
indicator.

Description
The CiMACD class provides the creation, setup and access to the data of the Moving Averages
Convergence-Divergence indicator.

Declaration
class CiMACD: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
FastEmaPeriod

Returns the averaging period fofor the fast EMA

SlowEmaPeriod

Returns the averaging period of the slow EMA

SignalPeriod

Returns the averaging period of the signal line

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the main line

Signal

Returns the buffer element of the signal line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2923

Standard Library

FastEmaPeriod
Returns the averaging period for the fast EMA.
int FastEmaPeriod() const

Returned value
Returns the averaging period for the fast EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2924

Standard Library

SlowEmaPeriod
Returns the averaging period for the slow EMA.
int SlowEmaPeriod() const

Returned value
Returns the averaging period for the slow EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2925

Standard Library

SignalPeriod
Returns the averaging period for the signal line.
int SignalPeriod() const

Returned value
Returns the averaging period for the signal line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2926

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2927

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

fast_ema_period,

// Fast EMA period

int

slow_ema_period,

// Slow EMA period

int

signal_period,

// Signal period

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
fast_ema_period
[in] Fast EMA period.
slow_ema_period
[in] Slow EMA period.
signal_period
[in] Signal line period.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2928

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2929

Standard Library

Signal
Returns the buffer element of the signal line by the specified index.
double Signal(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the signal line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2930

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_MACD for CiMACD).

2000-2014, MetaQuotes Software Corp.

2931

Standard Library

CiMomentum
CiMomentum is a class intended for using the Momentum technical indicator.

Description
The CiMomentum class provides the creation, setup and access to the data of the Momentum
indicator.

Declaration
class CiMomentum: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2932

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2933

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2934

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2935

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2936

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_MOMENTUM for CiMomentum).

2000-2014, MetaQuotes Software Corp.

2937

Standard Library

CiOsMA
CiOsMA is a class intended for using the Moving Average of Oscillator (MACD histogram) technical
indicator.

Description
The CiOsMA class provides the creation, setup and access to the data of the Moving Average of
Oscillator (MACD histogram) indicator.

Declaration
class CiOsMA: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
FastEmaPeriod

Returns the averaging period of the fast EMA

SlowEmaPeriod

Returns the averaging period of the slow EMA

SignalPeriod

Returns the averaging period of the signal line

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2938

Standard Library

FastEmaPeriod
Returns the averaging period for the fast EMA.
int FastEmaPeriod() const

Returned value
Returns the averaging period for the fast EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2939

Standard Library

SlowEmaPeriod
Returns the averaging period for the slow EMA.
int SlowEmaPeriod() const

Returned value
Returns the averaging period for the slow EMA, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2940

Standard Library

SignalPeriod
Returns the averaging period for the signal line.
int SignalPeriod() const

Returned value
Returns the averaging period for the signal line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2941

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2942

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

fast_ema_period,

// Fast EMA period

int

slow_ema_period,

// Slow EMA period

int

signal_period,

// Signal line period

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
fast_ema_period
[in] Fast EMA period.
slow_ema_period
[in] Slow EMA period.
signal_period
[in] Signal line period.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2943

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2944

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_OSMA for CiOsMA).

2000-2014, MetaQuotes Software Corp.

2945

Standard Library

CiRSI
CiRSI is a class intended for using the Relative Strength Index technical indicator.

Description
The CiRSI class provides the creation, setup and access to the data of the Relative Strength Index
indicator.

Declaration
class CiRSI: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2946

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2947

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2948

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

applied

// Price type or handle to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
applied
[in] Price type or handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2949

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2950

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_RSI for CiRSI).

2000-2014, MetaQuotes Software Corp.

2951

Standard Library

CiRVI
CiRVI is a class intended for using the Relative Vigor Index technical indicator.

Description
The CiRVI class provides the creation, setup and access to the data of the Relative Vigor Index
indicator.

Declaration
class CiRVI: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the base line

Signal

Returns the buffer element of the signal line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2952

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2953

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Averaging period

ma_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2954

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2955

Standard Library

Signal
Returns the buffer element of the signal line by the specified index.
double Signal(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the signal line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2956

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_RVI for CiRVI).

2000-2014, MetaQuotes Software Corp.

2957

Standard Library

CiStochastic
CiStochastic is a class intended for using the Stochastic Oscillator technical indicator.

Description
The CiStochastic class provides the creation, setup and access to the data of the Stochastic Oscillator
indicator.

Declaration
class CiStochastic: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
Kperiod

Returns the averaging period for the %K line

Dperiod

Returns the averaging period for the %D line

Slowing

Returns the slowing period

MaMethod

Returns the averaging method

PriceField

Price type (Low/High ore Close/Close) to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element of the base line

Signal

Returns the buffer element of the signal line

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2958

Standard Library

Kperiod
Returns the averaging period for the %K line.
int Kperiod() const

Returned value
Returns the averaging period for the %K line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2959

Standard Library

Dperiod
Returns the averaging period for the %D line.
int Dperiod() const

Returned value
Returns the averaging period for the %D line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2960

Standard Library

Slowing
Returns the period of slowing.
int Slowing() const

Returned value
Returns the period of slowing, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2961

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2962

Standard Library

PriceField
Returns the price type (Low/High or Close/Close) to apply.
ENUM_STO_PRICE PriceField() const

Returned value
The price type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2963

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

Kperiod,

// Averaging period of %K

int

Dperiod,

// Averaging period of %D

int

slowing,

// Slowing period

ENUM_MA_METHOD

ma_method,

// Averaging method

ENUM_STO_PRICE

price_field

// Price type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Kperiod
[in] Averaging period of %K line.
Dperiod
[in] Averaging period of %D line.
slowing
[in] Slowing period.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
price_field
[in] Price type (Low/High or Close/Close) to apply (ENUM_STO_PRICE enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2964

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2965

Standard Library

Signal
Returns the buffer element of the signal line by the specified index.
double Signal(
int index

// Index

Parameters
index
[in] Element index.
Returned value

Signal
Returns the buffer element of the signal line by the specified index.
double Signal(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the signal line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

2966

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_STOCHASTIC for CiStochastic).

2000-2014, MetaQuotes Software Corp.

2967

Standard Library

CiTriX
CiTriX is a class intended for using the Triple Exponential Moving Averages Oscillator technical
indicator.

Description
The CiTriX class provides the creation, setup and access to the data of the Triple Exponential Moving
Averages Oscillator indicator.

Declaration
class CiTriX: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2968

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2969

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2970

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

ma_period,

// Averaging period

int

applied

// Price type or handle

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
applied
[in] Price type of handle to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2971

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2972

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_TRIX for CiTriX).

2000-2014, MetaQuotes Software Corp.

2973

Standard Library

CiWPR
CiWPR is a class intended for using the Williams' Percent Range technical indicator.

Description
The CiWPR class provides the creation, setup and access to the data of the Williams' Percent Range
indicator.

Declaration
class CiWPR: public CIndicator

Title
#include <Indicators\Oscilators.mqh>

Class Methods
Attributes
CalcPeriod

Returns the calculation period

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2974

Standard Library

CalcPeriod
Returns the period for calculation.
int CalcPeriod() const

Returned value
Returns the period for calculation, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2975

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

// Calculation period

calc_period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
calc_period
[in] Period for calculation.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2976

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2977

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_WPR for CiWPR).

2000-2014, MetaQuotes Software Corp.

2978

Standard Library

Volume Indicators
This group of chapters contains technical details of Volume Indicator classes of the MQL5 Standard
Library and descriptions of all its key components.
Class/group

Description

CiAD

Accumulation/Distribution

CiMFI

Money Flow Index

CiOBV

On Balance Volume

CiVolumes

Volumes

2000-2014, MetaQuotes Software Corp.

2979

Standard Library

CiAD
CiAD is a class intended for using the Accumulation/Distribution technical indicator.

Description
The CiAD class provides the creation, setup and access to the data of the Accumulation/Distribution
indicator.

Declaration
class CiAD: public CIndicator

Title
#include <Indicators\Volumes.mqh>

Class Methods
Attributes
Applied

Returns the volume type to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2980

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2981

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2982

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2983

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_AD for CiAD).

2000-2014, MetaQuotes Software Corp.

2984

Standard Library

CiMFI
CiMFI is a class intended for using the Money Flow Index technical indicator.

Description
The CiMFI class provides the creation, setup and access to the data of the Money Flow Index indicator.

Declaration
class CiMFI: public CIndicator

Title
#include <Indicators\Volumes.mqh>

Class Methods
Attributes
MaPeriod

Returns the averaging period

Applied

Returns the volume type to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2985

Standard Library

MaPeriod
Returns the averaging period.
int MaPeriod() const

Returned value
Returns the averaging period, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2986

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2987

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

int

ma_period,

// Averaging period

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
ma_period
[in] Averaging period.
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2988

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2989

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_MFI for CiMFI).

2000-2014, MetaQuotes Software Corp.

2990

Standard Library

CiOBV
CiOBV is a class intended for using the On Balance Volume technical indicator.

Description
The CiOBV class provides the creation, setup and access to the data of the On Balance Volume
indicator.

Declaration
class CiOBV: public CIndicator

Title
#include <Indicators\Volumes.mqh>

Class Methods
Attributes
Applied

Returns the volume type to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2991

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2992

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2993

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2994

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_OBV for CiOBV).

2000-2014, MetaQuotes Software Corp.

2995

Standard Library

CiVolumes
CiVolumes is a class intended for using the Volumes technical indicator.

Description
The CiVolumes class provides the creation, setup and access to the data of the Volumes indicator.

Declaration
class CiVolumes: public CIndicator

Title
#include <Indicators\Volumes.mqh>

Class Methods
Attributes
Applied

Returns the volume type to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

2996

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

2997

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

2998

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

2999

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_VOLUMES for CiVolumes).

2000-2014, MetaQuotes Software Corp.

3000

Standard Library

Bill Williams Indicators


This group of chapters contains technical details of Bill Williams Indicator classes of the MQL5
Standard Library and descriptions of all its key components.
Class/group

Description

CiAC

Accelerator Oscillator

CiAlligator

Alligator

CiAO

Awesome Oscillator

CiFractals

Fractals

CiGator

Gator Oscillator

CiBWMFI

Market Facilitation Index

2000-2014, MetaQuotes Software Corp.

3001

Standard Library

CiAC
CiAC is a class intended for using the Accelerator Oscillator technical indicator.

Description
The CiAC class provides the creation, setup and access to the data of the Accelerator Oscillator
indicator.

Declaration
class CiAC: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3002

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// Symbol
// Period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3003

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

3004

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_AC for CiAC).

2000-2014, MetaQuotes Software Corp.

3005

Standard Library

CiAlligator
CiAlligator is a class intended for using the Alligator technical indicator.

Description
The CiAlligator class provides the creation, setup and access to the data of the Alligator indicator.

Declaration
class CiAlligator: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Attributes
JawPeriod

Returns the averaging period for the Jaws line

JawShift

Returns the horizontal shift of the Jaws line

TeethPeriod

Returns the averaging period for the Teeths


line

TeethShift

Returns the horizontal shift of the Teeths line

LipsPeriod

Returns the averaging period for the Lips line

LipsShift

Returns the horizontal shift of the Lips line

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Jaw

Returns the buffer element of the Jaws line


buffer

Teeth

Returns the buffer element of the Teeths line


buffer

Lips

Returns the buffer element of the Lips line


buffer

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3006

Standard Library

JawPeriod
Returns the averaging period for the Jaw line.
int JawPeriod() const

Returned value
Returns the averaging period for the Jaw line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3007

Standard Library

JawShift
Returns the horizontal shift of the Jaws line.
int JawShift() const

Returned value
Horizontal shift of the Jaws line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3008

Standard Library

TeethPeriod
Returns the averaging period for the Teeth line.
int TeethPeriod() const

Returned value
Returns the averaging period for the Teeth line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3009

Standard Library

TeethShift
Returns the horizontal shift of the Teeths line.
int TeethShift() const

Returned value
Horizontal shift of the Teeths line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3010

Standard Library

LipsPeriod
Returns the averaging period for the Lips line.
int LipsPeriod() const

Returned value
Returns the averaging period for the Lips line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3011

Standard Library

LipsShift
Returns the horizontal shift of the Lips line.
int LipsShift() const

Returned value
Horizontal shift of the Lips line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3012

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3013

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3014

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

jaw_period,

// Jaws period

int

jaw_shift,

// Jaws shift

int

teeth_period,

// Teeths period

int

teeth_shift,

// Teeths shift

int

lips_period,

// Lips period

int

lips_shift,

// Lips shift

ENUM_MA_METHOD

ma_method,

// Averaging method

int

applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
jaw_period
[in] Jaws period.
jaw_shift
[in] Jaws shift.
teeth_period
[in] Teeths period.
teeth_shift
[in] Teeths shift.
lips_period
[in] Lips period.
lips_shift
[in] Lips shift.
ma_method
[in] Moving average method (ENUM_MA_METHOD enumeration).
applied
[in] Volume type to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3015

Standard Library

Jaw
Returns the buffer element of the Jaws line by the specified index.
double Jaw(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the Jaws line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3016

Standard Library

Teeth
Returns the buffer element of the Teeths line by the specified index.
double Teeth(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the Teeths line of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3017

Standard Library

Lips
Returns the buffer element of the Lips line by the specified index.
double Lips(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the Lips line of the specified index, or EMPTY_VALUE if there isn't any correct
data.

2000-2014, MetaQuotes Software Corp.

3018

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_ALLIGATOR for CiAlligator).

2000-2014, MetaQuotes Software Corp.

3019

Standard Library

CiAO
CiAO is a class intended for using the Awesome Oscillator technical indicator.

Description
The CiAO class provides the creation, setup and access to the data of the Awesome Oscillator
indicator.

Declaration
class CiAO: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3020

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// Symbol
// Period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3021

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

3022

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_AO for CiAO).

2000-2014, MetaQuotes Software Corp.

3023

Standard Library

CiFractals
CiFractals is a class intended for using the Fractals technical indicator.

Description
The CiFractals class provides the creation, setup and access to the data of the Fractals indicator.

Declaration
class CiFractals: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Create Methods
Create

Creates the indicator

Data Access Methods


Upper

Returns the buffer element of the upper buffer

Lower

Returns the buffer element of the lower buffer

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3024

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

ENUM_TIMEFRAMES period

// Symbol
// Period

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3025

Standard Library

Upper
Returns the buffer element of the upper buffer by the specified index.
double Upper(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the upper buffer of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3026

Standard Library

Lower
Returns the buffer element of the lower buffer by the specified index.
double Lower(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the lower buffer of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3027

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_FRACTALS for CiFractals).

2000-2014, MetaQuotes Software Corp.

3028

Standard Library

CiGator
CiGator is a class intended for using the Gator Oscillator technical indicator.

Description
The CiGator class provides the creation, setup and access to the data of the Gator Oscillator indicator.

Declaration
class CiGator: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Attributes
JawPeriod

Returns the averaging period for the Jaws line

JawShift

Returns the horizontal shift of the Jaws line

TeethPeriod

Returns the averaging period for the Teeths


line

TeethShift

Returns the horizontal shift of the Teeths line

LipsPeriod

Returns the averaging period for the Lips line

LipsShift

Returns the horizontal shift of the Lips line

MaMethod

Returns the averaging method

Applied

Returns the price type or handle to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Upper

Returns the buffer element of the upper buffer

Lower

Returns the buffer element of the lower buffer

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3029

Standard Library

JawPeriod
Returns the averaging period for the Jaws line.
int JawPeriod() const

Returned value
Returns the averaging period for the Jaws line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3030

Standard Library

JawShift
Returns the horizontal shift of the Jaws line.
int JawShift() const

Returned value
Horizontal shift of the Jaws line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3031

Standard Library

TeethPeriod
Returns the averaging period for the Teeth line.
int TeethPeriod() const

Returned value
Returns the averaging period for the Teeth line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3032

Standard Library

TeethShift
Returns the horizontal shift of the Teeths line.
int TeethShift() const

Returned value
Horizontal shift of the Teeths line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3033

Standard Library

LipsPeriod
Returns the averaging period for the Lips line.
int LipsPeriod() const

Returned value
Returns the averaging period for the Lips line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3034

Standard Library

LipsShift
Returns the horizontal shift of the Lips line.
int LipsShift() const

Returned value
Horizontal shift of the Lips line, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3035

Standard Library

MaMethod
Returns the averaging method.
ENUM_MA_METHOD MaMethod() const

Returned value
Returns the averaging method, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3036

Standard Library

Applied
Returns the price type or handle to apply.
int Applied() const

Returned value
Price type or handle to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3037

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES period,

// Period

int

jaw_period,

// Jaws period

int

jaw_shift,

// Jaws shift

int

teeth_period,

// Teeths period

int

teeth_shift,

// Teeths shift

int

lips_period,

// Lips period

int

lips_shift,

// Lips shift

ENUM_MA_METHOD

ma_method,

// Averaging method

int

applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
jaw_period
[in] Jaws period.
jaw_shift
[in] Jaws shift.
teeth_period
[in] Teeths period.
teeth_shift
[in] Teeths shift.
lips_period
[in] Lips period.
lips_shift
[in] Lips shift.
ma_method
[in] Averaging method (ENUM_MA_METHOD enumeration).
applied
[in] Volume type to apply.
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3038

Standard Library

Upper
Returns the buffer element of the upper buffer by the specified index.
double Upper(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the upper buffer of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3039

Standard Library

Lower
Returns the buffer element of the lower buffer by the specified index.
double Upper(
int index

// Index

Parameters
index
[in] Element index.
Returned value
The buffer element of the lower buffer of the specified index, or EMPTY_VALUE if there isn't any
correct data.

2000-2014, MetaQuotes Software Corp.

3040

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_GATOR for CiGator).

2000-2014, MetaQuotes Software Corp.

3041

Standard Library

CiBWMFI
CiBWMFI is a class intended for using the Market Facilitation Index by Bill Williams technical indicator.

Description
The CiBWMFI class provides the creation, setup and access to the data of the Market Facilitation Index
by Bill Williams indicator.

Declaration
class CiBWMFI: public CIndicator

Title
#include <Indicators\BillWilliams.mqh>

Class Methods
Attributes
Applied

Returns the volume type to apply

Create Methods
Create

Creates the indicator

Data Access Methods


Main

Returns the buffer element

Input/output
virtual Type

Returns the object type identifier

2000-2014, MetaQuotes Software Corp.

3042

Standard Library

Applied
Returns the volume type to apply.
ENUM_APPLIED_VOLUME Applied() const

Returned value
Volume type to apply, defined at the indicator creation.

2000-2014, MetaQuotes Software Corp.

3043

Standard Library

Create
It creates the indicator with specified parameters.
bool Create(
string

symbol,

// Symbol

ENUM_TIMEFRAMES

period,

// Period

ENUM_APPLIED_VOLUME applied

// Volume type to apply

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
applied
[in] Volume type to apply (ENUM_APPLIED_VOLUME enumeration).
Returned value
true if successful, false if indicator hasn't been created.

2000-2014, MetaQuotes Software Corp.

3044

Standard Library

Main
Returns the buffer element by the specified index.
double Main(
int index

// Index

Parameters
index
[in] Element index.
Returned value
Buffer element of the specified index if successful, or EMPTY_VALUE if there isn't any correct data.

2000-2014, MetaQuotes Software Corp.

3045

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_BWMFI for CiBWMFI).

2000-2014, MetaQuotes Software Corp.

3046

Standard Library

CiCustom
CiCustom is a class intended for using the custom technical indicators.

Description
The CiCustom class provides the creation, setup and access to the data of the custom indicator.

Declaration
class CiCustom: public CIndicator

Title
#include <Indicators\Custom.mqh>

Class Methods
Attributes
NumBuffers

Sets the number of buffers

NumParams

Gets the number of parameters

ParamType

Gets the type of the specified parameter

ParamLong

Gets the value of the specified parameter of


integer type

ParamDouble

Gets the value of the specified parameter of


double type

ParamString

Gets the value of the specified parameter of


string type

Input/output
virtual Type

Gets the object type identifier

2000-2014, MetaQuotes Software Corp.

3047

Standard Library

NumBuffers
Sets the number of buffers.
bool NumBuffers(
int buffers

// number of buffers

Returned value
true if successful, false if buffers haven't been set.

2000-2014, MetaQuotes Software Corp.

3048

Standard Library

NumParams
Gets the number of parameters.
int NumParams() const

Returned value
Number of parameters, used in creation of the indicator.

2000-2014, MetaQuotes Software Corp.

3049

Standard Library

ParamType
Gets a type of the parameter with specified index.
ENUM_DATATYPE ParamType(
int index

// parameter index

) const

Parameters
index
[in] Parameter index.
Returned value
Returns the data type (value of ENUM_DATATYPE enumeration) of the parameter with specified
index, used in indicator creation.
Note
If parameter index is invalid, it returns WRONG_VALUE.

2000-2014, MetaQuotes Software Corp.

3050

Standard Library

ParamLong
Gets the value of specified parameter of long type.
long ParamLong(
int index

// index

) const

Parameters
index
[in] Parameter index.
Returned value
The value of specified parameter of long type, used in creation of the indicator.
Note
If the number is invalid, it returns 0.

2000-2014, MetaQuotes Software Corp.

3051

Standard Library

ParamDouble
Gets the value of specified parameter of double type.
double ParamDouble(
int index

// index

) const

Parameters
index
[in] Parameter index.
Returned value
The value of specified parameter of double type, used in creation of the indicator.
Note
If the number is invalid, it returns EMPTY_VALUE.

2000-2014, MetaQuotes Software Corp.

3052

Standard Library

ParamString
Gets the value of specified parameter of string type.
string ParamString(
int index

// index

) const

Parameters
index
[in] Parameter index.
Returned value
The value of specified string parameter, used in creation of the indicator.
Note
If the number is invalid, it returns an empty string.

2000-2014, MetaQuotes Software Corp.

3053

Standard Library

Type
Returns the object type identifier.
virtual int Type() const

Returned value
Object type identifier (IND_CUSTOM for CiCustom).

2000-2014, MetaQuotes Software Corp.

3054

Standard Library

Trade Classes
This section contains technical details of working with trade classes and description of the relevant
components of the MQL5 standard library.
Using trade classes will save time when creating custom programs (Expert Advisors).
MQL5 Standard Library (in terms of data sets) is placed in the terminal working directory, in the
Include\Arrays folder.
Class/Group

Description

CAccountInfo

Class for working with trade account properties

CSymbolInfo

Class for working


properties

COrderInfo

Class for working with pending order properties

CHistoryOrderInfo

Class for working with history order properties

CPositionInfo

Class for working with open position properties

CDealInfo

Class for working with history deal properties

CTrade

Class for trade operations execution

CTerminalInfo

Class for getting the properties


program environment

2000-2014, MetaQuotes Software Corp.

with

trade

instrument

of mql5

3055

Standard Library

CAccountInfo
CAccountInfo is a class for easy access to the currently opened trade account properties.

Description
CAccountInfo class provides easy access to the currently opened trade account properties.

Declaration
class CAccountInfo : public CObject

Title
#include <Trade\AccountInfo.mqh>

Class methods by groups


Access to integer type properties
Login

Gets the account number

TradeMode

Gets the trade mode

TradeModeDescription

Gets the trade mode as a string

Leverage

Gets the amount of given leverage

MarginMode

Gets the mode of account stop out

MarginModeDescription

Gets the description of account stop out mode

TradeAllowed

Gets the flag of trade allowance

TradeExpert

Gets the flag of automated trade allowance

LimitOrders

Gets the maximal number of allowed pending


orders

Access to double type properties


Balance

Gets the balance of account

Credit

Gets the amount of given credit

Profit

Gets the amount of current profit on account

Equity

Gets the amount of current equity on account

Margin

Gets the amount of reserved margin

FreeMargin

Gets the amount of free margin

MarginLevel

Gets the level of margin

MarginCall

Gets the level of margin for deposit

MarginStopOut

Gets the level of margin for Stop Out

2000-2014, MetaQuotes Software Corp.

3056

Standard Library

Access to text properties


Name

Gets the client name

Server

Gets the trade server name

Currency

Gets the deposit currency name

Company

Gets the company name, that serves an account

Access to MQL5 API functions


Integer

Gets the value of specified integer type


property

Double

Gets the value of specified double type property

String

Gets value of specified string type property

Additional methods
OrderProfitCheck

Gets the evaluated profit, based on the


parameters passed

MarginCheck

Gets the amount of margin, required to execute


trade operation

FreeMarginCheck

Gets the amount of free margin, left after


execution of trade operation

MaxLotCheck

Gets the maximal possible volume of trade


operation

2000-2014, MetaQuotes Software Corp.

3057

Standard Library

Login
Gets the account number.
long Login() const

Returned value
Account number.

2000-2014, MetaQuotes Software Corp.

3058

Standard Library

TradeMode
Gets the trade mode.
ENUM_ACCOUNT_TRADE_MODE TradeMode() const

Returned value
Trade mode (value of ENUM_ACCOUNT_TRADE_MODE enumeration).

2000-2014, MetaQuotes Software Corp.

3059

Standard Library

TradeModeDescription
Gets the trade mode as a string.
string TradeModeDescription() const

Returned value
Trade mode as a string.

2000-2014, MetaQuotes Software Corp.

3060

Standard Library

Leverage
Gets the amount of given leverage.
long Leverage() const

Returned value
Amount of given leverage.

2000-2014, MetaQuotes Software Corp.

3061

Standard Library

MarginMode
Gets the mode of account Stop Out.
ENUM_ACCOUNT_STOPOUT_MODE MarginMode() const

Returned value
Account Stop Out mode (value of ENUM_ACCOUNT_STOPOUT_MODE enumeration).

2000-2014, MetaQuotes Software Corp.

3062

Standard Library

MarginModeDescription
Gets the mode of setting minimal margin level as a string.
string MarginModeDescription() const

Returned value
Mode of setting minimal margin level as a string.

2000-2014, MetaQuotes Software Corp.

3063

Standard Library

TradeAllowed
Gets the flag of trade allowance.
bool TradeAllowed() const

Returned value
Flag of trade allowance.

2000-2014, MetaQuotes Software Corp.

3064

Standard Library

TradeExpert
Gets the flag of automated trade allowance.
bool TradeExpert() const

Returned value
Flag of automated trade allowance.

2000-2014, MetaQuotes Software Corp.

3065

Standard Library

LimitOrders
Gets the maximal number of allowed pending orders
int LimitOrders() const

Returned value
The maximal number of allowed pending orders.
Note
0 - no limits.

2000-2014, MetaQuotes Software Corp.

3066

Standard Library

Balance
Gets the balance of account.
double Balance() const

Returned value
The balance of account (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3067

Standard Library

Credit
Gets the amount of given credit.
double Credit() const

Returned value
Amount of given credit (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3068

Standard Library

Profit
Gets the amount of current profit on account.
double Profit() const

Returned value
Amount of current profit on account (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3069

Standard Library

Equity
Gets the amount of current equity on account.
double Equity() const

Returned value
Amount of current equity on account (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3070

Standard Library

Margin
Gets the amount of reserved margin.
double Margin() const

Returned value
Amount of reserved margin (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3071

Standard Library

FreeMargin
Gets the amount of free margin.
double FreeMargin() const

Returned value
Amount of free margin (in deposit currency).

2000-2014, MetaQuotes Software Corp.

3072

Standard Library

MarginLevel
Gets the level of margin.
double MarginLevel() const

Returned value
Level of margin.

2000-2014, MetaQuotes Software Corp.

3073

Standard Library

MarginCall
Gets the level of margin for a deposit.
double MarginCall() const

Returned value
Level of margin for a deposit.

2000-2014, MetaQuotes Software Corp.

3074

Standard Library

MarginStopOut
Gets the level of margin for Stop Out.
double MarginStopOut() const

Returned value
Level of margin for Stop Out.

2000-2014, MetaQuotes Software Corp.

3075

Standard Library

Name
Gets the client name.
string Name() const

Returned value
Client name.

2000-2014, MetaQuotes Software Corp.

3076

Standard Library

Server
Gets the trade server name.
string Server() const

Returned value
Trade server name.

2000-2014, MetaQuotes Software Corp.

3077

Standard Library

Currency
Gets the deposit currency name.
string Currency() const

Returned value
Deposit currency name.

2000-2014, MetaQuotes Software Corp.

3078

Standard Library

Company
Gets the company name, that serves an account.
string Company() const

Returned value
Company name, that serves an account.

2000-2014, MetaQuotes Software Corp.

3079

Standard Library

InfoInteger
Gets the value of specified integer type property.
long InfoInteger(
ENUM_ACCOUNT_INFO_INTEGER prop_id

// property ID

) const

Parameters
prop_id
[in]
Identifier of the property. The
ENUM_ACCOUNT_INFO_INTEGER enumeration.

value

can

be

Returned value
Value of long type.

2000-2014, MetaQuotes Software Corp.

one

of

the

values

of

3080

Standard Library

InfoDouble
Gets the value of specified double type property.
double InfoDouble(
ENUM_ACCOUNT_INFO_DOUBLE prop_id

// property ID

) const

Parameters
prop_id
[in]
Identifier of the property. The
ENUM_ACCOUNT_INFO_DOUBLE enumeration.

value

can

be

Returned value
Value of double type.

2000-2014, MetaQuotes Software Corp.

one

of

the

values

of

3081

Standard Library

InfoString
Gets the value of specified string type property.
string InfoString(
ENUM_ACCOUNT_INFO_STRING prop_id

// property ID

) const

Parameters
prop_id
[in]
Identifier of the property. The
ENUM_ACCOUNT_INFO_STRING enumeration.

value

can

be

Returned value
Value of string type.

2000-2014, MetaQuotes Software Corp.

one

of

the

values

of

3082

Standard Library

OrderProfitCheck
The function calculates the profit for the current account, based on the parameters passed. The
function is used for pre-evaluation of the result of a trade operation. The value is returned in the
account currency.
double OrderProfitCheck(
const string

symbol,

// symbol

ENUM_ORDER_TYPE

trade_operation,

// operation type (ORDER_TYPE_BUY or ORDER_TYPE_SELL)

double

volume,

// volume

double

price_open,

// open price

double

price_close

// close price

) const

Parameters
symbol
[in] Symbol for trade operation.
trade_operation
[in] Type of trade operation (ENUM_ORDER_TYPE enumeration).
volume
[in] Volume of trade operation.
price_open
[in] Open price.
price_close
[in] Close price.
Returned value
If successful, it returns amount of profit or EMPTY_VALUE in the case of error.

2000-2014, MetaQuotes Software Corp.

3083

Standard Library

MarginCheck
Gets the amount of margin, required for trade operation.
double MarginCheck(
const string

symbol,

// symbol

ENUM_ORDER_TYPE

trade_operation,

// operation

double

volume,

// volume

double

price

// price

) const

Parameters
symbol
[in] Symbol for trade operation.
trade_operation
[in] Type of trade operation (ENUM_ORDER_TYPE enumeration).
volume
[in] Volume of trade operation.
price
[in] Price of trade operation.
Returned value
Amount of margin, required for trade operation.

2000-2014, MetaQuotes Software Corp.

3084

Standard Library

FreeMarginCheck
Gets the amount of free margin, left after trade operation.
double FreeMarginCheck(
const string
ENUM_ORDER_TYPE

symbol,
trade_operation,

// symbol
// operation

double

volume,

// volume

double

price

// price

) const

Parameters
symbol
[in] Symbol for trade operation.
trade_operation
[in] Type of trade operation (ENUM_ORDER_TYPE enumeration).
volume
[in] Volume of trade operation.
price
[in] Price of trade operation.
Returned value
Amount of free margin, left after trade operation.

2000-2014, MetaQuotes Software Corp.

3085

Standard Library

MaxLotCheck
Gets the maximum possible volume of trade operation.
double MaxLotCheck(
const string

symbol,

// symbol

ENUM_ORDER_TYPE

trade_operation,

// operation

double

price,

// price

double

percent=100

// percent of available margin (0-100%), used for trade

) const

Parameters
symbol
[in] Symbol for trade operation.
trade_operation
[in] Type of trade operation (ENUM_ORDER_TYPE enumeration).
price
[in] Price of trade operation.
percent=100
[in] Percent of available margin (0-100%), used for trade operation.
Returned value
Maximum possible volume of trade operation.

2000-2014, MetaQuotes Software Corp.

3086

Standard Library

CSymbolInfo
CSymbolInfo is a class for easy access to the symbol properties.

Description
CSymbolInfo class provides access to the symbol properties.

Declaration
class CSymbolInfo : public CObject

Title
#include <Trade\SymbolInfo.mqh>

Class methods by groups


Controlling
Refresh

Refreshes the symbol data

RefreshRates

Refreshes the symbol quotes

Properties
Name

Gets/sets symbol name

Select

Gets/sets the "Market Watch" symbol flag

IsSynchronized

Checks the symbol synchronization with server

Volumes
Volume

Gets the volume of last deal

VolumeHigh

Gets the maximal volume for a day

VolumeLow

Gets the minimal volume for a day

Miscellaneous
Time

Gets the time of last quote

Spread

Gets the amount of spread (in points)

SpreadFloat

Gets the flag of floating spread

TickBookDepth

Gets the depth of ticks saving

Levels
StopsLevel

Gets the minimal indent for orders (in points)

FreezeLevel

Gets the distance of freezing trade operations


(in points)

Bid prices

2000-2014, MetaQuotes Software Corp.

3087

Standard Library

Bid

Gets the current Bid price

BidHigh

Gets the maximal Bid price for a day

BidLow

Gets the minimal Bid price for a day

Ask prices
Ask

Gets the current Ask price

AskHigh

Gets the maximal Ask price for a day

AskLow

Gets the minimal Ask price for a day

Prices
Last

Gets the current Last price

LastHigh

Gets the maximal Last price for a day

LastLow

Gets the minimal Last price for a day

Trade modes
TradeCalcMode

Gets the mode of contract cost calculation

TradeCalcModeDescription

Gets the mode of contract cost calculation as a


string

TradeMode

Gets the type of order execution

TradeModeDescription

Gets the type of order execution as a string

TradeExecution

Gets the closing of deals mode

TradeExecutionDescription

Gets the closing of deals mode as a string

Swaps
SwapMode

Gets the swap calculation model

SwapModeDescription

Gets the swap calculation model as a string

SwapRollover3days

Gets the day of triple swap charge

SwapRollover3daysDescription

Gets the day of triple swap charge as a string

Margins and flags


MarginInitial

Gets the value of initial margin

MarginMaintenance

Gets the value of maintenance margin

MarginLong

Gets the rate of margin charging for long


positions

MarginShort

Gets the rate of margin charging for short


positions

MarginLimit

Gets the rate of margin charging for Limit


orders

MarginStop

Gets the rate of margin charging for Stop

2000-2014, MetaQuotes Software Corp.

3088

Standard Library

orders
MarginStopLimit

Gets the rate of margin charging for StopLimit


orders

TradeTimeFlags

Gets the flags of the order expiration allowed


modes

TradeFillFlags

Gets the flags of the order filling allowed modes

Quantization
Digits

Gets the number of digits after period

Point

Gets the value of one point

TickValue

Gets the cost of tick (minimal change of price)

TickValueProfit

Gets the calculated tick price for a profitable


position

TickValueLoss

Gets the calculated tick price for a losing


position

TickSize

Gets the minimal change of price

Contracts sizes
ContractSize

Gets the amount of trade contract

LotsMin

Gets the minimal volume to close a deal

LotsMax

Gets the maximal volume to close a deal

LotsStep

Gets the minimal step of volume change to


close a deal

LotsLimit

Gets the maximal allowed volume of opened


position and pending orders (direction
insensitive) for one symbol

Swaps sizes
SwapLong

Gets the value of long position swap

SwapShort

Gets the value of short position swap

Text properties
CurrencyBase

Gets the name of symbol base currency

CurrencyProfit

Gets the profit currency name

CurrencyMargin

Gets the margin currency name

Bank

Gets the name of current quote source

Description

Gets the string description of symbol

Path

Gets the path in symbols tree

Symbol properties

2000-2014, MetaQuotes Software Corp.

3089

Standard Library

SessionDeals

Gets the number of deals in the current session

SessionBuyOrders

Gets the number of Buy orders at the moment

SessionSellOrders

Gets the number of Sell orders at the moment

SessionTurnover

Gets the summary turnover of the current


session

SessionInterest

Gets the summary open interest of the current


session

SessionBuyOrdersVolume

Gets the current volume of Buy orders

SessionSellOrdersVolume

Gets the current volume of Sell orders

SessionOpen

Gets the open price of the current session

SessionClose

Gets the close price of the current session

SessionAW

Gets the average weighted price of the current


session

SessionPriceSettlement

Gets the settlement price of the current session

SessionPriceLimitMin

Gets the minimal price of the current session

SessionPriceLimitMax

Gets the maximal price of the current session

Access to MQL5 API functions


InfoInteger

Gets the value of specified integer type


property

InfoDouble

Gets the value of specified double type property

InfoString

Gets the value of specified string type property

Service functions
NormalizePrice

Returns the value of price, normalized using the


symbol properties

2000-2014, MetaQuotes Software Corp.

3090

Standard Library

Refresh
Refreshes the symbol data.
void Refresh()

Returned value
None.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3091

Standard Library

RefreshRates
Refreshes the symbol quotes data.
bool RefreshRates()

Returned value
true in case of success, false if unable to refresh quotes.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3092

Standard Library

Name
Gets symbol name.
string Name() const

Returned value
Symbol name.

Name
Sets symbol name.
bool Name(string name)

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3093

Standard Library

Select
Gets the "Market Watch" symbol flag.
bool Select() const

Returned value
Gets the "Market Watch" symbol flag.

Select
Sets the "Market Watch" symbol flag.
bool Select()

Returned value
true in case of success, false if unable to change flag.

2000-2014, MetaQuotes Software Corp.

3094

Standard Library

IsSynchronized
Checks the symbol synchronization with server.
bool IsSynchronized() const

Returned value
true if the symbol is synchronized with server, false if not.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3095

Standard Library

Volume
Gets the volume of last deal.
long Volume() const

Returned value
Volume of last deal.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3096

Standard Library

VolumeHigh
Gets the maximal volume of the day.
long VolumeHigh() const

Returned value
Maximal volume of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3097

Standard Library

VolumeLow
Gets the minimal volume of the day.
long VolumeLow() const

Returned value
Minimal volume of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3098

Standard Library

Time
Gets the time of last quote.
datetime Time() const

Returned value
Time of last quote.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3099

Standard Library

Spread
Gets the amount of spread (in points).
int Spread() const

Returned value
Gets the amount of spread (in points).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3100

Standard Library

SpreadFloat
Gets the flag of floating spread.
bool SpreadFloat() const

Returned value
Flag of floating spread.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3101

Standard Library

TicksBookDepth
Gets the depth of ticks saving.
int TicksBookDepth() const

Returned value
Depth of ticks saving.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3102

Standard Library

StopsLevel
Gets the minimal stop level for orders (in points).
int StopsLevel() const

Returned value
Minimal stop level for orders (in points).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3103

Standard Library

FreezeLevel
Gets the freeze level (in points).
int FreezeLevel() const

Returned value
Distance of freeze level (in points).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3104

Standard Library

Bid
Gets the current Bid price.
double Bid() const

Returned value
Current Bid price.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3105

Standard Library

BidHigh
Gets the maximal Bid price of the day.
double BidHigh() const

Returned value
Maximal Bid price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3106

Standard Library

BidLow
Gets the minimal Bid price of the day.
double BidLow() const

Returned value
Minimal Bid price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3107

Standard Library

Ask
Gets the current Ask price.
double Ask() const

Returned value
Current Ask price.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3108

Standard Library

AskHigh
Gets the maximal Ask price for a day.
double AskHigh() const

Returned value
Maximal Ask price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3109

Standard Library

AskLow
Gets the minimal Ask price for a day.
double AskLow() const

Returned value
Minimal Ask price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3110

Standard Library

Last
Gets the current Last price.
double Last() const

Returned value
Current Last price.

2000-2014, MetaQuotes Software Corp.

3111

Standard Library

LastHigh
Gets the maximal Last price of the day.
double LastHigh() const

Returned value
Maximal Last price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3112

Standard Library

LastLow
Gets the minimal Last price of the day.
double LastLow() const

Returned value
Minimal Last price of the day.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3113

Standard Library

TradeCalcMode
Gets the mode of contract cost calculation.
ENUM_SYMBOL_CALC_MODE TradeCalcMode() const

Returned value
Mode of contract cost calculation (value of ENUM_SYMBOL_CALC_MODE enumeration).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3114

Standard Library

TradeCalcModeDescription
Gets the mode of contract cost calculation as a string.
string TradeCalcModeDescription() const

Returned value
Mode of contract cost calculation as a string.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3115

Standard Library

TradeMode
Gets the order execution type.
ENUM_SYMBOL_TRADE_MODE TradeMode() const

Returned value
Order execution type (value of ENUM_SYMBOL_TRADE_MODE enumeration).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3116

Standard Library

TradeModeDescription
Gets the trade mode as a string.
string TradeModeDescription() const

Returned value
Trade mode as a string.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3117

Standard Library

TradeExecution
Gets the trade execution mode.
ENUM_SYMBOL_TRADE_EXECUTION TradeExecution() const

Returned value
Trade execution mode (value of ENUM_SYMBOL_TRADE_EXECUTION enumeration).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3118

Standard Library

TradeExecutionDescription
Gets the description of trade execution mode as a string.
string TradeExecutionDescription() const

Returned value
Trade execution mode as a string.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3119

Standard Library

SwapMode
Gets the swap calculation mode.
ENUM_SYMBOL_SWAP_MODE SwapMode() const

Returned value
Swap calculation mode (value of ENUM_SYMBOL_SWAP_MODE enumeration).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3120

Standard Library

SwapModeDescription
Gets the swap mode description as a string.
string SwapModeDescription() const

Returned value
Swap mode descriprion as a string.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3121

Standard Library

SwapRollover3days
Gets the swap rollover day.
ENUM_DAY_OF_WEEK SwapRollover3days() const

Returned value
Swap rollover day (value of ENUM_DAY_OF_WEEK enumeration).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3122

Standard Library

SwapRollover3daysDescription
Gets the swap rollover day as a string.
string SwapRollover3daysDescription() const

Returned value
Swap rollover day as a string.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3123

Standard Library

MarginInitial
Gets the value of initial margin.
double MarginInitial()

Returned value
Value of initial margin.
Note
It points the amount of margin (in margin currency of instrument), that is charged from one lot.
Used to check client's equity, when he enters the market.
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3124

Standard Library

MarginMaintenance
Gets the value of maintenance margin.
double MarginMaintenance()

Returned value
Value of maintenance margin.
Note
It points the amount of margin (in margin currency of instrument), that is charged from one lot.
Used to check client's equity, when the account state is changed. If the maintenance margin is equal
to 0, then the initial margin is used.
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3125

Standard Library

MarginLong
Gets the rate of margin charging on long positons.
double MarginLong() const

Returned value
Rate of margin charging on long positons.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3126

Standard Library

MarginShort
Gets the rate of margin charging on short positons.
double MarginShort() const

Returned value
Rate of margin charging on short positons.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3127

Standard Library

MarginLimit
Gets the rate of margin charging on Limit orders.
double MarginLimit() const

Returned value
Rate of margin charging on Limit orders.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3128

Standard Library

MarginStop
Gets the rate of margin charging on Stop orders.
double MarginStop() const

Returned value
Rate of margin charging on Stop orders.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3129

Standard Library

MarginStopLimit
Gets the rate of margin charging on Stop Limit orders.
double MarginStopLimit() const

Returned value
Rate of margin charging on Stop Limit orders.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3130

Standard Library

TradeTimeFlags
Gets the flags of the order expiration allowed modes.
int TradeTimeFlags() const

Returned value
Flags of the order expiration allowed modes.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3131

Standard Library

TradeFillFlags
Gets the flags of the order filling allowed modes.
int TradeFillFlags() const

Returned value
Flags of the order filling allowed modes.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3132

Standard Library

Digits
Gets the number of digits after period.
int Digits() const

Returned value
Gets the number of digits after period.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3133

Standard Library

Point
Gets the value of one point.
double Point() const

Returned value
Value of one point.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3134

Standard Library

TickValue
Gets the cost of tick (minimal change of price).
double TickValue() const

Returned value
Cost of tick (minimal change of price).
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3135

Standard Library

TickValueProfit
Gets the calculated tick price for a profitable position.
double TickValueProfit() const

Returned value
The calculated tick price for a profitable position.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3136

Standard Library

TicksBookDepth
Gets the calculated tick price for a losing position.
double TicksBookDepth() const

Returned value
The calculated tick price for a losing position.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3137

Standard Library

TickSize
Gets the minimal change of price.
double TickSize() const

Returned value
Minimal change of price.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3138

Standard Library

ContractSize
Gets the amount of trade contract.
double ContractSize() const

Returned value
Amount of trade contract.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3139

Standard Library

LotsMin
Gets the minimal volume to close a deal.
double LotsMin() const

Returned value
Minimal volume to close a deal.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3140

Standard Library

LotsMax
Gets the maximal volume to close a deal.
double LotsMax() const

Returned value
Maximal volume to close a deal.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3141

Standard Library

LotsStep
Gets the minimal step of volume change to close a deal.
double LotsStep() const

Returned value
Minimal step of volume change to close a deal.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3142

Standard Library

LotsLimit
Gets the maximal allowed volume of opened position and pending orders (direction insensitive) for one
symbol.
double LotsLimit() const

Returned value
The maximal allowed volume of opened position and pending orders (direction insensitive) for one
symbol.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3143

Standard Library

SwapLong
Gets the value of long position swap.
double SwapLong() const

Returned value
Value of long position swap.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3144

Standard Library

SwapShort
Gets the value of short position swap.
double SwapShort() const

Returned value
Value of short position swap.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3145

Standard Library

CurrencyBase
Gets the name of symbol base currency.
string CurrencyBase() const

Returned value
Name of symbol base currency.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3146

Standard Library

CurrencyProfit
Gets the profit currency name.
string CurrencyProfit() const

Returned value
Profit currency name.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3147

Standard Library

CurrencyMargin
Gets the margin currency name.
string CurrencyMargin() const

Returned value
Margin currency name.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3148

Standard Library

Bank
Gets the name of current quote source.
string Bank() const

Returned value
Name of current quote source.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3149

Standard Library

Description
Gets the string description of symbol.
string Description() const

Returned value
String description of symbol.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3150

Standard Library

Path
Gets the path in symbols tree.
string Path() const

Returned value
Gets the path in symbols tree.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3151

Standard Library

SessionDeals
Gets the number of deals in the current session.
long SessionDeals() const

Returned value
Number of deals in the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3152

Standard Library

SessionBuyOrders
Gets the number of Buy orders at the moment.
long SessionBuyOrders() const

Returned value
Number of Buy orders at the moment.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3153

Standard Library

SessionSellOrders
Gets then number of Sell orders at the moment.
long SessionSellOrders() const

Returned value
Number of Sell orders at the moment.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3154

Standard Library

SessionTurnover
Gets summary turnover of the current session.
double SessionTurnover() const

Returned value
Summary turnover of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3155

Standard Library

SessionInterest
Gets the summary open interest of the current session.
double SessionInterest() const

Returned value
Summary open interest of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3156

Standard Library

SessionBuyOrdersVolume
Gets the current volume of Buy orders.
double SessionBuyOrdersVolume() const

Returned value
Current volume of Buy orders.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3157

Standard Library

SessionSellOrdersVolume
Gets the current volume of Sell orders.
double SessionSellOrdersVolume() const

Returned value
Current volume of Sell orders.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3158

Standard Library

SessionOpen
Gets the open price of the current session.
double SessionOpen() const

Returned value
Open price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3159

Standard Library

SessionClose
Gets the close price of the current session.
double SessionClose() const

Returned value
Close price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3160

Standard Library

SessionAW
Gets the average weighted price of the current session.
double SessionAW() const

Returned value
Average weighted price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3161

Standard Library

SessionPriceSettlement
Gets the settlement price of the current session.
double SessionPriceSettlement() const

Returned value
Settlement price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3162

Standard Library

SessionPriceLimitMin
Gets the minimal price of the current session.
double SessionPriceLimitMin() const

Returned value
Minimal price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3163

Standard Library

SessionPriceLimitMax
Gets the maximal price of the current session.
double SessionPriceLimitMax() const

Returned value
Maximal price of the current session.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3164

Standard Library

InfoInteger
Gets the value of specified integer type property.
bool InfoInteger(
ENUM_SYMBOL_INFO_INTEGER prop_id,

// property ID

long&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of integer type property (value of ENUM_SYMBOL_INFO_INTEGER enumeration).
var
[out] Reference to long type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3165

Standard Library

InfoDouble
Gets the value of specified double type property.
bool InfoDouble(
ENUM_SYMBOL_INFO_DOUBLE prop_id,

// property ID

double&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of double type property (value of ENUM_SYMBOL_INFO_DOUBLE enumeration).
var
[out] Reference to double type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3166

Standard Library

InfoString
Gets the value of specified string type property.
bool InfoString(
ENUM_SYMBOL_INFO_STRING prop_id,

// property ID

string&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of text property.
var
[out] Reference to string type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3167

Standard Library

NormalizePrice
Returns the value of price, normalized using the symbol properties.
double NormalizePrice(
double

price

// price

) const

Parameters
price
[in] Price.
Returned value
Normalized price.
Note
The symbol should be selected by Name method.

2000-2014, MetaQuotes Software Corp.

3168

Standard Library

COrderInfo
COrderInfo is a class for easy access to the pending order properties.

Description
COrderInfo class provides access to the pending order properties.

Declaration
class COrderInfo : public CObject

Title
#include <Trade\OrderInfo.mqh>

Class methods by groups


Access to integer type properties
Ticket

Gets the ticket of an order, previously selected


for access

TimeSetup

Gets the time of order placement

TimeSetupMsc

Receives the time of placing an order in


milliseconds since 01.01.1970

OrderType

Gets the order type

OrderTypeDescription

Gets the order type as a string

State

Gets the order state

StateDescription

Gets the order state as a string

TimeExpiration

Gets the time of order expiration

TimeDone

Gets the time of order execution or cancellation

TimeDoneMsc

Receives order execution or cancellation time in


milliseconds since 01.01.1970

TypeFilling

Gets the type of order execution by remainder

TypeFillingDescription

Gets the type of order execution by remainder


as a string

TypeTime

Gets the type of order at the time of the


expiration

TypeTimeDescription

Gets the order type by expiration time as a


string

Magic

Gets the ID of expert, that placed the order

PositionId

Gets the ID of position

2000-2014, MetaQuotes Software Corp.

3169

Standard Library

Access to double type properties


VolumeInitial

Gets the initial volume of order

VolumeCurrent

Gets the unfilled volume of order

PriceOpen

Gets the order price

StopLoss

Gets the order's Stop Loss

TakeProfit

Gets the order's Take Profit

PriceCurrent

Gets the current price by order symbol

PriceStopLimit

Gets the price of setting limit order

Access to text properties


Symbol

Gets the name of order symbol

Comment

Gets the order comment

Access to MQL5 API functions


InfoInteger

Gets the value of specified integer type


property

InfoDouble

Gets the value of specified double type property

InfoString

Gets value of specified string type property

State
StoreState

Saves the order parameters

CheckState

Checks the current parameters against the


saved parameters

Selection
Select

Selects an order by ticket for further access to


its properties

SelectByIndex

Selects an order by index for further access to


its properties

2000-2014, MetaQuotes Software Corp.

3170

Standard Library

Ticket
Gets the ticket of an order, previously selected for access using the Select method.
ulong Ticket() const

Returned value
Order ticket if successful, otherwise - ULONG_MAX.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3171

Standard Library

TimeSetup
Gets the time of order placement.
datetime TimeSetup() const

Returned value
Time of order placement.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3172

Standard Library

TimeSetupMsc
Receives the time of placing an order for execution in milliseconds since 01.01.1970.
ulong TimeSetupMsc() const

Returned value
The time of placing an order for execution in milliseconds since 01.01.1970.
Note
Order should be preliminarily selected for access using Select (by ticket) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3173

Standard Library

OrderType
Gets the order type.
ENUM_ORDER_TYPE OrderType()

Returned value
Order type (value of ENUM_ORDER_TYPE enumeration).
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3174

Standard Library

TypeDescription
Gets the order type as a string.
string TypeDescription() const

Returned value
Order type as a string.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3175

Standard Library

State
Gets the order state.
ENUM_ORDER_STATE State() const

Returned value
Order state (value of ENUM_ORDER_STATE enumeration).
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3176

Standard Library

StateDescription
Gets the order state as a string.
string StateDescription() const

Returned value
Order state as a string.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3177

Standard Library

TimeExpiration
Gets the order expiration time.
datetime TimeExpiration() const

Returned value
Order expiration time, set on its placement.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3178

Standard Library

TimeDone
Gets the time of order execution or cancellation.
datetime TimeDone() const

Returned value
Time of order execution or cancellation.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3179

Standard Library

TimeDoneMsc
Receives order execution or cancellation time in milliseconds since 01.01.1970.
ulong TimeDoneMsc() const

Returned value
Order execution or cancellation time in milliseconds since 01.01.1970.
Note
Order should be preliminarily selected for access using Select (by ticket) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3180

Standard Library

TypeFilling
Gets the order filling type.
ENUM_ORDER_TYPE_FILLING TypeFilling() const

Returned value
Order filling type (value of ENUM_ORDER_TYPE_FILLING enumeration).
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3181

Standard Library

TypeFillingDescription
Gets the order filling type as a string.
string TypeFillingDescription() const

Returned value
Order filling type as a string.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3182

Standard Library

TypeTime
Gets the type of order at the time of the expiration.
ENUM_ORDER_TYPE_TIME TypeTime() const

Returned value
Type of order at the time of the expiration.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3183

Standard Library

TypeTimeDescription
Gets the order type by expiration time as a string.
string TypeTimeDescription() const

Returned value
Order type by expiration time as a string.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3184

Standard Library

Magic
Gets the ID of expert, that placed the order.
long Magic() const

Returned value
ID of expert, that placed the order.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3185

Standard Library

PositionId
Gets the ID of position.
long PositionId() const

Returned value
ID of position, in which the order was involved.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3186

Standard Library

VolumeInitial
Gets the initial volume of order.
double VolumeInitial() const

Returned value
Initial volume of order.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3187

Standard Library

VolumeCurrent
Gets the unfilled volume of order.
double VolumeCurrent() const

Returned value
Unfilled volume of order.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3188

Standard Library

PriceOpen
Gets the order price.
double PriceOpen() const

Returned value
Price of order placement.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3189

Standard Library

StopLoss
Gets the order's Stop Loss.
double StopLoss() const

Returned value
Order's Stop Loss.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3190

Standard Library

TakeProfit
Gets the order's Take Profit.
double TakeProfit() const

Returned value
Order's Take Profit.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3191

Standard Library

PriceCurrent
Gets the current price by order symbol.
double PriceCurrent() const

Returned value
Current price by order symbol.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3192

Standard Library

PriceStopLimit
Gets the price of setting limit order.
double PriceStopLimit() const

Returned value
Price of setting limit order.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3193

Standard Library

Symbol
Gets the name of order symbol.
string Symbol() const

Returned value
Name of order symbol.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3194

Standard Library

Comment
Gets the order comment.
string Comment() const

Returned value
Order comment.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3195

Standard Library

InfoInteger
Gets the value of specified integer type property.
bool InfoInteger(
ENUM_ORDER_PROPERTY_INTEGER prop_id,

// property ID

long&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of integer type property (value of ENUM_ORDER_PROPERTY_INTEGER enumeration).
var
[out] Reference to long type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3196

Standard Library

InfoDouble
Gets the value of specified double type property.
bool InfoDouble(
ENUM_ORDER_PROPERTY_DOUBLE prop_id,

// property ID

double&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of double type property (value of ENUM_ORDER_PROPERTY_DOUBLE enumeration).
var
[out] Reference to double type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3197

Standard Library

InfoString
Gets the value of specified string type property.
bool InfoString(
ENUM_ORDER_PROPERTY_STRING prop_id,

// property ID

string&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of text property.
var
[out] Reference to string type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The order should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3198

Standard Library

StoreState
Saves the order parameters.
void StoreState()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3199

Standard Library

CheckState
Checks the current parameters against the saved parameters.
bool CheckState()

Returned value
true - if the order parameters have changed since the last call of the StoreState() method, otherwise
- false.

2000-2014, MetaQuotes Software Corp.

3200

Standard Library

Select
Selects an order by ticket for further access to its properties.
bool Select(
ulong

ticket

// order ticket

Returned value
true in case of success, false if unable to select order.

2000-2014, MetaQuotes Software Corp.

3201

Standard Library

SelectByIndex
Selects an order by index for further access to its properties.
bool SelectByIndex(
int

index

// order index

Returned value
true in case of success, false if unable to select order.

2000-2014, MetaQuotes Software Corp.

3202

Standard Library

CHistoryOrderInfo
CHistoryOrderInfo is a class for easy access to the history order properties.

Description
CHistoryOrderInfo class provides easy access to the history order properties.

Declaration
class CHistoryOrderInfo : public CObject

Title
#include <Trade\HistoryOrderInfo.mqh>

Class methods by groups


Access to integer type properties
TimeSetup

Gets the time of order placement

TimeSetupMsc

Receives the time of placing an order in


milliseconds since 01.01.1970

OrderType

Gets the order type

OrderTypeDescription

Gets the order type as a string

State

Gets the order state

StateDescription

Gets the order state as a string

TimeExpiration

Gets the time of order expiration

TimeDone

Gets the time of order execution or cancellation

TimeDoneMsc

Receives order execution or cancellation time in


milliseconds since 01.01.1970

TypeFilling

Gets the type of order execution by remainder

TypeFillingDescription

Gets the type of order execution by remainder


as a string

TypeTime

Gets the type of order at the time of the


expiration

TypeTimeDescription

Gets the order type by expiration time as a


string

Magic

Gets the ID of expert, that placed the order

PositionId

Gets the ID of position

Access to double type properties


VolumeInitial

Gets the initial volume of order

2000-2014, MetaQuotes Software Corp.

3203

Standard Library

VolumeCurrent

Gets the unfilled volume of order

PriceOpen

Gets the order price

StopLoss

Gets the order's Stop Loss

TakeProfit

Gets the order's Take Profit

PriceCurrent

Gets the current price by order symbol

PriceStopLimit

Gets the price of setting limit order

Access to text properties


Symbol

Gets the order symbol

Comment

Gets the order comment

Access to MQL5 API functions


InfoInteger

Gets the value of specified integer type


property

InfoDouble

Gets the value of specified double type property

InfoString

Gets value of specified string type property

Selection
Ticket

Gets the ticket/selects the order

SelectByIndex

Selects the order by index

2000-2014, MetaQuotes Software Corp.

3204

Standard Library

TimeSetup
Gets the time of order placement.
datetime TimeSetup() const

Returned value
Time of order placement.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3205

Standard Library

TimeSetupMsc
Receives the time of placing an order for execution in milliseconds since 01.01.1970.
ulong TimeSetupMsc() const

Returned value
The time of placing an order for execution in milliseconds since 01.01.1970.
Note
Historical order should be preliminarily selected for access using Ticket (by ticket) or SelectByIndex (by
index) method.

2000-2014, MetaQuotes Software Corp.

3206

Standard Library

OrderType
Gets the order type.
ENUM_ORDER_TYPE OrderType() const

Returned value
Order type (value of ENUM_ORDER_TYPE enumeration).
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3207

Standard Library

TypeDescription
Gets the order type as a string.
string TypeDescription() const

Returned value
Order type as a string.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3208

Standard Library

State
Gets the order state.
ENUM_ORDER_STATE State() const

Returned value
Order state (value of ENUM_ORDER_STATE enumeration).
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3209

Standard Library

StateDescription
Gets the order state as a string.
string StateDescription() const

Returned value
Order state as a string.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3210

Standard Library

TimeExpiration
Gets the time of order expiration.
datetime TimeExpiration() const

Returned value
Time of order expiration, set on its placement.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3211

Standard Library

TimeDone
Gets the time of order execution or cancellation.
datetime TimeDone() const

Returned value
Time of order execution or cancellation.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3212

Standard Library

TimeDoneMsc
Receives order execution or cancellation time in milliseconds since 01.01.1970.
ulong TimeDoneMsc() const

Returned value
Order execution or cancellation time in milliseconds since 01.01.1970.
Note
Historical order should be preliminarily selected for access using Ticket (by ticket) or SelectByIndex (by
index) method.

2000-2014, MetaQuotes Software Corp.

3213

Standard Library

TypeFilling
Gets the type of order execution by remainder.
ENUM_ORDER_TYPE_FILLING TypeFilling() const

Returned value
Type of order execution by remainder (value of ENUM_ORDER_TYPE_FILLING enumeration).
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3214

Standard Library

TypeFillingDescription
Gets the type of order execution by remainder as a string.
string TypeFillingDescription() const

Returned value
Type order of execution by remainder as a string.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3215

Standard Library

TypeTime
Gets the type of order at the time of the expiration.
ENUM_ORDER_TYPE_TIME TypeTime() const

Returned value
Type of order at the time of the expiration (value of ENUM_ORDER_TYPE_TIME enumeration).
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3216

Standard Library

TypeTimeDescription
Gets the order type by expiration time as a string.
string TypeTimeDescription() const

Returned value
Order type by expiration time as a string.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3217

Standard Library

Magic
Gets the ID of the Expert Advisor, that placed the order.
long Magic() const

Returned value
ID of the Expert Advisor, that placed the order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3218

Standard Library

PositionId
Gets the ID of position.
long PositionId() const

Returned value
ID of position, in which the order was involved.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3219

Standard Library

VolumeInitial
Gets the initial volume of order.
double VolumeInitial() const

Returned value
Initial volume of order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3220

Standard Library

VolumeCurrent
Gets the unfilled volume of order.
double VolumeCurrent() const

Returned value
Unfilled volume of order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3221

Standard Library

PriceOpen
Gets the order price.
double PriceOpen() const

Returned value
Price of order placement.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3222

Standard Library

StopLoss
Gets the Stop Loss price of the order.
double StopLoss() const

Returned value
Stop Loss price of the order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3223

Standard Library

TakeProfit
Gets the Take Profit price of the order.
double TakeProfit() const

Returned value
The Take Profit price of the order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3224

Standard Library

PriceCurrent
Gets the current price of the order's symbol.
double PriceCurrent() const

Returned value
The current price of order's symbol.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3225

Standard Library

PriceStopLimit
Gets the stop limit price of the order.
double PriceStopLimit() const

Returned value
Stop Limit price of the order.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3226

Standard Library

Symbol
Gets the name of order symbol.
string Symbol() const

Returned value
Name of order symbol.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3227

Standard Library

Comment
Gets the order comment.
string Comment() const

Returned value
Order comment.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3228

Standard Library

InfoInteger
Gets the value of specified integer type property.
bool InfoInteger(
ENUM_ORDER_PROPERTY_INTEGER prop_id,

// property ID

long&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of integer type property (value of ENUM_ORDER_PROPERTY_INTEGER enumeration).
var
[out] Reference to long type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3229

Standard Library

InfoDouble
Gets the value of specified double type property.
bool InfoDouble(
ENUM_ORDER_PROPERTY_DOUBLE prop_id,

// property ID

double&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of double type property (value of ENUM_ORDER_PROPERTY_DOUBLE enumeration).
var
[out] Reference to double type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3230

Standard Library

InfoString
Gets the value of specified string type property.
bool InfoString(
ENUM_ORDER_PROPERTY_STRING prop_id,

// property ID

string&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of text property (value of ENUM_ORDER_PROPERTY_STRING enumeration).
var
[out] Reference to string type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The historical order should be selected using the Ticket (by ticket) or SelectByIndex (by index)
methods.

2000-2014, MetaQuotes Software Corp.

3231

Standard Library

Ticket (Get method)


Gets the order ticket.
ulong Ticket() const

Returned value
Order ticket.

Ticket (Set method)


Select the order for further work.
void Ticket(
ulong ticket

// order ticket

Parameters
ticket
[in] Order ticket.

2000-2014, MetaQuotes Software Corp.

3232

Standard Library

SelectByIndex
Selects an order by index for further access to its properties.
bool SelectByIndex(
int

index

// order index

Returned value
true in case of success, false if unable to select order.

2000-2014, MetaQuotes Software Corp.

3233

Standard Library

CPositionInfo
CPositionInfo is a class for easy access to the open position properties.

Description
CPositionInfo class provides easy access to the open position properties.

Declaration
class CPositionInfo : public CObject

Title
#include <Trade\PositionInfo.mqh>

Class methods by groups


Access to integer type properties
Time

Gets the time of position opening

TimeMsc

Receives the time of


position opening in
milliseconds since 01.01.1970

TimeUpdate

Receives the time of position changing in


seconds since 01.01.1970

TimeUpdateMsc

Receives the time of position changing in


milliseconds since 01.01.1970

PositionType

Gets the position type

TypeDescription

Gets the position type as a string

Magic

Gets the ID of expert, that opened the position

Identifier

Gets the ID of position

Access to double type properties


Volume

Gets the volume of position

PriceOpen

Gets the price of position opening

StopLoss

Gets the price of position's Stop Loss

TakeProfit

Gets the price of position's Take Profit

PriceCurrent

Gets the current price by position symbol

Commission

Gets the amount of commission by position

Swap

Gets the amount of swap by position

Profit

Gets the amount of current profit by position

Access to text properties

2000-2014, MetaQuotes Software Corp.

3234

Standard Library

Symbol

Gets the name of position symbol

Comment

Gets the comment of the position

Access to MQL5 API functions


InfoInteger

Gets the value of specified integer type


property

InfoDouble

Gets the value of specified double type property

InfoString

Gets the value of specified string type property

Selection
Select

Selects the position

SelectByIndex

Selects the position by index

State
StoreState

Saves the position parameters

CheckState

Checks the current parameters against the


saved parameters

2000-2014, MetaQuotes Software Corp.

3235

Standard Library

Time
Gets the time of position opening.
datetime Time() const

Returned value
Time of position opening.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3236

Standard Library

TimeMsc
Receives position opening time in milliseconds since 01.01.1970.
ulong TimeMsc() const

Returned value
Position opening time in milliseconds since 01.01.1970.
Note
Position should be preliminarily selected for access using Select (by symbol) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3237

Standard Library

TimeUpdate
Receives the time of position changing in seconds since 01.01.1970.
datetime TimeUpdate() const

Returned value
Time of position changing in seconds since 01.01.1970.
Note
Position should be preliminarily selected for access using Select (by symbol) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3238

Standard Library

TimeUpdateMsc
Receives the time of position changing in milliseconds since 01.01.1970.
ulong TimeUpdateMsc() const

Returned value
The time of position changing in milliseconds since 01.01.1970.
Note
Position should be preliminarily selected for access using Select (by symbol) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3239

Standard Library

PositionType
Gets the position type.
ENUM_POSITION_TYPE PositionType() const

Returned value
Position type (value of ENUM_POSITION_TYPE enumeration).
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3240

Standard Library

TypeDescription
Gets the position type as a string.
string TypeDescription() const

Returned value
Position type as a string.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3241

Standard Library

Magic
Gets the ID of Expert Advisor, opened the position.
long Magic() const

Returned value
ID of the Expert Advisor, opened the position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3242

Standard Library

Identifier
Gets the ID of position.
long Identifier() const

Returned value
ID of position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3243

Standard Library

Volume
Gets the volume of position.
double Volume() const

Returned value
Volume of position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3244

Standard Library

PriceOpen
Gets the price of position opening.
double PriceOpen() const

Returned value
Position open price.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3245

Standard Library

StopLoss
Gets the Stop Loss price of the position.
double StopLoss() const

Returned value
The Stop Loss price of the position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3246

Standard Library

TakeProfit
Gets the Take Profit price of the position.
double TakeProfit() const

Returned value
The Take Profit price of the position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3247

Standard Library

PriceCurrent
Gets the current price by position symbol.
double PriceCurrent() const

Returned value
Current price by position symbol.

2000-2014, MetaQuotes Software Corp.

3248

Standard Library

Commission
Gets the amount of commission of the position.
double Commission() const

Returned value
Amount of commission of the position (in deposit currency).
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3249

Standard Library

Swap
Gets the amount of swap of the position.
double Swap() const

Returned value
Amount of swap of the position (in deposit currency).
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3250

Standard Library

Profit
Gets the amount of current profit of the position.
double Profit() const

Returned value
Amount of current profit of the position (in deposit currency).
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3251

Standard Library

Symbol
Gets the name of position symbol.
string Symbol() const

Returned value
Name of position symbol.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3252

Standard Library

Comment
Gets the comment of the position.
string Comment() const

Returned value
Comment of the position.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3253

Standard Library

InfoInteger
Gets the value of specified integer type property.
bool InfoInteger(
ENUM_POSITION_PROPERTY_INTEGER prop_id,

// property ID

long&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of integer type property (value of ENUM_POSITION_PROPERTY_INTEGER enumeration).
var
[out] Reference to long type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3254

Standard Library

InfoDouble
Gets the value of specified double type property.
bool InfoDouble(
ENUM_POSITION_PROPERTY_DOUBLE prop_id,

// property ID

double&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of double type property (value of ENUM_POSITION_PROPERTY_DOUBLE enumeration).
var
[in] Reference to double type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3255

Standard Library

InfoString
Gets the value of specified string type property.
bool InfoString(
ENUM_POSITION_PROPERTY_STRING prop_id,

// property ID

string&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of text property (value of ENUM_POSITION_PROPERTY_STRING enumeration).
var
[out] Reference to string type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The position should be selected using the Select (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3256

Standard Library

Select
Select the position for further work.
bool Select(
const string symbol

// symbol

Parameters
symbol
[in] Symbol for position selection.

2000-2014, MetaQuotes Software Corp.

3257

Standard Library

SelectByIndex
Selects the position by index for further access to its properties.
bool SelectByIndex(
int

index

// position index

Returned value
true in case of success, false if unable to select position.

2000-2014, MetaQuotes Software Corp.

3258

Standard Library

StoreState
Saves the position parameters.
void StoreState()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3259

Standard Library

CheckState
Checks the current parameters against the saved parameters.
bool CheckState()

Returned value
true - if the position parameters have changed since the last call of the StoreState() method,
otherwise - false.

2000-2014, MetaQuotes Software Corp.

3260

Standard Library

CDealInfo
CDealInfo is a class for easy access to the deal properties.

Description
CDealInfo class provides access to the deal properties.

Declaration
class CDealInfo : public CObject

Title
#include <Trade\DealInfo.mqh>

Class methods by groups


Access to integer type properties
Order

Gets the order by which the deal is executed

Time

Gets the time of deal execution

TimeMsc

Receives the time of a deal execution in


milliseconds since 01.01.1970

DealType

Gets the deal type

TypeDescription

Gets the deal type as a string

Entry

Gets the deal direction

EntryDescription

Gets the deal direction as a string

Magic

Gets the ID of expert, that executed the deal

PositionId

Gets the ID of position, in which the deal was


involved

Access to double type properties


Volume

Gets the volume of deal

Price

Gets the deal price

Commision

Gets the amount of commission by deal

Swap

Gets the amount of swap when position is


closed

Profit

Gets the financial result of deal

Access to text properties


Symbol

Gets the name of deal symbol

Comment

Gets the deal comment

2000-2014, MetaQuotes Software Corp.

3261

Standard Library

Access to MQL5 API functions


InfoInteger

Gets the value of specified integer type


property

InfoDouble

Gets the value of specified double type property

InfoString

Gets value of specified string type property

Selection
Ticket

Gets ticket/selects the deal

SelectByIndex

Selects the deal by index

2000-2014, MetaQuotes Software Corp.

3262

Standard Library

Order
Gets the order by which the deal is executed.
long Order() const

Returned value
Order by which the deal is executed.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3263

Standard Library

Time
Gets the time of deal execution.
datetime Time() const

Returned value
Time of deal execution.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3264

Standard Library

TimeMsc
Receives the time of a deal execution in milliseconds since 01.01.1970.
ulong TimeMsc() const

Returned value
The time of a deal execution in milliseconds since 01.01.1970.
Note
Deal should be preliminarily selected for access using Ticket (by ticket) or SelectByIndex (by index)
method.

2000-2014, MetaQuotes Software Corp.

3265

Standard Library

DealType
Gets the deal type.
ENUM_DEAL_TYPE DealType() const

Returned value
Deal type (value of ENUM_DEAL_TYPE enumeration).
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3266

Standard Library

TypeDescription
Gets the deal type as a string.
string TypeDescription() const

Returned value
Deal type as a string.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3267

Standard Library

Entry
Gets the deal direction.
ENUM_DEAL_ENTRY Entry() const

Returned value
Deal direction (value of ENUM_DEAL_ENTRY enumeration.).
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3268

Standard Library

EntryDescription
Gets the deal direction as a string.
string EntryDescription() const

Returned value
Deal direction as a string.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3269

Standard Library

Magic
Gets the ID of the Expert Advisor, that executed the deal.
long Magic() const

Returned value
ID of the Expert Advisor, that executed the deal.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3270

Standard Library

PositionId
Gets the ID of position, in which the deal was involved.
long PositionId() const

Returned value
ID of position, in which the deal was involved.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3271

Standard Library

Volume
Gets the volume of deal.
double Volume() const

Returned value
Volume of deal.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3272

Standard Library

Price
Gets the deal price.
double Price() const

Returned value
Deal price.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3273

Standard Library

Commission
Gets the amount of commission of the deal.
double Commission() const

Returned value
Amount of commission of the deal.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3274

Standard Library

Swap
Gets the amount of swap when position is closed.
double Swap() const

Returned value
Amount of swap when position is closed.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3275

Standard Library

Profit
Gets the financial result of the deal.
double Profit() const

Returned value
Financial result of the deal (in deposit currency).
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3276

Standard Library

Symbol
Gets the name of the deal symbol.
string Symbol() const

Returned value
Name of the deal symbol.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3277

Standard Library

Comment
Gets the deal comment.
string Comment() const

Returned value
Deal comment.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3278

Standard Library

InfoInteger
Gets the value of specified integer type property.
bool InfoInteger(
ENUM_DEAL_PROPERTY_INTEGER prop_id,

// property ID

long&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of integer type property (value of ENUM_DEAL_PROPERTY_INTEGER enumeration).
var
[out] Reference to long type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3279

Standard Library

InfoDouble
Gets the value of specified double type property.
bool InfoDouble(
ENUM_DEAL_PROPERTY_DOUBLE prop_id,

// property ID

double&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of double type property (value of ENUM_DEAL_PROPERTY_DOUBLE enumeration).
var
[in] Reference to double type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3280

Standard Library

InfoString
Gets the value of specified string type property.
bool InfoString(
ENUM_DEAL_PROPERTY_STRING prop_id,

// property ID

string&

// reference to variable

var

) const

Parameters
prop_id
[in] ID of text property (value of ENUM_DEAL_PROPERTY_STRING enumeration).
var
[out] Reference to string type variable to place result.
Returned value
true in case of success, false if unable to get property value.
Note
The deal should be selected using the Ticket (by ticket) or SelectByIndex (by index) methods.

2000-2014, MetaQuotes Software Corp.

3281

Standard Library

Ticket (Get method)


Gets the deal ticket.
ulong Ticket() const

Returned value
Deal ticket.

Ticket (Set method)


Select the position for further work.
void Ticket(
ulong ticket

// ticket

Parameters
ticket
[in] Deal ticket.

2000-2014, MetaQuotes Software Corp.

3282

Standard Library

SelectByIndex
Selects the deal by index for further access to its properties.
bool SelectByIndex(
int

index

// order index

Returned value
true in case of success, false if unable to select the deal.

2000-2014, MetaQuotes Software Corp.

3283

Standard Library

CTrade
CTrade is a class for easy access to the trade functions.

Description
CTrade class provides easy access to the trade functions.

Declaration
class CTrade : public CObject

Title
#include <Trade\Trade.mqh>

Class methods by groups


Setting parameters
LogLevel

Sets logging level

SetExpertMagicNumber

Sets the expert ID

SetDeviationInPoints

Sets the allowed deviation

SetTypeFilling

Sets filling type of the order

SetAsyncMode

Sets asynchronous mode for trade operations

Operations with orders


OrderOpen

Places the pending order with set parameters

OrderModify

Modifies the pending order parameters

OrderDelete

Deletes the pending order

Operations with positions


PositionOpen

Opens the position with set parameters

PositionModify

Modifies the position parameters

PositionClose

Closes the position

Additional methods
Buy

Opens a long position with specified parameters

Sell

Opens a short
parameters

BuyLimit

Places the pending order of Buy Limit type with


specified parameters

BuyStop

Places the pending order of Buy Stop type with


specified parameters

2000-2014, MetaQuotes Software Corp.

position

with

specified

3284

Standard Library

SellLimit

Places the pending order of Sell Limit type with


specified parameters

SellStop

Places the pending order of Sell Stop type with


specified parameters

Access to the last request parameters


Request

Gets the copy of the last request structure

RequestAction

Gets the trade operation type

RequestActionDescription

Gets the trade operation type as string

RequestMagic

Gets the magic number of the Expert Advisor

RequestOrder

Gets the order ticket, used in the last request

RequestSymbol

Gets the name of the symbol, used in the last


request

RequestVolume

Gets the trade volume (in lots), used in the last


request

RequestPrice

Gets the price, used in the last request

RequestStopLimit

Gets the price of pending order of Stop Limit


type, used in the last request

RequestSL

Gets the Stop Loss price of the order, used in


the last request

RequestTP

Gets the Take Profit price of the order, used in


the last request

RequestDeviation

Gets the price deviation of the order, used in


the last request

RequestType

Gets the type of the order, used in the last


request

RequestTypeDescription

Gets the type of the order (as string) , used in


the last request

RequestTypeFilling

Gets the filling type of the order, used in the


last request

RequestTypeFillingDescription

Gets the filling type of the order (as string),


used in the last request

RequestTypeTime

Gets the validity period of the order, used in


the last request

RequestTypeTimeDescription

Gets the validity period of the order (as string),


used in the last request

RequestExpiration

Gets the expiration time of the order, used in


the last request

RequestComment

Gets the comment of the order, used in the last

2000-2014, MetaQuotes Software Corp.

3285

Standard Library

request
Access to the last request checking results
CheckResult

Gets the copy of the structure of the last


request check result.

CheckResultRetcode

Gets the value of the retcode field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultRetcodeDescription

Gets the string description of the retcode field


of MqlTradeCheckResult type, filled while
checking of the request correctness

CheckResultBalance

Gets the value of the balance field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultEquity

Gets the value of the equity field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultProfit

Gets the value of the profit field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultMargin

Gets the value of the margin field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultMarginFree

Gets the value of the margin_free field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultMarginLevel

Gets the value of the margin_level field of


MqlTradeCheckResult type, filled while checking
of the request correctness

CheckResultComment

Gets the value of the comment field of


MqlTradeCheckResult type, filled while checking
of the request correctness

Access to the last request execution results


Result

Gets the copy of the structure of the last


request result

ResultRetcode

Gets the code of request result

ResultRetcodeDescription

Gets the code of request result as text

ResultDeal

Gets the deal ticket

ResultOrder

Gets the order ticket

ResultVolume

Gets the volume of deal or order

ResultPrice

Gets the price, confirmed by broker

2000-2014, MetaQuotes Software Corp.

3286

Standard Library

ResultBid

Gets the current bid price (the requote)

ResultAsk

Gets the current ask price (the requote)

ResultComment

Gets the broker comment

Auxiliary methods
PrintRequest

Prints the last request parameters into journal

PrintResult

Prints the results of the last request into


journal

FormatRequest

Prepares the formatted string with last request


parameters

FormatRequestResult

Prepares the formatted string with results of


the last request execution

2000-2014, MetaQuotes Software Corp.

3287

Standard Library

LogLevel
Sets logging level for messages.
void LogLevel(
int log_level

// logging level

Parameters
log_level
[in] Logging level.
Returned value
None.
Note
Log_level = 0 - logging disabled (used in optimization mode).
Log_level = 1 - logging error messages (default).
Log_level = 2 - logging all messages (used in testing mode).

2000-2014, MetaQuotes Software Corp.

3288

Standard Library

SetExpertMagicNumber
Sets the expert ID.
void SetExpertMagicNumber(
ulong magic

// ID

Parameters
magic
[in] New ID of the expert.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3289

Standard Library

SetDeviationInPoints
Sets the allowed deviation.
void SetDeviationInPoints(
ulong deviation

// deviation

Parameters
deviation
[in] Allowed deviation.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3290

Standard Library

SetTypeFilling
Sets filling type of the order.
void SetTypeFilling(
ENUM_ORDER_TYPE_FILLING filling

// order filling type

Parameters
filling
[in] Order filling type (value of ENUM_ORDER_TYPE_FILLING enumeration).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3291

Standard Library

SetAsyncMode
Sets asynchronous mode for trade operations.
void SetAsyncMode(
bool mode

// asynchronous mode flag

Parameters
mode
[in] Asynchronous mode flag.
Returned value
None.
Note
This mode is used for asynchronous (without waiting for the trade server's response to a sent
request) trade operations (see OrderSendAsync).

2000-2014, MetaQuotes Software Corp.

3292

Standard Library

OrderOpen
Places the pending order with set parameters.
bool OrderOpen(
const string

symbol,

// symbol

ENUM_ORDER_TYPE

order_type,

// order type

double

volume,

// order volume

double

limit_price,

// StopLimit price

double

price,

// execution price

double

sl,

// Stop Loss price

double

tp,

// Take Profit price

ENUM_ORDER_TYPE_TIME type_time,

// type by expiration

datetime

expiration,

// expiration

const string

comment=""

// comment

Parameters
symbol
[in] Name of trade instrument.
order_type
[in] Type of order trade operation (value of ENUM_ORDER_TYPE enumeration).
volume
[in] Requested order volume.
limit_price
[in] Price at which the StopLimit order will be placed.
price
[in] Price at which the order must be executed.
sl
[in] Price at which the Stop Loss will trigger.
tp
[in] Price at which the Take Profit will trigger.
type_time
[in] Order type by execution (value of ENUM_ORDER_TYPE_TIME enumeration).
expiration
[in] Expiration date of pending order.
comment=""
[in] Order comment.
Returned value
true - in case of successful check of the basic structures, otherwise - false.

2000-2014, MetaQuotes Software Corp.

3293

Standard Library

Note
Successful completion of the OrderSend(...) method does not always mean successful execution of
the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode() and value, returned by ResultOrder().

2000-2014, MetaQuotes Software Corp.

3294

Standard Library

OrderModify
Modifies the pending order parameters.
bool OrderModify(
ulong

ticket,

// order ticket

double

price,

// execution price

double

sl,

// Stop Loss price

double

tp,

// Take Profit price

ENUM_ORDER_TYPE_TIME type_time,

// type by expiration

datetime

expiration,

// expiration

double

stoplimit

// Limit order price

Parameters
ticket
[in] Order ticket.
price
[in] The new price by which the order must be executed (or the previous value, if the change is not
necessary).
sl
[in] The new price by which the Stop Loss will trigger (or the previous value, if the change is not
necessary).
tp
[in] The new price by which the Take Profit will trigger (or the previous value, if the change is not
necessary).
type_time
[in] The new type of order by expiration (or the previous value, if the change is not necessary),
value of ENUM_ORDER_TYPE_TIME enumeration.
expiration
[in] The new expiration date of pending order (or the previous value, if the change is not
necessary).
stoplimit
[in] New price used for setting a Limit order when the price reaches price value. It is specified
only for StopLimit orders.
Returned value
true - in case of successful check of the basic structures, otherwise - false.
Note
Successful completion of the OrderModify(...) method does not always mean successful execution of
the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode().

2000-2014, MetaQuotes Software Corp.

3295

Standard Library

OrderDelete
Deletes the pending order.
bool OrderDelete(
ulong ticket

// order ticket

Parameters
ticket
[in] Order ticket.
Returned value
true - in case of successful check of the basic structures, otherwise - false.
Note
Successful completion of the OrderDelete(...) method does not always mean successful execution of
the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode().

2000-2014, MetaQuotes Software Corp.

3296

Standard Library

PositionOpen
Opens the position with set parameters.
bool PositionOpen(
const string

symbol,

// symbol

ENUM_ORDER_TYPE order_type,

// order type to open position

double

volume,

// position volume

double

price,

// execution price

double

sl,

// Stop Loss price

double

tp,

// Take Profit price

const string

comment=""

// comment

Parameters
symbol
[in] Name of trade instrument, by which it is intended to open position.
order_type
[in] Order type (trade operation) to open position (value of ENUM_ORDER_TYPE enumeration).
volume
[in] Requested position volume.
price
[in] Price at which the position must be opened.
sl
[in] Price at which the Stop Loss will trigger.
tp
[in] Price at which the Take Profit will trigger.
comment=""
[in] Position comment.
Returned value
true - in case of successful check of the basic structures, otherwise - false.
Note
Successful completion of the PositionOpen(...) method does not always mean successful execution of
the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3297

Standard Library

PositionModify
Modifies the position parameters by specified symbol.
bool PositionModify(
const string symbol,

// symbol

double

sl,

// Stop Loss price

double

tp

// Take Profit price

Parameters
symbol
[in] Name of trade instrument, by which it is intended to modify position.
sl
[in] The new price by which the Stop Loss will trigger (or the previous value, if the change is not
necessary).
tp
[in] The new price by which the Take Profit will trigger (or the previous value, if the change is not
necessary).
Returned value
true - in case of successful check of the basic structures, otherwise - false.
Note
Successful completion of the PositionModify(...) method does not always mean successful execution
of the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode().

2000-2014, MetaQuotes Software Corp.

3298

Standard Library

PositionClose
Closes the position by specified symbol.
bool PositionClose(
const string symbol,

// symbol

ulong

// deviation

deviation=ULONG_MAX

Parameters
symbol
[in] Name of trade instrument, by which it is intended to close position.
deviation=ULONG_MAX
[in] Maximal deviation from the current price (in points).
Returned value
true - in case of successful check of the basic structures, otherwise - false.
Note
Successful completion of the PositionClose(...) method does not always mean successful execution
of the trade operation. It's necessary to check the result of trade request (trade server return code)
using ResultRetcode().

2000-2014, MetaQuotes Software Corp.

3299

Standard Library

Buy
Opens a long position with specified parameters.
bool Buy(
double

volume,

// position volume

const string symbol=NULL,

// symbol

double

price=0.0,

// price

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

const string comment=""

// comment

Parameters
volume
[in] Position volume.
symbol=NULL
[in] Position symbol. If the symbol isn't specified, the current symbol will be used.
price=0.0
[in] Price. If the price isn't specified, the current market Ask price will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
comment=""
[in] Comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the Buy(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3300

Standard Library

Sell
Opens a short position with specified parameters.
bool Sell(
double

volume,

// position volume

const string symbol=NULL,

// symbol

double

price=0.0,

// price

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

const string comment=""

// comment

Parameters
volume
[in] Position volume.
symbol=NULL
[in] Position symbol. If the symbol isn't specified, the current symbol will be used.
price=0.0
[in] Price. If the price isn't specified, the current market Bid price will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
comment=""
[in] Comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the Sell(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3301

Standard Library

BuyLimit
Places the pending order of Buy Limit type (buy at the price, lower than current market price) with
specified parameters.
bool BuyLimit(
double

volume,

// order volume

double

price,

// order price

const string

symbol=NULL,

// symbol

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,

// order lifetime

datetime

expiration=0,

// order expiration time

const string

comment=""

// comment

Parameters
volume
[in] Order volume.
price
[in] Order price.
symbol=NULL
[in] Order symbol. If the symbol isn't specified, the current symbol will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
type_time=ORDER_TIME_GTC
[in] Order lifetime (value of ENUM_ORDER_TYPE_TIME enumeration).
expiration=0
[in] Order expiration time (used only if type_time=ORDER_TIME_SPECIFIED).
comment=""
[in] Order comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the BuyLimit(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3302

Standard Library

BuyStop
Places the pending order of Buy Stop type (buy at the price, higher than current market price) with
specified parameters.
bool BuyStop(
double

volume,

// order volume

double

price,

// order price

const string

symbol=NULL,

// symbol

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,

// order lifetime

datetime

expiration=0,

// order expiration time

const string

comment=""

// comment

Parameters
volume
[in] Order volume.
price
[in] Order price.
symbol=NULL
[in] Order symbol. If the symbol isn't specified, the current symbol will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
type_time=ORDER_TIME_GTC
[in] Order lifetime (value of ENUM_ORDER_TYPE_TIME enumeration).
expiration=0
[in] Order expiration time (used only if type_time=ORDER_TIME_SPECIFIED).
comment=""
[in] Order comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the BuyStop(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3303

Standard Library

SellLimit
Places the pending order of Sell Limit type (sell at the price, higher than current market price) with
specified parameters.
bool SellLimit(
double

volume,

// order volume

double

price,

// order price

const string

symbol=NULL,

// symbol

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,

// order lifetime

datetime

expiration=0,

// order expiration time

const string

comment=""

// comment

Parameters
volume
[in] Order volume.
price
[in] Order price.
symbol=NULL
[in] Order symbol. If the symbol isn't specified, the current symbol will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
type_time=ORDER_TIME_GTC
[in] Order lifetime (value of ENUM_ORDER_TYPE_TIME enumeration).
expiration=0
[in] Order expiration time (used only if type_time=ORDER_TIME_SPECIFIED).
comment=""
[in] Order comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the SellLimit(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3304

Standard Library

SellStop
Places the pending order of Buy Stop type (sell at the price, lower than current market price) with
specified parameters.
bool SellStop(
double

volume,

// order volume

double

price,

// order price

const string

symbol=NULL,

// symbol

double

sl=0.0,

// stop loss price

double

tp=0.0,

// take profit price

ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,

// order lifetime

datetime

expiration=0,

// order expiration time

const string

comment=""

// comment

Parameters
volume
[in] Order volume.
price
[in] Order price.
symbol=NULL
[in] Order symbol. If the symbol isn't specified, the current symbol will be used.
sl=0.0
[in] Stop Loss price.
tp=0.0
[in] Take Profit price.
type_time=ORDER_TIME_GTC
[in] Order lifetime (value of ENUM_ORDER_TYPE_TIME enumeration).
expiration=0
[in] Order expiration time (used only if type_time=ORDER_TIME_SPECIFIED).
comment=""
[in] Order comment.
Returned value
true - in case of successful check of the structures, otherwise - false.
Note
Successful completion of the SellStop(...) method does not always mean successful execution of the
trade operation. It's necessary to check the result of trade request (trade server return code) using
ResultRetcode() and value, returned by ResultDeal().

2000-2014, MetaQuotes Software Corp.

3305

Standard Library

Request
Gets the copy of the last request structure.
void Request(
MqlTradeRequest& request

// target structure

) const

Parameters
request
[out] Reference to the structure of MqlTradeRequest type.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3306

Standard Library

RequestAction
Gets the trade operation type.
ENUM_TRADE_REQUEST_ACTIONS RequestAction() const

Returned value
Trade operation type, used in the last request.

2000-2014, MetaQuotes Software Corp.

3307

Standard Library

RequestActionDescription
Gets the trade operation type as string.
string RequestActionDescription() const

Returned value
Trade operation type (as string), used in the last request.

2000-2014, MetaQuotes Software Corp.

3308

Standard Library

RequestMagic
Gets the magic number of the Expert Advisor.
ulong RequestMagic() const

Returned value
The magic number (ID) of the Expert Advisor, used in the last request.

2000-2014, MetaQuotes Software Corp.

3309

Standard Library

RequestOrder
Gets the order ticket, used in the last request.
ulong RequestOrder() const

Returned value
Order ticket of the last request.

2000-2014, MetaQuotes Software Corp.

3310

Standard Library

RequestSymbol
Gets the name of the symbol, used in the last request.
string RequestSymbol() const

Returned value
The name of the symbol, used in the last request.

2000-2014, MetaQuotes Software Corp.

3311

Standard Library

RequestVolume
Gets the trade volume (in lots), used in the last request.
double RequestVolume() const

Returned value
The trade volume (in lots), used in the last request.

2000-2014, MetaQuotes Software Corp.

3312

Standard Library

RequestPrice
Gets the price, used in the last request.
double RequestPrice() const

Returned value
Order price, used in the last request.

2000-2014, MetaQuotes Software Corp.

3313

Standard Library

RequestStopLimit
Gets the price of pending order of Stop Limit type, used in the last request.
double RequestStoplimit() const

Returned value
The price of pending order of Stop Limit type, used in the last request.

2000-2014, MetaQuotes Software Corp.

3314

Standard Library

RequestSL
Gets the Stop Loss price of the order, used in the last request.
double RequestSL() const

Returned value
The Stop Loss price, used in the last request.

2000-2014, MetaQuotes Software Corp.

3315

Standard Library

RequestTP
Gets the Take Profit price of the order, used in the last request.
double RequestTP() const

Returned value
The Take Profit price, used in the last request.

2000-2014, MetaQuotes Software Corp.

3316

Standard Library

RequestDeviation
Gets the price deviation of the order, used in the last request.
ulong RequestDeviation() const

Returned value
The price deviation of the order, used in the last request.

2000-2014, MetaQuotes Software Corp.

3317

Standard Library

RequestType
Gets the type of the order, used in the last request.
ENUM_ORDER_TYPE RequestType() const

Returned value
Order type, used in the last request (value of ENUM_ORDER_TYPE enumeration).

2000-2014, MetaQuotes Software Corp.

3318

Standard Library

RequestTypeDescription
Gets the type of the order (as string) , used in the last request.
string RequestTypeDescription() const

Returned value
The order type (as string), used in the last request.

2000-2014, MetaQuotes Software Corp.

3319

Standard Library

RequestTypeFilling
Gets the filling type of the order, used in the last request.
ENUM_ORDER_TYPE_FILLING RequestTypeFilling() const

Returned value
The filling type of the order (value of ENUM_ORDER_TYPE_FILLING), used in the last request.

2000-2014, MetaQuotes Software Corp.

3320

Standard Library

RequestTypeFillingDescription
Gets the filling type of the order (as string), used in the last request.
string RequestTypeFillingDescription() const

Returned value
The filling type (as string) of the order, used in the last request.

2000-2014, MetaQuotes Software Corp.

3321

Standard Library

RequestTypeTime
Gets the validity period of the order, used in the last request.
ENUM_ORDER_TYPE_TIME RequestTypeTime() const

Returned value
The validity period of the order (value of ENUM_ORDER_TYPE_TIME enumeration), used in the last
request.

2000-2014, MetaQuotes Software Corp.

3322

Standard Library

RequestTypeTimeDescription
Gets the validity period of the order (as string), used in the last request.
string RequestTypeTimeDescription() const

Returned value
The validity period of the order (as string), used in the last request.

2000-2014, MetaQuotes Software Corp.

3323

Standard Library

RequestExpiration
Gets the expiration time of the order, used in the last request.
datetime RequestExpiration() const

Returned value
The expiration time of the order, used in the last request.

2000-2014, MetaQuotes Software Corp.

3324

Standard Library

RequestComment
Gets the comment of the order, used in the last request.
string RequestComment() const

Returned value
The comment of the order, used in the last request.

2000-2014, MetaQuotes Software Corp.

3325

Standard Library

Result
Gets the copy of the structure of the last request result.
void Result(
MqlTradeResult& result

// reference

) const

Parameters
result
[out] Reference to the structure of MqlTradeRequest type.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3326

Standard Library

ResultRetcode
Gets the code of request result.
uint ResultRetcode() const

Returned value
The Code of request result.

2000-2014, MetaQuotes Software Corp.

3327

Standard Library

ResultRetcodeDescription
Gets the code of request result as text.
string ResultRetcodeDescription() const

Returned value
Code of the last request result as text.

2000-2014, MetaQuotes Software Corp.

3328

Standard Library

ResultDeal
Gets the deal ticket.
ulong ResultDeal() const

Returned value
Deal ticket, if the deal is executed.

2000-2014, MetaQuotes Software Corp.

3329

Standard Library

ResultOrder
Gets the order ticket.
ulong ResultOrder() const

Returned value
Order ticket, if the order is placed.

2000-2014, MetaQuotes Software Corp.

3330

Standard Library

ResultVolume
Gets the volume of deal or order.
double ResultVolume() const

Returned value
Volume of deal or order.

2000-2014, MetaQuotes Software Corp.

3331

Standard Library

ResultPrice
Gets the price, confirmed by broker.
double ResultPrice() const

Returned value
Price, confirmed by the broker.

2000-2014, MetaQuotes Software Corp.

3332

Standard Library

ResultBid
Gets the current bid price (the requote).
double ResultBid() const

Returned value
Current bid price (the requote).

2000-2014, MetaQuotes Software Corp.

3333

Standard Library

ResultAsk
Gets the current ask price (the requote).
double ResultAsk() const

Returned value
Current ask price (the requote).

2000-2014, MetaQuotes Software Corp.

3334

Standard Library

ResultComment
Gets the broker comment.
string ResultComment() const

Returned value
Broker comment to the operation.

2000-2014, MetaQuotes Software Corp.

3335

Standard Library

CheckResult
Gets the copy of the structure of the last request check result.
void CheckResult(
MqlTradeCheckResult& check_result

// reference

) const

Parameters
check_result
[out] Reference to the target structure of the MqlTradeCheckResult type.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3336

Standard Library

CheckResultRetcode
Gets the value of the retcode field of MqlTradeCheckResult type, filled while checking of the request
correctness.
uint CheckResultRetcode() const

Returned value
The value of the retcode field (error code) of MqlTradeCheckResult type, filled while checking of the
request correctness.

2000-2014, MetaQuotes Software Corp.

3337

Standard Library

CheckResultRetcodeDescription
Gets the string description of the retcode field of MqlTradeCheckResult type, filled while checking of
the request correctness.
string ResultRetcodeDescription() const

Returned value
The string description of the retcode field (Error code) of MqlTradeCheckResult type, filled while
checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3338

Standard Library

CheckResultBalance
Gets the value of the balance field of MqlTradeCheckResult type, filled while checking of the request
correctness.
double CheckResultBalance() const

Returned value
The value of the balance field (balance value that will be after the execution of the trade operation)
of MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3339

Standard Library

CheckResultEquity
Gets the value of the equity field of MqlTradeCheckResult type, filled while checking of the request
correctness.
double CheckResultEquity() const

Returned value
The value of the equity field (equity value that will be after the execution of the trade operation) of
MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3340

Standard Library

CheckResultProfit
Gets the value of the profit field of MqlTradeCheckResult type, filled while checking of the request
correctness.
double CheckResultProfit() const

Returned value
The value of the profit field (profit value that will be after the execution of the trade operation) of
MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3341

Standard Library

CheckResultMargin
Gets the value of the margin field of MqlTradeCheckResult type, filled while checking of the request
correctness.
double CheckResultMargin() const

Returned value
The value of the margin field (margin required for the trade operation) of MqlTradeCheckResult
type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3342

Standard Library

CheckResultMarginFree
Gets the value of the margin_free field of MqlTradeCheckResult type, filled while checking of the
request correctness.
double CheckResultMarginFree() const

Returned value
The value of the margin_free field (free margin that will be left after the execution of the trade
operation) of MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3343

Standard Library

CheckResultMarginLevel
Gets the value of the margin_level field of MqlTradeCheckResult type, filled while checking of the
request correctness.
double CheckResultMarginLevel() const

Returned value
The value of the margin_level field (margin level that will be set after the execution of the trade
operation) of MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3344

Standard Library

CheckResultComment
The value of the comment field of MqlTradeCheckResult type, filled while checking of the request
correctness.
string CheckResultComment() const

Returned value
The value of the comment field (Comment to the reply code, error description) of
MqlTradeCheckResult type, filled while checking of the request correctness.

2000-2014, MetaQuotes Software Corp.

3345

Standard Library

PrintRequest
Prints the last request parameters into journal.
void PrintRequest() const

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3346

Standard Library

PrintResult
Prints the results of the last request into journal.
void PrintResult() const

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3347

Standard Library

FormatRequest
Prepares the formatted string with last request parameters.
string FormatRequest(
string&

str,

const MqlTradeRequest& request

// target string
// request

) const

Parameters
str
[in] Target string, passed by reference.
request
[in] A structure of MqlTradeRequest type with parameters of the last request.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3348

Standard Library

FormatRequestResult
Prepares the formatted string with results of the last request execution.
string FormatRequestResult(
string&

str,

// string

const MqlTradeRequest& request,

// request structure

const MqlTradeResult&

// result structure

result

) const

Parameters
str
[in] Target string, passed by reference.
request
[in] A structure of MqlTradeRequest type with parameters of the last request.
result
[in] A structure of MqlTradeResult type with results of the last request.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3349

Standard Library

CTerminalInfo
CTerminalInfo is a class for simplified access to the properties of mql5 program environment.

Description
CTerminalInfo class provides access to the properties of mql5 program environment.

Declaration
class CTerminalInfo : public CObject

Title
#include <Trade\TerminalInfo.mqh>

Class methods by groups


Methods for access to the properties of
integer type
Build

Gets the build number of the client terminal

IsConnected

Gets the information about connection to trade


server

IsDLLsAllowed

Gets the information about permission of DLL


usage

IsTradeAllowed

Gets the information about permission to trade

IsEmailEnabled

Gets the information about permission to send


e-mails to SMTP-server and login, specified in
the terminal settings

IsFtpEnabled

Gets the information about permission to send


trade reports to FTP server and login, specified
in the terminal settings

MaxBars

Gets the information about maximum number


of bars on chart

CodePage

Gets the information about the code page of


the language in the client terminal

CPUCores

Gets the information about the CPU cores

MemoryPhysical

Gets the information


memory (in Mb)

MemoryTotal

Gets the information about the total memory,


available for the terminal/agent process (in Mb)

MemoryAvailable

Gets the information about the free memory,


available for the terminal/agent process (in Mb)

2000-2014, MetaQuotes Software Corp.

about

the

physical

3350

Standard Library

MemoryUsed

Gets the information about the memory, used


by the terminal/agent process (in Mb)

IsX64

Gets the information about the type of the


client terminal (32/64 bit)

OpenCLSupport

Gets the information about the version of


OpenCL, supported by video card

DiskSpace

Gets the information about free disk space (in


Mb)

Methods for access to the properties of string


type
Language

Gets the language of the client terminal

Name

Gets the name of the client terminal

Company

Gets the company of the client terminal

Path

Gets the folder of the client terminal

DataPath

Gets the data folder of the client terminal

CommonDataPath

Gets the common data folder of all client


terminals, installed on the computer

Access to MQL5 API functions


InfoInteger

Gets the value of the property of integer type

InfoString

Gets the value of property of string type

2000-2014, MetaQuotes Software Corp.

3351

Standard Library

Build
Gets the build number of the client terminal.
int CBuild() const

Returned value
Build number of the client terminal.
Note
To get the build number it uses the TerminalInfoInteger() function (TERMINAL_BUILD property).

2000-2014, MetaQuotes Software Corp.

3352

Standard Library

IsConnected
Gets the information about connection to trade server.
bool IsConnected() const

Returned value
true, if terminal is connected to trade server, otherwise false.
Note
To get connection status it uses the TerminalInfoInteger() function (TERMINAL_CONNECTED property).

2000-2014, MetaQuotes Software Corp.

3353

Standard Library

IsDLLsAllowed
Gets the information about permission of DLL usage.
bool IsDLLsAllowed() const

Returned value
true, if DLL usage is allowed, otherwise false.
Note
To get permission of
DLL usage
(TERMINAL_DLLS_ALLOWED property).

it

uses

the

2000-2014, MetaQuotes Software Corp.

TerminalInfoInteger()

function

3354

Standard Library

IsTradeAllowed
Gets the information about permission to trade.
bool IsTradeAllowed() const

Returned value
true, if trade allowed, otherwise false.
Note
To get permission to trade it uses the TerminalInfoInteger() function (TERMINAL_TRADE_ALLOWED
property).

2000-2014, MetaQuotes Software Corp.

3355

Standard Library

IsEmailEnabled
Gets the information about permission to send e-mails to SMTP-server and login, specified in the
terminal settings.
bool IsEmailEnabled() const

Returned value
true, if sending of e-mails is allowed, otherwise false.
Note
To get the permission of e-mails
(TERMINAL_EMAIL_ENABLED property).

sending it

uses

the

2000-2014, MetaQuotes Software Corp.

TerminalInfoInteger()

function

3356

Standard Library

IsFtpEnabled
Gets the information about permission to send trade reports to FTP server and login, specified in the
terminal settings.
bool IsFtpEnabled() const

Returned value
true, if trade reports sending to FTP server is allowed, otherwise false.
Note
To get the information about permission to send trade reports it uses the TerminalInfoInteger()
function (TERMINAL_FTP_ENABLED property).

2000-2014, MetaQuotes Software Corp.

3357

Standard Library

MaxBars
Gets the maximum number of bars on chart, specified in the client terminal settings.
int MaxBars() const

Returned value
Maximum number of bars on the chart.
Note
To get the maximum number of bars on the chart it uses the TerminalInfoInteger() function
(TERMINAL_MAXBARS property).

2000-2014, MetaQuotes Software Corp.

3358

Standard Library

CodePage
Gets the information about code page of the language in the client terminal.
int CodePage() const

Returned value
Code page of the language in the client terminal.
Note
To get the code page it uses the TerminalInfoInteger() function (TERMINAL_CODEPAGE property).

2000-2014, MetaQuotes Software Corp.

3359

Standard Library

CPUCores
Gets the information about the amount of CPU cores in the system.
int CPUCores() const

Returned value
Amount of CPU cores in the system.
Note
To get the amount of CPU cores it uses the TerminalInfoInteger() function (TERMINAL_CPU_CORES
property).

2000-2014, MetaQuotes Software Corp.

3360

Standard Library

MemoryPhysical
Gets the information about the physical memory (in Mb).
int MemoryPhysical() const

Returned value
Physical memory (in Mb).
Note
To
get
the
physical
memory
(TERMINAL_MEMORY_PHYSICAL property).

it

uses

the

TerminalInfoInteger()

2000-2014, MetaQuotes Software Corp.

function

3361

Standard Library

MemoryTotal
Gets the information about the total memory, avaliable for the client terminal/agent (in Mb).
int MemoryTotal() const

Returned value
Total memory (in Mb), avaliable for the terminal/agent.
Note
To get the total memory it uses the TerminalInfoInteger() function (TERMINAL_MEMORY_TOTAL
property).

2000-2014, MetaQuotes Software Corp.

3362

Standard Library

MemoryAvailable
Gets the information about the free memory, avaliable for the client terminal/agent (in Mb).
int MemoryTotal() const

Returned value
Free memory (in Mb), avaliable for the terminal/agent.
Note
To get the free memory it uses the TerminalInfoInteger() function (TERMINAL_MEMORY_TOTAL
property).

2000-2014, MetaQuotes Software Corp.

3363

Standard Library

MemoryUsed
Gets the information about the memory, used by the client terminal/agent (in Mb).
int MemoryUsed() const

Returned value
The memory, used by the client terminal/agent (in Mb).
Note
To get the memory, used by the terminal it uses
(TERMINAL_MEMORY_USED property).

the TerminalInfoInteger() function

2000-2014, MetaQuotes Software Corp.

3364

Standard Library

IsX64
Gets the information about the type of the client terminal.
bool IsX64() const

Returned value
true, if 64-bit version is used, otherwise false.
Note
To get the type of the client terminal it uses the TerminalInfoInteger() function (TERMINAL_X64
property).

2000-2014, MetaQuotes Software Corp.

3365

Standard Library

OpenCLSupport
Gets the information about the version of OpenCL, supported by video card.
int OpenCLSupport() const

Returned value
The returned value has the following form: 0x00010002 = "1.2". The 0 means that OpenCL is not
supported.
Note
To
get
the
version
of
OpenCL
(TERMINAL_OPENCL_SUPPORT property).

it

uses

the

TerminalInfoInteger()

2000-2014, MetaQuotes Software Corp.

function

3366

Standard Library

DiskSpace
Gets the information about free disk space, avaliable for the client terminal/agent (in Mb).
int MDiskSpace() const

Returned value
Free disk space (in Mb), avaliable for the client terminal/agent (for files, saved to MQL5\Files
folder).
Note
To get the free disk space it uses the TerminalInfoInteger() function (TERMINAL_DISK_SPACE
property).

2000-2014, MetaQuotes Software Corp.

3367

Standard Library

Language
Gets the information about the language in the client terminal.
string Language() const

Returned value
Language, used in the client terminal.
Note
To get the language it uses the TerminalInfoString() function (TERMINAL_LANGUAGE property).

2000-2014, MetaQuotes Software Corp.

3368

Standard Library

Name
Gets the information of the name of the client terminal.
string Name() const

Returned value
Name of the client terminal.
Note
To get the name of the client terminal it uses the TerminalInfoString() function (TERMINAL_NAME
property).

2000-2014, MetaQuotes Software Corp.

3369

Standard Library

Company
Gets the information about the name of the broker.
string Company() const

Returned value
The name of the broker.
Note
To get the broker name it uses the TerminalInfoString() function (TERMINAL_COMPANY property).

2000-2014, MetaQuotes Software Corp.

3370

Standard Library

Path
Gets the client terminal folder.
string Path() const

Returned value
The client terminal folder.
Note
To get the client terminal folder it uses the TerminalInfoString() (TERMINAL_PATH property).

2000-2014, MetaQuotes Software Corp.

3371

Standard Library

DataPath
Gets the information about the terminal data folder.
string DataPath() const

Returned value
Data folder of the client terminal.
Note
To get the client terminal data
(TERMINAL_DATA_PATH property).

folder

it

uses

the

2000-2014, MetaQuotes Software Corp.

TerminalInfoString()

function

3372

Standard Library

CommonDataPath
Gets the common data folder of all client terminals, installed on the computer.
string CommonDataPath() const

Returned value
Common data folder.
Note
To get common data folder it uses the TerminalInfoString() function (COMMON_DATA_PATH
property).

2000-2014, MetaQuotes Software Corp.

3373

Standard Library

InfoInteger
Returns the value of a corresponding property of the mql5 program environment.
int TerminalInfoInteger(
int property_id

// identifier of a property

);

Parameters
property_id
[in] Identifier of a property.
ENUM_TERMINAL_INFO_INTEGER.

Can

be

one

of

the

values

Returned value
Value of int type.
Note
To get the property value it uses the TerminalInfoInteger() function.

2000-2014, MetaQuotes Software Corp.

of

the

enumeration

3374

Standard Library

InfoString
the function returns the value of a corresponding property of the mql5 program environment. The
property must be of string type.
string TerminalInfoString(
int property_id

// identifier of a property

);

Parameters
property_id
[in] Identifier of a property.
ENUM_TERMINAL_INFO_STRING.

Perhaps

one

of

the

Returned value
Value of string type.
Note
To get the property value it uses the TerminalInfoString() function.

2000-2014, MetaQuotes Software Corp.

values

of

the

enumeration

3375

Standard Library

Trading Strategy Classes


This section contains technical details of working with classes for creation and testing of trading
strategies and description of the relevant components of the MQL5 standard library.
The use of these classes will save time when creating the trading strategies.
MQL5 Standard Library (in terms of trading strategies) is placed in the terminal directory, in the
Include\Expert folder.
Base classes

Description

CExpertBase

Base class for all trading strategy classes

CExpert

Base class for Expert Advisor

CExpertSignal

Base class for Trading Signal classes

CExpertTrailing

Base class for Trailing Stop classes

CExpertMoney

Base class for Money Management classes

Trading signal classes

Description

CSignalAC

The module of signals based on market models


of the indicator Accelerator Oscillator.

CSignalAMA

The module of signals based on market models


of the indicator Adaptive Moving Average.

CSignalAO

The module of signals based on market models


of the indicator Awesome Oscillator.

CSignalBearsPower

The module of signals based on market models


of the oscillator Bears Power.

CSignalBullsPower

The module of signals based on market models


of the oscillator Bulls Power.

CSignalCCI

The module of signals based on market models


of the oscillator Commodity Channel Index.

CSignalDeM

The module of signals based on market models


of the oscillator DeMarker.

CSignalDEMA

The module of signals based on market models


of the indicator Double Exponential Moving
Average.

CSignalEnvelopes

The module of signals based on market models


of the indicator Envelopes.

CSignalFrAMA

The module of signals based on market models


of the indicator Fractal Adaptive Moving
Average.

CSignalITF

The module of filtration of signals by time.

2000-2014, MetaQuotes Software Corp.

3376

Standard Library

Trading signal classes

Description

CSignalMACD

The module of signals based on market models


of the oscillator MACD.

CSignalMA

The module of signals based on market models


of the indicator Moving Average.

CSignalSAR

The module of signals based on market models


of the indicator Parabolic SAR.

CSignalRSI

The module of signals based on market models


of the oscillator Relative Strength Index.

CSignalRVI

The module of signals based on market models


of the oscillator Relative Vigor Index.

CSignalStoch

The module of signals based on market models


of the oscillator Stochastic.

CSignalTRIX

The module of signals based on market models


of the oscillator Triple Exponential Average.

CSignalTEMA

The module of signals based on market models


of the indicator Triple Exponential Moving
Average.

CSignalWPR

The module of signals based on market models


of the oscillator Williams Percent Range.

Trailing Stop classes

Description

CTrailingFixedPips

This class implements Trailing Stop algorithm


based on fixed points

CTrailingMA

This class implements Trailing Stop algorithm


based on the values of Moving Average
indicator

CTrailingNone

A gag class, it doesn't uses any Trailing Stop


algorithm

CTrailingPSAR

This class implements Trailing Stop algorithm


based on the values of Parabolic SAR indicator

Money Management classes

Description

CMoneyFixedLot

A class with an algorithm, based on trading with


predefined fixed lot size.

CMoneyFixedMargin

A class with an algorithm, based on trading with


predefined fixed margin.

CMoneyFixedRisk

A class with an algorithm, based on trading with


predefined risk.

2000-2014, MetaQuotes Software Corp.

3377

Standard Library

CMoneyNone

A class with an algorithm, based on trading with


minimal allowed lot size.

CMoneySizeOptimized

A class with an algorithm, based on trading with


variable lot size, depending on the results of
the previous deals.

2000-2014, MetaQuotes Software Corp.

3378

Standard Library

Base classes for Expert Advisors


This section contains technical details of working with classes for creation and testing of trading
strategies and description of the relevant components of the MQL5 standard library.
The use of these classes will save time when creating the trading strategies.
MQL5 Standard Library (in terms of trading strategies) is placed in the terminal directory, in the
Include\Expert folder.
Class

Description

CExpertBase

Base class for all trading strategy classes

CExpert

Base class for Expert Advisor

CExpertSignal

Base class for Trading Signal classes

CExpertTrailing

Base class for Trailing Stop classes

CExpertMoney

Base class for Money Management classes

2000-2014, MetaQuotes Software Corp.

3379

Standard Library

CExpertBase
CExpertBase is a base class for the CExpert class and all trading strategy classes.

Description
CExpertBase provides the data and methods, which are common to all objects of the Expert Advisor.

Declaration
class CExpertBase : public CObject

Title
#include <Expert\CExpertBase.mqh>

Class Methods
Public Methods:
Initialization
virtual Init

Class instance initialization method

virtual ValidationSettings

Checks the settings

Parameters
Symbol

Sets the symbol

Period

Sets the timeframe

Magic

Sets the Expert Advisor ID

Indicators and Timeseries


virtual SetPriceSeries

Sets pointers to external timeseries (price


series)

virtual SetOtherSeries

Sets pointers to external timeseries (non-price


series)

virtual InitIndicators

Initializes the indicators and timeseries

Access to Protected Data


InitPhase

Gets the current phase of object initialization

TrendType

Sets trend type

UsedSeries

Gets bitmask of timeseries used

EveryTick

Sets the "Every tick" flag

Access to Timeseries
Open

Gets the element of the Open timeseries by


index

2000-2014, MetaQuotes Software Corp.

3380

Standard Library

High

Gets the element of the High timeseries by


index

Low

Gets the element of the Low timeseries by


index

Close

Gets the element of the Close timeseries by


index

Spread

Gets the element of the Spread timeseries by


index

Time

Gets the element of the Time timeseries by


index

TickVolume

Gets the element of the TickVolume timeseries


by index

RealVolume

Gets the element of the RealVolume timeseries


by index

Protected Methods:
Initialization of Timeseries
InitOpen

Open timeseries initialization method

InitHigh

High timeseries initialization method

InitLow

Low timeseries initialization method

InitClose

Close timeseries initialization method

InitSpread

Spread timeseries initialization method

InitTime

Time timeseries initialization method

InitTickVolume

TickVolume timeseries initialization method

InitRealVolume

RealVolume timeseries initialization method

Service Methods
virtual PriceLevelUnit

Gets the price level unit

virtual StartIndex

Gets the index of starting bar to analyze

virtual CompareMagic

Compares the Expert Advisor ID with the


specified value

2000-2014, MetaQuotes Software Corp.

3381

Standard Library

InitPhase
Gets the current phase of the object initialization.
ENUM_INIT_PHASE InitPhase()

Returned value
Current phase of the object initialization.
Note
The object initialization consist of several phases:
1. Start initialization.
- start
- finish
- allowed
- not allowed

- after finish of the constructor


- after successful completion of the Init(...) method.
- call of the Init(...) method
- call of the ValidationSettings() method and other initialization methods

2. Parameters setting phase. In this phase you need to set all the object parameters, used for
creation of indicators.
- start
- after successful completion of the Init(...) method
- finish
- after successful completion of the ValidationSettings() method
- allowed
- call of Symbol(...) and Period(...) methods
- not allowed - call of the Init(...), SetPriceSeries(...), SetOtherSeries(...) and InitIndicators(...)
methods
3. Checking of parameters.
- start
- after successful completion of the ValidationSettings() method
- finish
- after successful completion of the InitIndicators(...) method
- allowed
- call of the Symbol(...), Period(...) and InitIndicators(...) methods
- not allowed - call of any other initialization methods
4. Finish of initialization.
- start
- not allowed

- after successful completion of the InitIndicators(...) method


- call of initialization methods

2000-2014, MetaQuotes Software Corp.

3382

Standard Library

TrendType
Sets trend type.
void TrendType(
M_TYPE_TREND

value

// new value

Parameters
value
[in] New value of trend type.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3383

Standard Library

UsedSeries
Gets the bitmask of timeseries used.
int UsedSeries()

Returned value
The list of used timeseries as bitmask.
Note
If the bit is set, the corresponding timeseries is used, if it isn't set, the timeseries is not used.
The bit-timeseries correspondence:
bit 0 - Open timeseries,
bit 1 - High timeseries,
bit 2 - Low timeseries,
bit 3 - Close timeseries,
bit 4 - Spread timeseries,
bit 5 - Time timeseries,
bit 6 - TickVolume timeseries,
bit 7 - RealVolume timeseries.

2000-2014, MetaQuotes Software Corp.

3384

Standard Library

EveryTick
Sets the "Every tick" flag.
void EveryTick(
bool

value

// flag

Parameters
value
[in] New value of a flag.
Returned value
None.
Note
If the flag is not set, the processing method is called only at new bar on the working timeframe and
symbol.

2000-2014, MetaQuotes Software Corp.

3385

Standard Library

Open
Gets the element of the Open timeseries by index.
double Open(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the Open timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3386

Standard Library

High
Gets the element of the High timeseries by index.
double High(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the High timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3387

Standard Library

Low
Gets the element of the Low timeseries by index.
double Low(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the Low timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3388

Standard Library

Close
Gets the element of the Close timeseries by index.
double Close(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the Close timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3389

Standard Library

Spread
Gets the element of the Spread timeseries by index.
double Spread(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the Spread timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3390

Standard Library

Time
Gets the element of the Time timeseries by index.
datetime Time(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the Time timeseries element with specified index,
otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3391

Standard Library

TickVolume
Gets the element of the TickVolume timeseries by index.
long TickVolume(
int

ind

// Index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the TickVolume timeseries element with specified
index, otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3392

Standard Library

RealVolume
Gets the element of the RealVolume timeseries by index.
long RealVolume(
int

ind

// index

Parameters
ind
[in] Element index.
Returned value
If successful, it returns the numerical value of the RealVolume timeseries element with specified
index, otherwise it returns EMPTY_VALUE.
Note
The EMPTY_VALUE is returned in two cases:
1. Timeseries is not used (the corresponding bit is not set).
2. Element index is out of range.

2000-2014, MetaQuotes Software Corp.

3393

Standard Library

Init
Initializes the object.
bool Init(
CSymbolInfo

symbol,

// symbol

ENUM_TIMEFRAMES period,

// timeframe

double

// point

point

Parameters
symbol
[in] Pointer to the object of CSymbolInfo type for access to symbol information.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
point
[in] The "weight" of 2/4-digit point.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3394

Standard Library

Symbol
Sets the symbol.
bool Symbol(
string

name

// symbol

Parameters
name
[in] Symbol.
Returned value
true if successful, otherwise false.
Note
The setting of working symbol is necessary if the object uses the symbol, different from symbol,
defined at the initialization.

2000-2014, MetaQuotes Software Corp.

3395

Standard Library

Period
Sets the timeframe.
bool Period(
ENUM_TIMEFRAMES value

// timeframe

Parameters
value
[in] Timeframe.
Returned value
true if successful, otherwise false.
Note
The setting of working timeframe is necessary if the object uses the timeframe, different from
timeframe, defined at the initialization.

2000-2014, MetaQuotes Software Corp.

3396

Standard Library

Magic
Sets the Expert Advisor ID.
void Magic(
ulong value

// magic

Parameters
value
[in] Expert Advisor ID.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3397

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3398

Standard Library

SetPriceSeries
Sets pointers to external price series.
virtual bool SetPriceSeries(
CiOpen*

open,

// pointer

CiHigh*

high,

// pointer

CiLow*

low,

// pointer

CiClose*

close

// pointer

Parameters
open
[in] Pointer to Open timeseries.
high
[in] Pointer to High timeseries.
low
[in] Pointer to Low timeseries.
close
[in] Pointer to Close timeseries.
Returned value
true if successful, otherwise false.
Note
The setting of pointers to external timeseries (price series) is necessary if the object uses
timeseries of the symbol and timeframe, different from the symbol and timeframe, defined at
initialization.

2000-2014, MetaQuotes Software Corp.

3399

Standard Library

SetOtherSeries
Sets pointers to external non-price series.
virtual bool SetOtherSeries(
CiSpread*

spread,

// pointer

CiTime*

time,

// pointer

CiTickVolume*

tick_volume,

// pointer

CiRealVolume*

real_volume

// pointer

Parameters
spread
[in] Pointer to Spread timeseries.
time
[in] Pointer to Time timeseries.
tick_volume
[in] Pointer to TickVolume timeseries.
real_volume
[in] Pointer to RealVolume timeseries.
Returned value
true if successful, otherwise false.
Note
The setting of pointers to external timeseries (non-price series) is necessary if the object uses
timeseries of the symbol and timeframe, different from the symbol and timeframe, defined at
initialization.

2000-2014, MetaQuotes Software Corp.

3400

Standard Library

InitIndicators
Initializes all indicators and time series.
virtual bool InitIndicators(
CIndicators* indicators=NULL

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The timeseries are initialized only if the object uses the symbol or timeframe, different from the
symbol or timeframe, defined at initialization.

2000-2014, MetaQuotes Software Corp.

3401

Standard Library

InitOpen
Initalizes the Open timeseries.
bool InitOpen(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The Open timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different from
the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3402

Standard Library

InitHigh
Initalizes the High timeseries.
bool InitHigh(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The High timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different from
the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3403

Standard Library

InitLow
Initalizes the Low timeseries.
bool InitLow(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The Low timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different from
the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3404

Standard Library

InitClose
Initalizes the Close timeseries.
bool InitClose(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The Close timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different from
the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3405

Standard Library

InitSpread
Initalizes the Spread timeseries.
bool InitSpread(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The Spread timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different
from the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3406

Standard Library

InitTime
Initalizes the Time timeseries.
bool InitTime(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The Time timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different from
the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3407

Standard Library

InitTickVolume
Initalizes the TickVolume timeseries.
bool InitTickVolume(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The TickVolume timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different
from the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3408

Standard Library

InitRealVolume
Initalizes the RealVolume timeseries.
bool InitRealVolume(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The RealVolume timeseries is initialized only if Expert Advisor uses the symbol/timeframe, different
from the symbol/timeframe defined at initialization (and timeseries is used further).

2000-2014, MetaQuotes Software Corp.

3409

Standard Library

PriceLevelUnit
Gets the price level unit.
virtual double PriceLevelUnit()

Returned value
The value of Price Level unit.
Note
The method of a base class returns the "weight" of the 2/4 digits point.

2000-2014, MetaQuotes Software Corp.

3410

Standard Library

StartIndex
Gets the index of starting bar to analyze.
virtual int StartIndex()

Returned value
The index of starting bar to analyze.
Note
The method returns 0 if the flag to analyze current bar is set to true (analysis from the current bar).
If the flag is not set, it returns 1 (analysis from the last completed bar).

2000-2014, MetaQuotes Software Corp.

3411

Standard Library

CompareMagic
Compares the Expert Advisor ID (magic) with the specified value.
virtual bool CompareMagic(
ulong magic

// value to compare

Parameters
magic
[in] Value to compare.
Returned value
true if they are equal, otherwise false.

2000-2014, MetaQuotes Software Corp.

3412

Standard Library

CExpert
CExpert is a base class for trading strategies. It has built-in algorithms for working with time series
and indicators and a set of virtual methods for trading strategy.
How to use it:
1. Prepare an algorithm of the strategy;
2. Create your own class, inherited from CExpert class;
3. Override the virtual methods in your class with your own algorithms.

Description
The CExpert class is a set of virtual methods for implementation of trading strategies.

Declaration
class CExpert : public CExpertBase

Title
#include <Expert\Expert.mqh>

Class Methods
Initialization
Init

Class instance initialization method

virtual InitSignal

Initializes Trading Signal object

virtual InitTrailing

Initializes Trailing Stop object

virtual InitMoney

Initializes Money Management object

virtual InitTrade

Initializes Trade object

virtual ValidationSettings

Checks the settings

virtual InitIndicators

Initializes indicators and timeseries

virtual InitParameters

Parameters initialization method

virtual Deinit

Class instance deinitialization method

virtual DeinitSignal

Deinitializes Trading Signal object

virtual DeinitTrailing

Deinitializes Trailing Stop object

virtual DeinitMoney

Deinitializes Money Management object

virtual DeinitTrade

Deinitializes Trade object

virtual DeinitIndicators

Deinitializes indicators and timeseries

Parameters
Magic

Sets the Expert Advisor ID

2000-2014, MetaQuotes Software Corp.

3413

Standard Library

MaxOrders

Gets/Sets the maximum amount of allowed


orders

OnTickProcess

Sets a flag to proceed the "OnTick" event

OnTradeProcess

Sets a flag to proceed the "OnTrade" event

OnTimerProcess

Sets a flag to proceed the "OnTimer" event

OnChartEventProcess

Sets a flag to proceed the "OnChartEvent" event

OnBookEventProcess

Sets a flag to proceed the "OnBookEvent" event

Event Processing Methods


OnTick

OnTick event handler

OnTrade

OnTrade event handler

OnTimer

OnTimer event handler

OnChartEvent

OnChartEvent event handler

OnBookEvent

OnBookEvent event handler

Update Methods
Refresh

Updates all data

Processing
Processing

Main processing algorithm

Market Entry Methods


CheckOpen

Checks position opening conditions

CheckOpenLong

Checks conditions to open long position

CheckOpenShort

Checks conditions to open short position

OpenLong

Opens a long position

OpenShort

Opens a short position

Market Exit Methods


CheckClose

Checks conditions to close current position

CheckCloseLong

Checks conditions to close long position

CheckCloseShort

Checks conditions to close short position

CloseAll

Closes the opened position and deletes all


orders

Close

Closes the opened position

CloseLong

Closes the long position

CloseShort

Closes the short position

Position Reverse Methods

2000-2014, MetaQuotes Software Corp.

3414

Standard Library

CheckReverse

Checks conditions to reverse opened position

CheckReverseLong

Checks conditions to reverse long position

CheckReverseShort

Checks conditions to reverse short position

ReverseLong

Performs reverse operation of long position

ReverseShort

Performs reverse operation of short position

Position/Order Trailing Methods


CheckTrailingStop

Checks
conditions
parameters

to

modify

CheckTrailingStopLong

Checks Trailing Stop conditions of long position

CheckTrailingStopShort

Checks Trailing
position

TrailingStopLong

Performs Trailing Stop for long position

TrailingStopShort

Performs Trailing Stop for short position

CheckTrailingOrderLong

Checks Trailing Stop conditions of Buy Limit/


Stop Pending order

CheckTrailingOrderShort

Checks Trailing Stop conditions of Sell Limit/


Stop Pending order

TrailingOrderLong

Performs Trailing Stop for Buy Limit/Stop


Pending order

TrailingOrderShort

Performs Trailing Stop for Sell Limit/Stop


Pending order

Stop conditions

position

of

short

Order Delete Methods


CheckDeleteOrderLong

Checks conditions to delete Buy Pending order

CheckDeleteOrderShort

Checks conditions to delete Sell Pending order

DeleteOrders

Deletes all orders

DeleteOrder

Deletes Stop/Limit Pending order

DeleteOrderLong

Deletes Buy Limit/Stop pending order

DeleteOrderShort

Deletes Sell Limit/Stop pending order

Trade Volume Methods


LotOpenLong

Gets trade volume for buy operation

LotOpenShort

Gets trade volume for sell operation

LotReverse

Gets trade
operation

volume

for

position

reverse

Trade History Methods


PrepareHistoryDate

Sets starting date for trade history tracking

2000-2014, MetaQuotes Software Corp.

3415

Standard Library

HistoryPoint

Creates a checkpoint of trade history (saves


number of positions, orders, deals and
historical orders)

CheckTradeState

Compares the current state with the saved one


and calls the corresponding event handler

Event flags
WaitEvent

Sets the event waiting flag

NoWaitEvent

Resets the event waiting flag

Trade Event Processing Methods


TradeEventPositionStopTake

Event handler of the "Position Stop Loss/Take


Profit triggered" event

TradeEventOrderTriggered

Event handler of the "Pending Order Triggered"


event

TradeEventPositionOpened

Event handler of the "Position Opened" event

TradeEventPositionVolumeChanged

Event handler of the "Position Volume Changed"


event

TradeEventPositionModified

Event handler of the "Position Modified" event

TradeEventPositionClosed

Event handler of the "Position Closed" event

TradeEventOrderPlaced

Event handler of the "Pending Order Placed"


event

TradeEventOrderModified

Event handler of the "Pending Order Modified"


event

TradeEventOrderDeleted

Event handler of the "Pending Order Deleted"


event

TradeEventNotIdentified

Event handler of the non-identified event

Service methods
TimeframeAdd

Adds a timeframe to track

TimeframesFlags

Gets the flag indicating timeframes with a new


bar

2000-2014, MetaQuotes Software Corp.

3416

Standard Library

Init
Class instance initialization method.
bool Init(
string

symbol,

// symbol

ENUM_TIMEFRAMES

period,

// timeframe

bool

every_tick,

// flag

ulong

magic

// magic

Parameters
symbol
[in] Symbol.
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
every_tick
[in] Flag..
magic
[in] Expert Advisor ID (Magic number).
Returned value
true if successful, otherwise false.
Note
If every_tick is set to true, the Processing() method is called at each tick of the working symbol.
otherwise, the Processing() is called only when at new bar of the working symbol.

2000-2014, MetaQuotes Software Corp.

3417

Standard Library

Magic
Sets the Expert Advisor ID (magic).
void Magic(
ulong value

// new value

Parameters
value
[in] New value of Expert Advisor ID.
Returned value
None.
Note
It sets the value of Expert Advisor ID (magic) to the following classes: Trade, Signal, Money,
Trailing.
Implementation
//+------------------------------------------------------------------+
//| Sets magic number for object and its dependent objects
|
//| INPUT: value - new value of magic number.
|
//| OUTPUT: no.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
void CExpert::Magic(ulong value)
{
if(m_trade!=NULL)
m_trade.SetExpertMagicNumber(value);
if(m_signal!=NULL)
m_signal.Magic(value);
if(m_money!=NULL)
m_money.Magic(value);
if(m_trailing!=NULL) m_trailing.Magic(value);
//--CExpertBase::Magic(value);
}

2000-2014, MetaQuotes Software Corp.

3418

Standard Library

InitSignal
Initializes Trading Signal object.
virtual bool InitSignal(
CExpertSignal*

signal=NULL,

// pointer

Parameters
signal
[in] Pointer to CExpertSignal class object (or its heis).
Returned value
true if successful, otherwise false.
Note
If signal is NULL, the CExpertSignal class will be used, it does nothing.

2000-2014, MetaQuotes Software Corp.

3419

Standard Library

InitTrailing
Initializes Trailing Stop object.
virtual bool InitTrailing(
CExpertTrailing*

trailing=NULL,

// pointer

Parameters
trailing
[in] Pointer to CExpertTrailing class object (or its heir).
Returned value
true if successful, otherwise false.
Note
If trailing is NULL, the ExpertTrailing class will be used, it does nothing.

2000-2014, MetaQuotes Software Corp.

3420

Standard Library

InitMoney
Initializes the Money Management object.
virtual bool InitMoney(
CExpertMoney*

money=NULL,

// pointer

Parameters
money
[in] Pointer to CExpertMoney class object (or its heir).
Returned value
true if successful, otherwise false.
Note
If money is NULL, the CExpertMoney class will be used, it uses the minimum lot.

2000-2014, MetaQuotes Software Corp.

3421

Standard Library

InitTrade
Initializes the Trade object.
virtual bool InitTrade(
ulong

magic,

// magic

CExpertTrade*

trade=NULL

// pointer

Parameters
magic
[in] Expert Advisor ID (will be used in trade requests).
trade
[in] Pointer to CExpertTrade object.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3422

Standard Library

Deinit
Class instance deinitialization method.
virtual void Deinit()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3423

Standard Library

OnTickProcess
Sets a flag to proceed the OnTick event.
void OnTickOProcess(
bool

value

// flag

Parameters
value
[in] Flag to proceed the OnTick event.
Returned value
None.
Note
If the flag is true, the OnTick event is proceed, by default, the flag is set to true.

2000-2014, MetaQuotes Software Corp.

3424

Standard Library

OnTradeProcess
Sets a flag to proceed the OnTrade event.
void OnTradeProcess(
bool

value

// flag

Parameters
value
[in] Flag to proceed the OnTrade event.
Returned value
None.
Note
If the flag is true, the OnTrade event is proceed, by default, the flag is set to false.

2000-2014, MetaQuotes Software Corp.

3425

Standard Library

OnTimerProcess
Sets a flag to proceed the OnTimer event.
void OnTimerProcess(
bool

value

// flag

Parameters
value
[in] Flag to proceed the OnTimer event.
Returned value
None.
Note
If the flag is true, the OnTimer event is proceed, by default, the flag is set to false.

2000-2014, MetaQuotes Software Corp.

3426

Standard Library

OnChartEventProcess
Sets a flag to proceed the OnChartEvent event.
void OnChartEventProcess(
bool

value

// flag

Parameters
value
[in] Flag to proceed the OnChartEvent event.
Returned value
None.
Note
If the flag is true, the OnChartEvent event is proceed, by default, the flag is set to false.

2000-2014, MetaQuotes Software Corp.

3427

Standard Library

OnBookEventProcess
Sets a flag to proceed the OnBookEvent event.
void OnChartEventProcess(
bool

value

// flag

Parameters
value
[in] Flag to proceed the OnBookEvent event.
Returned value
None.
Note
If the flag is true, the OnBookEvent event is proceed, by default, the flag is set to false.

2000-2014, MetaQuotes Software Corp.

3428

Standard Library

MaxOrders (Get Method)


Gets the maximum amount of allowed orders.
int MaxOrders()

Returned value
Maximum amount of allowed orders.

MaxOrders (Set Method)


Sets the maximum amount of allowed orders.
void MaxOrders(
int

max_orders

// new value

Parameters
max_orders
[in] New value of maximum amount of allowed orders.
Returned value
None.
Note
By default, the maximum amount of allowed orders = 1.

2000-2014, MetaQuotes Software Corp.

3429

Standard Library

Signal
Gets the pointer to the Trade Signal object.
CExpertSignal* Signal() const

Returned value
Pointer to the Trade Signal object.

2000-2014, MetaQuotes Software Corp.

3430

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
It also checks the settings of all the Expert Advisor objects.

2000-2014, MetaQuotes Software Corp.

3431

Standard Library

InitIndicators
Initializes all indicators and timeseries.
virtual bool InitIndicators(
CIndicators* indicators=NULL

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The timeseries are initialized if the object uses the symbol or timeframe, different from the symbol
or timeframe, defined at initialization. It calls consequentially InitIndicators() virtual methods of
trading signal, trailing stop and money management objects.

2000-2014, MetaQuotes Software Corp.

3432

Standard Library

OnTick
Event handler of the OnTick event.
virtual void OnTick()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3433

Standard Library

OnTrade
Event handler of the OnTrade event.
virtual void OnTrade()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3434

Standard Library

OnTimer
Event handler of the OnTimer event.
virtual void OnTimer()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3435

Standard Library

OnChartEvent
Event handler of the OnChartEvent event.
virtual void OnChartEvent(
const int

id,

// event id

const long&

lparam,

// long parameter

const double dparam,

// double parameter

const string

// string parameter

sparam

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type.
dparam
[in] Event parameter of double type.
sparam
[in] Event parameter of string type.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3436

Standard Library

OnBookEvent
Event handler of the OnBookEvent event.
virtual void OnBookEvent(
const string&

symbol

// symbol

Parameters
symbol
[in] Symbol of OnBookEvent event.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3437

Standard Library

InitParameters
Initializes parameters of Expert Advisor.
virtual bool InitParameters()

Returned value
true if successful, otherwise false.
Note
The InitParameters() function of CExpert base class does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3438

Standard Library

DeinitTrade
Deinitializes Trade object.
virtual void DeinitTrade()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3439

Standard Library

DeinitSignal
Deinitializes Signal object.
virtual void DeinitSignal()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3440

Standard Library

DeinitTrailing
Deinitializes Trailing object.
virtual void DeinitTrailing()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3441

Standard Library

DeinitMoney
Deinitializes Money Management object.
virtual void DeinitMoney()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3442

Standard Library

DeinitIndicators
Deinitializes all indicators and time series.
virtual void DeinitIndicators()

Returned value
None.
Note
It also deinitializes all indicators and time series of all auxiliary objects.

2000-2014, MetaQuotes Software Corp.

3443

Standard Library

Refresh
Updates all data.
virtual bool Refresh()

Returned value
true if further tick processing is needed, otherwise false.
Note
It allows to determine the need of tick processing. If it needed, it updates all quotes and time series
and indicators data and returns true.
Implementation
//+------------------------------------------------------------------+
//| Refreshing data for processing
|
//| INPUT: no.
|
//| OUTPUT: true-if successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::Refresh()
{
MqlDateTime time;
//--- refresh rates
if(!m_symbol.RefreshRates()) return(false);
//--- check need processing
TimeToStruct(m_symbol.Time(),time);
if(m_period_flags!=WRONG_VALUE && m_period_flags!=0)
if((m_period_flags & TimeframesFlags(time))==0) return(false);
m_last_tick_time=time;
//--- refresh indicators
m_indicators.Refresh();
//--- ok
return(true);
}

2000-2014, MetaQuotes Software Corp.

3444

Standard Library

Processing
Main processing algorithm.
virtual bool Processing()

Returned value
true if trade operation has been executed, otherwise false.
Note
It does the following steps:
1. Checks the presence of the opened position on the symbol. If there isn't opened position, skip
steps 2, 3 and 4.
2. Checks conditions to reverse opened position (CheckReverse() method). If position has been
"reversed", exit.
3. Checks conditions to close position (CheckClose() method). If position has been closed, skip step
4.
4. Checks conditions to modify position parameters (CheckTrailingStop() method). If position
parameters has been modified, exit.
5. Check the presence of pending orders on the symbol. If there isn't any pending orders, go to step
9.
6. Checks condition to delete order (CheckDeleteOrderLong() for buy pending orders or
CheckDeleteOrderShort() for sell pending orders). If the order has been deleted, go to step 9.
7. Check conditions to modify pending order parameters (CheckTrailingOrderLong() for buy orders
or CheckTrailingOrderShort() for sell orders). If the order parameters has been modified, exit.
8. Exit.
9. Checks conditions to open position (CheckOpen()) method).
If you want to implement your own algorithm, you need to override the Processing() method of the
heir class.
Implementation

2000-2014, MetaQuotes Software Corp.

3445

Standard Library
//+------------------------------------------------------------------+
//| Main function
|
//| INPUT: no.
|
//| OUTPUT: true-if any trade operation processed, false otherwise. |
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::Processing()
{
//--- check if open positions
if(m_position.Select(m_symbol.Name()))
{
//--- open position is available
//--- check the possibility of reverse the position
if(CheckReverse()) return(true);
//--- check the possibility of closing the position/delete pending orders
if(!CheckClose())
{
//--- check the possibility of modifying the position
if(CheckTrailingStop()) return(true);
//--- return without operations
return(false);
}
}
//--- check if placed pending orders
int total=OrdersTotal();
if(total!=0)
{
for(int i=total-1;i>=0;i--)
{
m_order.SelectByIndex(i);
if(m_order.Symbol()!=m_symbol.Name()) continue;
if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT || m_order.OrderType()==ORDER_TYPE_BUY_STOP)
{
//--- check the ability to delete a pending order to buy
if(CheckDeleteOrderLong()) return(true);
//--- check the possibility of modifying a pending order to buy
if(CheckTrailingOrderLong()) return(true);
}
else
{
//--- check the ability to delete a pending order to sell
if(CheckDeleteOrderShort()) return(true);
//--- check the possibility of modifying a pending order to sell
if(CheckTrailingOrderShort()) return(true);
}
//--- return without operations
return(false);
}
}
//--- check the possibility of opening a position/setting pending order
if(CheckOpen()) return(true);
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3446

Standard Library

CheckOpen
Checks conditions to open position.
virtual bool CheckOpen()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to open long (CheckOpenLong()) and short (CheckOpenShort()) positions.
Implementation
//+------------------------------------------------------------------+
//| Check for position open or limit/stop order set
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckOpen()
{
if(CheckOpenLong()) return(true);
if(CheckOpenShort()) return(true);
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3447

Standard Library

CheckOpenLong
Checks conditions to open long position.
virtual bool CheckOpenLong()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to open long position (CheckOpenLong() method of Signal object) and opens
long position (OpenLong() method) if necessary.
Implementation
//+------------------------------------------------------------------+
//| Check for long position open or limit/stop order set
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckOpenLong()
{
double
price=EMPTY_VALUE;
double
sl=0.0;
double
tp=0.0;
datetime expiration=TimeCurrent();
//--- check signal for long enter operations
if(m_signal.CheckOpenLong(price,sl,tp,expiration))
{
if(!m_trade.SetOrderExpiration(expiration))
{
m_expiration=expiration;
}
return(OpenLong(price,sl,tp));
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3448

Standard Library

CheckOpenShort
Checks conditions to open short position.
virtual bool CheckOpenShort()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to open short position (CheckOpenShort() method of Signal object) and opens a
short position (OpenShort() method) if necessary.
Implementation
//+------------------------------------------------------------------+
//| Check for short position open or limit/stop order set
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckOpenShort()
{
double
price=EMPTY_VALUE;
double
sl=0.0;
double
tp=0.0;
datetime expiration=TimeCurrent();
//--- check signal for short enter operations
if(m_signal.CheckOpenShort(price,sl,tp,expiration))
{
if(!m_trade.SetOrderExpiration(expiration))
{
m_expiration=expiration;
}
return(OpenShort(price,sl,tp));
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3449

Standard Library

OpenLong
Opens a long position.
virtual bool OpenLong(
double

price,

// price

double

sl,

// Stop Loss

double

tp

// Take Profit

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
It gets trading volume (LotOpenLong(...) method) and opens a long position (Buy() method of Trade
object) if trading volume is not equal to 0.
Implementation
//+------------------------------------------------------------------+
//| Long position open or limit/stop order set
|
//| INPUT: price - price,
|
//|
sl
- stop loss,
|
//|
tp
- take profit.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::OpenLong(double price,double sl,double tp)
{
if(price==EMPTY_VALUE) return(false);
//--- get lot for open
double lot=LotOpenLong(price,sl);
//--- check lot for open
if(lot==0.0) return(false);
//--return(m_trade.Buy(lot,price,sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3450

Standard Library

OpenShort
Opens a short position.
virtual bool OpenShort(
double

price,

// price

double

sl,

// Stop Loss

double

tp

// Take Profit

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
It gets trading volume (LotOpenShort() method) and opens a short position (by calling Sell method of
Trade object) if trading volume is not equal to 0.
Implementation
//+------------------------------------------------------------------+
//| Short position open or limit/stop order set
|
//| INPUT: price - price,
|
//|
sl
- stop loss,
|
//|
tp
- take profit.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::OpenShort(double price,double sl,double tp)
{
if(price==EMPTY_VALUE) return(false);
//--- get lot for open
double lot=LotOpenShort(price,sl);
//--- check lot for open
if(lot==0.0) return(false);
//--return(m_trade.Sell(lot,price,sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3451

Standard Library

CheckReverse
Checks conditions to reverse opened position.
virtual bool CheckReverse()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to reverse long (CheckReverseLong()) and short (CheckReverseShort())
positions.
Implementation
//+------------------------------------------------------------------+
//| Check for position reverse
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckReverse()
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
//--- check the possibility of reverse the long position
if(CheckReverseLong()) return(true);
}
else
//--- check the possibility of reverse the short position
if(CheckReverseShort()) return(true);
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3452

Standard Library

CheckReverseLong
Checks conditions to reverse long position.
virtual bool CheckReverseLong()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to reverse long position (CheckReverseLong() method of Signal object) and
perform reverse operation of the current long position (ReverseLong(...) method) if necessary.
Implementation
//+------------------------------------------------------------------+
//| Check for long position reverse
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckReverseLong()
{
double
price=EMPTY_VALUE;
double
sl=0.0;
double
tp=0.0;
datetime expiration=TimeCurrent();
//--- check signal for long reverse operations
if(m_signal.CheckReverseLong(price,sl,tp,expiration)) return(ReverseLong(price,sl,tp));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3453

Standard Library

CheckReverseShort
Checks conditions to reverse short position.
virtual bool CheckReverseLong()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks conditions to reverse short position (CheckReverseShort() method of Signal object) and
perform reverse operation of the current short position (ReverseShort() method) if necessary.
Implementation
//+------------------------------------------------------------------+
//| Check for short position reverse
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckReverseShort()
{
double
price=EMPTY_VALUE;
double
sl=0.0;
double
tp=0.0;
datetime expiration=TimeCurrent();
//--- check signal for short reverse operations
if(m_signal.CheckReverseShort(price,sl,tp,expiration)) return(ReverseShort(price,sl,tp));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3454

Standard Library

ReverseLong
Performs reverse operation of long position.
virtual bool ReverseLong(
double

price,

// price

double

sl,

// Stop Loss

double

tp

// Take Profit

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
It gets the position reverse volume (LotReverse() method) and perform trade operation of the long
position reverse (Sell() method of Trade object) if trading volume is not equal to 0.
Implementation
//+------------------------------------------------------------------+
//| Long position reverse
|
//| INPUT: price - price,
|
//|
sl
- stop loss,
|
//|
tp
- take profit.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::ReverseLong(double price,double sl,double tp)
{
if(price==EMPTY_VALUE) return(false);
//--- get lot for reverse
double lot=LotReverse(sl);
//--- check lot
if(lot==0.0) return(false);
//--return(m_trade.Sell(lot,price,sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3455

Standard Library

ReverseShort
Performs reverse operation of short position.
virtual bool ReverseShort(
double

price,

// price

double

sl,

// Stop Loss

double

tp

// Take Profit

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
It gets position reverse volume (LotReverse(...) method) and perform trade operation of the short
position reverse (Buy() method of Trade object) if trading volume is not equal to 0.
Implementation
//+------------------------------------------------------------------+
//| Short position reverse
|
//| INPUT: price - price,
|
//|
sl
- stop loss,
|
//|
tp
- take profit.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::ReverseShort(double price,double sl,double tp)
{
if(price==EMPTY_VALUE) return(false);
//--- get lot for reverse
double lot=LotReverse(sl);
//--- check lot
if(lot==0.0) return(false);
//--return(m_trade.Buy(lot,price,sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3456

Standard Library

CheckClose
Checks conditions to close position.
virtual bool CheckClose()

Returned value
true if trade operation has been executed, otherwise false.
Note
1. It checks Expert Advisor Stop Out conditions (CheckClose() method of money management
object). If condition is satisfied, it closes the position and deletes all orders (CloseAll(...)) and
exit.
2. It checks conditions to close long or short position (CheckCloseLong() or CheckCloseShort()
methods) and if position is closed, it deletes all orders (DeleteOrders() method).
Implementation
//+------------------------------------------------------------------+
//| Check for position close or limit/stop order delete
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckClose()
{
double lot;
//--- position must be selected before call
if((lot=m_money.CheckClose(GetPointer(m_position)))!=0.0)
return(CloseAll(lot));
//--- check for position type
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
//--- check the possibility of closing the long position / delete pending orders to buy
if(CheckCloseLong())
{
DeleteOrders();
return(true);
}
}
else
{
//--- check the possibility of closing the short position / delete pending orders to sell
if(CheckCloseShort())
{
DeleteOrders();
return(true);
}
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3457

Standard Library

CheckCloseLong
Checks conditions to close long position.
virtual bool CheckCloseLong()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks conditions to close long position (CheckCloseLong() method of Signal object) and if it
satisfied, it closes the opened position (CloseLong(...) method).
Implementation
//+------------------------------------------------------------------+
//| Check for long position close or limit/stop order delete
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckCloseLong()
{
double price=EMPTY_VALUE;
//--- check for long close operations
if(m_signal.CheckCloseLong(price))
return(CloseLong(price));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3458

Standard Library

CheckCloseShort
Checks conditions to close short position.
virtual bool CheckCloseShort()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks conditions to close short position (CheckCloseShort() method of Signal object) and if it
satisfied, it closes the position ( CloseShort() method).
Implementation
//+------------------------------------------------------------------+
//| Check for short position close or limit/stop order delete
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckCloseShort()
{
double price=EMPTY_VALUE;
//--- check for short close operations
if(m_signal.CheckCloseShort(price))
return(CloseShort(price));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3459

Standard Library

CloseAll
It performs partial of full position closing.
virtual bool CloseAll(
double

lot

// lot

Parameters
lot
[in] Number of lots to reduce the position.
Returned value
true if trade operation has been executed, otherwise false.
Note
It performs partial of full position closing (Sell() and Buy() methods of CTrade class object for the
long/short positions) and deletes all orders (DeleteOrders() method).
Implementation
//+------------------------------------------------------------------+
//| Position close and orders delete
|
//| INPUT: lot - volume for close.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CloseAll(double lot)
{
bool result;
//--- check for close operations
if(m_position.PositionType()==POSITION_TYPE_BUY) result=m_trade.Sell(lot,0,0,0);
else
result=m_trade.Buy(lot,0,0,0);
result|=DeleteOrders();
//--return(result);
}

2000-2014, MetaQuotes Software Corp.

3460

Standard Library

Close
Closes the opened position.
virtual bool Close()

Returned value
true if trade operation has been executed, otherwise false.
Note
Closes the position (PositionClose() method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Position close
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::Close()
{
return(m_trade.PositionClose(m_symbol.Name()));
}

2000-2014, MetaQuotes Software Corp.

3461

Standard Library

CloseLong
Closes the long position.
virtual bool CloseLong(
double

price

// price

Parameters
price
[in] Price.
Returned value
true if trade operation has been executed, otherwise false.
Note
Closes the long position (Sell(...) method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Long position close
|
//| INPUT: price - price for close.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CloseLong(double price)
{
if(price==EMPTY_VALUE) return(false);
//--return(m_trade.Sell(m_position.Volume(),price,0,0));
}

2000-2014, MetaQuotes Software Corp.

3462

Standard Library

CloseShort
Closes the short position.
virtual bool CloseShort(
double

price

// price

Parameters
price
[in] Price.
Returned value
true if trade operation has been executed, otherwise false.
Note
Closes the short position (Buy(...) method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Short position close
|
//| INPUT: price - price for close.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CloseShort(double price)
{
if(price==EMPTY_VALUE) return(false);
//--return(m_trade.Buy(m_position.Volume(),price,0,0));
}

2000-2014, MetaQuotes Software Corp.

3463

Standard Library

CheckTrailingStop
It checks Trailing Stop conditions of the opened position.
virtual bool CheckTrailingStop()

Returned value
true if any trade operation has been executed, otherwise false.
Note
It checks Trailing Stop conditions of the opened
CheckTrailingStopShort() for long and short positions).

position

(CheckTrailingStopLong()

Implementation
//+------------------------------------------------------------------+
//| Check for trailing stop/profit position
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckTrailingStop()
{
//--- position must be selected before call
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
//--- check the possibility of modifying the long position
if(CheckTrailingStopLong()) return(true);
}
else
{
//--- check the possibility of modifying the short position
if(CheckTrailingStopShort()) return(true);
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

or

3464

Standard Library

CheckTrailingStopLong
It checks Trailing Stop conditions of the opened long position.
virtual bool CheckTrailingStopLong()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks Trailing Stop conditions of the opened long position (CheckTrailingStopLong(...) method of
Expert Trailing object). If conditions are satisfied, it modifies the position parameters
(TrailingStopLong(...) method).
Implementation
//+------------------------------------------------------------------+
//| Check for trailing stop/profit long position
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckTrailingStopLong()
{
double sl=EMPTY_VALUE;
double tp=EMPTY_VALUE;
//--- check for long trailing stop operations
if(m_trailing.CheckTrailingStopLong(GetPointer(m_position),sl,tp))
{
if(sl==EMPTY_VALUE) sl=m_position.StopLoss();
if(tp==EMPTY_VALUE) tp=m_position.TakeProfit();
//--- long trailing stop operations
return(TrailingStopLong(sl,tp));
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3465

Standard Library

CheckTrailingStopShort
It checks Trailing Stop conditions of the opened short position.
virtual bool CheckTrailingStopShort()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks Trailing Stop conditions of the opened short position (CheckTrailingStopShort(...) method
of Expert Trailing object). If conditions are satisfied, it modifies the position parameters
(TrailingStopShort(...) method).
Implementation
//+------------------------------------------------------------------+
//| Check for trailing stop/profit short position
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckTrailingStopShort()
{
double sl=EMPTY_VALUE;
double tp=EMPTY_VALUE;
//--- check for short trailing stop operations
if(m_trailing.CheckTrailingStopShort(GetPointer(m_position),sl,tp))
{
if(sl==EMPTY_VALUE) sl=m_position.StopLoss();
if(tp==EMPTY_VALUE) tp=m_position.TakeProfit();
//--- short trailing stop operations
return(TrailingStopShort(sl,tp));
}
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3466

Standard Library

TrailingStopLong
It modifies parameters of the opened long position.
virtual bool TrailingStopLong(
double

sl,

// Stop Loss

double

tp,

// Take Profit

Parameters
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
The function modifies parameters of the opened long position (PositionModify(...) method of
CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Trailing stop/profit long position
|
//| INPUT: sl - new stop loss,
|
//|
tp - new take profit.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::TrailingStopLong(double sl,double tp)
{
return(m_trade.PositionModify(m_symbol.Name(),sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3467

Standard Library

TrailingStopShort
It modifies parameters of the opened short position.
virtual bool TrailingStopLong(
double

sl,

// Stop Loss

double

tp,

// Take Profit

Parameters
sl
[in] Stop Loss price.
tp
[in] Take Profit price.
Returned value
true if trade operation has been executed, otherwise false.
Note
The function modifies parameters of the opened short position (PositionModify(...) method of
CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Trailing stop/profit short position
|
//| INPUT: sl - new stop loss,
|
//|
tp - new take profit.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::TrailingStopShort(double sl,double tp)
{
return(m_trade.PositionModify(m_symbol.Name(),sl,tp));
}

2000-2014, MetaQuotes Software Corp.

3468

Standard Library

CheckTrailingOrderLong
Checks Trailing Stop conditions of Buy Limit/Stop Pending order.
virtual bool CheckTrailingOrderLong()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks Trailing Stop conditions for buy limit/stop pending order (CheckTrailingOrderLong()
method of Trade Signals object) and modifies the order parameters if necessary
(TrailingOrderLong(...) method).
Implementation
//+------------------------------------------------------------------+
//| Check for trailing long limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckTrailingOrderLong()
{
double price;
//--- check the possibility of modifying the long order
if(m_signal.CheckTrailingOrderLong(GetPointer(m_order),price))
return(TrailingOrderLong(m_order.PriceOpen()-price));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3469

Standard Library

CheckTrailingOrderShort
It checks Trailing Stop conditions of Sell Limit/Stop pending order.
virtual bool CheckTrailingOrderShort()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks Trailing Stop conditions for sell limit/stop pending order (CheckTrailingOrderShort()
method of Trade Signals object) and modifies the order parameters if necessary
(TrailingOrderShort() method).
Implementation
//+------------------------------------------------------------------+
//| Check for trailing short limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckTrailingOrderShort()
{
double price;
//--- check the possibility of modifying the short order
if(m_signal.CheckTrailingOrderShort(GetPointer(m_order),price))
return(TrailingOrderShort(m_order.PriceOpen()-price));
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3470

Standard Library

TrailingOrderLong
It modifies parameters of Buy Limit/Stop Pending order.
virtual bool TrailingOrderLong(
double

delta

// delta

Parameters
delta
[in] Price delta.
Returned value
true if trade operation has been executed, otherwise false.
Note
It modifies parameters of Buy Limit/Stop Pending order (OrderModify(...) method of CTrade class
object).
Implementation
//+------------------------------------------------------------------+
//| Trailing long limit/stop order
|
//| INPUT: delta - price change.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::TrailingOrderLong(double delta)
{
ulong ticket=m_order.Ticket();
double price =m_order.PriceOpen()-delta;
double sl
=m_order.StopLoss()-delta;
double tp
=m_order.TakeProfit()-delta;
//--- modifying the long order
return(m_trade.OrderModify(ticket,price,sl,tp,m_order.TypeTime(),m_order.TimeExpiration()));
}

2000-2014, MetaQuotes Software Corp.

3471

Standard Library

TrailingOrderShort
It modifies parameters of Sell Limit/Stop Pending order.
virtual bool TrailingOrderShort(
double

delta

// delta

Parameters
delta
[in] Price delta.
Returned value
true if trade operation has been executed, otherwise false.
Note
It modifies parameters of Sell Limit/Stop Pending order (OrderModify(...) method of CTrade class
object).
Implementation
//+------------------------------------------------------------------+
//| Trailing short limit/stop order
|
//| INPUT: delta - price change.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::TrailingOrderShort(double delta)
{
ulong ticket=m_order.Ticket();
double price =m_order.PriceOpen()-delta;
double sl
=m_order.StopLoss()-delta;
double tp
=m_order.TakeProfit()-delta;
//--- modifying the short order
return(m_trade.OrderModify(ticket,price,sl,tp,m_order.TypeTime(),m_order.TimeExpiration()));
}

2000-2014, MetaQuotes Software Corp.

3472

Standard Library

CheckDeleteOrderLong
It checks conditions to delete Buy Limit/Stop Pending order.
virtual bool CheckDeleteOrderLong()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks the order expiration time. It checks conditions to delete the Sell Limit/Stop Pending order
(CheckCloseLong(...) method of Signal class object) and deletes the order if condition is satisfied
( DeleteOrderLong() method).
Implementation
//+------------------------------------------------------------------+
//| Check for delete long limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckDeleteOrderLong()
{
double price;
//--- check the possibility of deleting the long order
if(m_expiration!=0 && TimeCurrent()>m_expiration)
{
m_expiration=0;
return(DeleteOrderLong());
}
if(m_signal.CheckCloseLong(price))
return(DeleteOrderLong());
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3473

Standard Library

CheckDeleteOrderShort
It checks conditions to delete Sell Limit/Stop Pending order.
virtual bool CheckDeleteOrderShort()

Returned value
true if trade operation has been executed, otherwise false.
Note
It checks the order expiration time. It checks conditions to delete the Sell Limit/Stop Pending order
(CheckCloseShort(...) method of Signal class object) and deletes the order if condition is satisfied
(DeleteOrderShort() method).
Implementation
//+------------------------------------------------------------------+
//| Check for delete short limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation processed, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::CheckDeleteOrderShort()
{
double price;
//--- check the possibility of deleting the short order
if(m_expiration!=0 && TimeCurrent()>m_expiration)
{
m_expiration=0;
return(DeleteOrderShort());
}
if(m_signal.CheckCloseShort(price))
return(DeleteOrderShort());
//--- return without operations
return(false);
}

2000-2014, MetaQuotes Software Corp.

3474

Standard Library

DeleteOrders
Deletes all orders.
virtual bool DeleteOrders()

Returned value
true if trade operation has been executed, otherwise false.
Note
It deletes all orders (DeleteOrder() for all orders).
Implementation
//+------------------------------------------------------------------+
//| Delete all limit/stop orders
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::DeleteOrders()
{
bool result=false;
int total=OrdersTotal();
//--for(int i=total-1;i>=0;i--)
{
if(m_order.Select(OrderGetTicket(i)))
{
if(m_order.Symbol()!=m_symbol.Name()) continue;
result|=DeleteOrder();
}
}
//--return(result);
}

2000-2014, MetaQuotes Software Corp.

3475

Standard Library

DeleteOrder
Deletes the Limit/Stop Pending order.
virtual bool DeleteOrder()

Returned value
true if trade operation has been executed, otherwise false.
Note
It deletes the Limit/Stop Pending order (OrderDelete(...) method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Delete limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::DeleteOrder()
{
return(m_trade.OrderDelete(m_order.Ticket()));
}

2000-2014, MetaQuotes Software Corp.

3476

Standard Library

DeleteOrderLong
Deletes the Buy Limit/Stop Pending order.
virtual bool DeleteOrderLong()

Returned value
true if trade operation has been executed, otherwise false.
Note
It deletes Buy Limit/Stop Pending order (OrderDelete(...) method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Delete long limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::DeleteOrderLong()
{
return(m_trade.OrderDelete(m_order.Ticket()));
}

2000-2014, MetaQuotes Software Corp.

3477

Standard Library

DeleteOrderShort
Deletes the Sell Limit/Stop Pending order.
virtual bool DeleteOrderShort()

Returned value
true if trade operation has been executed, otherwise false.
Note
It deletes the Sell Limit/Stop pending order (OrderDelete(...) method of CTrade class object).
Implementation
//+------------------------------------------------------------------+
//| Delete short limit/stop order
|
//| INPUT: no.
|
//| OUTPUT: true-if trade operation successful, false otherwise.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
bool CExpert::DeleteOrderShort()
{
return(m_trade.OrderDelete(m_order.Ticket()));
}

2000-2014, MetaQuotes Software Corp.

3478

Standard Library

LotOpenLong
Gets trade volume for buy operation.
double LotOpenLong(
double

price,

// price

double

sl

// Stop Loss

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume (in lots) for buy operation.
Note
It gets trade volume for buy operation (CheckOpenLong(...) method of money management object).
Implementation
//+------------------------------------------------------------------+
//| Method of getting the lot for open long position.
|
//| INPUT: price - price,
|
//|
sl
- stop loss.
|
//| OUTPUT: lot for open.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
double CExpert::LotOpenLong(double price,double sl)
{
return(m_money.CheckOpenLong(price,sl));
}

2000-2014, MetaQuotes Software Corp.

3479

Standard Library

LotOpenShort
Gets trade volume for sell operation.
double LotOpenShort(
double

price,

// price

double

sl

// Stop Loss

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume (in lots) for sell operation.
Note
It gets trade volume for sell operation (CheckOpenShort(...) method of money management object).
Implementation
//+------------------------------------------------------------------+
//| Method of getting the lot for open short position.
|
//| INPUT: price - price,
|
//|
sl
- stop loss.
|
//| OUTPUT: lot for open.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
double CExpert::LotOpenShort(double price,double sl)
{
return(m_money.CheckOpenShort(price,sl));
}

2000-2014, MetaQuotes Software Corp.

3480

Standard Library

LotReverse
Gets trade volume for position reverse.
double LotReverse(
double

sl

// Stop Loss

Parameters
sl
[in] Stop Loss price.
Returned value
Trade volume (in lots) for position reverse operation.
Note
It gets trade volume for position reverse operation (CheckReverse(...) method of money
management object).
Implementation
//+------------------------------------------------------------------+
//| Method of getting the lot for reverse position.
|
//| INPUT: sl - stop loss.
|
//| OUTPUT: lot for open.
|
//| REMARK: no.
|
//+------------------------------------------------------------------+
double CExpert::LotReverse(double sl)
{
return(m_money.CheckReverse(GetPointer(m_position),sl));
}

2000-2014, MetaQuotes Software Corp.

3481

Standard Library

PrepareHistoryDate
Sets starting date for tracking of trade history.
void PrepareHistoryDate()

Note
The trade history tracking period is set from the beginning of the month (but not less than one day).

2000-2014, MetaQuotes Software Corp.

3482

Standard Library

HistoryPoint
Creates a checkpoint of trade history (saves number of positions, orders, deals and historical orders).
void HistoryPoint(
bool

from_check_trade=false

// flag

Parameters
from_check_trade=false
[in] Flag to avoid recursion.
Note
It saves the amount of positions, orders, deals and historical orders.

2000-2014, MetaQuotes Software Corp.

3483

Standard Library

CheckTradeState
Compares the current state with the saved one and calls the corresponding event handler.
bool CheckTradeState()

Returned value
true if event has been handled, otherwise - false.
Note
It checks the number of positions, orders, deals and historical orders by comparing with the values,
saved by HistoryPoint() method. If trade history has changed, it calls the corresponding virtual event
handler.

2000-2014, MetaQuotes Software Corp.

3484

Standard Library

WaitEvent
Sets the event waiting flag.
void WaitEvent(
ENUM_TRADE_EVENTS

event

// flag

Parameters
event
[in] Flag with events to set (ENUM_TRADE_EVENTS enumeration).
Returned value
None.
Event flags
//--- flags of expected events
enum ENUM_TRADE_EVENTS
{
TRADE_EVENT_NO_EVENT
=0,
TRADE_EVENT_POSITION_OPEN
=0x1,
TRADE_EVENT_POSITION_VOLUME_CHANGE=0x2,
TRADE_EVENT_POSITION_MODIFY
=0x4,
TRADE_EVENT_POSITION_CLOSE
=0x8,
TRADE_EVENT_POSITION_STOP_TAKE
=0x10,
TRADE_EVENT_ORDER_PLACE
=0x20,
TRADE_EVENT_ORDER_MODIFY
=0x40,
TRADE_EVENT_ORDER_DELETE
=0x80,
TRADE_EVENT_ORDER_TRIGGER
=0x100
};

//
//
//
//
//
//
//
//
//
//

no expected events
flag of expecting the "opening of position" eve
flag of expecting of the "modification of posit
flag of expecting of the "modification of stop
flag of expecting of the "closing of position"
flag of expecting of the "triggering of stop or
flag of expecting of the "placing of pending or
flag of expecting of the "modification of pendi
flag of expecting of the "deletion of pending o
flag of expecting of the "triggering of pending

2000-2014, MetaQuotes Software Corp.

3485

Standard Library

NoWaitEvent
Resets the event waiting flag.
void NoWaitEvent(
ENUM_TRADE_EVENTS

event

// flag

Parameters
event
[in] Flag with events to reset (ENUM_TRADE_EVENTS enumeration).
Returned value
None.
Event flags
//--- flags of expected events
enum ENUM_TRADE_EVENTS
{
TRADE_EVENT_NO_EVENT
=0,
TRADE_EVENT_POSITION_OPEN
=0x1,
TRADE_EVENT_POSITION_VOLUME_CHANGE=0x2,
TRADE_EVENT_POSITION_MODIFY
=0x4,
TRADE_EVENT_POSITION_CLOSE
=0x8,
TRADE_EVENT_POSITION_STOP_TAKE
=0x10,
TRADE_EVENT_ORDER_PLACE
=0x20,
TRADE_EVENT_ORDER_MODIFY
=0x40,
TRADE_EVENT_ORDER_DELETE
=0x80,
TRADE_EVENT_ORDER_TRIGGER
=0x100
};

//
//
//
//
//
//
//
//
//
//

no expected events
flag of expecting the "opening of position" eve
flag of expecting of the "modification of posit
flag of expecting of the "modification of stop
flag of expecting of the "closing of position"
flag of expecting of the "triggering of stop or
flag of expecting of the "placing of pending or
flag of expecting of the "modification of pendi
flag of expecting of the "deletion of pending o
flag of expecting of the "triggering of pending

2000-2014, MetaQuotes Software Corp.

3486

Standard Library

TradeEventPositionStopTake
Event handler of the "Position Stop Loss/Take Profit triggered" event.
virtual bool TradeEventPositionStopTake()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3487

Standard Library

TradeEventOrderTriggered
Event handler of the "Pending Order triggered" event.
virtual bool TradeEventOrderTriggered()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3488

Standard Library

TradeEventPositionOpened
Event handler of the "Position opened" event.
virtual bool TradeEventPositionOpened()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3489

Standard Library

TradeEventPositionVolumeChanged
Event handler of the "Position volume changed" event.
virtual bool TradeEventPositionVolumeChanged()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3490

Standard Library

TradeEventPositionModified
Event handler of the "Position modified" event.
virtual bool TradeEventPositionModified()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3491

Standard Library

TradeEventPositionClosed
Event handler of the "Position closed" event.
virtual bool TradeEventPositionClosed()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3492

Standard Library

TradeEventOrderPlaced
Event handler of the "Pending order placed" event.
virtual bool TradeEventOrderPlaced()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3493

Standard Library

TradeEventOrderModified
Event handler of the "Pending order modified" event.
virtual bool TradeEventOrderModified()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3494

Standard Library

TradeEventOrderDeleted
Event handler of the "Pending order deleted" event.
virtual bool TradeEventOrderDeleted()

Returned value
The CExpert class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3495

Standard Library

TradeEventNotIdentified
Event handler of the non-identified event.
virtual bool TradeEventNotIdentified()

Returned value
The CExpert class method does nothing and always returns true.
Note
Note that several trade events can arrive, in such cases it's difficult to identify them.

2000-2014, MetaQuotes Software Corp.

3496

Standard Library

TimeframeAdd
Add a timeframe for tracking.
void TimeframeAdd(
ENUM_TIMEFRAMES

period

// timeframe

Parameters
period
[in] Timeframe (ENUM_TIMEFRAMES enumeration).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3497

Standard Library

TimeframesFlags
The method returns the flag indicating the timeframes with a new bar.
int TimeframesFlags(
MqlDateTime&

time

// variable for time

Parameters
time
[in] Variable of MqlDateTime type for new time, passed by reference.
Returned value
It returns the flag, that indicates timeframes with a new bar.

2000-2014, MetaQuotes Software Corp.

3498

Standard Library

CExpertSignal
CExpertSignal is a base class for trading signals, it does nothing (except CheckReverseLong() and
CheckReverseShort() methods) but provides the interfaces.
How to use it:
1. Prepare an algorithm for trading signals;
2. Create your own trading signal class, inherited from CExpertSignal class;
3. Override the virtual methods in your class with your own algorithms.
You can find an examples of trading signal classes in the Expert\Signal\ folder.

Description
CExpertSignal is a base class for implementation of trading signal algorithms.

Declaration
class CExpertSignal : public CExpertBase

Title
#include <Expert\ExpertSignal.mqh>

Class Methods
Initialization
virtual InitIndicators

Initializes indicators and time series

virtual ValidationSettings

Checks the settings

virtual AddFilter

Adds a filter to combined signal

Access to Protected Data


BasePrice

Sets base price level

UsedSeries

Gets the flags of timeseries used

Parameters Setting
Weight

Sets the value of "Weight" parameter

PatternsUsage

Sets the value of "PatternsUsage" parameter

General

Sets the value of "General" parameter

Ignore

Sets the value of "Ignore" parameter

Invert

Sets the value of "Invert" parameter

ThresholdOpen

Sets the value of "ThresholdOpen" parameter

ThresholdClose

Sets the value of "ThresholdClose" parameter

PriceLevel

Sets the value of "PriceLevel" parameter

2000-2014, MetaQuotes Software Corp.

3499

Standard Library

StopLevel

Sets the value of "StopLevel" parameter

TakeLevel

Sets the value of "TakeLevel" parameter

Expiration

Sets the value of "Expiration" parameter

Magic

Sets the value of "Magic" parameter

Checking Trading Conditions


virtual CheckOpenLong

Checks conditions to open long position

virtual CheckCloseLong

Checks conditions to close long position

virtual CheckOpenShort

Checks conditions to open short position

virtual CheckCloseShort

Checks conditions to close short position

virtual CheckReverseLong

Checks conditions of long position reversal

virtual CheckReverseShort

Checks conditions of short position reversal

Trade Parameters Setting


virtual OpenLongParams

Sets parameters for long position opening

virtual OpenShortParams

Sets parameters for short position opening

virtual CloseLongParams

Sets parameters for long position closing

virtual CloseShortParams

Sets parameters for short position closing

Checking of Order Trailing Conditions


virtual CheckTrailingOrderLong

Checks conditions to modify parameters of Buy


Pending order

virtual CheckTrailingOrderShort

Checks conditions to modify parameters of Sell


Pending order

Methods to Check Formation of Market


Orders
virtual LongCondition

Gets the result of checking of buy conditions

virtual ShortCondition

Gets the result of checking of sell conditions

virtual Direction

Gets the "weighted" direction of price

2000-2014, MetaQuotes Software Corp.

3500

Standard Library

BasePrice
Sets base price level.
void BasePrice(
double

value

// new value

Parameters
value
[in] New value of Base price level.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3501

Standard Library

UsedSeries
Gets the flags of the timeseries used.
int BasePrice()

Returned value
Flags of the used timeseries (if the symbol/timeframe corresponds to the working symbol/
timeframe), otherwise 0.

2000-2014, MetaQuotes Software Corp.

3502

Standard Library

Weight
Sets new value of "Weight" parameter.
void Weight(
double

value

// new value

Parameters
value
[in] New value of "Weight".
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3503

Standard Library

PatternUsage
Sets new value of "PatternsUsage" parameter.
void PatternUsage(
double

value

// new value

Parameters
value
[in] New value of "PatternsUsage".
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3504

Standard Library

General
Sets new value of "General" parameter.
void General(
int

value

// new value

Parameters
value
[in] New value of "General".
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3505

Standard Library

Ignore
Sets new value of "Ignore" parameter.
void Ignore(
long

value

// new value

Parameters
value
[in] New value of "Ignore".
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3506

Standard Library

Invert
Sets new value of "Invert" parameter.
void Invert(
long

value

// new value

Parameters
value
[in] New value of "Invert".
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3507

Standard Library

ThresholdOpen
Sets new value of "ThresholdOpen" parameter.
void ThresholdOpen(
long

value

// new value

Parameters
value
[in] New value of "ThresholdOpen".
Returned value
None.
Note
The range of "ThresholdOpen" parameter is from 0 to 100. Used when "voting" to open position.

2000-2014, MetaQuotes Software Corp.

3508

Standard Library

ThresholdClose
Sets new value of "ThresholdClose" parameter.
void ThresholdOpen(
long

value

// new value

Parameters
value
[in] New value of "ThresholdClose".
Returned value
None.
Note
The range of "ThresholdClose" parameter is from 0 to 100. Used when "voting" to close position.

2000-2014, MetaQuotes Software Corp.

3509

Standard Library

PriceLevel
Sets new value of "PriceLevel" parameter.
void PriceLevel(
double

value

// new value

Parameters
value
[in] New value of "PriceLevel".
Returned value
None.
Note
The value of "PriceLevel" is defined in price level units. The numerical values of price level unit is
returned by PriceLevelUnit() method. The "PriceLevel" is used to define the open price relative to
the base price.

2000-2014, MetaQuotes Software Corp.

3510

Standard Library

StopLevel
Sets new value of "StopLevel" parameter.
void StopLevel(
double

value

// new value

Parameters
value
[in] New value of "StopLevel".
Returned value
None.
Note
The value of "StopLevel" is defined in price level units. The numerical values of price level unit is
returned by PriceLevelUnit() method. The "StopLevel" is used to define the Stop Loss price relative
to the open price.

2000-2014, MetaQuotes Software Corp.

3511

Standard Library

TakeLevel
Sets new value of "TakeLevel" parameter.
void TakeLevel(
double

value

// new value

Parameters
value
[in] New value of "TakeLevel".
Returned value
None.
Note
The value of "TakeLevel" is defined in price level units. The numerical values of price level unit is
returned by PriceLevelUnit() method. The "TakeLevel" is used to define the Take Profit price
relative to the open price.

2000-2014, MetaQuotes Software Corp.

3512

Standard Library

Expiration
Sets the value of "Expiration" parameter.
void Expiration(
int

value

// new value

Parameters
value
[in] New value of "Expiration".
Returned value
None.
Note
The value of "Expiration" parameter is defined in bars. It used as Expiration time for Pending Orders
(when trading using pending orders).

2000-2014, MetaQuotes Software Corp.

3513

Standard Library

Magic
Sets the value of "Magic" parameter.
void Magic(
int

value

// new value

Parameters
value
[in] New value of "Magic" (Expert Advisor ID).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3514

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3515

Standard Library

InitIndicators
Initializes all indicators and time series.
virtual bool InitIndicators(
CIndicators* indicators

// pointer

Parameters
indicators
[in] Pointer to collection of indicators and timeseries.
Returned value
true if successful, otherwise false.
Note
The timeseries are initialized only if the object uses the symbol or timeframe, different from the
symbol or timeframe, defined at initialization.

2000-2014, MetaQuotes Software Corp.

3516

Standard Library

AddFilter
Adds a filter to the composite signal.
virtual bool InitIndicators(
CExpertSignal* filter

// pointer

Parameters
indicators
[in] Pointer to filter object.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3517

Standard Library

CheckOpenLong
Checks conditions to open long position.
virtual bool CheckOpenLong(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3518

Standard Library

CheckOpenShort
Checks conditions to open short position.
virtual bool CheckOpenShort(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3519

Standard Library

OpenLongParams
Sets parameters to open long position.
virtual bool OpenLongParams(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3520

Standard Library

OpenShortParams
Sets parameters to open short position.
virtual bool OpenShortParams(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3521

Standard Library

CheckCloseLong
Checks conditions to close long position.
virtual bool CheckCloseLong(
double& price

// price

Parameters
price
[in][out] Variable for close price, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3522

Standard Library

CheckCloseShort
Checks conditions to close short position.
virtual bool CheckCloseShort(
double& price

// price

Parameters
price
[in][out] Variable for close price, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3523

Standard Library

CloseLongParams
Sets parameters to close long position.
virtual bool CloseLongParams(
double&

price

// price

Parameters
price
[in][out] Variable for close price, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3524

Standard Library

CloseShortParams
Sets parameters to close short position.
virtual bool CloseShortParams(
double&

price

// price

Parameters
price
[in][out] Variable for close price, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3525

Standard Library

CheckReverseLong
Checks conditions of long position reversal.
virtual bool CheckReverseLong(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3526

Standard Library

CheckReverseShort
Checks conditions of short position reversal.
virtual bool CheckReverseShort(
double&

price,

// price

double&

sl,

// Stop Loss

double&

tp,

// Take Profit

datetime& expiration

// expiration

Parameters
price
[in][out] Variable for reversal price, passed by reference.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
expiration
[in][out] Variable for expiration time, passed by reference.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3527

Standard Library

CheckTrailingOrderLong
Checks conditions to modify parameters of Buy Pending order.
virtual bool CheckTrailingOrderLong(
COrderInfo*

order,

// order

double&

price

// price

Parameters
order
[in] Pointer to COrderInfo class object.
price
[in][out] Variable for Stop Loss price.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3528

Standard Library

CheckTrailingOrderShort
Checks conditions to modify parameters of Sell Pending order.
virtual bool CheckTrailingOrderShort(
COrderInfo*

order,

// order

double&

price

// price

Parameters
order
[in] Pointer to COrderInfo class object.
price
[in][out] Variable for Stop Loss price.
Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3529

Standard Library

LongCondition
Checks conditions to open long position.
virtual int LongCondition()

Returned value
Then conditions are satisfied, it returns the value from 1 to 100 (depending on "strength" of a
signal), if there isn't a signal to open long position, it returns 0.
Note
The LongCondition() method of a base class has no implementation of checking of conditions to
open long position and always returns 0.

2000-2014, MetaQuotes Software Corp.

3530

Standard Library

ShortCondition
Checks conditions to open short position.
virtual int ShortCondition()

Returned value
Then conditions are satisfied, it returns the value from 1 to 100 (depending on "strength" of a
signal), if there isn't a signal to open short position, it returns 0.
Note
The ShortCondition() method of a base class has no implementation of checking of conditions to
open short position and always returns 0.

2000-2014, MetaQuotes Software Corp.

3531

Standard Library

Direction
Returns the value of "weighted" direction.
virtual double Direction()

Returned value
It returns the value>0 when upward direction (probably) and the returned value<0 when downward
direction. The absolute value depends on the "strength" of a signal.
Note
If the filters are used, the result will depend on the filters.

2000-2014, MetaQuotes Software Corp.

3532

Standard Library

CExpertTrailing
CExpertTrailing is a base class for trailing algorithms, it does nothing but provides the interfaces.
How to use it:
1. Prepare an algorithm for trailing;
2. Create your own trailing class, inherited from CExpertTrailing class;
3. Override the virtual methods in your class with your own algorithms.
You can find an examples of trailing classes in the Expert\Trailing\ folder.

Description
CExpertTrailing is a base class for implementation of trailing stop algoritms.

Declaration
class CExpertTrailing : public CExpertBase

Title
#include <Expert\ExpertTrailing.mqh>

Class Methods
Checking of Trailing Stop Conditions
virtual CheckTrailingStopLong

Checks conditions to modify parameters of the


long position

virtual CheckTrailingStopShort

Checks conditions to modify parameters of the


short position

2000-2014, MetaQuotes Software Corp.

3533

Standard Library

CheckTrailingStopLong
Checks conditions to modify parameters of the long position.
virtual bool CheckTrailingStopLong(
CPositionInfo* position,

// pointer

double&

sl,

// Stop Loss

double&

tp

// Take Profit

Parameters
position
[in] Pointer to CPositionInfo class object.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
Returned value
true if condition is satisfied, otherwise false.
Note
The CheckTrailingStopLong(...) method of the base class always returns false.

2000-2014, MetaQuotes Software Corp.

3534

Standard Library

CheckTrailingStopShort
Checks conditions to modify parameters of the short position.
virtual bool CheckTrailingStopShort(
CPositionInfo* position,

// pointer

double&

sl,

// Stop Loss

double&

tp

// Take Profit

Parameters
position
[in] Pointer to CPositionInfo class object.
sl
[in][out] Variable for Stop Loss price, passed by reference.
tp
[in][out] Variable for Take Profit price, passed by reference.
Returned value
true if condition is satisfied, otherwise false.
Note
The CheckTrailingStopShort(...) method of the base class always returns false.

2000-2014, MetaQuotes Software Corp.

3535

Standard Library

CExpertMoney
CExpertMoney is a base class for money and risk management algorithms.

Description
CExpertMoney is a base class for implementation of money and risk management classes.

Declaration
class CExpertMoney : public CObject

Title
#include <Expert\ExpertMoney.mqh>

Class Methods
Access to Protected Data
Percent

Sets the value of "Risk percent" parameter

Initialization
virtual ValidationSettings

Checks the settings

Checking of Trading Conditions


virtual CheckOpenLong

Gets the volume for long position

virtual CheckOpenShort

Gets the volume for short position

virtual CheckReverse

Gets the volume for reverse of the position

virtual CheckClose

Checks conditions to close the opened position

2000-2014, MetaQuotes Software Corp.

3536

Standard Library

Percent
Sets the value of "Risk percent" parameter.
void Percent(
double percent

// risk percent

Parameters
percent
[in] Risk percent.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3537

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
The ValidationSettings() method of the base class always returns true.

2000-2014, MetaQuotes Software Corp.

3538

Standard Library

CheckOpenLong
Gets the volume for long position.
virtual double CheckOpenLong(
double price,

// price

double sl

// Stop Loss

Parameters
price
[in] Opening price of long position.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.

2000-2014, MetaQuotes Software Corp.

3539

Standard Library

CheckOpenShort
Gets the volume for short position.
virtual double CheckOpenShort(
double price,

// price

double sl

// Stop Loss

Parameters
price
[in] Opening price for short position.
sl
[in] Stop Loss price.
Returned value
Trade volume for short position.

2000-2014, MetaQuotes Software Corp.

3540

Standard Library

CheckReverse
Gets the volume for reverse of the position.
virtual double CheckReverse(
CPositionInfo* position,

// pointer

double

// Stop Loss

sl

Parameters
position
[in] Pointer to CPositionInfo class object.
sl
[in] Stop Loss price.
Returned value
Volume for reverse of the position.

2000-2014, MetaQuotes Software Corp.

3541

Standard Library

CheckClose
Checks conditions to close the opened position.
virtual double CheckClose()

Returned value
true if condition is satisfied, otherwise false.

2000-2014, MetaQuotes Software Corp.

3542

Standard Library

Modules of Trade Signals


The standard delivery of the client terminal includes a set of ready-made modules of trade signals for
"MQL5 Wizard". When creating an Expert Advisor in MQL5 Wizard, you can use any combination of the
modules of trade signals (up to 64). The final decision on a trade operation is made on the basis of
complex analysis of signals obtained from all included modules. The detailed description of the
mechanism of making trade decisions is given below.
The standard delivery includes the following modules of signals:
Signals of the Indicator Accelerator Oscillator
Signals of the Indicator Adaptive Moving Average
Signals of the Indicator Awesome Oscillator
Signals of the Oscillator Bears Power
Signals of the Oscillator Bulls Power
Signals of the Oscillator Commodity Channel Index
Signals of the Oscillator DeMarker
Signals of the Indicator Double Exponential Moving Average
Signals of the Indicator Envelopes
Signals of the Indicator Fractal Adaptive Moving Average
Signals of the Intraday Time Filter
Signals of the Oscillator MACD
Signals of the Indicator Moving Average
Signals of the Indicator Parabolic SAR
Signals of the Oscillator Relative Strength Index
Signals of the Oscillator Relative Vigor Index
Signals of the Oscillator Stochastic
Signals of the Oscillator Triple Exponential Average
Signals of the Indicator Triple Exponential Moving Average
Signals of the Oscillator Williams Percent Range

The Mechanism of Making Trade Decisions on the Basis of Signal


Modules
The mechanism of making trade decisions can be represented as the following list of basic principles:
Each of the modules of signals has its set of market modules (certain combination of prices and
values of an indicator).
Each market model has a significance that may vary with the range of 1 to 100. The higher is the
significance, the stronger the model is.
Each of the models generates a forecast of direction of the price movement.
A forecast of a module is the result of search for embedded models, and it is outputted as a number
within the range of -100 to 100. The sign determines the direction of forecast movement (negative
sign means the price will fall, positive sign means the price will rise). The absolute value

2000-2014, MetaQuotes Software Corp.

3543

Standard Library
corresponds to the strength of the best found model.
The forecast of each module is sent to the final "voting" with a weight coefficient of 0 to 1 specified
in its settings ("Weight").
The result of voting is a number within the range of -100 to 100, where the sign determines
direction of the forecast movement, and the absolute value characterizes the strength of the signal.
It is calculated as the arithmetical mean of weighted forecasts of all the modules of signals.
Each generated Expert Advisor has two adjustable settings threshold levels of opening and closing a
position (ThresholdOpen and ThresholdClose) that can be equal to a value in the range of 0 to 100. If
the strength of final signal exceeds a threshold level, a trade operation that corresponds to the sign of
the signal is performed.

Examples
Consider an Expert Advisor with the following threshold levels: ThresholdOpen=20 and
ThresholdClose=90. Two modules of signals participate in making decisions on trade operations: the
MA module with weight 0.4 and the Stochastic module with weight 0.8. Let's analyze two variants of
obtained trade signals:
Variant 1.
The price crossed the rising MA upwards. This case corresponds to one of the market models
implemented in the MA module. This model implies a rise of price. Its significance is equal to 100. At
the same time, the Stochastic oscillator turned down and formed a divergence with price. This case
corresponds to one of the models implemented in the Stochastic module. This model implies a fall of
price. The weight of this model is 80.
Let's calculate the result of final "voting". The rate obtained from the MA module is calculated as 0.4 *
100 = 40. The value from the Stochastic module is calculated as 0.8 * (-80) = -64. The final value value
is calculated as the arithmetical mean of these two rates: (40 - 64)/2 = -12. The result of voting is the
signal for selling with relative strength equal to 12. The threshold level that is equal to 20 is not
reached. Thus a trade operation is not performed.
Variant 2.
The price crossed the rising MA downwards. This case corresponds to one of the models implemented
in the MA module.This model implies a rise of price. Its significance is equal to 10. At the same time,
the Stochastic oscillator turned down and formed a divergence with price. This case corresponds to
one of the models implemented in the Stochastic module. This model implies a fall of price. The
weight of this model is 80.
Let's calculate the result of final "voting". The rate obtained from the MA module is calculated as 0.4 *
10 = 4. The value from the Stochastic module is calculated as 0.8 * (-80) = -64. The final value is
calculated as the arithmetical mean of these two rates: (4 - 64)/2 = -30. The result of voting is the
signal for selling with relative strength equal to 30. The threshold level that is equal to 20 is reached.
Thus the result is the signal for opening a short position.

2000-2014, MetaQuotes Software Corp.

3544

Standard Library

a) Divergence of the price and the Stochastic oscillator (variants 1 and 2).
b) The price crossed the MA indicator upwards (variant 1).
c) The price crossed the MA indicator downwards (variants 2).

2000-2014, MetaQuotes Software Corp.

3545

Standard Library

Signals of the Indicator Accelerator Oscillator


This module is based on the market models of the indicator Accelerator Oscillator. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The indicator value is above 0 and it rises at the analyzed and at the previous
bars.

The indicator value is below 0 and it rises at the analyzed and at the previous
bars.

For selling

The indicator value is below 0 and it falls at the analyzed and at the previous bars.

2000-2014, MetaQuotes Software Corp.

3546

Standard Library

Signal
Type

Description of Conditions

The indicator value is below 0 and it falls at the analyzed and at the previous bars.

No
objections
to buying

The indicator value grows at the analyzed bar.

No
objections
to selling

The indicator value falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
This module has the following adjustable parameters:

2000-2014, MetaQuotes Software Corp.

3547

Standard Library

Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

2000-2014, MetaQuotes Software Corp.

3548

Standard Library

Signals of the Indicator Adaptive Moving Average


This module is based on the market models of the indicator Adaptive Moving Average. The mechanism
of making trade decisions based on signals obtained from the modules is described in a separate
section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The price has crossed the indicator downwards (the Open price of the analyzed bar
is above the indicator and the Close price is below the indicator) and the indicator
rises (weak signal).

Moving Average crossover. The price has crossed the indicator upwards (the Open
price of the analyzed bar is below the indicator and the Close price is above the
indicator) and the indicator rises (strong signal).

2000-2014, MetaQuotes Software Corp.

3549

Standard Library

Signal
Type

Description of Conditions

The lower shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is above the indicator, and the Low price is below the
indicator) and the indicator rises (weak signal).

For selling

The price has crossed the indicator upwards (the Open price of the analyzed bar is
below the indicator and the Close price is above the indicator) and the indicator falls
(weak signal).

Moving Average crossover. The price has crossed the indicator downwards (the
Open price of the analyzed bar is above the indicator and the Close price is below
the indicator) and the indicator falls (strong signal).

2000-2014, MetaQuotes Software Corp.

3550

Standard Library

Signal
Type

Description of Conditions

The upper shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is below the indicator, and the High price is above the
indicator) and the indicator falls (weak signal).

No
objections
to buying

The prices is above the indicator.

No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3551

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of averaging of the indicator.

Shift

Shift of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

2000-2014, MetaQuotes Software Corp.

3552

Standard Library

Signals of the Indicator Awesome Oscillator


This module of signals is based on the market models of the indicator Awesome Oscillator. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Saucer value of the indicator at the analyzed bar rises, and it fell at the
previous bars; at that, both values are above 0.

Crossing the zero line value of the indicator is above 0 at the analyzed bar, and
it is below 0 at the previous bar.

Divergence the first analyzed bottom of the indicator is shallower than the
previous one, and the corresponding price valley is deeper than the previous one.

2000-2014, MetaQuotes Software Corp.

3553

Standard Library

Signal
Type

Description of Conditions

In addition, the indicator must not rise above the zero level.

For selling

Saucer value of the indicator at the analyzed bar falls, and it rose at the
previous bars; at that, both values are below 0.

Crossing the zero line value of the indicator is below 0 at the analyzed bar, and
it is above 0 at the previous bar.

2000-2014, MetaQuotes Software Corp.

3554

Standard Library

Signal
Type

Description of Conditions

Divergence the first analyzed peak of the indicator is lower than the previous
one, and the corresponding price peak is higher than the previous one. In addition,
the indicator must not falls below the zero level.

No
objections
to buying

The indicator value grows at the analyzed bar.

No
objections
to selling

The indicator value falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3555

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

2000-2014, MetaQuotes Software Corp.

3556

Standard Library

Signals of the Oscillator Bears Power


This module of signals is based on the market models of the oscillator Bears Power. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse the oscillator turned upwards and its value at the analyzed bar is below
0.

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.
In addition, the oscillator must not rise above the zero level.

For selling

No signals for selling.

2000-2014, MetaQuotes Software Corp.

3557

Standard Library

Signal
Type

Description of Conditions

No
objections
to buying

Value of the oscillator is less than 0.

No
objections
to selling

No signals.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodBears

Period of calculation of the oscillator.

2000-2014, MetaQuotes Software Corp.

3558

Standard Library

Signals of the Oscillator Bulls Power


This module of signals is based on the market models of the oscillator Bulls Power. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type

Description of Conditions

For buying

No signals for buying.

For selling

Reverse the oscillator turned downwards and its value at the analyzed bar is
above 0.

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak. In
addition, the oscillator must not fall below the zero level.

2000-2014, MetaQuotes Software Corp.

3559

Standard Library

Signal
Type

Description of Conditions

No
objections
to buying

No signals.

No
objections
to selling

Value of the oscillator is greater than 0.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodBulls

Period of calculation of the oscillator.

2000-2014, MetaQuotes Software Corp.

3560

Standard Library

Signals of the Oscillator Commodity Channel Index


This module of signals is based on the market models of the oscillator Commodity Channel Index. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse behind the level of overselling the oscillator turned upwards and its
value at the analyzed bar is behind the level of overselling (default value is -100).

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.

Double divergence the oscillator form three consequent bottoms, each of them
is higher than the previous one; and the price formed three corresponding

2000-2014, MetaQuotes Software Corp.

3561

Standard Library

Signal
Type

Description of Conditions

bottoms, and each of them is lower than the previous one.

For selling

Reverse behind the overbought level the oscillator turned downwards and its
value at the analyzed bar is behind the overbought level (default value is 100).

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

2000-2014, MetaQuotes Software Corp.

3562

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator formed three consequent peaks, each of them
is lower than the previous one; and the price formed three corresponding peaks,
each of them is higher than the previous one.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3563

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodCCI

Period of calculation of the oscillator.

Applied

A price series used for calculation of the


oscillator.

2000-2014, MetaQuotes Software Corp.

3564

Standard Library

Signals of the Oscillator DeMarker


This module of signals is based on the market models of the oscillator DeMarker. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse behind the oversold level the oscillator turned upwards and its value
at the analyzed bar is behind the oversold level (default value is 0.3).

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.

Double divergence the oscillator form three consequent bottoms, each of them
is higher than the previous one; and the price formed three corresponding
bottoms, and each of them is lower than the previous one.

2000-2014, MetaQuotes Software Corp.

3565

Standard Library

Signal
Type

For selling

Description of Conditions

Reverse behind the overbought level the oscillator turned downwards and its
value at the analyzed bar is behind the overbought level (default value is 0.7).

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

2000-2014, MetaQuotes Software Corp.

3566

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator formed three consequent peaks, each of them
is lower than the previous one; and the price formed three corresponding peaks,
each of them is higher than the previous one.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3567

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodDeM

Period of calculation of the oscillator.

2000-2014, MetaQuotes Software Corp.

3568

Standard Library

Signals of the Indicator Double Exponential Moving Average


This module is based on the market models of the indicator Double Exponential Moving Average. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The price has crossed the indicator downwards (the Open price of the analyzed bar is
above the indicator and the Close price is below the indicator) and the indicator
rises (weak signal).

Moving Average crossover. The price has crossed the indicator upwards (the Open
price of the analyzed bar is below the indicator and the Close price is above the
indicator) and the indicator rises (strong signal).

2000-2014, MetaQuotes Software Corp.

3569

Standard Library

Signal
Type

Description of Conditions

The lower shadow of the bar has crossed the indicator (the Open and Close prices of
the analyzed bar is above the indicator, and the Low price is below the indicator)
and the indicator rises (weak signal).

For selling

The price has crossed the indicator upwards (the Open price of the analyzed bar is
below the indicator and the Close price is above the indicator) and the indicator falls
(weak signal).

Moving Average crossover. The price has crossed the indicator downwards (the
Open price of the analyzed bar is above the indicator and the Close price is below
the indicator) and the indicator falls (strong signal).

2000-2014, MetaQuotes Software Corp.

3570

Standard Library

Signal
Type

Description of Conditions

The upper shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is below the indicator, and the High price is above the
indicator) and the indicator falls (weak signal).

No
objections
to buying

The price is above the indicator.

No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3571

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of averaging of the indicator.

Shift

Shift of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

2000-2014, MetaQuotes Software Corp.

3572

Standard Library

Signals of the Indicator Envelopes


This module of signals is based on the market models of the indicator Envelopes. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For
buying

Description of Conditions

The price is near the lower line of the indicator at the analyzed bar.

The price crossed the upper line of the indicator at the analyzed bar.

For
selling

The price is near the upper line of the indicator at the analyzed bar.

2000-2014, MetaQuotes Software Corp.

3573

Standard Library

Signal
Type

Description of Conditions

The price crossed the lower line of the indicator at the analyzed bar.

No
objection
s
to
buying

No signals.

No
objection
s
to
selling

No signals.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

2000-2014, MetaQuotes Software Corp.

3574

Standard Library

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of calculation of the indicator.

Shift

Shift of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

Deviation

Deviation of the envelope borders from the


center line (MA) in percentage terms.

2000-2014, MetaQuotes Software Corp.

3575

Standard Library

Signals of the Indicator Fractal Adaptive Moving Average


This module of signals is based on the market models of the indicator Fractal Adaptive Moving
Average. The mechanism of making trade decisions based on signals obtained from the modules is
described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The price has crossed the indicator downwards (the Open price of the analyzed bar
is above the indicator and the Close price is below the indicator) and the indicator
rises (weak signal).

Moving Average crossover. The price has crossed the indicator upwards (the Open
price of the analyzed bar is below the indicator and the Close price is above the
indicator) and the indicator rises (strong signal).

2000-2014, MetaQuotes Software Corp.

3576

Standard Library

Signal
Type

Description of Conditions

The lower shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is above the indicator, and the Low price is below the indicator)
and the indicator rises (weak signal).

For selling

The price has crossed the indicator upwards (the Open price of the analyzed bar is
below the indicator and the Close price is above the indicator) and the indicator falls
(weak signal).

Moving Average crossover. The price has crossed the indicator downwards (the
Open price of the analyzed bar is above the indicator and the Close price is below
the indicator) and the indicator falls (strong signal).

2000-2014, MetaQuotes Software Corp.

3577

Standard Library

Signal
Type

Description of Conditions

The upper shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is below the indicator, and the High price is above the
indicator) and the indicator falls (weak signal).

No
objections
to buying

The prices is above the indicator.

No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3578

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of averaging of the indicator.

Shift

Shift of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

2000-2014, MetaQuotes Software Corp.

3579

Standard Library

Signals of the Intraday Time Filter


This module is based on the assumption that the efficiency of market models changes in time. Using
this module, you can filter signals received from the other modules by hour and days of week. It allows
increasing the quality of generated signals due to cutting off the unfavorable time periods. The
mechanism of making trade decisions on the basis of signals of the modules is described in a separate
section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal Type

Description of Conditions

For buying

No signals.

For selling

No signals.

No objections to buying

The current date and time meet the specified


parameters.

No objections to selling

The current date and time meet the specified


parameters.

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

GoodHourOfDay

Number of the only hour of day (from 0 to 23)


when trade signals will be enabled. If the value
is -1, the signals will be enabled through the
whole day.

BadHoursOfDay

The bit field. Each bit of this field corresponds


to an hour of day (0 bit - 0 hour, ..., 23 bit 23-rd hour). If the value of a bit is equal to 0,
trade signals will be enabled during the
corresponding hour. If the value of a bit is
equal to 1, trade signals will be disabled during
the corresponding hour. A specified number is
represented as a binary number and is used as
bit mask.
Disabled hours have higher priority than the
enabled ones.

GoodDayOfWeek

Number of the only day of week (from 0 to 6,


where 0 is Sunday), when trade signals will be

2000-2014, MetaQuotes Software Corp.

3580

Standard Library

Parameter

Description
enabled. If the value is -1, the signals will be
enabled on any day.

BadDaysOfWeek

The bit field. Each bit of this field corresponds


to a day of week (0 bit - Sunday, ..., 6 bit Saturday). If the value of a bit is equal to 0,
trade signals will be enabled during the
corresponding day. If the value of a bit is equal
to 1, trade signals will be disabled during the
corresponding day. A specified number is
represented as a binary number and is used as
bit mask.
Disabled days have higher priority than the
enabled ones.

2000-2014, MetaQuotes Software Corp.

3581

Standard Library

Signals of the Oscillator MACD


This module of signals is based on the market models of the oscillator MACD. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse the oscillator turned upwards (the oscillator rises at the analyzed bar
and falls at the previous one).

Crossover of the main and signal line the main line is above the signal line at
the analyzed bar and below the signal line at the previous one.

Crossing the zero level the main line is above the zero level at the analyzed bar
and below the zero level at the previous one.

2000-2014, MetaQuotes Software Corp.

3582

Standard Library

Signal
Type

Description of Conditions

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.

Double divergence the oscillator form three consequent bottoms, each of them
is higher than the previous one; and the price formed three corresponding
bottoms, and each of them is lower than the previous one.

2000-2014, MetaQuotes Software Corp.

3583

Standard Library

Signal
Type

For selling

Description of Conditions

Reverse the oscillator turned downwards (the oscillator falls at the analyzed bar
and rises at the previous one).

Crossover of the main and signal line the main line is below the signal line at
the analyzed bar and above the signal line at the previous one.

2000-2014, MetaQuotes Software Corp.

3584

Standard Library

Signal
Type

Description of Conditions

Crossing the zero level the main line is below the zero level at the analyzed bar
and above the zero level at the previous one.

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

2000-2014, MetaQuotes Software Corp.

3585

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator formed three consequent peaks, each of them
is lower than the previous one; and the price formed three corresponding peaks,
each of them is higher than the previous one.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3586

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodFast

Period of calculation of the fast EMA.

PeriodSlow

Period of calculation of the slow EMA.

PeriodSignal

Period of smoothing.

Applied

A price series used for calculation of the


oscillator.

2000-2014, MetaQuotes Software Corp.

3587

Standard Library

Signals of the Indicator Moving Average


This module of signals is based on the market models of the indicator Moving Average. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The price has crossed the indicator downwards (the Open price of the analyzed bar
is above the indicator and the Close price is below the indicator) and the indicator
rises (weak signal).

Moving Average crossover. The price has crossed the indicator upwards (the Open
price of the analyzed bar is below the indicator and the Close price is above the
indicator) and the indicator rises (strong signal).

2000-2014, MetaQuotes Software Corp.

3588

Standard Library

Signal
Type

Description of Conditions

The lower shadow of the bar has crossed the indicator (the Open and Close prices of
the analyzed bar is above the indicator, and the Low price is below the indicator)
and the indicator rises (weak signal).

For selling

The price has crossed the indicator upwards (the Open price of the analyzed bar is
below the indicator and the Close price is above the indicator) and the indicator falls
(weak signal).

Moving Average crossover. The price has crossed the indicator downwards (the
Open price of the analyzed bar is above the indicator and the Close price is below
the indicator) and the indicator falls (strong signal).

2000-2014, MetaQuotes Software Corp.

3589

Standard Library

Signal
Type

Description of Conditions

The upper shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is below the indicator, and the High price is above the
indicator) and the indicator falls (weak signal).

No
objections
to buying

The prices is above the indicator.

No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3590

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of averaging of the indicator.

Shift

Shift of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

2000-2014, MetaQuotes Software Corp.

3591

Standard Library

Signals of the indicator Parabolic SAR


This module of signals is based on the market models of the indicator Parabolic SAR. The mechanism
of making trade decisions based on signals obtained from the modules is described in a separate
section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type

Description of Conditions

For buying

Reverse the indicator is below the price at the analyzed bar and above the price at
the previous one.

For selling

Reverse the indicator is above the price at the analyzed bar and below the price at
the previous one.

No
objections

The prices is above the indicator.

2000-2014, MetaQuotes Software Corp.

3592

Standard Library

Signal
Type

Description of Conditions

to buying
No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

Step

The increment of speed of the indicator.

Maximum

Maximum rate of the speed of convergence of


the indicator with the price.

2000-2014, MetaQuotes Software Corp.

3593

Standard Library

Signals of the Oscillator Relative Strength Index


This module of signals is based on the market models of the oscillator Relative Strength Index. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse behind the oversold level the oscillator turned upwards and its value
at the analyzed bar is behind theo oversold level (default value is 30).

Failed swing the oscillator rises higher than the previous peak at the analyzed
bar.

Divergence the first analyzed bottom of the oscillator is lower than the previous
one, and the corresponding price bottom is lower than the previous one.

2000-2014, MetaQuotes Software Corp.

3594

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator form three consequent bottoms, each of them
is higher than the previous one; and the price formed three corresponding
bottoms, and each of them is lower than the previous one.

Head/Shoulders the oscillator formed three consequent bottoms, and the mid
one is lower than the others.

2000-2014, MetaQuotes Software Corp.

3595

Standard Library

Signal
Type

For selling

Description of Conditions

Reverse behind the overbought level the oscillator turned downwards and its
value at the analyzed bar is behind the overbought level (default value is 70).

Failed swing the oscillator falls lower than the previous bottom at the analyzed
bar.

2000-2014, MetaQuotes Software Corp.

3596

Standard Library

Signal
Type

Description of Conditions

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

Double divergence the oscillator formed three consequent peaks, each of them
is lower than the previous one; and the price formed three corresponding peaks,
each of them is higher than the previous one.

2000-2014, MetaQuotes Software Corp.

3597

Standard Library

Signal
Type

Description of Conditions

Head/Shoulders the oscillator formed three consequent peaks, and the mid one
is higher than the others.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters

2000-2014, MetaQuotes Software Corp.

3598

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodRSI

Period of calculation of the oscillator.

Applied

A price series used for calculation of the


oscillator.

2000-2014, MetaQuotes Software Corp.

3599

Standard Library

Signals of the Oscillator Relative Vigor Index


This module of signals is based on the market models of the oscillator Relative Vigor Index. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type

Description of Conditions

For buying

Crossing of the main and signal line the main line is above the signal line at the
analyzed bar and below the signal line at the previous one.

For selling

Crossing of the main and signal line the main line is below the signal line at the
analyzed bar and above the signal line at the previous one.

No
objections

Value of the oscillator grows at the analyzed bar.

2000-2014, MetaQuotes Software Corp.

3600

Standard Library

Signal
Type

Description of Conditions

to buying
No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodRVI

Period of calculation of the oscillator.

2000-2014, MetaQuotes Software Corp.

3601

Standard Library

Signals of the Oscillator Stochastic


This module of signals based on the market models of the oscillator Stochastic. The mechanism of
making trade decisions based on signals obtained from the modules is described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse the oscillator turned upwards (the oscillator rises at the analyzed bar
and falls at the previous one).

Crossing of the main and signal line the main line is above the signal line at
the analyzed bar and below the signal line at the previous one.

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.

2000-2014, MetaQuotes Software Corp.

3602

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator form three consequent bottoms, each of them
is higher than the previous one; and the price formed three corresponding
bottoms, and each of them is lower than the previous one.

For selling

Reverse the oscillator turned downwards (the oscillator falls at the analyzed bar
and rises at the previous one).

2000-2014, MetaQuotes Software Corp.

3603

Standard Library

Signal
Type

Description of Conditions

Crossing of the main and signal line the main line is below the signal line at
the analyzed bar and above the signal line at the previous one.

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

2000-2014, MetaQuotes Software Corp.

3604

Standard Library

Signal
Type

Description of Conditions

Double divergence the oscillator formed three consequent peaks, each of them
is lower than the previous one; and the price formed three corresponding peaks,
each of them is higher than the previous one.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3605

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodK

Period of calculation of the main line of the


oscillator.

PeriodD

Period of calculation of the main line of the


oscillator.

PeriodSlow

Period of slowing.

Applied

A price series used for calculation of the


oscillator.

2000-2014, MetaQuotes Software Corp.

3606

Standard Library

Signals of the Oscillator Triple Exponential Average


This module of signals is based on the market models of the oscillator Triple Exponential Average. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse the oscillator turned upwards (the oscillator rises at the analyzed bar
and falls at the previous one).

Crossing the zero level the main line is above the zero level at the analyzed bar
and below the zero level at the previous one.

Divergence the first analyzed bottom of the oscillator is higher than the

2000-2014, MetaQuotes Software Corp.

3607

Standard Library

Signal
Type

Description of Conditions

previous one, and the corresponding price bottom is lower than the previous one.

For selling

Reverse the oscillator turned downwards (the oscillator falls at the analyzed bar
and rises at the previous one).

Crossing the zero level the main line is below the zero level at the analyzed bar
and above the zero level at the previous one.

2000-2014, MetaQuotes Software Corp.

3608

Standard Library

Signal
Type

Description of Conditions

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters

2000-2014, MetaQuotes Software Corp.

3609

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodTriX

Period of calculation of the oscillator.

Applied

A price series used for calculation of the


oscillator.

2000-2014, MetaQuotes Software Corp.

3610

Standard Library

Signals of the Indicator Triple Exponential Moving Average


This module of signals is based on the market models of the indicator Triple Exponential Moving
Average. The mechanism of making trade decisions based on signals obtained from the modules is
described in a separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

The price has crossed the indicator downwards (the Open price of the analyzed bar
is above the indicator and the Close price is below the indicator) and the indicator
rises (weak signal).

Moving Average crossover. The price has crossed the indicator upwards (the Open
price of the analyzed bar is below the indicator and the Close price is above the
indicator) and the indicator rises (strong signal).

2000-2014, MetaQuotes Software Corp.

3611

Standard Library

Signal
Type

Description of Conditions

The lower shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is above the indicator, and the Low price is below the indicator)
and the indicator rises (weak signal).

For selling

The price has crossed the indicator upwards (the Open price of the analyzed bar is
below the indicator and the Close price is above the indicator) and the indicator falls
(weak signal).

Moving Average crossover. The price has crossed the indicator downwards (the
Open price of the analyzed bar is above the indicator and the Close price is below
the indicator) and the indicator falls (strong signal).

2000-2014, MetaQuotes Software Corp.

3612

Standard Library

Signal
Type

Description of Conditions

The upper shadow of the bar has crossed the indicator (the Open and Close prices
of the analyzed bar is below the indicator, and the High price is above the
indicator) and the indicator falls (weak signal).

No
objections
to buying

The prices is above the indicator.

No
objections
to selling

The price is below the indicator.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).

Adjustable Parameters
2000-2014, MetaQuotes Software Corp.

3613

Standard Library
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodMA

Period of averaging of the indicator.

Shift

Shit of the indicator along the time axis (in


bars).

Method

Method of averaging.

Applied

A price series used for calculation of the


indicator.

2000-2014, MetaQuotes Software Corp.

3614

Standard Library

Signals of the Oscillator Williams Percent Range


This module of signals is based on the market models of the oscillator Williams Percent Range. The
mechanism of making trade decisions based on signals obtained from the modules is described in a
separate section.

Conditions of Generation of Signals


Below you can find the description of conditions when the module passes a signal to an Expert Advisor.
Signal
Type
For buying

Description of Conditions

Reverse behind the oversold level the oscillator turned upwards and its value
at the analyzed bar is behind the oversold level (default value is -20).

Divergence the first analyzed bottom of the oscillator is higher than the
previous one, and the corresponding price bottom is lower than the previous one.

For selling

Reverse behind the overbought level the oscillator turned downwards and its

2000-2014, MetaQuotes Software Corp.

3615

Standard Library

Signal
Type

Description of Conditions

value at the analyzed bar is behind the overbought level (default value is -80).

Divergence the first analyzed peak of the oscillator is lower than the previous
one, and the corresponding price peak is higher than the previous peak.

No
objections
to buying

Value of the oscillator grows at the analyzed bar.

No
objections
to selling

Value of the oscillator falls at the analyzed bar.

Note
Depending on the mode of operation of an Expert Advisor ("Every tick" or "Open prices only") an
analyzed bar is either the current bar (with index 0), or the last formed bar (with index 1).
Remember that the oscillator Williams Percent Range has a reversed scale. Its maximum value is -100,

2000-2014, MetaQuotes Software Corp.

3616

Standard Library
and minimum is 0.

Adjustable Parameters
This module has the following adjustable parameters:
Parameter

Description

Weight

Weight of signal of the module in the interval 0


to 1.

PeriodWPR

Period of calculation of the oscillator.

2000-2014, MetaQuotes Software Corp.

3617

Standard Library

Trailing Stop classes


This section contains technical details of working with trailing stop classes and description of the
relevant components of the MQL5 standard library.
The use of these classes will save time when creating (and testing) of trading strategies.
MQL5 Standard Library (in terms of trading strategies) is placed in the terminal directory, in the
Include\Expert\Trailing folder.
Class

Description

CTrailingFixedPips

This class implements Trailing Stop algorithm,


based on fixed points

CTrailingMA

This class implements Trailing Stop algorithm,


based on the values of Moving Average
indicator

CTrailingNone

A gag class, it doesn't uses any Trailing Stop


algorithm

CTrailingPSAR

This class implements Trailing Stop algorithm,


based on the values of Parabolic SAR indicator

2000-2014, MetaQuotes Software Corp.

3618

Standard Library

CTrailingFixedPips
CTrailingFixedPips is a class with implementation of Trailing Stop algorithm, based on fixed points
trailing.
If position has Stop Loss price, it checks the minimal allowed Stop Loss distance to the current price.
If its value is lower, that Stop Loss level, it suggests to set new Stop Loss price. For this case if
position has Take Profit price, it suggests to set new Take Profit price.
If Expert Advisor has been initialized with the flag every_tick=false, it will perform all operations
(trading, trailing, etc) only at the new bar. For this case Take profit level can be used. It will allow you
to close opened position at Take Profit price before the new bar will be completed.

Description
CTrailingFixedPips implements the Trailing Stop algorithm, based on positions trailing with the fixed
points.

Declaration
class CTrailingFixedPips: public CExpertTrailing

Title
#include <Expert\Trailing\CTrailingFixedPips.mqh>

Class Methods
Initialization
StopLevel

Sets the value of Stop Loss level

ProfitLevel

Sets the value of Take Profit level

virtual ValidationSettings

Checks the settings

Check Trailing Methods


virtual CheckTrailingStopLong

Check Trailing Stop conditions of long position

virtual CheckTrailingStopShort

Check Trailing Stop conditions of short position

2000-2014, MetaQuotes Software Corp.

3619

Standard Library

StopLevel
Sets the value Stop Loss level (in points).
void StopLevel(
int stop_level

// Stop Loss level

Parameters
stop_loss
[in] The value of Stop Loss level (in conventional 2/4-digit points).
Note
If Stop Loss level is equal to 0, the Trailing Stop is not used.

2000-2014, MetaQuotes Software Corp.

3620

Standard Library

ProfitLevel
Sets the value of Take Profit level (in points).
void ProfitLevel(
int profit_level

// Take profit level

Parameters
profit_level
[in] The value of Take Profit level (in conventional 2/4-digit points).
Note
If profit level is equal to 0, the Trailing Stop is not used.

2000-2014, MetaQuotes Software Corp.

3621

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
The function checks Take Profit and Stop Loss levels. The correct values are 0 and values, greater
than minimal stop for stop orders for the symbol.

2000-2014, MetaQuotes Software Corp.

3622

Standard Library

CheckTrailingStopLong
Checks Trailing Stop conditions of long position.
virtual bool CheckTrailingStopLong(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
If Stop Loss level is equal to 0, the Trailing Stop is not used. If position already has Stop Loss price,
its value is assumed as a base price, otherwise the position open price is assumed as a base price.
If the current Bid price is higher than base price+stop loss level, it suggests to set new Stop Loss
price. In this case, If position already has Take Profit price, it suggests to set new Take Profit price
equal to Bid price+take proft level.

2000-2014, MetaQuotes Software Corp.

3623

Standard Library

CheckTrailingStopShort
Checks Trailing Stop conditions of short position.
virtual bool CheckTrailingStopShort(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
If Stop Loss level is equal to 0, the Trailing Stop is not used. If position already has Stop Loss price,
its value is assumed as a base price, otherwise the position open price is assumed as a base price.
If the current Ask price is lower than base price-stop loss level, it suggests to set new Stop Loss
price. In this case, If position already has Take Profit price, it suggests to set new Take Profit price
equal to Ask price-take proft level.

2000-2014, MetaQuotes Software Corp.

3624

Standard Library

CTrailingMA
CTrailingMA is a class with implementation of Trailing Stop algorithm, based on the values of moving
average indicator.

Description
CTrailingMA class implements Trailing Stop algorithm, based on the values of moving average
indicator of the previous (completed) bar.

Declaration
class CTrailingMA: public CExpertTrailing

Title
#include <Expert\Trailing\TrailingMA.mqh>

Class Methods
Initialization
Period

Sets period of moving average

Shift

Sets shift of moving average

Method

Sets smoothing method of moving average

Applied

Sets applied price of moving average

virtual InitIndicators

Initializes indicators and time series

virtual ValidationSettings

Checks the settings

Check Trailing Methods


virtual CheckTrailingStopLong

Check Trailing Stop conditions of long position

virtual CheckTrailingStopShort

Check Trailing Stop conditions of short position

2000-2014, MetaQuotes Software Corp.

3625

Standard Library

Period
Sets period of moving average.
void Period(
int period

// Smoothing period

Parameters
period
[in] Period of moving average.

2000-2014, MetaQuotes Software Corp.

3626

Standard Library

Shift
Sets shift of moving average.
void Shift(
int shift

// Shift

Parameters
shift
[in] Shift of moving average.

2000-2014, MetaQuotes Software Corp.

3627

Standard Library

Method
Sets smoothing method of moving average.
void Method(
ENUM_MA_METHOD method

// Smoothing method

Parameters
method
[in] Smoothing method of moving average indicator.

2000-2014, MetaQuotes Software Corp.

3628

Standard Library

Applied
Sets applied price of moving average.
void Applied(
ENUM_APPLIED_PRICE applied

// Applied price

Parameters
applied
[in] Applied price of moving average.

2000-2014, MetaQuotes Software Corp.

3629

Standard Library

InitIndicators
Initializes indicators and time series.
virtual bool InitIndicators(
CIndicators* indicators

// CIndicators collection pointer

Parameters
indicators
[in] Pointer to indicators and time series collection (CExpert class member).
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3630

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
The function checks the period of moving average, the correct values are positive.

2000-2014, MetaQuotes Software Corp.

3631

Standard Library

CheckTrailingStopLong
Checks Trailing Stop conditions of long position.
virtual bool CheckTrailingStopLong(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The first it calculates the maximal allowed Stop Loss price, closest to the current price and
calculates Stop Loss price using the values of moving average indicator of the previous (completed)
bar.
If position already has Stop Loss price, its value is assumed as a base price, otherwise the base
price is the open price of the position.
If the calculated Stop Loss price is higher than base price and lower than maximal allowed Stop Loss
price, it suggests to set new Stop Loss price.

2000-2014, MetaQuotes Software Corp.

3632

Standard Library

CheckTrailingStopShort
Checks Trailing Stop conditions of short position.
virtual bool CheckTrailingStopShort(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The first it calculates the minimal allowed Stop Loss price, closest to the current price and calculates
Stop Loss price using the values of moving average indicator of the previous (completed) bar.
If position already has Stop Loss price, its value is assumed as a base price, otherwise the base
price is the open price of the position.
If the calculated Stop Loss price is higher than base price and lower than minimal allowed Stop Loss
price, it suggests to set new Stop Loss price.

2000-2014, MetaQuotes Software Corp.

3633

Standard Library

CTrailingNone
CTrailingNone is a gag class. This class should be used at initialization of Trailng object if your
strategy doesn't use Trailing Stop.

Description
CTrailingNone class doesn't implement any Trailing Stop algorithms. The methods of checking Trailing
Stop conditions always return false.

Declaration
class CTrailingNone: public CExpertTrailing

Title
#include <Expert\Trailing\TrailingNone.mqh>

Class Methods
Check Trailing Methods
virtual CheckTrailingStopLong

A gag method for check Trailing Stop conditions


of long position

virtual CheckTrailingStopShort

A gag method for check Trailing Stop conditions


of short position

2000-2014, MetaQuotes Software Corp.

3634

Standard Library

CheckTrailingStopLong
Checks Trailing Stop conditions of long position.
virtual bool CheckTrailingStopLong(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The function always returns false.

2000-2014, MetaQuotes Software Corp.

3635

Standard Library

CheckTrailingStopShort
Checks Trailing Stop conditions of short position.
virtual bool CheckTrailingStopShort(
CPositionInfo* position,

// CPositionInfo object pointer

double&

sl,

// Stop Loss price

double&

tp

// Take Profit price

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The function always returns false.

2000-2014, MetaQuotes Software Corp.

3636

Standard Library

CTrailingPSAR
CTrailingPSAR is a class with implementation of Trailing Stop algorithm, based on the values of
Parabolic SAR indicator.

Description
CTrailingPSAR class implements the Trailing Stop algorithm, based on the values of Parabolic SAR
indicator of the previous (completed) bar.

Declaration
class CTrailingPSAR: public CExpertTrailing

Title
#include <Expert\Trailing\TrailingParabolicSAR.mqh>

Class Methods
Initialization
Step

Sets the value of step of Parabolic SAR


indicator

Maximum

Sets the value of maximum of Parabolic SAR


indicator

virtual InitIndicators

Initializes indicators and time series

Check Trailing Methods


virtual CheckTrailingStopLong

Check conditions of trailing stop of long


position

virtual CheckTrailingStopShort

Check conditions of trailing stop of short


position

2000-2014, MetaQuotes Software Corp.

3637

Standard Library

Step
Sets the value of step of Parabolic SAR indicator.
void Step(
double step

// Step

Parameters
step
[in] The value of Step of Parabolic SAR indicator.

2000-2014, MetaQuotes Software Corp.

3638

Standard Library

Maximum
Sets the value of maximum of Parabolic SAR indicator.
void Maximum(
double maximum

// Maximum

Parameters
maximum
[in] The value of maximum of Parabolic SAR indicator.

2000-2014, MetaQuotes Software Corp.

3639

Standard Library

InitIndicators
Initializes indicators and time series.
virtual bool InitIndicators(
CIndicators* indicators

// CIndicators collection pointer

Parameters
indicators
[in] Pointer to indicators and time series collection (CExpert class member).
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3640

Standard Library

CheckTrailingStopLong
Checks Trailing Stop conditions of long position.
virtual bool CheckTrailingStopLong(
CPositionInfo* position,

// Pointer

double&

sl,

// Link

double&

tp

// Link

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The first it calculates the maximal allowed Stop Loss price, closest to the current price and
calculates Stop Loss price using the values of Parabolic SAR indicator of the previous (completed)
bar.
If position already has Stop Loss price, its value is assumed as a base price, otherwise the position
open price is assumed as a base price.
If the calculated Stop Loss price is higher than base price and lower than maximal allowed Stop Loss
price, it suggests to set new Stop Loss price.

2000-2014, MetaQuotes Software Corp.

3641

Standard Library

CheckTrailingStopShort
Checks Trailing Stop conditions of short position.
virtual bool CheckTrailingStopShort(
CPositionInfo* position,

// Pointer

double&

sl,

// Link

double&

tp

// Link

Parameters
position
[in] Pointer to CPositionInfo object.
sl
[in][out] Variable for Stop Loss price.
tp
[in][out] Variable for Take Profit price.
Returned value
true if conditions are satisfied, otherwise false.
Note
The first it calculates the minimal allowed Stop Loss price, closest to the current price and calculates
Stop Loss price using the values of Parabolic SAR indicator of the previous (completed) bar.
If position already has Stop Loss price, its value is assumed as a base price, otherwise the position
open price is assumed as a base price.
If the calculated Stop Loss price is higher than base price and lower than minimal allowed Stop Loss
price, it suggests to set new Stop Loss price.

2000-2014, MetaQuotes Software Corp.

3642

Standard Library

Money Management classes


This section contains technical details of working with money and risk management classes and
description of the relevant components of the MQL5 standard library.
The use of these classes will save time when creating (and testing) of trading strategies.
MQL5 Standard Library (in terms of money and risk management classes) is placed in the terminal
directory, in the Include\Expert\Money\ folder.
Class

Description

CMoneyFixedLot

This class implements money management


algorithm, based on trading with predefined
fixed lot size.

CMoneyFixedMargin

This class implements money management


algorithm, based on trading with predefined
fixed margin.

CMoneyFixedRisk

This class implements money management


algorithm, based on trading with predefined
risk.

CMoneyNone

This class implements money management


algorithm, based on trading with minimal
allowed lot size.

CMoneySizeOptimized

This class implements money management


algorithm, based on trading with variable lot
size, depending on results of the previous
deals.

2000-2014, MetaQuotes Software Corp.

3643

Standard Library

CMoneyFixedLot
CMoneyFixedLot is the class money management algorithm, based on trading with predefined fixed lot
size.

Description
CMoneyFixedLot implements money management algorithm, based on trading with predefined fixed lot
size.

Declaration
class CMoneyFixedLot: public CExpertMoney

Title
#include <Expert\Money\MoneyFixedLot.mqh>

Class Methods
Initialization
Lots

Sets trading volume

virtual ValidationSettings

Checks the settings

Money and Risk Management Methods


virtual CheckOpenLong

Gets trade volume for long position

virtual CheckOpenShort

Gets trade volume for short position

2000-2014, MetaQuotes Software Corp.

3644

Standard Library

Lots
Sets trading volume (in lots).
void Lots(
double lots

// Lots

Parameters
lots
[in] Trading volume (in lots).

2000-2014, MetaQuotes Software Corp.

3645

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
Checks the specified trading volume for correctness.

2000-2014, MetaQuotes Software Corp.

3646

Standard Library

CheckOpenLong
Gets trade volume for long position.
virtual double CheckOpenLong(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function always returns the fixed trade volume, defined by Lots method.

2000-2014, MetaQuotes Software Corp.

3647

Standard Library

CheckOpenShort
Gets trade volume for short position.
virtual double CheckOpenShort(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for short position.
Note
The function always returns the fixed trade volume, defined by Lots method.

2000-2014, MetaQuotes Software Corp.

3648

Standard Library

CMoneyFixedMargin
CMoneyFixedMargin is the class money management algorithm, based on trading with predefined fixed
margin.

Description
CMoneyFixedMargin implements money management algorithm, based on trading with predefined
fixed margin.

Declaration
class CMoneyFixedMargin: public CExpertMoney

Title
#include <Expert\Money\MoneyFixedMargin.mqh>

Class Methods
Money and Risk Management Methods
virtual CheckOpenLong

Gets trade volume for long position

virtual CheckOpenShort

Gets trade volume for short position

2000-2014, MetaQuotes Software Corp.

3649

Standard Library

CheckOpenLong
Gets trade volume for long position.
virtual double CheckOpenLong(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function returns trade volume for long position, it uses the fixed margin. The margin is defined
by Percent parameter of CExpertMoney base class.

2000-2014, MetaQuotes Software Corp.

3650

Standard Library

CheckOpenShort
Gets trade volume for short position.
virtual double CheckOpenShort(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for short position.
Note
The function returns trade volume for short position, it uses the fixed margin. The margin is
defined by Percent parameter of CExpertMoney base class.

2000-2014, MetaQuotes Software Corp.

3651

Standard Library

CMoneyFixedRisk
CMoneyFixedRisk is a class with implementation of money management algorithm with fixed
predefined risk.

Description
CMoneyFixedRisk class implements the money management algorithm with fixed predefined risk.

Declaration
class CMoneyFixedRisk: public CExpertMoney

Title
#include <Expert\Money\MoneyFixedRisk.mqh>

Class Methods
Money and Risk Management Methods
virtual CheckOpenLong

Gets trade volume for long position

virtual CheckOpenShort

Gets trade volume for short position

2000-2014, MetaQuotes Software Corp.

3652

Standard Library

CheckOpenLong
Gets trade volume for long position.
virtual double CheckOpenLong(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function returns trade volume for long position, it uses the fixed risk. The risk is defined by
Percent parameter of CExpertMoney base class.

2000-2014, MetaQuotes Software Corp.

3653

Standard Library

CheckOpenShort
Gets trade volume for short position.
virtual double CheckOpenShort(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for short position.
Note
The function returns trade volume for short position, it uses the fixed risk. The risk is defined by
Percent parameter of CExpertMoney base class.

2000-2014, MetaQuotes Software Corp.

3654

Standard Library

CMoneyNone
CMoneyNone is a class with implementation of trading algorithm with minimal allowed lot.

Description
CMoneyNone class implements trading with minimal allowed lot.

Declaration
class CMoneyNone: public CExpertMoney

Title
#include <Expert\Money\MoneyNone.mqh>

Class Methods
Initialization
virtual ValidationSettings

Checks the settings

Money and Risk Management Methods


virtual CheckOpenLong

Gets trade volume for long position

virtual CheckOpenShort

Gets trade volume for short position

2000-2014, MetaQuotes Software Corp.

3655

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
The function always returns true.

2000-2014, MetaQuotes Software Corp.

3656

Standard Library

CheckOpenLong
Gets trade volume for long position.
virtual double CheckOpenLong(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function always returns the minimal lot size.

2000-2014, MetaQuotes Software Corp.

3657

Standard Library

CheckOpenShort
Gets trade volume for long position.
virtual double CheckOpenShort(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for short position.
Note
The function always returns the minimal lot size.

2000-2014, MetaQuotes Software Corp.

3658

Standard Library

CMoneySizeOptimized
CMoneySizeOptimized is a class with implementation of money management algorithm, based on
trading with variable lot size, depending on results of the previous deals.

Description
CMoneySizeOptimized implements money management algorithm, based on trading with variable lot
size, depending on results of the previous deals.

Declaration
class CMoneySizeOptimized: public CExpertMoney

Title
#include <Expert\Money\MoneySizeOptimized.mqh>

Class Methods
Initialization
DecreaseFactor

Sets the value of decrease factor

virtual ValidationSettings

Checks the settings

Money and Risk Management Methods


virtual CheckOpenLong

Gets trade volume for long position

virtual CheckOpenShort

Gets trade volume for short position

2000-2014, MetaQuotes Software Corp.

3659

Standard Library

DecreaseFactor
Sets the value of decrease factor.
void DecreaseFactor(
double decrease_factor

// Decrease factor

Parameters
decrease_factor
[in] Decrease factor.
Note
The DecreaseFactor defines the volume decreasing coefficient (compared with the volume of
previous position) for the case of consecutive loss trades.

2000-2014, MetaQuotes Software Corp.

3660

Standard Library

ValidationSettings
Checks the settings.
virtual bool ValidationSettings()

Returned value
true if successful, otherwise false.
Note
If the value of decrease factor is negative, it returns false, otherwise it returns true.

2000-2014, MetaQuotes Software Corp.

3661

Standard Library

CheckOpenLong
Gets trade volume for long position.
virtual double CheckOpenLong(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function returns trade volume for long position, the volume dependent on results of the
previous deals.

2000-2014, MetaQuotes Software Corp.

3662

Standard Library

CheckOpenShort
Gets trade volume for short position.
virtual double CheckOpenShort(
double price,

// Price

double sl

// Stop Loss price

Parameters
price
[in] Price.
sl
[in] Stop Loss price.
Returned value
Trade volume for long position.
Note
The function returns trade volume for short position, the volume dependent on results of the
previous deals.

2000-2014, MetaQuotes Software Corp.

3663

Standard Library

Classes for Creation of Control Panels and Dialogs


This section contains technical details of working with classes for creation of controls panels and
description of the relevant components of the MQL5 standard library.
The use of these classes will save time when creating the control panels for MQL5 programs (Expert
Advisors and indicators).
MQL5 Standard Library (in terms of controls) is placed in the client terminal data folder, in the MQL5
\Include\Controls.
The example of Expert Advisor, which illustrates the working of these classes can be found in MQL5
\Expert\Examples\Controls.
Auxiliary classes

Description

CPoint

Class of the point in Cartesian coordinates

CRect

Class of the rectangular area

Base classes

Description

CWnd

Base class for all controls

CWndObj

Base class for controls and dialogs

CWndContainer

Base class for complex controls (containing


dependent controls)

Simple controls

Description

CLabel

Control, based on "Text label" graphic object

CBmpButton

Control, based on "Bitmap label" graphic object

CButton

Control, based on "Button" graphic object

CEdit

Control, based on "Edit field" graphic object

CPanel

Control, based on "Rectangle label"

CPicture

Control, based on "Bitmap label"

Complex controls

Description

CScroll

Base class of the scroll bar

CScrollV

Vertical scroll bar

CScrollH

Horizontal scroll bar

CWndClient

Base class of the client area with scroll bars

CListView

ListView

CComboBox

ComboBox

2000-2014, MetaQuotes Software Corp.

3664

Standard Library

CCheckBox

CheckBox

CCheckGroup

CheckGroup

CRadioButton

RadioButton

CRadioGroup

RadioGroup

CSpinEdit

SpinEdit

CDialog

Dialog

CAppDialog

Application Dialog

2000-2014, MetaQuotes Software Corp.

3665

Standard Library

CPoint
CPoint is a class of the point.

Description
CPoint is a class of the point in Cartesian coordinates.

Declaration
class CPoint

Title
#include <Controls\Rect.mqh>

Class Methods
Geometry
Move

Sets new coordinates of the point

Shift

Performs the relative shift of the point


coordinates

Additional methods
Format

Gets the point coordinates as string

2000-2014, MetaQuotes Software Corp.

3666

Standard Library

Move
Sets new coordinates of the point.
void Move(
const int x,

// X coordinate

const int y

// Y coordinate

Parameters
x
[in] New X coordinate.
y
[in] New Y coordinate.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3667

Standard Library

Shift
Performs the relative shift of the point coordinates.
void Shift(
const int dx,

// delta X

const int dy

// delta Y

Parameters
dx
[in] Delta X.
dy
[in] Delta Y.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3668

Standard Library

Format
Gets the point coordinates as string.
string Format(
string & fmt,

// format

) const

Parameters
fmt
[in] String with format.
Returned value
String with the point coordinates.

2000-2014, MetaQuotes Software Corp.

3669

Standard Library

CRect
CRect is a class of the rectangular area of the chart.

Description
CRect is a class of the area, it defined by coordinates of the upper-left and lower-right corners of a
rectangle in Cartesian coordinates.

Declaration
class CRect

Title
#include <Controls\Rect.mqh>

Class Methods
Properties
Left

Gets/Sets the X coordinate of the upper-left


corner

Top

Gets/Sets the Y coordinate of the upper-left


corner

Right

Gets/Sets the X coordinate of the lower-right


corner

Bottom

Gets/Sets the Y coordinate of the lower-right


corner

Width

Gets/Sets the width

Height

Gets/Sets the height

SetBound

Sets new coordinates of using CRect class

Move

Sets new coordinates of the CRect class

Shift

Performs the relative shift of the CRect


coordinates

Contains

Checks if the point is inside the CRect class


area

Additional methods
Format

Gets the area coordinates as string

2000-2014, MetaQuotes Software Corp.

3670

Standard Library

Left (Get Method)


Gets the X coordinate of the upper-left corner.
int Left()

Returned value
X coordinate of the upper-left corner.

Left (Set Method)


Sets the X coordinate of the upper-left corner.
void Left(
const int x

// new x coordinate

Parameters
x
[in] New X coordinate of the upper-left corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3671

Standard Library

Top (Get Method)


Gets the Y coordinate of the upper-left corner.
int Top()

Returned value
Y coordinate of the upper-left corner.

Top (Set Method)


Sets the Y coordinate of the upper-left corner.
void Top(
const int y

// y coordinate

Parameters
y
[in] New Y coordinate of the upper-left corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3672

Standard Library

Right (Get Method)


Gets the X coordinate of the lower-right corner.
int Right()

Returned value
X coordinate of the lower-right corner.

Right (Set Method)


Sets the Y coordinate of the lower-right corner.
void Right(
const int x

// x coordinate

Parameters
x
[in] New X coordinate of the lower-right corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3673

Standard Library

Bottom (Get Method)


Gets the Y coordinate of the lower-right corner.
int Bottom()

Returned value
Y coordinate of the lower-right corner.

Bottom (Set Method)


Sets the Y coordinate of the lower-right corner.
void Bottom(
const int y

// y coordinate

Parameters
y
[in] New Y coordinate of the lower-right corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3674

Standard Library

Width (Get Method)


Gets the width of the area.
int Width()

Returned value
Width of the area.

Width (Set Method)


Sets new width of the area.
virtual bool Width(
const int w

// width

Parameters
w
[in] New width.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3675

Standard Library

Height (Get Method)


Gets the height of the area.
int Height()

Returned value
Height of the area.

Height (Set Method)


Sets new height of the area.
virtual bool Height(
const int h

// height

Parameters
h
[in] New height.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3676

Standard Library

SetBound
Sets new coordinates of the area using CRect class coordinates.
void SetBound(
const & CRect rect

// CRect class

Returned value
None.

SetBound
Sets new coordinates of the area.
void SetBound(
const int l

// left

const int t

// topt

const int r

// right

const int b

// bottom

Parameters
l
[in] X coordinate of the upper-left corner.
t
[in] Y coordinate of the upper-left corner.
r
[in] X coordinate of the lower-right corner.
b
[in] Y coordinate of the lower-right corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3677

Standard Library

Move
Sets new coordinates of the CRect class.
void Move(
const int x,

// X coordinate

const int y

// Y coordinate

Parameters
x
[in] New X coordinate.
y
[in] New Y coordinate.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3678

Standard Library

Shift
Performs the relative shift of the CRect class coordinates.
void Shift(
const int dx,

// delta X

const int dy

// delta Y

Parameters
dx
[in] Delta X.
dy
[in] Delta Y.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3679

Standard Library

Contains
Checks if the point is inside the CRect class area.
bool Contains(
const int x,

// X coordinate

const int y

// Y coordinate

Parameters
x
[in] X coordinate.
y
[in] Y coordinate.
Returned value
true, if the point is inside the area (including borders), otherwise - false.

2000-2014, MetaQuotes Software Corp.

3680

Standard Library

Format
Gets the area coordinates as string.
string Format(
string & fmt,

// format

) const

Parameters
fmt
[in] String with format.
Returned value
String with the area coordinates.

2000-2014, MetaQuotes Software Corp.

3681

Standard Library

CWnd
CWnd is a base class for all controls, included in the MQL5 Standard Library.

Description
CWnd class is the implementation of the base control class.

Declaration
class CWnd : public CObject

Title
#include <Controls\Wnd.mqh>

Class Methods
Create and destroy
Create

Creates control

Destroy

Destroys control

Chart event handlers


OnEvent

Event handler of all chart events

OnMouseEvent

Event
handler
for
CHARTEVENT_MOUSE_MOVE event

the

Name
Name

Gets control name

Access to container
ControlsTotal

Gets the number of controls in the container

Control

Gets the control by index

ControlFind

Gets the control by ID

Geometry
Rect

Gets the pointer to the CRect class object

Left

Gets/Sets the X-coordinate of the upper-left


corner

Top

Gets/Sets the Y-coordinate of the upper-left


corner

Right

Gets/Sets the X-coordinate of the lower-right


corner

Bottom

Gets/Sets the Y-coordinate of the lower-right


corner

2000-2014, MetaQuotes Software Corp.

3682

Standard Library

Width

Gets/Sets the width

Height

Gets/Sets the height

Move

Sets new coordinates of the control

Shift

Performs the relative shift of the control


coordinates

Resize

Sets new width/height of the control

Contains

Checks if the point/control is inside the control


area

Align
Alignment

Sets alignment properties of the control

Align

Performs control alignment

Identification
Id

Gets/Sets the control ID

State
IsEnabled

Gets a value indicating whether the control is


enabled

Enable

Sets a value indicating whether the control is


enabled

Disable

Disables the control

IsVisible

Checks the visibility flag

Visible

Sets the visibility flag

Show

Shows the control

Hide

Hides the control

IsActive

Checks the control activity

Activate

Activates the control

Deactivate

Deactivates the control

State flags
StateFlags

Gets/Sets the control state flags

StateFlagsSet

Sets the control state flags

StateFlagsReset

Resets the control state flags

Properties flags
PropFlags

Gets/Sets the control properties flags

PropFlagsSet

Sets the control properties flags

PropFlagsReset

Resets the control properties flags

2000-2014, MetaQuotes Software Corp.

3683

Standard Library

Mouse operations
MouseX

Gets/Saves the mouse X coordinate

MouseY

Gets/Saves the mouse Y coordinate

MouseFlags

Gets/Saves the mouse buttons state

MouseFocusKill

Kills mouse focus

Internal event handlers


OnCreate

"Create" event handler

OnDestroy

"Destroy" event handler

OnMove

"Move" event handler

OnResize

"Resize" event handler

OnEnable

"Enable" event handler

OnDisable

"Disable" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnActivate

"Activate" event handler

OnDeactivate

"Deactivate" event handler

OnClick

"Click" event handler

OnChange

"Change" event handler

Mouse event handlers


OnMouseDown

"MouseDown" event handler

OnMouseUp

"MouseUp" event handler

Drag event handlers


OnDragStart

"DragStart" event handler

OnDragProcess

"DragProcess" event handler

OnDragEnd

"DragEnd" event handler

Drag object
DragObjectCreate

Creates drag object

DragObjectDestroy

Destroys drag object

2000-2014, MetaQuotes Software Corp.

3684

Standard Library

Create
Creates a control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper-left corner.
y1
[in] Y coordinate of the upper-left corner.
x2
[in] X coordinate of the lower-right corner.
y2
[in] Y coordinate of the lower-right corner.
Returned value
true if successful, otherwise false.
Note
Base class method only saves the parameters and always return true.

2000-2014, MetaQuotes Software Corp.

3685

Standard Library

Destroy
Destroys a control.
virtual bool Destroy()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3686

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3687

Standard Library

OnMouseEvent
Mouse event handler (the CHARTEVENT_MOUSE_MOVE chart event).
virtual bool OnMouseEvent(
const int x,

// x coordinate

const int y,

// y coordinate

const int flags

// flags

Parameters
x
[in] X coordinate of the mouse cursor relative to the upper-left corner of the chart.
y
[in] Y coordinate of the mouse cursor relative to the upper-left corner of the chart.
flags
[in] Flag of mouse buttons states.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3688

Standard Library

Name
Gets control name.
string Name() const

Returned value
Control name.

2000-2014, MetaQuotes Software Corp.

3689

Standard Library

ControlsTotal
Gets the number of controls in the container.
int ControlsTotal() const

Returned value
Number of controls in container.
Note
The base class method doesn't have the container, it provides the access to container for its heirs
and always returns 0.

2000-2014, MetaQuotes Software Corp.

3690

Standard Library

Control
Gets the control by index.
CWnd* Control(
const int ind

// index

) const

Parameters
ind
[in] Control index.
Returned value
A pointer to the control.
Note
The base class method doesn't have the container, it provides the access to container for its heirs
and always returns NULL.

2000-2014, MetaQuotes Software Corp.

3691

Standard Library

ControlFind
Gets the control from container by specified ID.
virtual CWnd* ControlFind(
const long id

// ID

Parameters
id
[in] Identifier of the control to find.
Returned value
Pointer to the control.
Note
The base class method doesn't have the container, it provides the access to container for its heirs.
If the specified ID match with the container ID, it returns a pointer to itself (this).

2000-2014, MetaQuotes Software Corp.

3692

Standard Library

Rect
Gets the pointer to the CRect class object.
const CRect* Rect() const

Returned value
Pointer to the CRect class object.

2000-2014, MetaQuotes Software Corp.

3693

Standard Library

Left (Get Method)


Gets the X coordinate of the upper-left corner of the control.
int Left()

Returned value
X coordinate of the upper-left corner of the control.

Left (Set Method)


Sets the X coordinate of the upper-left corner of the control.
void Left(
const int x

// new x coordinate

Parameters
x
[in] New X coordinate of the upper-left corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3694

Standard Library

Top (Get Method)


Gets the Y coordinate of the upper-left corner of the control.
int Top()

Returned value
Y coordinate of the upper-left corner of the control.

Top (Set Method)


Sets the Y coordinate of the upper-left corner of the control.
void Top(
const int y

// y coordinate

Parameters
y
[in] New Y coordinate of the upper-left corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3695

Standard Library

Right (Get Method)


Gets the X coordinate of the lower-right corner of the control.
int Right()

Returned value
X coordinate of the lower-right corner.

Right (Set Method)


Sets the Y coordinate of the lower-right corner of the control.
void Right(
const int x

// x coordinate

Parameters
x
[in] New X coordinate of the lower-right corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3696

Standard Library

Bottom (Get Method)


Gets the Y coordinate of the lower-right corner of the control.
int Bottom()

Returned value
Y coordinate of the lower-right corner of the control.

Bottom (Set Method)


Sets the Y coordinate of the lower-right corner of the control.
void Bottom(
const int y

// y coordinate

Parameters
y
[in] New Y coordinate of the lower-right corner.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3697

Standard Library

Width (Get Method)


Gets the control width.
int Width()

Returned value
Width of the control.

Width (Set Method)


Sets new width of the control.
virtual bool Width(
const int w

// width

Parameters
w
[in] New width.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3698

Standard Library

Height (Get Method)


Gets the control height.
int Height()

Returned value
Height of the control.

Height (Set Method)


Sets new height of the control.
virtual bool Height(
const int h

// height

Parameters
h
[in] New height.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3699

Standard Library

Move
Sets new coordinates of the control.
void Move(
const int x,

// X coordinate

const int y

// Y coordinate

Parameters
x
[in] New X coordinate.
y
[in] New Y coordinate.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3700

Standard Library

Shift
Performs the relative shift of the control coordinates.
void Shift(
const int dx,

// delta X

const int dy

// delta Y

Parameters
dx
[in] Delta X.
dy
[in] Delta Y.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3701

Standard Library

Resize
Sets new width/height of the control.
virtual bool Resize(
const int w,

// width

const int h

// height

Parameters
w
[in] New width.
h
[in] New height.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3702

Standard Library

Contains
Checks if the point is inside the control area of the chart.
bool Contains(
const int x,

// X coordinate

const int y

// Y coordinate

Parameters
x
[in] X coordinate.
y
[in] Y coordinate.
Returned value
true, if the point is inside the area (including borders), otherwise - false.

Contains
Checks if the specified control is inside the control area of the chart.
bool Contains(
const CWnd* control

// pointer

) const

Parameters
control
[in] Object pointer.
Returned value
true, if the specified control is inside the area (including borders), otherwise - false.

2000-2014, MetaQuotes Software Corp.

3703

Standard Library

Alignment
Sets alignment parameters of the control.
void Alignment(
const int flags,

// alignment flags

const int left,

// offset from the left border

const int top,

// offset from the top border

const int right,

// offset from the right border

const int bottom

// offset from the bottom border

Parameters
flags
[in] Alignment flags.
left
[in] Fixed offset from the left border.
top
[in] Fixed offset from the top border.
right
[in] Fixed offset from the right border.
bottom
[in] Fixed offset from the bottom border.
Returned value
None.
Note
Alignement flags:
enum WND_ALIGN_FLAGS
{
WND_ALIGN_NONE=0,

// no align

WND_ALIGN_LEFT=1,

// align left

WND_ALIGN_TOP=2,

// align top

WND_ALIGN_RIGHT=4,

// align right

WND_ALIGN_BOTTOM=8,

// align bottom

WND_ALIGN_WIDTH = WND_ALIGN_LEFT|WND_ALIGN_RIGHT, // align width


WND_ALIGN_HEIGHT=WND_ALIGN_TOP|WND_ALIGN_BOTTOM,

// align height

WND_ALIGN_CLIENT=WND_ALIGN_WIDTH|WND_ALIGN_HEIGHT, // align height and width


}

2000-2014, MetaQuotes Software Corp.

3704

Standard Library

Align
Performs control alignment in the specified chart area.
virtual bool Align(
const CRect* rect

// pointer

Parameters
rect
[in] Pointer to the object with chart area coordinates.
Returned value
true if successful, otherwise false.
Note
The alignment parameters must be specified (no alignment by default).

2000-2014, MetaQuotes Software Corp.

3705

Standard Library

Id (Get Method)
Gets the control ID.
long Id() const

Returned value
The control identifier.

Id (Set Method)
Sets new value of the control ID.
virtual long Id(
const long id

// identifier

Parameters
id
[in] New value of the control identifier.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3706

Standard Library

IsEnabled
Gets a value indicating whether the control is enabled.
bool IsEnabled() const

Returned value
true - if the control is enabled, otherwise - false.

2000-2014, MetaQuotes Software Corp.

3707

Standard Library

Enable
Enables the control.
virtual bool Enable()

Returned value
true if successful, otherwise false.
Note
If the control is enabled, it's able to process the external events.

2000-2014, MetaQuotes Software Corp.

3708

Standard Library

Disable
Disables the control.
virtual bool Disable()

Returned value
true if successful, otherwise false.
Note
The disabled control doesn't able to process the external events.

2000-2014, MetaQuotes Software Corp.

3709

Standard Library

IsVisible
Gets a value indicating whether the control is visible.
bool IsVisible() const

Returned value
true if the control is shown on the chart, otherwise false.

2000-2014, MetaQuotes Software Corp.

3710

Standard Library

Visible
Sets the visibility flag.
virtual bool Visible(
const bool flag

// flag

Parameters
flag
[in] New flag.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3711

Standard Library

Show
Shows the control.
virtual bool Show()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3712

Standard Library

Hide
Hides the control.
virtual bool Hide()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3713

Standard Library

IsActive
Gets a value indicating whether the control is active.
bool IsActive() const

Returned value
true if the control is active, otherwise false.

2000-2014, MetaQuotes Software Corp.

3714

Standard Library

Activate
Activates the control.
virtual bool Activate()

Returned value
true if successful, otherwise false.
Note
The control becomes active when the mouse cursor is hovering over it.

2000-2014, MetaQuotes Software Corp.

3715

Standard Library

Deactivate
Deactivates the control.
virtual bool Deactivate()

Returned value
true if successful, otherwise false.
Note
The control becomes inactive when the mouse cursor is out off the control.

2000-2014, MetaQuotes Software Corp.

3716

Standard Library

StateFlags (Get Method)


Gets the control state flags.
int StateFlags()

Returned value
The control state flags.

StateFlags (Set Method)


Sets the control state flags.
virtual void StateFlags(
const int flags

// flags

Parameters
flags
[in] New control state flags.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3717

Standard Library

StateFlagsSet
Sets the control state flags.
virtual void StateFlagsSet(
const int flags

// flags

Parameters
flags
[in] Flags to set (bit mask).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3718

Standard Library

StateFlagsReset
Resets the control state flags.
virtual void StateFlagsReset(
const int flags

// flags

Parameters
flags
[in] Flags to reset (bit mask).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3719

Standard Library

PropFlags (Get Method)


Gets the control properties flags.
void PropFlags(
const int flags

// flags

Returned value
The control properties flags.

PropFlags (Set Method)


Sets the control properties flags.
virtual void PropFlags(
const int flags

// flags

Parameters
flags
[in] New flags.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3720

Standard Library

PropFlagsSet
Sets the control properties flags.
virtual void PropFlagsSet(
const int flags

// flags

Parameters
flags
[in] Flags to set (bit mask).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3721

Standard Library

PropFlagsReset
Resets the control properties flags.
virtual void PropFlagsReset(
const int flags

// flags

Parameters
flags
[in] Flags to reset (bit mask).
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3722

Standard Library

MouseX (Set Method)


Saves the mouse X coordinate.
void MouseX(
const int value

// coordinate

Parameters
value
[in] The X coordinate of the mouse.
Returned value
None.

MouseX (Get Method)


Gets the saved X coordinate of the mouse.
int MouseX()

Returned value
The saved X coordinate of the mouse.

2000-2014, MetaQuotes Software Corp.

3723

Standard Library

MouseY (Set Method)


Saves the mouse Y coordinate.
void MouseY(
const int value

// coordinate

Parameters
value
[in] The Y coordinate of the mouse.
Returned value
None.

MouseY (Get Method)


Gets the saved Y coordinate of the mouse.
int MouseY()

Returned value
The saved Y coordinate of the mouse.

2000-2014, MetaQuotes Software Corp.

3724

Standard Library

MouseFlags (Set Method)


Saves the state of mouse buttons.
virtual void MouseFlags(
const int value

// state

Parameters
value
[in] State of mouse buttons.
Returned value
None.

MouseFlags (Get Method)


Gets the saved state of mouse buttons.
int MouseFlags()

Returned value
State of mouse buttons.

2000-2014, MetaQuotes Software Corp.

3725

Standard Library

MouseFocusKill
Clears the saved state of mouse buttons and deactivates the control.
bool MouseFocusKill(
const long id=CONTROLS_INVALID_ID

// id

Parameters
id=CONTROLS_INVALID_ID
[in] Identifier of the control, that received mouse focus.
Returned value
The control deactivation result.

2000-2014, MetaQuotes Software Corp.

3726

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3727

Standard Library

OnDestroy
The control "Destroy" event handler.
virtual bool OnDestroy()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3728

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3729

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3730

Standard Library

OnEnable
The control "Enable" (if enabled, it can respond to user interaction) event handler.
virtual bool OnEnable()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3731

Standard Library

OnDisable
The control "Disable" (if disabled it can't respond to user interaction) event handler.
virtual bool OnDisable()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3732

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3733

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3734

Standard Library

OnActivate
The control "Activate" event handler.
virtual bool OnActivate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3735

Standard Library

OnDeactivate
The control "Deactivate" event handler.
virtual bool OnDeactivate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3736

Standard Library

OnClick
The control "Click" (left mouse button click) event handler.
virtual bool OnClick()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3737

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3738

Standard Library

OnMouseDown
The control "MouseDown" event handler.
virtual bool OnMouseDown()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseDown" event occurs when left mouse button is pressed on the control.

2000-2014, MetaQuotes Software Corp.

3739

Standard Library

OnMouseUp
The control "MouseUp" (left mouse button release) event handler.
virtual bool OnMouseUp()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseUp" event occurs when left mouse button is released on the control.

2000-2014, MetaQuotes Software Corp.

3740

Standard Library

OnDragStart
The control "DragStart" event handler.
virtual bool OnDragStart()

Returned value
true if the event has been processed, otherwise false.
Note
The "DragStart" event occurs at the start of drag operation.

2000-2014, MetaQuotes Software Corp.

3741

Standard Library

OnDragProcess
The control "DragProcess" event handler.
virtual bool OnDragProcess(
const int x,

// x coordinate

const int y

// y coordinate

Parameters
x
[in] Current X coordinate of mouse cursor.
y
[in] Current Y coordinate of mouse cursor.
Returned value
true if the event has been processed, otherwise false.
Note
The "DragProcess" event occurs when the control is moved.

2000-2014, MetaQuotes Software Corp.

3742

Standard Library

OnDragEnd
The control "DragEnd" event handler.
virtual bool OnDragEnd()

Returned value
true if the event has been processed, otherwise false.
Note
The "DragEnd" event occurs when control drag process is finished.

2000-2014, MetaQuotes Software Corp.

3743

Standard Library

DragObjectCreate
Creates drag object.
virtual bool DragObjectCreate()

Returned value
true if successful, otherwise false.
Note
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3744

Standard Library

DragObjectDestroy
Destroys drag object.
virtual bool DragObjectDestroy()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3745

Standard Library

CWndObj
CWndObj is a base class for simple controls (based on chart objects) of the Standard library.

Description
CWndObj class implements base methods of the simple control.

Declaration
class CWndObj : public CWnd

Title
#include <Controls\WndObj.mqh>

Class Methods
Chart events processing
OnEvent

Event handler of all chart events

Properties
Text

Gets/Sets the OBJPROP_TEXT property of the


chart object

Color

Gets/Sets the OBJPROP_COLOR property of the


chart object

ColorBackground

Gets/Sets the OBJPROP_BGCOLOR property of


the chart object

ColorBorder

Gets/Sets
the
OBJPROP_BORDER_COLOR
property of the chart object

Font

Gets/Sets the OBJPROP_FONT property of the


chart object

FontSize

Gets/Sets the OBJPROP_FONTSIZE property of


the chart object

ZOrder

Gets/Sets the OBJPROP_ZORDER property of


the chart object

Chart objects event handlers


OnObjectCreate

CHARTEVENT_OBJECT_CREATE event handler

OnObjectChange

CHARTEVENT_OBJECT_CHANGE event handler

OnObjectDelete

CHARTEVENT_OBJECT_DELETE event handler

OnObjectDrag

CHARTEVENT_OBJECT_DRAG event handler

Properties change event handlers


OnSetText

"SetText" event handler

2000-2014, MetaQuotes Software Corp.

3746

Standard Library

OnSetColor

"SetColor" event handler

OnSetColorBackground

"SetColorBackground" event handler

OnSetFont

"SetFont" event handler

OnSetFontSize

"SetFontSize" event handler

OnSetZOrder

"SetZOrder" event handler

Internal event handlers


OnDestroy

"Destroy" event handler

OnChange

"Change" event handler

2000-2014, MetaQuotes Software Corp.

3747

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3748

Standard Library

Text (Get method)


Gets the OBJPROP_TEXT (text) property of the chart object.
string Text()

Returned value
The value of the OBJPROP_TEXT property.

Text (Set method)


Sets the OBJPROP_TEXT (text) property of the chart object.
bool Text(
const string value

// new value

Parameters
value
[in] New value of the OBJPROP_TEXT property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3749

Standard Library

Color (Get method)


Gets the OBJPROP_COLOR (color) property of the chart object.
color Color()

Returned value
The value of the OBJPROP_COLOR property.

Color (Set method)


Sets the OBJPROP_COLOR (color) propery of the chart object.
bool Color(
const color value

// value

Parameters
value
[in] New value of the OBJPROP_COLOR property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3750

Standard Library

ColorBackground (Get method)


Gets the OBJPROP_BGCOLOR (background color) of the chart object.
color ColorBackground()

Returned value
The value of the OBJPROP_BGCOLOR property.

ColorBackground (Set method)


Sets the OBJPROP_BGCOLOR (background color) property of the chart object.
bool ColorBackground(
const color value

// value

Parameters
value
[in] New value of the OBJPROP_BGCOLOR property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3751

Standard Library

ColorBorder (Get method)


Gets the OBJPROP_BORDER_COLOR (border color) property of the chart object.
color ColorBorder()

Returned value
The value of the OBJPROP_BORDER_COLOR property.

ColorBorder (Set method)


Sets the OBJPROP_BORDER_COLOR (border color) property of the chart object.
bool ColorBorder(
const color value

// value

Parameters
value
[in] New value of the OBJPROP_BORDER_COLOR property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3752

Standard Library

Font (Get method)


Gets the OBJPROP_FONT (font) property of the chart object.
string Font()

Returned value
The value of the OBJPROP_FONT property.

Font (Set method)


Sets the OBJPROP_FONT (font) property of the chart object.
bool Font(
const string value

// new value

Parameters
value
[in] New value of the OBJPROP_FONT property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3753

Standard Library

FontSize (Get method)


Gets the OBJPROP_FONTSIZE (font size) property of the chart object.
int FontSize()

Returned value
The value of the OBJPROP_FONTSIZE property.

FontSize (Set method)


Sets the OBJPROP_FONTSIZE (font size) property of the chart object.
bool FontSize(
const int value

// new value

Parameters
value
[in] New value of the OBJPROP_FONTSIZE property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3754

Standard Library

ZOrder (Get method)


Gets the OBJPROP_ZORDER property of the chart object.
long ZOrder()

Returned value
The value of the OBJPROP_ZORDER property.

ZOrder (Set method)


Sets the OBJPROP_ZORDER property of the chart object.
bool ZOrder(
const long value

// new value

Parameters
value
[in] New value of the OBJPROP_ZORDER property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3755

Standard Library

OnObjectCreate
The chart object CHARTEVENT_OBJECT_CREATE event handler.
virtual bool OnObjectCreate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3756

Standard Library

OnObjectChange
The chart object CHARTEVENT_OBJECT_CHANGE event handler.
virtual bool OnObjectChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3757

Standard Library

OnObjectDelete
The chart object CHARTEVENT_OBJECT_DELETE event handler.
virtual bool OnObjectDelete()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3758

Standard Library

OnObjectDrag
The chart object CHARTEVENT_OBJECT_DRAG event handler.
virtual bool OnObjectDrag()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3759

Standard Library

OnSetText
The control "SetText" (change of the OBJPROP_TEXT property) event handler.
virtual bool OnSetText()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3760

Standard Library

OnSetColor
The control "SetColor" (change of the OBJPROP_COLOR property) event handler.
virtual bool OnSetColor()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3761

Standard Library

OnSetColorBackground
The control "SetColorBackground" (change of the OBJPROP_BGCOLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3762

Standard Library

OnSetFont
The control "SetFont" (change of the OBJPROP_FONT property) event handler.
virtual bool OnSetFont()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3763

Standard Library

OnSetFontSize
The control "SetFontSize" (change of the OBJPROP_FONTSIZE property) event handler.
virtual bool OnSetFontSize()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3764

Standard Library

OnSetZOrder
The control "SetZOrder" (change of the OBJPROP_ZORDER property) event handler.
virtual bool OnSetZOrder()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3765

Standard Library

OnDestroy
The control "Destroy" event handler.
virtual bool OnDestroy()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3766

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3767

Standard Library

CWndContainer
CWndContainer is a base class for a complex control (containing dependent controls) of the Standard
library.

Description
CWndContainer class implements base methods of the complex control.

Declaration
class CWndContainer : public CWnd

Title
#include <Controls\WndContainer.mqh>

Class Methods
Destroy
Destroy

Destroys all the container controls

Chart event handlers


OnEvent

Event handler of all chart events

OnMouseEvent

The CHARTEVENT_MOUSE_MOVE event handler

Access to container
ControlsTotal

Gets the number controls in the container

Control

Gets control by index

ControlFind

Gets control by ID

Add/Delete
Add

Adds control to container

Delete

Deletes control from container

Geometry
Move

Sets new coordinates for all controls of the


container

Shift

Performs the relative shift of the coordinates


for all controls of the container

Identification
Id

Sets the ID for all controls of the container

State
Enable

Enables all controls of the container

2000-2014, MetaQuotes Software Corp.

3768

Standard Library

Disable

Disables all controls of the container

Show

Shows all controls of the container

Hide

Hides all controls of the container

Mouse operations
MouseFocusKill

Kills mouse focus

File operations
Save

Saves container information to file

Load

Loads container information from file

Internal event handlers


OnResize

"Resize" event handler

OnActivate

"Activate" event handler

OnDeactivate

"Deactivate" event handler

2000-2014, MetaQuotes Software Corp.

3769

Standard Library

Destroy
Destroys all the container controls.
virtual bool Destroy()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3770

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3771

Standard Library

OnMouseEvent
Mouse event handler.
virtual bool OnMouseEvent(
const int x,

// x coordinate

const int y,

// y coordinate

const int flags

// flags

Parameters
x
[in] X coordinate of the mouse cursor relative to the upper-left corner of the chart.
y
[in] Y coordinate of the mouse cursor relative to the upper-left corner of the chart.
flags
[in] Flag of mouse buttons states.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3772

Standard Library

ControlsTotal
Gets the number of controls in the container.
int ControlsTotal() const

Returned value
Number of controls in the contrainer.

2000-2014, MetaQuotes Software Corp.

3773

Standard Library

Control
Gets control from the container by index.
CWnd* Control(
const int ind

// index

) const

Parameters
ind
[in] Index of the control needed.
Returned value
Pointer to the control, otherwise NULL if the control isn't found.

2000-2014, MetaQuotes Software Corp.

3774

Standard Library

ControlFind
Gets control from the container by identifier.
virtual CWnd* ControlFind(
const long id

// id

Parameters
id
[in] Control ID.
Returned value
Pointer to the control, otherwise NULL if the control isn't found.

2000-2014, MetaQuotes Software Corp.

3775

Standard Library

Add
Adds a control to the container.
bool Add(
CWnd& control

// reference

Parameters
control
[in] Control to add, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3776

Standard Library

Delete
Deletes control from the container.
bool Delete(
CWnd& control

// reference

Parameters
control
[in] Control to delete, passed by reference.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3777

Standard Library

Move
Sets new coordinates for all controls of the container.
virtual bool Move(
const int x,

// x coordinate

const int y

// y coordinate

Parameters
x
[in] New X coordinate of the upper-left corner.
y
[in] New Y coordinate of the upper-left coner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3778

Standard Library

Shift
Performs the relative shift of the coordinates for all controls of the container.
virtual bool Shift(
const int dx,

// delta x

const int dy

// delta y

Parameters
dx
[in] Delta X.
dy
[in] Delta Y.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3779

Standard Library

Id
Sets the ID for all controls of the container.
virtual long Id(
const long id

// identifier

Parameters
id
[in] Base group identifier.
Returned value
Number of identifiers, used by container controls.

2000-2014, MetaQuotes Software Corp.

3780

Standard Library

Enable
Enables all the controls of the container.
virtual bool Enable()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3781

Standard Library

Disable
Disables all controls of the container.
virtual bool Disable()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3782

Standard Library

Show
Shows all controls of the container.
virtual bool Show()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3783

Standard Library

Hide
Hides all controls of the container.
virtual bool Hide()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3784

Standard Library

MouseFocusKill
Clears the saved state of mouse buttons and deactivates alll controls in the container.
bool MouseFocusKill(
const long id=CONTROLS_INVALID_ID

// id

Parameters
id=CONTROLS_INVALID_ID
[in] Identifier of the control, that received mouse focus.
Returned value
The controls deactivation result.

2000-2014, MetaQuotes Software Corp.

3785

Standard Library

Save
Saves container information to file.
virtual bool Save(
const int file_handle

// handle

Parameters
file_handle
[in] Handle of the binary file (must be opened for writing).
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3786

Standard Library

Load
Loads container information to file
virtual bool Load(
const int file_handle

// handle

Parameters
file_handle
[in] Handle of the binary file (must be opened for reading).
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3787

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3788

Standard Library

OnActivate
The control "Activate" event handler.
virtual bool OnActivate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3789

Standard Library

OnDeactivate
The control "Deactivate" event handler.
virtual bool OnDeactivate()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3790

Standard Library

CLabel
CLabel is class of the simple control, based on "Text label" chart object.

Description
CLabel is intended for creation of simple text labels.

Declaration
class CLabel : public CWndObj

Title
#include <Controls\Label.mqh>

Class Methods
Create
Create

Creates control

Properties change event handlers


OnSetText

"SetText" event handler

OnSetColor

"SetColor" event handler

OnSetFont

"SetFont" event handler

OnSetFontSize

"SetFontSize" event handler

Internal event handlers


OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

2000-2014, MetaQuotes Software Corp.

3791

Standard Library

Create
Creates new CLabel control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3792

Standard Library

OnSetText
The control "SetText" (change of the OBJPROP_TEXT property) event handler.
virtual bool OnSetText()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3793

Standard Library

OnSetColor
The control "SetColor" (change of the OBJPROP_COLOR property) event handler.
virtual bool OnSetColor()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3794

Standard Library

OnSetFont
The control "SetFont" (change of the OBJPROP_FONT property) event handler.
virtual bool OnSetFont()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3795

Standard Library

OnSetFontSize
The control "SetFontSize" (change of the OBJPROP_FONTSIZE property) event handler.
virtual bool OnSetFontSize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3796

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3797

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3798

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3799

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3800

Standard Library

CBmpButton
CBmpButton is class of the simple control, based on "Bitmap label" chart object.

Description
CBmpButton is intended for creation of buttons with graphic image.

Declaration
class CBmpButton : public CWndObj

Title
#include <Controls\BmpButton.mqh>

Class Methods
Create
Create

Creates control

Properties
Border

Gets/Sets the "Border" property of the control

BmpNames

Sets the name of bmp files of the control

BmpOffName

Gets/Sets the name of bmp file for the OFF


state

BmpOnName

Gets/Sets the name of bmp file for the ON


state

BmpPassiveName

Gets/Sets the name of bmp file for the passive


state

BmpActiveName

Gets/Sets the name of bmp file for the active


state

State
Pressed

Gets/Sets the state of the control

Locking

Gets/Sets the "Locking" property of the control

Internal event handlers


OnSetZOrder

"SetZOrder" event handler

OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

2000-2014, MetaQuotes Software Corp.

3801

Standard Library

OnChange

"Change" event handler

OnActivate

"Activate" event handler

OnDeactivate

"Deactivate" event handler

OnMouseDown

"MouseDown" event handler

OnMouseUp

"MouseUp" event handler

2000-2014, MetaQuotes Software Corp.

3802

Standard Library

Create
Creates new CBmpButton control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3803

Standard Library

Border (Get method)


Gets the "Border" (border width) property of the control.
int Border() const

Returned value
The "Border" property.

Border (Set method)


Sets the "Border" (border width) property of the control.
bool Border(
const int value

// new value

Parameters
value
[in] New value of the "Border" property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3804

Standard Library

BmpNames
Sets the name of bmp files of the control
bool BmpNames(
const string off="",

// file name

const string on=""

// file name

Parameters
off=""
[in] Name of bmp file for OFF state.
on=""
[in] Name of bmp file for ON state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3805

Standard Library

BmpOffName (Get method)


Gets the name of bmp file for OFF state.
string BmpOffName() const

Returned value
Name of bmp file for OFF state.

BmpOffName (Set method)


Sets the name of bmp file for OFF state.
bool BmpOffName(
const string name

// file name

Parameters
name
[in] Name of bmp file for OFF state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3806

Standard Library

BmpOnName (Get method)


Gets the name of bmp file for ON state.
string BmpOnName() const

Returned value
Name of bmp file for ON state.

BmpOnName (Set method)


Sets the name of bmp file for ON state.
bool BmpOnName(
const string name

// file name

Parameters
name
[in] Name of bmp file for ON state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3807

Standard Library

BmpPassiveName (Get method)


Gets the name of bmp file for the control passive state.
string BmpPassiveName() const

Returned value
Name of bmp file for the control passive state.

BmpPassiveName (Set method)


Sets the name of bmp file for the passive state.
bool BmpPassiveName(
const string name

// file name

Parameters
name
[in] Name of bmp file for the control passive state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3808

Standard Library

BmpActiveName (Get method)


Gets the name of bmp file for the active state.
string BmpActiveName() const

Returned value
Name of bmp file for the active state.
Note
The control becomes active when the mouse cursor is hovering over it.

BmpActiveName (Set method)


Sets the name of bmp file for the active state.
bool BmpActiveName(
const string name

// file name

Parameters
name
[in] Name of bmp file for the active state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3809

Standard Library

Pressed (Get method)


Gets the state ("Pressed" property) of the control.
bool Pressed() const

Returned value
Control state.

Pressed (Set method)


Sets the state ("Pressed" property) of the control.
bool Pressed(
const bool pressed

// new state

Parameters
pressed
[in] New control state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3810

Standard Library

Locking (Get method)


Gets the "Locking" property of the control.
bool Locking() const

Returned value
The value of "Locking" property.

Locking (Set method)


Sets new value of the "Locking" property of the control.
void Locking(
const bool locking

// new value

Parameters
locking
[in] New value of "Locking" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3811

Standard Library

OnSetZOrder
The control "SetZOrder" (change of the OBJPROP_ZORDER property) event handler.
virtual bool OnSetZOrder()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3812

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3813

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3814

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3815

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3816

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3817

Standard Library

OnActivate
The control "Activate" event handler.
virtual bool OnActivate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3818

Standard Library

OnDeactivate
The control "Deactivate" event handler.
virtual bool OnDeactivate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3819

Standard Library

OnMouseDown
The control "MouseDown" event handler.
virtual bool OnMouseDown()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseDown" event occurs when left mouse button is pressed on the control.

2000-2014, MetaQuotes Software Corp.

3820

Standard Library

OnMouseUp
The control "MouseUp" (left mouse button release) event handler.
virtual bool OnMouseUp()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseUp" event occurs when left mouse button is released on the control.

2000-2014, MetaQuotes Software Corp.

3821

Standard Library

CButton
CButton is class of the simple control, based on "Button" chart object.

Description
CButton class in intended for creation of simple buttons.

Declaration
class CButton : public CWndObj

Title
#include <Controls\Button.mqh>

Class Methods
Create
Create

Creates control

State
Pressed

Gets/Sets the "Pressed" property

Locking

Gets/Sets the "Locking" property

Properties change event handlers


OnSetText

"SetText" event handler

OnSetColor

"SetColor" event handler

OnSetColorBackground

"SetColorBackground" event handler

OnSetColorBorder

"SetColorBorder" event handler

OnSetFont

"SetFont" event handler

OnSetFontSize

"SetFontSize" event handler

Internal event handlers


OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

OnResize

"Resize" event handler

OnMouseDown

"MouseDown" event handler

OnOnMouseUp

"MouseUp" event handler

2000-2014, MetaQuotes Software Corp.

3822

Standard Library

2000-2014, MetaQuotes Software Corp.

3823

Standard Library

Create
Creates new CButton control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3824

Standard Library

Pressed (Get method)


Gets the state ("Pressed" property) of the control.
bool Pressed() const

Returned value
Control state.

Pressed (Set method)


Sets the state ("Pressed" property) of the control.
bool Pressed(
const bool pressed

// new state

Parameters
pressed
[in] New control state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3825

Standard Library

Locking (Get method)


Gets the "Locking" property of the control.
bool Locking() const

Returned value
The value of "Locking" property.

Locking (Set method)


Sets new value of "Locking" property of the control.
void Locking(
const bool locking

// new value

Parameters
locking
[in] New value of "Locking" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3826

Standard Library

OnSetText
The control "SetText" (change of the OBJPROP_TEXT property) event handler.
virtual bool OnSetText()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3827

Standard Library

OnSetColor
The control "SetColor" (change of the OBJPROP_COLOR property) event handler.
virtual bool OnSetColor()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3828

Standard Library

OnSetColorBackground
The control "SetColorBackground" (change of the OBJPROP_BGCOLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3829

Standard Library

OnSetColorBorder
The control "SetColorBorder" (change of the OBJPROP_BORDER_COLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3830

Standard Library

OnSetFont
The control "SetFont" (change of the OBJPROP_FONT property) event handler.
virtual bool OnSetFont()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3831

Standard Library

OnSetFontSize
The control "SetFontSize" (change of the OBJPROP_FONTSIZE property) event handler.
virtual bool OnSetFontSize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3832

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3833

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3834

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3835

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3836

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3837

Standard Library

OnMouseDown
The control "MouseDown" event handler.
virtual bool OnMouseDown()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseDown" event occurs when left mouse button is pressed on the control.

2000-2014, MetaQuotes Software Corp.

3838

Standard Library

OnMouseUp
The control "MouseUp" (left mouse button release) event handler.
virtual bool OnMouseUp()

Returned value
true if the event has been processed, otherwise false.
Note
The "MouseUp" event occurs when left mouse button is released on the control.

2000-2014, MetaQuotes Software Corp.

3839

Standard Library

CEdit
CEdit is class of the simple control, based on "Edit" chart object.

Description
CEdit class in intended for creation of controls, in which the user can enter text.

Declaration
class CEdit : public CWndObj

Title
#include <Controls\Edit.mqh>

Class Methods
Create
Create

Creates control

Properties
ReadOnly

Gets/Sets the "ReadOnly" property

TextAlign

Gets/Sets the "TextAlign" property

Chart object event handlers


OnObjectEndEdit

The CHARTEVENT_OBJECT_ENDEDIT
handler (virtual)

Properties change event handlers


OnSetText

"SetText" event handler

OnSetColor

"SetColor" event handler

OnSetColorBackground

"SetColorBackground" event handler

OnSetColorBorder

"SetColorBorder" event handler

OnSetFont

"SetFont" event handler

OnSetFontSize

"SetFontSize" event handler

OnSetZOrder

"SetZOrder" event handler

Internal event handlers


OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

2000-2014, MetaQuotes Software Corp.

event

3840

Standard Library

OnResize

"Resize" event handler

OnChange

"Change" event handler

OnClick

"Click" event handler

2000-2014, MetaQuotes Software Corp.

3841

Standard Library

Create
Creates new CEdit control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3842

Standard Library

ReadOnly (Get Method)


Gets the "ReadOnly" property of the control.
bool ReadOnly()

Returned value
The value of "ReadOnly" property.

ReadOnly (Set Method)


Sets the value of "ReadOnly" property of the control.
bool ReadOnly(
const bool flag

// new values

Parameters
flag
[in] New value of "ReadOnly" property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3843

Standard Library

TextAlign (Get method)


Gets the value of "TextAlign" property (text alignment mode) of the control.
ENUM_ALIGN_MODE TextAlign() const

Returned value
Value of "TextAlign" property of the control.

TextAlign (Set method)


Sets new value of "TextAlign" property (text aligment mode) of the control.
bool TextAlign(
ENUM_ALIGN_MODE align

// new value

Parameters
align
[in] New value of "TextAlign" property.
Returned value
true if successful, false if property hasn't changed.

2000-2014, MetaQuotes Software Corp.

3844

Standard Library

OnObjectEndEdit
The CHARTEVENT_OBJECT_ENDEDIT event handler.
virtual bool OnObjectEndEdit()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3845

Standard Library

OnSetText
The control "SetText" (change of the OBJPROP_TEXT property) event handler.
virtual bool OnSetText()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3846

Standard Library

OnSetColor
The control "SetColor" (change of the OBJPROP_COLOR property) event handler.
virtual bool OnSetColor()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3847

Standard Library

OnSetColorBackground
The control "SetColorBackground" (change of the OBJPROP_BGCOLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3848

Standard Library

OnSetColorBorder
The control "SetColorBorder" (change of the OBJPROP_BORDER_COLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3849

Standard Library

OnSetFont
The control "SetFont" (change of the OBJPROP_FONT property) event handler.
virtual bool OnSetFont()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3850

Standard Library

OnSetFontSize
The control "SetFontSize" (change of the OBJPROP_FONTSIZE property) event handler.
virtual bool OnSetFontSize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3851

Standard Library

OnSetZOrder
The control "SetZOrder" (change of the OBJPROP_ZORDER property) event handler.
virtual bool OnSetZOrder()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3852

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3853

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3854

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3855

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3856

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3857

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3858

Standard Library

OnClick
The control "Click" (left mouse button click) event handler.
virtual bool OnClick()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3859

Standard Library

CPanel
CPanel is class of the simple control, based on "Rectangle label" chart object.

Description
CPanel class is intended to combine the controls with similar functions in the group.

Declaration
class CPanel : public CWndObj

Title
#include <Controls\Panel.mqh>

Class Methods
Create
Create

Creates control

Chart object properties


BorderType

Gets the "BorderType" property of the chart


object

Chart object event handlers


OnSetText

"SetText" event handler

OnSetColorBackground

"SetColorBackground" event handler

OnSetColorBorder

"SetColorBorder" event handler

Internal event handlers


OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

OnResize

"Resize" event handler

OnChange

"Change" event handler

2000-2014, MetaQuotes Software Corp.

3860

Standard Library

Create
Creates new CPanel control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3861

Standard Library

BorderType (Get method)


Gets the "BorderType" property of the chart object.
ENUM_BORDER_TYPE BorderType()

Returned value
The value of "BorderType" property.

BorderType (Set method)


Sets new value of "BorderType" property of the chart object.
bool BorderType(
const ENUM_BORDER_TYPE type

// value

Parameters
type
[in] New value of "BorderType" property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3862

Standard Library

OnSetText
The control "SetText" (change of the OBJPROP_TEXT property) event handler.
virtual bool OnSetText()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3863

Standard Library

OnSetColorBackground
The control "SetColorBackground" (change of the OBJPROP_BGCOLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3864

Standard Library

OnSetColorBorder
The control "SetColorBorder" (change of the OBJPROP_BORDER_COLOR property) event handler.
virtual bool OnSetColorBackground()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3865

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3866

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3867

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3868

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3869

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3870

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3871

Standard Library

CPicture
CPicture is class of the simple control, based on "Bitmap Label" chart object.

Description
CPicture class is intended for creation of simple graphic images.

Declaration
class CPicture : public CWndObj

Title
#include <Controls\Picture.mqh>

Class Methods
Create
Create

Creates control

Chart object properties


Border

Gets/Sets the border width of the chart object

BmpName

Gets/Sets the name of bmp-file of the control

Internal events
OnCreate

"Create" event handler

OnShow

"Show" event handler

OnHide

"Hide" event handler

OnMove

"Move" event handler

OnChange

"Change" event handler

2000-2014, MetaQuotes Software Corp.

3872

Standard Library

Create
Creates new CPicture control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3873

Standard Library

Border (Get method)


Gets the "Border" (border width) property of the control.
int Border() const

Returned value
The "Border" property.

Border (Set method)


Sets the "Border" (border width) property of the control.
bool Border(
const int value

// new value

Parameters
value
[in] New value of the "Border" property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3874

Standard Library

BmpName (Get method)


Gets the name of bmp file of the control.
string BmpName() const

Returned value
Name of bmp file of the control.

BmpName (Set method)


Sets the name of bmp file of the control.
bool BmpName(
const string name

// file name

Parameters
name
[in] Name of bmp file of the control.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3875

Standard Library

OnCreate
The control "Create" event handler.
virtual bool OnCreate()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3876

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3877

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3878

Standard Library

OnMove
The control "Move" event handler.
virtual bool OnMove()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3879

Standard Library

OnChange
The control "Change" event handler.
virtual bool OnChange()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3880

Standard Library

CScroll
CScroll is a base class for creation of scroll bars.

Description
CScroll is a complex control (with dependent controls), it contains the base functionality for creation of
scroll bars. The base class itself isn't used as a separate control, two of its heirs (CScrollV and CScrollH
classes) are used as controls.

Declaration
class CScroll : public CWndContainer

Title
#include <Controls\Scrolls.mqh>

Class Methods
Create
Create

Creates control

Chart object event handlers


OnEvent

Event handler of all chart events

Properties
MinPos

Gets/Sets the minimal position

MaxPos

Gets/Sets the maximal position

CurrPos

Gets/Sets the current position

Dependent controls creation


CreateBack

Creates background button

CreateInc

Creates increment button of the scroll bar

CreateDec

Creates decrement button of the scroll bar

CreateThumb

Creates thumb button (can be dragged) of the


scroll bar

Dependent controls event handlers


OnClickInc

Event handler, used for handling of increment


button events

OnClickDec

Event handler, used for handling of decrement


button events

Internal event handlers


OnShow

"Create" event handler

2000-2014, MetaQuotes Software Corp.

3881

Standard Library

OnHide

"Hide" event handler

OnChangePos

"ChangePosition" event handler

Object drag handlers


OnThumbDragStart

"ThumbDragStart" event handler

OnThumbDragProcess

"ThumbDragProcess" event handler

OnThumbDragEnd

"ThumbDragEnd" event handler

Position
CalcPos

Gets scroll bar position by coordinate

2000-2014, MetaQuotes Software Corp.

3882

Standard Library

Create
Creates new CScroll control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3883

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3884

Standard Library

MinPos (Get method)


Gets the value of "MinPos" (minimal position) of the CScroll control.
int MinPos() const

Returned value
New value of "MinPos" property.

MinPos (Set method)


Sets the value of "MinPos" (minimal position) of the CScroll control.
void MinPos(
const int value

// new value

Parameters
value
[in] New value of "MinPos" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3885

Standard Library

MaxPos (Get method)


Gets the value of "MinPos" (maximal position) of the CScroll control.
int MaxPos() const

Returned value
New value of "MaxPos" property.

MaxPos (Set method)


Sets the value of "MaxPos" (maximal position) of the CScroll control.
void MaxPos(
const int value

// new value

Parameters
value
[in] New value of "MaxPos" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3886

Standard Library

CurrPos (Get method)


Gets the value of "CurrPos" (current position) of the CScroll control.
int CurrPos() const

Returned value
New value of "MaxPos" property.

CurrPos (Set method)


Sets the value of "CurrPos" (current position) of the CScroll control.
void CurrPos(
const int value

// new value

Parameters
value
[in] New value of "CurrPos" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3887

Standard Library

CreateBack
Creates background button of the CScroll control.
virtual bool CreateBack()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3888

Standard Library

CreateInc
Creates increment button of the CScroll control.
virtual bool CreateInc()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3889

Standard Library

CreateDec
Creates decrement button of CScroll control.
virtual bool CreateDec()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3890

Standard Library

CreateThumb
Creates thumb button (can be dragged) of the CScroll control.
virtual bool CreateThumb()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3891

Standard Library

OnClickInc
The control "ClickInc" (left mouse button click on the increment button) event handler.
virtual bool OnClickInc()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3892

Standard Library

OnClickDec
The control "ClickDec" (left mouse button click on the decrement button) event handler.
virtual bool OnClickDec()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3893

Standard Library

OnShow
The control "Show" event handler.
virtual bool OnShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3894

Standard Library

OnHide
The control "Hide" event handler.
virtual bool OnHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3895

Standard Library

OnChangePos
The control "ChangePos" (position change) event handler.
virtual bool OnChangePos()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3896

Standard Library

OnThumbDragStart
The control "ThumbDragStart" (drag start) event handler.
virtual bool OnThumbDragStart()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragStart" event occurs at start of the drag operation.

2000-2014, MetaQuotes Software Corp.

3897

Standard Library

OnThumbDragProcess
The control "ThumbDragProcess" event handler.
virtual bool OnThumbDragProcess(
const int x,

// x coordinate

const int y

// y coordinate

Parameters
x
[in] Current X coordinate of mouse cursor.
y
[in] Current Y coordinate of mouse cursor.
Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragProcess" occurs when the scroll bar control (thumb button) is moved.

2000-2014, MetaQuotes Software Corp.

3898

Standard Library

OnThumbDragEnd
The control "ThumbDragEnd" (drag process finished) event handler.
virtual bool OnThumbDragEnd()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragEnd" occurs when the drag operation of the scroll bar control (thumb button) is
finished.

2000-2014, MetaQuotes Software Corp.

3899

Standard Library

CalcPos
Gets scroll bar position by coordinate.
virtual int CalcPos(
const int

coord

// coordinate

Parameters
coord
[in] Scroll bar coordinate.
Returned value
Scroll bar position.

2000-2014, MetaQuotes Software Corp.

3900

Standard Library

CScrollV
CScrollV is a class of the "Vertical scroll bar" complex control.

Description
CScrollV class is intended for creation of vertical scroll bars.

Declaration
class CScrollV : public CScroll

Title
#include <Controls\Scrolls.mqh>

Class Methods
Dependent controls
CreateInc

Creates scroll bar increment button

CreateDec

Creates scroll bar decrement button

CreateThumb

Creates scroll bar thumb button (can be


dragged)

Internal event handlers


OnResize

"Resize" event handler

OnChangePos

"ChangePosition" event handler

Drag event handlers


OnThumbDragStart

"ThumbDragStart" event handler

OnThumbDragProcess

"ThumbDragProcess" event handler

OnThumbDragEnd

"ThumbDragEnd" event handler

Position
CalcPos

Gets scroll bar position by coordinate

2000-2014, MetaQuotes Software Corp.

3901

Standard Library

CreateInc
Creates increment button of the control.
virtual bool CreateInc()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3902

Standard Library

CreateDec
Creates decrement button of the control.
virtual bool CreateDec()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3903

Standard Library

CreateThumb
Creates thumb button (can be dragged) of the control.
virtual bool CreateThumb()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3904

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3905

Standard Library

OnChangePos
The control "ChangePos" (position change) event handler.
virtual bool OnChangePos()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3906

Standard Library

OnThumbDragStart
The control "ThumbDragStart" (drag start) event handler.
virtual bool OnThumbDragStart()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragStart" event occurs at start of the drag operation.

2000-2014, MetaQuotes Software Corp.

3907

Standard Library

OnThumbDragProcess
The control "ThumbDragProcess" event handler.
virtual bool OnThumbDragProcess(
const int x,

// x coordinate

const int y

// y coordinate

Parameters
x
[in] Current X coordinate of mouse cursor.
y
[in] Current Y coordinate of mouse cursor.
Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragProcess" occurs when the scroll bar control (thumb button) is moved.

2000-2014, MetaQuotes Software Corp.

3908

Standard Library

OnThumbDragEnd
The control "ThumbDragEnd" (drag process finished) event handler.
virtual bool OnThumbDragEnd()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragEnd" occurs when the drag operation of the scroll bar control (thumb button) is
finished.

2000-2014, MetaQuotes Software Corp.

3909

Standard Library

CalcPos
Gets scroll bar position by coordinate.
virtual int CalcPos(
const int

coord

// coordinate

Parameters
coord
[in] Scroll bar coordinate.
Returned value
Scroll bar position.

2000-2014, MetaQuotes Software Corp.

3910

Standard Library

CScrollH
CScrollH is a class of the "Horizontal scroll bar" complex control.

Description
CScrollH is intended for creation of horizontal scroll bars.

Declaration
class CScrollH : public CScroll

Title
#include <Controls\Scrolls.mqh>

Class Methods
Dependent controls
CreateInc

Creates scroll bar increment button

CreateDec

Creates scroll bar decrement button

CreateThumb

Creates scroll bar thumb button (can be


dragged)

Internal event handlers


OnResize

"Resize" event handler

OnChangePos

"ChangePosition" event handler

Drag event handlers


OnThumbDragStart

"ThumbDragStart" event handler

OnThumbDragProcess

"ThumbDragProcess" event handler

OnThumbDragEnd

"ThumbDragEnd" event handler

Position
CalcPos

Gets scroll bar position by coordinate

2000-2014, MetaQuotes Software Corp.

3911

Standard Library

CreateInc
Creates increment button of the control.
virtual bool CreateInc()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3912

Standard Library

CreateDec
Creates decrement button of the control.
virtual bool CreateDec()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3913

Standard Library

CreateThumb
Creates thumb button (can be dragged) of the control.
virtual bool CreateThumb()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3914

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3915

Standard Library

OnChangePos
The control "ChangePos" (position change) event handler.
virtual bool OnChangePos()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3916

Standard Library

OnThumbDragStart
The control "ThumbDragStart" (drag start) event handler.
virtual bool OnThumbDragStart()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragStart" event occurs at start of the drag operation.

2000-2014, MetaQuotes Software Corp.

3917

Standard Library

OnThumbDragProcess
The control "ThumbDragProcess" event handler.
virtual bool OnThumbDragProcess(
const int x,

// x coordinate

const int y

// y coordinate

Parameters
x
[in] Current X coordinate of mouse cursor.
y
[in] Current Y coordinate of mouse cursor.
Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragProcess" occurs when the scroll bar control (thumb button) is moved.

2000-2014, MetaQuotes Software Corp.

3918

Standard Library

OnThumbDragEnd
The control "ThumbDragEnd" (drag process finished) event handler.
virtual bool OnThumbDragEnd()

Returned value
true if the event has been processed, otherwise false.
Note
The "ThumbDragEnd" occurs when the drag operation of the scroll bar control (thumb button) is
finished.

2000-2014, MetaQuotes Software Corp.

3919

Standard Library

CalcPos
Gets scroll bar position by coordinate.
virtual int CalcPos(
const int

coord

// coordinate

Parameters
coord
[in] Scroll bar coordinate.
Returned value
Scroll bar position.

2000-2014, MetaQuotes Software Corp.

3920

Standard Library

CWndClient
CWndClient is a class of the "Cient area" complex control (with dependent controls). It's a base class
for creation of scroll bars area.

Description
CWndClient implements the functionality for creation of client area with scroll bars.

Declaration
class CWndClient : public CWndContainer

Title
#include <Controls\WndClient.mqh>

Class Methods
Create
Create

Creates control

Chart event handler


OnEvent

Event handler of all chart events

Properties
ColorBackground

Sets background color

ColorBorder

Sets border color

BorderType

Sets border type

Settings
VScrolled

Gets/Sets the flag, indicating that vertical


scroll bar is used

HScrolled

Gets/Sets the flag, indicating that horizontal


scroll bar is used

Dependent controls
CreateBack

Creates background for scroll bar

CreateScrollV

Creates vertical scroll bar

CreateScrollH

Creates horizontal scroll bar

Internal event handlers


OnResize

"Resize" event handler

Dependent controls event handlers


OnVScrollShow

"Show" event handler (virtual)


dependent control

2000-2014, MetaQuotes Software Corp.

of

VScroll

3921

Standard Library

OnVScrollHide

"Hide" event handler (virtual)


dependent control

of

VScroll

OnHScrollShow

"Show" event handler (virtual)


dependent control

of

HScroll

OnHScrollHide

"Hide" event handler (virtual)


dependent control

of

HScroll

OnScrollLineDown

"ScrollLineDown" event handler (virtual) of


VScroll dependent control

OnScrollLineUp

"ScrollLineUp" event handler (virtual) of VScroll


dependent control

OnScrollLineLeft

"ScrollLineLeft" event handler (virtual)


HScroll dependent control

OnScrollLineRight

"ScrollLineRight" event handler (virtual) of


HScroll dependent control

of

Resize
Rebound

Sets new coordinates of the control using CRect


class coordinates

2000-2014, MetaQuotes Software Corp.

3922

Standard Library

Create
Creates new CWndClient control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3923

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3924

Standard Library

ColorBackground
Sets background color of the control.
bool ColorBackground(
const color value

// new color

Parameters
value
[in] New background color of the control.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3925

Standard Library

ColorBorder
Set border color of the control.
bool ColorBorder(
const color value

// color

Parameters
value
[in] New border color of the control.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3926

Standard Library

BorderType
Sets border type of the control.
bool BorderType(
const ENUM_BORDER_TYPE type

// border type

Parameters
type
[in] Border type of the control.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3927

Standard Library

VScrolled (Get method)


Gets the flag, indicating that vertical scroll bar is used.
bool VScrolled()

Returned value
true, if vertical scroll bar is used, otherwise false.

VScrolled (Set method)


Sets the flag, indicating that vertical scroll bar is used.
bool VScrolled(
const bool flag

// flag

Parameters
flag
[in] Flag.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3928

Standard Library

HScrolled (Get method)


Gets the flag, indicating that horizontal scroll bar is used.
bool HScrolled()

Returned value
true, if horizontal scroll bar is used, otherwise false.

HScrolled (Set method)


Sets the flag, indicating that horizontal scroll bar is used.
bool HScrolled(
const bool flag

// flag

Parameters
flag
[in] Flag.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3929

Standard Library

CreateBack
Creates background button of the control.
virtual bool CreateBack()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3930

Standard Library

CreateScrollV
Creates vertical scroll bar.
virtual bool CreateScrollV()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3931

Standard Library

CreateScrollH
Creates horizontal scroll bar.
virtual bool CreateScrollH()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3932

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3933

Standard Library

OnVScrollShow
The control "VScrollShow" (vertical scroll bar show) event handler.
virtual bool OnVScrollShow()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3934

Standard Library

OnVScrollHide
The control "VScrollHide" (vertical scroll bar hide) event handler.
virtual bool OnVScrollHide()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3935

Standard Library

OnHScrollShow
The control "HScrollShow" (horizontal scroll bar show) event handler.
virtual bool OnHScrollShow()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3936

Standard Library

OnHScrollHide
The control "HScrollHide" (vertical scroll bar hide) event handler.
virtual bool OnHScrollHide()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3937

Standard Library

OnScrollLineDown
The control "ScrollLineDown" (vertical scroll line down) event handler.
virtual bool OnScrollLineDown()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3938

Standard Library

OnScrollLineUp
The control "ScrollLineUp" (vertical scroll line up) event handler.
virtual bool OnScrollLineUp()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3939

Standard Library

OnScrollLineLeft
The control "ScrollLineLeft" (horizontal scroll line left) event handler.
virtual bool OnScrollLineLeft()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3940

Standard Library

OnScrollLineRight
The control "ScrollLineRight" (horizontal scroll line right) event handler.
virtual bool OnScrollLineRight()

Returned value
true if the event has been processed, otherwise false.
Note
The base class method does nothing and always returns true.

2000-2014, MetaQuotes Software Corp.

3941

Standard Library

ReBound
Sets new coordinates of the control using CRect class coordinates.
void ReBound(
const & CRect rect

// CRect class

Returned value
None.

2000-2014, MetaQuotes Software Corp.

3942

Standard Library

CListView
CListView is a class of the ListView complex control (with dependent controls).

Description
CListView class encapsulates list-control functionality.

Declaration
class CListView : public CWndClient

Title
#include <Controls\ListView.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Settings
TotalView

Sets the number of items, shown on the control

Add/Delete
AddItem

Adds an item

Data
Select

Selects current list item by index

SelectByText

Selects current list item by text

SelectByValue

Selects current list item by value

Read-only data
Value

Gets the value of current list item

Dependent controls
CreateRow

Creates a row of the ListView

Internal event handlers


OnResize

"Resize" event handler (virtual)

Dependent controls event handlers


OnVScrollShow

"Show" event handler (virtual)


dependent control

2000-2014, MetaQuotes Software Corp.

of

VScroll

3943

Standard Library

OnVScrollHide

"Hide" event handler (virtual)


dependent control

of

VScroll

OnScrollLineDown

"ScrollLineDown" event handler (virtual) of


VScroll dependent control

OnScrollLineUp

"ScrollLineUp" event handler (virtual) of VScroll


dependent control

OnItemClick

"ItemClick" event handler (virtual)

Redraw
Redraw

Redraws the control

RowState

Sets the state of the specified row

CheckView

Checks the "visibility" of the specified row

2000-2014, MetaQuotes Software Corp.

3944

Standard Library

Create
Creates new CListView control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3945

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3946

Standard Library

TotalView
Sets the number of items, shown on the control.
bool TotalView(
const int value

// items shown

Parameters
value
[in] The number of items, shown on the control.
Returned value
true if successful, otherwise false.
Note
The number of shown items can be specified only at once.

2000-2014, MetaQuotes Software Corp.

3947

Standard Library

AddItem
Adds an item to the control.
bool AddItem(
const string item,

// text

const long

// value

value

Parameters
item
[in] Text.
value
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3948

Standard Library

Select
Selects current list item by index.
bool Select(
const int index

// index

Parameters
index
[in] Item index.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3949

Standard Library

SelectByText
Selects current list item by text.
bool SelectByText(
const string text

// text

Parameters
text
[in] Text.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3950

Standard Library

SelectByValue
Selects current list item by value.
bool SelectByValue(
const long value

// value

Parameters
value
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3951

Standard Library

Value
Gets the value of current list item.
long Value()

Returned value
The value of current list item.

2000-2014, MetaQuotes Software Corp.

3952

Standard Library

CreateRow
Creates a row of the CListView control.
bool CreateRow(
const int index

// index

Parameters
index
[in] Item index.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3953

Standard Library

OnResize
The control "Resize" event handler.
virtual bool OnResize()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3954

Standard Library

OnVScrollShow
The control "VScrollShow" (vertical scroll bar show) event handler.
virtual bool OnVScrollShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3955

Standard Library

OnVScrollHide
The control "VScrollHide" (vertical scroll bar hide) event handler.
virtual bool OnVScrollHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3956

Standard Library

OnScrollLineDown
The control "ScrollLineDown" (vertical scroll line down) event handler.
virtual bool OnScrollLineDown()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3957

Standard Library

OnScrollLineUp
The control "ScrollLineUp" (vertical scroll line up) event handler.
virtual bool OnScrollLineUp()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3958

Standard Library

OnItemClick
The control "ItemClick" (mouse button click on a row) event handler.
virtual bool OnItemClick()
const int

index

// row index

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3959

Standard Library

Redraw
Redraws the control.
bool Redraw()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3960

Standard Library

RowState
Sets the state of the specified row.
bool RowState(
const int

index

const bool select

// index
// state

Parameters
index
[in] Row index.
select
[in] Row state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3961

Standard Library

CheckView
Checks the "visibility" of the specified row.
bool CheckView()

Returned value
true, if the selected row is visible, othewise false.

2000-2014, MetaQuotes Software Corp.

3962

Standard Library

CComboBox
CComboBox is a class of the ComboBox complex control (with dependent controls).

Description
ComboBox consists of a list box, combined with a static control, intended for selection. The list-box
portion of the control may be drop down when the user selects the drop-down arrow next to the control

Declaration
class CComboBox : public CWndContainer

Title
#include <Controls\ComboBox.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Add
AddItem

Adds an item

Settings
ListViewItems

Sets the number of items, shown on the control

Data
Select

Selects current list item by index

SelectByText

Selects current list item by text

SelectByValue

Selects current list item by value

Read-only data
Value

Gets the value of the current list item

Dependent controls
CreateEdit

Creates dependent control (edit)

CreateButton

Creates dependent control (button)

CreateList

Creates dependent control (list view)

Dependent controls event handlers


OnClickEdit

"ClickEdit" event handler (virtual)

2000-2014, MetaQuotes Software Corp.

3963

Standard Library

OnClickButton

"ClickButton" event handler (virtual)

OnChangeList

"ChangeList" event handler (virtual)

Show/Hide
ListShow

Shows the items list

ListHide

Hides the items list

2000-2014, MetaQuotes Software Corp.

3964

Standard Library

Create
Creates new CComboBox control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3965

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3966

Standard Library

AddItem
Adds an item to the control.
bool AddItem(
const string item,

// text

const long

// value

value

Parameters
item
[in] Text.
value=0
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3967

Standard Library

ListViewItems
Sets the number of list items of the CComboBox control.
void ListViewItems(
const int

value

// number of list items

Parameters
value
[in] Number of list items.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3968

Standard Library

Select
Selects current list item by index.
bool Select(
const int index

// index

Parameters
index
[in] Item index.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3969

Standard Library

SelectByText
Selects current list item by text.
bool SelectByText(
const string text

// text

Parameters
text
[in] Text of the item.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3970

Standard Library

SelectByValue
Selects current list item by value.
bool SelectByValue(
const long value

// value

Parameters
value
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3971

Standard Library

Value
Gets the value of the current list item.
long Value()

Returned value
The value of the current list item.

2000-2014, MetaQuotes Software Corp.

3972

Standard Library

CreateEdit
Creates dependent control (edit) of the control.
virtual bool CreateEdit()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3973

Standard Library

CreateButton
Creates dependent control (button).
virtual bool CreateButton()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3974

Standard Library

CreateList
Creates dependent control (list view).
virtual bool CreateList()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3975

Standard Library

OnClickEdit
The control "ClickEdit" (mouse click on the edit) event handler.
virtual bool OnClickEdit()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3976

Standard Library

OnClickButton
The control "ClickButton" (mouse click on the button) event handler.
virtual bool OnClickButton()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3977

Standard Library

OnChangeList
The "ChangeList" (change of the list) event handler.
virtual bool OnChangeList()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3978

Standard Library

ListShow
Shows the items list.
virtual bool ListShow()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3979

Standard Library

ListHide
Hides the items list.
virtual bool ListHide()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3980

Standard Library

CCheckBox
CCheckBox is class of the CheckBox complex control.

Description
CCheckBox control displays a check box that allows the user to select a true or false condition.

Declaration
class CCheckBox : public CWndContainer

Title
#include <Controls\CheckBox.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Properties
Text

Gets/Sets text label, associated with the


control

Color

Gets/Sets color of text label, associated with


the control

State
Checked

Gets/Sets a value indicating whether the


control is checked

Data
Value

Gets/Sets the value associated with the control

Dependent controls
CreateButton

Creates dependent control (button)

CreateLabel

Creates dependent control (label)

Dependent controls event handlers


ClickButton

"ClickButton" event handler (virtual)

ClickLabel

"ClickLabel" event handler (virtual)

2000-2014, MetaQuotes Software Corp.

3981

Standard Library

Create
Creates new CCheckBox control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3982

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3983

Standard Library

Text (Get method)


Gets text of the label, associated with the control.
string Text()

Returned value
Text of the label.

Text (Set method)


Sets text of the label, associated with the control.
bool Text(
const string value

// text

Parameters
value
[in] New text of the label.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3984

Standard Library

Color (Get method)


Gets color of the label, associated with the control.
color Color() const

Returned value
Label color.

Color (Set method)


Sets color of the label, associated with the control.
bool Color(
const color value

// color

Parameters
value
[in] New label color.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3985

Standard Library

Checked (Get method)


Gets state of the control.
bool Checked() const

Returned value
State of the control.

Checked (Set method)


Sets state of the control.
bool Checked(
const bool flag

// state

Parameters
flag
[in] New state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3986

Standard Library

Value (Get method)


Gets the value, associated with the control.
int Value() const

Returned value
The value, associated with the control.

Value (Set method)


Sets the value, associated with the control.
void Value(
const int value

// new value

Parameters
value
[in] New value.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

3987

Standard Library

CreateButton
Creates dependent control (button).
virtual bool CreateButton()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3988

Standard Library

CreateLabel
Creates dependent control (label).
virtual bool CreateLabel()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3989

Standard Library

OnClickButton
The control "ClickButton" (mouse click on the button) event handler.
virtual bool OnClickButton()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3990

Standard Library

OnClickLabel
The control "ClickLabel" (mouse click on the label) event handler.
virtual bool OnClickLabel()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3991

Standard Library

CCheckGroup
CCheckGroup is a class of the CheckGroup complex control (with dependent controls).

Description
CCheckGroup provides the possibility for creation of controls, which allow to display and edit flags.

Declaration
class CCheckGroup : public CWndClient

Title
#include <Controls\CheckGroup.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler for all chart events

Add
AddItem

Adds new item

Read-only data
Value

Gets the value, associated with the control

Dependent controls
CreateButton

Creates new CCheckBox item

Dependent controls event handlers


OnVScrollShow

"Show" event handler (virtual)


dependent control

of

VScroll

OnVScrollHide

"Hide" event handler (virtual)


dependent control

of

VScroll

OnScrollLineDown

"ScrollLineUp" event handler (virtual) of VScroll


dependent control

OnScrollLineUp

"ScrollLineDown" event handler (virtual) of


VScroll dependent control

OnChangeItem

"ChangeItem" event handler (virtual) of VScroll


dependent control

Redraw
Redraw

Redraws the group

2000-2014, MetaQuotes Software Corp.

3992

Standard Library

RowState

Sets the state of the specified item

2000-2014, MetaQuotes Software Corp.

3993

Standard Library

Create
Creates new CCheckGroup control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3994

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3995

Standard Library

AddItem
Adds an item to the control.
bool AddItem(
const string item,

// text

const long

// value

value

Parameters
item
[in] Text.
value=0
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3996

Standard Library

Value
Gets the value, associated with the control.
long Value()

Returned value
The value, associated with the control.
Note
The value depends on state of all items of the CCheckGroup.

2000-2014, MetaQuotes Software Corp.

3997

Standard Library

CreateButton
Creates new CCheckBox class instance on the specified index.
bool CreateButton(
int index

// index

Parameters
index
[in] Index of the new item in the CCheckGroup.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

3998

Standard Library

OnVScrollShow
The control "VScrollShow" (vertical scroll bar show) event handler.
virtual bool OnVScrollShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

3999

Standard Library

OnVScrollHide
The control "VScrollHide" (vertical scroll bar hide) event handler.
virtual bool OnVScrollHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4000

Standard Library

OnScrollLineDown
The control "ScrollLineDown" (vertical scroll line down) event handler.
virtual bool OnScrollLineDown()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4001

Standard Library

OnScrollLineUp
The control "ScrollLineUp" (vertical scroll line up) event handler.
virtual bool OnScrollLineUp()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4002

Standard Library

OnChangeItem
The control "ChangeItem" (item change) event handler.
virtual bool OnChangeItem(
const int index

// index

Parameters
index
[in] Index of the changed item.
Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4003

Standard Library

Redraw
Redraws the control.
bool Redraw()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4004

Standard Library

RowState
Sets the state of the specified item.
bool RowState(
const int

index,

const bool select

// item index
// state

Parameters
index
[in] Item index to change.
select
[in] New state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4005

Standard Library

CRadioButton
CRadioButton is a class of RadioButton complex control.

Description
CRadioButton itself is not used, it used for creation of CRadioGroup items.

Declaration
class CRadioButton : public CWndContainer

Title
#include <Controls\RadioButton.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler for all chart events

Properties
Text

Gets/Sets the text label, associated with the


control

Color

Gets/Sets the color of text label, associated


with the control

State
State

Gets/Sets the state

Dependent controls
CreateButton

Creates button

CreateLabel

Creates label

Dependent controls event handlers


OnClickButton

"ClickButton" event handler (virtual)

OnClickLabel

"ClickLabel" event handler (virtual)

2000-2014, MetaQuotes Software Corp.

4006

Standard Library

Create
Creates new CRadioButton control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4007

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4008

Standard Library

Text (Get method)


Gets text of the label, associated with the control.
string Text()

Returned value
Text of the label.

Text (Set method)


Sets text of the label, associated with the control.
bool Text(
const string value

// text

Parameters
value
[in] New text of the label.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4009

Standard Library

Color (Get method)


Gets color of the label, associated with the control.
color Color() const

Returned value
Label color.

Color (Set method)


Sets color of the label, associated with the control.
bool Color(
const color value

// color

Parameters
value
[in] New label color.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4010

Standard Library

State (Get method)


Gets the button state.
bool State() const

Returned value
Button state.

State (Set method)


Sets the button state.
bool State(
const bool flag

// flag

Parameters
flag
[in] New button state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4011

Standard Library

CreateButton
Creates button.
virtual bool CreateButton()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4012

Standard Library

CreateLabel
Creates label.
virtual bool CreateLabel()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4013

Standard Library

OnClickButton
The control "ClickButton" (mouse click) event handler.
virtual bool OnClickButton()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4014

Standard Library

OnClickLabel
The control "ClickLabel" (mouse click on the label) event handler.
virtual bool OnClickLabel()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4015

Standard Library

CRadioGroup
CRadioGroup is class of the RadioGroup complex control (with dependent controls).

Description
CRadioGroup enables the user to select a single option from a group of choices when paired with other
CRadioButton controls.

Declaration
class CRadioGroup : public CWndClient

Title
#include <Controls\RadioGroup.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Add
AddItem

Adds new item

Read-only data
Value

Gets the value, associated with the control

Dependent controls
CreateButton

Creates new CRadioButton item

Dependent controls event handlers


OnVScrollShow

"Show" event handler (virtual)


dependent control

of

VScroll

OnVScrollHide

"Hide" event handler (virtual)


dependent control

of

VScroll

OnScrollLineDown

"ScrollLineDown" event handler (virtual) of


VScroll dependent control

OnScrollLineUp

"ScrollLineUp" event handler (virtual) of VScroll


dependent control

OnChangeItem

"ChangeItem" event handler (virtual)

Redraw
Redraw

Redraws the group items

2000-2014, MetaQuotes Software Corp.

4016

Standard Library

RowState

Sets the state of the specified item

Select

Selects current item

2000-2014, MetaQuotes Software Corp.

4017

Standard Library

Create
Creates new CRadioGroup control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4018

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4019

Standard Library

AddItem
Adds an item to the control.
bool AddItem(
const string item,

// text

const long

// value

value=0

Parameters
item
[in] Text.
value=0
[in] Value of long type.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4020

Standard Library

Value
Gets the value, associated with the control.
long Value()

Returned value
The value, associated with the control.
Note
The value depends on state of all CRadioButton items of the CRadioGroup control.

2000-2014, MetaQuotes Software Corp.

4021

Standard Library

CreateButton
Creates new CRadioButton class instance on the specified index.
bool CreateButton(
const int index

// index

Parameters
index
[in] Index of the new item in the CRadioGroup.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4022

Standard Library

OnVScrollShow
The control "VScrollShow" (vertical scroll bar show) event handler.
virtual bool OnVScrollShow()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4023

Standard Library

OnVScrollHide
The control "VScrollHide" (vertical scroll bar hide) event handler.
virtual bool OnVScrollHide()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4024

Standard Library

OnScrollLineDown
The control "ScrollLineDown" (vertical scroll line down) event handler.
virtual bool OnScrollLineDown()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4025

Standard Library

OnScrollLineUp
The control "ScrollLineUp" (vertical scroll line up) event handler.
virtual bool OnScrollLineUp()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4026

Standard Library

OnChangeItem
The control "ChangeItem" (item change) event handler.
virtual bool OnChangeItem(
const int index

// index

Parameters
index
[in] Index of the changed item.
Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4027

Standard Library

Redraw
Redraws the control.
bool Redraw()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4028

Standard Library

RowState
Sets the state of the specified item.
bool RowState(
const int

index,

const bool select

// item index
// state

Parameters
index
[in] Item index to change.
select
[in] New state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4029

Standard Library

Select
Selects current item.
void Select(
const int index

// index

Parameters
index
[in] Item index to select.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

4030

Standard Library

CSpinEdit
CSpinEdit is a class of SpinEdit complex control (with dependent controls).

Description
CSpinEdit class is intended for creation of controls, which allows to edit the values of integer type. It
automatically increases data when pressing the upper button, but decreases if pressing the lower
button.

Declaration
class CSpinEdit : public CWndContainer

Title
#include <Controls\SpinEdit.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Properties
MinValue

Gets/Sets the minimal allowed value

MaxValue

Gets/Sets the maximal allowed value

State
Value

Gets/Sets the current value

Dependent controls
CreateEdit

Creates dependent control (edit)

CreateInc

Creates dependent control (increment button)

CreateDec

Creates dependent control (decrement button)

Dependent controls event handlers


OnClickInc

"ClickInc" event handler (virtual)

OnClickDec

"ClickDec" event handler (virtual)

Internal event handlers


OnChangeValue

"ChangeValue" event handler (virtual)

2000-2014, MetaQuotes Software Corp.

4031

Standard Library

Create
Creates new CSpinEdit control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4032

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4033

Standard Library

MinValue (Get method)


Gets the value of "MinValue" property (minimal allowed value) of the control.
int MinValue() const

Returned value
The value of "MinValue" property.

MinValue (Set method)


Sets the value of "MinValue" property (minimal allowed value) of the control.
void MinValue(
const int value

// new value

Parameters
value
[in] New value of "MinValue" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

4034

Standard Library

MaxValue (Get method)


Gets the value of "MaxValue" property (maximal allowed value) of the control.
int MaxValue() const

Returned value
The value of "MaxValue" property.

MaxValue (Set method)


Sets the value of "MaxValue" property (maximal allowed value) of the control.
void MaxValue(
const int value

// new value

Parameters
value
[in] New value of "MaxValue" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

4035

Standard Library

Value (Get method)


Gets the "Value" property (current value) of the control.
int Value() const

Returned value
The "Value" property.

Value (Set method)


Sets the "Value" property (current value) of the control.
void Value(
const int value

// value

Parameters
value
[in] New "Value" property.
Returned value
None.

2000-2014, MetaQuotes Software Corp.

4036

Standard Library

CreateEdit
Creates dependent control (CEdit).
virtual bool CreateEdit()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4037

Standard Library

CreateInc
Creates dependent control (increment button).
virtual bool CreateInc()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4038

Standard Library

CreateDec
Creates dependent control (decrement button).
virtual bool CreateDec()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4039

Standard Library

OnClickInc
The control "ClickInc" (mouse click on the increment button) event handler.
virtual bool OnClickInc()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4040

Standard Library

OnClickDec
The control "ClickDec" (mouse click on the decrement button) event handler.
virtual bool OnClickDec()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4041

Standard Library

OnChangeValue
The control "ChangeValue" event handler.
virtual bool OnChangeValue()

Returned value
true if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4042

Standard Library

CDialog
CDialog is class of the Dialog complex control.

Description
CDialog class is intended to combine the controls with different functions in the group.

Declaration
class CDialog : public CWndContainer

Title
#include <Controls\Dialog.mqh>

Class Methods
Create
Create

Creates control

Chart event handlers


OnEvent

Event handler of all chart events

Properties
Caption

Gets/Sets the value of the "Caption" property

Add
Add

Adds control to the client area

Dependent controls
CreateWhiteBorder

Creates dependent control (white border)

CreateBackground

Creates dependent control (background)

CreateCaption

Creates dependent control (caption)

CreateButtonClose

Creates dependent control (close button)

CreateClientArea

Creates dependent control (client area)

Dependent controls event handlers


OnClickCaption

"ClickCaption" event handler

OnClickButtonClose

"ClickButtonClose" event handler

Access to client area


ClientAreaVisible

Sets a value indicating whether the client area


is visible

ClientAreaLeft

Gets X coordinate of the upper-left corner of


the control client area

2000-2014, MetaQuotes Software Corp.

4043

Standard Library

ClientAreaTop

Gets Y coordinate of the upper-left corner of


the control client area

ClientAreaRight

Gets X coordinate of the lower-right corner of


the control client area

ClientAreaBottom

Gets Y coordinate of the lower-right corner of


the control client area

ClientAreaWidth

Gets the client area width

ClientAreaHeight

Gets the client area height

Drag event handlers


OnDialogDragStart

"DialogDragStart" event handler (virtual)

OnDialogDragProcess

"DialogDragProcess" event handler (virtual)

OnDialogDragEnd

"DialogDragEnd" event handler (virtual)

2000-2014, MetaQuotes Software Corp.

4044

Standard Library

Create
Creates new CDialog control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4045

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4046

Standard Library

Caption (Get method)


Gets the "Caption" property of the CDialog control.
string MinValue() const

Returned value
The "Caption" property.

Caption (Set method)


Sets the "Caption" property of the CDialog control.
bool Caption(
const string text

// text

Parameters
text
[in] New value of "Caption" property.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4047

Standard Library

Add
Adds control to the client area by pointer.
bool Add(
CWnd *control,

// pointer

Parameters
control
[in] Pointer to control.
Returned value
true if successful, otherwise false.

Add
Adds control to the client area by reference.
bool Add(
CWnd &control,

// reference

Parameters
control
[in] Reference to control.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4048

Standard Library

CreateWhiteBorder
Creates dependent control (white border).
virtual bool CreateWhiteBorder()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4049

Standard Library

CreateBackground
Creates dependent control (background).
virtual bool CreateBackground()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4050

Standard Library

CreateCaption
Creates dependent control (caption).
virtual bool CreateCaption()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4051

Standard Library

CreateButtonClose
Creates dependent control (close button)
virtual bool CreateButtonClose()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4052

Standard Library

CreateClientArea
Creates dependent control (client area).
virtual bool CreateClientArea()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4053

Standard Library

OnClickCaption
The control "ClickCaption" event handler.
virtual bool OnClickCaption()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4054

Standard Library

OnClickButtonClose
The control "ClickButtonClose" event handler.
virtual bool OnClickButtonClose()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4055

Standard Library

ClientAreaVisible
Sets a flag indicating whether the client area is visible.
bool ClientAreaVisible(
const bool visible

// visibility flag

Parameters
visible
[in] Visibility flag.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4056

Standard Library

ClientAreaLeft
Gets X coordinate of the upper-left corner of the control client area.
int ClientAreaLeft()

Returned value
The X coordinate of the upper-left corner of the control client area.

2000-2014, MetaQuotes Software Corp.

4057

Standard Library

ClientAreaTop
Gets Y coordinate of the upper-left corner of the control client area.
int ClientAreaTop()

Returned value
The Y coordinate of the upper-left corner of the control client area.

2000-2014, MetaQuotes Software Corp.

4058

Standard Library

ClientAreaRight
Gets X coordinate of the lower-right corner of the control client area.
int ClientAreaTop()

Returned value
The X coordinate of the lower-right corner of the control client area.

2000-2014, MetaQuotes Software Corp.

4059

Standard Library

ClientAreaBottom
Gets Y coordinate of the lower-right corner of the control client area.
int ClientAreaBottom()

Returned value
The Y coordinate of the lower-right corner of the control client area.

2000-2014, MetaQuotes Software Corp.

4060

Standard Library

ClientAreaWidth
Gets the width of the control client area.
int ClientAreaWidth()

Returned value
The width of the client area.

2000-2014, MetaQuotes Software Corp.

4061

Standard Library

ClientAreaHeight
Gets the height of the control client area.
int ClientAreaHeight()

Returned value
The height of the control client area.

2000-2014, MetaQuotes Software Corp.

4062

Standard Library

OnDialogDragStart
The control "DialogDragStart" event handler.
virtual bool OnDialogDragStart()

Returned value
true if the event has been processed, otherwise false.
Note
The "DialogDragStart" event occurs at start of the drag of the control.

2000-2014, MetaQuotes Software Corp.

4063

Standard Library

OnDialogDragProcess
The control "DialogDragProcess" event handler.
virtual bool OnDialogDragProcess()

Returned value
true if the event has been processed, otherwise false.
Note
The "DialogDragProcess" event occurs when the control is dragged.

2000-2014, MetaQuotes Software Corp.

4064

Standard Library

OnDialogDragEnd
The control "DialogDragEnd" event handler.
virtual bool OnDialogDragEnd()

Returned value
true if the event has been processed, otherwise false.
Note
The "DialogDragEnd" event occurs at the end of the drag of the control.

2000-2014, MetaQuotes Software Corp.

4065

Standard Library

CAppDialog
CAppDialog is a class of Application Dialog complex control (with dependent controls).

Description
CAppDialog class is intended to combine the controls with different functions in the group inside the
MQL5 program.

Declaration
class CAppDialog : public CDialog

Title
#include <Controls\Dialog.mqh>

Class Methods
Create and destroy
Create

Creates control

Destroy

Destroys control

Events processing
OnEvent

Event handler of all chart events

Run
Run

Runs control

Chart events processing


ChartEvent

Event handler of all chart events

Settings
Minimized

Sets a value indicating whether the control is


minimized

Save/Load
SaveIniFile

Saves the control state to file

LoadIniFile

Loads the control state from file

IniFileName

Sets the file name for loading/saving the


control state

IniFileExt

Sets the file extension for loading/saving the


control state

Initialization
CreateCommon

Common initialization method

2000-2014, MetaQuotes Software Corp.

4066

Standard Library

CreateExpert

Initialization method for working in Expert


Advisors

CreateIndicator

Initialization method for working in indicators

Dependent controls
CreateButtonMinMax

Creates
dependent
maximize buttons)

controls

(minimize/

Dependent controls event handlers


OnClickButtonClose

"ClickButtonClose" event handler (virtual)

OnClickButtonMinMax

"ClickButtonMinMax" event handler (virtual)

External events
OnAnotherApplicationClose

Event handler of external events (virtual)

Methods
Rebound

Sets new coordinates of the control using CRect


class coordinates

Minimize

Shows the control in the minimized state

Maximize

Shows the control in the maximized (restored)


state

CreateInstanceId

Creates an unique Id for the names of the


control objects

ProgramName

Gets the name of MQL5 program

SubwinOff

Get the Y offset of the control subwindow

2000-2014, MetaQuotes Software Corp.

4067

Standard Library

Create
Creates new CAppDialog control.
virtual bool Create(
const long

chart,

// chart ID

const string name,

// name

const int

subwin,

// chart subwindow

const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4068

Standard Library

Destroy
Destroys control.
virtual bool Destroy()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4069

Standard Library

OnEvent
Chart event handler.
virtual bool OnEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4070

Standard Library

Run
Runs control.
bool Run()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4071

Standard Library

ChartEvent
Chart event handler.
virtual bool ChartEvent(
const int

id,

// ID

const long&

lparam,

// event parameter of long type

const double& dparam,

// event parameter of double type

const string& sparam

// event parameter of string type

Parameters
id
[in] Event ID.
lparam
[in] Event parameter of long type, passed by reference.
dparam
[in] Event parameter of double type, passed by reference.
sparam
[in] Event parameter of string type, passed by reference.
Returned value
true - if the event has been processed, otherwise false.

2000-2014, MetaQuotes Software Corp.

4072

Standard Library

Minimized
Sets the value of "Minimized" property of the control.
bool Minimized(
const bool flag

// state

Parameters
flag
[in] New state.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4073

Standard Library

SaveIniFile
Saves the control state to file.
void SaveIniFile()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4074

Standard Library

LoadIniFile
Loads the control state from file.
void LoadIniFile()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4075

Standard Library

IniFileName
Sets the file name for loading/saving the control state.
virtual string IniFileName()

const

Returned value
File name for loading/saving of the control state.
Note
The file name include the name of the Expert Advisor/indicator and working symbol, on which MQL5
program is launched.

2000-2014, MetaQuotes Software Corp.

4076

Standard Library

IniFileExt
Sets the file extension for loading/saving the control state.
virtual string IniFileExt()

const

Returned value
File extension, used for loading/saving of the control state.

2000-2014, MetaQuotes Software Corp.

4077

Standard Library

CreateCommon
Common initialization method.
bool CreateCommon(
const long

chart,

// chart ID

const string name,

// name

const int

// chart subwindow

subwin,

Parameters
chart
[in] chart ID.
name
[in] Unique name of the control.
subwin
[in] Chart subwindow.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4078

Standard Library

CreateExpert
Initialization method for working in Expert Advisors.
bool CreateExpert(
const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4079

Standard Library

CreateIndicator
Initialization method for working in indicators.
bool CreateIndicator(
const int

x1,

// x1 coordinate

const int

y1,

// y1 coordinate

const int

x2,

// x2 coordinate

const int

y2

// y2 coordinate

Parameters
x1
[in] X coordinate of the upper left corner.
y1
[in] Y coordinate of the upper left corner.
x2
[in] X coordinate of the lower right corner.
y2
[in] Y coordinate of the lower right corner.
Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4080

Standard Library

CreateButtonMinMax
Creates dependent controls (minimize/maximize buttons).
virtual void CreateButtonMinMax()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

4081

Standard Library

OnClickButtonClose
The control "ClickButtonClose" (mouse click on close button) event handler.
virtual void OnClickButtonClose()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

4082

Standard Library

OnClickButtonMinMax
The control "ClickButtonMinMax" (mouse click on minimize/maximize button) event handler.
virtual void OnClickButtonClose()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

4083

Standard Library

OnAnotherApplicationClose
Event handler of external events.
virtual void OnAnotherApplicationClose()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

4084

Standard Library

Rebound
Sets new coordinates of the control using CRect class coordinates.
bool Rebound(
const & CRect rect

// CRect class

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4085

Standard Library

Minimize
Shows the control in the minimized state.
virtual void Minimize()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4086

Standard Library

Maximize
Shows the control in the maximized (restored) state.
virtual void Maximize()

Returned value
true if successful, otherwise false.

2000-2014, MetaQuotes Software Corp.

4087

Standard Library

CreateInstanceId
Creates an unique Id for the names of the control objects.
string CreateInstanceId()

Returned value
Prefix for the object names.

2000-2014, MetaQuotes Software Corp.

4088

Standard Library

ProgramName
Gets the name of the MQL5 program.
string ProgramName()

Returned value
Name of the MQL5 program.

2000-2014, MetaQuotes Software Corp.

4089

Standard Library

SubwinOff
Get the Y offset of the control subwindow.
void SubwinOff()

Returned value
None.

2000-2014, MetaQuotes Software Corp.

4090

Migrando do MQL4

Migrando da linguagem de programao MQL4 para MQL5


MQL5 a evoluo do seu antecessor - a linguagem de programao MQL4, onde inmeros
indicadores, scripts e Expert Advisors foram escritos. Apesar do fato de que a nova linguagem de
programao grandemente compatvel com a linguagem da gerao anterior, ainda existem algumas
diferenas entre as linguagens. E quando migrar de programas, essas diferenas devem ser
observadas.
Esta seo contm informaes destinadas a facilitar a adaptao dos cdigos para a nova linguagem
MQL5 ao programadores que conhecem MQL4.
Em primeiro lugar, deve-se observar:
A nova linguagem no contm funes start(), init() e deinit().
No h limite para o nmero de buffers de indicador.
DLLs so carregadas imediatamente aps o carregamento de um Expert Advisor (ou qualquer outro
programa MQL5).
Verificao das condies lgicas reduzida.
Quando os limites de um matriz forem ultrapassados, o desempenho em curso finalizado
(criticamente - com a sada de um erro).
Originrios de operadores em C++.
A linguagem oferece o tipo de converso implcita (mesmo de string para um nmero).
As variveis locais no so inicializados automaticamente (exceto para strings).
Matrizes de local comum so excludas automaticamente.

Funes Especiais init, start e deinit


A linguagem MQL4 contm apenas estas trs funes pr-definidas que so usadas no indicador, script
ou Expert Advisor (no contando a incluso dos arquivos *.mqh e dos arquivos de biblioteca). Em
MQL5 no existem estas funes, mas foram criadas funes anlogas. A tabela mostra a
correspondncia aproximada das funes.
MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

Funes OnInit e OnDeinit desempenham o mesmo papel que as funes init e deinit em MQL4 - elas
so projetadas para encontrar o cdigo, que ser realizado durante a inicializao e finalizao dos
programas MQL5. Voc pode simplesmente renomear estas funes em conformidade, ou deix-las
como esto, mas deve adicionar chamadas dessas funes em lugares correspondentes.
Exemplo:
void OnInit()
{
//--- Funo nomeada durante a inicializao

2000-2014, MetaQuotes Software Corp.

4091

Migrando do MQL4
init();
}
void OnDeinit(const int reason)
{
//--- Funo nomeada durante a desinicializao
deinit();
//--}

A funo start substituda por OnStart apenas em scripts. Em Expert Advisors e indicadores ser
renomeado para OnTick e OnCalculate, respectivamente. O cdigo que est para ser executado
durante a operao do programa MQL5 ser centrado nestas trs funes:
programa mql5

principal funo

script

OnStart

indicador

OnCalculate

Expert Advisor

OnTick

Se o cdigo do indicador ou script no contm a funo principal, ou o nome da funo diferente,


esta funo no ser executada. Isso significa que se o cdigo fonte de um script no contm OnStart,
esse cdigo ser compilado como um Expert Advisor.
Se um cdigo de indicador no contm a funo OnCalculate, a compilao deste indicador ser
impossvel.

Variveis Predefinidas
Em MQL5 no existem as variveis pr-definidas como Ask, Bid, Bars. As variveis de Point e Digits
tm uma grafia ligeiramente diferente:
MQL4

MQL5

Digits

_Digits

Point

_Point
_LastError
_Period
_Symbol
_StopFlag
_UninitReason

Acesso as Timeseries
Em MQL5 no existem as timeseries predefinidas como Open[], High[], Low[], Close[], Volume[] e
Time[]. A profundidade necessria de uma timeseries agora pode ser definida atravs das funes

2000-2014, MetaQuotes Software Corp.

4092

Migrando do MQL4
correspondentes para acessar as timeseries.

Expert Advisors
Expert Advisors em MQL5 no requerem a presena obrigatria de funes que manipulam os eventos
de recebimento de um novo tick - OnTick, com realizado em MQL4 (a funo de arranque em MQL4
executado quando um novo tick recebido). Em MQL5, os Expert Advisors podem conter funes prdefinidas do manipulador de vrios tipos de eventos:
OnTick recebimento de um novo tick;
OnTimer evento de timer;
OnTrade - evento de trade;
OnChartEvent eventos de entrada do teclado e mouse, eventos de um objeto grfico em
movimento, evento de edio de texto completo na entrada da etiqueta do objeto LabelEdit;
OnBookEvent evento do status de mudana da Profundidade do Mercado.

Indicadores Customizados
Em MQL4, o nmero de buffers de indicador limitado e no pode ultrapassar a 8. Em MQL5 no
existem estas limitaes, mas deve ser lembrado que cada buffer de indicador requer a alocao de
uma certa parte da memria para a sua localizao no terminal, por isto esta nova possibilidade no
deve ser utilizada abusivamente.
MQL4 oferece apenas 6 tipos de plotagem de indicadores personalizados, enquanto MQL5 agora
oferece 18 estilos de desenho. Os nomes dos tipos de desenho no mudaram, mas a ideologia da
representao grfica dos indicadores mudou significativamente.
A direo da indexao nos buffers de indicador tambm diferente. Por padro, em MQL5 todos os
buffers de indicador tem o comportamento de matrizes comuns, ou seja, o elemento 0 (zero) indexado
o mais antigo no histrico e, como os ndices aumentam, passamos dos dados mais antigos para os
mais recentes.
A nica funo para trabalhar com indicadores personalizados que foi preservado da linguagem MQL4
a funo SetIndexBuffer, mas para ser utilizada; agora deve ser especificado o tipo de dado a ser
armazenado em um matriz, ligada ao buffer do indicador.
As propriedades de indicadores personalizados tambm foram modificadas e ampliadas. Novas funes
para acesso a timeseries foram adicionadas, de modo que o algoritmo de clculo total deve ser
reexaminado.

Graphical Objects
O nmero de objetos grficos em MQL5 foi aumentado significativamente. Alm disso, objetos
grficos agora so posicionados no grfico com a preciso de um segundo em qualquer perodo de
tempo - agora objetos de pontos de ancoragem no so arredondados para o tempo de abertura da
barra de preo no grfico em curso.
Agora para Setas, Textos e Objetos de Etiqueta voc pode especificar mtodos de vinculao, e para a
Etiqueta, Boto, Grfico, Etiqueta Bitmap e Editar, os objetos podem ser configurados no canto do
grfico onde um objeto est ligado.

2000-2014, MetaQuotes Software Corp.

You might also like