AMIBROKER hoc code

24 7.3K 192
AMIBROKER hoc code

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hướng dận lập trình code cho amibroker

AMIBROKER: AFL HOẠT ĐỘNG NHƯ THẾ NÀO (1)? Giới thiệu khái quát Amibroker theo developer Tomasz Janeczko xây dựng dựa ngơn ngữ C Vì code Amibroker Formula Language sử dụng có syntax tương đồng với C, ví dụ câu lệnh #include để import hay cách gói object, hàm block {} kết thúc câu lệnh dấu “;” Bản thân ngôn ngữ AFL tự định nghĩa: Syntax Các toán tử (như cộng trừ nhân chia….) ưu tiên làm việc loại data nguyên thủy (scalar, float) Control Flow (Conditional execution hay Loop) Các khía niệm cấu trúc (Biến, hàm, thủ tục, cấu trúc, đối tượng) số công cụ khác xử lý ngoại lệ… Amibroker mã nguồn mở (open source) Python, R hay C++, vây thư viện Amibroker cung cấp bới #include – import library viết trước dạng “.afl” Amibroker Development kit Jscript/VBscript External COM object (cái không hiểu lắm) http://www.amibroker.com/guide/a_aflcom.html Ngồi người dùng share indicators lên forum amibroker cho người khác dùng lại Tuy nhiên customized indicators cho profit ngon thường bị exploited nhanh nên đến lúc up lên dc forum hay database profit giảm So với package numpy/pandas Python hay nguồn package đồ sộ R-forge operation cho ma trận amibroker (các ngôn ngữ C hay Java sơ khai không hỗ trợ operation cho ma trận) khó thực nhiều Thế nên search articles website portfolio analysis, đoạn code cho python hay r thường dễ tìm có sẵn Thế người đơn giản không sử dụng Python hay R Đầu tiên Amibroker có GUI, thân thiện với người code Thứ paramters cho indicators có GUI ln Thứ automatic analysis kết hợp với control flow thực nhiều thứ hay ho cho backtesting optimization Và cuối tiền thân developer Amibroker cung cấp đoạn code cho customized indicators khách hàng yêu cầu trả phí quyền đầy đủ Một yếu tố quan trọng yếu tố đầu vào cho database Không phải đâu database support R, Python đâu có sẵn data để import vào Amibroker Với theo trường phái kiểu Pure Technician không phân biệt giữ Metastock Amibroker khác ngồi việc chart Amibroker đẹp chút so với MS 11 :LOL: Ở khía cạnh quan trọng nhất, hiểu AFL Amibroker ngôn ngữ xử lý mảng (an array processing language) Nó hoạt động dựa mảng (các dòng/vector) số liệu, giống với cách hoạt động spreadsheet excel Mảng (array) đơn giản tập hợp (1 hàng) số liệu, hiểu vector Amibroker lưu sở liệu cổ phiếu mảng bao gồm: Giá mở cửa (opening price), giá đóng cửa (closing price), giá cao (high), giá thấp (low), khối lượng (volume) hợp đồng dạng open (open interest, không áp dụng cho liệu cổ phiếu) Ví dụ minh họa cách AFL lưu liệu mảng : Bất kì mảng khác tính tốn dựa tốn tử cơng thức xây dựng sẵn thư viện AFL từ mảng sở liệu cổ phiếu Mỗi giá trị mảng có giá trị ngày tháng tương ứng với Xử lý mảng tốc độ AFL Giả sử có câu lệnh: MyVariable = (High + Low) / Khi AFL đánh giá câu lệnh trên, lấy mảng High Low từ sở liệu cổ phiếu, sau thêm mảng tương ứng Nói cách khác,bước đầu tiên, tốn tử “+” (và áp dụng với toán tử khác) xử lý để tạo mảng khác, sau mảng tiếp tục áp dụng toán tử “/” bước gán cho biến MyVariable 3 Trung bình trượt (Moving Averages), câu lệnh điều kiện (Conditional Statements) Có đoạn code: Cond1 = Close > MA (Close, 3); Cond2 = Volume > Ref (Volume, -1); Buy = Cond1 and Cond2; Sell = High > 1.3; Đoạn code tạo tín hiệu mua giá đóng cửa ngày hơm lớn đường MA(3) khối lượng ngày áp dụng lớn khối lượng ngày trước Nó tạo tín hiệu bán giá cao ngày áp dụng lớn 1.30 Nếu đoạn code, người dùng cần xem xét giả thiết giá đóng cửa lớn giá trị MA(3), AFL quét mảng close price tạo mảng MA(close, 3) cho cổ phiếu cần phân tích Mỗi giá trị (cell) mảng so sánh với mảng close price Từ kết so sánh, AFL lại tạo mảng mới, có tên Cond1, close price lớn giá trị MA(close,3) tương ứng, ô giá trị tương ứng mảng Cond1 gán giá trị Nếu close price nhỏ MA(close,3), ô giá trị tương ứng mảng Cond1 gán giá trị AFL nhìn phía giá trị chuỗi thời gian, cách sử dụng hàm Ref Tương tự trên, mảng Ref(Volume, -1) mảng Cond2 tạo từ database gốc Sau mảng Buy mảng Sell thiết lập, chi tiết sau: Buy Sell mảng đặc biệt, tạo biến với tên “Buy” “Sell”, AFL ngầm hiểu tín hiệu để mua bán Hàm plot() Amibroker plot(array, name, color, style = styleLine, minvalue = Null, maxvalue = Null, XShift = 0, ZOrder = 0, width = 1) tham số quan trọng bao gồm:     Tham số array đại diện cho số liệu vẽ Tham số name đại diện cho tên đồ thị Tham số color dùng để thể màu sắc cho đồ thị Tham số style định nghĩa dạng đồ thị vẽ (line/histogram/candlestick/bar, etc….) Plot(RSI(16), "Draft RSI", colorBlueGrey); Câu lệnh apply cho chart hình bên dưới:  Tham số Zorder dùng để tạo layer cho object cần vẽ, value tương ứng sau:  Tham số Zshift phức tạp chút Lấy ví dụ cụ thể, tạo chart từ liệu close price kết hợp với đường MA(15) đoạn code bên dưới: Plot(Close, "Adjusted Close", colorDefault, styleBar); Plot(MA(Close, 15), "MA-15", colorRed, styledashed); Plot(MA(Close, 15), "MA-Shift", colorBlue, styleThick, Null, Null, 10); Ta đồ thị hình, cụ thể tham số Zshift có tác dụng shift object sang phải sang trái = số bar input, trường hợp 10 Một điểm hay cần lưu ý khả thay đổi màu sắc (Dynamic Color) object (indicator, price,…) thỏa mãn số điều kiện cho trước (sử dụng hàm Iff ) dynamic_color = IIf(MACD() > , colorBlue, colorRed); Plot(MACD(), "My MACD", dynamic_color, styleHistogram | styleThick) Có thể kết hợp nhiều style vào chart dựa vào kí hiệu “|”, chi tiết style cụ thể tìm website Amibroker Một điểm hay sử dụng chart Amibroker thay đổi giá trị đối số cho tham số hàm Giả sử thay cố định giá trị MA(16) với màu sắc, title tên phía trên, tạo nên vector đối sốbằng câu lệnh: Param, ParamStr, Paramcolor, Paramstyle, sau pass vector vào hàm Ưu điểm chỗ tùy chỉnh giá trị tham số đồ thị Phía ví dụ đơn giản làm 1 period = Param("MA1", 16, 3, 50, 1); Plot(MA(Close,period), "Simple Moving Average (" + period + ")", colorBrown, stylethick); Phía ví dụ khác lấy từ thư viện AFL knowledge base: ticker = ParamStr( "Ticker", "VNINDEX" ); sp = Param( "MA Period", 12, 2, 100 ); PlotForeign( ticker, "Chart of "+ticker, ParamColor( "Price Color", colorBlack ), styleCandle ); Plot( MA( Foreign( ticker, "C" ), sp ), "MA", ParamColor( "MA Color", colorRed ) ); AMIBROKER: AFL HOẠT ĐỘNG NHƯ THẾ NÀO (2) – SCAN VÀ EXPLORATION Sau hiểu nguyên lý hoạt động Amibroker dựa nguyên lý vectorization (tính tốn dựa mảng có sẵn OHLC hay volume), viết tơi phân tích chức Scan Exploration Amibroker Một tính mạnh Amibroker khả quét (screen) hàng trăm cổ phiếu thời gian thực (real-time) theo dõi tín hiệu giao dịch tương ứng Việc quét thực chức “Scan” “Exploration” Điểm khác biệt quan trọng Scan Exploration việc Exploration cho phép người dùng tùy chỉnh output cửa sổ Analysis, Scan thực việc cơng việc tìm kiếm tín hiệu buy/sell/short/cover hiển thị chúng cột định dạng từ trước Giả sử mô trading strategy dựa vào tin hiệu MACD Signal Line đoạn code bên dưới: Buy = Cross(MACD(), Signal()); Sell = Cross(Signal(), MACD()); sau paste code vào formula send to automatic analysis, click scan kết hình bên dưới: Về bản, chức Scan có Amibroker quét tìm database ngày mã cổ phiếu thỏa mãn trading rule (buy/sell) mà người dùng input vào, tín hiệu thỏa mãn, Amibroker trả row giá trị bao gồm Symbol, Trade, Date Close hình phía bên Tiếp theo chức exploration Chức mạnh scan nhiều người dùng tự định nghĩa giá trị trả cho column, khơng giới hạn cột scan Giả sử tơi muốn qt tồn database HOSE HNX, sau trả tên mã cổ phiếu (Symbol), Ngày (Date), Giá đóng cửa (Close) khối lượng (Volume), viết đoạn code sau: Filter = 1; AddColumn(DateTime(), "Date", formatDateTime); AddColumn(Close, "Close", 1.2); AddColumn(Volume, "Volume", 1); Đầu tiên dòng Filter = Exploration Amibroker yêu cầu người dùng sử dụng hàm Filter sử dụng chức exploration, code khơng có hàm Filter, exploration khơng chạy Filter = dùng để qt tồn mã có cửa sổ apply to automatic analysis Giả sử tơi để apply to: All quotes, amibroker qt tồn mã có database Nếu chuyển thành apply to: watchlist0, amibroker qt tồn mã có watchlist0 Ngồi exploration, người dùng chọn range tùy ý cơng cụ, recent-bar khoảng (from … to …) Hàm AddColumn dùng để tạo cột output Automatic Analysis, check help index để xem chi tiết parameters cần thiết để pass vào function Lưu ý dùng hàm exploration, mặc định có cột Ticker Date/Time, người dùng không thiết phải thêm vào Xong phần bản, đào sâu thêm chút hàm Filter Ở mặt code, giá trị để truyền vào hàm Filter có dạng boolean Ở ví dụ trên, Filter = tương đương Filter = True Giờ giả sử tơi muốn lọc cổ phiếu có khối lượng giao dịch lớn 10000 phiên gần nhất, đặt Filter = Volume > 10000, Hàm Filter trả ticker danh sách apply to thỏa mãn điều kiện trên, sau hàm phía Filter thực dựa list trả hàm filter Giả sử tơi có mã KDC, VGC AAM watchlist Hàm Filter phía lọc từ watchlist mã thỏa mãn KDC VGC, sau hàm Addcolumn phía bên thực nhiệm vụ dựa mã này, mã AAM bị loại bỏ Thử đoạn code bên với apply to: All symbols range : recent-bar Filter = Volume > 10000; AddColumn(DateTime(), "Date", formatDateTime); AddColumn(Close, "Close", 1.2); AddColumn(Volume, "Volume", 1); Amibroker hỗ trợ thêm màu sắc vào cột thêm cột có giá trị String (khơng phải số hay ngày tháng) Đoạn code bên minh họa ý tương này, Filter = Volume > 10000; CloseCond1 = Close > Ref(Close, -1); CloseStatus1 = WriteIf(CloseCond1, "Close Bullish", "Close Bearish"); CloseColor1 = IIf(CloseCond1, colorGreen, colorRed); AddColumn(Close, "Close", 1.2,colorWhite,CloseColor1); AddTextColumn(CloseStatus1, "Close Status", 1, colorWhite, CloseColor1); VolumeCond1 = Volume > Ref(Volume, -1); 10 VolumeStatus1 = WriteIf(VolumeCond1, "Volume Bullish", "Volume Bearish"); 11 VolumeColor1 = IIf(VolumeCond1, colorGreen, colorRed); 12 13 AddColumn(Volume, "Volume", 1, colorWhite, VolumeColor1); AddTextColumn(VolumeStatus1, "Close Status", 1, colorWhite, VolumeColor1); Đoạn code in cột màu đỏ Giá đóng cửa khối lượng thấp ngày hôm trước, màu xanh ngược lại Ngồi in thêm cột có giá trị String tương ứng với Close Volume Về mặt bản, hết cho scan exploration Giờ trader tự thiết kế lọc riêng với indicator hàm khác amibroker Giả sử muốn lọc RSI > 70 RSI < 30 cần type Filter = RSI > 70 or RSI < 30; hay muốn in column thể giá trị MA30 cần AddColumn(MA(30), “MA30”, 1.2); xong Ý tưởng thiết kế nội dung bạn Phần sau nói Backtesting interface amibroker, công cụ hay ho phần mềm LOAD DỮ LIỆU CỔ PHIẾU TỪ DATABASE AMIBROKER ĐẾN R ENVIRONMENT (1) Việt Nam ai dùng metastock amibroker, nên liệu cổ phiếu cung cấp cho phần mềm nhiều Vấn đề chỗ nhiều lúc amibroker không đủ để viết trading algorithm, hay làm data analysis, hay đơn giản đo độ nhạy mã với mã kia, với volume Retail trader đương nhiên khơng có tool để access vào database institutional trader, nên người ta lại nghĩ cách xuất ngược từ Amibroker Database file CSV sở liệu cá nhân load vào mơi trường ngơn ngữ khác Python R hay Matlab Ở Mỹ hay Eu hay Singapore khác chỗ người ta access data qua API Yahoo hay Quandl, sau có viết sẵn function việc nhập ticker, start date, end date xong Việt Nam tự viết tự quẩy, API khó kiếm, thấy phổ biến dùng webscrapping VBA load fundamental data vào Amibroker cung cấp code sau để xuất toàn liệu OHLCV file csv hay txt sau: ? // create folder for exporting purposes fmkdir( "C:\\DataExport\\" ); // open file for writing // file name depends on currently processed ticker fh = fopen( "c:\\DataExport\\" + Name() + ".txt", "w" ); // proceed if file handle is correct if ( fh ) { dt = DateTime(); 10 11 // write header line 12 fputs( "Ticker,Date/Time,Open,High,Low,Close,Volume\n", fh ); 13 14 // iterate through all the bars 15 16 for ( i = 0; i < BarCount; i++ ) 17 { 18 // write ticker name 19 fputs( Name() + "," , fh ); 20 21 // write date/time information 22 fputs( DateTimeToStr( dt[ i ] ) + ",", fh ); 23 //write quotations and go to the next line 24 qs = StrFormat( "%g,%g,%g,%g,%g\n", O[ i ], H[ i ], L[ i ], C[ i ], V[ i ] ); 25 fputs( qs, fh ); 26 27 } 28 // close file handle 29 30 fclose( fh ); } 31 32 // line required by SCAN option 33 Buy = 0; 34 35 36 Load đoạn code vào automatic analysis explore cho watchlist cần xuất data Giả sử tơi có watchlist0 bao gồm : KDC, VNM, VCB VIC, sau export đc file sau: Sau vào Rstudio chỉnh set working directory as vào thư mục c:\\DataExport, thay đổi phần code Amibroker Sau dùng đoạn code sau để load tồn data vào môi trường R, tên variable trùng với tên file xuất từ amibroker loại bỏ hậu tố “.csv” #solution mf1 #create empty buffer 11 > for ( i in n1){ 12 + temp head(df,10) Date KDC VCB VIC VNM 25 501 3/23/2015 24.648 25.012 28.236 67.841 26 500 3/24/2015 24.490 25.083 28.236 67.841 27 499 3/25/2015 24.383 25.154 28.177 67.841 28 498 3/26/2015 24.118 24.870 27.768 67.841 497 3/27/2015 23.853 25.083 27.535 66.574 29 30 31 32 496 3/30/2015 23.588 24.942 27.243 66.574 33 495 3/31/2015 23.853 24.942 27.476 67.206 34 494 4/1/2015 23.323 24.870 26.892 66.574 35 36 37 38 493 4/2/2015 23.588 25.368 27.067 67.206 492 4/3/2015 23.534 25.368 26.950 66.574 > str(df) 'data.frame': 501 obs of variables: $ Date: Factor w/ 2807 levels "1/10/2006","1/10/2007", : 1298 1306 1314 1323 1331 13 39 $ KDC : num 24.6 24.5 24.4 24.1 23.9 40 $ VCB : num 25 25.1 25.2 24.9 25.1 41 $ VIC : num 28.2 28.2 28.2 27.8 27.5 42 $ VNM : num 67.8 67.8 67.8 67.8 66.6 43 > # Re-order data by Date in first column 44 45 46 47 > Date df df

Ngày đăng: 03/02/2018, 16:43

Từ khóa liên quan

Mục lục

  • AMIBROKER: AFL HOẠT ĐỘNG NHƯ THẾ NÀO (1)?

  • AMIBROKER: AFL HOẠT ĐỘNG NHƯ THẾ NÀO (2) – SCAN VÀ EXPLORATION

  • LOAD DỮ LIỆU CỔ PHIẾU TỪ DATABASE AMIBROKER ĐẾN R ENVIRONMENT (1)

Tài liệu cùng người dùng

Tài liệu liên quan