Autor Tema: Simulador Apuestas Deportivas martingala: planteamiento pseudocódigo  (Leído 10756 veces)

Adal1205

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Saludos a tod@s!!
Soy nuevo en el foro y quisiera la ayuda de algunos de uds con un programilla que estoy tratando de desarrollar. Soy un joven Dominicano,Ing. Industrial con conocimientos básicos de programación.
Como podran ver en titulo del post, estoy intentando desarrollar e implementar un programita que simule Apuestas deportivas siguiendo una estrategia Martingala con algunas modificaciones(ahi viene mi estancamiento en el programa).
Antes que nada para los que no conocen que es Martingala, es una estrategia de manejo del banco que te va quedando al apostar, con el objetivo que con cada partida ganada se recuperen las perdidas + la ganancia predeterminada. Por ejemplo un determinado jugador  desea ganar 1 unidad, entonces apuesta segun la cuota puesta por la casa de apuesta,para este caso asumimos cuota fija de -110; esto es que para ganar 100 unidades abria que apostar 110. Esto significa que para ganar 1 unidad el jugador tendria que apostar 1.1 unidades. Si se gana la apuesta se obtiene una ganancia neta de 1 unidad, pero si se pierde ahora el objetivo a ganar seria 1 unidad original mas 1.1 unidades perdidas en la apuesta anterior para cubrir las perdidas mas la ganancia predeterminada y asi sucesivamente.En teoria es un sistema "infalible" pues con cada apuesta ganada se recuperan las perdidas y se obtiene la ganancia. El problema está cuando vienen rachas largas de perdidas de apuesta, ya que con cada perdida el monto apostado se eleva exponencial y progresivamente lo que hace que a la larga el sistema no sea sostenible. Acá entra mi modificación al sistema: Se va a iniciar la serie o progresion y seguir los pasos del Martingale al pie de la letra, hasta que tengamos 3 derrotas consecutivas. Cuando tengamos 3 derrotas consecutivas en la cuarta apuesta en vez de tratar de recuperar las perdidas + la ganancia con una sola victoria, distribuirla en varias victorias segun vayan saliendo.
Supongamos que empezamos con un Bankroll de 1000.00. y deseamos doblar ese monto a 2000.00 aumentando cada vez el valor en un 1%. Para esto crearemos varios arreglos con los Balances Iniciales,Monto A Ganar y Balance Objetivo:
Arreglo 1 es Balance(70), donde Balance(0)=1000,Balance(1)=1010,Balance(2)=1020.10, y asi sucesivamente
MontoAGanar(0)=10,MontoAganar(1)=10.10,MontoAGanar(2)=10.20 y asi sucesivamente
BalanceObjetivo(0)=1010,BalanceObjetivo(1)=1020.10,BalanceObjetivo(1030.30) y asi sucecivamente.
Mi objetivo con el programa es hacer una estrategia modificada del martingale donde cuando pase de 3 derrotas consecutivas en vez de tratar de recuperar todas las perdidas con cada partida ganada, distribuirlas en el arreglo MontoAGanar(n) segun vayan apareciendo derrotas. Por ejemplo cuando tenga 3 derrotas, la sieguiente partida segun martingale deberia ser para ganar 92.61 (82.61 perdidas +10 objetivo); apostando entonces 101.87. Pero con la modificacion seria entonces:
Si se quiere recuperar en con una sola partida ganada: 82.61 perdidas +10 Objetivo segun matriz=92.61
Si se quiere recuperar en 2 partidas ganadas seria entonces:
82.61 perdidas + 10 Objetivo primera posicion + 10.10 Objetivo segunda posicion Matriz=102.71/2 = 51.36.
No se si fui claro en explicarme, pero cualquier duda favor preguntarme.
Gracias
« Última modificación: 14 de Septiembre 2014, 13:10 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #1 en: 03 de Junio 2014, 22:14 »
Hola y saludos desde España,  lo primero que tendría que preguntarte es con qué lenguaje estás desarrollando el programa, si es que lo has empezado a desarrollar con algún lenguaje.

Y para tratar de entender antes de nada me gustaría entender cómo se desarrollaría una partida con martingala si yo soy un jugador.

Te digo lo que he entendido. Soy un jugador y empiezo con 110 puntos (o dólares, o lo que sea). Los apuesto y gano. Entonces la banca me da lo que jugué y además 100 puntos adicionales por haber ganado. Ahora tengo 210 puntos.

¿Ahora vuelvo a aportar 110 puntos o puedo apostar otra cantidad?

Supongamos que apuesto otros 110 puntos y vuelvo a ganar. Ahora tengo 210 + 110 = 320 puntos.

Vuelvo a apostar y gano, ahora tengo 430 puntos.

Vuelvo a apostar y gano, ahora tengo 540 puntos.

