126 lines
4.2 KiB
Bash
Executable File
126 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 设置默认值
|
|
MAX_ENTRY_ADJUSTMENTS=3
|
|
ADD_POSITION_CALLBACK=0.047
|
|
STAKE_DIVISOR=2.0
|
|
ADD_POSITION_MULTIPLIER=1.6
|
|
ADD_POSITION_GROWTH=2.0
|
|
INITIAL_STAKE=1000
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
echo "用法: $0 [选项...]"
|
|
echo ""
|
|
echo "计算FreqAI策略中的加仓相对降幅间隔和加仓金额"
|
|
echo ""
|
|
echo "选项:"
|
|
echo " -h, --help 显示此帮助信息并退出"
|
|
echo " -m, --max-entry-adjustments 最大加仓次数 (默认: 3)"
|
|
echo " -c, --callback 基础加仓回调百分比 (默认: 0.047)"
|
|
echo " -d, --divisor 加仓金额分母 (默认: 2.0)"
|
|
echo " -p, --multiplier 加仓间隔系数 (默认: 1.6)"
|
|
echo " -g, --growth 加仓金额增长因子 (默认: 2.0)"
|
|
echo " -s, --initial-stake 初始入场金额 (默认: 1000)"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " $0 使用所有默认参数运行"
|
|
echo " $0 -m 3 -c 0.047 -d 2.0 -p 1.6 -g 2.0 -s 1000 使用指定参数运行"
|
|
echo " $0 --max-entry-adjustments 3 --callback 0.03 --multiplier 1 使用等距间隔策略"
|
|
echo ""
|
|
echo "计算公式:"
|
|
echo " 相对降幅间隔 = callback * (multiplier ^ (加仓次数-1))"
|
|
echo " 加仓金额 = (initial_stake / divisor) * (growth ^ 加仓次数)"
|
|
exit 0
|
|
}
|
|
|
|
# 处理命令行参数
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
show_help
|
|
;;
|
|
-m|--max-entry-adjustments)
|
|
MAX_ENTRY_ADJUSTMENTS="$2"
|
|
shift 2
|
|
;;
|
|
-c|--callback)
|
|
ADD_POSITION_CALLBACK="$2"
|
|
shift 2
|
|
;;
|
|
-d|--divisor)
|
|
STAKE_DIVISOR="$2"
|
|
shift 2
|
|
;;
|
|
-p|--multiplier)
|
|
ADD_POSITION_MULTIPLIER="$2"
|
|
shift 2
|
|
;;
|
|
-g|--growth)
|
|
ADD_POSITION_GROWTH="$2"
|
|
shift 2
|
|
;;
|
|
-s|--initial-stake)
|
|
INITIAL_STAKE="$2"
|
|
shift 2
|
|
;;
|
|
-*|--*)
|
|
echo "错误: 未知选项 $1"
|
|
echo "使用 -h 或 --help 查看帮助信息"
|
|
exit 1
|
|
;;
|
|
*)
|
|
# 忽略任何非选项参数
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# 打印当前设置
|
|
printf "当前参数设置:\n"
|
|
printf "最大加仓次数: %d\n" "$MAX_ENTRY_ADJUSTMENTS"
|
|
printf "基础回调百分比: %.6f\n" "$ADD_POSITION_CALLBACK"
|
|
printf "加仓金额分母: %.2f\n" "$STAKE_DIVISOR"
|
|
printf "加仓间隔系数: %.2f\n" "$ADD_POSITION_MULTIPLIER"
|
|
printf "加仓金额增长因子: %.2f\n" "$ADD_POSITION_GROWTH"
|
|
printf "初始入场金额: %.2f\n\n" "$INITIAL_STAKE"
|
|
|
|
# 打印表头
|
|
printf "%-10s %-20s %-20s\n" "加仓次数" "相对降幅间隔" "加仓金额"
|
|
printf "%-10s %-20s %-20s\n" "-------" "------------" "--------"
|
|
|
|
# 计算加仓(包括初始入场)
|
|
for i in $(seq 0 $MAX_ENTRY_ADJUSTMENTS); do
|
|
# 计算当前所需的加仓间隔百分比
|
|
if [ $i -eq 0 ]; then
|
|
# 第一次是初始入场,没有回调要求
|
|
callback="N/A"
|
|
else
|
|
# 计算当前回调百分比 = 基础间隔 * (系数 ^ (i-1))
|
|
callback=$(echo "$ADD_POSITION_CALLBACK * ($ADD_POSITION_MULTIPLIER ^ ($i-1))" | bc -l)
|
|
callback=$(printf "%.6f" $callback)
|
|
fi
|
|
|
|
# 计算加仓金额
|
|
if [ $i -eq 0 ]; then
|
|
# 第一次是初始入场
|
|
stake_amount=$INITIAL_STAKE
|
|
else
|
|
# 计算加仓金额: (initial_stake / stake_divisor) * (growth ^ i)
|
|
stake_amount=$(echo "($INITIAL_STAKE / $STAKE_DIVISOR) * ($ADD_POSITION_GROWTH ^ $i)" | bc -l)
|
|
stake_amount=$(printf "%.2f" $stake_amount)
|
|
fi
|
|
|
|
# 打印结果
|
|
printf "%-10d %-20s %-20s\n" "$i" "$callback" "$stake_amount"
|
|
done
|
|
|
|
# 计算累计投入
|
|
cumulative_stake=$(echo "$INITIAL_STAKE" | bc -l)
|
|
for i in $(seq 1 $MAX_ENTRY_ADJUSTMENTS); do
|
|
stake_amount=$(echo "($INITIAL_STAKE / $STAKE_DIVISOR) * ($ADD_POSITION_GROWTH ^ $i)" | bc -l)
|
|
cumulative_stake=$(echo "$cumulative_stake + $stake_amount" | bc -l)
|
|
done
|
|
cumulative_stake=$(printf "%.2f" $cumulative_stake)
|
|
|
|
printf "\n%s\n" "累计投入金额: $cumulative_stake" |