没有人回答,解决不了,自己顶,在线等。
继续顶,希望有人帮忙解决

【官网公告】找合规开发者,开发好EA
- 2022.09.23
- www.mql5.com
大家好,我是官网版主 我们收到很多举报,希望大家不要贪小便宜吃大亏。 实话实说,开发EA时,全地球上最好的选择就是官方的自由职业者。 所有MT4和MT5的开发者都会使用官网,并且这里的开发过程,全程受到官方的保护...
你这个是开挂单,挂单不一定马上成交,因此检测仓位很可能还是0
我写了代码,要使程序在检测到市场价格到达我预设的价格时检测是否持仓,如果已有持仓就不开单,并作出提示。如果没有持仓就开多单。现在执行出现这样的问题——价格到达预设价格后,连续两次开仓,两次开仓离得很近,2、3秒钟,应该是价格先后两次到达预设价格后开仓。为什么第二次开仓代码执行过程没有检测到第一次的持仓呢?难道那时候第一次持仓还没有来得及被记录吗?
void OnTick()
{
MqlTradeRequest request={};
MqlTradeResult result={};
//int long_orderquantity=0;
//int short_orderquantity=0;
//开多单
if(SymbolInfoDouble(Symbol(),SYMBOL_ASK)==longprice)
{
//if(long_orderquantity==0)
if(PositionsTotal()==0)
{
ZeroMemory(request);
ZeroMemory(result);
request.action =TRADE_ACTION_PENDING; // 交易操作类型
request.position =0; // 关闭情况下的持仓单号
request.symbol =Symbol(); // 交易品种
request.volume =volume; // 交易量
request.type =ORDER_TYPE_BUY_STOP; // 订单类型
request.price =longprice; // 交易价格
request.stoplimit=longstoploss; //止损价格
request.deviation=10; // 可允许的价格偏差
request.magic =EXPERT_MAGIC; // 订单幻数
//--- 发送请求
if(!OrderSend(request,result))
{
//--- 显示数据失败
PrintFormat("OrderSend %s %s %.2f at %.5f error %d",
request.symbol,EnumToString(request.type),volume,request.price,GetLastError());
}
//--- 通知成功操作
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
printf("开多单成功");
// long_orderquantity++;
}
else
{
ENUM_POSITION_TYPE type1=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
PrintFormat("%s had been open.",EnumToString(type1));
}
}