Вы находитесь на странице: 1из 27

Insper Instituto de Ensino e Pesquisa

Faculdade de Economia e Administrao

Rebeca Nicolas Pinheiro

Usando VBA para calcular estocstico da ao em tempo real

So Paulo
2010

Rebeca Nicolas Pinheiro

Estocstico On-Line - Negociao Intraday

Trabalho final de sistema de informao.


Prof, Dr, Marco Antonio Leonel Caetano

So Paulo
2010
2

Pinheiro,Rebeca Nicolas
Estocstico On-Line- Negociao intraday/Rebeca Nicolas
Pinheiro So Paulo: Insper, 2010.
67 f.
Monografia: Faculdade de Economia e Administrao. Insper
Instituto de Ensino e Pesquisa.
Orientador: Prof. Dr. Marco Antonio Leonel Caetano
1.Sistema de Informao 2. VBA

Rebeca Nicolas Pinheiro

Estocstico On-line - Negociao intraday

Trabalho apresentado Faculdade de Economia do Insper, como parte dos requisitos


para concluso do curso de Sistema de informao.

Resumo

Pinheiro, Rebeca Nicolas. Estocstico On-Line Negociao Intraday. So Paulo, 2010. 67p.
Faculdade de Economia e Administrao. Insper Instituto de Ensino e Pesquisa.

Neste trabalho foi desenvolvido um algortimo para buscar os dados, da ao e do tempo,


desejados e a partir destes calcular o valor estocstico, usando como base do calculo a
frmula Estocstico = 100*(Fech Min)/(Max Min) para grupos de 15 dados seguidos.
Dentro da planilha userform revelado o valor do estocstico e a recomendao do programa
sobre a ao.
A programao disponibiliza tambm um boto que calcula e reproduz na planilha do excel o
grfico da ao e o grfico do estocstico caso requisitado.
Palavras-chave: Ao,Grfico Estocstico,Grfico da Ao.

Sumrio

1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
2 Programa impresso em VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1 Boto iniciar programa ---------------------------------------------------------------------------14
2.2 Boto iniciar aquisio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
2.3 boto parar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
2.4 Boto gfico ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..21
2.5 Boto grfico estocstico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Exemplo do programa em funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
3.1 venda
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 compra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4Concluso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
5Referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1 Introduo

A programao em VBA uma possibilidade de ganhos para quem no possui muito


conhecimento no mercado de aes. Ela possibilita que algoritmos previamente programados
e testados auxiliem o usurio na compra e venda de sua ao proporcionando constantes
ganhos. Este programa foi elaborado a partir de um estudo sobre estocstico e revela que a
ao deve ser vendida quando o fechamento para um conjunto de quinze dados aproxime-se
do Max desse conjunto e deve ser comprada quando o fechamento se aproxima do mnimo do
mesmo. Isso porque comprar no mnimo e vender no mximo proporciona constantes ganhos,
que se somados ao final do dia podem formar um montante relevante.
O programa muito fcil de usar, e o usurio precisa saber apenas o nome da ao que deseja
consultar e o tempo em que deseja adquirir novos dados.
A planilha do Excel contar com um boto para iniciar o programa, o qual , quando clicado,
levar planilha userform. A planilha userform trar espao para que o usurio digite o
cdigo da ao e o tempo desejado. Aps isso o usurio clicar no boto iniciar aquisio e o
depois de selecionar 15 dados o programa indica na planilha userform se o usurio deve
vender, comprar ou manter a ao. Ser disponibilizado, tambm na planilha userform, botes
para a construo do grfico da ao e do grfico estocstico, os grfico sero reproduzidos na
planilha do Excel quando os respectivos botes forem clicados.

2.Programa impresso em VBA


Public proxlinha As Long
Public h As Single
Public g As Integer
Public linhafinal As Long

Sub CaixaDeTexto1_Clique()
UserForm1.Show
End Sub

Sub CapturaDados()
Dim x As Single
Dim r As Integer
Dim e As Integer
Dim min As Single
Dim max As Single
Dim fech As Single
Dim WSD As Worksheet
Dim WSW As Worksheet
Dim connectstring As String
Dim linharesfinal As Long
Dim i As Integer
Dim j As Integer
x=3
If h = 1 Then
8

Set WSD = Worksheets("portfolio")


