FORTS 도와주세요 - 페이지 7

 
우리는 계속 코드를 숨기고 있습니까?
 
barabashkakvn :
계속해서 코드를 숨기고 있습니까?

메시지를 전혀 읽습니까?

미칼라스 2015.03.26 18:56 KO

축치라고 외쳤지만 문제는 해결되지 않았다!

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//
bool is_failed = false ;
datetime start_time;
datetime end_time;
int mix_bars, rts_bars, si_bars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
    start_time = StringToTime ( "2015.03.17" );
    end_time = TimeCurrent ();
//--- indicator buffers mapping
  mix_bars = GetBars( "MIX-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( mix_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. MIX-6.15 " );
  }
  rts_bars = GetBars( "RTS-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( rts_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. RTS-6.15 " );
  }
  si_bars = GetBars( "Si-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( si_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. Si-6.15 " );
  }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
   if ( ! SymbolInfoInteger ( symbol, SYMBOL_SELECT ) )
  {
     ResetLastError ();
//---    
     if ( GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL )
    {
       SymbolSelect ( symbol, true );
    }
     else
    {
       Print ( "GetBars: Неизвестный символ - " , symbol );
       return ( 0 );
    }    
  }
//---  
   if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period () == period && Symbol () == symbol )
  {
     Print ( "GetBars: Не пройдена проверка типа программы!" );
     return ( 0 );
  }  
//---
   if ( SymbolIsSynchronized ( symbol ) )
  {
     return ( Bars ( symbol, period, start_date, end_date ) );
  }
   else
  {
     long first_date = 0 ;
     datetime times[ 1 ];
//---    
     if ( SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date ) )
    {
       if ( first_date > 0 )
      {
//--- force timeseries build
         CopyTime ( symbol, period, datetime ( first_date ) + PeriodSeconds ( period ), 1 , times );
//--- check date
         if ( SeriesInfoInteger ( symbol, period, SERIES_FIRSTDATE , first_date ) )
//---        
         if ( first_date > 0 && first_date <= long ( start_date ) )
        {
           return ( Bars ( symbol, period, start_date, end_date ) );
        } 
      }
    }
     Print ( "Необходима загрузка истории с сервера!" );
  }       
//---  
   return ( 0 );
}  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 ( is_failed )
   {
     Print ( "Sorry! Get Bars failed." );
   }
   else Print ( "Bingo! We done." );
//--- return value of prev_calculated for next call
   return (rates_total);
  }

아직 다운로드 내역을 작성하지 않았지만 데이터는 터미널에 있으며 처음에는 가져오지 않습니다!

 2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. RTS- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. Si- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Sorry! Get Bars failed. 

주머니에 | 편집 | 삭제

 

누군가 설명해 주시겠습니까?

데이터가 있을 때 ID가 SERIES_TERMINAL_FIRSTDATE 인 함수가 있는 이유는 무엇입니까?

터미널에서 FALSE를 반환합니까?

 SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date )
 
Mikalas :

누군가 설명해 주시겠습니까?

데이터가 있을 때 ID가 SERIES_TERMINAL_FIRSTDATE 인 함수가 있는 이유는 무엇입니까?

터미널에서 FALSE를 반환합니까?

5초 지금 링크 올리고 있습니다...
 
MigVRN :
5초 지금 링크 올리고 있습니다...

데이터 액세스 조직의 도움말에서 --> 기록 다운로드를 위한 스크립트의 예:

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger () с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if ( SeriesInfoInteger (symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ,first_date))
     {
       //--- there is loaded data to build timeseries
       if (first_date> 0 )
        {
         //--- force timeseries build
         CopyTime (symbol,period,first_date+ PeriodSeconds (period), 1 ,times);
         //--- check date
         if ( SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date))
             if (first_date> 0 && first_date<=start_date) return ( 2 );
        }
     }
 
 
MigVRN :

모든 것은 문서에 기록된 대로 정확하게 발생합니다. :)

검증 + 결과를 위해 지표와 전문가를 영상에 스케치했습니다.

1) 먼저 차트에 Expert Advisor를 던졌습니다. 이 차트에는 OnTick 내부에 20초 동안 작동하는 기능이 있습니다.

결과 - 채팅이 계속 작동하고 모든 것이 정상적으로 표시됩니다. 유리도 정상적으로 작동합니다.

2) 그런 다음 OnCalculate 내부에 20초 동안 작동하는 기능이 있는 표시기를 차트에 던집니다.

