Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int aleatorio ();
float cotacao (float cot_min, float cot_max);
float aposta (float last, float odds);
int evento (float vitoria);
int main() {
int aux, cont, fail;
int bets, simulacoes, event;
float proporcao, odds, bet, last, teste;
float bankroll, currentbank;
float min, max;
FILE *excel;
int fracassos[100];
excel = fopen("Evolucao do bankroll - Simulacoes.xls", "w");
if (excel == NULL){
printf("\nDeu pau na abertura do arquivo para o Excel :(\n");
return -1;
}
srand(time(NULL));
printf("Insira a probabilidade do evento ser bem-sucedido\n(em numero decimal e usando ponto ao inves de virgula): ");
scanf ("%f", &proporcao);
if (proporcao > 1 || proporcao < 0){
printf("\n\nQue burro, da zero pra ele. \nProbabilidade nao pode ser maior que 1 ou menor que 0.\nTente novamente\n");
return -1;
}
printf("\nInsira as odds minimas para apostar\n(em numero decimal e usando ponto ao inves de virgula): ");
scanf ("%f", &min);
printf("\nInsira as odds maximas para apostar\n(em numero decimal e usando ponto ao inves de virgula): ");
scanf ("%f", &max);
if (min > max) {
printf("\n\nQue burro, da zero pra ele. \nOdds minimas estao maiores que as odds maximas. \nTente novamente\n");
return -1;
}
printf("\nInsira o bankroll inicial (em units): ");
scanf ("%f", &bankroll);
printf("Insira o total de apostas a fazer: ");
scanf ("%d", &bets);
printf("Insira o total de simulacoes a fazer: ");
scanf ("%d", &simulacoes);
for (cont = 0; cont < bets; cont++)
fprintf(excel, "%d\t", cont);
fprintf(excel, "FIM\n");
for (cont = 0; cont < 100; cont++)
fracassos[cont] = 0;
currentbank = bankroll;
teste = 0.0;
printf("\n\nSIMULACAO\tBANKROLL FINAL\t\tPROFIT\t\tPROFIT/BET\n");
for (aux = 1; aux <= simulacoes; aux++) {
last = 0.0;
fail = 0;
currentbank = bankroll;
for (cont = 0; cont < bets; cont++){
fprintf(excel, "%.2f\t", currentbank);
odds = cotacao(min, max);
bet = aposta(last, odds);
event = evento(proporcao);
if (event > 0){
last = bet/(odds-1);
fracassos[fail]++;
fail = 0;
}
else {
last = -bet;
if (fail < 99)
fail++;
}
teste = teste + event;
currentbank = currentbank + last;
}
fprintf(excel, "%.2f\n", currentbank);
printf("%d\t\t%11.2f\t\t%11.2f\t%.2f\n", aux, currentbank, currentbank - bankroll, (currentbank - bankroll)/bets);
}
teste = teste/(bets*simulacoes);
printf("\n\nPorcentagem de apostas bem-sucedidas: %.1f%% \n\n", 100.0*teste);
printf("Amostra de eventos:\t%d\n\n", bets*simulacoes);
printf("Bets mal sucedidas\tQuantidade\nconsecutivas\t\tde ocorrencias\n");
for (cont = 1; cont < 100; cont++)
if (fracassos[cont] > 0)
printf("%d\t\t\t%d\n", cont, fracassos[cont]);
fclose(excel);
return 8;
}
int aleatorio () /* um numero aleatorio entre 0 e 999 */ {
int a, r, s;
r = rand() % 2;
s = rand() % 5;
if (r == 0) s = s + 5;
a = s;
r = rand() % 2;
s = rand() % 5;
if (r == 0) s = s + 5;
a = a + 10*s;
r = rand() % 2;
s = rand() % 5;
if (r == 0) s = s + 5;
a = a + 100*s;
return a;
}
float cotacao (float cot_min, float cot_max) {
int aux, coef;
coef = 1 + (cot_max - cot_min)/10;
aux = aleatorio();
aux = aux*(1 + aleatorio()%coef);
if (aux > 100*(cot_max - cot_min))
return cotacao (cot_min, cot_max);
else
return ((float)aux/100 + cot_min);
}
float aposta (float last, float odds) {
if (last >= 0)
return (odds - 1.0);
else
return ( (odds - 1.0) * (last*(-1)));
}
int evento (float vitoria) {
int aux, sort;
aux = vitoria*1000;
sort = aleatorio();
if (sort <= aux)
return 1;
else
return 0; }