帮助。为什么EA不关闭交易 - 页 5

 
crossy:

O.K. 这里是修改后的版本,我得到了同样的错误。

Y.

你根本不需要这个功能......。把它去掉。

 

让我们再做一次第二部分 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
/*
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow); // close it up there, and you have to rewrite the parameters
   }
   */
 

这样做......。 ( 从这里重复:https://www.mql5.com/en/forum/139543)

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print("Trying to close Order: ", OrderTicket());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)
      Print("OrderClose failed, error # ", GetLastError());                          // <------- reports the error if the OrderClose failed . . 
   } 

......你就完全不需要这个功能了。

 
onewithzachy:

让我们再做一次第二部分 :(


我希望你能原谅我,因为我有一个假期,所以我将在周日 晚上回来。

我会按照你们的建议去做,我希望能成功。

谢谢你们俩。

Y.

 
crossy:


我希望你能原谅我,因为我有一个假期,所以我将在周日晚上回来。


好的,请享受您的假期 :-)
 
crossy:


我希望你能原谅我,因为我有一个假期,所以我将在周日晚上回来。

我将按照你们的建议去做,我希望能够成功。

谢谢你们俩。

Y.

祝你玩得开心 :D

这周日我有F1摩纳哥站的比赛要看 :D

 
onewithzachy:

祝你玩得开心。

这周日我有F1摩纳哥站要看。

而明天,FP3和排位赛;-)
 
crossy:


谢谢onewithzachy。

首先,我认为你有一个小错误。

for(int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)

你必须加上绿色和粗体的修正。

但是,我不明白下面这一行对我们有什么帮助?

#include "...\libraries\stdlib.mq4"

谢谢你,Y。

我发现这个更简单,而且对我有用。

//---------------------------------------------+

空白的CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) 继续。
order_id= OrderTicket()。


//------跟踪和关闭
如果(OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //--关闭的信号
{
RefreshRates();//刷新率
res= 0。
res= OrderClose(order_id,Lots,Bid,3,Gold)。
while(IsTradeAllowed() == false) Sleep(100); //-----------等待一下从服务器得到响应
如果(res>0){
PlaySound("cash_register.wav");} //----快乐的声音,希望能赚到钱 !!!!
如果(res<0)
{
PlaySound("creak.wav")。
Print("OrderSend failed with error #",GetLastError())。
return(0);
}
返回。
}
}//结束关闭买入订单检查
//---
如果(OrderType() == OP_SELL)
{
if (Is_Close_Sell==true) //------关闭的信号
{
RefreshRates();//刷新率
res= 0。
res= OrderClose(order_id,Lots,Ask,3,Gold)。
while(IsTradeAllowed() == false) Sleep(100); //------等待一下从服务器获得响应
如果(res>0){
PlaySound("cash_register.wav");}
如果(res<0)
{
PlaySound("creak.wav")。
Print("OrderSend failed with error #",GetLastError())。
return(0);
}
返回。
}
}//结束关闭卖出订单检查
}//--------+
返回。
}

//----------------------------------------------+

 
RaptorUK:
而明天,FP3和排位赛;-)

@ RaptorUK,我正在考虑戴上防撞头盔,这样至少我可以比现在想得更远。那些司机不就是这样吗?


@ skaboy,我在这里礼貌地问一下,如果你不介意的话,请你使用SRC按钮来发布你的代码。仅仅在这个主题中,我们已经问了太多次了。


@ crossy,从你的第一篇帖子到现在已经快一个星期了。当然,我理解你现在可能没有一个清晰的头脑来处理4000行,现在我自己的头脑也在这里。如果你还是不明白,--嗯--你可以让我们为你写出那段封闭的代码。不过你还是要写代码,哪怕只是一点点--给我们看看。 :D, RaptorUK的代码就在上面,比我的更直接,想想看,然后你就可以继续你的EA了。

以你在这里写代码的方式--太多不必要的重复代码--你应该对你的4000行代码有一点担心,它可能会拖慢你的EA,使你的EA错过一个点。错过几个点是可以的,但是如果你错过了10个点会怎样? 可能你的4000行还是可以减少到400行。谁知道呢,你的EA会变得更轻更快。

 
skaboy:

我发现这要简单得多,而且对我很有效。


如果你有多个要关闭的订单,它就不起作用了......读读这个就知道了。 循环和关闭或删除订单