A_GetMarginRate函数这样写编译错?请指导
/ 计算动态手数 if(Q_UpperLimit > Q_LowerLimit*1.03) { SetGlobalVar(10, A_GetMarginRate*A_FreeMargin/(BuyOrderPrice*BigPointValue*ContractUnit)); SetGlobalVar(11, A_GetMarginRate*A_FreeMargin/(SellOrderPrice*BigPointValue*ContractUnit)); }。A_GetMarginRate函数这样写编译错?请指导
你参数都没填
回复:if(!A_GetMarginRate(Symbol, MarginRateValue)) { Alert("保证金率获取失败"); Return; } MarginRateNum = MarginRateValue.RateShort; 但编译出错,RateShort不是结构成员工?
回复:你从哪里看来的rateshort?函数手册里只有这三个属性
回复: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 = longMarginRateio; // 多头 kMarginRateNum = shortMarginRateio; //空头 // 计算动态手数 if(Q_UpperLimit > Q_LowerLimit*1.03) { SetGlobalVar(10, IntPart(dMarginRateNum/10*A_FreeMargin/(BuyOrderPrice*BigPointValue*ContractUnit))); SetGlobalVar(11, IntPart(kMarginRateNum/10*A_FreeMargin/(SellOrderPrice*BigPointValue*ContractUnit))); }请帮修改一下保正金率获得代码的正确写法。谢谢。
回复:if(!A_GetMarginRate(Symbol, MarginRateValue))
{
Alert("保证金率获取失败");
Return;
}
dMarginRateNum = MarginRateValue.longMarginRatio; // 多头
kMarginRateNum = MarginRateValue.shortMarginRatio; //空头建议先把基础学好,不要空中楼阁
回复:谢谢你的建议,因正实盘,便学便用。按你的修改编译通过了。先摸盘测一下,正常后应用于实盘。
回复:
回复:摸测保正金率获取实败?
回复:if(!A_GetMarginRate(Symbol, MarginRateValue)) { Alert("保证金率获取失败"); dMarginRateNum = 12.98/100; // 多头 kMarginRateNum = 12.98/100; //空头 } dMarginRateNum = MarginRateValue.longMarginRatio; // 多头 kMarginRateNum = MarginRateValue.shortMarginRatio; //空头在保正金率实败时赋予常用保正金率12.98/100.保正能正常发单,这样编代码正确否?
回复:我没看懂。真实账户的保证金率是你可以想设置多少就设置多少的吗?
回复:因为我的代码要加载到所有品种,计算各品种的发单数量,有交易所的动太保正金率方便多了。可设有点麻烦。