PrintFormat

미리 설정된 형식에 따라 엑스퍼트 어드바이저 로그에 심볼과 값 세트를 포맷 및 인쇄.

void  PrintFormat(
   string format_string,   // 서식 string
   ...                     // 단순 유형의 값
   );

매개변수

format_string

[in]  서식 문자열은 단순 심볼로 구성되며, 서식 문자열 뒤에 인수가 있으면 서식 지정도 포함됩니다.

...

[in]  쉼포로 구분된 단순 유형의 값. 서식 문자열을 포함하여 총 매개변수의 수는 64개를 초과할 수 없습니다.

값 반환

String.

주의

최적화 하는 동안에는 전략 테스터에서 PrintFormat() 기능이 작동하지 않습니다.

매개변수의 수, 순서 및 유형은 수식어 집합과 정확히 일치해야하며, 그렇지 않으면 인쇄 결과가 정의되지 않습니다. PrintFormat() 대신 printf()를 사용할 수 있습니다.

서식 문자열 뒤에 매개변수가 있으면, 이 문자열에는 이러한 매개변수의 출력 서식을 나타내는 서식 규격이 포함되어야 합니다. 서식 지정은 항상 백분율 기호(%)로 시작합니다.

서식 문자열이 왼쪽에서 오른쪽으로 읽힙니다. 첫 번째 서식 지정이 충족되된(있는 경우), 서식 문자 열 이후의 첫 번째 매개변수 값이 사전 설정된 사양에 따라 변환되고 출력됩니다. 두 번째 형식 지정은 서식 문자열이 끝날 때까지 두 번째 매개변수의 변환 및 출력을 호출합니다.

서식 지정에는 다음과 같은 형식이 있습니다:            

          %[flags][width][.precision][{h | l | ll | I32 | I64}]type

서식 지정의 각 필드는 단순 심볼이거나 단순 서식 옵션을 나타내는 숫자입니다. 가장 간단한 서식 지정에는 백분율 기호(%)와 출력 매개변수의 유형 (예: %s)을 정의하는 기호만 포함됩니다. 서식 문자열에서 백분율 기호를 출력해야하는 경우 %% 서식 사양을 사용하십시오.

플래그

플래그

설명

기본 동작

– (마이너스)

설정 폭 내 왼쪽 맞춤

오른쪽 맞춤

+ (플러스)

기호 유형 값에 대한 + 또는 - 부호의 출력

값이 음수인 경우에만 부하가 표시됩니다

0 (영)

0이 사전 설정된 내의 출력 값 앞에 추가됩니다. 만약 0 플래그를 정수 형식 (i, u, x, X, o, d)으로 지정하고 정확도 사양(예: %04.d)을 설정한 경우 0은 무시됩니다.

아무것도 추가되지 않음

공백

기호 및 양수 값일 경우 출력 값 앞에 공백이 표시됩니다.

공백이 삽입되지 않았습니다

#

o, x 또는 X 서식과 함께 사용할 경우, 출력 값 0, 0x 또는 0X 가 각각 추가되기 전에 발생합니다.

아무것도 추가되지 않음

 

e, E, a 또는 A 서식과 함께 사용할 경우, 값은 항상 소수점으로 표시됩니다.

소수점은 0이 아닌 분수 부분이 있는 경우에만 표시됩니다.

 

g 또는 G 서식과 함께 사용할 경우, 플래그는 출력 값에서 소수점의 존재를 정의하고 선행 0의 차단을 방지합니다.

플래그 #를 c, d, i, u, s 형식과 함께 사용하면 무시됩니다.

소수점은 0이 아닌 분수 부분이 있는 경우에만 표시됩니다. 선행 0이 차단되었습니다.

너비 #

서식화된 값의 최소 출력 심볼 수를 설정하는 음수가 아닌 소수입니다. 출력 기호 수가 지정된 폭보다 작으면 선형(flag –)에 따라 왼쪽 또는 오른쪽에서 해당 공백 수가 추가됩니다. 0 플래그가 있는 경우 출력 값 앞에 해당하는 0이 추가됩니다. 출력 심볼 수가 지정된 너비보다 크면 출력 값이 차단되지 않습니다.

별표(*)가 너비로 지정된 경우 전달된 매개변수 목록의 해당 위치에 int 유형 값을 표시해야 합니다. 출력 값의 폭을 지정하는 데 사용됩니다.

정밀도 #

출력 정밀도를 설정하는 음이 아닌 십진수 - 소수점 뒤의 자릿수입니다. 너비 사양과 구별되는 정밀도 사양은 반올림을 사용하거나 사용하지 않고 부분 유형의 부품을 절단할 수 있습니다.

정밀도 사양은 사용하는 서식 유형마다 다릅니다.

유형

설명

기본 동작

a, A

정밀도 규격은 소수점 뒤의 자릿수를 설정합니다.

기본 정밀도 – 6.

c, C

사용하지 않음

 

d, i, u, o, x, X

최소 출력 자릿수를 설정. 해당 매개변수가 자릿수가 이 정밀도보다 작으면 출력값 왼쪽에 0이 추가됩니다. 출력 자릿수가 지정된 정밀도보다 크면 출력 값이 차단되지 않습니다.

기본 정밀도 – 1.

e, E, f

출력 자릿수를 소수점 뒤의 숫잘 설정합니다. 마지막 자릿수가 반올림됩니다.