Set WSW = Worksheets("workspace")
WaitSec = UserForm1.TextBox1.Value
NameProc = "Capturadados"
linhafinal = WSD.Cells(65536, 1).End(xlUp).Row
proxlinha = linhafinal + 1
Cells(2, 1) = UserForm1.TextBox3
connectstring = "URL;http://www.investshop.com.br/aspx/PopUpQuotes.aspx?Papel=" &
UserForm1.TextBox3.Text

For Each QT In WSW.QueryTables


QT.Delete
Next QT
Set QT = WSW.QueryTables.Add(Connection:=connectstring,
Destination:=WSW.Range("$A$1"))
With QT
.Name = "portfolio"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
9

.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Worksheets("portfolio").Cells(proxlinha, 1) = Worksheets("workspace").Cells(6, 1).Value *
1
linharesfinal = WSW.Cells(65536, 1).End(xlUp).Row
For i = 1 To linharesfinal
For j = 1 To 20
WSW.Cells(i, j).EntireRow.Delete
Next j
Next i

NextTime = Time + TimeSerial(0, 0, WaitSec)


'roda o relogio a cada prxima atualizao
Application.OnTime earliesttime:=NextTime, procedure:="capturadados"
Application.Wait (Now + TimeValue("0:00:05"))
If proxlinha >= 19 Then
max = 0
10

min = 100
r=0
For r = proxlinha - 16 To proxlinha - 1
If Cells(r, 1) > max Then
max = Cells(r, 1)
ElseIf Cells(r, 1) < min Then
min = Cells(r, 1)
End If

Next r
fech = Cells(proxlinha - 1, 1)
Cells(proxlinha - 1, 4) = fech
Cells(proxlinha - 1, 3) = min
Cells(proxlinha - 1, 2) = max
If max = min Then
Cells(proxlinha - 1, 2) = "ao no oscilou nos 15 dados anteriores."
Else
est = 100 * ((fech - min) / (max - min))
Cells(proxlinha - 1, 5) = est
UserForm1.TextBox4 = est
If est >= 80 Then
Cells(proxlinha - 1, 6) = "vender"
UserForm1.TextBox5 = "vender"
ElseIf est <= 20 Then
Cells(proxlinha - 1, 6) = "comprar"
UserForm1.TextBox5 = "comprar"
Else
Cells(proxlinha - 1, 6) = "manter"
UserForm1.TextBox5 = "manter"
11

End If
End If

End If
End If
End Sub

Sub graficoacao()
Dim a As Single

If h = 3 Then
a = Worksheets("portfolio").Cells(65536, 1).End(xlUp).Row
Range("A3").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(3, 1), Cells(a, 1))
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.ChartArea.Copy
ActiveChart.Parent.Delete
Range("B2").Select
ActiveSheet.Paste
End If
End Sub
Sub graficoestoc()
Dim a As Single
12

If h = 4 Then
a = Worksheets("portfolio").Cells(65536, 1).End(xlUp).Row
Range("E18").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(18, 5), Cells(a, 5))
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.ChartArea.Copy
ActiveChart.Parent.Delete
Range("J2").Select
ActiveSheet.Paste
End If
End Sub
Private Sub CommandButton1_Click()
h=1
Call CapturaDados
End Sub
Private Sub CommandButton2_Click()
h=2
Call CapturaDados
End Sub
Private Sub CommandButton3_Click()
h=3
13

Call graficoacao
End Sub
Private Sub CommandButton4_Click()
h=4
Call graficoestoc
End Sub
2.1- Boto iniciar programa

Figura1. Boto iniciar programa


O boto iniciar programa disposto na planilha do Excel abre a planilha userform(estampado a
seguir) seguindo o comando a baixo:
Sub CaixaDeTexto1_Clique()
UserForm1.Show
End Sub

14

Figura2. Planilha userform


Planilha userform

2.2. boto iniciar aquisio

Figura3. Boto iniciar aquisio

15

