分形的突破--图解 - 页 4

 
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()*Point*mypoint;
          }}}}}

if(SL!=OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0,CLR_NONE);
if(result!=true){error=GetLastError(); Print("ModifyError=",OrderTicket()," ",error);}

//--------CHECKING FOR ERRORS-------------------//

return(0);
}
}



我也创建了卖出方,但后来删除了它,因为我得到了错误,所以我把deVries给我看的那个放了回去,仍然得到了同样的错误代码


4051

4108


另外,为什么我们要在OrderOpenPrice()=SL中加入Point呢?那只是把正确的数字加到止损上。

 
ZacharyRC:

我也创建了卖出方,但后来删除了它,因为我得到了错误,所以我把deVries给我看的那个放了回去,仍然得到同样的错误代码。

for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()*Point*mypoint;       // WRONG HERE
          }}}}}

if(SL!=OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0,CLR_NONE);
if(result!=true){error=GetLastError(); Print("ModifyError=",OrderTicket()," ",error);}
     //Where is the  }  ??
//--------CHECKING FOR ERRORS-------------------//

return(0);
}
}

4051

4108


另外,为什么我们要在OrderOpenPrice()=SL中加入Point呢?那只是把正确的数字加到止损上。

再看看我的代码,把那行红字改一下

它与我给出的不同 !!!!

我们可以看看现在的代码是怎样的吗?

以及你读到的那些错误信息

在orderopenprice上加一点,是为了避免在每一个tick 上再次尝试修改交易的盈亏。

 
deVries:

再看看我的代码,把那行红字改掉

它与我给出的不同 !!!!

我们可以看看现在的代码是怎样的吗?

以及你读到的那些错误信息

在orderopenprice上加一点,是为了避免在每一个tick上再次尝试修改交易的盈亏。


是的,我发现了这个错误,我只是改变了一些东西,在发布代码之前忘了擦掉它。对不起。


//-----------------EXITING ORDERS---------------//

for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()+Point;
          }}}}}
          

if(OrderType()==OP_SELL)
{
 if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
 {
  if(OrderStopLoss()>OrderOpenPrice())
   {
    SL=OrderOpenPrice() + Point;
    
}}}


if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);}     
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError());
return(0);
}
}
 
2013.03.18 17:55:51 2013.03.11 23:59 测试员:6号订单已关闭
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: 0
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1:ModifyError = 6 0
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: modify #6 buy 0.03 EURUSD at 1.30390 sl: 1.30055 tp: 1.30855 ok
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: open #6 buy 0.03 EURUSD at 1.30390 ok
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: 0
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1:ModifyError = 5 4108
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1:OrderModify错误 4108
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: OrderModify函数 的未知票5
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: 0
 
好吧!因此,对于卖出,我也应该减去1分。
 
//-----------------EXITING ORDERS---------------//

for(int i=OrdersTotal()-1; i>=0;i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
   if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;
   double SL=OrderStopLoss();
   bool result;
   int  error;
   //-----The Differnt Order types---//
   if(OrderType()==OP_BUY)
      {
      if(BreakEven>0)
         {
         if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
            {
            if(OrderStopLoss() <OrderOpenPrice())
               {
               SL=OrderOpenPrice()+Point;
               }}}}   }     //PLACE THE BRACKETS IN LINE OPEN/CLOSE BRACKET AND YOU WILL SEE THE ERROR HERE
          

   if(OrderType()==OP_SELL)
      {
      if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
         {
         if(OrderStopLoss()>OrderOpenPrice())
            {
            SL=OrderOpenPrice() + Point;    //OrderStopLoss has to become point lower then orderopenprice
            }}}


   if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);} 
   }    
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError(
return(0);
}
}

在循环内,我们检查每一个修改的错误,而在循环外,我们不知道最后一个错误 的顺序是什么。

最后一行print( getlasterror()) b是不需要的。

我喜欢在一行中看到更多的括号。

RaptorUK和我没有这样放括号 }}}}}}

你现在犯的错误就是因为这个

 
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
   {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()+Point;
}
   }
      }
         }
                  
          

if(OrderType()==OP_SELL)
{
 if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
 {
  if(OrderStopLoss()>OrderOpenPrice())
   {
    SL=OrderOpenPrice() - Point;
    
}
 }
   }


if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);}     
}
return(0);
}
}




你所要求的{{ }}}开括号和闭括号的顺序是这样的吗?

这对我来说一直是个问题,我觉得代码里面很乱。

 

现在没有错误,但在视觉回测 中,SL没有被移动。我对此有信心,但现在很受伤,很抱歉这么依赖留言板。

大括号是错误的,但仍然不能正常运作。



我也一直在重读这本书。

 
if(OrderType()==OP_BUY){

 if(BreakEven>0){
   
     if(Bid-OrderOpenPrice() >=BreakEven*mypoint*Point){
      
       if(OrderStopLoss() <OrderOpenPrice()){
         
          SL=OrderOpenPrice()+Point;
}
  }
     }
       }
                  

我想这对我也有帮助,把括号放在操作者的正下方。
 
ZacharyRC:
我想这对我也有帮助,把括号直接放在操作员的下面。

对我来说,这看起来很可怕,但如果对你来说有意义的话,那就太好了。 我是这样做的,这样缩进就能显示出一个块的位置 ......

if(OrderType()==OP_BUY)
   {
   if(BreakEven>0)
      {
      if(Bid-OrderOpenPrice() >=BreakEven*mypoint*Point)
         {
         if(OrderStopLoss() <OrderOpenPrice())
            {
            SL=OrderOpenPrice()+Point;
            }
         }
      }
   }

或者像这样做......。

if(OrderType() == OP_BUY && BreakEven > 0 && 
   Bid - OrderOpenPrice() >= BreakEven * mypoint * Point &&
   OrderStopLoss() < OrderOpenPrice() )
   {
   SL = OrderOpenPrice() + Point;
   }