포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1129

 
Vladimir :
조언자(또는 스크립트)가 소스 코드를 가져오고 수정하는 측면에서 마음대로 하면 기회가 있습니다. 버튼이 눌렸는지 여부를 확인하여 모든 경고에 조건을 부과해야 합니다. 누르지 않으면 경고가 호출되지 않습니다.

감사 합니다 블라디미르 - 나는 당신의 방법을 사용하거나 전체 고문을이 조건에 삽입 할 것이라고 생각합니다.

감사합니다 Vitalie Postolache - 귀하의 추천을 검토할 것입니다. 아직 mql5에 대해 자세히 알아보지 못했습니다.

 
miss.natasha :

hst 파일에 데이터를 쓸 필요가 있었기 때문에 나중에 이러한 데이터를 기반으로 오프라인 차트를 구축할 수 있었습니다.

나는 둘째 날과 싸웠지만 아무것도 얻지 못했다.

코드:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
ulong     last_fpos= 0 ;         //
int       HandleHistory=- 1 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   string symbol= Symbol ();
   int per= Period ()* 9 ;

   ResetLastError ();
   if (CreateHeader()== true ) //если создали заголовок
     {
      HandleHistory= FileOpenHistory (symbol+( string )per+ ".hst" , FILE_BIN | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_ANSI );
       if (HandleHistory!= INVALID_HANDLE )
        {

         for ( int i= 199 ;i> 0 ;i--) //заполняем данными
           {
             MqlRates r;
            r.time= Time [i]; //просто пытаюсь записать, это так для примера
            r.open= Open [i]; //просто пытаюсь записать, это так для примера
            r.low= Low [i];
            r.high= High [i];
            r.close= Close [i];
            r.tick_volume=( long ) 10 ;
            r.spread= 0 ;
            r.real_volume=( long ) 10 ;
             uint byteswritten= FileWriteStruct (HandleHistory,r);
             Print ( "FileOpen OK " ,byteswritten, " " , Time [i]);
           }
       FileClose (HandleHistory);
       // FileFlush(HandleHistory);
        }
       else Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());
     }
// long id=ChartOpen(symbol,per);
//Alert(id);
  }
//+------------------------------------------------------------------+
bool CreateHeader() //создаем файл с историей hst(заголовок)
  {

   int       file_version= 401 ;
   string    c_copyright;
   string    c_symbol= Symbol ();
   int i_period= Period ()* 9 ;
   int       i_digits= Digits ;
   int       i_unused[ 13 ];
//---  
   ResetLastError ();
   HandleHistory= FileOpenHistory (c_symbol+( string )i_period+ ".hst" , FILE_BIN | FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_ANSI );
   if (HandleHistory< 0 )
     {
       Print ( "Error open " ,c_symbol+( string )i_period, ".hst file " , GetLastError ());
       return ( false );
     }
   c_copyright= "(C)opyright 2003, MetaQuotes Software Corp." ;
   ArrayInitialize (i_unused, 0 );
//--- write history file header
   FileWriteInteger (HandleHistory,file_version, LONG_VALUE );
   FileWriteString (HandleHistory,c_copyright, 64 );
   FileWriteString (HandleHistory,c_symbol, 12 );
   FileWriteInteger (HandleHistory,i_period, LONG_VALUE );
   FileWriteInteger (HandleHistory,i_digits, LONG_VALUE );
   FileWriteInteger (HandleHistory, 0 , LONG_VALUE );
   FileWriteInteger (HandleHistory, 0 , LONG_VALUE );
   FileWriteArray (HandleHistory,i_unused, 0 , 13 );
   return ( true );
  }

실행 결과 히스토리가 있는 파일은 생성되지만 오프라인 차트는 생성되지 않는다.

다음은 일정 정보입니다

데이터가 2003년에 작성된 이유!

결과적으로 차트를 시작할 때 오류가 발생합니다. HistoryBase: 196 errors in 'NZDCHF45'

제가 글을 잘못 쓴건 이해합니다. 그런데 제대로 쓸 줄 몰라서 정보가 부족해요. 누가 알겠습니까?


MQ가 .hst 파일의 구조를 공식적으로 연 것을 기억하지 못합니다(만약 그렇다면 공식 사양을 살펴봐야 합니다)

아마도 아주 오래된 프로젝트 (C, gcc)에서 발췌 한 것이 도움이 될 것입니다.


/* .hst file header
*/
struct HstHeader {
    uint32_t    version;        // +0 4 LE  : database version
    char        copyright[64];  // +4 64    : copyright data
    char        symbol[12];     // +68 12   : symbol (EURUSD..)
    uint32_t    period;         // +80 4 LE : timeframe (sec. in period)
    uint32_t    digits;         // +84 4 LE : decimals after .
    datetime    timesign;       // +88 4 LE : creation time sign.
    datetime    last_sync;      // +92 4 LE : last sync. timestamp
    uint8_t     unused[52];     // +96 52   : reserved for feauture use
                                // total 148 bytes, packed, aligned by 1
};

