I. Tổng quan
Jinel là ngôn ngữ công thức trong TradeStation, dùng để xây dựng các chỉ báo tùy ý, điều kiện sàn lọc hay điều kiện cảnh báo, tín hiệu.
Jinel được cấu thành từ nhiều biểu thức. Các biểu thức tách biệt với nhau bởi ký tự “chấm phẩy” ;
Mỗi biểu thức trong Jinel có thể viết trên một dòng hay nhiều dòng, giúp người sử dụng dễ trình bày và đọc lại các biểu thức phức tạp.
Giống như các ngôn ngữ công thức khác, người viết có thể ghi chú thích trong Jinel. Các chú thích phải được bắt đầu bằng ký tự #.
II. Một vài công thức Jinel đơn giãn
Jinel có cấu trúc đơn giản, giúp người sử dụng dễ dàng diễn tả các công thức mong muốn. Mặc dù cú pháp đơn giản, nhưng Jinel hỗ trợ đầy đủ các tính năng của một ngôn ngữ công thức hiện đại. Các yêu cầu công thức phức tạp đều có thể viết trong Jinel, qua một hay nhiều biểu thức kết hợp với nhau.
Ví dụ 1: Vẽ đường giá đóng cửa
Đây là ví dụ của một công thức Jinel đơn giản nhất. Công thức chỉ bao gồm 1 hàm:
|
close()
|
Ví dụ 2: Vẽ đường giá, có chỉ định màu, độ rộng
|
giadong := close(); giadong.lineColor := blue; giadong.lineWidth := 2;
|
Trong ví dụ này, “giadong” là tên biến do người viết tự đặt. Toán tử “:=” là toán tử gán, gán giá trị close() vào tên biến “giadong”.
Sau khi đặt biến, màu sắc và động rộng của đường giá được chỉ định qua 2 thuộc tính “.lineColor” và “.lineWidth”.
Ví dụ 3: Vẽ nhiều đường trung bình với các chu kỳ khác nhau
Ví dụ này minh họa việc sử dụng Jinel để đơn giản hóa các công việc phân tích hàng ngày của người sử dụng. Chẳng hạn, một người sử dụng muốn vẽ cùng lúc 3 đường trung bình với các chu kỳ 5, 14, 50. Thay vì dùng chuột để “kéo/thả” 3 lần chỉ báo SMA và nhập số chu kỳ qua màn hình, người sử dụng có thể viết một công thức Jinel đơn giản dưới đây, và dùng lại mỗi khi cần.
|
sma(5); sma(14); sma(50);
|
III. Các trường dữ liệu trong giá cuối ngày (EoD)
Jinel hỗ trợ các trường dữ liệu sau đây trong mỗi bộ dữ liệu giá:
open() : Giá mở cửa
high() : Giá cao nhất
low() : Giá thấp nhất
close() : Giá đóng cửa
vol() : Khối lượng giao dịch
refPrice() : Giá tham chiếu
ceilingPrice() : Giá trần
floorPrice() : Giá sàn
volBuy1() : Khối lượng dư mua 1
volBuy2() : Khối lượng dư mua 2
volBuy3() : Khối lượng dư mua 3
volBuy4(): Khối lượng dư mua 4 (chỉ có đối với Sở giao dịch HNX)
volSell1() : Khối lượng dư bán 1
volSell2() : Khối lượng dư bán 2
volSell3() : Khối lượng dư bán 3
volSell3() : Khối lượng dư bán 4 (chỉ có đối với Sở giao dịch HNX)
volFBuy() : Khối lượng mua của nhà đầu tư nước ngoài
volFSell() : Khối lượng bán của nhà đầu tư nước ngoài
volFRoom() : Số cổ phiếu đang nắm giữ bởi các nhà đầu tư nước ngoài
volFRoomTotal: Số cổ phiếu tối đa các nhà đầu tư có thể nắm giữ.
IV. Các công thức kỹ thuật
Các công thức kỹ thuật sẳn có trong TradeStation được dùng trong Jinel, theo quy tắc như sau:
tencongthuc(thongso1, thongso2, thongso3, …)
- Ví dụ, đường trung bình 5 chu kỳ:
|
sma(5);
|
- Để vẽ đường trung 5 chu kỳ, nhưng dùng giá mở cửa:
|
sma(open(), 5);
|
- Chỉ báo macd:
|
macd(12, 26); #macd với các thông số 12, 26 sma(macd(12, 26), 9); #đường macd signal
|
Hoặc:
|
macdValue := macd(12, 26); #macd với các thông số 12, 26 sma(macdValue(), 9); #đường macd signal
|
Danh sách đầy đủ các chỉ báo kỹ thuật, các hàm toán học, các trường dữ liệu trong báo cáo tài chính, chỉ số tài chính… được trình bày trong hộp thoại JinEL Builder trong phần mềm TradeStation. Nhấp chuột vào tên chỉ báo, phía bên dưới sẽ hiện ra thông tin của chỉ báo. Ví dụ, macd trong JinEL Builder có cú pháp như sau:
macd(Fast period=12[required], Slow period=26[required])
Công thức macd có 2 thông số là “Fast period” và “Slow period”. Fast period có giá trị mặc định là 12, slow period có giá trị mặc định là 26. Các thông số có chỉ định [Required], thì giá trị của thông số phải được viết ra trong công thức.
V. Các hàm đặc biệt
1/ param()
Hàm param() cho phép người viết công thức chỉ định một thông số có thể thay đổi được, sau khi công thức được vẽ trên đồ thị.
|
thongso1 := param(5); sma(thongso1());
|
Công thức trên sẽ vẽ đường SMA 5. Tuy nhiên, thông số 5 có thể điều chỉnh được (nhập lại), qua hộp thoại “Cầu hình cho đồ thị”.
2/ price()
Thay vì chỉ định trường dữ liệu cụ thể như close(), open()… trong công thức, người viết có thể chỉ định price() là trường dữ liệu. Khi đó, trường dữ liệu được chọn mặc định là close(). Tuy nhiên, sau khi vẽ trên đồ thị, trường dữ liệu có thể thay đổi được qua hộp thoại “Cấu hình cho đồ thị”.
|
sma1 := sma(close(), 12); #luôn sử dụng giá đóng sma2 := sma(price(), 12); #sử dụng giá đóng là mặc định, có thể thay đổi lại khi vẽ
|
3/ cross()
Hàm cross() xác định giao cắt giửa 2 đường chỉ báo. Cross() có cú pháp:
cross(data array 1[required], data array 2[required])
cross() trả về giá trị 1 (đúng) khi chỉ báo 1 cắt lên đường chỉ báo 2.
|
cross(close(), sma(50)); #giá đóng cắt lên đường sma 50 cross(sma(50), close()); #giá đóng cắt xuống đường sma 50
|
VI. Các công thức tham khảo
TradeStation kèm theo một số công thức tham khảo trong bản cài đặt chuẩn. Người sử dụng có thể xem các công thức này qua nút “Sửa chỉ báo” trong danh sách các chỉ báo theo công thức trong TradeStation.
Để được hổ trợ viết công thức Jinel, vui lòng gởi email theo địa chỉ jinel@tradestation.vn . Xin cám ơn.