Aps indicar no textbox1 o tempo de aquisio em que se deseja puxar os dados, e indicar no
tezxtbox2 a ao que deseja consultar . o usurio clica no boto iniciar aquisio, que remete
ao comando descrito a seguir:
Private Sub CommandButton1_Click()
h=1
Call CapturaDados
End Sub
E este remete ao programa captura dados pelo caal :
Sub CapturaDados()
Dim x As Single
Dim r As Integer
Dim e As Integer
Dim min As Single
Dim max As Single
Dim fech As Single
Dim WSD As Worksheet
Dim WSW As Worksheet
Dim connectstring As String
Dim linharesfinal As Long
Dim i As Integer
Dim j As Integer
x= 3
If h = 1 Then
( A FUNO IF ADICIONADA A ESSE COMANDO IMPE UMA CONDIO PARA
QUE O PROGRAMA RODE , ASSIM AO ACIONAR O BOTAO INICIAR AQUISIO
ELE IMPES H=1 E REMETE SUB CAPTURADADOS())
Set WSD = Worksheets("portfolio")
16

Set WSW = Worksheets("workspace")


WaitSec = UserForm1.TextBox1.Value
(WAITSEC RECEBE O TEXTBOX1 QUE ONDE EST INDICADO O TEMPO DE
AQUISIO)
NameProc = "Capturadados"
linhafinal = WSD.Cells(65536, 1).End(xlUp).Row
(ESTE COMANDO CALCULA QUAL A ULTIMA LINHA PREENCHIDA DA COLUNA
A)
proxlinha = linhafinal + 1
Cells(2, 1) = UserForm1.TextBox3
(NO TEXTBOX 3 ENCONTR-SE A AO DESEJADA, OU SEJA A LINHA 2 COLUNA 1
INDICAR NA PLANILHA O NOME DA AO CONSULTADA)
connectstring = "URL;http://www.investshop.com.br/aspx/PopUpQuotes.aspx?Papel=" &
UserForm1.TextBox3.Text
(ESTE COMANDO CONECTA O PROGRAMA AO SITE INVESTSHOP E SELECIONA
OS DADOS DA AO INDICADA NO TEXTBOX3 )
For Each QT In WSW.QueryTables
QT.Delete
Next QT
Set QT = WSW.QueryTables.Add(Connection:=connectstring,
Destination:=WSW.Range("$A$1"))
With QT
.Name = "portfolio"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
17

.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Worksheets("portfolio").Cells(proxlinha, 1) = Worksheets("workspace").Cells(6, 1).Value *
1
(ESTE COMANDO FAZ COM QUE A PLANILHA 1 , PORTIFLIO, RECEBA NA
COLUNA A O VALOR DA AO APRESENTADO NA PLANILHA 2, WORKSPACE, )
linharesfinal = WSW.Cells(65536, 1).End(xlUp).Row
For i = 1 To linharesfinal
For j = 1 To 20
WSW.Cells(i, j).EntireRow.Delete
Next j
Next i
(DEPOIS DE ADICIONADO A PLANILHA PORTFLIO OS VALORES DA AO J
NO TEM MAIS UTILIDADE NA PLANILHA WORKSPACE E ASSIM ESTE
COMANDO DELETA TUDO QUE H NA PLANILHA WORKSPACE)
NextTime = Time + TimeSerial(0, 0, WaitSec)
'roda o relogio a cada prxima atualizao
18

Application.OnTime earliesttime:=NextTime, procedure:="capturadados"


Application.Wait (Now + TimeValue("0:00:05"))
If proxlinha >= 19 Then
Agora passaremos a calcular o estocstico , apenas quando a proximalinha>19 , pois assim
havero 15 dados disponveis para o calculo)
max = 0
min = 100
r=0
(joga-se valores aleatrios para min e Max para futura comparao)
For r = proxlinha - 16 To proxlinha - 1
(a prxima linha menos 16 ser o 1 dos 15 dados da anlise)
If Cells(r, 1) > max Then
max = Cells(r, 1)
ElseIf Cells(r, 1) < min Then
min = Cells(r, 1)
End If
(algoritimo bsico para calculo de mximo e mnimo)
Next r
fech = Cells(proxlinha - 1, 1)
Cells(proxlinha - 1, 4) = fech
Cells(proxlinha - 1, 3) = min
Cells(proxlinha - 1, 2) = max
If max = min Then
Cells(proxlinha - 1, 2) = "ao no oscilou nos 15 dados anteriores."
Else
est = 100 * ((fech - min) / (max - min))
Cells(proxlinha - 1, 5) = est
UserForm1.TextBox4 = est
19

If est >= 80 Then


