FileWrite

이 함수는 데이터를 CSV 파일에 쓰기 위한 것으로, 0이 아닌 한 구분 기호가 자동으로 삽입됩니다. 파일에 쓴 후 줄 끝 문자 "\r\n"이 추가됩니다.

uint  FileWrite(
   int  file_handle,   // 파일 핸들
   ...                 // 기록된 파라미터 목록
   );

Parameters

file_handle

[in] FileOpen()에서 반환된 파일 설명자.

...

[in] 파일에 쓸 매개 변수 목록(콤마로 구분). 쓰여진 매개 변수 수는 최대 63개까지 가능합니다.

반환 값

쓴 바이트 수.

참고

숫자는 출력 시 텍스트로 변환됩니다(Print() 함수 참조). double 유형의 데이터는 소수점 다음 16자리 정확도로 출력되며, 데이터는 가장 컴팩트한 형식에 따라 기존 형식 또는 과학적 형식으로 표시될 수 있습니다. float 유형의 데이터는 소수점 뒤에 5자리 숫자로 표시됩니다. 다른 정밀도 또는 명확하게 지정된 형식으로 실수를 출력하려면 DoubleToString()를 사용하십시오.

bool 유형의 번호는 "true" 또는 "false" 문자열로 표시됩니다. datetime 타입의 숫자는 "YYYY.MM.DD HH:MI:SS"로 표시됩니다.

예:

//+------------------------------------------------------------------+
//|                                               Demo_FileWrite.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- 스크립트를 시작할 때 입력 매개 변수의 창을 표시합니다.
#property script_show_inputs
//--- 터미널에서 데이터를 수신하기 위한 매개 변수
input string             InpSymbolName="EURUSD";           // 통화
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // 타임프레임
input int                InpFastEMAPeriod=12;              // 빠른 EMA 기간
input int                InpSlowEMAPeriod=26;              // 느린 EMA 기간
input int                InpSignalPeriod=9;                // 차이 평균 기간
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // 가격 유형
input datetime           InpDateStart=D'2012.01.01 00:00'; // 데이터 복사 시작 날짜
//--- 파일에 데이터를 쓰기 위한 매개 변수
input string             InpFileName="MACD.csv";  // 파일명
input string             InpDirectoryName="Data"// 디렉토리명
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // 데이터 복사 종료일
   bool     sign_buff[]; // 시그널 배열 (true - 매수, false - 매도)
   datetime time_buff[]; // 시그널 배열의 도착 시간
   int      sign_size=0; // 시그널 배열 사이즈
   double   macd_buff[]; // 지표 값 배열
   datetime date_buff[]; // 지표 날짜 배열
   int      macd_size=0; // 지표 배열 사이즈
//--- 종료 시간은 현재 시간
   date_finish=TimeCurrent();
//--- MACD 지표 핸들 수신
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_handle==INVALID_HANDLE)
     {
      //--- 지표 핸들을 수신하지 못함
      PrintFormat("지표 핸들 수신 시 오류 발생. Error code = %d",GetLastError());
      return;
     }
//--- 지표가 모든 값을 계산할 때까지 루프에 있음
   while(BarsCalculated(macd_handle)==-1)
      Sleep(10); // 지표가 모든 값을 계산할 수 있도록 일시 중지
//--- 일정 기간 동안 지표 값을 복제
   ResetLastError();
   if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("지표값 복제 실패. Error code = %d",GetLastError());
      return;
     }
//--- 지표값에 적절한 시간을 복제
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("시간 값 복제 실패. Error code = %d",GetLastError());
      return;
     }
//--- 지표의 메모리를 비움
   IndicatorRelease(macd_handle);
//--- 버퍼 사이즈 수령
   macd_size=ArraySize(macd_buff);
//--- 데이터를 분석하고 지표 시그널을 배열에 저장합니다
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- 매수 시그널
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- 매도 시그널
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }
//--- 지표 값을 쓰기 위해 파일을 엽니다(파일이 없을 경우 자동으로 생성됨)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s 파일을 쓸 수 있습니다",InpFileName);
      PrintFormat("파일 경로: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- 첫째, 시그널의 수를 씁니다
      FileWrite(file_handle,sign_size);
      //--- 시그널에 대한 시간 및 값을 파일에 기록
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- 파일 닫기
      FileClose(file_handle);
      PrintFormat("데이터가 작성됐습니다, %s 파일이 닫힙니다",InpFileName);
     }
   else
      PrintFormat("%s 파일 열기 실패, 에러 코드 = %d",InpFileName,GetLastError());
  }

더 보기

Comment, Print, StringFormat