[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 165

 
오류 ')'는 어디에 있습니까? 잘못된 매개 변수 수 그리고 4번? 아마 이렇게 써야하지 않을까요?
 //-----------------------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red          |  
//-----------------------------------------------------------------------------+   
 void DelHLine( color cl, string nm= "" , double p1= 0 , int st= 0 , int wd= 1 )  
  { 
     int     obj_total= ObjectsTotal ( OBJ_HLINE ); 
   
   for ( int i= 0 ;i<obj_total;i++) 
   {
     if ( ObjectType ( OBJ_HLINE )==true) 
     {
         if ( ObjectGet ( OBJPROP_COLOR )== Red )
         { 
           if ( ObjectGet (OBJPROP_PRICE1)>Ask) ObjectDelete (FrDnNam);
         } 
     }
  }
    
     for (i= 0 ;i<obj_total;i++) 
       {
         if ( ObjectType ( OBJ_HLINE )==true)
         {
           if ( ObjectGet ( OBJPROP_COLOR )== Blue ) 
         { 
           if ( ObjectGet (OBJPROP_PRICE1)<Bid) ObjectDelete (FrApNam); 
       }
       
    } 
   }

     return ; 
  }
 
ObjectGet()을 확인하면 두 개의 매개변수가 있어야 합니다.
 
Roger :

NormalizeDouble(lot,2) 함수 사용

덕분에. 나는 이것이 내가 찾고 있던 것이라고 생각합니다.

splxgf :

토론해주셔서 감사합니다. 귀하의 정보도 유용할 것입니다.

 
Operr :
오류 ')'는 어디에 있습니까? 잘못된 매개 변수 수 그리고 4번? 아마도 이렇게 작성해야 하지 않을까요?
ObjectType() 및 ObjectGet() 함수에 개체 이름이 누락됨
 
Operr :
오류 ')'는 어디에 있습니까? 잘못된 매개 변수 수 그리고 4번? 아마 이렇게 써야하지 않을까요?

 //------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red|  
//------------------------------------------------------------+   
void DelHLine( string nm= "" )  
{ int obj_total= ObjectsTotal ();
   for ( int i= 0 ;i<obj_total;i++) 
  { if (nm== ObjectName (i)&& ObjectType (nm)== OBJ_HLINE )
   { color cl= ObjectGet (nm, OBJPROP_COLOR ); double pr= ObjectGet (nm,OBJPROP_PRICE1);
     if ((cl== Red &&pr>Ask)||(cl== Blue &&pr<Bid)) ObjectDelete (nm);}}}
 
친애하는, 말해 주세요. MT4에서 빌드 업데이트를 강제할 수 있습니까? 그리고 다시 시작하면 터미널이 업데이트되지 않습니다.
 

전문가 여러분, 다시 한 번 여러분의 도움이 필요합니다!

아래는 거래 성사를 담당하는 코드 스니펫이지만, 사실 보류 중인 주문 이 실행되지 않으면 삭제되지 않고 왜 그런지 이해할 수 없습니다. 그러나 실행된 보류 주문을 닫아야 할 때 모든 것이 올바르게 진행되고 주문이 실행되지 않으면 실행될 때까지 멈춥니다...

주문 선택(0, SELECT_BY_POS, MODE_TRADES);
매직 = OrderMagicNumber();
주문 티켓 = 주문 티켓();

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
{
if (H1_BUY_5 == 0 || H1_BUY_1 == 0)
{
OrderClose(orderticket, 랏, 입찰, 5, 노란색);
if (OrdersTotal() == 1) OrderDelete(주문 티켓, 브라운);
}

}

 

Xaoss1990 :

아래는 거래 성사를 담당하는 코드 스니펫이지만, 사실 보류 중인 주문이 실행되지 않으면 삭제되지 않고 왜 그런지 이해할 수 없습니다.


if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0 )


방해한다
 

나는 손익분기점에서 손절매가 발동되면 오픈 로트의 1/3을 닫지만 어떤 이유로 작동하지 않도록 어드바이저에 기능을 삽입합니다.

친애하는, 무엇이 잘못되었는지 말해주세요?

 //=======================================================================================     
void BuyCloseOneThird( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double pr= 0 ;
   int     i, k= OrdersTotal (), np=- 1 ;

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && OrderType ()==OP_BUY) {
         if (mn< 0 || OrderMagicNumber ()==mn) {
           if (Bid> OrderOpenPrice () && Bid== OrderStopLoss ()) {
     if ( OrderSelect (np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}
//=======================================================================================     
void SellCloseOneThird( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double pr= 0 ;
   int     i, k= OrdersTotal (), np=- 1 ;

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && OrderType ()==OP_BUY) {
         if (mn< 0 || OrderMagicNumber ()==mn) {
           if (Ask< OrderOpenPrice () && Ask== OrderStopLoss ()) {
     if ( OrderSelect (np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}

//+------------------------------------------------------------------+
void ClosePosBySelect() {
   bool    fc;
   color   clClose;
   double pa, pb, pp;
   int     err, it;
double ll = MathCeil ( OrderLots () / 3.0 * 10.0 ) / 10.0 ;

   if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
     for (it= 1 ; it<= 5 ; it++) {
       if (! IsTesting () && (! IsExpertEnabled () || IsStopped ())) break ;
       while (! IsTradeAllowed ()) Sleep ( 5000 );
       RefreshRates ();
      pa= MarketInfo ( OrderSymbol (), MODE_ASK);
      pb= MarketInfo ( OrderSymbol (), MODE_BID);
       if ( OrderType ()==OP_BUY) {
        pp=pb; clClose= Red ;
      } else {
        pp=pa; clClose= Blue ;
      }
      ll= OrderLots ();
      fc= OrderClose ( OrderTicket (), ll, pp, Slippage, clClose);
       if (fc) {
         PlaySound ( "wave" ); break ;
      } else {
        err= GetLastError ();
         if (err== 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 );
         Print ( OrderTicket (), "  Ask=" ,pa, "  Bid=" ,pb, "  pp=" ,pp);
         Print ( "sy=" , OrderSymbol (), "  ll=" ,ll, "  sl=" , OrderStopLoss (),
               "  tp=" , OrderTakeProfit (), "  mn=" , OrderMagicNumber ());
         Sleep ( 1000 * 5 );
      }
    }
  } 
}
 
Sancho77 :

나는 손익분기점에서 손절매가 발동되면 오픈 로트의 1/3을 닫지만 어떤 이유로 작동하지 않도록 어드바이저에 기능을 삽입합니다.

친애하는, 무엇이 잘못되었는지 말해주세요?


아마도 먼저 로트를 계산한 다음

ll= OrderLots ();
fc= OrderClose ( OrderTicket (), ll, pp, Slippage, clClose);