결과 - 채팅이 중단됩니다. 또한 기간이 다른 동일한 기호의 이웃 채팅도 정지됩니다. 유리는 정상적으로 작동합니다. 기능이 작동하면 모든 것이 정상으로 돌아갑니다.

3) 이것은 비디오에 없지만 한 채팅에 표시기를 놓고(60초를 넣어) 다른 전문가에 표시를 하면 다른 채팅의 표시가 꺼질 때까지 전문가가 작동을 시작하지 않습니다!!!

비디오를 별도로 첨부했습니다. 브라우저에서 속도가 느려집니다.

젠장, 멀티스레딩 어디갔어?!

표시기가 작동할 때까지 눈금은 EA에 도달하지 않습니다!

 
Serj_Che :

젠장, 멀티스레딩 어디갔어?!

표시기가 작동할 때까지 눈금은 EA에 도달하지 않습니다!

주문이 주문서에 도달하면 차트에 마지막으로 표시되지 않습니다.
 
Serj_Che :

젠장, 멀티스레딩 어디갔어?!

표시기가 작동할 때까지 눈금은 EA에 도달하지 않습니다!

항상 그래왔어

미칼라스 :
주문이 주문서에 도달하면 차트에 마지막으로 표시되지 않습니다.

그는 진드기 전문가가 작동하지 않습니다. 예, 채팅의 다른 모든 것. 진실은 타이머와 사용자 이벤트 를 확인하지 않았습니다.

미칼라스 :

데이터 액세스 조직의 도움말에서 --> 기록 다운로드를 위한 스크립트의 예:

또한 참조 에서

... HCC 형식의 서비스 파일은 HC 형식의 요청 된 기간 동안 가격 데이터를 표시하기 위한 데이터 소스 역할을 합니다. HC 형식의 데이터는 빠른 액세스를 위해 최대한 준비된 시계열입니다. 그들은 "차트의 최대 막대" 매개변수 값을 초과하지 않는 양으로 차트 또는 mql5 프로그램의 요청에 의해서만 생성 되고 hc 확장자를 가진 파일에서 추가 사용을 위해 저장됩니다.

자원을 절약하기 위해 필요한 경우에만 타임프레임 데이터를 RAM에 로드하여 저장하고 , 장기간 데이터 액세스가 없으면 RAM에서 언로드하여 파일로 저장합니다. 각 시간대에 대해 다른 시간대의 기성 데이터 가용성에 관계없이 데이터가 준비 됩니다. 데이터의 형성 및 가용성에 대한 규칙은 모든 기간에 대해 동일합니다. 저것들. HCC 형식의 데이터 저장 단위가 분 막대라는 사실에도 불구하고 HCC 형식의 데이터가 있다고 해서 HC 형식의 동일한 볼륨에 있는 M1 기간 데이터의 가용성 및 가용성을 의미하지는 않습니다.

 
Mikalas :

누군가 설명해 주시겠습니까?

데이터가 있을 때 ID가 SERIES_TERMINAL_FIRSTDATE 인 함수가 있는 이유는 무엇입니까?

터미널에서 FALSE를 반환합니까?

특히 이 시리즈를 처음으로 언급한 사람은 바로 그녀이기 때문입니다.
 
Mikalas :

데이터 액세스 조직의 도움말에서 --> 기록 다운로드를 위한 스크립트의 예:

잘. 당신은 올바른 길을 가고 있습니다. 터미널이 어떻게 작동하는지 확인하고 상상하는 방식이 아닌 간단한 검증 알고리즘.

  • 터미널에서 하나의 차트 "MIX-6.15 M1"을 엽니다. 차트에는 첫 번째 게시물의 지표가 있습니다.
  • 터미널 "데이터 디렉토리 열기"에서.
  • 이 경로를 따라 "MIX-6.15" 기호로 기록을 찾고 있습니다 ...\Terminal\D0*******CF37AD**55**0E51F**75\bases\Open-Demo\history
  • 터미널을 언로드합니다.
  • "MIX-6.15" 폴더를 삭제합니다 .
  • 터미널을 로드합니다. 오류가 표시됩니다. 차트를 약간 조롱합니다. 기간을 여러 번 변경합니다. 예를 들어 M1과 M5가 여러 번 있습니다. 오류가 사라집니다. 이는 코드에서 요청한 데이터가 아닌 다른 시간 프레임의 데이터가 준비되었음을 의미합니다. 이와 같이 시간 프레임을 수동으로 변경하고 싶지 않다면 데이터를 직접 준비해야 합니다.
  • 터미널을 다시 시작합니다. 오류가 없습니다.
  • 명확하지 않으면 실험을 반복하십시오.