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

 
하지만 5분의 시간이 30포인트 미만으로 밝혀지면 대기 중인 주문을 삭제하는 방법을 모르겠습니다.
 
hoz :

네, 그래서요?

시각화 모드에서 작업할 때 여러 가지 제한 사항이 있습니다.
 

내가 뭘 잘못했어!!!!

나는 내 문제에 대한 해결책을 생각해 냈다.

 int start()
  {
     double Price=Ask+ 300 * Point ;    
     double SL=Price- 300 * Point ;    
     double TP=Price+ 150 * Point ;
     bool New_Bar;
                          
     if (Time[ 0 ])                                                                           //   если образовался новый бар               
         int Ticket= OrderSend ( Symbol (),OP_BUYSTOP, 0.1 ,Price, 3 ,SL,TP ); //   выставить отложенный ордер
     return ;
     Fun_New_Bar();                                                                      
     if ( New_Bar== true )                                                 // если образовался следующий бар
        OrderDelete(Ticket);                                           // удалить отложенный ордер
  
//+------------------------------------------------------------------+
     void   Fun_New_Bar();                             //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ       '(' - function definition unexpected  
       {                                                                           
           static datetime New_Time= 0 ;
          New_Bar= false ;
                                
         if ( New_Time!==Time[ 0 ])                       
            New_Time=Time[ 0 ];                         
         New_Bar= true ;                             
      }

/* 죄송합니다, 게시물을 약간 수정했습니다 - Vinin이 읽을 수 있도록 */

 
걱정해주셔서 감사합니다. 그리고 이 형식으로 코드를 얻으려면 어떤 버튼을 눌러야 하는지.
 
solnce600 :

내가 뭘 잘못했어!!!!

나는 내 문제에 대한 해결책을 생각해 냈다.

/* 죄송합니다, 게시물을 약간 수정했습니다 - Vinin이 읽을 수 있도록 */

이 라인
 if (Time[ 0 ])

"마지막 막대의 시간이 0이 아닌 경우"를 의미합니다. 따라서 항상 0이 아닙니다.

다음으로 변수

 bool New_Bar;

start() 함수 내부에 정의되어 있으므로 다른 함수 내부에서는 볼 수 없습니다. 또한 start() 본문 내부에 Fun_New_Bar()를 정의하려고 했지만 MQL에서는 이를 수행할 수 없으며 모든 함수는 전역 모듈 수준에서 선언해야 합니다. New_Bar 선언도 거기에 배치되어야 합니다.

 

또한 start() 함수를 한 번 실행하는 동안(루프되지 않은 경우) 막대의 형성을 확인하고 다음 막대의 형성을 기다리는 것은 불가능합니다. 정의에 따라 start()가 호출됩니다. 각 틱마다 완료됩니다(뉘앙스가 있지만 일반적으로) .

도움말을 다시 읽고 MQL 프로그램 실행 영역의 공백을 없애고 루프를 실행하지 않는 루프 프로그램 을 작성하는 예를 살펴보는 것이 좋습니다.

 
solnce600 :
걱정해주셔서 감사합니다. 그리고 이 형식으로 코드를 얻으려면 어떤 버튼을 눌러야 하는지.

SRC------------------------\|/

------------------------------------ V

 
권리가 있습니다.
 
alsu :
이 라인
 if (Time[ 0 ])

"마지막 막대의 시간이 0이 아닌 경우"를 의미합니다. 따라서 항상 0이 아닙니다.


감사합니다. 하지만 이 줄에서 "NOT"가 어디에 있는지 이해가 되지 않습니다. 같지 않음은 !==로 표시됩니다.

그리고 내 말은 - 새로운 바의 개장 시간이 나타나자 마자, 즉. 새로운 막대가 나타났습니다 - 주문을 여십시오.

실제로 이 코드는 매 5분 간격이 시작될 때 주문을 엽니다.

 int start()

  {
 double Price=Open[0]+300*Point;	
 double SL=Price-300*Point;	
 double TP=Price+150*Point;
 if (Time[0])                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
  

 
 }


 

나는 그것이 더 쉬운 방법인 것 같아서 다른 길로 가기로 결정했다.

대기 중인 주문을 삭제하지 말고 5분 촛불이 끝나지 않은 경우에만 대기 중인 주문을 하십시오.

저것들. 두 가지 조건이 충족될 때 보류 중인 주문을 하십시오. 첫 번째 조건이 충족되면

 if (Time[0])

- 주문이 완료되었는지 확인했습니다.

그리고 두 번째 조건, 즉 5분이 경과하지 않은 경우에만 대기 주문을 설정하는 방법을 발행합니다. 만약 (---------- && ?????????)

 int start()

  {
 double Price=Open[ 0 ]+ 300 * Point ;    
 double SL=Price- 300 * Point ;     
 double TP=Price+ 150 * Point ;
 
  
 
 
                          
   if (Time[ 0 ]&& ?????????  )                         
 int Ticket= OrderSend ( Symbol (),OP_BUYSTOP, 0.1 ,Price, 3 ,SL,TP );
 return ( 0 );
 
  }