Giới thiệu về Amibroker
Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”.
AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.
Cách Amibroker lưu trữ dữ liệu
Các hàm thường dùng trong AmiBroker
Các ký hiệu thường dùng trong viết code:
C: close giá đóng cửa/ giá hiện tại trong phiên
O: Open giá mở cửa
H: giá cao trong phiên
L: giá thấp trong phiên
V: volume, khối lượng
ma(c,30) bình quân giá đóng cửa 30 phiên giao dịch
ma(v,30) bình quân khối lượng giao dịch 30 phiên
ref(c,-1) giá đóng cửa của ngày hôm qua hoặc 1 phiên trước đó
ref(c,-2) giá đóng cửa của ngày hôm kia hoặc cách đó 2 phiên
ref(v,-1) khối lượng của ngày hôm qua/ khối lượng của 1 phiên trước đó
HHV(C,15) giá trị cao nhất của giá đóng cửa 15 phiên gần nhất
hhv(h,30) giá cao nhất của giá cao 30 phiên gần nhất
LLV(L,30) giá thấp nhất của giá thấp trong vòng 30 phiên
LLV(C,30) giá thấp nhất của giá đóng cửa trong vòng 30 phiên
C*V: Giá nhân với khối lượng = giá trị giao dịch
C>=1.02*Ref(C,-1) => giá lớn hơn 2% so với giá ngày hôm qua
V >= 1.3*MA(V,15) => khối lượng lớn hơn hoặc bằng 130% so với bình quân khối lượng 15 phiên
RSI(14) <=35 => tìm ra các mã có RSI <35
ROC: percentage rate of change
ValueWhen(EXPRESSION, ARRAY, n = 1) : get value of the array when condition met: lấy giá trị khi dữ liệu thỏa điều kiện Expression
CROSS: trả về 1 khi Array 1 cắt Array 2 theo chiều hướng đi lên
EXREM: trả về 1 khi lần đầu tiên xuất hiện tín hiệu "true" trong Array 1, sau đó trả về 0 cho đến khi Array 2 là true ngay cả khi có tín hiệu "true" trong Array 1. Hàm này hữu ích khi bạn muốn loại bỏ nhiều điểm BUY hoặc SELL xuất hiện liên tiếp nhau.
Các hàm trong AFL
Plot( array, name, color/barcolor, style = styleLine, minvalue = {empty}, maxvalue = {empty}, XShift = 0, Zorder = 0, width = 1 )
- array – mảng dữ liệu được vẽ, vd: RSI(16), Close, MA(Close,20),…
- name - đại diện cho tên của đồ thị
- color - dùng để thể hiện màu sắc cho đồ thị (nếu tham số thứ 3 là số) hoặc động (khi tham số thứ 3 là 1 array).
- style: định nghĩa dạng đồ thị được vẽ
styleLine = 1 - normal (line) chart (default): đường kẻ liền
styleHistogram = 2 - histogram chart : Biểu đồ tần suất
styleThick =4 - fat (thick): đường kẻ đậm
styleDots = 8 - include dots: đường kẻ chấm
styleNoLine = 16 - no line
styleDashed = 32 - dashed line style: đường kẻ gạch đứt
styleCandle = 64 - candlestick chart: nến
styleBar = 128 - traditional bar chart…
Tham khảo: https://www.amibroker.com/guide/afl/plot.html
Min value và max value - (chỉ được sử dụng bởi đồ thị styleOwnScale) xác định giá trị tối thiểu và tối đa của đồ thị (ranh giới dưới và trên cho trục Y).
XShift - cho phép chuyển biểu đồ qua thanh cuối cùng một cách trực quan.
ZOrder - xác định vị trí trục Z của ô đã cho. Giá trị mặc định là 0. Zorder = 0 cũng có nghĩa là đặt nơi "lưới".
shift object sang phải hoặc sang trái = số bar đã input
width - xác định pixel hoặc chiều rộng phần trăm của ô đã cho. Mặc định là 1 pixel
tham số Zshift có tác dụng shift object sang phải hoặc sang trái = số bar đã input, ở trường hợp này là 10.
Ví dụ:
// Example 20-bar Moving average shifted 10 bars into the future past the last bar:
Plot(Close,"Close",colorBlack,styleCandle);
Plot(MA(Close,20), "Shifted MA", colorRed, styleLine, Null, Null, -10 );
// Note that shift occurs during plotting AND does NOT affect source array
Một điểm khá hay cần lưu ý đó là khả năng thay đổi màu sắc (Dynamic Color) khi các object (indicator, price,…) thỏa mãn một số điều kiện cho trước (sử dụng hàm Iff )
dynamic_color = IIf(MACD() > 0 , colorBlue, colorRed);
Plot(MACD(), "My MACD", dynamic_color, styleHistogram | styleThick)
Param
- add user user-definable numeric parameter
SYNTAX
Param( ''name'', defaultval, min, max, step, sincr = 0 )Return: number
Thêm một tham số mới do người dùng xác định, sẽ có thể truy cập được qua hộp thoại Tham số: nhấp chuột phải vào ngăn biểu đồ và chọn "Tham số" hoặc nhấn Ctrl + R cho phép thay đổi thông số biểu đồ - các thay đổi được phản ánh ngay lập tức.
- "name"
- defaultval: giá trị mặc định cho biến
- min, max – giá trị lớn nhất và nhỏ nhất
- step - defines minimum increase of the parameter via slider in the Parameters dialog
- sincr - automatic section increment value (used by drag-drop interface to increase default values for parameters)
Buy và Sell
Đây là 2 danh sách quan trọng trong Amibroker, chứa điểm mua và điểm bán
VD:
Buy= Cross(EMA(Close,13), EMA(Close,26) );
Sell= Cross(EMA(Close,26), EMA(Close,13) );
Buy sẽ chứa 3 loại giá trị:
- NULL (không xác định)
- 1: Khi EMA 13 cắt đi lên EMA 26
- 0: Khi EMA 13 không cắt EMA 26
Tương tự với Sell:
- NULL (không xác định)
- 1: Khi EMA 26 cắt đi lên EMA 13
- 0: Khi EMA 26 không cắt EMA 13
Hàm vẽ biểu tượng trong Amibroker: PlotShapes
Cú pháp:
PlotShapes( shape, color, layer = 0, yposition = graph0, offset = -12, XShift = 0 );
shape: Hình dạng
VD: shapeUpArrow, shapeDownArrow, shapeHollowUpArrow, shapeHollowDownArrow, shapeSmallUpTriangle, shapeSmallDownTriangle, shapeHollowSmallUpTriangle, shapeHollowSmallDownTriangle, shapeUpTriangle, shapeDownTriangle, shapeHollowUpTriangle, shapeHollowDownTriangle, shapeSmallSquare, shapeHollowSmallSquare, shapeSquare, shapeHollowSquare, shapeSmallCircle, shapeHollowSmallCircle, shapeCircle, shapeHollowCircle, shapeStar, shapeHollowStar, shapeDigit0, shapeDigit1, shapeDigit2, shapeDigit3, shapeDigit4, shapeDigit5, shapeDigit6, shapeDigit7, shapeDigit8, shapeDigit9
color: Màu sắc, vd ColorGreen, ColorRed
layer: defines layer number on which shapes are plotted
yposition: defines Y-position where shapes are plotted (by default they are plotted 'around' graph0 (first indicator) line)
offset - (or distance) parameter (by default -12 ), Offset is expressed in SCREEN pixels. Negative offsets shift symbols down, positive offsets shift symbol up. To place the shape exactly at ypostion, specify 0 as offset
(new in 5.66) XShift - allows to visually shift the the shapes by the specified number of bars (even past the last bar).
Plot(Close,"Close", colorAqua,styleCandle);
Plot(EMA(Close,13), "EMA13", colorBlue, styleLine, Null, Null);
Plot(EMA(Close,26), "EMA26", colorOrange, styleLine, Null, Null);
Plot(EMA(Close,52), "EMA52", colorRed, styleLine, Null, Null);
Buy= Cross(EMA(Close,13), EMA(Close,26) );
Sell= Cross(EMA(Close,26), EMA(Close,13) );
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), colorGreen, 0,L, Offset=-45);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed, 0,H, Offset=-45);
Nhatkyhoctap's blog
Debug in Amibroker https://tradingtuitions.com/how-to-debug-amibroker-afl-code/
Trả lờiXóaAd có code chỉ hiện đồ thị nến của vnindex hay vn30 k ạ?
XóaBạn đăng ký account ở FireAnt hoặc Fialda, để xem đồ thị nến của vnindex nha. Còn về vn30 thì mình ko biết nguồn lấy data.
XóaBạn có thể tìm thêm code free ở đây: https://www.wisestocktrader.com/amibroker-afl-formulas-indicators
Chào ad, mong ad tư vấn, mình muốn tạo một chỉ báo RSI nhưng muốn thay đổi nguồn cấp dữ liệu tính toàn đầu vào ko phải giá đóng cửa mà muốn thay vào đó là giá trị của một chỉ báo trước đó . VD là RSI (5) với dữ liệu đầu vào là giá trị của RSI (14) thì làm như nào vậy ad. Cảm ơn ad
Trả lờiXóaMình không rành về code AFL, nên viết thế này, bạn xem thử xem có đúng ý bạn ko:
XóaCú pháp: RSIa( array, periods = 14 )
_SECTION_BEGIN("RSIa");
RP = Param("RSI",7,2,20,1);
UL= Param("Upper Limit",70,0,100,1);
LL= Param("Lower Limit",30,0,100,1);
PlotGrid(UL,colorBlue);
PlotGrid(LL,colorBlue);
RSI14 = RSI(14);
R= RSIa(RSI14, 5);
Plot(R, "MODIFIED RSI", colorLime, styleThick);
Plot(RSI14, "MODIFIED RSI", colorBlue, styleThick);
_SECTION_END();
Cảm ơn ad ah, tuyệt vời. Mìn tự mày mò về Ambiroker đôi khi sửa lại các ý tưởng của bản thân , nhưng hay gặp nhiều lỗi. Cảm ơn ad nhiệt tình chia sẻ kiến thức và hỗ trợ giải đáp
Xóaad có code để Ambibroker tự động chạy và mua bán theo chiến thuật, hay chạy thử chiến thuật ( các thiết lập mình đặt ra và đưa ra tính khả thi của chiến thuật không vậy. Cảm ơn ad.
XóaBạn vào trang http://kakata.vn/ rồi tìm các bài viết liên quan tới Amibroker nha. Trên đây họ đều đưa sẵn các code theo các chiến thuật rồi. Mình chỉ tìm hiểu thôi chứ ko viết nổi thuật toán đâu :D
XóaCảm ơn ad nhiều ah. Mong chờ các bài viết chia sẻ của ad :)
XóaTham khảo vẽ mũi tên: https://chibaodautu.com/plot-ve-do-thi-trong-amibroker/
Trả lờiXóaBạn ơi bạn có bộ lọc Ami để lọc ra danh sách các cổ phiếu đang phân kỳ RSI đỉnh và đáy không ? Có thể giúp mình với
Trả lờiXóa