절반 부지를 폐쇄합니다. - 페이지 3

 
DomGilberto :

MathFloor는 소수점 이하 자릿수를 가장 가까운 WHOLE 숫자로 반올림합니까?

MathFloor() 는 설명서에 나와 있는 대로 수행합니다. . . "MathFloor 함수는 x보다 작거나 같은 가장 큰 정수를 나타내는 숫자 값을 반환합니다."

돔길베르토 :


FirstTarget은 "OrderClose()" 내에서 사용자 정의 매개변수로 의미가 있습니까? "sizeClose"가 정확하다고 가정합니까? (인용 코드 참조)

아니요 . . . 당신은 이것을 가지고 있습니다 :

FirstTarget = OrderTakeProfit()-OrderOpenPrice()/ 2 +OrderOpenPrice();

// meaning this

FirstTarget = OrderTakeProfit() - ( OrderOpenPrice() / 2 ) + OrderOpenPrice();

당신이 아마 이것을 의미할 때. . .

FirstTarget = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 ) ;

대괄호(및 공백)를 사용하여 명확하고 모호하지 않게 만드십시오.

돔길베르토 :


귀하의 코드가 도움이 되지 않았습니다. 죄송합니다.

왜요 ? 잘못 됐나 ? 어떤 방법으로?

돔길베르토 :


사용자 정의 변수를 인쇄할 수 있습니까? 그렇다면 저널에 표시되지 않기 때문에 내가 잘못하고 있는 것이 틀림없습니다.

예, 모든 변수를 인쇄할 수 있습니다. . . 뭐하세요 ? 코드를 보여주세요.

 
 if(OpenOrdersThisPair(Symbol())==1 && OrderType() == OP_BUYSTOP)
   {
      OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES); 
      
      double Lots=OrderLots(); 
      
      double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
         
         double minLot  = MarketInfo(Symbol(), MODE_MINLOT),
                lotStep = MarketInfo(Symbol(), MODE_LOTSTEP),
                half    = MathFloor(Lots/2/lotStep)*lotStep;
                
                if (half < minLot) half = Lots;
         
         half=Lots/2; 
         OrderClose(OrderTicket(),half,FirstTarget_Buy,3,DarkViolet);
         }
   } 
     
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   if(OpenOrdersThisPair(Symbol())==1 && OrderType() == OP_SELLSTOP)
    {
      OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
      
      double FirstTarget_Sell = OrderOpenPrice() - ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
       
       if (half < minLot) half = Lots;
       half=Lots/2;
       OrderClose(OrderTicket(),half,FirstTarget_Sell,3,DarkViolet); 
       }
    } 


사용자 정의 변수 인쇄와 관련하여 "FirstTarget_Buy"에 대해 이 작업을 수행하려면 어떻게 해야 합니까?

내 모든 코드를 살펴보고 많은 것을 인쇄하는 데 시간을 할애할 것입니다. bool 및 int로 수행하는 방법을 이해합니다(정수 -1은 실패하고 bool은 참 또는 거짓 진술입니다. 쉽습니다.). 하지만 어떻게 하는지 이해가 되지 않습니다. 사용자 정의 변수에 기능 을 할당할 때 수행하시겠습니까?

위의 "FirsTarget" 공식에 대해 알려주셔서 감사합니다! 죄송합니다. 수식을 조합하는 방법을 이해하지 못한다는 의미에서 귀하의 코드가 도움이 되지 않았다는 말을 하고 싶었습니다... 정말 직관적이지 않습니다. "OrderSelect"를 호출하면 해당 틱오더의 로트 크기를 확인한 다음 간단히 분할...

완전 바보처럼 만나서 미안해!

 
DomGilberto :

완전 바보처럼 만나서 미안해!

전혀 그렇지 않습니다. 맹점을 찾아 밝히기만 하면 됩니다. 일단 맹점을 발견하면 왜 그렇게 어렵게 찾았는지 궁금할 것입니다. 방법을 알면 모든 것이 쉽습니다.

돔길베르토 :

사용자 정의 변수 인쇄와 관련하여 "FirstTarget_Buy"에 대해 이 작업을 수행하려면 어떻게 해야 합니까?

