-
Notifications
You must be signed in to change notification settings - Fork 48
/
Aula 6 - Indicador VWAP Metatrader.mq5
167 lines (137 loc) · 11.9 KB
/
Aula 6 - Indicador VWAP Metatrader.mq5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//+------------------------------------------------------------------+
//|Aula 6 - Indicadores VWAP |
//|Universidade de Brasília - UnB |
//|Campus UnB Gama |
//|Disciplina: Processamento Digital de Sinais Financeiros |
//|Prof. Marcelino Monteiro de Andrade Dr. |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Indicator information |
//+------------------------------------------------------------------+
#property copyright "Marcelino Andrade / [email protected]"
#property version "2.00"
#property description "Implementa o indicador 'VWAP'"
#property description "The real trial version - 31/12/2019"
//+------------------------------------------------------------------+
//| Indicator #property |
//+------------------------------------------------------------------+
// Gráfico do indicador sobreposto ao preço
#property indicator_chart_window
// Quatro buffers operacionais,sendo um de cor
#property indicator_buffers 4
// Quantidade de gráficos
#property indicator_plots 1
// Nome do indicador no gráfico
#property indicator_label1 "VWAP"
// Exemplos: DRAW_HISTOGRAM, DRAW_LINE
#property indicator_type1 DRAW_COLOR_LINE
// Exemplos: clrGreen,clrOrange,clrDeepPink
#property indicator_color1 clrRed,clrBlue
// Exemplos: STYLE_SOLID, STYLE_DOT
#property indicator_style1 STYLE_DASHDOT
// Espessura do indicador
#property indicator_width1 2
//#include <Math\Stat\Math.mqh>
// Período VWAP
input uint VWAPPeriod=5;
// Array dinâmico do Preço
double PriceBuffer[];
// Array dinâmico do Volume
double VolumeBuffer[];
// Array dinâmico de Saída
double VWAPBuffer[];
// Array dinâmico de Cores do Indicador
double VWAPColor[];
//Permissões
const string allowed_names[] = {"Tester","MONTEIRO DE ANDRADE Marcelino","XXXXXX"};
int password_status = -1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// vinculando buffer 0 ao array dinâmico VWAPBuffer como saida para o gŕafico
SetIndexBuffer(0,VWAPBuffer,INDICATOR_DATA);
// vinculando buffer 0 ao array dinâmico PriceBuffer para calculo intermediário
SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);
// vinculando buffer 0 ao array dinâmico VolumeBuffer para calculo intermediário
SetIndexBuffer(3,VolumeBuffer,INDICATOR_CALCULATIONS);
// vinculando buffer 0 ao array dinâmico VWAPColor para cores
SetIndexBuffer(1,VWAPColor,INDICATOR_COLOR_INDEX);
//Precisão de desenho de valores do indicador
IndicatorSetInteger(INDICATOR_DIGITS,4);
// Autenticação do Indicador
datetime expire_date = D'31.12.2019'; //<-- hard coded datetime
if (TimeCurrent() >= expire_date)
{
Alert ("The real trial version has been expired!");
return INIT_FAILED;
}
string name = AccountInfoString(ACCOUNT_NAME);
string account = IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));
for (int i=0; i<ArraySize(allowed_names); i++)
if (name == allowed_names[i] || account == allowed_names[i])
{
password_status = 1;
Comment(StringFormat("Autenticado: %s",name));
break;
}
if (password_status == -1)
{
Alert ("Nome não autenticado.");
return INIT_FAILED;
}
if(VWAPPeriod==0)
{
return INIT_FAILED;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
if(prev_calculated==0)
{
// Inicia Array/Buffer Vazio
ArrayInitialize(VWAPBuffer,EMPTY_VALUE);
ArrayInitialize(PriceBuffer,EMPTY_VALUE);
ArrayInitialize(VolumeBuffer,EMPTY_VALUE);
}
PriceBuffer[0]=0.0;
VolumeBuffer[0]=1.0;
//Atualiza a cada barra o buffer de preço e volumne
for(int i=MathMax(1,prev_calculated); i<rates_total && !IsStopped(); i++)
{
PriceBuffer[i]=NormalizeDouble((close[i]+high[i]+low[i])/3,2);
VolumeBuffer[i]=tick_volume[i];
// Print("A=",i, " B=",PriceBuffer[i], " C=",VolumeBuffer[i]);
}
// Iniciando o intervalo de varredura acima do periodo do indicador
for(int p=MathMax(VWAPPeriod+1,prev_calculated); p<rates_total && !IsStopped(); p++)
{
// Print("A=",p, " B=",prev_calculated, " C=",rates_total);
double sumPrice=0,sumVol=0;
// Calculando o Indicador
for(int q=0; q<VWAPPeriod && p-q>=0; q++)
{
sumPrice += PriceBuffer[p-q]*VolumeBuffer[p-q];
sumVol += VolumeBuffer[p-q];
}
// Resultado do Indicador e cores no Gráfico
VWAPBuffer[p]= sumPrice/sumVol;
VWAPColor[p]=(VWAPBuffer[p]-VWAPBuffer[p-1]>0 ? 1: 0);
}
return(rates_total-1);
}
//+------------------------------------------------------------------+