Re: Programação para Finanças (R/Python)

Fórum dedicado à discussão sobre os Mercados Financeiros - Bolsas de Valores
http://teste.caldeiraodebolsa.jornaldenegocios.pt/
http://teste.caldeiraodebolsa.jornaldenegocios.pt/viewtopic.php?f=3&t=85069
VirtuaGod Escreveu:Tenho andado afastado deste mundo mas vou voltar a estudar programação nos próximos 2 meses até ao final do ano, altura em que deverei focar no nível 2 do CFA.
Avanços:
Descoberta do kernel SoS para o juyter notebook. Permite seleccionar qual a linguagem que queremos usar em cada célula do notebook. Pela primeira vez tenho usado R e Python no mesmo jupyter notebook, como se fossem a mesma linguagem.
https://vatlab.github.io/sos-docs/
Objectivo:
Aprender Julia até ao final do ano para fazer as simulação de Monte Carlo. Julia é outra linguagem, que é quase tão simples de escrever como R ou Python mas que é quase tão rápido como C++
As minhas experiências para testar a velocidade foi uma simulação de Monte Carlo com 100 milhões de iterações para descobrir o valor de "pi". Ou seja a mesma coisa nas 3 linguagens. O tempo demorado foi:
R: 5 minutos e 15 segundos
Python: 2 minutos e 16 segundos
Julia: 0.9 segundos.
Sim, menos de um segundo em Julia. Não é erro
Uma vez que posso usar qualquer linguagem em cada célula nos Jupyter Notebooks o objectivo é usar Julia mesmo só para as simulações de Monte Carlo, transformando o tempo que elas demoram a fazer de 3 minutos para 2 segundos!
VirtuaGod Escreveu:Tenho andado afastado deste mundo mas vou voltar a estudar programação nos próximos 2 meses até ao final do ano, altura em que deverei focar no nível 2 do CFA.
Avanços:
Descoberta do kernel SoS para o juyter notebook. Permite seleccionar qual a linguagem que queremos usar em cada célula do notebook. Pela primeira vez tenho usado R e Python no mesmo jupyter notebook, como se fossem a mesma linguagem.
https://vatlab.github.io/sos-docs/
Objectivo:
Aprender Julia até ao final do ano para fazer as simulação de Monte Carlo. Julia é outra linguagem, que é quase tão simples de escrever como R ou Python mas que é quase tão rápido como C++
As minhas experiências para testar a velocidade foi uma simulação de Monte Carlo com 100 milhões de iterações para descobrir o valor de "pi". Ou seja a mesma coisa nas 3 linguagens. O tempo demorado foi:
R: 5 minutos e 15 segundos
Python: 2 minutos e 16 segundos
Julia: 0.9 segundos.
Sim, menos de um segundo em Julia. Não é erro
Uma vez que posso usar qualquer linguagem em cada célula nos Jupyter Notebooks o objectivo é usar Julia mesmo só para as simulações de Monte Carlo, transformando o tempo que elas demoram a fazer de 3 minutos para 2 segundos!
VirtuaGod Escreveu:JohnyRobaz Escreveu:Achas que a informação fornecida é credível, sendo gratuita?
É. Aquilo tem um hedge fund por detrás. Devem gastar bom $ a fazer o sistema.JohnyRobaz Escreveu:E para obter info de outros mercados, há fontes do género, gratuitas?
Consegues arranjar cenas gratuitas da yahoo finance ou da google finance mas se queres coisas boas tens de pagar. O Quandl é um bom sítio para começares a pesquisar o que de melhor há por aí.Outra questão é: de entre o macOS e o Linux no Ubuntu, qual o melhor sistema para programar este tipo de coisas, mais relacionadas com algoritmos de trading, obtenção de dados online, tratamento destes, etc?
Provavelmente tanto faz. A maioria dos IDEs (software onde programas) funciona nos 3 principais sistemas (os dois que falas + windows). Se vais usar quantopian provavelmente até só precisas de um browser, por isso... usa o sistema com que te sentes mais à vontade!!
JohnyRobaz Escreveu:Achas que a informação fornecida é credível, sendo gratuita?
JohnyRobaz Escreveu:E para obter info de outros mercados, há fontes do género, gratuitas?
Outra questão é: de entre o macOS e o Linux no Ubuntu, qual o melhor sistema para programar este tipo de coisas, mais relacionadas com algoritmos de trading, obtenção de dados online, tratamento destes, etc?
VirtuaGod Escreveu:Thoth Escreveu:Não esquecer que para trading automático é necessário que a corretora tenha API.
Interactive Brokers + PythonA API da IB até dá as cotações intraday dos últimos 15 dias
já ouviste falar da EasyLanguage? Se sim, achas que é superior ao Python no que toca a aplicar em sistemas de trading automático? Ou é menos abrangente e portanto pior?
Não vejo vantagens ou desvantagens numa ou noutra linguagem. Aqui a diferença está na comunidade e no $. A quantopian tem uma boa comunidade python e é tudo gratuito. Por outro lado a comunidade da TradeStation é fechada a clientes deles, e não é nada barato ser cliente deles. No meu tempo de trading eram 100 usd ao mês.
Penso que o mais importante no mundo da programação são as comunidades. Isso fomenta muito a existência de uma saudável troca de ideias e a existência de bons tutoriais para aprender a linguagem. Para quem está a começar e não entre naquele nível super-evoluído tanto me faz escrever em R, Python, JavaScript, Julia, Go, Java etc etc Uma diferença significativa seria se uma fosse high level e outra low level, mas não é o caso pelo que não deve fazer grande diferença em termos técnicos e de dificuldade (ambas são high level).
Thoth Escreveu:Não esquecer que para trading automático é necessário que a corretora tenha API.
já ouviste falar da EasyLanguage? Se sim, achas que é superior ao Python no que toca a aplicar em sistemas de trading automático? Ou é menos abrangente e portanto pior?
Thoth Escreveu:Não esquecer que para trading automático é necessário que a corretora tenha API.
Cumprimentos e bons negócios
VirtuaGod Escreveu:Tens acesso "eterno" aos vídeos e apontamentos (Jupyter Notebooks muito bons). Mas a isso tens de associar a comunidade. Há sempre alguém a tirar o curso e se as coisas ficarem deactualizadas ou o código quebrar "chateiam-no" logo e ele tenta resolver.
VirtuaGod Escreveu:Para mim aprender python tem um nome. Jose Portilla.
Tenho quase todos os cursos dele na Udemy que costumo comprar por cerca de 10 a 12 euros (pesquisem no google por "udemy coupon 10" e/ou usem o incognito mode por causa das cookies). Para a qualidade e QUANTIDADE de informação fornecida 10 euros é praticamente grátis e poupa-me o tempo que poderia perder (e perdi) com tutoriais inferiores e/ou desactualizados.
Ajuda obviamente terem um projecto que vão desenvolvendo ao mesmo tempo que vão aprendendo pois absorver a informação só vendo os vídeos não vão a lado nenhum!! Por isso é que eu faço tantos projectos e partilho aqui na comunidadeTerem uma ideia clara do que querem fazer com o que vão aprender é meio caminho andado!!
Tem DOIS cursos em python que são brilhantes e que efectivamente foram 100% em linha com o que eu queria:
Python for Data Science and Machine Learning Bootcamp: https://www.udemy.com/python-for-data-science-and-machine-learning-bootcamp
Python for Financial Analysis and Algorithmic Trading: https://www.udemy.com/python-for-finance-and-trading-algorithms
Nunca uso versões de nada com mais de um ano e se possível sempre as mais actuais. Python 3, pandas, matplotlib etc etc
<!DOCTYPE html>
<html>
<head>
<!-- Plotly.js -->
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
<!-- Plotly chart will be drawn inside this DIV -->
<div id="myDiv"></div>
<script>
/* JAVASCRIPT CODE GOES HERE */
Plotly.d3.csv("https://raw.githubusercontent.com/LuisSousaSilva/Articles-and-studies/master/4Fundos%20(R%20and%20Python)/Portfolios.csv", function(err, rows){
function unpack(rows, key) {
return rows.map(function(row) { return row[key]; });
}
var frames = []
var x2 = unpack(rows, '')
var y2 = unpack(rows, '4Fundos DEF')
var x = unpack(rows, '')
var y = unpack(rows, '4Fundos EW')
var x3 = unpack(rows, '')
var y3 = unpack(rows, '4Fundos AGR')
var n = 2755;
for (var i = 0; i < n; i++) {
frames[i] = {data: [
{x: [], y: []},
{x: [], y: []},
{x: [], y: []},
] }
frames[i].data[1].x = x.slice(0, i+1);
frames[i].data[1].y = y.slice(0, i+1);
frames[i].data[0].x = x2.slice(0, i+1);
frames[i].data[0].y = y2.slice(0, i+1);
frames[i].data[2].x = x3.slice(0, i+1);
frames[i].data[2].y = y3.slice(0, i+1);
}
var trace1 = {
type: "scatter",
mode: "lines",
name: '4Fundos Def',
opacity: 0.8,
x: frames[5].data[1].x,
y: frames[5].data[1].y,
line: {color: 'royalblue', width: 1.3}
}
var trace2 = {
type: "scatter",
mode: "lines",
name: '4Fundos Mod',
opacity: 0.8,
x: frames[5].data[0].x,
y: frames[5].data[0].y,
line: {color: 'dimgrey', width: 1.3}
}
var trace3 = {
type: "scatter",
mode: "lines",
name: '4Fundos Agr',
opacity: 0.7,
x: frames[5].data[0].x,
y: frames[5].data[0].y,
line: {color: '#4b0082', width: 1.3}
}
var data = [trace1, trace2, trace3];
var layout = {
title: 'Carteiras 4Fundos',
xaxis: {
range: [
frames[2754].data[0].x[0],
frames[2754].data[0].x[2754]
],
showgrid: true,
tickvals:[2008,
2009, 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017, 2018],
ticktext:[2008,
2009, 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017, 2018]
},
paper_bgcolor: 'rgb(250,250,250)',
plot_bgcolor: 'rgb(250,250,250)',
yaxis: {
range: [50, 220],
showgrid: true,
dtick: 25
},
legend: {
orientation: 'h',
x: 0.5,
y: -0.15,
xanchor: 'center'
},
updatemenus: [{
x: 0.5,
y: 0,
yanchor: "top",
xanchor: "center",
showactive: true,
direction: "left",
type: "buttons",
pad: {"t": 87, "r": 10},
buttons: [{
method: "animate",
args: [null, {
fromcurrent: true,
transition: {
duration: 0,
},
frame: {
duration: 1,
redraw: false
}
}],
label: "Play"
}, {
method: "animate",
args: [
[null],
{
mode: "immediate",
transition: {
duration: 0
},
frame: {
duration: 0,
redraw: false
}
}
],
label: "Pause"
}]
}]
};
Plotly.newPlot('myDiv', data, layout).then(function() {
Plotly.addFrames('myDiv', frames);
});
})
/* JAVASCRIPT CODE GOES HERE */
</script>
</body>
</html>
LoneWolf Escreveu:Tu és uma máquina!![]()
SFT Escreveu:Aproveito para informar que o DataCamp está com promoção de princípio do ano, para quem estiver interessado.