# -*- coding: utf-8 -*-
"""生成 AI旺财 EA 优化参数 .set 文件（本金 60000 USD / XAUUSD）"""
import os
from grid_optimize import ladder, grid_stats, PRICE0, EQUITY, CONTRACT

OUT = r'C:\Users\Jeebin\WorkBuddy\2026-09-02-08-42-37'

# ---------------------------------------------------------------- 方案定义
PLANS = {
    '稳健': dict(mult=1.20, n=12, dpt=4500, init=0.01, maxlot=0.10,
                 tp=600.0, sl=15000.0,
                 retrace_start=500.0, retrace_dd=150.0, magic=20260902,
                 desc='推荐主方案：零爆仓，收益与回撤平衡'),
    '保守': dict(mult=1.15, n=15, dpt=4500, init=0.01, maxlot=0.10,
                 tp=600.0, sl=15000.0,
                 retrace_start=400.0, retrace_dd=100.0, magic=20260903,
                 desc='回撤最小，覆盖区间最大，适合长期挂机'),
    '进取': dict(mult=1.25, n=12, dpt=4500, init=0.01, maxlot=0.12,
                 tp=600.0, sl=15000.0,
                 retrace_start=600.0, retrace_dd=200.0, magic=20260904,
                 desc='收益更高，代价是 0.7% 爆仓率与更大回撤'),
}


