기고글 토론 ""New Bar" 이벤트 핸들러" - 페이지 5

 
tito.vinicius:

현재 제 EA는 동일한 캔들에 대해 여러 주문을 개시합니다. 이 글의 자료가 도움이 될 것 같습니다.

어떻게 구현하나요?


OnTick() 이벤트에서 거래 진입 로직을 가져와 OnNewBar() 함수 안에 넣을 수 있습니다. 이렇게 하면 새 바가 있을 때만 실행되고, 한 번 실행되면 다음 캔들에서만 다시 실행되므로 같은 캔들에 여러 번 입력하지 않아도 됩니다.

 
이 멋진 종이를 보내주셔서 정말 감사합니다 - 여러분의 노고에 감사드립니다!
 

좋은 기사입니다.

감사합니다!

 

정말 감사합니다,

MQL5 라이브러리 기능을 기대하고 있었지만 아무것도없는 것 같습니다. 모듈 식 거래 라이브러리가 있는데 신호 모듈이 IsNewBar 플래그를 설정하고 이전 캔들 시간을 재정의하고 TrailingSL 모듈이 동일한 함수를 평가해야 할 때 이전 캔들 시간이 현재와 동일하기 때문에 거짓을 반환하는 문제가 발생했습니다.

예, 결과를 중앙 플래그에 저장하고 모든 모듈에 사용할 수 있으며 모듈이 다른 시간대에서 실행될 수 있으므로이 솔루션은 너무 완벽합니다.

 
매우 유익한 기사, 정말 감사합니다
 
감사합니다, 새로운 바를 감지하는 가장 좋은 방법! :)
 
제 생각에는 때때로 우리는 불필요하게 일을 복잡하게 만듭니다. 실용적인 이유로, 성능 측면에서도 시스템 시간(윈도우 시간)을 이길 수 있는 것은 아무것도 없습니다. 다음 분이 시작될 때, 또는 확실히 하기 위해 몇 초 후에 모든 심볼에 대해 새로운 막대가 있다고 가정할 수 있습니다. 1분... 5분... 15분 등 원하는 시간대를 입력하면 됩니다. 막대 시간과 시스템 시간이 동일한지확인하면됩니다 .

하지만 실제로 새 막대가 언제 그려질지 모두 알고 있는 상황에서 새 막대가 있는지 확인하기 위해 이 클래스의 인스턴스를 여러 개 생성할 필요는 없습니다.


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("새 바가 들어옵니다.", TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

안녕하세요, Open() 따옴표가 도착하자마자 새 막대가 도착했다고 가정하고 있습니다. IMHO가 더 쉬운가요 아니면 제가 뭔가 놓치고 있나요?

 
Max Go 새 막대가 도착했음을 의미합니다. 더 쉬워졌나요, 아니면 제가 뭔가 놓친 건가요?

새 바의 시가가 이전 바의 시가와 동일한 상황을 상상해보세요..... 소규모 TF에서는 이러한 상황을 포착할 확률이 높습니다.

 


현재 막대의 시작 시간을 추적하고 각 틱마다 비교합니다.

// 이보다 더 간단한 방법은 없습니다.
// 현재 막대의 시작 시간을 추적하고 각 틱마다 비교합니다.

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5