Vuelvo a apostar y pierdo, he perdido 110 y vuelvo a tener 430 puntos

¿Ahora apuesto 220 para recuperar lo que perdí en la anterior tirada?

Perdona si te parecen dudas básicas...

Adal1205

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #2 en: 03 de Junio 2014, 23:02 »
Antes que nada, gracias por leer mi post y querer ayudar.
Aún no me he decidido por ningún lenguaje, aunque como planeo usar una hoja de Excel, pensé en usar vba para Excel,pero el lenguaje seria irrelevante para mí. La ayuda serí recibida de cualquier modo.
Sobre tu explicación del sistema es más o menos como lo explicaste, pero para que lo entiendas mejor:
10 Inicio
20 BalanceInicial=1000
30 Balance=BalanceInicial
40 Objetivo=Balance*0.01
50 Aganar = Objetivo
60 Apostado=Aganar*1.1
70 Si Ganar Apuesta Entonces
80 Balance=Balance+Aganar
90 Goto 40
100 sino
110 Balance=Balance-Apostado
120 Aganar=Aganar+Apostado
130 goto 60

Ese seria mas o menos el algoritmo o pseudocodigo del martingala. Se que no es muy buena lógica de programacion pero es solo para ilustrar. Como les dije mas arriba lo que quiero es modificar el código de manera que en vez de tratar de recuperar las perdidas con solo 1 partida ganada, tratar de distribuir las pérdidas entre los elementos del arreglo MontoAGanar según  lo explicado en mi primer post.
Alguna sugerencia?
Gracias anticipadas

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #3 en: 04 de Junio 2014, 08:47 »
Según el algoritmo que has puesto veo que la idea no es exactamente como yo la había planteado. Según este algoritmo creo que la partida si el jugador va ganando discurriría así:

Balance = 1000
Objetivo = 10
Aganar = 10

Apostado = 10 * 1,1 = 11

Ganamos la apuesta y balance = 1000 + 10 = 1010

Objetivo = 1010 * 0,01 = 10.10

Aganar = 10.10

Apostado = 11.11

Ganamos la apuesta y balance = 1010 + 10.10 = 1020.1

Objetivo = 1020.1 * 0.01 = 10.201

Aganar = 10.201

Apostado = Aganar*1.1 = 11.2211



Aquí hay una cosa que no entiendo:

Según esto se van generando números con decimales, por ejemplo 11.2211 ¿Cómo se puede trabajar con estos decimales si estuviéramos jugando con fichas o con monedas? Normalmente se trabaja con números enteros, por eso en el ejemplo que puse antes todos los números eran números redondos. ¿Cómo se resolvería el problema de los decimales?


Adal1205

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #4 en: 04 de Junio 2014, 14:24 »
Como podras leer en el titulo del post, esto seria para apuestas deportivas, no de casino, ni ruleta, blackjack,etc. En las casas de apuestas deportivas se pueden apostar con decimales sin problema. Pero si es necesario, para resolver la cuestion de los decimales lo que hay que hacer es redondear al entero mas proximo, por ejemplo: 11.2211, lo redondeamos al entero mas proximo que seria 12.

Lo que me interesa saber es como modificar el algoritmo para cuando tengamos una racha negativa de mas de 3 perdidas, en vez de recuperar todo lo perdido mas el objetivo en una sola partida ganada, poder distribuir las perdidas en los montos objetivos contenidos en el arreglo MontoAGanar. Por ejemplo supongamos que empezamos una serie y perdemos los 3 primeros juegos asi:

1era partida apostamos 11 para ganar 10(que es nuestro primer objetivo segun el arreglo) Perdemos 11, ahora nuestro balance es 1000-11=989
2da partida ahora apostamos para ganar 11 perdida anterior + 10 objetivo=21. Por tanto apostamos 23.1 para ganar 21. Perdemos 23.1. Balance es 989-23.1=965.9
3era partida Ahora nuestro objetivo es 23.1 perdida en la partida anterior + 11 perdida en la 1era partida + 10 objetivo original= 23.1+11+10=44.1. Apostamos 48.51 a ganar 44.1
4ta partida Ahora el objetivo seria 48.51+23.1+11+10=92.61. Nos tocaria apostar 101.87 para ganar 92.61 pero aca entraria la modificacion al algoritmo original del martingala.