(Segundo pesquisa as linhas bases para o estocstico so 80 e 20 , sendo assim qndo o
estocstico passa 80 significa que entrou na zona de valorizao e deve ser vendido, os
prximos comandos indicam isso nas clulas e no userform)
Cells(proxlinha - 1, 6) = "vender"
UserForm1.TextBox5 = "vender"
ElseIf est <= 20 Then
(se o estocstico menos que 20 ele entrou na xona de desvalorizao e deve ser comprado)
Cells(proxlinha - 1, 6) = "comprar"
UserForm1.TextBox5 = "comprar"
Else
(se estiver entre 20 e 80 significa que no est no momento de vender nem comprar a ao)
Cells(proxlinha - 1, 6) = "manter"
UserForm1.TextBox5 = "manter"
End If
End If

End If
End If
End Sub
2.3 boto parar

Figura4.boto parar
Ao clicar no boto parar a private sub a seguir ser acionada
Private Sub CommandButton2_Click()
h=2
20

Call CapturaDados
End Sub
Este comando denomina o h =2 , sendo assim a condio IF para o programa inicial rodar
desativada , pois indica que hdeve ser igual a 1 para o programa comear a rodar.
2.4 boto grfico da ao

Figura5. Boto grfico da ao


Private Sub CommandButton3_Click()
h=3
Call graficoacao
End Sub
O boto grfico da ao remete ao comando indicado acima que ao assumir h=3 ativa a
funo IF da sub graficoao descrita abaixo
Sub graficoacao()
Dim a As Single

If h = 3 Then
a = Worksheets("portfolio").Cells(65536, 1).End(xlUp).Row
( este commando faz com que a macro encontre qual o nmero da ultima clula preenchida e
o chame de a)
Range("A3").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(3, 1), Cells(a, 1))
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.ChartArea.Copy
ActiveChart.Parent.Delete
Range("B2").Select
21

ActiveSheet.Paste
(A macro acima foi conseguida gravando macros, e os valores foram alterados para adequarse as necessidades)
End If
End Sub
2.5. boto grfico estocstico

Figura6.boto grfico estocstico


(O boto grfico estocstico aciona a subgraficoestoc por dar a h o valor de 4, suprindo assim
a condio IF da sub.)
Sub graficoestoc()
Dim a As Single

If h = 4 Then
a = Worksheets("portfolio").Cells(65536, 1).End(xlUp).Row
Range("E18").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(18, 5), Cells(a, 5))
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.ChartArea.Copy
ActiveChart.Parent.Delete
Range("J2").Select
ActiveSheet.Paste
End If

22

End Sub
3.Exemplo do prgrama em funcionamento
3.1 Venda

fechamento:28,6
mnimo:27,96
mximo:28,6
estocstico:100

23

3.2 compra

Fechamento:27,9
Mximo:27,96
Mnimo:27,9
Estocstico:0

24

5 Concluso

Na observao do programa em funcionamento conclui-se que no vantajoso comparar o


fechamento com o Maximo e o mnimo de 15 dados adquiridos em um espao de tempo
muito curto. Isso porque embora hajam oscilaes, e com freqncia existem, estas so
pequenas durante tal perodo o que no proporciona grandes ganhos ao usurio, muito difcil
que ele perca , porm deixa de ganhar muitas vezes.H vantagens sim se o usurio estiver
acompanhando o programa durante todo o dia e fizer varias movimentaes ao dia, e se a ao
escolhida proporcionar constantes oscilaes,alm de no precisar pagar muito para a
operao (se no trar prejuzo).Caso no seja esse o perfil do usurio aconselha-se que ele
deixe o programa ativado porm para fazer comparaes com o Max e o Min de um perodo
de pelo menos quinze dia. Sendo assim , quando o fechamento se aproximar do mnimo de
um grande perodo o usurio ser indicado a comprar a ao e quando o fechamento se
aproximar do mnimo do mesmo perodo o usurio vender sua ao. Isso possibilita ganhos
maiores de at dependendo da ao.

25

Referncias
Fruns de Excel .
Aulas do professor Marco Antnio Leonel Caetano
Parte do programa disponibilizado no netstudante
JELEN, Bill; SYRSTAD, Tracy. VBA e macros para microsoft office excel 2007. So Paulo:
Pearson Prentice Hall, c2009. 420 p. ISBN 9788576051954 (broch.)

26

Вам также может понравиться