Init() 및 DeInit() 실행 순서 - 페이지 18

 
Alexey Kozitsyn :
저것들. 목발을 사용하여? 예를 들어도 될까요?

ChartIndicatorAdd()를 통해 다른 기호나 기간이 있는 차트에 지표를 추가할 수 없습니다. 오류가 발생합니다.

https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd

차트 표시기 추가

지정된 차트 창에 지정된 핸들이 있는 표시기를 추가합니다. 지표와 차트는 동일한 기호와 기간에 구축되어야 합니다.

여기 지금 한계가 있습니다. 서비스에는 없을 것입니다.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
거의 주제 주제에 대한 작은 생명 해킹

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2016.09.23 10:48

  1. 우리는 손으로 NAKER 차트에 표시기를 설치합니다.
     #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots    1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE ;
    
    void OnInit ()
    {
      :: SetIndexBuffer ( 0 , Buffer, INDICATOR_DATA );
      
      handle = ChartIndicatorGet ( 0 , 1 , ChartIndicatorName ( 0 , 1 , 0 ));  
    }
    
    #define TOSTRING(A) #A + " = " + ( string )A + "\n"
    
    int OnCalculate ( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
       if (handle != INVALID_HANDLE )
      {
        Buffer[rates_total - 1 ] = MathRand ();
        
         double BufferCopy[];
        
         if ( CopyBuffer (handle, 0 , 0 , 1 , BufferCopy) > 0 )
           Print (TOSTRING(BufferCopy[ 0 ]) + TOSTRING(Buffer[rates_total - 1 ]));
      }
      
       return (rates_total);
    }
  2. 차트에서 지표를 손으로 제거합니다.
  3. 로그에서 표시기가 계속 실행되는 것을 볼 수 있습니다. 터미널에서 모든 차트를 닫을 수 있지만 여전히 실행됩니다. 그리고 그것은 물론 도움이되지 않습니다
     void OnDeinit ( const int Reason )
    {
       if (handle != INVALID_HANDLE )  
         IndicatorRelease (handle);
      
       return ;
    }
  4. 터미널을 다시 시작하면 표시기의 진행이 중지됩니다.
  5. 이것은 유휴 상태에서 얼마나 많은 지표를 수행 할 수 있으며 우리는 그것에 대한 소문이나 정신이 없습니다! 통제가 전혀 없습니다.
개발자에 대한 클레임 없이.
 
fxsaber :
이제 한계가 있습니다. 서비스에는 없을 것입니다.

나는 그것에 대해 전혀 이야기하지 않았다. EA에서 지표를 추가하는 것이 아니라 EA를 사용하여 지표를 생성합니다.

이것을 고려하면:

서비스 또는 하나의 차트에서 여러 Expert Advisors를 실행하는 기능이 논의된 문제를 완전히 커버할 수 없는 이유는 무엇입니까?

서비스를 통해 지표를 생성할 수 없는 경우 파일의 데이터로 지표를 생성하는 문제는 해결되지 않습니다. OnDeinit() -> OnInit() 시퀀스가 제어되지 않는 경우. 왜냐하면 TF를 변경하는 것은 사용자의 작업이며, 이 작업(OnDeitit())에 대한 반응은 필요하지 않을 때(OnInit() 이후 또는 후속 OnCalculate()?) 나타납니다.

저것들. 표시기가 파일에 데이터를 쓰고 이 데이터를 기반으로 그래프를 작성하는지 여부. 시리즈 및 데이터는 "순차적이지 않음"으로 기록됩니다. 모든 데이터가 올바르게 표시되지 않습니다.

그러나 서비스가 글로벌 프로그램(예: GPT, 전체 프로그램)이고 표시기 버퍼 를 생성하는 데 사용할 수 있고 시간 프레임 변경/차트 닫기와 같은 사용자 작업으로 인해 계산이 중단되지 않는다면 문제가 없을 것입니다. 따라서 지표는 항상 그렇듯이 거세됩니다.

 
Alexey Kozitsyn :

나는 그것에 대해 전혀 이야기하지 않았다. EA에서 지표를 추가하는 것이 아니라 EA를 사용 하여 지표를 생성합니다 .

용어를 이해하지 못합니다.

 
fxsaber :

용어를 이해하지 못합니다.

데이터 표시뿐만 아니라 표시기 버퍼 에 기록하여 데이터를 계산하고 표시합니다.
 
Slawa :

OnChartEvent를 사용하면 아직 솔루션이 없습니다.

해결책이 없는 것과 같습니까? 마우스 액세스 기능이 없다면 어떤 서비스가 될까요? 예, 사용자 이벤트 를 처리하고 싶습니다.
 
Alexey Kozitsyn :
데이터 표시뿐만 아니라 표시기 버퍼 에 기록하여 데이터를 계산하고 표시합니다.

여기에서 그들은 지표에 의해 계산된 데이터가 TF 변경 중에 이 지표의 다른 복사본으로 안정적이고 논리적으로 전송될 수 없다고 불평합니다.

서비스를 통해 서비스가 계산 부분을 수행하고 표시기를 표시하는 경우 이는 기본적으로 수행됩니다.

굵게 표시되지 않는 다른 모든 경우에는 계속해서 고전적인 방식으로 지표를 작성할 수 있습니다.

 
fxsaber :

여기에서 그들은 지표에 의해 계산된 데이터가 TF 변경 중에 이 지표의 다른 복사본으로 안정적이고 논리적으로 전송될 수 없다고 불평합니다.

서비스를 통해 서비스가 계산 부분을 수행하고 표시기를 표시하는 경우 기본적으로 수행됩니다.

굵게 표시되지 않는 다른 모든 경우에는 계속해서 고전적인 방식으로 지표를 작성할 수 있습니다.

알았어, 기다려서 무슨 일이 일어나는지 보자. 베타는 언제 되나요?
 
Alexey Kozitsyn :
알았어, 기다려서 무슨 일이 일어나는지 보자. 베타는 언제 되나요?
내가 좋은 것을 준다면 오늘 밤.
 
Nikolai Semko :
해결책이 없는 것과 같습니까? 마우스 액세스 기능이 없다면 어떤 서비스가 될까요? 예, 사용자 이벤트 를 처리하고 싶습니다.

No Decision은 "해결 방법이 아직 알려져 있지 않다"가 아니라 "그렇지 않을 것이다"를 의미한다.

그리고 커스텀 이벤트로 전혀 문제 없습니다