What is your strategy?

Status
Not open for further replies.
Ok, here are the top 10 strategies now, with the inclusion of the bet on all black numbers:

Code:
	R16	R14	R	BN	F(R16,R14,R,BN)
	8.1	5.4	48.6	37.8	0.3279876
	8.1	5.4	48.5	37.9	0.3279855
	8.1	5.4	48.7	37.7	0.3279851
	8.2	5.4	48.5	37.8	0.3279832
	8.2	5.4	48.6	37.7	0.3279822
	8.0	5.4	48.7	37.8	0.3279818
	8.1	5.5	48.5	37.8	0.3279818
	8.0	5.4	48.6	37.9	0.3279811
	8.1	5.5	48.6	37.7	0.3279805
	8.1	5.3	48.7	37.8	0.3279805

R16: percent of bankroll to bet on R16
R14: percent of bankroll to bet on R14
R: percent of bankroll to bet on Red
BN: percent of bankroll to bet on all black numbers
F(R16,R14,R,BN): geometric growth rate

Note that for all purposes, Green-0 is just like any black number, if the bet is on the number. So I am bundling Green-0 in the "BN" category.

The top strategy is:
8.1% on R16, 5.4% on R14, 48.6% on Red, and 37.8% on all Black numbers (i.e. 37.8% / 14 = 2.7% on each black number). The total of these bets comes to 100% of the bankroll, rounded to one place after the decimal point.

Who would have thought, eh? Totally non-intuitive, but makes sense with the "arbitrage" explanation.

Below is my code. I hope someone can verify the results in Excel, or with some other means.

Code:
package com.et.portfolio;

import java.text.*;
import java.util.*;

public class PromotionalRoulette {
    private static DecimalFormat df2, df6;

    public static void main(String[] args) {
        df2 = (DecimalFormat) NumberFormat.getNumberInstance();
        df2.setMinimumFractionDigits(1);
        df2.setMaximumFractionDigits(1);

        df6 = (DecimalFormat) NumberFormat.getNumberInstance();
        df6.setMinimumFractionDigits(7);
        df6.setMaximumFractionDigits(7);

        PromotionalRoulette promotionalRoulette = new PromotionalRoulette();
        promotionalRoulette.test();
    }

    class Strategy implements Comparable<Strategy> {
        private final double betR16, betR14, betRed, betBlackNumber;
        private final double result;

        Strategy(double betR16, double betR14, double betRed, double betBlackNumber, double result) {
            this.betR16 = betR16;
            this.betR14 = betR14;
            this.betRed = betRed;
            this.betBlackNumber = betBlackNumber;
            this.result = result;
        }

        @Override
        public int compareTo(Strategy other) {
            return Double.valueOf(other.result).compareTo(result);
        }

        @Override
        public String toString() {
            return "\t" + df2.format(betR16 * 100)
                + "\t\t" + df2.format(betR14 * 100)
                + "\t\t" + df2.format(betRed * 100)
                + "\t\t" + df2.format(betBlackNumber * 100)
                + "\t\t" + df6.format(result);
        }
    }

    private void test() {

        List<Strategy> strategies = new ArrayList<>();
        int numberOfTopStrategies = 10;
        double delta = 0.001;

        double pR16 = 4 / 37d;
        double pR14 = 3 / 37d;
        double pRed = 16 / 37d;
        double pBlackNumber = 14 / 37d;

        for (double r16 = 0; r16 <= 1; r16 += delta) {
            System.out.println(r16);
            for (double r14 = 0; r14 <= 1; r14 += delta) {
                for (double red = 0; red <= 1; red += delta) {
                    for (double blackNumber = 0; blackNumber <= 1; blackNumber += delta) {
                        if (r16 + r14 + red + blackNumber <= 1) {
                            double result = 0;
                            result += pR16 * Math.log1p(35 * r16 - r14 + red - blackNumber);                    // R16 hit
                            result += pR14 * Math.log1p(-r16 + 35 * r14 + red - blackNumber);                   // R14 hit
                            result += pRed * Math.log1p(-r16 - r14 + red - blackNumber);                        // Red hit
                            result += pBlackNumber * Math.log1p(-r16 - r14 - red + 35 * (blackNumber / 14.));   // Black number hit

                            if (result > 0) {
                                Strategy s = new Strategy(r16, r14, red, blackNumber, result);
                                strategies.add(s);
                                if (strategies.size() > numberOfTopStrategies) {
                                    Collections.sort(strategies);
                                    strategies.remove(strategies.size() - 1);
                                }
                            }
                        }
                    }
                }
            }
        }

        String header = "\tR16\t\tR14\t\tR\t\tBN\t\tF(R16,R14,R,BN)";
        System.out.println(header);
        for (Strategy s : strategies) {
            System.out.println(s);
        }
    }
}
 