def build(p):
    g = grid_stats(p['init'], p['mult'], p['n'], p['dpt'], p['maxlot'])
    L = ' '.join('%.2f' % x for x in g['L'])
    lines = []
    A = lines.append
    A('; ===== AI旺财 EA 优化参数 | 本金 60000 USD | XAUUSD %.0f =====' % PRICE0)
    A('; 方案: %s' % p['desc'])
    A('; 满仓 %.2f 手 | 满仓浮亏 $%.0f (本金%.1f%%) | 覆盖 $%.0f (%.2f%%)' % (
        g['S'], g['dd'], g['dd'] / EQUITY * 100, g['span'], g['span'] / PRICE0 * 100))
    A('; 保本所需反弹 $%.1f | 保证金占用 $%.0f (%.2f%%)' % (
        g['be'], g['margin'], g['margin'] / EQUITY * 100))
    A('; 手数阶梯: %s' % L)
    A('; 蒙特卡洛(年化波动28%/含隔夜利息): 见报告')
    A(';')
    A('; [重要] 金额类参数单位未经验证，首次使用请先看报告中的"单位标定"章节')
    A('')
    A('; 【通用参数】')
    A('in通用参数_IsShowComm=true')
    A('in通用参数_IsShowSymbolPanel=false')
    A('in通用参数_ShowLogPanel=false')
    A('in通用参数_LogLevel=0')
    A('in通用参数_MaxSpread=60')
    A('in通用参数_MagicNum=%d' % p['magic'])
    A('; 【基础设置】')
    A('in龙马策略参数_InpComment=')
    A('in龙马策略参数_IsEnable=true')
    A('in龙马策略参数_IsAutoLot=false')
    A('in龙马策略参数_AutoLotMargin=20000.0')
    A('in龙马策略参数_InitialLot=%.2f' % p['init'])
    A('in龙马策略参数_MaxLot=%.2f' % p['maxlot'])
    A('in龙马策略参数_AllowBuy=true')
    A('in龙马策略参数_AllowSell=true')
    A('; 【交易时间控制(平台时间，仅限首单)】')
    for d in ('Monday', 'Tuesday', 'Wednesday', 'Thursday'):
        A('in龙马策略参数_TradeSessions%s=02:00-19:00' % d)
    A('in龙马策略参数_TradeSessionsFriday=02:00-18:00')
    A('in龙马策略参数_TradeSessionsSaturday=')
    A('in龙马策略参数_TradeSessionsSunday=00:00-00:00')
    A('; 【AI智能面板】')
    A('; 原配置含两枚明文 DeepSeek Key，建议吊销后填入自己的')
    A('in_AI_EnableAIPanel=false')
    A('in_AI_ApiUrl=https://api.deepseek.com/chat/completions')
    A('in_AI_ApiKey=')
    A('in_AI_Model=deepseek-v4-flash')
    A('in_AI_CallIntervalSec=300')
    A('in_AI_UseAINews=false')
    A('in_AI_NewsIntervalSec=1800')
    A('; 【开仓参数】')
    A('in龙马策略参数_AddMultiplier=%.2f' % p['mult'])
    A('in龙马策略参数_AddDistancePips=%d' % p['dpt'])
    A('in龙马策略参数_MaxOrders=%d' % p['n'])
    A('in龙马策略参数_IsContinueAddAfterStopLoss=false')
    A('; 【平仓参数】')
    A('in龙马策略参数_CloseMode=0')
    A('in龙马策略参数_FixedTpPips=0')
    A('in龙马策略参数_FixedSlPips=0')
    A('in龙马策略参数_IsAtrTp=false')
    A('in龙马策略参数_AtrTpPeriod=14')
    A('in龙马策略参数_AtrTpMultiplier=20.0')
    A('in龙马策略参数_IsAtrSl=true')
    A('in龙马策略参数_AtrSlPeriod=14')
    A('in龙马策略参数_AtrSlThreshold=5.0')
    A('in龙马策略参数_AtrSlMultiplierHigh=20.0')
    A('in龙马策略参数_AtrSlMultiplierLow=25.0')
    A('in龙马策略参数_AmountTp=0.0')
    A('in龙马策略参数_AmountSl=%.1f' % p['sl'])
    A('in龙马策略参数_IsHalfLossReduce=false')
    A('in龙马策略参数_IsTrailingTp=false')
    A('in龙马策略参数_TrailingTpStartPips=2500')
    A('in龙马策略参数_TrailingTpPlatformSlPips=800')
    A('in龙马策略参数_TrailingTpMarketSlPips=800')
    A('in龙马策略参数_OverallProfitCloseAmount=%.1f' % p['tp'])
    A('in龙马策略参数_ReverseProtectionAmount=0.0')
    A('in龙马策略参数_RetraceProtectionStartAmount=%.1f' % p['retrace_start'])
    A('in龙马策略参数_RetraceProtectionDrawdownAmount=%.1f' % p['retrace_dd'])
    A('in龙马策略参数_MaTF=0')
    A('in龙马策略参数_MaPeriod=200')
    A('; 【开仓条件】')
    A('in龙马策略参数_FirstOpenMode=0')
    A('in龙马策略参数_AddMode=0')
    A('in龙马策略参数_IsRsiFilter=true')
    A('in龙马策略参数_IsRsiFilterAddPosi=true')
    A('in龙马策略参数_RsiTF=0')
    A('in龙马策略参数_RsiPeriod=14')
    A('in龙马策略参数_RsiUpper=70.0')
    A('in龙马策略参数_RsiLower=30.0')
    A('; 【移动止盈线】')
    A('in_TrailLine_Show=true')
    A('in_TrailLine_Color=16711935')
    A('in_TrailLine_Width=1')
    A('in_TrailLine_Style=1')
    A('; 【授权】')
    A('in_Auth_ExtraAccounts=')
    A('in_Auth_AllowAllInTester=true')
    return '\r\n'.join(lines) + '\r\n', g


if __name__ == '__main__':
    made = []
    print('=' * 100)
    for name, p in PLANS.items():
        text, g = build(p)
        fn = os.path.join(OUT, 'AI旺财_60000USD_%s.set' % name)
        with open(fn, 'wb') as f:
            f.write(b'\xff\xfe')
            f.write(text.encode('utf-16-le'))
        made.append(fn)
        print('[%s] %s' % (name, os.path.basename(fn)))
        print('  阶梯: %s' % ' '.join('%.2f' % x for x in g['L']))
        print('  满仓 %.2f 手 | 浮亏 $%.0f (%.1f%%) | 覆盖 $%.0f (%.2f%%) | 保本反弹 $%.1f' % (
            g['S'], g['dd'], g['dd'] / EQUITY * 100, g['span'],
            g['span'] / PRICE0 * 100, g['be']))
        print('  保证金 $%.0f (%.2f%%) | 止盈 $%.0f | 止损 $%.0f' % (
            g['margin'], g['margin'] / EQUITY * 100, p['tp'], p['sl']))
    print('=' * 100)
    for m in made:
        print('  ', m)