내 모든 코드를 살펴보고 많은 것을 인쇄하는 데 시간을 할애할 것입니다. bool 및 int로 수행하는 방법을 이해합니다(정수 -1은 실패하고 bool은 참 또는 거짓 진술입니다. 쉽습니다.). 하지만 어떻게 하는지 이해가 되지 않습니다. 사용자 정의 변수에 기능을 할당할 때 수행하시겠습니까?

이와 같이 . . . 중괄호에 대한 주석도 참고하십시오.
 if (OpenOrdersThisPair( Symbol ())== 1 && OrderType() == OP_BUYSTOP)
   {
       OrderSelect (OrderTicket(),SELECT_BY_POS,MODE_TRADES); 
      
       double Lots=OrderLots(); 
      
       double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );

       Print ( "FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits ) );   // prints FirstTarget_Buy with the same number of digits as the current symbol
         {                                                                                         // why this brace ?    
         
         double minLot  = MarketInfo( Symbol (), MODE_MINLOT),
                lotStep = MarketInfo( Symbol (), MODE_LOTSTEP),
                half    = MathFloor (Lots/ 2 /lotStep)*lotStep;
                
                 if (half < minLot) half = Lots;
         
         half=Lots/ 2 ; 
         OrderClose(OrderTicket(),half,FirstTarget_Buy, 3 ,DarkViolet);
         }                                                               // why this brace ?   
   } 

돔길베르토 :

나는 수식을 조합하는 방법을 이해하지 못한다는 의미에서 귀하의 코드가 도움이 되지 않았다고 말하고 싶었습니다... 정말 직관적이지 않습니다. - "OrderSelect"를 호출하면 단순히 무엇을 볼 수 있는지 생각했을 것입니다. 로트 크기는 해당 틱오더에 있었습니다... 그리고 간단히 분할...

간단히 OrderSelect 주문을 사용하고 OrderLots()를 사용하고 2로 나눌 수 있습니다. . . 그렇게 할 수 있으며 많은 상황에서 작동합니다. 나는 내가 예측할 수 있는 모든 경우에 대해 코드를 작성하여 고장났을 때 계속 수정할 필요가 없습니다. . .

포지션 사이즈가 2.0랏인 경우; 이것을 2로 나눈 값은 1.0 랏이며 작동합니다. . .

포지션 사이즈가 0.3랏인 경우 이것을 2로 나눈 값은 0.15랏이며 MODE_LOTSTEP가 0.1이면 유효하지 않은 위치 크기가 됩니다. . . 0.15가 아닌 0.1 또는 0.2를 사용할 수 있으므로 이 확인 및 조정을 코딩해야 합니다.


여기에 있는 것이 모든 경우에 작동하는 것은 아닙니다. . .

 double Lots = OrderLots(); 
      

         
         half = Lots / 2 ; 
 

앗! 나는 지난 15-20분 동안 여기저기서 지문을 확인하는 데 시간을 보냈습니다. 나는 어디가 잘못되고 있는지 이해하기 시작했습니다. 기본적으로 PENDING 주문을 선택하고 있습니다... 하지만, 보류 주문이기 때문에 선택하는 시점에서 OrderLots, stop 및 target이 변경되었을 가능성이 꽤 높으므로 넣어야 합니다. 내 보류 주문이 트리거되기 전에 지속적으로 계산되는 방식과 동기화되도록 루프에서.

그 빌어먹을 doubletostr :P - RaptorUK에서 발견! 이제 조정 덕분에 이것이 올바르게 계산 되었음을 알 수 있습니다. :)

지금 대부분의 작업을 수행하는 방법을 알고 있다고 생각합니다. - 단지 호기심에서 "만약" 명령이 트리거된 주문을 호출하기 위해 작동하는 "if" 문은 무엇입니까? 현재는 시장가 주문이 열렸을 때 호출하도록 설정되어 있지만 보류 중인 주문이 실행되었을 때 어떻게 호출해야 하는지 알아내려고 합니다.

아래 코드와 해당 "if" 문은 미결 주문을 호출하는 것으로 보입니다. 주문이 실행되었음을 기반으로 특정 사용자 정의 기능(예: 무효)으로 "이동"하는 방법을 원하십니까? (그게 말이 된다면!)

