프랙탈 브레이크 아웃 멈춤 - 페이지 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에 1포인트를 추가하면 매 틱마다 손익분기점에서 거래를 다시 수정하려고 하는 것을 피할 수 있습니다.

 
deVries :

내 코드를 다시 보고 빨간색 줄을 변경합니다.

내가 준거랑 달라!!!!

코드가 어떻게 되어 있는지 볼 수 있습니까?

그리고 그 오류를 제공하는 읽을 메시지

orderopenprice에 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 ;
          }}}}}
          

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: 수정 #6 매수 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: 오픈 #6 매수 0.03 EURUSD 1.30390 확인
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 ;
   }