ZuluScript 만들기 가이드
에 최종 갱신됨
소개
ZuluTrade는 새로운 새대의 거래 스크립트를 만들었습니다. 이 거래 스크립트를 사용하는 트레이더는 ZuluTrade 계좌를 통해, 외부 소프트웨어 또는 제3자 등록 없이 자신만의 거래 로봇과 지표를 만들어 설치할 수 있습니다.
ZuluScripts는 외환 시장에서 일반적으로 사용하는 스크립트 언어와 호환되도록 개발된 ZuluTrade 쿼리 언어(zql)을 사용하여 구현됩니다.
ZuluScripts를 사용하기 위해서는 사용자 계좌의 중개 회사 계좌 링크 설정(Broker Account Link Settings)의 설정(Settings) 탭에 표시되어 있는 ZuluTrade+ 옵션(option)을 사용할 수 있도록 되어 있는 ZuluTrade 계좌 한 개만 있으면 됩니다.
ZuluTrade 거래 스크립트 편집기(Trading Scripts Editor) 액세스하기
ZuluTrade 거래 스크립트(Trading Scripts)를 액세스하려면, ZuluTrade에 로그인하여 사용자 계좌를 ZuluTrade + 플랫폼과 연결한 다음에 ZuluTrade 거래 스테이션으로 이동한 후 '거래 스크립트'(Trading Scripts)을 클릭하면 됩니다.
그러면 '거래 클라이언트'(Trading Client)라는 새로운 팝업 창이 열립니다.
스크립트 편집기(Scripts Editor)의 오른쪽 상단 사이드바를 보면 이 스크립트 편집기의 기능 모드를 전환하는 4개의 별도 탭이 있을 것입니다.
첫번째 탭은 모드를 스크립트 만들기로 설정하며, 두번째 탭은 사용자 지정 지표(Custom Indicators)로, 세번째 탭은 헤더(Headers) 설정하며, 마지막으로 네번째 탭은 ZQL 언어의 각 명령에 대한 세부 정보가 있는 ZQL 용어집을 표시합니다.
상위
ZuluScript 만들기
사용자의 ZuluScript를 생성하려면 스크립트 편집기(Script Editor)의 '스크립트 만들기'(Create Script)를 클릭해야 합니다.
새로운 스크립트를 만들고 하면 편집기 창은 서식 파일 zql 코드로 채워지는데, 이 창에서 스크립트 코드가 입력됩니다.
편집기 아래의 오른쪽에는 세 개의 버턴이 있는데, 이 버턴들은 ZuluScrtipt인 저장(Save), 커파일(compile) 및 배포(deploy)를 만드는 데 도움이 됩니다.
저장(Save) - 이 저장 버턴은 모든 주어진 시간에 사용자 스크립트를 저장합니다. 따라서 모든 변경 및 진행 사항이 손실되지 않습니다.
그러나 스크립트의 변경 사항을 저장한다고 해서 이 변경사항을 바로 사용할 수 있는 것은 아닙니다. 모든 변경 사항은 컴파일이 된 후 배포되어야만 사용할 수 있습니다.
컴파일(Compile) - 스크립트 컴파일은 구문 오류 여부에 대해 코드를 확인하며, 컴파일 작업이 성공하면 당사 스크립트가 실행될 수 있도록 이 스크립트와 연관된 바이너리 파일이 만들어집니다.
커파일 작업이 실패하면 파악된 오류 내역이 '컴파일러 출력'(Compiler Output) 창에 나열됩니다.
아래에는 실패한 컴파일 작업의 예가 있습니다.
배포(Deploy) - 스크립트가 배포되려면 먼저 컴파일이 되어야 합니다. 일단 컴파일 작업을 하여 .zql 파일이 만들어지면, 해당 스크립트를 배포할 수 있고 사용자의 ZuluTrade 거래 스테이션에서 사용할 수 있습니다!
메타 데이터 - 창의 오른 쪽에서 사용자 스크립트의 메타 데이터를 수정할 수 있습니다.
'이름'(Name) 필드는 해당 스크립트를 차트에 첨부할 때 표시되는 이름입니다.
'파일이름'(Filename) 필드는 해당 스크립트를 ZuluTrade의 서버에 내부적으로 저장할 때 사용하는 파일 이름입니다. 이 필드는 변경할 필요가 없지만, 변경하고 싶은 경우 '.zql' 접미사로 끝나야 한다는 것을 유의하십시오.
'설명'(Description) 필드는 해당 스크립트를 차트에 첨부할 때 표시되는 간략한 설명입니다. 설명은 해당 스크립트의 정확한 기능을 상기하는 데 도움이 되므로 이 영역에서 필요한 세부 내용을 자세히 설명하십시오.
스크립트 목록 - 메타 데이터 필드 아래에는 모든 저장된 스크립트의 목록이 있습니다. 만들어진 개개의 새 스크립트는 자동 저장된다는 것을 참고하십시오.
현재 선택된 스크립트(그 코드가 편집기 창에 표시됨)는 강조표시 됩니다.
스크립트 삭제하기 - 스크립트를 삭제해야 한다면, 스크립트 이름 옆의 "x" 아이콘을 클릭한 후 관련된 팝업에서 삭제를 확인해주면 됩니다.
스크립트 예제 - 테스트 목적으로 사용할 수 있는 zql 스크립트 예제를 살펴 보겠습니다.
#property copyright "Copyright © 2014, Zulutrade Inc"
#property link "www.zulutrade.com"
extern int BuyThreshold = 40;
extern int SellThreshold = 30;
extern double Lots = 1;
extern int MagicNumber = 33;
extern string comment = "by example script";
extern int maxOpenPositions = 3;
extern int shift = 1;
int RSILength = 14;
int TimeOfFirstBar = 0;
int init() {
}
int start() {
double RSI = 0.0;
if (isFirstTickOfCurrentBar()) {
RSI = iRSI(NULL, PERIOD_H1, RSILength, PRICE_CLOSE, shift);
Print("Got RSI value for period H1 and shift ", shift, " equals to ", RSI);
// Buy Condition
if ( RSI >= BuyThreshold && OrdersTotal() < maxOpenPositions) {
if (doBuy() == false) {
return (0);
}
}
// Close condition
if ( RSI <= SellThreshold && OrdersTotal() > 0) {
if(doClose() == false) {
return(0);
}
}
}
}
// Figures out the first tick of a new bar
bool isFirstTickOfCurrentBar() {
if (TimeOfFirstBar != Time[1]) {
TimeOfFirstBar = Time[1];
return (true);
}
return (false);
}
// Close an order checking magic number to make sure it is generated from current script
bool doClose() {
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if (OrderClose( OrderTicket(), OrderLots(), Ask, 0, White) == -1) {
Print ("Failed to close trade ", OrderTicket(),", error # ", GetLastError());
return(false);
}
Print ("Successfully closed trade ", OrderTicket(),", error # ", GetLastError());
return(true);
}
// Open a new order
bool doBuy() {
int ticket = OrderSend( Symbol(), OP_BUY, Lots, Ask, 0, 0.0, 0.0, comment, MagicNumber, 0, Lime);
if (ticket < 0) {
Print ("Failed to open trade, error # ", GetLastError());
return (false);
}
Print ("Successfully opened ticket ", ticket);
return (true);
}
이 스크립트는 오픈 포지션의 개수에 대한 모든 주기(cycle)를 확인합니다. 오픈된 포지션이 없고 일부 지표 조건이 충족되는 경우 스크립트는 새 포지션을 오픈합니다. 그렇지 않는 경우, 만일 오픈 포지션이 많으면 하나를 마감합니다.
참고: 이것은 실제 거래 전략이 아니며 단지 데모 목적을 위한 것입니다.
어떤 시점에 새 스크립트를 만들어야 하는 경우, '스크립트 만들기'(Create Script) 버턴을 클릭하여 이 프로세스를 다시 시작하기만 하면 됩니다.
상위
사용자 지정 지표 만들기
사용자 지정 지표들은 해당 언어에서 이미 사용할 수 있는 기술 지표의 범위를 확장하여 다른 거래 스크립트에서 만들어 사용할 수 있습니다.
사용자 지정 지표들은 사용자 지정 지표를 저장, 컴파일 및 배포한 후에 iCustom() ZQL 함수를 사용하여 모든 ZuluScript에서 사용할 수 있습니다.
참고: 지금은 차트에 사용자 지정 지표를 렌더링할 수 없습니다.
사용자 지정 지표를 만들려면 스크립트 편집기의 '지표 만들기'(Create Indicator)를 클릭해야 합니다.
편집기(Editor)는 사용자 지정 지표(Custom Indicators) 탭으로 전환된 상태여야 합니다.
그런 다음에 사용자 지정 지표가 준비되면 이를 편집, 명명, 저장 및 배포해야 합니다!
편집, 명명, 저장 및 배포 기능은 ZuluScripts와 비슷한 방식으로 작동합니다.
참고: 지표의 이름은 나중에 ZuluScripts에서 액세스하기 위해 iCustom() 함수를 호출할 때 사용되는 것입니다.
테스트 목적으로 사용할 수 있는 사용자 지정 지표 예제를 살펴 보겠습니다.
extern int index = 0;
int MODE = 0;
int init() {
return(0);
}
int start() {
double value = iCustom(NULL, NULL, "my_new_indicator", 0, index);
Print("my_new_indicator value for bar ", index, " is ", value);
}
상위
헤더 만들기
여기서 모든 스크립트 또는 사용자 지정 지표에서 가져오고 사용할 수 있는 재사용 가능 함수를 정의할 수 있습니다.
헤더는 ZQL 함수가 아니므로 init(), start() 함수를 필요로 하지 않는다는 것을 유의하십시오.
사용자 헤더를 만들려면 스크립트 편집기의 '헤더 만들기'(Create Header) 버턴을 클릭해야 합니다.
편집기(Editor)sms 헤더(Headers) 탭으로 전환된 상태여야 합니다. 참고 I: 이것은 함수를 액세스 해야 할 때 필요한 스크립트의 #include<> 지시문에서 사용해야 하는 파일 이름입니다.
참고 II: 헤더는 저장만 됩니다. 스크립트 또는 사용자 지정 지표에 의해 가져올 때 코드를 컴파일하고 배포해야 하므로 컴파일 또는 배포가 필요하지 않습니다.
새로운 스크립트에서 헤더를 사용하는 것은 다음과 같이 헤더 파일을 포함시키는 것처럼 간단합니다.
#include "my_common_functions.zqh"
int init() {
}
int start() {
printMyBalance();
}
상위
용어집
용어집 안에는 ZQL 언어의 개별 명령에 관한 세부 정보가 있습니다.
상단의 문자를 클릭하기만 하면 해당 문자의 목록으로 자동 스크롤 됩니다. 또한 이 목록의 문자 헤더를 클릭하면 개별 문자의 함수를 확장/축소할 수 있으며 함수 이름/헤더를 클릭하면 함수 세부 정보를 확장/축소할 수 있습니다.
상위
사용자 트레이더 계좌에서 스크립트 사용하기
스크립트가 성공적으로 컴파일되고 배포된 후 스크립트 편집기 창을 닫고 스크립트를 차트에 첨부할 수 있습니다.
이 작업을 수행하기 위해서는 통화 쌍 및 원하는 기간으로 이동해야 합니다. 이 예의 경우 H1의 기간을 가진 EURUSD 차트에 첨부합니다.
거래 스크립트(Trading Scripts) 버턴(아래의 스크린샷에 강조 표시되어 있음)을 클릭한 후 원하는 스크립트를 선택하십시오.
마우스로 이 스크립트 위를 가리키면 스크립트 설명이 있는 도구 설명이 표시됩니다.
선택한 차트/기간에서 스크립트를 시작하기 위해서는 이 스크립트 이름을 클릭하기만 하면 이 스크립트의 설명과 이 스크립트의 외부 변수에 대한 모든 초기화 필드가 들어 있는 새로운 창이 나타납니다.
사용자 필요에 따라 매개 변수를 조정한 다음에 '시작'(Start) 버턴을 클릭해야 합니다. 그러면 스크립트가 차트에 첨부됩니다!
참고: 사용자 PC가 켜진 상태인지 아닌지 또는 사용자가 자신의 계좌에 로그인 한 상태인지 아닌지의 여부와는 무관하게 이 스크립트는 ZuluTrade 서버에서부터 이 차트 상에 실행됩니다.
거래 스크립트(Trading Scripts) 탭 - 여기에서 사용자는 실행 버전 및 최종 업데이트 시간과 함께, 각 차트/기간에서 현재 활성 중인 모든 거래 스크립트를 검토할 수 있습니다.
또한 차트 아이콘을 통해 스크립트가 실행되고 있는 차트로 곧바로 이동할 수도 있습니다.
메시지(Messages) 탭 - 사용자 스크립트의 모든 메시지, 프린트, 사용자 스크립트에 관한 ZuluTrade의 메시지 등이 이 구역에 표시됩니다.
상위
스크립트 중지 및 배포 해제
스크립트는 언제라도 중지 또는 배포 해제할 수 있습니다.
스크립트 중지하기 - 차트/기간에서 스크립트가 실행되는 것을 중지하려면, '거래 스크립트'(Trading Scripts) 탭으로 이동한 다음 중지하고 싶은 스크립트 오른 쪽의 'x' 버턴을 클릭한 후 관련 팝업 창에서 중지(Stoppage)를 확인해 주기만 하면 됩니다.
참고: 스크립트를 중지하면 차트/기간에서 실행되는 것만 중지됩니다. 해당 스크립트는 사용자 트레이더 계좌와 거래 스크립트(Trading Scripts)에 계속 남아 있습니다.
스크립트 배포 해제하기 - 스크립트 배포를 해제하려면, 거래 스크립트(Trading Scripts) 구역으로 이동하여 그 이름 옆의 'x' 버턴을 클릭한 후 관련 팝업 창에서 배포 해제(Undeployment)를 확인해 주기만 하면 됩니다.
참고: 스크립트의 배포를 해제하면 사용자 트레이더 계좌에서 사용할 수 있는 스크립트에서만 제거되며 스크립트 편집기(Script Editor) 창에서는 해당 스크립트가 삭제되지 않습니다.
상위
ZQL Standalone Compiler 사용자 가이드
ZQL Standalone Compiler로 시작하기
ZQL Standalone Compiler는 웹 플랫폼에서 zulutrade가 제공하는 ZQL 스크립트의 독립형 모드입니다. 본 컴파일러는 ZQL와 호환이 가능한 모든 스크립트를 a.zl file로 편집합니다(mq4등)
다운로드
ZQL Standalone Complier는 FXCMMarkets사이트로 부터 배포됩니다.
컴파일러는 zip 혹은 tar 파일 포맷으로 가능합니다.
사양
- Java JDK 6 (Java JDK 6핫스팟의 사용을 권장합니다)
설치
선택한 다운로드를 귀하가 원하는 디렉토리로 발췌하십시오.ZQL Standalone Compiler는 zip 또는 tar포맷을 지원하는 모든 오퍼레이팅 시스템에 설치가 가능합니다. 제품 출시에 관한 추가 정보를 원하신다면 Release Notes를 참고 하시기 바랍니다.
퀵 투어
Standalone Compiler의 다운로드를 마치셨으므로 다음 단계는 분배의 레이아웃과 컴파일러 디렉토리 구조, 핵심 구성 파일,로그 파일등에 대해 알아보는 것 입니다.
디렉토리 구조
디렉토리 |
설명 |
lib/
|
컴파일러의 라이브러리 종속성을 포함하고 있습니다. |
conf/
|
어떤 방법으로든 변형 되어서는 안되는 중요한 구성 파일을 포함하고 있습니다. |
run.bat
|
윈도우용 기기를 위한 run 스크립트 |
run.sh
|
Linux/Unix 기기를 위한 run 스크립트 |
컴파일러 옵션
매개변수 이름
|
매개변수의 축약명
|
가치
|
설명
|
help |
h |
- |
콘솔에 도움말 프린트 하기 |
class |
c |
모든 스트링 값 |
생성된 클래스 이름 |
package |
p |
패키지 경로형식으로 된 모든 스트링 |
생성된 패키지 이름 |
output |
o |
모든 스트링 값 |
확대하지 않은 총 결과물 이름 |
zqh |
z |
디텍토리 경로 형식으로 된 모든 스트링(상대적 혹은 절대적) |
커스텀 zph파일과 디렉토리 경로를 포함하세요 |
name |
n |
원하는 스크립트 이름
윈도우의 "과 Linux의 \"사이에 스페이스를 넣으십시오
|
스크립트가 FXCMMarkets의 시스템에 올려지면 이름이 보이게 됩니다 |
description |
d |
원하는 스크립트 설명
윈도우의 "과 Linux의 \"사이에 스페이스를 넣으십시오
|
스크립트가 FXCMMarkets 시스템에 올려지면 설명이 보이게 됩니다 |
예시
커스텀 전문가 스크립트 편집하기 |
결과 |
run.bat -c MyCustomExpert -p org.test -o my_expert -n "My Expert" custom_expert.zql
|
my_expert.zl |
커스텀 전문가 스크립트와 커스텀 헤더 스크립트(헤더 디렉토리 등) 편집하기 |
결과 |
run.bat -c MyCustomExpert -p org.test -o my_expert -n "My Expert" -z headers custom_expert.zql
|
my_expert.zl |
상위