저를 위해 많은 것을 정리해주셔서 감사합니다 :)

 int OpenOrdersThisPair( string pair)
{
   int total= 0 ;
       for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
         {
         OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
         if (OrderSymbol()==pair) total++;
         }
         return (total);
}         

if (OpenOrdersThisPair( Symbol ())> 0 )
 
DomGilberto :

앗! 나는 지난 15-20분 동안 여기저기서 지문을 확인하는 데 시간을 보냈습니다. 나는 어디가 잘못되고 있는지 이해하기 시작했습니다.

방법을 알면 쉽게

돔길베르토 :


지금 대부분의 작업을 수행하는 방법을 알고 있다고 생각합니다. - 단지 호기심에서 "만약" 명령이 트리거된 주문을 호출하기 위해 작동하는 "if" 문은 무엇입니까? 현재는 시장가 주문이 열렸을 때 호출하도록 설정되어 있지만 보류 중인 주문이 실행되었을 때 어떻게 호출해야 하는지 알아내려고 합니다.

보류 주문 이 실행되면 OP_BUY 또는 OP_SELL이 되므로 . . .

 if (OrderType() == OP_BUY || OrderType() == OP_SELL)
   { 
   
   }

한 가지 팁은 더 많은 공백을 사용하는 것입니다. . . 0으로 나누기 오류가 발생하고 오류가 발생하는 위치를 찾으려면 공백 / 공백을 검색하고 모든 주석 대신에 나누기를 찾는 것이 쉽습니다. . . 그래서 = + - / % 등 주위에 공백을 사용합니다.

 
아 물론입니다(페이스팜!)

좋은 팁 - 할게요! 도와주셔서 감사합니다 :) 성공하면 다시 글 올리겠습니다!
 
응 나 돌아 왔어! ... 그리 좋은 소식은 아닙니다. 여러 코드 변형을 시도하고 테스트했지만 운이 없었습니다. 이것이 내가 지금 있는 곳입니다.

인쇄물에 대한 정보를 얻지 못합니까? 저널에는 전혀 아무것도 나오지 않습니다. 첫 번째 "if" 문에서 OrderType이 올바르게 진행되는 한 아무 것도 선택되지 않았기 때문이라고 가정합니다. 여기 코드에서 볼 수 있는 것에서 나는 적어도 멀지 않은 곳에 있다고 생각했을 것입니다...?
 if (OrderType() == OP_BUY ){
   
       for ( int c= OrdersTotal ()- 1 ; c >= 0 ; c-- )
      {
         if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== true ){
             Print ( "Order Ticker Number = " ,OrderTicket());
             Print ( "Order Lots Open = " , OrderLots());
            } 
         else if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== false ){
             Print ( "Order Select returned the error of " , GetLastError ());
            }
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                 if (OrderType()==OP_BUY)
                   if (OpenOrdersThisPair( Symbol ())== 1 ) 
                     //if( Bid == FirstTarget_Buy)            
         
         
         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
             Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
            }
         
         double minLot  = MarketInfo( Symbol (), MODE_MINLOT);{
                 Print ( "The minimum lots are: " , DoubleToStr( minLot, Digits ));
                }
                        
         double lotStep = MarketInfo( Symbol (), MODE_LOTSTEP);{
                 Print ( "The Lotstep is: " , DoubleToStr( lotStep, Digits ));
                }
                
         double half    = MathCeil (OrderLots()/ 2 /lotStep)*lotStep;{
                 Print ( "The Lots to close is: " , DoubleToStr( half, Digits ));
                }

                 bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy, 3 , CLR_NONE );
             if (Close_Half_Order!=TRUE) Print ( "Close_Half_Order Last Error = " , GetLastError ());
      } 
   }
 
DomGilberto :
응 나 돌아 왔어! ... 그리 좋은 소식은 아닙니다. 여러 코드 변형을 시도하고 테스트했지만 운이 없었습니다. 이것이 내가 지금 있는 곳입니다.

인쇄물에 대한 정보를 얻지 못합니까? 저널에는 전혀 아무것도 나오지 않습니다. 첫 번째 "if" 문에서 OrderType이 올바르게 진행되는 한 아무 것도 선택되지 않았기 때문이라고 가정합니다. 여기 코드에서 볼 수 있는 것에서 나는 적어도 멀지 않은 곳에 있다고 생각했을 것입니다...?

