포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 810

 


좋은 오후, 말해주세요 - 저에게 그런 문제가 있습니다: 로봇이 포지션에 진입하고 다음 틱에서 손절매는 이전 저점 아래로 수정됩니다. 위치가 열렸습니다 닫힘

 void TrailingStop()
{  
   for ( int i= 0 ;i< OrdersTotal ();i++)
  {
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true );
    {
     if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
      {  
       if (OrderType()==OP_BUY)             
        {              
             double LOW_1 = iLow( NULL , 0 , 1 );       
             bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(), 0 ,White);                
             if (!res)   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
             double HIGH_1 = iHigh( NULL , 0 , 1 );                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(), 0 ,White);                
             if (!res)   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());          
        }                      
      }
    } 
  }     
 return ;                   
}
 

또는 이 오류를 제거하는 방법


 
remjte :
신사 여러분! 포지션을 열 수 있는 여백이 충분하지 않으면 어드바이저 테스트를 중단하는 코드를 알려주십시오.
고맙습니다!
AccountFreeMarginCheck()가 특정 값보다 작은 경우(예: AccountFreeMargin의 50% 미만) - 거래 기능 종료 , 빈 루프가 거의 로드되지 않으므로 테스트가 빠르게 종료됩니다.
 
evillive :
AccountFreeMarginCheck()가 특정 값보다 작은 경우(예: AccountFreeMargin의 50% 미만) - 거래 기능을 종료하면 빈 루프가 거의 로드되지 않으므로 테스트가 빠르게 종료됩니다.

솔직히, 여전히 매우 녹색입니다. 이 코드를 찾았습니다. 수정 방법을 알려주실 수 있습니까?

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if ( GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
반환(l_lots_4);

 
나는 더 간단한 방법으로 쓸 것입니다 : 그러한 조건을 처방하는 방법 - 새로운 양초 가 나타날 때까지 미결 주문을 수정하지 마십시오
 
zhezheria :
나는 더 간단한 방법으로 쓸 것입니다 : 그러한 조건을 처방하는 방법 - 새로운 양초가 나타날 때까지 미결 주문을 수정하지 마십시오
해당 기간 의 새 막대 를 여는 작업을 합니다. 다크 코드 예시
 
remjte :

솔직히, 여전히 매우 녹색입니다. 이 코드를 찾았습니다. 수정 방법을 알려주실 수 있습니까?

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
반환(l_lots_4);

왜 통치하고 그렇게 할 것입니다. 자신의 변수 이름을 대체하지 않는 한.

그러나 더 작은 위험이 필요한 경우 if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - 이 경우 지정된 로트 의 포지션을 오픈한 후 여유자금이 50% 이하가 되면 반환(-1)

 
말해 주세요. 목록의 두 번째 순서가 선택된 다음 삭제(지연)되는 코드의 일부를 작성해야 합니다. OrderSelect (1, SELECT_BY_POS, MODE_TRADES) 시 4051을 반환합니다.
 
remjte :
신사 여러분! 포지션을 열 수 있는 여백이 충분하지 않으면 어드바이저 테스트를 중단하는 코드를 알려주십시오.
고맙습니다!
       // проверяем доступность свободных средств
       if (AccountFreeMarginCheck( Symbol (),OP_BUY,OpenLot)<= 0 || GetLastError ()== 134 )
            {
               Print ( "It is impossible to open the order Buy, not enough money." );
               return ( 0 );
            }
       // проверяем доступность свободных средств
       if (AccountFreeMarginCheck( Symbol (),OP_SELL,OpenLot)<= 0 || GetLastError ()== 134 )
            {
               Print ( "It is impossible to open the order Sell, not enough money." );
               return ( 0 );
            }
doube OpenLot; // Лот который вы хотите открыть.
시장가 주문을 열기 전에 이것을 삽입하십시오.
 
Pomid :
말해 주세요. 목록의 두 번째 순서가 선택된 다음 삭제(지연)되는 코드의 일부를 작성해야 합니다. OrderSelect(1, SELECT_BY_POS, MODE_TRADES) 시 4051을 반환합니다.
주문 수는 0부터 시작합니다. 시도해 보세요. OrderSelect (0, SELECT_BY_POS, MODE_TRADES)