En vez de tratar de recuperar todas las perdidas y el objetivo(48.51+23.1+11)+10=92.61 con una sola partida ganada lo distribuimos en 2 objetivos del arreglo:
Perdidas 48.51+23.1+11=82.61+10=92.61. Ahora si queremos recuperar las perdidas en 2 ganadas en vez de 1, Seria perdidas 82.61 + 10 primer objetivo + 10.1=102.71. como lo distribuimos en 2 objetivos, entonces dividimos lo 102.71/2=51.36 en las 2 siguientes partidas y asi sucesivamente.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #5 en: 05 de Junio 2014, 08:53 »
Este sería el algoritmo del martingala con lo que creo que sería un diseño que podría funcionar (aunque habría que probarlo desarrollándolo en un lenguaje para comprobarlo). Con este algoritmo contaríamos el número de partidas perdidas en una variable PartidasPerdidas. El dinero perdido lo contabilizamos en la variable Pérdidas.


función obtenerNuevosParámetros() {

si apuestaGanada = verdadero Entonces
   Objetivo = Balance*0.01
   Apuesta = Objetivo*1.1   
   PartidasPerdidas = PartidasPerdidas - 1;
Fin Si

Si apuestaGanada = falso Entonces
   Balance=Balance-Apuesta;
   PartidasPerdidas = PartidasPerdidas + 1;
   Pérdidas = Pérdidas + Apuesta;
   Apuesta = (Pérdidas + ObjetivoInicial)*1.1
FinSi

}



ProgramaPrincipal

Inicio
Pérdidas = 0;
PartidasPerdidas = 0;
Balance = 1000; //Establecemos un balance inicial para comenzar la partida
finPartida = falso;
ObjetivoOriginal = Balance*0.01;
Objetivo = Balance * 0.01;
Apuesta = Objetivo*1.1;
Pérdidas = 0;

Mientras finPartida = falso Hacer

apuestaGanada = resultadoDeApostar() //Nos devuelve verdadero si ganamos o falso si perdemos

obtenerNuevosParámetros() //La función determina los nuevos parámetros para la siguiente ronda

finPartida = chequearCondicionFinPartida() //Si se cumple la condición finPartida será verdadero

finMientras

Fin

FinProgramaPrincipal

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Simulador Apuestas Deportivas
« Respuesta #6 en: 05 de Junio 2014, 08:56 »
En la modificación que planteas no me queda claro qué ocurre si después de tener 3 pérdidas tenemos una cuarta pérdida, luego una quinta, una sexta... ¿Iríamos siempre diviendo entre 2 lo que hubiera sido la apuesta del martingala normal?

Y por otro lado, ¿qué ocurre si por ejemplo tenemos 3 pérdidas, luego 1 ganada, luego 1 pérdida, luego 1 ganada, luego 1 pérdida?

Adal1205

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Simulador Apuestas Deportivas martingala
« Respuesta #7 en: 05 de Junio 2014, 14:32 »
A eso precisamente es que me refiero con la modificacion. Despues de 3 perdidas  en la 4 partida dividiriamos entre 2 objetivos, si perdemos esa partida, dividiríamos entre 3 objetivos y asi sucesivamente. Cada vez que perdamos aumentaríamos los objetivos a dividir.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Simulador Apuestas Deportivas martingala
« Respuesta #8 en: 06 de Junio 2014, 09:24 »
Creo que se podría resolver así: contabilizamos el número de partidas perdidas en la variable partidasPerdidas. Si es mayor de 3, aplicamos un factor divisor al objetivo teórico que es función del número de partidas perdidas. A medida que ganamos, el factor divisor disminuye hasta no aplicarse si ganamos suficientes partidas. A medida que perdemos, el factor divisor aumenta.

El algoritmo quedaría así:

función obtenerNuevosParámetros() {

si apuestaGanada = verdadero Entonces
   Objetivo = Balance*0.01   
   PartidasPerdidas = PartidasPerdidas - 1;
Fin Si

Si apuestaGanada = falso Entonces
   Balance=Balance-Apuesta;
   PartidasPerdidas = PartidasPerdidas + 1;
   Pérdidas = Pérdidas + Apuesta;
   Objetivo = Pérdidas + ObjetivoInicial
   
FinSi


Si (PartidasPerdidas > 3) { //Hay que dividir el objetivo

factorDivisor = partidasPerdidas - 2;
objetivo = objetivo / partidasPerdidas;

}

Apuesta = Objetivo*1.1

}



ProgramaPrincipal

Inicio
Pérdidas = 0;
PartidasPerdidas = 0;
Balance = 1000; //Establecemos un balance inicial para comenzar la partida
finPartida = falso;
ObjetivoOriginal = Balance*0.01;
Objetivo = Balance * 0.01;
Apuesta = Objetivo*1.1;
Pérdidas = 0;

Mientras finPartida = falso Hacer

apuestaGanada = resultadoDeApostar() //Nos devuelve verdadero si ganamos o falso si perdemos

obtenerNuevosParámetros() //La función determina los nuevos parámetros para la siguiente ronda

finPartida = chequearCondicionFinPartida() //Si se cumple la condición finPartida será verdadero

finMientras

Fin

FinProgramaPrincipal

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".