1. 매뉴얼 다운 및 참고사이트
2. 코드(수식) 다운로드
•
SuperTrend 지표식 다운로드
지표식 저장경로
C:\예스트레이더\YesLang\Indicators
•
SuperTrend 전략식 다운로드
전략식 저장경로
C:\예스트레이더\YesLang\Signals
•
자동주문 예스스팟 다운로드
예스스팟 저장경로
C:\예스트레이더\Spot
3. 코드 복사
예스랭귀지 문법 기초
// 예제1: 일봉, 50바 권장
// 기본 문법 이해: 순차와 계산 순서
MessageLog("시작");
MessageLog("명령1");
MessageLog("명령2");
MessageLog("종료");
JavaScript
복사
// 예제2: 일봉, 30바 권장
// 기본 문법 이해: 이전 값 참조 []
MessageLog("%.2f",C);
// MessageLog("%.2f",C[1]);
// MessageLog("%.2f",C[100]);
JavaScript
복사
// 예제3: 일봉, 30바 권장
// 기본 문법 이해: 대소문자 구별하지 않음
Var : mav(0);
mav = 5;
Mav = 10;
MessageLog("%.2f/%.2f",mav,Mav);
JavaScript
복사
// 예제4: 5분봉, 500바 권장
// 내장 변수 이해
/*
Plot1(DayOpen(1),"전일시가",Red,Def,2);
Plot2(DayClose(1));
Plot3(DayHigh(1));
Plot4(DayLow(1));
*/
/*
Plot1((DayOpen(1)+DayClose(1)+DayHigh(1)+DayLow(1))/4);
Plot2((DayOpen(1)+DayClose(1)+DayHigh(1)+DayLow(1))/4*1.02);
Plot3((DayOpen(1)+DayClose(1)+DayHigh(1)+DayLow(1))/4*0.98);
*/
input : 상단(1.02), 하단(0.98);
Var : pivot(0);
pivot = (DayOpen(1)+DayClose(1)+DayHigh(1)+DayLow(1))/4;
Plot1(pivot,"피봇");
Plot2(pivot*상단,"피봇상단");
Plot3(pivot*하단,"피봇하단");
JavaScript
복사
// 예제5: 일봉, 50바 권장
// 제어문(if문) 실습
// if 문만 사용하는 버전 (각각 독립 실행)
/*
if C > O Then
{
MessageLog("양봉");
}
if C < O Then
{
MessageLog("음봉");
}
if C == O Then
{
MessageLog("도지");
}
MessageLog("끝");
*/
// if ... else 문 사용 (양자택일 구조)
/*
if C > O Then
{
MessageLog("양봉");
}Else{
MessageLog("양봉 아님");
}
*/
// if ... else if ... else 문 사용 (3가지 분기처리)
if C > O Then
{
MessageLog("양봉");
}Else if C < O Then{
MessageLog("음봉");
}Else{
MessageLog("도지");
}
JavaScript
복사
// 예제6: 30분봉, 500바 권장
// 조건문 실전 예제
// "짧은 이동평균이 긴 이동평균을 상향 돌파하고, 동시에 양봉이라면 매수하라!“
input : Short(5), Long(20);
Var : ShortMa(0), LongMa(0), 양봉(False);
ShortMa = Ma(C, Short);
LongMa = ma(c, Long);
양봉 = C > O;
if crossup(ShortMa, LongMa) and 양봉 == True Then
{
Var1 = TL_NEW(sDate,sTime,0,sDate,sTime,99999999);
TL_SetColor(Var1, Red);
}
if CrossDown(ShortMa, LongMa) and 양봉 == False Then
{
Var2 = TL_NEW(sDate,sTime,0,sDate,sTime,99999999);
TL_SetColor(Var2, Blue);
}
/*
if shortma > longma and 양봉 == True Then
{
TL_NEW(sDate,sTime,0,sDate,sTime,99999999);
}
*/
Plot1(ShortMa,"단기",Red,Def,1);
Plot2(LongMa,"장기",Blue,Def,1);
JavaScript
복사
SuperTrend 지표식 예제
// 예제7: 30분봉, 500바 권장
// SuperTrend 지표식 만들어보기
input : factor(3), AtrPeriod(10);
// factor: ATR에 곱할 배수 (기본값 3)
// AtrPeriod: ATR 계산 기간 (기본값 10)
var : src(0), AtrV(0), upperBand(0), lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), superTrend(C), direction(0), alpha(0), source(0);
if CurrentBar > 1 Then
{
// "현재 봉"이 1보다 커야(즉, 2번째 봉 이후) 이전 봉 데이터가 있으므로 본문을 실행
src = (H + L) / 2;
// SuperTrend 계산 시 사용하는 중심값(고가 + 저가의 평균)
// ATR계산(지수가중이동평균(rma) 방식으로 계산)
alpha = 1 / AtrPeriod;
source = max(High - Low, abs(High - Close[1]), abs(Low - Close[1]));
// ATR(또는 True Range) 후보값(고가-전일종가, 저가-전일종가 차이, 고가-저가)의 최대값을 취함
ATrV = alpha * source + (1 - alpha) * ATrV[1];
// 지수 가중 방식으로 새로운 ATrV를 계산
upperBand = src + factor * AtrV;
lowerBand = src - factor * AtrV;
// SuperTrend 상·하단 밴드를 설정 (중심값 ± factor * ATrV)
prevLowerBand = lowerBand[1];
prevUpperBand = upperBand[1];
// 한 봉 전의 밴드(이전 밴드) 값을 기억
// (a) 상승 추세 시에는 트레일 스탑을 절대 내리지 않는다
// (b) 밴드를 가격이 뚫었으면 이미 깨져버린 밴드 대신 새 밴드로 교체해 추세를 다시 잡는다
// if문 1: "현재 lowerBand가 이전 lowerBand보다 큰지 OR 이전 종가가 이전 lowerBand보다 작은지" 확인
if lowerBand > prevLowerBand or close[1] < prevLowerBand Then
{
lowerBand = lowerBand;
// 조건이 참이면 lowerBand를 그대로 사용
}
else
{
lowerBand = prevLowerBand;
// 조건이 거짓이면 이전 lowerBand 값을 이어서 사용
}
// (a) 하락 추세에서는 트레일 스탑(upperBand)을 절대 높이지 않음
// (b) 이전 밴드를 가격이 돌파했을 경우 이미 무효화되었으므로 새 밴드를 쓰자
// if문 2: "현재 upperBand가 이전 upperBand보다 작은지 OR 이전 종가가 이전 upperBand보다 큰지" 확인
if upperBand < prevUpperBand or close[1] > prevUpperBand Then
{
upperBand = upperBand;
// 조건이 참이면 upperBand를 그대로 사용
}
else
{
upperBand = prevUpperBand;
// 조건이 거짓이면 이전 upperBand 값을 이어서 사용
}
// if문 3: "현재 종가(C)가 upperBand보다 큰지" 확인
if C > UpperBand Then
{
direction = 1;
}
// 종가가 upperBand 위에 있으면 상승 방향
// if문 4: "현재 종가(C)가 lowerBand보다 작은지" 확인
if C < LowerBand Then
{
direction = -1;
}
// 종가가 lowerBand 아래에 있으면 하락 방향
// if문 5: "direction이 1(상승)인지 아닌지" 확인
if direction == 1 Then
{
supertrend = lowerBand;
// 상승일 때, supertrend 값을 lowerBand로 설정
}
else
{
supertrend = upperBand;
// 하락일 때, supertrend 값을 upperBand로 설정
}
}
if C > superTrend Then {
Plot1(superTrend,"UpTrend", GREEN, 0, 1);
NoPlot(2);
}
Else {
Plot2(superTrend,"DnTrend", RED, 0, 1);
NoPlot(1);
}
if direction == 1 and direction[1] == -1 Then
plot3(superTrend,"BuyStart",green,0,8);
if direction == -1 and direction[1] == 1 Then
plot4(superTrend,"SellStart",RED,0,8);
plot5(C, "종가");
JavaScript
복사
지표식 저장경로
C:\예스트레이더\YesLang\Indicators
SuperTrend 전략식 예제
/*최근 가장 인기 있는 지표 중 하나인 SuperTrend 지표를 이용한 전략으로
종가가 SuperTrend 상단 채널을 상향돌파하면 매수하고,
종가가 SuperTrend 하단 채널을 하향이탈하면 매도하는 전략입니다.
추세추종형 전략으로 큰 추세가 잘 나오는 전략에 유용합니다.*/
input : 투자금액(1000000);
input : factor(3), AtrPeriod(10);
Var : 누적자산(0), 수량(0);
var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0);
누적자산 = 투자금액 + netprofit;
수량 = int(투자금액/Close);
if CurrentBar > 1 Then {
src = (H+L)/2;
alpha = 1 / AtrPeriod ;
source = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV = alpha * source + (1 - alpha) * ATrV[1]; //지수가중이평방식
upperBand = src + factor * AtrV;
lowerBand = src - factor * AtrV;
prevLowerBand = lowerBand[1];
prevUpperBand = upperBand[1];
if lowerBand > prevLowerBand or close[1] < prevLowerBand Then
lowerBand = lowerBand;
Else
lowerBand = prevLowerBand;
if upperBand < prevUpperBand or close[1] > prevUpperBand Then
upperBand = upperBand;
Else
upperBand = prevUpperBand;
if C > UpperBand Then
direction = 1;
if C < LowerBand Then
direction = -1;
if direction == 1 Then
supertrend = lowerband;
Else
supertrend = upperband;
}
# 매수
if CrossUp(C, upperBand) Then
Buy("Buy", OnClose, Def, 수량);
# 매수청산
if CrossDown(C, lowerBand) Then
ExitLong("EL");
JavaScript
복사
전략식 저장경로
C:\예스트레이더\YesLang\Signals
예스스팟 종목검색 - 자동주문
var timerInterval = 5; // 5초 타이머 간격(매 5초마다 특정 작업을 수행하도록 설정)
var 매수금 = 1000000; // 추매수할 금액(추가 매수 금액)
// 종목검색 후 종목객체 요청할 종목코드를 저장할 배열변수
var MKList = []; // 검색 결과로 나온 종목코드를 저장할 배열
// 종목객체가 만들어진 순서대로 종목객체를 저장할 변수
var MK = []; // 실제 종목객체(MarketData)들이 담길 배열
// 종목객체 요청 카운트 변수
var req; // MKList에서 몇 번째 종목을 요청 중인지 나타내는 인덱스
function Main_OnStart()
{
var d = new Date(); // 현재 시간 객체 생성
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
Main.MessageList(HHMMSS,"|Start"); // 예스스팟 디버깅창에 로그 출력
Main.SetTimer(1, timerInterval*1000); // 1번 타이머를 (5초 * 1000) = 5000ms 간격으로 설정
}
function Main_OnTimer(nEventID)
{
var d = new Date(); // 타이머가 호출될 때마다 현재 시간 다시 계산
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
// nEventID가 1번이고, 현재 시각이 09시00분00초(=90000) 이후라면 종목검색 요청
if (nEventID == 1 && HHMMSS >= 90000)
{
Main.MessageList(HHMMSS,"|종목검색요청"); // 종목검색을 요청한다는 로그 출력
/********* -------------- *********/
Main.ReqPowerSearch("super search"); // "super search"라는 사용자 검색식으로 종목검색 요청
/********* -------------- *********/
}
// nEventID가 2번이면, 종목객체 재요청 로직 수행
if (nEventID == 2)
{
Main.KillTimer(2); // 2번 타이머 중지
Main.MessageList(HHMMSS,"|종목객체재요청"); // 종목객체 재요청 로그
Main.ReqMarketData(MKList[req]); // req 인덱스에 해당하는 종목코드를 재요청
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
var d = new Date(); // 현재 시간 객체 생성
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
Main.KillTimer(1); // 1번 타이머 중지(연속 검색 방지 등을 위해)
Main.MessageList(HHMMSS,"|종목검색완료|검색된종목수:", nCount); // 검색 종목 수 로그
MKList = []; // MKList 초기화
// 검색 결과가 1개 이상이면
if (nCount > 0)
{
// 아직 매수된 종목객체(MK)가 전혀 없는 경우
if (MK.length == 0)
{
// 결과 전체를 MKList에 저장
MKList = aItemList;
}
else
{
// 이미 매수된 종목이 있을 경우에는 중복되지 않는 종목만 MKList에 추가
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MK.length; b++)
{
// 이미 MK에 있는 종목이면 Add를 false로
if (aItemList[a] == MK[b].code)
{
Add = false;
}
}
// 중복되지 않을 때만 MKList에 push
if (Add == true)
{
MKList.push(aItemList[a]);
}
}
}
Main.MessageList(HHMMSS,"|요청할 종목객체수:",MKList.length); // 실제로 요청할 종목 수 로그
}
// 새로 요청할 종목이 없다면(=MKList.length==0), 1번 타이머 재설정(다음 검색 대기)
if (MKList.length == 0)
{
Main.SetTimer(1, timerInterval*1000);
}
else
{
// 새로 요청할 종목이 있으면 req=0부터 시작해서 MarketData 요청
req = 0;
Main.MessageList(HHMMSS,"|종목객체요청",MKList[req]); // 첫 번째 종목 요청 로그
Main.ReqMarketData(MKList[req]); // 실제 종목객체 생성 요청
}
}
function Main_OnRcvMarketData(MarketData)
{
var d = new Date(); // 현재 시간 객체
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
// 수신된 MarketData 객체의 code가 현재 요청중인 MKList[req]와 같다면
if (MarketData.code == MKList[req])
{
Main.MessageList(HHMMSS,"|종목객체생성",MarketData.code); // 종목객체 생성 로그
// 매수주문 - 예시로 매수금/현재 호가를 사용하여 수량 계산
// (매수금/MarketData.current) 혹은 Ask(3) 등으로 계산할 수 있음
// 현재가 기준으로 매수금을 나누어 주문
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.current),0,1);
// 매도3호가를 기준으로 매수금을 나누어 주문、 종목당 100만원 진입
// Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(3)), MarketData.Ask(3), 0);
// 매도3호가를 기준으로 1주씩 주문
Account1.OrderBuy(MarketData.code, 1, MarketData.Ask(3), 0);
Main.MessageList(HHMMSS,"|매수주문",MarketData.code,MarketData.Ask(3)); // 매수 주문 로그
// 해당 종목의 종목객체를 MK 배열에 추가
MK.push(MarketData);
// 다음 종목 요청 인덱스를 1 증가
req = req + 1;
// 아직 요청할 종목이 남아 있다면
if (req < MKList.length)
{
Main.MessageList(HHMMSS,"|종목객체요청",MKList[req]); // 다음 종목 요청 로그
var S = Main.ReqMarketData(MKList[req]); // 다음 종목 요청
// 15초에 60번 이상 요청하면 시간제한(-1) 받을 수 있음
if (S == -1)
{
// 제한에 걸리면 2번 타이머를 15초 후로 설정하여 재시도
Main.MessageList(HHMMSS,"|종목객체생성 15초제한");
Main.SetTimer(2, 15000);
}
}
else
{
// 모든 종목객체를 요청 끝냈을 때
Main.MessageList(HHMMSS,"|종목객체생성끝");
// 다시 1번 타이머(검색)를 5초 간격으로 재시작
Main.SetTimer(1, timerInterval*1000);
}
}
}
JavaScript
복사
예스스팟 저장경로
C:\예스트레이더\Spot
GPT 종목검색 프롬프트
위 요구사항에 대해 당신(GPT)은 대한민국 예스투자증권의 예스트레이더(YesTrader) 플랫폼용 "예스랭귀지(YesLanguage)"로 코드를 작성해야 합니다
이는 C언어와 트레이드스테이션(EasyLanguage)와 유사하나, 일부 문법과 함수가 다릅니다. 아래 주의사항을 반드시 지켜서 종목검색식으로 만들어주세요. 조건이 만족하면 find(1); 명령만 넣으면 됩니다. 모든 코드는 코드편집기 안에 작성해주세요.
1. 기본 문법
1) 대소문자 구별
- 예스랭귀지는 대소문자를 동일하게 취급합니다.
- Var1, VAR1, var1 등의 표기는 모두 동일하게 인식됩니다.
2) 세미콜론(;)으로 문장 마침
- 모든 문장은 반드시 세미콜론으로 종료합니다.
- 단, if ~ then / else if / else 등 제어문 바로 뒤에는 세미콜론을 붙이지 않습니다.
(제어문 안의 실행문 끝에는 반드시 세미콜론)
3) 공백·개행 규칙
- 식별자(예약어, 함수명, 변수명 등) 안에는 공백이나 줄바꿈이 들어갈 수 없습니다.
- 문장·식별자 간 공백, 개행은 자유롭게 가능합니다.
4) 위에서 아래로 순차적으로 실행
- 예스랭귀지는 첫 번째 줄부터 순서대로 코드를 해석하고 실행합니다.
- if문 등에 사용될 변수나 함수는 해당 제어문보다 “위”에 있어야 합니다.
5) 이전 봉(과거 데이터) 참조 - 대괄호 [ ]
- C[1] : 전봉(이전 봉) 종가, C[2] : 전전 봉 종가
- C[0] 또는 C는 현재봉(0번 봉)
6) 예약어와 함수
- 트레이드스테이션/이지랭귀지와 달리, 문법/함수가 일부 다를 수 있습니다.
- 어떤 함수(주문함수, 포지션 함수 등)는 “시스템 편집창”에서만 사용 가능.
- 어떤 함수(Plot, PlotPaintBar 등)는 “지표·검색·강조 편집창”에서만 사용 가능.
- 종목검색 편집창에서는 Find() 함수를 통해 검색 조건을 출력합니다.
7) 주의사항: C 표준 라이브러리(#include <stdio.h> 등), 포인터, 구조체, 매크로, 동적 할당 등
복잡한 C 문법은 금지됩니다. 빌트인 함수도 예스랭귀지 매뉴얼 상에 있는 것만 사용 가능합니다.
8) 충분한 주석
- 초보자가 이해하기 쉽도록 if문, for문, while문, 배열 참조, 변수 사용에 대해 친절한 주석을 달아주세요.
- “이 조건이 참이면 어떤 동작을 하고, 그렇지 않으면 어떻게 된다” 등 서술 형식이면 더 좋습니다.
- 주석은 // 또는 # 또는 /*, */으로만 가능합니다. {------} 구조로 주석을 절대 달지 않습니다.
2. 기본 제공 변수 (OHLC, 거래량, 거래대금 등)
- 예스트레이더에서는 시가(O), 고가(H), 저가(L), 종가(C), 거래량(V), 거래대금(M) 등을
바로 사용할 수 있습니다.
예: O (시가), H (고가), L (저가), C (종가), V (거래량), M (거래대금)
- 과거봉 참조 예:
O[1] : 이전 봉의 시가
V[2] : 전전 봉의 거래량
- 분봉에서 일봉 OHLC를 참조할 때는 DayOpen, DayHigh, DayLow, DayClose 함수를 쓰기도 합니다.
- 이동평균, 스토캐스틱 등 수많은 빌트인 지표 함수도 있습니다(매뉴얼 참고).
3. Input, 변수 선언
1) 외부변수(Input)
- "Input:" 또는 "Inputs:" 키워드로 선언하며, 수식 적용 시 차트 설정창에서 값을 변경할 수 있습니다.
- 예:
Input:
MyPeriod(10),
MyThreshold(1.5);
- 외부변수를 전혀 사용하지 않으면 선언부를 아예 생략합니다.
- 변수명은 내장함수와 겹치지 않도록 3글자 이상으로 만드세요 (crossup, crossdown 등 충돌 주의).
- 사용자함수 편집창에서 외부변수를 선언할 경우, Numeric / Logical / String 등 유형만 지정해야 합니다.
2) 내부변수(Var, Vars)
- "Var:", "Vars:", "Variable:", "Variables:" 등을 통해 선언하며, 수식 내부에서만 사용합니다.
- 예:
Vars: PriceMA(0), Count(0), MyStr("");
- var1~var99, value1~value99, condition1~condition99는 시스템에 기본 선언되어 있으므로
추가 선언 없이 바로 사용 가능합니다.
- 배열변수는 Array: ARR[10](0); 형태로 선언합니다.
- 선언 시, 다른 변수나 함수값을 대입하지 말고 단순 리터럴(0, true/false, "")만으로 초기화하는 것이 안전합니다
(일부 환경에서 컴파일 오류 방지).
3) 선언 후 사용
- 반드시 선언된 변수만 사용해야 하며, 선언보다 아래에서 사용하면 안 됩니다.
- 예: if ~ then 안에서 값 대입 전에 선언부가 먼저 나와야 합니다.
4. if문, for문 등 제어문과 break, continue 사용 자제
1) 기본 구조 (if ~ then, else if, else)
예:
// if문의 조건이 참이면 아래 블록을 실행
if (X > 0) then
{
i = i + 1; // 주석
}
else if (X < -5) then
{
i = i - 1;
}
else
{
// 위 조건 둘 다 아니면 이 부분 실행
i = 0;
}
예:
if (posSum + negSum) > 0 then
rsi_vwap = posSum / (posSum + negSum) * 100 // 오류발생 세미콜론 없음
- if문 작성 후 실행 코드가 1개인 경우에도 꼭 ; 세미콜론을 처리하세요.
- if문 조건식에서
2) for문
예:
// varIndex를 0부터 9까지 1씩 증가시키며 반복
for varIndex = 0 to 9 step 1
{
// 반복 실행 문장
}
- 내부에서 변수를 새로 선언할 수 없으므로, 미리 상단 Vars 블록 등에서 varIndex를 선언하고,
for문 시작 전 varIndex=0; 등으로 초기화합니다.
3) while문
예:
while (조건)
{
// 조건이 참인 동안 계속 반복
// 반드시 탈출 조건을 만들어야 무한루프 방지
}
4) 연산자
- 산술 연산자: `+`, `-`, `*`, `/`, `%`, `^`
- 관계 연산자: `==`, `!=`(또는 `<>`), `>`, `<`, `>=`, `<=`
- 논리 연산자: `and`, `or`, `not(!)`
- 할당 연산자: `=` (값을 할당한다는 의미)
- 비교식 작성 시 `==`와 `=`를 혼동하지 않도록 합니다.
4) break, continue 사용 자제
- 예스랭귀지 환경에서 break, continue가 지원되지 않을 수 있습니다.
- 필요 시 boolean 변수를 활용해 반복 탈출 로직을 구성합니다.
5. 지표식 Plot 및 시각적 출력
1) Plot 함수
- 지표나 검색, 강조 편집창에서 사용할 수 있는 출력 함수입니다. (시스템 창에서는 사용 불가)
- 예:
Plot1(MyValue, "이름");
PlotBaseLine1(0, "기준선");
- 선 굵기, 색상 등은 함수 인자로 지정할 수도 있고, 차트 설정창에서 변경 가능합니다.
- 초보자가 차트에서 쉽게 이해하도록, Plot 함수에도 상세 주석을 넣어 주세요.
2) Text_New / Text_New_Self
- 텍스트 객체를 생성하여 차트(기본영역)나 지표영역에 글자를 표시할 수 있습니다.
- Text_SetColor, Text_SetLocation, Text_SetString 등을 활용해 수정 가능합니다.
- 봉 중앙에 정확히 맞추고 싶다면 수평·수직 스타일을 설정( Text_SetStyle )하세요.
- 가격 단위가 서로 다른 종목(수십만 원 vs. 수천 원)에서 동일한 오프셋을 쓰면 겹치거나
너무 떨어질 수 있습니다. 따라서 PriceScale을 곱해 틱 계산을 하는 방법이 권장됩니다(아래 11번 항목 참조).
6. 매매함수 (MarketPosition, Buy, Sell 등)
1) 주문함수 개요
- 예: Buy("신호명", 신호타입, 가격조건, 수량);
- Sell / ExitLong / ExitShort 등도 유사한 형식.
- 신호타입:
OnClose → 해당 봉 종가로 신호 (봉 완성 시점, 즉 다음 봉 시가 수신 때 결정)
AtMarket → 다음 봉 시가로 신호
AtStop → 지정가격 이상(매수), 이하(매도) 발생 시 신호
AtLimit → 지정가격 이하(매수), 이상(매도) 발생 시 신호
- OnClose, AtMarket 타입은 '신호가격' 자리에 DEF로 쓰는 경우가 많습니다.
2) 예:
// 5-20 골든크로스 시 신규 매수, 데드크로스 시 매수 청산
// (시스템 편집창용 예시)
Input : ShortPer(5), LongPer(20);
Var : shortMa(0), longMa(0);
shortMa = Ma(C, ShortPer);
longMa = Ma(C, LongPer);
if CrossUp(shortMa, longMa) then
{
Buy("골든크로스");
}
if CrossDown(shortMa, longMa) then
{
ExitLong("데드크로스");
}
3) 주문 예약어 (OnClose, AtMarket, AtStop, AtLimit 등)
- 시스템 편집창에서만 유효합니다. 실제 체결가격은 시스템 매매설정이나 슬리피지 등을 통해 달라질 수 있습니다.
4) MarketPosition
- 현재 포지션을 확인할 때 사용 (매수포지션=1, 매도=-1, 무포지션=0)
- 분할 진입(피라미딩) 시 CurrentContracts, CurrentEntries, EntryPrice 같은 포지션 함수도 함께 확인합니다.
7. 코드 전체 친절한 주석
- 주석은 // 또는 # 또는 /*, */으로만 가능합니다. {------} 구조로 주석을 절대 달지 않습니다.
- 모든 제어문(if, for, while)과 변수의 쓰임새를 충분히 주석으로 설명합니다.
- “어떤 상황에서 어떤 변수에 어떤 값이 들어가고, 이를 어떻게 계산해 다음 동작을 수행하는지”
각 단계마다 구체적으로 써주면 초보자가 이해하는 데 큰 도움이 됩니다.
- 조건문( if ~ then ) 뒤에는 세미콜론을 넣지 않도록 하고, 블록은 { }로 감싸 주세요.
- begin end 문법보다 { }를 선호합니다(둘 다 가능은 함).
- 가능한 실행 예시 형태로 제시해 주세요.
- 지표식은 Plot, 검색식은 Find(조건), 시스템은 Buy 등 주문함수를 적절히 배치합니다.
- (예) 찾고자 하는 조건이 종가가 20이평 상향돌파라면, 검색 편집창에서
if CrossUp(C, Ma(C, 20)) then
{
Find(1);
}
8. Text_New, 위치 계산, 기타 시각 함수
- 차트/지표 편집창에서 Text_New(기본영역), Text_New_Self(지표영역) 사용 가능.
- Text_SetStyle로 정렬 위치를 (왼/중앙/오른쪽), (상단/중앙/하단) 설정 가능합니다.
- “고가(H)+ 일정값”으로 오프셋을 주면 종목에 따라 위치가 달라집니다.
PriceScale 함수를 이용한 틱 단위 계산이 안전합니다. 예:
offsetTicks = 5; // 원하는 틱 수
myText = Text_New(sdate, stime, H + offsetTicks * PriceScale, "텍스트");
- 추세선(TL_), 박스(Box_), 타원(Circle_), 그리드(Grid_) 함수들도 있으면
user가 편집 가능(지표·검색 편집창에서) 합니다.
9. 빌트인 함수 사용 우선순위
1) 예스랭귀지 매뉴얼에 존재하는 빌트인 함수를 먼저 확인 후 사용
- 예: CrossUp, CrossDown, Ma, Ema, Plot1, etc.
- 중복 계산을 피하기 위해, 한 번 계산한 결과는 변수에 저장하여 재사용.
2) 매뉴얼에 없는 함수나 C언어 표준 라이브러리는 사용 불가
- 포인터, 구조체, 매크로, 동적 할당 등은 지원되지 않거나 권장되지 않습니다.
- 예: #include <stdio.h> ... → 불가능.
3) 참조차트(data2...)나 multi-data를 사용할 경우, data2(c), data2(Ma(c,5)) 처럼 작성.
- 다만 가능하면 단일 차트(단일 데이터)로 구현해 보길 권장합니다.
- 타종목/타주기 참조 시, 값이 완성봉인지 봉 도중인지 주의해 주세요.
10. 추가 유의사항: 스킵워드, 전략 성과함수, 사용자함수 등
- SkipWord(EL모드)나 #include, #define 등은 일반적으로 지원하지 않습니다(EL모드 예외 제외).
- 전략성과함수(NetProfit, NumLosTrades 등)은 시스템 편집창에서만 사용 가능합니다.
- 사용자함수 편집창에서는 외부변수를 Numeric, Logical, String 등으로만 선언하고
함수명에 최종값을 대입하여 반환해야 합니다. 예:
MyFunc = MyVar; // 마지막에 함수명 = 값
- 예제(지표 편집창):
Input : Per(20);
Var : val(0);
val = Ma(C, Per);
Plot1(val, "이평");
11. GPT가 자주 하는 실수 정리 (계속 추가 가능)
1) 텍스트나 화살표(TrendLine 등) 표시 시 가격 단위 고정해버리는 문제
- 종목마다 호가 단위가 다르므로, PriceScale 또는 PointValue 등을 고려해야 합니다.
- 예: Text_New(..., H + 5*PriceScale, "...");
- 삼성전자(10만 원대)와 2천 원대 종목의 5틱은 전혀 다른 의미이므로
반드시 PriceScale 이용을 권장합니다.
2) if ~ then 뒤에 세미콜론을 잘못 붙이거나, else if / else 블록에서 중괄호 누락
- 예:
if (cond) then; // X
{
...
}
3) 선언 시 다른 변수/함수로 초기화
- 예: Vars: A(Ma(C,5)); // 컴파일 오류 가능
- 0, false, "" 등 리터럴로만 초기화한 뒤, 본문에서 따로 대입해야 함.
4) break, continue, 복잡한 C++식 문법 사용
- 예스랭귀지에서는 지원이 불완전하거나 오류가 납니다.
- boolean 변수로 루프 탈출을 제어하는 식으로 대체하세요.
5) 빌트인 함수, 예약어 충돌
- 변수명을 CrossUp, CrossDown, M, H 등으로 지으면 문제 발생.
- 4글자 이상, 함수와 겹치지 않는 이름으로 지으세요.
6) Plot, PlotPaintBar, Text_New 등 ‘지표/검색 편집창’ 전용 함수를 시스템에서 사용
- 시스템 편집창에서는 Buy, Sell, ExitLong, 포지션함수(NetProfit 등) 사용 가능.
- 지표/검색/강조 편집창은 Plot, PlotPaintBar, Text_New, Find 등이 가능.
- 혼동 주의.
7) 동일 봉에서 여러 신호 동시 발생 시 순서 착오
- 실제론 “매수 → 매도진입 → 포지션청산” 식으로 동시 발동될 수 있으니
의도대로 작동하도록 if문 분기 순서와 우선순위를 명확히 해야 함.
8) 멀티 데이터(분봉+일봉 참조) 사용 시, 봉 완성 시점이 서로 달라
과거 데이터 재계산 때 소급 신호가 발생 → 실시간과 시뮬레이션 차이 발생
- 틱/초/분 차트에서 타 데이터(일봉 등) 참조 시 특히 주의해야 합니다.
9) 주문 수량 계산 시, 수수료·슬리피지 설정이 반영되는지 미확인
- 시스템 설정창에서 비용/수수료를 Percent, Point 중 어떻게 입력했는지에 따라 결과 달라집니다.
10) - 주석은 // 또는 # 또는 /*, */으로만 가능합니다. {------} 구조로 주석을 절대 달지 않습니다.
11) 예스랭귀지에 PreDayHigh, PreDayLow, prevDate, ValueWhen 빌트인 함수는 없습니다.
- PreDayHigh는 DayHigh 함수로 이용
- PreDayLow는 DayLow 함수로 이용
- prevDate 등 날짜 함수는 bDate 영업일(Business date), sDate 봉의 시작날짜, Date 봉의 끝날짜 함수로 이용
- ValueWhen는 예스랭귀지에 없으며 if문 등으로 구현해야 합니다. 사용법은 ValueWhen(nth, condition, data)입니다. 특정한 조건이 n번째 만족된 시점의 data값이라는 뜻입니다.
- sum 누적합은 accumn 함수로 이용
12) 이지랭귀지에만 존재하는 함수를 예스랭귀지에도 있을 것이라 확신하지 마세요. 항상 매뉴얼을 여러번 반복해서 확인하세요. 예스랭귀지 매뉴얼 빌트인 함수에서 제공하지 않는 데이터나 기능은 없다고 가정해야 합니다. 예를 들어, 현재 함수중에 시가총액을 불러오는 함수가 없으며, 있다고 가정하고 작성하지 않습니다.
13) 예스랭귀지 매뉴얼에서 제공하는 함수가 아니면 컴파일 오류입니다. 제공 함수가 맞는지 여러번 면밀히 검토합니다.
14) {-------------------------------} 이러한 형태로 주석이나 설명을 절대 달지 마세요. 컴파일 오류 발생합니다.
12. 예스랭귀지 매뉴얼: 빌트인 함수 검토, 반복 확인 바랍니다. 매우 중요.
기 호 이 름 예문
+ 더하기 Entryprice+0.5 (진입가 더하기 0.5)
- 빼기 Entryprice-0.5 (진입가 빼기 0.5)
* 곱하기 Entryprice+PriceScale*2
/ 나누기 Entryprice+(H+L)/2
% 나머지 10/3 1
^ 거듭제곱 10^2 100
기 호 이 름 예문
== 같다 Close == Open (종가와 시가가 같다)
!= 같지 않다 Close != Open (종가와 시가가 같지 않다)
! 아니다 !(C > O) (양봉이 아니다)
<> 같지 않다 Close <> Open (종가와 시가가 같지 않다)
< 작다 V < V[1] (거래량이 전봉보다 작다)
> 크다 OI > Oi[1] (미결제약정이 전봉보다 크다)
<= 작거나 같다 bids <= Asks (매수잔량이 매도잔량 이하이다)
>= 크거나 같다 bids >= Asks (매수잔량이 매도잔량 이상이다)
기 호 이 름 예문
And 둘 다 참이면 true Condition1 and Condition2
Or 둘 중 하나가 참이면 True Condition1 or Condition2
기 호 이 름 예문
= 할당. Value1 = H-L;
기 호 이 름 사용
: 콜론 선언의 시작
; 세미콜론 문장의 마침표
, 콤마(쉼표) 함수 매개변수 구분
선언 변수 구분
( ) 소괄호 함수에서 매개변수 지정
연산자 간의 우선순위 지정
변수 선언 시 기초값 지정
{ } 중괄호 실행문 그룹지정
[ ] 대괄호 이전값 참조
배열의 크기지정
데이터 약어 설명
Open O 시가
Close C 종가
High H 고가
Low L 저가
Money M 거래대금
Volume V 거래량
UpVol 상승형 거래량
DownVol 하락형 거래량
Upticks 상승형 체결건수
DownTicks 하락형 체결건수
Ticks 체결건수
OpenInterest OI 미결제약정
Bids 매수잔량
Asks 매도잔량
bDate 영업일(Business date)
sDate 봉의 시작날짜
Date 봉의 끝날짜
sTime 봉의 시작시간
Time 봉의 끝시간
BasePrice BP 기준가
Index, Barindex, Globalbarindex 봉 번호
데이터 약어 설명
D 끝날짜
OpenInt, I 미결제약정
데이터 정보 설명
BarInterval 적용된 차트의 시간간격을 리턴
(5분봉이면 5)
BigPointValue 1계약의 1포인트를 금액으로 환산.
(옵션 100,000 선물 500,000 현물은 1)
CodeCategory 종목 구분값
1 KOSPI
2 KOSDAQ
3 제3시장
4 선물
5 지수
6 옵션
7 종목옵션
8 해외종목
9 참조데이타
CodeCategoryEx 상세 종목 구분값
11 KOSPI 종목
12 KOSDAQ 종목
13 ETF_KOSPI
14 ETF_KOSDAQ
15 ELW
21 KP200 선물
22 KOSDAQ 선물
23 주식 선물
24 미니 KP200 선물
25 KP200 선물 스프레드
26 주식선물 스프레드
27 미니 KP200 선물 스프레드
31 KP200 콜옵션
32 KP200 풋옵션
33 KOSDAQ 콜옵션
34 KOSDAQ 풋옵션
35 주식옵션
36 미니 KP200 콜옵션
37 미니 KP200 풋옵션
38 WEEKLY 콜옵션
39 WEEKLY 풋옵션
41 변동성지수 선물
42 섹터지수 선물
43 변동성지수 선물 스프레드
44 섹터지수 선물 스프레드
45 유로스톡스50지수 선물
46 유로스톡스50지수 선물 스프레드
47 KQ150 선물
48 KQ150 선물 스프레드
49 KRX300지수 선물
50 KRX300지수 선물 스프레드
51 코스피지수
52 코스닥지수
53 KQ150 콜옵션
54 KQ150 풋옵션
61 해외 데이터
71 거래 가능 참조데이타
72 거래 불가 참조데이타
73 사용자가 추가한 데이터
CurrentBar 수식계산에 필요한 필수 봉갯수 이후의 봉수를 반환
DataCompress 차트에 적용된 데이터의 주기를 반환
(틱봉 :0, 초봉:1, 분봉:2, 일봉:3, 주봉:4, 월봉:5,
삼선전환도:6, P&F:7)
DeliveryMonth 만기월(추후 제공을 위한 예약어)
DeliveryYear 만기년(추후 제공을 위한 예약어)
ExpirationDate 만료일(추후 제공을 위한 예약어)
Interval 적용된 차트의 시간간격을 리턴, Barinterval과 같음
(5분봉이면 5)
PointValue PriceScale을 금액으로 환산
ex) 선물 : 25,000, 옵션 : 3미만 1,000, 3이상 5,000
PriceScale 해당 종목의 호가 단위, 틱
ex) 선물 : 0.05, 옵션 : 3미만 0.01, 3이상 0.05
SymbolCode 종목코드를 리턴, 반환값 문자열
var : Code("");
Code = SymbolCode;
MessageLog("종목코드 %s 종가 %.2f ",Code,Close);
SymbolName 종목명 리턴
var : Name("");
Name = SymbolName;
MessageLog("종목명 %s 종가 %.2f ",Name,Close);
UserID 프로그램 접속 아이디를 리턴합니다.
수식에서 UserID로 조건을 주면 해당 아이디로 접속했을때만수식이 동작하게 제어할 수 있습니다.
Input : Period(14), LPercent(30), SPercent(70);
Var : value(0);
value = RSI(Period);
if UserID == "ABCDE" Then{
If CrossUP(value, LPercent) Then
{
Buy("매수");
}
If CrossDown(value, SPercent) Then
{
Sell("매도");
}
}
변수구분 할당되는 결과값 초기 설정값
수치형 내부변수 수치(numeric) (0)
논리형 내부변수 True(참) 또는 false(거짓) (false)
문자형 내부변수 문자열 (" ")
변수명 유형 초기 설정값
var1~var99 수치형 0
value1~value99 수치형 0
condition1~condition99 논리형 False
주문함수 설명
Buy 신규매수 진입
(매도 포지션이 있을 경우 모두 청산 후 매수포지션으로 진입)
Sell 신규매도 진입
(매수 포지션이 있을 경우 모두 청산 후 매도포지션으로 진입)
ExitLong 매수포지션 청산
ExitShort 매도포지션 청산
함수 구문
Buy Buy("신호명", 신호타입, 가격조건, 수량)
Sell Sell("신호명", 신호타입, 가격조건, 수량)
Exitlong ExitLong("신호명", 신호타입, 가격조건, "진입명", 수량, 수량청산옵션)
Exitshort ExitShort("신호명", 신호타입, 가격조건, "신호명", 수량, 수량청산옵션)
OnClose 주문함수 신호타입 예약어 – 종가
AtMarket 주문함수 신호타입 예약어 – 다음봉 시가
AtLimit 주문함수 신호타입 예약어 – 지정가
AtStop 주문함수 신호타입 예약어 – 역지정가
PercentStop 강제청산 예약어 – Percent 설정
PointStop 강제청산 예약어 – Point 설정
Avg, Avglist 리스트에 있는 모든 항목의 평균값
Max, Maxlist 리스트의 항목 중 최대값
Maxlist2 리스트의 항목 중 두번째 큰 값
NthMaxList 리스트의 항목 중 N번째 큰 값
Min, MinList 리스트의 항목 중 최소값
MinList2 리스트의 항목 중 두번째 작은 값
NthMinList 리스트의 항목 중 N번째 작은 값
SumList 리스트에 있는 모든 항목의 합
Abs, AbsValue 입력된 값의 절대값
Mod 나눈 나머지
Round 지정된 자릿수 만큼 반올림한 값
Ceiling 소수 부분을 올림한 정수 값
Floor 소수 부분을 내림한 정수 값
FracPortion 소수아래의 값
Int, IntPortion 정수값
Neg 음의 값으로 반환
Pos 양의 값으로 반환
Pie 원주율
Pow 누승
Power 누승
SqRt 제곱근
Square 제곱
SquareRoot 제곱근
Random 0과 num 사이의 난수 값
Exp, ExpValue 승수로 거듭 제곱하는 자연로그의 밑인 e를 반환하는 함수
Log 자연로그
Log10 상용로그
Cos, Cosine 코사인
CosH 하이퍼블릭코사인
Acos 아크코사인
Sin, Sine 사인
SinH 하이퍼블릭 사인
Asin 아크사인
Tan, Tangent 탄젠트
TanH 하이퍼블릭 탄젠트
Atan ,ArcTangent 아크탄젠트
Cotangent 코탄젠트
DayClose(N) N일전 일간의 종가
DayHigh(N) N일전 일간의 고가
DayLow(N) N일전 일간의 저가
DayOpen(N) N일전 일간의 시가
DayOi(N) N일전 일간의 미결제약정
DayVolume(N) N일전 일간의 거래량
CrossUp(Value1,Value2) Value1이 Value2를 상향돌파
CrossDown(Value1,Value2) Value1이 Value2를 하향이탈
Highest(Value, Length) Length 기간동안 Value 중 최고 값
NthHghest(Nth, Value, Length) Length 기간동안 Value 중 Nth번째 큰 값
NthHighestBar(Nth, Value, Length) Length 기간동안 Value 중 Nth번째 큰 봉의 위치
Lowest(Value, Length) Length 기간동안 Value 중 최저 값
NthLowest(Nth, Value, Length) Length 기간동안 Value 중 Nth번째 작은 값
NthLowestBar(Nth, Value, Length) Length 기간동안 Value 중 Nth번째 작은 봉의위치
TimeClose(StartTime,EndTime) 지정된 시간 동안의 종가
TimeCloseEx(StartTime,EndTime) 지정된 시간 동안의 종가(변동)
TimeOpen(StartTime,EndTime) 지정된 시간 동안의 시가
TimeOpenEx(StartTime,EndTime) 지정된 시간 동안의 시가(변동)
TimeHigh(StartTime,EndTime) 지정된 시간 동안의 고가
TimeHighEx(StartTime,EndTime) 지정된 시간 동안의 고가(변동)
TimeLow(StartTime,EndTime) 지정된 시간 동안의 저가
TimeLowEx(StartTime,EndTime) 지정된 시간 동안의 저가(변동)
Ema(Value, Length) 지수이동평균
Ma(Value, Length) 단순이동평균
Iff(조건,참,거짓) 조건을 만족하면 참값을 아니면 거짓값을 리턴
NextBarOpen 다음 봉 시가
NextBarSdate 다음 봉 시작날짜
NextBarStime 다음봉 시작시간
Data1~Data99 타종목 참조함수
DayOfWeek(Date) 주어진 날짜의 요일 반환(월:1,화:2,수:3,목:4,금:5)
MinutesToTime(Mimutes) 주어진 분단위를 시간으로 표시(HHMMSS)
TimeToMinutes(Time) 주어진 시간을 밤12시 이후 경과된 분단위로 표시
DateToJulian(Date) 주어진 날짜를 Julian date 로 변경
JulianToDate(Juliandate) Julian date를 날짜로 변경(YYYYMMDD)
CurrentDate 컴퓨터의 현재 날짜
CurrentTime 컴퓨터의 현재 시간
IsNan(Value) Value 값이 N/A면 True를 리턴
Nan N/A를 할당
LastBarOnChart 차트의 마지막 봉이면 1값 반환
LastCalcMMTime 차트의 마지막 봉의 TimeToMinutes을 반환
InStr("String1","String2") String1문자열에서 String2문자의 위치값을 리턴
LeftStr("String", Num) 좌측에서 Num번째 문자열까지 리턴
RightStr("String", Num) 우측에서 Num번째 문자열까지 리턴
LowerStr("String") 문자열을 소문자로 변환
UpperStr("String") 문자열을 대문자로 변환
MidStr("String",Num1,Num2) 문자열을 중 Num1~Num2번째 사이의 문자 리턴
StrToNum("String") 문자열을 숫자로 변환
NumToStr(Figure,N) 소수점 N자리까지 숫자를 문자로 변환
EL_DateStr(DD,MM,YYYY) YYYYMMDD형식의 문자열로 변환
StrLen 지정한 문자열의 길이를 리턴
MaxBarsBack 수식 계산에 필요한 필수 데이터의 수량
Spaces(Num) Num으로 지정한 수만큼 빈공간을 만든다.
NewLine 새로운 행을 삽입한다.
NoValue 화면 표시 제거
Extremes(Price, Length, HiLo,
oExtremeVal, oExtremePosRaw) 극단값과 위치
HarmonicMean(Price, Length) 조화평균
Mode(Price, Length, hiLo) 최빈값
NthExtremes(Price, Length, N, HiLo,
oExtremeVal, oExtremePosRaw) Nth번째 극단값과 위치
SummationRec(Price, Length) 역수합
SummationSqr(Price, Length) 제곱합
TrimMean(Price, Length, TrimPct) 극단치 제외 평균
Variance(Price, Length, DataType) 모집단의 분산 혹은 표본집단의 분산
Covar(IndepArray,DepArray,Length) 공분산
AvgDeviation(Price,Length) 편차평균
DevSqrd(Price,Length) 편차 제곱합
StdError(Price, Length) 표준오차
StdError2(Indep, Dep, ArraySz) 두 값의 표준오차
CoefficientR(IndDep,Dep,Length) 피어슨 상관계수R
RSquare(Indep, Dep, Length) 피어슨 상관계수R의 제곱
Skew(Price, Length) 왜도
LinReg(Price, Length, TgtPos, oLRSlope,
oLRAngle,oLRIntercept, oLRValueRaw) 선형회귀선의 기울기, 각도, 절편, 예측값
LinReg2(Indep,Dep, Length, TgtPos,
oLRSlope, oLRAngle,
oLRIntercept, oLRValueRaw) 두 값의 선형회귀선의 기울기, 각도, 절편, 예측값
LinRegForecast(Price, Length, TgtPos) 선형회귀를 기반으로 주어진 X값에 대한 예측값
LinRegIntercept(Price, Length) 선형회귀선의 절편
LinRegSlope(Price, Length) 선형회귀선의 기울기
NormalCumDensity(Price, Length) 정규누적분포
NormalDensity(Price, Length) 정규분포
Standardize(Price, Length, NumDevs) 표준편차 및 평균에 따라 표준화된 값을 반환
InsertArray(Array,location, 삽입할값) 배열에 값 삽입.
AverageArray(PriceArray,Size) 배열의 평균
ExtremesArray(PriceArray,Size,HiLo,
oExtremeVal,oExtremePosRaw) 배열의 극단값과 위치
HarmonicMeanArray(PriceArray, Size) 배열의 조화평균
HighestArray(PriceArray, Size) 배열의 최고가
LowestArray(PriceArray, Size) 배열의 최저가
ModeArray(PriceArray, Size, hiLo) 배열의 최빈값
NthExtremesArray(PriceArray, Size, N, HiLo,
oExtremeVal, oExtremePosRaw) 배열의 Nth번째 극단값과 위치
NthHighestArray(PriceArray, Size, N,oValue,oIndex) 배열의 Nth번째 최고값과 위치
NthLowestArray(PriceArray, Size, N,oValue,oIndex) 배열의 Nth번째 최저값과 위치
SummationArray(PriceArray, Size) 배열의 합계
SummationRecArray(PriceArray, Size) 배열의 역수값의 합계
SummationSqrArray(PriceArray, Size) 배열의 제곱합
TrimMeanArray(PriceArray, Size, TrimPct) 배열의 극단치 제외 평균
VarianceArray(PriceArray, Size, DataType) 배열의 모집단 분산 혹은 표본집단 분산
CovarArray(IndepArray,DepArray,Size) 두 배열의 공분산
AvgDeviationArray(PriceArray,Size) 배열의 편차 평균
DevSqrdArray(PriceArray,Size) 배열의 편차 제곱합
StdErrorArray(PriceArray, Size) 배열의 표준오차
StdErrorArray2(IndepArray, DepArray, ArraySz) 두 배열의 표준오차
StandardDevArray(PriceArray, Size, DataType) 배열의 모집단 표준편차 혹은 표본집단 표준편차 값을 반환
CoefficientRArray(IndDepArray,DepArray,Size) 두 배열의 피어슨 상관계수R
RSquareArray(IndepArray, DepArray, Size) 두 배열의 피어슨 상관계수R의 제곱
CorrelationArray(IndDepArray,DepArray,Size) 두 배열의 상관계수
SortArray(PriceArray, Size, HiLo) 1차원배열 정렬
MedianArray(PriceArray, Size) 배열을 중간값 반환
QuartileArray(QRank, PriceArray, Size) 배열의 사분위수 반환
NumericRankArray(PriceToRank, PriceArray, Size,
SortOrder) 배열을 정렬 후 지정한값의 순위를 반환
PercentRankArray(PriceToRank, PriceArray, Size) 배열에서 지정한 값의 백분율
PercentileArray(PctRank, PriceArray, Size) 배열의 지정한 순위율에 해당하는 값
KurtosisArray(PriceArray, Size) 배열의 첨도
SkewArray(PriceArray, Size) 배열의 왜도
LinRegArray(PriceArray, Size, TgtPos,
oLRSlope, oLRAngle, oLRIntercept, oLRValueRaw) 배열의 선형회귀선의 기울기, 각도, 절편, 예측값
LinRegArray2(IndepArray,DepArray Size, TgtPos,
oLRSlope, oLRAngle, oLRIntercept, oLRValueRaw) 두 배열의 선형회귀선의 기울기, 각도, 절편, 예측값
LinRegForecastArray(PriceArray, Size, TgtPos) 배열의 선형회귀를 기반으로 주어진 X값에 대한 예측값
LinRegInterceptArray(PriceArray, Size) 배열의 선형회귀선의 절편
LinRegSlopeArray(PriceArray, Size) 배열의 선형회귀선의 기울기
NormalCumDensityArray(PriceArray, Size) 배열의 정규누적분포
NormalDensityArray(PriceArray, Size) 배열의 정규분포
StandardizeArray(PriceArray, Size, NumDevs) 배열의 표준편차 및 평균에 따라 표준화된 값을 반환
Sort2DArray(Array,RowSize,ColSize,HiLo) 2차원배열 정렬, 지정한 범위를 0행을 기준으로 내림차순/오름차순으로 정렬.
SortArray2D(Array,RowSize,ColSize,HiLo,RowNo,ColNo) 2차원배열 정렬, 시작행열을 기준으로 범위를 지정하고 시작행을 기준으로 내림차순/오름차순으로 정렬
마) 출력함수
Plot1~Plot99 지표 출력
FixPlotShift Plot 좌우이동
PlotBaseLine1 ~ PlotBaseLine99 기준선 출력
PlotPaintBar 강조 출력
Print 지정된 데이터를 외부로 추출
Messagelog 지정된 데이터를 디버깅창에 표시
ClearDebug 디버깅창의 내용을 모두 삭제
PlaySound 소리 출력
Alert 지정한 내용을 경보창으로 표시
AlertEnabled 경보설정의 상태
SetAlert 경보 설정
NoPlot 결과 표시 제거
RGB RGB값을 조합하여 색상 지정
바) 추세선출력함수
TL_New 새로운 추세선을 기본차트 영역에 생성
TL_New_Self 새로운 추세선을 지표가 적용된 영역에 생성
TL_Delete 지정한 추세선 개체를 삭제
TL_SetBegin 지정한 추세선 개체의 시작점을 새로 설정
TL_SetEnd 지정한 추세선 개체의 끝점을 새로 설정
TL_SetColor 지정한 추세선 개체의 색상을 설정
TL_SetSize 지정한 추세선 개체의 굵기를 설정
TL_SetStyle 지정한 추세선 개체의 선의 형태를 설정
TL_SetExtLeft 지정한 추세선 개체의 왼쪽 확장을 설정
TL_SetExtRight 지정한 추세선 개체의 오른쪽 확장을 설정
TL_SetDrawMode 지정한 추세선 개체의 반전색 표시를 설정
TL_GetBeginDate 지정한 추세선 개체의 시작점의 날짜를 리턴
TL_GetBeginTime 지정한 추세선 개체의 시작점의 시간을 리턴
TL_GetBeginVal 지정한 추세선 개체의 시작점(Y축)의 값을 리턴
TL_GetEndDate 지정한 추세선 개체의 끝점의 날짜를 리턴
TL_GetEndTime 지정한 추세선 개체의 끝의 시간을 리턴
TL_GetEndVal 지정한 추세선 개체의 끝점의 값(Y축)을 리턴
TL_GetValue 지정한 추세선 개체의 특정일 특정시간의 값을 리턴
TL_GetExtLeft 지정한 추세선 개체의 왼쪽 확장 여부를 리턴
TL_GetExtRight 지정한 추세선 개체의 오른쪽 확장 여부를 리턴
TL_GetColor 지정한 추세선 개체에 설정 된 색상값을 리턴
TL_GetSize 지정한 추세선 개체에 설정된 굵기를 리턴
TL_GetStyle 지정한 추세선 개체에 설정된 선의 형태를 리턴
TL_GetDrawMode 지정한 추세선 개체에 반전색 설정을 리턴
사) 텍스트출력함수
Text_New 기본차트 영역에 새로운 텍스트 개체를 생성
Text_New_Self 지표 영역에 새로운 텍스트 개체를 생성
Text_Delete 지정한 텍스트 개체를 삭제
Text_SetColor 지정한 텍스트 개체의 색상을 설정
Text_SetLocation 지정한 텍스트 개체의 위치를 변경
Text_SetString 지정한 텍스트 개체의 출력문자열을 새로운 문자열로 설정
Text_SetStyle 지정한 텍스트 개체의 수평 및 수직 정렬 위치를 설정
Text_SetBold 지정한 텍스트 개체를 굵게 설정.
Text_SetFont 지정한 텍스트 개체의 폰트를 설정.
Text_SetSize 지정한 텍스트 개체의 크기를 설정.
Text_GetColor 지정한 텍스트 개체의 색상값을 리턴
Text_GetDate 지정한 텍스트 개체의 출력 봉의 날짜를 리턴
Text_GetTime 지정한 텍스트 개체의 출력 봉의 시간을 리턴
Text_GetValue 지정한 텍스트 개체의 출력위치값(Y축)을 리턴
Text_GetHStyle 지정한 텍스트 개체의 수평 정렬 위치를 리턴
Text_GetVStyle 지정한 텍스트 개체의 수직 정렬 위치를 리턴
Text_GetString 지정한 텍스트 개체의 출력문자열을 리턴
아) 박스출력함수
Box_New 기본차트 영역에 새로운 박스 개체를 생성
Box_New_Self 지표 영역에 새로운 박스 개체를 생성
Box_Delete 지정한 박스 개체를 삭제
Box_SetColor 지정한 박스 개체의 색상을 설정
Box_SetStyle 지정한 박스 개체의 선형태 설정
Box_SetSize 지정한 박스 개체의 선굵기 설정
Box_SetFill 지정한 박스 개체의 내부채움 설정
Box_SetExtFill 지정한 박스 개체의 내부채움을 차트전체영역으로 확장을 설정
Box_SetBegin 지정한 박스 개체의 시작점을 설정
Box_SetEnd 지정한 박스 개체의 끝점을 설정
Box_GetColor 지정한 박스 개체의 색상을 리턴
Box_GetStyle 지정한 박스 개체의 선형태를 리턴
Box_GetSize 지정한 박스 개체의 선굵기를 리턴
Box_GetFill 지정한 박스 개체의 내부채움을 리턴
Box_GetExtFill 지정한 박스 개체의 내부채움의 확장여부를 리턴
Box_GetBeginDate 지정한 박스 개체의 시작점 날짜를 리턴
Box_GetBeginTime 지정한 박스 개체의 시작점 시간을 리턴
Box_GetBeginVal 지정한 박스 개체의 시작점 가격을 리턴
Box_GetEndDate 지정한 박스 개체의 끝점 날짜를 리턴
Box_GetEndTime 지정한 박스 개체의 끝점 시간을 리턴
Box_GetEndVal 지정한 박스 개체의 끝점 가격을 리턴
자) 타원출력함수
Circle_New 기본차트 영역에 새로운 타원 개체를 생성
Circle_New_Self 지표 영역에 새로운 타원 개체를 생성
Circle_Delete 지정한 타원 개체를 삭제
Circle_SetColor 지정한 타원 개체의 색상을 설정
Circle_SetStyle 지정한 타원 개체의 선형태 설정
Circle_SetSize 지정한 타원 개체의 선굵기 설정
Circle_SetFill 지정한 타원 개체의 내부채움 설정
Circle_SetBegin 지정한 타원 개체의 시작점을 설정
Circle_SetEnd 지정한 타원 개체의 끝점을 설정
Circle_GetColor 지정한 타원 개체의 색상을 리턴
Circle_GetStyle 지정한 타원 개체의 선형태를 리턴
Circle_GetSize 지정한 타원 개체의 선굵기를 리턴
Circle_GetFill 지정한 타원 개체의 내부채움을 리턴
Circle_GetBeginDate 지정한 타원 개체의 시작점 날짜를 리턴
Circle_GetBeginTime 지정한 타원 개체의 시작점 시간을 리턴
Circle_GetBeginVal 지정한 타원 개체의 시작점 가격을 리턴
Circle_GetEndDate 지정한 타원 개체의 끝점 날짜를 리턴
Circle_GetEndTime 지정한 타원 개체의 끝점 시간을 리턴
Circle_GetEndVal 지정한 타원 개체의 끝점 가격을 리턴
차) 그리드출력함수
Grid_New 새로운 그리드(표) 생성
Grid_SetBackColor 그리드(표) 배경색 설정
Grid_SetBorderColor 그리드(표) 셀경계선 색상 설정
Grid_SetBorderWidth 그리드(표) 셀경계선 두께 설정
Grid_SetFrameColor 그리드(표) 외곽선 색상 설정
Grid_SetFrameWidth 그리드(표) 외곽선 두께 설정
Grid_SetPosition 그리드(표) 위치 설정
Grid_SetTextBold 그리드(표) 텍스트 굵게 설정
Grid_SetTextSize 그리드(표) 텍스트 크기 설정
Grid_SetTransparency 그리드(표) 투명도 설정
Grid_Cell 지정한 셀의 옵션들 일괄 설정
Grid_CellSetBackColor 지정한 셀의 배경색 설정
Grid_CellSetHeight 지정한 셀의 높이 설정
Grid_CellSetWidth 지정한 셀의 넓이 설정
Grid_CellSetText 지정한 셀의 텍스트 설정
Grid_CellSetTextBold 지정한 셀의 텍스트 굵게 설정
Grid_CellSetTextColor 지정한 셀의 텍스트 색상 설정
Grid_CellSetTextSize 지정한 셀의 텍스트 크기 설정
Grid_CellSetTextHAlign 지정한 셀의 텍스트 수평정렬 설정
Grid_CellSetTextVAlign 지정한 셀의 텍스트 수직정렬 설정
Grid_Clear 지정한 셀영역 삭제
Grid_MergeCells 지정한 셀영역 병합
Grid_Delete 지정한 그리드(표) 삭제
카) 잔고함수
GetAccount 계좌목록의 계좌 중 지정한 순번의 계좌번호를 리턴
GetAccountStatus 가원장 구축상태를 리턴(구축 :1, 미구축 : 0)
GetAccountType 계좌종류,(1:위탁, 2:저축, 3:선/옵션)
GetNumAccounts 보유계좌의 총갯수
GetNumPositions 지정한 계좌의 보유 총 종목수
GetOpenOrderInitialMargin 지정한 계좌의 위탁증거금
GetPositionSymbol 계좌의 종목들 중에서 지정한 순번의 종목코드(단축코드)를 리턴
GetPositionAveragePrice 지정한 계좌의 지정한 종목의 평균가
GetPositionMarketValue 지정한 계좌의 지정한 종목의 현재가
GetPositionOpenPL 지정한 계좌의 지정한 종목의 평가손익
GetPositionQuantity 지정한 계좌의 지정한 종목의 보유수량
GetUnclearedDeposits 지정한 계좌의 예수금
(선/옵인 경우 예탁총액, 위탁/저축인 경우 예수금)
타) 포지션 함수
AvgEntryPrice 평균 진입가격
BarsSinceEntry 포지션 진입 이후 경과된 봉수
BarsSinceExit 포지션 청산 이후 경과된 봉수
CommissionMethod 수수료 설정 상태
CurrentContracts 포지션의 청산되지 않은 진입 계약수
CurrentEntries 포지션의 청산되지 않은 진입 횟수
EntryCommission 진입 수수료
EntryDate 진입 날짜
EntryName 진입명을 문자열로 반환
EntryPrice 진입 가격
EntrySlippage 진입 슬리피지
EntryTime 진입 시간
ExitCommission 청산 수수료
ExitDate 청산 날짜
ExitName 청산명을 문자열로 반환
ExitPrice 청산 가격
ExitSlippage 청산 슬리피지
ExitTime 청산 시간
IsEntryName 지정된 문자열이 포지션의 진입명과 같은지 판단
IsExitName 지정된 문자열이 포지션의 청산명과 같은지 판단
MarketPosition 포지션 상태
MaxContracts 포지션의 최대보유 계약수
MaxEntries 포지션의 최대 진입수
MaxPositionLoss 포지션의 최대 손실액
MaxPositionProfit 포지션의 최대 수익액
OpenPositionProfit 미청산 포지션의 손익액
PositionProfit 포지션의 손익액
SlippageMethod 슬리피지 설정상태
LatestEntryName 가장 최근 진입명
LatestEntryPrice 가장 최근 진입의 가격
LatestExitName 가장 최근 청산명
LatestExitPrice 가장 최근 청산의 가격
파) 전략 성과 함수
AvgBarsLosTrade 종결된 거래 중 손실거래의 평균 봉 개수
AvgBarsWinTrade 종결된 거래 중 수익거래의 평균 봉 개수
GrossLoss 종결된 거래 중 손실거래의 손실 총합
GrossProfit 종결된 거래 중 수익거애의 수익 총합
LargestLosTrade 종결된 손실거래 중 최대 손실금액
LargestWinTrade 종결된 손실거래 중 최대 수익금액
MaxConsecLosers 종결된 거래 중 최대 연속 손실거래 횟수
MaxConsecWinners 종결된 거래 중 최대 연속 수익거래 횟수
MaxContractsHeld 포지션 중에서 최대 보유한 계약수
MaxIDDrawDown 최대 자본 인하분
NetProfit 종결된 모든 거래의 손익금액
NumLosTrades 종결된 거래 중 손실거래의 횟수
NumWinTrades 종결된 거래 중 수익거래의 횟수
PercentProfit 승률
TotalBarsLosTrades 종결된 거래 중 손실거래의 총 봉수
TotalBarsWinTrades 종결된 거래 중 수익거래의 총 봉수
TotalTrades 종결된 총 거래 횟수
Accum(Value) Value값을 누적
AccumN(Value, Length) Value값을 Length 기간동안 누적
Correlation(A,B,Period) 상관관계, Period기간 동안 A와 B의 상관관계
CloseD(N) N일전 일간 종가
HighD(N) N일전 일간 고가
LowD(N) N일전 일간 저가
OpenD(N) N일전 일간 시가
DayIndex 분봉에서 당일 봉의 번호
CountIF(condition,Period) 최근 Period기간동안 Condition이 몇 번
만족했는지 반환
MedianPrice 중간가격((고가+저가)/2)
MRO(조건,Period,nth) Period 기간 동안 발생한 조건들 중에
현재봉으로부터 nth번째 가까운 조건이
몇 봉 전에 발생했는지를 반환
Range 캔들 길이(고가-저가)
STD 표준편차
SwingHigh(Nth,기준값,좌측,우측,기간) Period 기간 동안 발생한 swinghigh들 중 현재로부터 Nth번째로 가까운 Swinghigh 값
SwingHighBar(Nth,기준값,좌측,우측,기간) Period 기간 동안 발생한 swinghigh들 중 현재로부터 Nth번째로 가까운 Swinghigh 값이
몇 봉 전에 발생했는지를 반환
SwingLow(Nth,기준값,좌측,우측,기간) Period 기간 동안 발생한 SwingLow 들 중 현재로부터 Nth번째로 가까운 SwingLow 값
SwingLowBar(Nth,기준값,좌측,우측,기간) Period 기간 동안 발생한 SwingLow 들 중 현재로부터 Nth번째로 가까운 SwingLow 값이
몇 봉 전에 발생했는지를 반환
TrueHigh 진(眞)고가
TrueLow 진(眞)저가
TrueRange 잔(眞)가격범위
WC 가중종가
지표함수 종류
AccDist Accumulation_Distribution
ADX Average Directional Movement Index
ATR Average True Range
Average 단순이동평균
AverageFC 단순이동평균
BollBandDown 볼린져밴드 하단
BollBandUp 볼린져밴드 상단
BW Binary Wave
CCI CCI(Commodity Channel Index)
CMO CMO(Chandre Momentum Oscillator)
CO CO(Chaikin’s Oscillator)
CSar 파라볼릭(종가)
Sar 파라볼릭
CV CV(Chaikin’s Volatility)
Detrend Detrend
Disparity 이격도(Disparity)
DiMinus DI-(Directional Moving Average Index Minus)
Diplus DI+(Directional Moving Average Index Plus)
DMI Directional Movement Index
EnvelopeDown Envelope Band 하한
EnvelopeUp Envelope Band 상한
EOM Ease Of Momentum
KeltnerChannel Keltner Channel
LRL Linear Regression Line(선형회귀선)
LRS Linear Regression Slope(선형회귀곡선)
MACD MACD(Moving Average Convergence & Divergence)
MACD_OSC Moving Average Convergence & Divergence Oscillator
MassIndex Mass Index
MFI Money Flow Index
Momentum 모멘템, N일전 종가대비 현재가 비율
NVI Negative Volume Index
OBV On Balance Volume
OSCP Price Oscillator
OSCV Volume Oscillator
PercentR %R
PROC Price Moving Average Oscillator
PVI Positive Volume Index
PVT Volume Trend
RSI Relative Strength Index
Simrido 심리도
FastK Stochastics Fast K(기본적 K)
FastD Stochastics Fast D
SlowK Stochastics Slow K (= Fast D)
StochasticsK Stochastics %K (= Slow K, = Fast D_
StochasticsD Stochastics Slow D
SMI Stochastics Momentum Index
SONAR Sonar Momentum
TRIX TRIX 지표함수
TSI True Strength Index
TXAverage 3중 지수이동평균
UltimateOsc Ultimate Oscillator
VHF Vertical Horizontal Filter
VR Volume Ratio
VROC Volume Ratio of Change
WILLA Williams’ Accumulation/Distribution
WILLR Williams’ %R
WMA 가중이동평균
JavaScript
복사