A história muito mal contada (versão do outro lado) do post fantasma está em :
http://viagemlc.blogspot.com/2011/06/o-post-fantasma.htmlMas confusões à parte passo a explicar em que é que o bot se baseava:
Este bot era aplicado em CS e como é sabido quando há um golo a odd do runner associado ao resultado seguinte tende a aproximar-se (descer, dependendo do tempo do jogo) rapidamente para a odd que estava no resultado antigo. Então o objectivo é: assim que há um golo, saber qual era a odd do resultado anterior e tentar apanhar odds acima desta (fazendo back em várias steps da ladder) no resultado actual. Assim que há correspondência esperar um pouco para a odd ir abaixo e fazer lay ( ou fazer logo lay e esperar).
1º desafio neste bot : captar os golos.
Para isto usei um scrapper que faz o parse do xscores.com. Por vezes este site engana-se e volta atrás no resultado. felizmente arranjei maneiras de me proteger minimamente disto (ainda explico aqui se não me der vontade de ir dormir entretanto :-) ). Outro problema é que o resultado pode vir atrasado e o mercado já não está suspenso e a leddar está "limpa" no resultado anterior impossibilitando a extracção da odd no mercado anterior (este passo tb foi de certa forma resolvido olhando para a informação do volume - que não é limpa). Note-se que eu não quero andar a monitorizar o jogo do inicio ao fim mas sim só actuar quando há golo (apanhando os golos todos de todos os mercados)
Outro problema usando este site para fazer scrapping dos golos é que o nome das equipas não é exactamente igual ao nome das equipas na betfair - este resolve-se bem aplicando um algoritmo qualquer para fazer match entre palavras (mal escritas

).
Uma vez tendo o scrapper a funcionar, ia a uma lista dos mercados (mercados vector de Markets em java) do jogos do dia e via se o mercado, do jogo para o qual tinha detectado golo, estava suspenso.
Se estava suspenso era confirmado que era golo (quase certo) então tirava a odd do resultado anterior (aqui tb não era linear ... tinha de ver o código outra vez para ver como fazia exactamente quando havia gaps ... sei que tb não era linear tinha vários filtros lembro-me que tinha por exemplo filtro para não entrar em mercados com fraca movimentação). Tendo a odd de referencia do resultado anterior (runner) cravejava a ladder com back (em n posições) uns steps acima desta odd no resultado actual( aqui tb aplicava uma regras para ir mais passos acima cravejar a ladder se a odd fosse baixa e menos passos se a odd fosse alta - logicamente). Neste passo também tinha uns filtros para decidir quantos passos acima na ladder ia "cravejar" dependendo se o golo era do favorito ou não.
Para ver os favoritos tinha um processo a correr que construía uma base de dados às 6:00h da manha todos os dias vendo as odds de todas as equipas no match-odds que iam jogar naquele dia. ( e que tinham CS)
Voltando à parte em que o scrapper dava o resultado atrasado como é que ia ver a odd do resultado anterior se o mercado já tinha estado suspenso e a ladder já tinha sido limpa ? (era normal obter o resultado do scrapper nestas condições) então aqui ia pelo volume e tirava a odd mais baixa do volume em que não havia gaps (aqui havia mais filtros mas basicamente era isto) e dava para ter uma odd de referencia do resultado anterior. (já agora fica o pormenor que não dá para tirar o volume em mercados suspensos com a API - impossibilitando assim a fusão de dados dos preço e volume caso apanhasse o mercado suspenso..). De notar que o volume é um bom indicador da odd uma vez que nestes runners do CS a odd costuma descer .. também para confirmar que era golo via que a ledder estava limpa no back - no lay não está porque estão lá os bots do resultado impossivel (que também ajudam a ver que já houve golo :-) )
Muitas vezes (o normal) acontecia o bot colocar os meus backs muito acima da odd de referencia e não eram correspondidos (o mercado não chegava a ficar desajustado) e ao fim de algum tempo o bot cancelava as apostas.
Basicamente era isto (é o resumo de um total de 6000 linhas de código distribuídas em várias classes :-) )
Porque que não funciona ??
Não funciona porque é preciso algum tempo (5 min.) para a odd descer em relação à odd de referencia calculada e nesse tempo a probabilidade de haver golo é baixa mas acontece o numero suficiente de vezes para estragar os pequenos lucros acumulados de muitos greens. Podia tentar reduzir o tempo de exposição mas se for muito pequeno a odd não desce e não há lucro. Quanto menos tempo de exposição menos lucro temos e quanto mais tempo maior é a probabilidade de perder a stake toda.
Outro problema é que nem sempre a odd do resultado actual (novo) desce. Aqui tinha muitos filtros para ver o tempo de jogo, favorito, quantidade de golos ... quando a odd subia eu tentava ir atraz da odd subindo um tick de n em n segundos para tentar ser correspondido e fechar a minha posição...
mas no final embora o bot fizesse tudo o que queria sem falhar e sem bugs, sem leaks de memoria e 24x7 (e deixando sempre o mercado equilibrado - fazendo bem os hedges mesmo abaixo de 2€) os reds de haver um golo a seguir a outro eram muito grandes para compensar um enorme acumular de muitos pequenos greens junto com alguns pequenos reds.
Conclusão é difícil automatizar esta técnica e tenho serias duvidas do man que disse que: tinha pago 7000€ para fazer isto e o bot já os tinha compensado.
Era engraçado ver as janelinhas das threads de processamento de golos a saltar no monitor a a fazer dinheiro (muitas vezes estavam 6 e 7 processos a processar golos em simultâneo então ao fds nem se fala ).. só não tinha piada quando estas acabavam com uma msg a vermelho a dizer que já houve outro golo. Por vezes a betfair suspendia e cancelava as minhas apostas não correspondidas mas a maior parte das vezes já era tarde demais.
Já agora aqui fica um video de uma das situações que acaba com a vida de qualquer trader em CS

e acabou com a vida deste bot :-) :
http://www.youtube.com/watch?v=R96j711uSIM&feature=relatedAb
Ler mais