if(!A_GetMarginRate(Symbol, MarginRateValue))
{
Alert("保证金率获取失败");
Return;
}
MarginRateNum = MarginRateValue.Rate; // 修正处:使用Rate字段
// 计算动态手数
if(Q_UpperLimit > Q_LowerLimit*1.03)
{
SetGlobalVar(10, IntPart(MarginRateNum/10*A_FreeMargin/(BuyOrderPrice*BigPointValue*ContractUnit)));
SetGlobalVar(11, IntPart(MarginRateNum/10*A_FreeMargin/(SellOrderPrice*BigPointValue*ContractUnit)));
}
你这不是已经获取了么?所以问题是什么?
A函数要挂账户后才能获取 ,你后面的Q函数也是一样的
MarginRateNum = MarginRateValue.Rate;编译出错,提示Rate不是结构成员?
Params
// 可添加参数
Vars
Numeric BuyTriggerPrice; // 做多触发价
Numeric SellTriggerPrice; // 做空触发价
Numeric BuyOrderPrice; // 做多委托价
Numeric SellOrderPrice; // 做空委托价
MarginRate MarginRateValue; // 保证金率结构体
Numeric dMarginRateNum; // 保证金率数值
Numeric kMarginRateNum;
Events
onBar(ArrayRef<Integer> indexs)
{
// 初始化全局变量
if(BarStatus == 0 || GetGlobalVar(0) == InvalidNumeric)
{
SetGlobalVar(0, 0); // 初始化标志
SetGlobalVar(3, 9999); // 时间戳初始值
SetGlobalVar(5, 0); // 做多价格
SetGlobalVar(6, 0); // 做空价格
SetGlobalVar(10, 0); // 做多数量
SetGlobalVar(11, 0); // 做空数量
SetGlobalVar(13, 0); // 多单状态
SetGlobalVar(14, 0); // 空单状态
SetGlobalVar(17,9999); //
SetGlobalVar(18, 0); //
SetGlobalVar(4, 0); //
}
if(Q_UpperLimit == InvalidNumeric || Q_LowerLimit == InvalidNumeric) return;
// 实时交易逻辑(K线结束时)
if(BarStatus == 2)
{
// 计算实时参数
BuyTriggerPrice = Q_LowerLimit + 33.33/100*(Q_UpperLimit - Q_LowerLimit);
SellTriggerPrice = Q_UpperLimit - 33.33/100*(Q_UpperLimit - Q_LowerLimit);
BuyOrderPrice =Round( Min(Open - 15.33/100*(Q_UpperLimit-Q_LowerLimit), BuyTriggerPrice),2);
SellOrderPrice =Round( Max(Open + 15.33/100*(Q_UpperLimit-Q_LowerLimit), SellTriggerPrice),2);
SetGlobalVar(5, BuyOrderPrice);
SetGlobalVar(6, SellOrderPrice);
if(!A_GetMarginRate(Symbol, MarginRateValue))
{
Alert("保证金率获取失败");
Return;
}
dMarginRateNum = MarginRateValue.Rateio; // 多头
kMarginRateNum = MarginRateValue.Rateio; //空头
// 计算动态手数
if(Q_UpperLimit > Q_LowerLimit*1.03)
{
SetGlobalVar(10, IntPart(MarginRateNum/10*A_FreeMargin/(BuyOrderPrice*BigPointValue*ContractUnit)));
SetGlobalVar(11, IntPart(MarginRateNum/10*A_FreeMargin/(SellOrderPrice*BigPointValue*ContractUnit)));
}