Eine Systemwette ist grundsätzlich eine Wette k aus n, womit k also die Anzahl der Spiele pro Kombiwette angibt und n die Anzahl der Spiele. K aus n gibt die Anzahl der k-Permutationen einer n-elementigen Menge an und wird somit als n über k geschrieben. Die Anzahl errechnet sich nach dem bekannten Muster im Zähler n * ( n – 1) * (n – 2) * …, und von diesen Elementen gibt es k Stück, während im Nenner schlicht k Fakultät steht. Diese Wetten müssen natürlich in einem Programm einzeln aufgeschlüsselt werden und jede einzeln bewertet werden. Es gibt aber auch die Möglichkeit, Bänke einzubauen. Diese erhöhen nicht die Anzahl der Möglichkeiten, dennoch müssen sie sorgfältig hier behandelt werden.
Es geht darum, Systemwetten sauber abzurechnen, ihren Wert zu bestimmen, die Gewinnerwartung („equity“ klingt hier besser; weil man auch eine negative Gewinnerwartung haben könnte, welche dann eben Verlusterwartung heißen müsste), Auszahlungsmöglichkeiten ebenso, die zum Teil auch von bereits gespielten Spielen mitbestimmt sein können, aber auch möglicherweise von Live-Ergebnissen gespeist werden könnten und somit eine „was-wäre-wenn“-Analyse enthalten. Man kann zugleich einen Vergleich des Wertes der Wetten machen unter verschiedenen Annahmen der Eintrittswahrscheinlichkeiten der Einzelereignisse. Diese sind nämlich nicht bekannt, insofern bleibt es bei Annahmen. Ein Systemwettenrechner muss auch immer einen guten Vorschlag haben, was ein faires Cashout wäre.
Fehlen tut im Programm das asiatische Handicap. Asiatisch gesehen gibt es nämlich bei allen Tipps (hier ist wirklich ein EINZELtipp gemeint, keine Systemwette; der Begriff „gewetteten Ereignissen“ wäre noch passender) fünf Ausgangsmöglichkeiten. Herkömmlich gibt es die Ausgänge „gewonnen“ und „verloren“ bei einem Tipp. Er ist richtig oder er ist falsch. Asiatisch gibt es die weiteren drei Ausgänge, über das herkömmliche hinaus. Bedienen wir uns hier nun lieber der Terminologie der Einzelwetten: eine Einzelwette kann man weiterhin gewinnen oder verlieren. Das ist auch asiatisch nicht geändert. Darüberhinaus gibt es die Ausgänge: halber Verlust, pari und halber Gewinn. Bei halbem Verlust verliert man tatsächlich die halbe Wette, den halben Einsatz. Bei pari bekommt man genau sein Geld zurück. Bei halbem Gewinn gewinnt man die Hälfte der Wette. Das bedeutet aber, nur die Hälfte des möglichen Gewinns. Man muss also den halben Einsatz mit ( Quote – 1 ) multiplizieren, um den Gewinn zu errechnen. Für die Berechnung im Programm müsste man die Wertigkeiten für diese drei Ausgänge so hinzufügen: verloren ist 0. Man verliert die gesamte Wette. Halber Verlust wäre 0.25. Pari wäre 0.5. Halber Gewinn wäre ein Wert von +1.
AusDoCalc wird aufgerufen und dieser Funktion alle Parameter übergeben. Das Ergebnis kommt im erg zurück und ist noch auszulesen. Insgesamt gibt es 12 (in Worten: zwölf) interessante Ergebnisabfragen.
//AusDoCalc4D
// ->$1 = odds-Array
// ->$2 = probs-Array
// ->$3 = in – Array
// ->$4 = ARRAY REAL(erg;12)
// ->$5 = GameKeyNumber
// ->$6 = Anzahl der Wetten
C_BOOLEAN($fir;$stop)
_o_C_INTEGER($i;$j;$anz;$kombiAnz;$ite)
C_REAL($maxAusz)
ARRAY INTEGER($kombi;0)
ARRAY INTEGER($komInd;0)
ARRAY INTEGER($Ind;0)
//Bestimmung der Wetten, bei denen es sich um eine 2er Wette
//handelt. Die 2er Wette müssen nacheinander folgen
$anz:=$6
For ($i;1;$anz)
If ($i=$anz)
INSERT IN ARRAY($Ind;1)
$Ind{Size of array($Ind)}:=$i
Else
If ($5->{$i}=$5->{$i+1})
INSERT IN ARRAY($kombi;100;1)
INSERT IN ARRAY($komInd;100;1)
$komInd{Size of array($kombi)}:=$i
$i:=$i+1
Else
INSERT IN ARRAY($Ind;100;1)
$Ind{Size of array($Ind)}:=$i
End if
End if
End for
$kombiAnz:=Size of array($kombi)
If ($kombiAnz=0)
$0:=AusDoCalc ($1->;$2->;$3->;$4->)
Else
$0:=0
$maxAusz:=0
$ite:=Size of array($3->)
ARRAY REAL($odds;$ite)
ARRAY REAL($prob;$ite)
ARRAY LONGINT($in;$ite)
For ($i;1;$ite)
$odds{$i}:=$1->{$i}
$prob{$i}:=$2->{$i}
$in{$i}:=$3->{$i}
End for
ARRAY REAL($erg;Size of array($4->))
For ($i;1;Size of array($erg))
$erg{$i}:=0
End for
//Sind Bank-Wetten vorhanden?
If ($anz<Size of array($1->))
For ($j;$anz+1;Size of array($1->))
$ite:=$j-$kombiAnz //Bank muß weiter nach vorne
$1->{$ite}:=$odds{$j}
$2->{$ite}:=$prob{$j}
$3->{$ite}:=$in{$j}
End for
End if
//Alle Kombinationen werden nacheinander bestimmt
$fir:=True
$i:=$kombiAnz
While ($i>0)
If ($fir=True) //Anfangsinitialisierung
For ($j;1;$kombiAnz)
$kombi{$j}:=0
End for
$fir:=False
Else //Die nächste Kombination berechnen
$stop:=False
$i:=$kombiAnz
While ((Not($stop)) & ($i>0))
If ($kombi{$i}=0)
$kombi{$i}:=1 //2. Weg soll jetzt gesetzt werden
$stop:=True
$j:=$i+1
While ($j<=$kombiAnz)
$kombi{$j}:=0 //1. Weg soll jetzt gesetzt werden
$j:=$j+1
End while
Else
$i:=$i-1
End if
End while
End if
If ($i>0)
//Jetzt kannst man für eine Kombination die Werte berechnet werden.
//Die Übergabearray müssen noch gesetzt werden
For ($j;1;$kombiAnz+Size of array($Ind))
If ($j<=$kombiAnz)
$ite:=$komInd{$j}
If ($kombi{$j}=1)
$ite:=$ite+1 //2. Weg nehmen
End if
Else
$ite:=$ind{$j-$kombiAnz}
End if
$1->{$j}:=$odds{$ite}
$2->{$j}:=$prob{$ite}
$3->{$j}:=$in{$ite}
End for
$0:= ($1->;$2->;$3->;$4->)
For ($j;1;Size of array($erg))
$erg{$j}:=$erg{$j}+$4->{$j}
End for
If ($4->{3}>$maxAusz)
$maxAusz:=$4->{3}
End if
End if
End while
$erg{3}:=$maxAusz
For ($i;1;Size of array($erg))
$4->{$i}:=$erg{$i}
End for
End if
C_LONGINT($von;$bis)
Open window(30;30;390;155;1)
DIALOG([BMQuoten];“Suchen“)
CLOSE WINDOW
Case of
: (xRet=3)
// If (◊gSelKey>=0)
QUERY([Spielwoche];[Spielwoche]WochenID=gWochenID)
RELATE MANY([Spielwoche]WochenID)
SetGmSel
SELECTION TO ARRAY([games]game_key_no;aGOgamekey)
$len:=Size of array(aGOgamekey)
_o_ARRAY STRING(15;aGOHeimName;$len)
_o_ARRAY STRING(15;aGOAuswName;$len)
_o_ARRAY STRING(15;aBM;25)
ARRAY REAL(aBM1;$len)
ARRAY REAL(aBM2;$len)
ARRAY REAL(aBM3;$len)
ARRAY REAL(aBM4;$len)
ARRAY REAL(aBM5;$len)
ARRAY REAL(aBM6;$len)
ARRAY REAL(aBM7;$len)
ARRAY REAL(aBM8;$len)
ARRAY REAL(aBM9;$len)
ARRAY REAL(aBM10;$len)
ARRAY REAL(aBM11;$len)
ARRAY REAL(aRound;$len)
ARRAY INTEGER(aErg1;$len)
ARRAY INTEGER(aErg2;$len)
ARRAY LONGINT(aSpNr;$len)
For ($i;1;25)
aBM{$i}:=““
End for
For ($i;1;Size of array(aGOgamekey))
aBM1{$i}:=0
aBM2{$i}:=0
aBM3{$i}:=0
aBM4{$i}:=0
aBM5{$i}:=0
aBM6{$i}:=0
aBM7{$i}:=0
aBM8{$i}:=0
aBM9{$i}:=0
aBM10{$i}:=0
aBM11{$i}:=0
End for
$anf:=1
TRACE
For ($i;1;Size of array(aGOgamekey))
QUERY([games];[games]game_key_no=aGOgamekey{$i})
RELATE ONE([games]team ID 1)
aGOHeimName{$i}:=[teams]Kurzname
RELATE ONE([games]team ID 2)
aGOAuswName{$i}:=[teams]Kurzname
aRound{$i}:=[games]roundnr
aSpNr{$i}:=[games]Spielnummer
aErg1{$i}:=[games]result team1
aErg2{$i}:=[games]result team2
CalcQuotVergl (0)
//erg aBMName;aBMWinWert
For ($k;1;Size of array(aBMName))
$j:=1
$find:=False
While (($j<=Size of array(aBM)) & Not($find))
If (aBM{$j}=aBMName{$k})
$find:=True
Else
$j:=$j+1
End if
End while
If ($find=False)
aBM{$anf}:=aBMName{$k}
$j:=$anf
$anf:=$anf+1
End if
Case of
: ($j=1)
aBM1{$i}:=aBMWinWert{$k}
: ($j=2)
aBM2{$i}:=aBMWinWert{$k}
: ($j=3)
aBM3{$i}:=aBMWinWert{$k}
: ($j=4)
aBM4{$i}:=aBMWinWert{$k}
: ($j=5)
aBM5{$i}:=aBMWinWert{$k}
: ($j=6)
aBM6{$i}:=aBMWinWert{$k}
: ($j=7)
aBM7{$i}:=aBMWinWert{$k}
: ($j=8)
aBM8{$i}:=aBMWinWert{$k}
: ($j=9)
aBM9{$i}:=aBMWinWert{$k}
: ($j=10)
aBM10{$i}:=aBMWinWert{$k}
End case
End for
End for
vDoc:=Create document("")
If (ok#0)
$Packet:="Spt"+Char(9)+"Heim"+Char(9)+"Auswärts"+Char(9)+"Erg1"+Char(9)+"Erg2"+Char(9)+aBM{1}+Char(9)+aBM{2}+Char(9)+aBM{3}+Char(9)
$Packet:=$Packet+aBM{4}+Char(9)+aBM{5}+Char(9)+aBM{6}+Char(9)+aBM{7}+Char(9)
$Packet:=$Packet+aBM{8}+Char(9)+aBM{9}+Char(9)+aBM{10}+Char(13)
SEND PACKET(vDoc;$Packet)
For ($i;1;Size of array(aGOHeimName))
$Packet:=String(aRound{$i})+Char(9)+aGOHeimName{$i}+Char(9)
$Packet:=Insert string($Packet;aGOAuswName{$i}+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aErg1{$i})+Char(9)+String(aErg2{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM1{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM2{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM3{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM4{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM5{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM6{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM7{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM8{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM9{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;String(aBM10{$i})+Char(9);Length($Packet)+1)
$Packet:=Insert string($Packet;Char(13);Length($Packet)+1)
SEND PACKET(vDoc;$Packet)
End for
CLOSE DOCUMENT(vDoc)
End if
SetListHeaders ("Nr.";"Heim";"Auswärts";aBM{1};aBM{2};aBM{3};aBM{4};aBM{5};aBM{6};aBM{7};aBM{8};aBM{9};aBM{10})
SetListButtons ("";"-";"")
SetListSize (400;640;0)
SetListWidths (25;75;75;50;50;50;50;50;50;50;50;50;50)
$line:=DisplayList (aSpNr;aGOHeimName;aGOAuswName;aBM1;aBM2;aBM3;aBM4;aBM5;aBM6;aBM7;aBM8;aBM9;aBM10)
// End if
: (xRet=2)
READ ONLY([games])
// BEEP
//
QUERY([Spielwoche];[Spielwoche]WochenID=gWochenID)
RELATE MANY([Spielwoche]WochenID)
SetGmSel
// SelectGames (◊gSelKey)
// SelGameArray
CalcQuotVergl (1)
: (xRet=1)
QUERY([Spielwoche];[Spielwoche]Kürzel=vVonWWo)
If (Records in selection([Spielwoche])=1)
$von:=[Spielwoche]WochenID
QUERY([Spielwoche];[Spielwoche]Kürzel=vBisWWo)
If (Records in selection([Spielwoche])=1)
$Bis:=[Spielwoche]WochenID
C_BOOLEAN(<>vCancel)
<>vCancel:=False
ON EVENT CALL("Stop")
READ ONLY([games])
$len:=$bis-$von+2
ARRAY REAL(aDirkErg;$len)
ARRAY REAL(aBM1Erg;$len)
ARRAY REAL(aBM2Erg;$len)
ARRAY REAL(aBM3Erg;$len)
ARRAY REAL(aBM4Erg;$len)
ARRAY REAL(aBM5Erg;$len)
ARRAY REAL(aBM6Erg;$len)
ARRAY REAL(aBM7Erg;$len)
ARRAY REAL(aBM8Erg;$len)
ARRAY REAL(aBM9Erg;$len)
ARRAY REAL(aBM10Erg;$len)
ARRAY REAL(aBM11Erg;$len)
ARRAY REAL(aBM12Erg;$len)
ARRAY REAL(aBM13Erg;$len)
ARRAY REAL(aBM14Erg;$len)
ARRAY REAL(aBM15Erg;$len)
ARRAY REAL(aBM16Erg;$len)
ARRAY REAL(aBM17Erg;$len)
ARRAY REAL(aBM18Erg;$len)
ARRAY REAL(aBM19Erg;$len)
ARRAY REAL(aBM20Erg;$len)
ARRAY REAL(aBM21Erg;$len)
ARRAY REAL(aBM22Erg;$len)
ARRAY REAL(aBM23Erg;$len)
ARRAY REAL(aBM24Erg;$len)
ARRAY REAL(aBM25Erg;$len)
ARRAY TEXT(aWochKurz;$len)
For ($i;1;$len)
aDirkErg{$i}:=0
aBM1Erg{$i}:=0
aBM2Erg{$i}:=0
aBM3Erg{$i}:=0
aBM4Erg{$i}:=0
aBM5Erg{$i}:=0
aBM6Erg{$i}:=0
aBM7Erg{$i}:=0
aBM8Erg{$i}:=0
aBM9Erg{$i}:=0
aBM10Erg{$i}:=0
aBM11Erg{$i}:=0
aBM12Erg{$i}:=0
aBM13Erg{$i}:=0
aBM14Erg{$i}:=0
aBM15Erg{$i}:=0
aBM16Erg{$i}:=0
aBM17Erg{$i}:=0
aBM18Erg{$i}:=0
aBM19Erg{$i}:=0
aBM20Erg{$i}:=0
aBM21Erg{$i}:=0
aBM22Erg{$i}:=0
aBM23Erg{$i}:=0
aBM24Erg{$i}:=0
aBM25Erg{$i}:=0
aWochKurz{$i}:=""
End for
ARRAY INTEGER(aAllBMInd;26)
ARRAY TEXT(aAllBMName;26)
For ($i;1;26)
aAllBMInd{$i}:=-1
aAllBMName{$i}:=""
End for
aWochKurz{$len}:="Sum:"
For ($woche;$von;$bis)
If (<>vCancel)
ALERT("Selection cancelled at week "+[Spielwoche]Name)
$woche:=$bis+1
Else
QUERY([Spielwoche];[Spielwoche]WochenID=$woche)
MESSAGE("WocheID: "+String($woche)+" bis "+String($bis))
// QUERY([Selection];[Selection]WochenID=$woche)
// If (Records in selection([Selection])>1)
// If ([Selection]name≤1≥ # "W")
// NEXT RECORD([Selection])
// End if
// End if
// SelectGames ([Selection]key)
// SelGameArray
RELATE MANY([Spielwoche]WochenID)
SetGmSel
CalcQuotVergl (0)
// Variablen aus "CalcQuotVergl" auswerten
$ind:=$woche-$von+1
aWochKurz{$ind}:=[Spielwoche]Kürzel
For ($i;1;Size of array(aBMWinWert))
If ((aBMIndex{$i}#0) | ($i=1))
$k:=1
While ((aBMIndex{$i}#aAllBMInd{$k}) & (aAllBMInd{$k}#-1))
$k:=$k+1
End while
If (aAllBMInd{$k}=-1)
aAllBMInd{$k}:=aBMIndex{$i}
aAllBMName{$k}:=aBMName{$i}
End if
Case of
: ($k=1)
aDirkErg{$ind}:=aBMWinWert{$i}
aDirkErg{$len}:=aDirkErg{$len}+aBMWinWert{$i}
Else
C_POINTER(ptrAGMErg)
ptrAGMErg:=Get pointer("aBM"+String($k-1)+"Erg")
ptrAGMErg->{$ind}:=aBMWinWert{$i}
ptrAGMErg->{$len}:=ptrAGMErg->{$len}+aBMWinWert{$i}
//: ($k=2)
// aBM1Erg{$ind}:=aBMWinWert{$i}
// aBM1Erg{$len}:=aBM1Erg{$len}+aBMWinWert{$i}
// : ($k=3)
// aBM2Erg{$ind}:=aBMWinWert{$i}
// aBM2Erg{$len}:=aBM2Erg{$len}+aBMWinWert{$i}
End case
End if
End for
End if
End for
ON EVENT CALL("")
DIALOG([BMQuoten];"ArchTabelle")
End if
End if
SET WINDOW TITLE(ActTitle)
End case
short DoCalc (InternDataPtr data, PA_Variable odds, PA_Variable probPtr, PA_Variable in, PA_Variable erg)
{
ODDS_LIST Wette[MAX_ELEM];
long Liste[MAX_ELEM];
long PrintListe[MAX_ELEM];
long intCount;
long n, k, baenke;
long *IndexListe = (data->indexListe);
long i, j;
long Anzahl;
// double Odds;
// long event_came;
double Prod;
double MaxSum;
double PossibleSum;
double ActualSum;
long BetWon;
double Grundeinsatz = data->grundeinsatz;
long option = data->option;
double prob;
double MoneyExp = (data->moneyExp);
double MoneyExpSum;
double ActualMoneyExp = (data->actualMoneyExp);
double ActualMoneyExpSum;
double prob_for_all;
long eingetroffene = 0;
// double prob_for_any_money;
double Steuern = data->steuern;
double WertDerWette, WettWertProd;
// TestStr1 ( „\pin : „, odds [1].fValue * 10000);
n = data->n;
k = data->k;
baenke = data->baenke;
//TestStr1 („\p calc >>>k „, k);
/*
TestStr1 („\p calc >>>n „, n);
TestStr1 („\p calc >>> IndexListe „, (long) IndexListe);
TestStr1 („\p calc >>> Wette „, (long) &Wette);
TestStr1 („\p odd1 „, odds[1] * 1000);
TestStr1 („\p odd2 „, odds[2] * 1000);
TestStr1 („\p pro1 „, probPtr[1] * 1000);
TestStr1 („\p pro2 „, probPtr[2] * 1000);
TestStr1 („\p i1 „, in[1]);
TestStr1 („\p i2 „, in[2]);
*/
HLock ((Handle ) data->moneyExp);
HLock ((Handle ) data->actualMoneyExp);
HLock ((Handle ) data->indexListe);
for ( i=0; i<n + baenke; i++)
{
if (option == 0)
{
Wette[i].odds = PA_GetRealInArray (odds, i+1);
Wette[i].prob = 1 / Wette[i].odds;
Wette[i].event_came_true = 1;
}
else
if (option == 1)
{
Wette[i].odds = PA_GetRealInArray (odds, i+1);
Wette[i].prob = PA_GetRealInArray (probPtr, i+1); // probPtr[i+1];
Wette[i].event_came_true = 1;
}
else
if (option == 2)
{
Wette[i].odds = PA_GetRealInArray (odds, i+1);
Wette[i].prob =PA_GetRealInArray (probPtr, i+1); // probPtr[i+1];;
Wette[i].event_came_true = PA_GetLongintInArray (in, i+1); //in[i+1];
}
else
{
SysBeep (3);
return -1;
}
}
for ( i=0; i<n; i++ )
Liste[i] = i;
for ( i=0; i<k; i++ )
PrintListe[i] = i;
intCount = 0;
Anzahl = Aus (&intCount, n, k, Liste, PrintListe, IndexListe, k, 0, 0);
// fprintf ( outdat, „\n\n\tDie Quoten mit Wahrscheinlichkeiten : \n“ );
// fprintf ( outdat, „\t======================================\n\n“ );
// fprintf ( outdat, „\tQuote\tW-keit\teingetroffen\n“ );
// for ( i=0; i<n; i++ )
// fprintf ( outdat, „\t%4.2f\t%4.2f %%\t%d\n“,
// Wette[i].odds, 100 * Wette[i].prob, Wette[i].event_came_true );
// fprintf ( outdat, „\n“ );
// fprintf ( outdat, „\n\n%d über %d = %d\n\n“, n, k, Anzahl );
eingetroffene = 0;
prob_for_all = 1;
for ( i=0; i<n+baenke; i++ )
{
prob_for_all *= Wette[i].prob;
eingetroffene++;
}
MoneyExpSum = 0;
ActualMoneyExpSum = 0;
// fprintf ( outdat, „\tW-keit\tKorrekt\tGelderwartung\tGelderwartungsumme\n“ );
// Calculate Money Exp not considering, whether or not events came true.
for ( i=0; i<Anzahl; i++ )
{
Prod = 1;
prob = 1;
for ( j=0; j<k; j++ )
{
Prod *= Wette[IndexListe[i][j]].odds;
prob *= Wette[IndexListe[i][j]].prob;
}
for ( j=n; j<n+baenke; j++ )
{
Prod *= Wette[j].odds;
prob *= Wette[j].prob;
}
/*
- Die Gewinnerwartung wird wie folgt berechnet :
Im Falle von prob ist die Auszahlung Grundeinsatz Prod, jedoch muß der Grundeinsatz - wieder abgezogen werden für die Gewinnerwartung bei Nettoberechnung.
- Die Steuern sind in Prozent angegeben, sie werden von der Gesamtauszahlung abgezogen.
- Im Falle von nicht prob, also die Fälle 1-prob, verliert man den Grundeinsatz.
/ MoneyExp[i] = prob ( Grundeinsatz (Prod-1) – !(data->vorsteuer)GrundeinsatzProdSteuern ) –
( 1 – prob ) * Grundeinsatz;
MoneyExpSum = MoneyExpSum + MoneyExp[i];
}
MoneyExpSum -= data->vorsteuer data->steuern data->einsatz;
// Calculate the Maximum money to be paid out.
MaxSum = 0;
for ( i=0; i<Anzahl; i++ )
{
Prod = 1;
for ( j=0; j<k; j++ )
{
Prod = Wette[IndexListe[i][j]].odds*Prod;
}
for ( j=n; j<n+baenke; j++ )
Prod *= Wette[j].odds;
MaxSum += Prod;
}
MaxSum -= !(data->vorsteuer) data->steuern MaxSum;
/*
- Calculate the possible money to be paid out.
*/
PossibleSum = 0;
for ( i=0; i<Anzahl; i++ )
{
BetWon = true;
for ( j=0; j<k; j++ )
{
if ( !Wette[IndexListe[i][j]].event_came_true )
BetWon = false;
}
for ( j=n; j<n+baenke; j++ )
{
if ( !Wette[j].event_came_true )
BetWon = false;
}if ( BetWon ) { Prod = 1; for ( j=0; j<k; j++ ) { Prod = Wette[IndexListe[i][j]].odds*Prod; } for ( j=n; j<n+baenke; j++ ) Prod *= Wette[j].odds; PossibleSum += Prod; }
}
PossibleSum -= !(data->vorsteuer) data->steuern PossibleSum;
/*
- Calculate the Actual money to be paid out.
*/
ActualSum = 0;
for ( i=0; i<Anzahl; i++ )
{
BetWon = true;
for ( j=0; j<k; j++ )
{
if ( Wette[IndexListe[i][j]].event_came_true != 1 )
BetWon = false;
}
for ( j=n; j<n+baenke; j++ )
{
if ( Wette[j].event_came_true != 1 )
BetWon = false;
}if ( BetWon ) { Prod = 1; for ( j=0; j<k; j++ ) { Prod = Wette[IndexListe[i][j]].odds*Prod; } for ( j=n; j<n+baenke; j++ ) Prod *= Wette[j].odds; ActualSum += Prod; }
}
if (!(data->vorsteuer))
ActualSum -= data->steuern * ActualSum;
/*
- Calculate the actual money expectation. This is relevant only if
- some of the events are still „open“.
*/ WertDerWette = Anzahl*Grundeinsatz;
/*
- Zunächst werden die W-keiten aller Spiele auf 1 oder 0 gesetzt für
- den Fall, dass die Spiele bereits stattgefunden haben. DP, 29-04-95.
*/ for ( j=0; j<n+baenke; j++ )
{
if ( Wette[j].event_came_true == 1 )
Wette[j].prob = 1;
if ( Wette[j].event_came_true == 0 )
Wette[j].prob = 0;
} for ( i=0; i<Anzahl; i++ )
{
/* auskommentiert, da oben alle W-keiten auf 1 oder 0 gesetzt werden.
- DP, 29-04-95.
for ( j=0; j<k; j++ )
{
if ( Wette[IndexListe[i][j]].event_came_true == 1 )
Wette[IndexListe[i][j]].prob = 1;
if ( Wette[IndexListe[i][j]].event_came_true == 0 )
Wette[IndexListe[i][j]].prob = 0;
}
*/BetWon = true; for ( j=0; j<k; j++ ) { if ( ! Wette[IndexListe[i][j]].event_came_true ) { BetWon = false; break; } } for ( j=n; j<n+baenke; j++ ) { if ( !Wette[j].event_came_true ) { BetWon = false; break; } } if ( BetWon ) { Prod = 1; prob = 1; WettWertProd = 1; for ( j=0; j<k; j++ ) { Prod *= Wette[IndexListe[i][j]].odds; prob *= Wette[IndexListe[i][j]].prob; if ( Wette[IndexListe[i][j]].event_came_true == 1 ) WettWertProd *= Wette[IndexListe[i][j]].odds; } for ( j=n; j<n+baenke; j++ ) { Prod *= Wette[j].odds; prob *= Wette[j].prob; if ( Wette[j].event_came_true == 1 ) WettWertProd *= Wette[j].odds; } ActualMoneyExp[i] = prob ( Grundeinsatz (Prod-1) - !(data->vorsteuer)*Grundeinsatz*Prod*Steuern ) - ( 1 - prob ) * Grundeinsatz; WertDerWette = WertDerWette + (WettWertProd-1) * Grundeinsatz; } else { ActualMoneyExp[i] = -Grundeinsatz; WertDerWette -= Grundeinsatz; Prod = 0; prob = 0; } ActualMoneyExpSum += ActualMoneyExp[i];
}
ActualMoneyExpSum -= data->vorsteuer data->steuern data->einsatz;
if (!data->vorsteuer)
WertDerWette -= data->steuern * WertDerWette;
/*
fprintf ( outdat, „\nHöchstauszahlung = %7.2f * %7.2f = %7.2f\n“,
MaxSum, Grundeinsatz, MaxSum*Grundeinsatz );
fprintf ( outdat, „\nNoch mögliche Höchstauszahlung = %7.2f * %7.2f = %7.2f\n“,
PossibleSum, Grundeinsatz, PossibleSum*Grundeinsatz );
fprintf ( outdat, „\nAugenblickliche Auszahlung = %7.2f * %7.2f = %7.2f\n“,
ActualSum, Grundeinsatz, ActualSumGrundeinsatz ); fprintf ( outdat, „W-keit alle %d Ereignisse = %8.6f %%\n“, eingetroffene, 100prob_for_all );
fprintf ( outdat, „Gesamteinsatz = %6.2f\n“
„Ursprüngliche Gelderwartung = %6.2f\n“
„Vorteil = %4.2f %%\n“,
Grundeinsatz * Anzahl,
MoneyExpSum,
100 MoneyExpSum / ( Grundeinsatz Anzahl ) );
fprintf ( outdat, „Augenblickliche Gelderwartung = %6.2f\n“
„Augenblicklicher Vorteil = %4.2f %%\n“,
ActualMoneyExpSum,
100 ActualMoneyExpSum / ( Grundeinsatz Anzahl ) );
for ( j=0; j<n; j++ )
fprintf ( ExcelFile, "\n" );
fprintf ( ExcelFile, "%6.2f\t%7.2f\n",
ActualMoneyExpSum, MaxSum*Grundeinsatz );
*/
PA_SetRealInArray (erg, 1, MaxSum);
PA_SetRealInArray (erg, 2, Grundeinsatz);
PA_SetRealInArray (erg, 3, MaxSum*Grundeinsatz);
PA_SetRealInArray (erg, 4, PossibleSum);
PA_SetRealInArray (erg, 5, PossibleSum*Grundeinsatz);
PA_SetRealInArray (erg, 6, ActualSum);
PA_SetRealInArray (erg, 7, ActualSum*Grundeinsatz);
PA_SetRealInArray (erg, 8, eingetroffene);
PA_SetRealInArray (erg, 9, 100*prob_for_all);
PA_SetRealInArray (erg, 10, MoneyExpSum);
PA_SetRealInArray (erg, 11, ActualMoneyExpSum);
PA_SetRealInArray (erg, 12, WertDerWette);
/*
erg [1] = MaxSum;
erg [2] = Grundeinsatz;
erg [3] = MaxSumGrundeinsatz; erg [4] = PossibleSum; erg [5] = PossibleSumGrundeinsatz;
erg [6] = ActualSum;
erg [7] = ActualSumGrundeinsatz; erg [8] = eingetroffene; erg [9] = 100prob_for_all;
erg [10] = MoneyExpSum;
erg [11] = ActualMoneyExpSum;
erg [12] = WertDerWette;
*/
HUnlock ((Handle ) data->moneyExp);
HUnlock ((Handle ) data->actualMoneyExp);
HUnlock ((Handle ) data->indexListe);
return noErr;
}