Ok, here are the top 10 strategies now, with the inclusion of the bet on all black numbers:

Code:
	R16	R14	R	BN	F(R16,R14,R,BN)
	8.1	5.4	48.6	37.8	0.3279876
	8.1	5.4	48.5	37.9	0.3279855
	8.1	5.4	48.7	37.7	0.3279851
	8.2	5.4	48.5	37.8	0.3279832
	8.2	5.4	48.6	37.7	0.3279822
	8.0	5.4	48.7	37.8	0.3279818
	8.1	5.5	48.5	37.8	0.3279818
	8.0	5.4	48.6	37.9	0.3279811
	8.1	5.5	48.6	37.7	0.3279805
	8.1	5.3	48.7	37.8	0.3279805

R16: percent of bankroll to bet on R16
R14: percent of bankroll to bet on R14
R: percent of bankroll to bet on Red
BN: percent of bankroll to bet on all black numbers
F(R16,R14,R,BN): geometric growth rate

Note that for all purposes, Green-0 is just like any black number, if the bet is on the number. So I am bundling Green-0 in the "BN" category.

The top strategy is:
8.1% on R16, 5.4% on R14, 48.6% on Red, and 37.8% on all Black numbers (i.e. 37.8% / 14 = 2.7% on each black number). The total of these bets comes to 100% of the bankroll, rounded to one place after the decimal point.

Who would have thought, eh? Totally non-intuitive, but makes sense with the "arbitrage" explanation.
So if R-12 comes up, you win -8.1-5.4+48.6-37.8 = −2.7%. IOW you lose 2.7% for 16 out of 37 spins. Hard to believe this beats a strategy that never loses, even when borrowing is disallowed.
 
Where did I say anything about borrowing?

You didn't say anything about not borrowing either. If I'm in a casino with a pure arbitrage in front of me, and I can't borrow against it, then I'm the world's worst salesman.

That said, it's a more interesting question mathematically without borrow.

And the above solution has the right aura about it.
 
So if R-12 comes up, you win -8.1-5.4+48.6-37.8 = −2.7%. IOW you lose 2.7% for 16 out of 37 spins. Hard to believe this beats a strategy that never loses, even when borrowing is disallowed.

I suggested earlier that the winner could easily be a blend of the pure arbitrage and the higher expectation non-arbitrage. That's what we got. Not surprising IMO.
 
Just for clarity, the above solution does not allow borrowing, i.e. it follows the original rules where the total bet can't exceed the current bankroll.
 
Incidentally, I confirm nonlinear5's results via Excel's solver.

And I definitely just fell out of love with the Excel solver. It couldn't optimize a by-hand sum of numbers, but when the same numbers were added via the internal SUM() function it suddenly got its shit together. Also, one of the solver algos got the wrong answer while the other one got it right. Now it feels more like a typical MSFT product :)
 
So if R-12 comes up, you win -8.1-5.4+48.6-37.8 = −2.7%. IOW you lose 2.7% for 16 out of 37 spins. Hard to believe this beats a strategy that never loses, even when borrowing is disallowed.

The strategy that you proposed multiplies the original bankroll by a factor of 3, after the 10 spins. The strategy that I calculated multiplies the original bankroll by a factor of 91, after the 10 spins. That's the payoff for the risk, which makes the rate of growth reach the max at the settings that I calculated.
 
The strategy that you proposed multiplies the original bankroll by a factor of 3, after the 10 spins. The strategy that I calculated multiplies the original bankroll by a factor of 91, after the 10 spins.

Not sure that's right. My math says a Log10 increase per spin of 0.142... so 1.42... for 10 spins which is 10^1.42... = 26.63 multiplier.
 
Status
Not open for further replies.
Back
Top