/ 计算动态手数
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.保正能正常发单,这样编代码正确否?
我没看懂。
真实账户的保证金率是你可以想设置多少就设置多少的吗?