/// <summary> /// Money Manager checks if the shoe or session should end based on stop loss, take profit, and bankroll /// Note that NextBet is committed here, because it is needed for the bankroll check. /// The call to betProgression advances the progression, if any. /// </summary> /// <param name="score"></param> /// <param name="betProgression"></param> /// <param name="mmShoe"></param> /// <param name="mmBankroll"></param> /// <returns></returns> private bool MoneyManager(decimal shoeTotalScore, decimal sessionTotalScore, BetProgressionCore betProgression, MoneyManagementShoe mmShoe, MoneyManagementBankroll mmBankroll) { if (mmShoe(shoeTotalScore)) { return(true); } NextBet = betProgression(LastBetResult); if (mmBankroll(sessionTotalScore, NextBet)) { return(true); } return(false); }
private void SetBetProgression() { ResetBetLastUnitToBaseUnit(); switch (_betProgressionType) { case BetProgressionTypes.FlatBet: { BetProgressionCore = BetProgression_FlatBet_Method; } break; case BetProgressionTypes.Martingale: { BetProgressionCore = BetProgression_Martingale_Method; } break; case BetProgressionTypes.DAlembert: { BetProgressionCore = BetProgression_DAlembert_Method; } break; case BetProgressionTypes.Parlay: { BetProgressionCore = BetProgression_Custom_Method; } break; case BetProgressionTypes.Custom: { BetProgressionCore = BetProgression_Custom_Method; } break; case BetProgressionTypes.Fibonacci: { BetProgressionCore = BetProgression_Fibonnaci_Method; } break; case BetProgressionTypes.Labouchere: { BetProgressionCore = BetProgression_Labouchere_Method; } break; case BetProgressionTypes.OscarsGrind: { BetProgressionCore = BetProgression_OscarsGrind_Method; } break; default: { BetProgressionCore = BetProgression_No_Method; } break; } }
private OutcomesBaccaratCoup StrategyCore_Follow(int i, List <ResultBaccaratCoup> results, ScoreBaccarat scoreShoe, decimal sessionTotalScore, BetProgressionCore betProgression, MoneyManagementShoe mmShoe, MoneyManagementBankroll mmBankroll) { if (i < Follow_Length) { Follow_BetPlacement = OutcomesBaccaratCoup.None; return(OutcomesBaccaratCoup.Continue); } int j = 1; OutcomesBaccaratCoup lastOutcome = results[i - j].OutcomeCoup; for (; j < Follow_Length; j++) { if (results[i - j - 1].OutcomeCoup != lastOutcome) { break; } } if (j == Follow_Length) { if (lastOutcome != OutcomesBaccaratCoup.T) { Follow_BetPlacement = lastOutcome; } } if (Follow_BetPlacement != OutcomesBaccaratCoup.None) { if (MoneyManager(scoreShoe.TotalScore, sessionTotalScore, betProgression, mmShoe, mmBankroll)) { return(OutcomesBaccaratCoup.Break); } ResultBaccaratCoup result = results[i]; OutcomesBaccaratCoup betPlacement = Follow_BetPlacement; result.CoupBet.BetPlacement = betPlacement; result.CoupBet.UnitBet = NextBet; OutcomesBaccaratCoup outcome = result.OutcomeCoup; if (outcome == betPlacement) { if (outcome == OutcomesBaccaratCoup.B) { scoreShoe.ScoreBankerWin(NextBet); } else if (outcome == OutcomesBaccaratCoup.P) { scoreShoe.ScorePlayerWin(NextBet); } else if (outcome == OutcomesBaccaratCoup.T) { scoreShoe.ScoreTieWin(NextBet); } result.OutcomeBet = OutcomesLastCoupBet.Win; LastBetResult = result.OutcomeBet; } else { if (outcome == OutcomesBaccaratCoup.T) { if (CustomPattern_BetPlacement != OutcomesBaccaratCoup.T) { result.OutcomeBet = OutcomesLastCoupBet.Push; LastBetResult = result.OutcomeBet; } } else { scoreShoe.ScoreLoss(NextBet, betPlacement); result.OutcomeBet = OutcomesLastCoupBet.Loss; LastBetResult = result.OutcomeBet; } } } return(Follow_BetPlacement); }
private OutcomesBaccaratCoup StrategyCore_OppositeN(int i, List <ResultBaccaratCoup> results, ScoreBaccarat scoreShoe, decimal sessionTotalScore, BetProgressionCore betProgression, MoneyManagementShoe mmShoe, MoneyManagementBankroll mmBankroll) { if (i < CustomOpposite_Length) { return(OutcomesBaccaratCoup.Continue); } OutcomesBaccaratCoup outcomeN = results[i - CustomOpposite_Length].OutcomeCoup; if (outcomeN == OutcomesBaccaratCoup.T) { return(OutcomesBaccaratCoup.Continue); } if (MoneyManager(scoreShoe.TotalScore, sessionTotalScore, betProgression, mmShoe, mmBankroll)) { return(OutcomesBaccaratCoup.Break); } ResultBaccaratCoup result = results[i]; OutcomesBaccaratCoup betPlacement; if (outcomeN == OutcomesBaccaratCoup.B) { betPlacement = OutcomesBaccaratCoup.P; } else { betPlacement = OutcomesBaccaratCoup.B; } result.CoupBet.BetPlacement = betPlacement; result.CoupBet.UnitBet = NextBet; OutcomesBaccaratCoup outcome = result.OutcomeCoup; if (betPlacement == outcome) { if (outcome == OutcomesBaccaratCoup.B) { scoreShoe.ScoreBankerWin(NextBet); } else { scoreShoe.ScorePlayerWin(NextBet); } result.OutcomeBet = OutcomesLastCoupBet.Win; LastBetResult = OutcomesLastCoupBet.Win; } else { if (outcome == OutcomesBaccaratCoup.T) { result.OutcomeBet = OutcomesLastCoupBet.Push; LastBetResult = OutcomesLastCoupBet.Push; } else { scoreShoe.ScoreLoss(NextBet, betPlacement); result.OutcomeBet = OutcomesLastCoupBet.Loss; LastBetResult = OutcomesLastCoupBet.Loss; } } return(betPlacement); }
private OutcomesBaccaratCoup StrategyCore_TieAlways(int i, List <ResultBaccaratCoup> results, ScoreBaccarat scoreShoe, decimal sessionTotalScore, BetProgressionCore betProgression, MoneyManagementShoe mmShoe, MoneyManagementBankroll mmBankroll) { if (MoneyManager(scoreShoe.TotalScore, sessionTotalScore, betProgression, mmShoe, mmBankroll)) { return(OutcomesBaccaratCoup.Break); } ResultBaccaratCoup result = results[i]; OutcomesBaccaratCoup betPlacement = OutcomesBaccaratCoup.T; result.CoupBet.BetPlacement = betPlacement; result.CoupBet.UnitBet = NextBet; OutcomesBaccaratCoup outcome = result.OutcomeCoup; if (outcome == OutcomesBaccaratCoup.T) { scoreShoe.ScoreTieWin(NextBet); result.OutcomeBet = OutcomesLastCoupBet.Win; LastBetResult = OutcomesLastCoupBet.Win; } else { scoreShoe.ScoreLoss(NextBet, betPlacement); result.OutcomeBet = OutcomesLastCoupBet.Loss; LastBetResult = OutcomesLastCoupBet.Loss; } return(betPlacement); }
private OutcomesBaccaratCoup StrategyCore_None(int i, List <ResultBaccaratCoup> results, ScoreBaccarat scoreShoe, decimal sessionTotalScore, BetProgressionCore betProgression, MoneyManagementShoe mmShoe, MoneyManagementBankroll mmBankroll) { if (MoneyManager(scoreShoe.TotalScore, sessionTotalScore, betProgression, mmShoe, mmBankroll)) { return(OutcomesBaccaratCoup.Break); } ResultBaccaratCoup result = results[i]; OutcomesBaccaratCoup betPlacement = OutcomesBaccaratCoup.None; result.CoupBet.BetPlacement = betPlacement; result.CoupBet.UnitBet = NextBet; return(betPlacement); }