实用脚本
- @echo off
- title 区间年化计算器
- :MAIN
- cls
- echo ========================================
- echo 区间年化计算器
- echo ========================================
- echo.
- echo 日期可输入:
- echo 0803
- echo 803
- echo 8.3
- echo 8-3
- echo 8/3
- echo.
- echo 跨年自动识别,例如:1228 到 0105
- echo 输入 Q 退出
- echo.
- set "SD="
- set "ED="
- set "SN="
- set "EN="
- set /p "SD=开始日期:"
- if /i "%SD%"=="Q" exit /b
- set /p "SN=开始净值:"
- set /p "ED=结束日期:"
- if /i "%ED%"=="Q" exit /b
- set /p "EN=结束净值:"
- set "START_DATE=%SD%"
- set "END_DATE=%ED%"
- set "START_NAV=%SN%"
- set "END_NAV=%EN%"
- echo.
- echo ----------------------------------------
- powershell.exe -NoProfile -Command "$ErrorActionPreference='Stop';function ParseMD([string]$v){$v=$v.Trim();if($v -match '^(\d{1,2})[./-](\d{1,2})$'){return @([int]$Matches[1],[int]$Matches[2])};if($v -match '^\d{4}$'){return @([int]$v.Substring(0,2),[int]$v.Substring(2,2))};if($v -match '^\d{3}$'){return @([int]$v.Substring(0,1),[int]$v.Substring(1,2))};throw '日期格式错误'};try{$a=ParseMD $env:START_DATE;$b=ParseMD $env:END_DATE;$sm=$a[0];$sd=$a[1];$em=$b[0];$ed=$b[1];$y=(Get-Date).Year;$ey=$y;if(($em -lt $sm)-or(($em -eq $sm)-and($ed -lt $sd))){$ey++};$sdt=Get-Date -Year $y -Month $sm -Day $sd -Hour 0 -Minute 0 -Second 0;$edt=Get-Date -Year $ey -Month $em -Day $ed -Hour 0 -Minute 0 -Second 0;$days=[int]($edt-$sdt).TotalDays;if($days -le 0){throw '结束日期必须晚于开始日期'};$ci=[Globalization.CultureInfo]::InvariantCulture;$sv=[double]::Parse($env:START_NAV,$ci);$ev=[double]::Parse($env:END_NAV,$ci);if($sv -le 0 -or $ev -le 0){throw '净值必须大于0'};$r=$ev/$sv-1;$simple=$r*365/$days*100;$compound=([Math]::Pow($ev/$sv,365.0/$days)-1)*100;$pct=[char]37;$lines=@(('区间:{0:yyyy-MM-dd} 到 {1:yyyy-MM-dd}' -f $sdt,$edt),('区间天数:{0} 天' -f $days),('区间收益率:{0:F4}{1}' -f ($r*100),$pct),('简单年化:{0:F4}{1}' -f $simple,$pct),('复利年化:{0:F4}{1}' -f $compound,$pct));$lines|ForEach-Object{Write-Host $_}}catch{Write-Host ('错误:'+$_.Exception.Message) -ForegroundColor Red}"
- echo ----------------------------------------
- echo.
- pause
- goto MAIN
复制代码 |