이 작업을 수행하기 전에 주문을 어떻게 선택하고 있습니까?

 if (OrderType() == OP_BUY ){

여기에 여전히 문제가 있습니다.

       for ( int c= OrdersTotal ()- 1 ; c >= 0 ; c-- )
      {
         if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== true ){
             Print ( "Order Ticker Number = " ,OrderTicket());
             Print ( "Order Lots Open = " , OrderLots());
            } 
         else if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== false ){
             Print ( "Order Select returned the error of " , GetLastError ());  //  OrderSelect has failed,  why do you continue . . . 
            }
             if (OrderMagicNumber()==MagicNumber)                            //  . . . to this line ?
               if (OrderSymbol()== Symbol ())
                 if (OrderType()==OP_BUY)
                   if (OpenOrdersThisPair( Symbol ())== 1 ) 
                     //if( Bid == FirstTarget_Buy) 
 

왜 안 돼 . . .

 for ( int c = OrdersTotal ()- 1 ; c >= 0 ; c-- )
   {
   if ( OrderSelect (c, SELECT_BY_TICKET, MODE_TRADES) )
      {
       Print ( "Order Ticker Number = " ,OrderTicket());
       Print ( "Order Lots Open = " , OrderLots());
      } 
   else 
      {
       Print ( "Order Select returned the error of " , GetLastError ()); 
       continue ;                                                         // try next order position in the loop
      }
   if (OrderMagicNumber() == MagicNumber)    
       if (OrderSymbol() == Symbol ())
         if (OrderType() == OP_BUY)
             if (OpenOrdersThisPair( Symbol ()) == 1 ) 
 
내가 이런 신참들에게 오류를 범하고 있다는 게 믿기지 않아... 짜증나! 예, 지금 인쇄하고 주문을 선택했습니다. 이것은 인쇄 측면에서 작동하는 코드입니다. 하지만 제비뽑기가 아직 마감되지 않았습니까? 아래에 저널 메시지도 붙여넣었습니다.
   if ( OrderSelect ( OrdersTotal (),SELECT_BY_TICKET,MODE_TRADES)== true && OpenOrdersThisPair( Symbol ())== 1 ){
         
         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
           Print ( "FirstTarget_Buy: " , DoubleToStr( FirstTarget_Buy, Digits ));
         }
         
         double minLot  = MarketInfo( Symbol (), MODE_MINLOT);{
                 Print ( "The minimum lots are: " , DoubleToStr( minLot, Digits ));
                }
                        
         double lotStep = MarketInfo( Symbol (), MODE_LOTSTEP);{
                 Print ( "The Lotstep is: " , DoubleToStr( lotStep, Digits ));
                }
                
         double half    = MathCeil (OrderLots()/ 2 /lotStep)*lotStep;{
                 Print ( "The Lots to close is: " , DoubleToStr( half, Digits ));
                }
       for ( int c= OrdersTotal ()- 1 ; c >= 0 ; c-- )
      {
         if ( OrderSelect (c,SELECT_BY_TICKET,MODE_TRADES)== true ){
             Print ( "Order Ticker Number = " ,OrderTicket());
             Print ( "Order Lots Open = " , OrderLots());
            } 
         else {
           Print ( "Order Select returned the error of " , GetLastError ()); // Order Select does not seem to want to work?
             continue ;
            }
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())
                 if (OrderType()==OP_BUY)
                   if (OpenOrdersThisPair( Symbol ())== 1 ) 

                 bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy, 3 , CLR_NONE );
             if (Close_Half_Order!=TRUE) Print ( "Close_Half_Order Last Error = " , GetLastError ());
      } 
   }
2013.07.31 11:13:52	2013.02.01 16:00  trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0    // Not sure what is going on here?		
2013.07.31 11:13:52	2013.02.01 16:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000           // This is the right calculation based 
                                                                                                                      // upon the total lots opened on a pending order - to half.
2013.07.31 11:13:52	2013.02.01 16:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07.31 11:13:52	2013.02.01 16:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07.31 11:13:52	2013.02.01 16:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931                // This price is also correct.