发现很难发送订单。 - 页 2

 
"2014.04.02 00:19:50.590 2010.10.15 00:00:00 兑换失败 在1.60082买入0.07英镑兑美元[无效量]"

 
MetaNt:
"2014.04.02 00:19:50.590 2010.10.15 00:00:00 兑换失败 在1.60082买入0.07英镑兑美元 [无效量]"

请在GBPUSD图表 上运行这个小脚本,并报告结果。

void OnStart()
  {
   printf("Volume min = %f, volume step = %f for symbol %s.",
          SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),
          SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),
          _Symbol);

  }
 
angevoyageur:

请在GBPUSD图表上运行这个小脚本,并报告其结果。

对不起,我没有看到这个帖子。我正在处理我在演示模式下的mql4版本中遇到的一些问题。

我会运行这个脚本的,谢谢

 

报告

"2014.04.02 15:11:27.158 Lot (GBPUSD,D1) Volume min = 0.010000, volume step = 0.010000 forsymbol GBPUSD。"

 
MetaNt:

报告

"2014.04.02 15:11:27.158 Lot (GBPUSD,D1) Volume min = 0.010000, volume step = 0.010000 for symbol GBPUSD。"

这很奇怪。你能张贴所有相关的代码,包括订单结束调用 和错误处理(打印)吗?
 
angevoyageur:
这很奇怪。你能把所有的相关代码贴出来吗,包括调用订单端和错误处理(打印)?

是的,按照要求在下面

Lot=LotSize/8;


MqlTradeResult StageOneBuyRes={0};
MqlTradeRequest StageOneBuy={0};

StageOneBuy.action=TRADE_ACTION_DEAL;  
StageOneBuy.magic=MagicNumber;  
StageOneBuy.symbol=_Symbol;            // symbol
StageOneBuy.volume=Lot;
StageOneBuy.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
StageOneBuy.sl=0;                  // Stop Loss is not specified
StageOneBuy.tp=0;                 // Take Profit is not specified 
StageOneBuy.deviation =7;  
StageOneBuy.type=ORDER_TYPE_BUY; // order type
StageOneBuy.type_filling = ORDER_FILLING_FOK;
StageOneBuy.comment = "test";
 

MqlTradeResult StageOneSellRes={0};
MqlTradeRequest StageOneSell={0};

StageOneSell.action=TRADE_ACTION_DEAL;  
StageOneSell.magic=MagicNumber;  
StageOneSell.symbol=_Symbol;            // symbol
StageOneSell.volume=Lot;
StageOneSell.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
StageOneSell.sl=0;                  // Stop Loss is not specified
StageOneSell.tp=0;                 // Take Profit is not specified 
StageOneSell.deviation =7;  
StageOneSell.type=ORDER_TYPE_SELL; // order type
StageOneSell.type_filling = ORDER_FILLING_FOK;
StageOneSell.comment = "test";

if(SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)==0){if(OrderSend(StageOneBuy,StageOneBuyRes))buyticket1=(int)OrderGetInteger(ORDER_POSITION_ID);}
       if(buyticket1>0){Print("Order Placed ","Order Ticket ", buyticket1," Order Lots ",OrderGetDouble(ORDER_VOLUME_INITIAL));return;}else{Print("Order Placement Unsuccessful ", GetLastError());return;}

if(SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)==0){if(OrderSend(StageOneSell,StageOneSellRes))sellticket1=(int)OrderGetInteger(ORDER_POSITION_ID);}
       if(sellticket1>0){Print("Order Placed ","Order Ticket ", sellticket1," Order Lots ", OrderGetDouble(ORDER_VOLUME_INITIAL));return;}else{Print("Order Placement Unsuccessful ", GetLastError());return;}
 
MetaNt:

是的,下面是按要求的


这段代码是不对的,你不能像你那样使用它。

buyticket1=(int)OrderGetInteger(ORDER_POSITION_ID);

你必须使用StageOneBuyRes结构来获得关于你的订单/交易的信息。主要是你必须检查retcode,请看文档 或在网站上搜索使用OrderSend()的例子,它不像mql4那样工作。

你的代码可能是在没有错误的地方返回错误。你是否检查过终端,看是否有开仓或增仓的情况?

作为一个题外话,但与本主题无关,下面的代码可能不会做你认为的那样。

SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)
 

好的,我会修改的。

我不知道你说的检查终端是什么意思,那里没有显示任何回测 结果

 
MetaNt:

好的,我会修改的。

我不知道你说的检查终端是什么意思,那里没有显示任何回测结果

啊,好的,我没有注意到这是一个回测
 
angevoyageur:

这个代码是不对的,你不能像你那样使用它。

你必须使用StageOneBuyRes结构来获得关于你的订单/交易的信息。主要是你要检查retcode,请看文档 或在网站上搜索使用OrderSend()的例子,它不像用mql4那样工作。


Btw 这将如何导致错误的出现?