Vars
Series<Numeric> calculatedLots;
Integer globalContractUnit(0);
Numeric globalLongMarginRate(0);
Numeric globalShortMarginRate(0);
Events
OnInit()
globalContractUnit = ContractUnit();
MarginRate mRate;
Bool ret = A_GetMarginRate(Symbol, mRate);
If (ret)
{
globalLongMarginRate = mRate.longMarginRatio;
globalShortMarginRate = mRate.shortMarginRatio;
}
Commentary输出的信息:
# [资金管理] 开仓数据准备:
# 可用资金: 10000.85 元
# 合约乘数: 0(初始化时获取)
# 多头保证金率: 0%(初始化时获取)
# 空头保证金率: 0%(初始化时获取)
而且运行策略时初始化到百分之一然后卡顿几秒才继续读百分比。大佬给看看是不是代码有问题,获取账户资金没有问题。要是将保证金率和乘数放在OnBarOpen开仓时获取的话策略使用模拟账户正常交易运行策略执行特别慢,,几小时才百分之几。回放运行的话正常。
能给可执行的代码吗
全部代码太长了。。。我的思路是获取账户合约乘数合约保证金开盘时开仓套用公式计算可开仓手数开仓。上面的代码就是我编写的获取合约乘数和保证金率的代码。。
但是你的代码 和你说的情况 哪也不挨哪呀
而且 几个局域变量 你放Oninit里执行
其他代码是用不上吗
代码很长 但问题点都说不清 那就是这个代码不是自己写的吗
不好意思我是新手😢,我问的智能客服。。。它说这么写的。。Vars先声明变量,然后Events OnInit()策略初始化的时候获取。OnBarOpen区域使用没有读取到。
官方那个只能客服回复我说创建自定义函数计算
// 函数:计算可开仓手数
// 参数:currentPrice - 当前价格
// isLong - True表示多头,False表示空头
// === (初始化时获取并保存)===
Defs
Numeric CalculateMaxLots(Numeric currentPrice, Bool isLong)
{
Numeric availableCapital = A_FreeMargin();
// 每手保证金 = 当前价格 × 合约乘数 × 每点价值 × 保证金率
Numeric perContractMargin = currentPrice * globalContractUnit * globalBigPointValue * globalLongMarginRate;
If (perContractMargin <= 0)
{
Return MinLots;
}
// 公式:最大手数 = (可用资金 × 资金比例) / 每手保证金
Numeric usableCapital = availableCapital * CapitalRatio * TradeRatio;
Numeric maxCalculatedLots = IntPart(usableCapital / perContractMargin);