기본 정밀도 – 6. 설정 정밀도가 0이거나 소수점이 없는 경우 소수점이 표시되지 않습니다.

g, G

의미 있는 최대 수를 설정합니다.

6개의 의미 있는 숫자가 출력됩니다.

s

문자열의 출력 심볼 수를 설정. 문자열 길이가 정밀도를 초과하면 문자열이 잘립니다.

전체 문자열이 출력됩니다.

 

   PrintFormat("1. %s"_Symbol);
   PrintFormat("2. %.3s"_Symbol);
   int length=4;
   PrintFormat("3. %.*s"length_Symbol);
   /*
   1EURUSD
   2EUR
   3EURU
   /

h | l | ll | I32 | I64

매개변수로 전달된 데이터 크기의 규격입니다.

매개변수 유형

사용된 접두사

유형의 공동 지정자

int

l (소문자 L)

d, i, o, x, 또는 X

uint

l (소문자 L)

o, u, x, 또는 X

long

ll (소문자 L 1개)

d, i, o, x, 또는 X

short

h

d, i, o, x, 또는 X

ushort

h

o, u, x, 또는 X

int

I32

d, i, o, x, 또는 X

uint

I32

o, u, x, 또는 X

long

I64

d, i, o, x, 또는 X

ulong

I64

o, u, x, 또는 X

type #

서식 지정자는 서식화된 출력의 유일한 필수 필드입니다.

심볼

유형

출력 서식

c

int

단축형 심볼 (유니코드)

C

int

char 유형의 심볼 (ANSI)

d

int

부호 있는 10진법 정수

i

int

부호 있는 10진법 정수

o

int

부호 없는 8진법 정수

u

int

부호 없는 10진법 정수

x

int

"abcdef"를 사용하는 부호없는 16진법 정수

X

int

"ABCDEF"를 사용하는 부호없는 16진법 정수

e

double

[-] d.dddde[sign] ddd 서식의 실제 값, 여기서 d - 소수 한 자리수, dddd - 소수 자릿수 한자리 이상, ddd - 지수, 플러스 또는 마이너스 기호의 크기를 결정하는 세자리 숫자

E

double

지수 부호가 대문자 (e 대신 E)로 출력된다는 점을 제외하고 e의 형식과 유사함

f

double

[-] dddd.dddd 서식의 실제 값, 여기서 dddd - 하나 이상의 소수 자릿수. 소수점 이전의 표시된 자릿수는 숫자 값의 크기에 따라 다릅니다. 소수점 뒤의 자릿수는 필요한 정확도에 따라 달라집니다.

g

double

더 압축된 출력에 따라 f 또는 e 서식의 실제 값 출력.

G

double

더 압축된 출력에 따라 F 또는 E 서식의 실제 값 출력.

a

double

[−]0xh.hhhh p±dd 서식의 실수, 여기서 h.hhhh 는 "abcdef"를 사용하는 16진법 형태의 가수 , dd는 하나 이상의 지수. 소수 자릿수는 정확도 사양에 따라 결정

A

double

[−]0xh.hhhh P±dd 서식의 실수, 여기서 h.hhhh는 "ABCDEF"를 사용하는 16진법 형태의 가수, dd는 하나 이상의 지수. 소수 자릿수는 정확도 사양에 따라 결정

s

string

문자열 출력

PrintFormat() 대신 printf()를 사용할 수 있습니다.

예를 들어:

void OnStart()
  {
//--- trade server name
   string server=AccountInfoString(ACCOUNT_SERVER);
//--- account number
   int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- long value output
   long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
   PrintFormat("%s %d: leverage = 1:%I64d",
               server,login,leverage);
//--- account currency
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- double value output with 2 digits after the decimal point
   double equity=AccountInfoDouble(ACCOUNT_EQUITY);
   PrintFormat("%s %d: account equity = %.2f %s",
               server,login,equity,currency);
//--- double value output with mandatory output of the +/- sign
   double profit=AccountInfoDouble(ACCOUNT_PROFIT);
   PrintFormat("%s %d: current result for open positions = %+.2f %s",
               server,login,profit,currency);
//--- double value output with variable number of digits after the decimal point
   double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
   string format_string=StringFormat("%%s: point value  = %%.%df",_Digits);
   PrintFormat(format_string,_Symbol,point_value);
//--- int value output
   int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   PrintFormat("%s: current spread in points = %d ",
               _Symbol,spread);
//--- double value output in the scientific (floating point) format with 17 meaningful digits after the decimal point
   PrintFormat("DBL_MAX = %.17e",DBL_MAX);
//--- double value output in the scientific (floating point) format with 17 meaningful digits after the decimal point
   PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);
//--- output using PrintFormat() with default accuracy
   PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- simple output using Print()
   Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* execution result
   MetaQuotes-Demo 1889998: leverage = 1:100
   MetaQuotes-Demo 1889998: account equity = 22139.86 USD
   MetaQuotes-Demo 1889998: current result for open positions = +174.00 USD
   EURUSD: point value  = 0.00001
   EURUSD: current spread in points = 12 
   DBL_MAX = 1.79769313486231570e+308
   EMPTY_VALUE = 1.79769313486231570e+308
   PrintFormat(EMPTY_VALUE) = 1.797693e+308
   Print(EMPTY_VALUE) = 1.797693134862316e+308
*/
  }

추가 참조

StringFormat, DoubleToString, Real types (double, float)