/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
    datetime    ctm;            // +0 4 LE  : start (creation) time
    double      open;           // +4 8 LE  : open price
    double      low;            // +12 8 LE : lowest price
    double      high;           // +20 8 LE : highst price
    double      close;          // +28 8 LE : close price
    double      volume;         // +36 8 LE : volume (nr of ticks)
                                // total 44 bytes,packed, aligned by 1
} __attribute__((packed));

// when HstHeader.version==401

struct HstRates401 {
    datetime    ctm;            // +0 8 LE  : bar start time (with ms?)
    double      open;           // +8 8 LE  : open price
    double      low;            // +16 8 LE : lowest price
    double      high;           // +24 8 LE : highst price
    double      close;          // +32 8 LE : close price
    uint64_t    volume;         // +40 8 LE : volume (nr of ticks)
    uint32_t    spread;         // +48 4 LE : spread
    long        real_volume;    // +52 8 LE : real volume
                                // total 60 bytes,packed,aligned by 1
} __attribute__((packed));


이제 몇 년이 지난 후에 살펴 보았고 높음 / 낮음이 그 순서로 있어야하는지 확실하지 않지만 적어도 구조 (헤더 및 레코드) 크기 가 있는지 확인하십시오.
 

안녕하세요 여러분, 저는 이미 존재하는 것을 계속해서 다듬고 있습니다.

우리는 고르지 않은 주문 그리드와 어디에나 있을 수 있는 수평선 을 가지고 있습니다.

이것을 구현해야 합니다.

가격이 선 아래에 있으면 모든 주문을 닫으십시오.

어려움은

1) 주문이 고르지 않은 유형이고 선을 배치할 때 숨겨진 것이 있고 배치, 표시 및 설정이 아닌 경우(그런 다음에도 여전히 어떤 종류의 플래그를 설정/해제해야 함)

2) 유형별로 라인 상단의 오른쪽에 있는 비문 구현(주문이 이 가격으로 마감된 경우 결과는 잔액에 따라 결정됩니다. 즉, 매 틱마다 디스플레이를 변경해야 하며 또한 언제 일반적으로 수동으로 주문할 때 tp 또는 sl과 유사하게 라인을 이동하고 처음에는 가양성(false positive) 가능성이 있는 유동만 있음)

로봇이 있지만 모든 것이 이미 그려진 숫자 레이블을 제외하고 문제는 값의 올바른 할당과 전체 그리드의 정보 처리에 있습니다.

파일:
USDCHFH1.png  26 kb
 
trader781 :


1) 주문 유형이 고르지 않은 경우

이런 얘기는 처음 들어요.
 
안녕하세요. iTime이 때때로 잘못된 시간을 제공하는 이유를 이해하지 못합니다. 새 PERIOD_H1 양초를 열면 Print(iTime(NULL, PERIOD_M1 ,30)) 로그에 시간이 표시되어야 합니다. 테스트에서는 모든 것이 올바르게 표시되지만 실제 생활에서는 시간이 몇 시간씩 차이가 나는 경우도 있습니다. 왜 그런 겁니까?
 
Nauris Zukas :
안녕하세요. iTime이 때때로 잘못된 시간을 제공하는 이유를 이해하지 못합니다. 새 PERIOD_H1 양초를 열면 Print(iTime(NULL, PERIOD_M1 ,30)) 로그에 시간이 표시되어야 합니다. 테스트에서는 모든 것이 올바르게 표시되지만 실제 생활에서는 시간이 몇 시간씩 차이가 나는 경우도 있습니다. 왜 그런 겁니까?

CopyTime 사용

datetime TM[];
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
 
Vitaly Muzichenko :

CopyTime 사용

datetime TM[];
if ( CopyTime ( Symbol (), Period (), 0 , 1 ,TM)< 0 ) return ;
TIME0=TM[ 0 ];
고맙습니다!
 
Evgeny Belyaev :
이런 얘기는 처음 들어요.
물체에 부착된 플로팅 테이크만 있으면 됩니다.
 
지표 눈금에서 소수점 이하 5자리를 얻으려면 어떻게 해야 합니까?

여기 차트에는 5개의 기호가 있고 지표에는 4개의 기호가 있습니다.
 
igrok333 :
내 표시기의 눈금에서 소수점 이하 5자리를 얻으려면 어떻게 해야 합니까?

여기 차트에는 5개의 기호가 있고 지표에는 4개의 기호가 있습니다.
IndicatorSetInteger ( INDICATOR_DIGITS , Digits ());