PokerMath.psm1

###########################################################################################
# Title : Poker M Ratio and Effective M calculator for Powershell
# Filename : PokerMath.psm1
# Created by: Seab4ss
# Date : 10/20/2017
# Version : 1.0
# Update : This is the first version
# E-mail : sebastianese@gmail.com
#####################



function Get-Ratios{

<#
    .Synopsis
   Get-Ratios calculates both your M Ratio and Effective M. Depending on the value it will also place you on a colour zone. This is based on:
   https://en.wikipedia.org/wiki/M-ratio
 
   Get-Mratio will calculate your M Ratio
    
   Get-EffectiveM will calculate you Effective M Ratio
 
    .DESCRIPTION
  Get-Ratios Calculates both your M Ratio and Effective M. Depending on the value it will also place you on a colour zone. This is based on:
   https://en.wikipedia.org/wiki/M-ratio. This is to be used as a guide and reference while playing most types of Poker tournaments.
     
     
    .EXAMPLE
    Get-Ratios -Stack <your total Stacks> -Players <number of players> -BB <big blind> -SB <small blind> -Ante <ante>
     
    For example for a total stack of 3000, on a 10 player table with blinds of 100 and 50 and no ante:
    Get-Ratios -Stack 3000 -Players 10 -BB 100 -SB 50 -Ante 0
#>
 
Param(
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Stack,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Players,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$BB,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$SB,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Ante
   )

$TotalAnte = $players * $Ante
$Mratio = $stack / ($BB + $SB + $TotalAnte) 
$BlindOut = $players * $Mratio
$EffectiveM = $Mratio * ($players/10)
$BlindOut2 = $players * $EffectiveM
$TotalBlinds = $Stack / $BB

Write-Host "Calculating Stats for a total stack size of [$stack], on a [$players] player table. Blinds are [$SB] and [$BB] with an ante of [$Ante] " -ForegroundColor Cyan



Function Get-Mratio{
$b = [math]::Round($BlindOut)
$a = [math]::Round($Mratio)
Write-Host "
Big Blinds: $TotalBlinds
M-ratio: $a
Blinded Out: $a rounds, or $B hands"
  -ForegroundColor Cyan 
if ($Mratio -ge 20){
Write-Host "M-Ratio Zone: Green Zone" -ForegroundColor Green} 
if ($Mratio -ge 10 -and $Mratio -lt 20){
  Write-Host "M-Ratio Zone: Yellow Zone. Must take more risks" -ForegroundColor Yellow} 
if ($Mratio -ge 6 -and $Mratio -lt 10){
Write-Host "M-Ratio Zone: Orange Zone. Main focus is to be first-in whatever you decide to play, important to preserve chips" -ForegroundColor DarkRed} 
if ($Mratio -ge 1 -and $Mratio -lt 6){
Write-Host "M-Ratio Zone: Red Zone. Your only move is to move all-in or fold." -ForegroundColor Red} 
if ($Mratio -lt 1){
Write-Host "M-Ratio Zone: DEAD ZONE :(" -ForegroundColor Black} 
}

Function Get-EffectiveM{
$a = [math]::Round($EffectiveM)
$b = [math]::Round($BlindOut2)
Write-Host "
Effective-M Ratio: $a
Blinded Out: $a rounds, or $B hands"
 -ForegroundColor Cyan
if ($EffectiveM -ge 20){
Write-Host "Effective-M Ratio Zone: Green Zone" -ForegroundColor Green} 
if ($EffectiveM -ge 10 -and $EffectiveM -lt 20){
  Write-Host "Effective-M Ratio Zone: Yellow Zone. Must take more risks" -ForegroundColor Yellow} 
if ($EffectiveM -ge 6 -and $EffectiveM -lt 10){
Write-Host "Effective-M Ratio Zone: Orange Zone. Main focus is to be first-in whatever you decide to play, important to preserve chips" -ForegroundColor DarkRed} 
if ($EffectiveM -ge 1 -and $EffectiveM -lt 6){
Write-Host "Effective-M Ratio Zone: Red Zone. Your only move is to move all-in or fold." -ForegroundColor Red} 
if ($EffectiveM -lt 1){
Write-Host "Effective-M Ratio Zone: DEAD ZONE :(" -ForegroundColor Black} 
}
Get-Mratio
Get-EffectiveM


}

function Get-CallStats {
#Based on Phil Gordon rule of 2 and 4 . Still in development
Param(
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Outs,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Pot,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$Callbet,
   [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
   [int]$CardsToSee
   )

$GordonC = 2
$EffectivePot = $Pot + $CallBet  
$WinP = ($Outs * $GordonC) * $CardsToSee
$contribution = ($Callbet*100)/$EffectivePot
$EV = $WinP - $contribution
$EvVal = ($EffectivePot*$EV) /100

Write-Host "Your winning percentage for [$Outs] outs is [$WinP]%.
Your EV is [$EV] and you are contributing with [$contribution]% of the pot with is about [$EvVal] chips"
 -ForegroundColor Cyan
if ($EV -ge "0"){
Write-Host "You are in a good position to call this hand" -ForegroundColor Green
}
else{
Write-Host "THis hand should be folded" -ForegroundColor Red
}

}

#EV = {W% * $W} - {%l *$l} needs to be 0 or more