Đăng ký Đăng nhập
Trang chủ Hướng dẫn code đơn giản amibroker p1...

Tài liệu Hướng dẫn code đơn giản amibroker p1

.PDF
30
4912
111

Mô tả:

Hướng dẫn code đơn giản Amibroker (P1) Chào mọi người, em xin chia sẻ chút ít mà em có tự mày mò được về vấn đề trên. Vì em tìm hiểu, cóp nhặt công thức linh ta linh tinh nên bài viết sơ sài và thiếu chính thống. Em sẽ cố gắng đơn giản và dễ hiểu nhất. Đêm hôm rảnh rỗi các bác đọc dòng nào nhảm thì lướt qua phần đầu, xem 3 cái hình với chú thích thôi, nhé! Trước tiên em xin phép lan man tí: Vì sao em lại biết đến cái trò cốt kiếc này? Lúc mới sử dụng Ami, em bị dị ứng màu trắng. Mà các bác cũng biết mấy phiên bản Ami trước đây thì phông toàn màu trắng, nên em phải đổi sang phông đen. Các in đi cầy tơ thì màu sắc nó lại phù hợp với màu trắng, mỗi lần kéo ra kéo vô lại phải chỉnh. Em bực mình google mấy hồi thì ra cái này, chính là cái chỉnh sửa nội dung indicator. Hay quá đỡ phải chỉnh màu mỗi lần kéo ra kéo vô. À, nếu muốn chỉnh sửa một con cầy tơ có sẵn, lích phải vào nó rồi edit Ồ nó hiện ra cái bảng này. Em éo thích màu xích lô, em sửa thành vàng, để style đậm đà (styleThick) cho phong cách, nhìn cho rõ. Xong save lại là lần sau có màu vàng phong cách rồi. Còn nếu bác nào muốn nuôi một em cầy tơ mới để thử phương pháp trading, thì thế này. Các bác tìm cái búa Người phán xử nhé. Nó cũng lòi ra cái cửa số giống hình trên nhưng mà còn trinh nguyên. Em lan man thế hết xừ một trang Microsoft doc rồi. Thôi giờ đi vào mấy khái niệm. Ngôn ngữ Amibroker, Amibroker Formula Language hay AFL. Bác nào rảnh cứ Google code afl amibroker ra đầy một lũ. Nhưng không có chén thánh đâu nhé. Nhìn thì hay nhưng biết nó hoạt động thế nào vẫn hơn. À còn một hình nữa là xong thủ tục giới thiệu cửa sổ code nhé các anh em yêu quý Các mảng cơ bản Trước tiên là giá và khối lượng. Bọn lập trình nó gọi là Mảng hay Array. Thôi mình dân chứng cháo cứ giá và vol là ok. O là Open – giá mở cửa trong ngày H là High – giá cao nhất trong ngày L là Low – giá thấp nhất trong ngày C là Close – giá đóng cửa V là Volumne – khối lượng giao dịch ngày Giá cao nhất trong 10 ngày: HHV(H,10); (Cao nhất trong 10 mức giá cao) Giá thấp nhất trong 10 ngày: LLV(L,10); (Thấp nhất trong 10 mức giá thấp) Giá đóng cửa thấp nhất trong 10 ngày: LLV(C,10); Tham chiếu và Tham số Cái này tôi thấy hay dùng (không xưng em với các bác nữa). Hàm tham chiếu (Reference): công thức Ref( ARRAY, period ); Ví dụ Giá đóng cửa ngày hôm qua gán cho biến C1. Tên biến đặt thế nào cũng được. Ví dụ: À các bác mở trên Menu Analysis -> Formula Editor hình cái búa như tôi đã nói ở trên nhé. Có nghĩa là nếu em “nói” (viết công thức) là C>EmLan; nghĩa là giá hôm nay lớn hơn em Lan (Giá đóng hôm qua). Còn nếu giá hôm trước thì là -2, hôm trước nữa là -3, hôm kía hôm kìa thì tiếp tục.. Anh em để ý là nếu viết đúng, Ami sẽ tự nhận ra ngôn ngữ của nó và làm cho chữ đổi màu, chuyển đậm, để phân biệt với những tên hay thông số mà người dùng tự đặt. Chú ý: Dấu chấm phẩy. Dấu chẩm phẩy là quan trọng. Cứ hỏi bọn lập trình Dấu chấm phẩy CUỐI DÒNG là rõ nó phiền thế nào nếu chót quên. Hàm tham số (Parameters): Công thức Anh em xem trang dưới nhé, trang này chật rồi. Param( ''name'', defaultval, min, max, step); Lần lượt: Tên, giá trị mặc định, giá trị nhỏ nhất, giá trị lớn nhất, bước nhảy (ví dụ đặt 1 thì là từ 1 lên 2, đặt là 2 thì từ 1 lên 3, đặt là 10000000 thì là từ 1 lên giời. Thôi các bạn cứ đặt là 1. Còn đặt cao là để đỡ mất thời gian nếu muốn Optimized – tối ưu hóa code, mình sẽ trình bày sau!) Ví dụ: Thoigian = Param("Loi cu ta ve",-15,-100,100,1); Các bác viết tiếp như hình, đặt tên rồi Save lại. Ở phần Custom, chuột phải vào cái mình vừa tạo rồi Insert hoặc cứ kéo trực tiếp vào. Như vậy là đặt mặc định là Thoigian 15 phiên trước hôm nay. Em Lan (giá đóng cửa) trở thành người cũ thứ 15 (âm 15 là 15 phiên kế trước). Em Lan còn có thể là người tình 100 phiên trước đó (giá trị nhỏ nhất) hoặc là 100 phiên sau. Chắc các huynh đệ cũng quen với cái bảng chỉnh thông số mỗi khi kéo đường MA hay Volume vào đồ thị rồi. Thoigian là biến, EmLan cũng là biến, được sử dụng trong quá trình code. Loi cu ta ve là tên hiển thị, như trong hình đó. Vậy có thể chỉnh sửa Lối cũ ta về thành âm mười lăm (-15) hay 10 hay 100 trong khi sử dụng. Mặc định là -15. Hiển thị Chart Công thức: Plot( array, name, color, style, minvalue, maxvalue, XShift); Giải thích Array: Mảng cần hiển thị. Chút nữa các bác sẽ hiểu Name: Tên mình đặt. Sẽ hiển thị trên phần ti tồ (title) ở góc trái trên của chart. Lưu ý tên phải trong ngoặc kép. Color: cách viết: ColorYellow colorred Colorgreen - thích màu gì cho màu đó đằng sau chữ color. Nếu viết đúng thì chữ tự chuyển đậm. Style: cách viết: styleLine (đường nét liền mảnh), styleThick (đường nét liền đậm), styledashed (đường đứt đoạn) Min và max value: Bỏ qua nhé! Viết thành số 0 Dấu chấm phẩy cuối câu nhé! Ví dụ đây, ví dụ đây! Plot(C,"Chikou Span",colorLime,styleLine,0,0,-26); Tôi viết đường Chikou Span theo tinh thần Ichimoku nhé. Đó là đường giá nhưng lùi lại 26 phiên so với thời điểm hiện tại. Như vậy: Plot(Giá, “đặt tên Chikou Span”, màu xanh chanh, kiểu đường mảnh, âm 26 nghĩa là lùi 26 phiên); Các cụ viết như trên rồi Save lần nữa. Kéo vào đồ thị giá. Kết quả như hình: Ví dụ 2: Cổ phiếu vượt đỉnh phá đáy. Các anh em còn nhớ công thức HHV và LLV (Higher high value và Lower low value) mà tôi để ở phần đầu? Tôi sẽ tạo một đường đỉnh và đáy trong 60 ngày (khoảng 3 tháng) nhé. EmQuynh=HHV(H,60); EmChi=LLV(L,60); Plot(EmQuynh,"Dinh cao voi voi",colorWhite,styleDashed); Plot(EmChi,"Vuc sau muon trung",colorWhite,styleDashed); Giải thích: Em Quỳnh là Đỉnh cao vời vợi (60 ngày) còn Em Chi là vực sâu muôn trùng (đáy thấp nhất của các mức giá thấp nhất – 60 ngày). Plot (hiển thị) 2 em ý lên đồ thị (tên biến, tên tiêu đề, màu trắng trinh nguyên, kiểu nét đứt); Các bạn lại save vào và kéo vào đồ thị giá như các bước trên ví dụ trước nhé. À 2 dấu gạch // ở plot Chikou Span để biến dòng đấy thành Comment, không hiển thị nữa. Tôi sẽ nói về vấn đề Comment ở bài sau. Chúng ta đã có một cái khung hay đường band trên dưới hiển thị 2 mức giá cao thấp trong 60 ngày. Nhưng để hiển thị rõ rang hơn, tôi sẽ sửa lại 2 dòng code: EmQuynh=HHV(Ref(H,-1),60); EmChi=LLV(Ref(L,-1),60); Như vậy, Em Quỳnh trở thành vực cao của 60 ngày liền trước TÍNH TỪ ngày hôm qua, có thể hôm nay tôi đã chinh phục được em rồi. Chúng ta chú ý việc để hàm Ref(H,-1) là giá cao nhất ngày hôm qua lồng trong hàm HHV thay cho chỉ một biến H (giá cao). Cẩn thận mấy dấu ngoặc phải đầy đủ với nhau. Lưu lại rồi cùng so sánh 2 đồ thị sau khi sửa code. Lưu ý rằng ở hình trên (sau khi sửa) chúng ta nhìn thấy rõ Vnindex đã phá xuống dưới mức Em Chi, còn bên dưới (Chưa sửa) thì Em Chi chính là vực sâu của giá ngày hôm đó nên khó phát hiện hơn. Đường MA Chúng ta hãy kết thúc bằng một đường quen thuộc là đường trung bình. Tất nhiên nó có sẵn trong Ami rồi. nhưng trong quá trình tự phát triển các ý tưởng của bản thân, chúng ta vẫn nên sử dụng hàm này. MA( ARRAY, periods); Ví dụ: Tôi sẽ lấy đường trung bình động của Khối lượng trong 20 ngày trừ Khối lượng trung bình động 50 ngày. Nhung_ngay_ben_em_Nhi = Param("T1",20,1,200,1); Nhung_ngay_ben_em_Ha = Param("T2",50,1,200,1); EmNhi=MA(V,Nhung_ngay_ben_em_Nhi); EmHa=MA(V,Nhung_ngay_ben_em_Ha); Chenhlech=(EmNhi-EmHa)/EmHa; Plot(Chenhlech,"Dong tien",colorWhite,styleHistogram|styleOwnScale); Plot(EmNhi,"MA Volume 20",colorGreen,styleLine); Plot(EmHa,"MA Volume 50",colorRed,styleLine); Như vậy, tôi vừa tạo ra một công cụ theo phong cách MACD của khối lượng, giúp thấy rõ hơn sự chuyển động của khối lượng giao dịch trung bình. Chúng ta có thể thay đổi 2 thông số 20 và 50 ngày khi sử dụng. Diễn giải phần code: 2 dòng đầu đặt thông số thời gian trung bình. Tiếp theo là công thức MA của khối lượng. Chú ý rằng có thể thay MA (đường trung bình động thường) thành EMA đường trung bình động lũy thừa. Chenhlech chính là mức tang giảm của khối lượng trung bình. Phần dưới Plot hiển thị hình ảnh chart. Chú ý đoạn styleHistogram|styleOwnScale dấu | với chức năng kết hợp kiểu style. StyleOwnScale: vì chênh lệch tính với công thức như trên chỉ loanh quanh số 0, nhưng khối lượng trung bình lại là vài ngàn đến vài triệu nên để cùng với nhau trên một biểu đồ, ta phải yêu cầu Chenhlech một Quy mô riêng (StyleOwnScale). Bạn có thể xóa đoạn styleHistogram|styleOwnScale và thay bằng chỉ có styleHistogram để hiểu thêm. Hướng dẫn Code Amibroker cơ bản - P2 Chia đoạn và commnet Nói một chút về vần đề này! Ở phần trước, tôi có nhắc đến việc comment. Những dòng comment trong đoạn mã của chúng ta thực ra rất quan trọng trong quá trình làm việc. Chúng ta muốn tạo ra một cái gì đó hiệu quả và dễ hiểu. Vấn đề là chúng ta sẽ thường xuyên sửa đổi và đọc đi đọc lại đoạn mã gồm những ký hiệu phức tạp trong quá trình tối ưu hóa nó. Điều đó phức tạp đối với bộ não của chúng ta. Đoạn code là để máy tính đọc, còn anh em ta thích đọc những câu như “Hôm nay tăng ác đấy” hay “múc con đấy nhiệt tình vào” hoặc là “Tây lông bán ác quá”. Ví dụ đoạn mã ở trên, nếu mỗi lần cần phải sửa đổi, sẽ lại phải căng mắt tìm lại từng dòng, không biết rằng cái thằng mình – 5 phút trước – vừa viết cái khỉ ho gì. Nếu chị em lại đưa nó cho anh chàng hàng xóm nhờ xem hộ vấn đề tại sao “nó” tăng ầm ầm mà con robot của em lại báo mua đúng đỉnh, anh chàng cũng sẽ bối rối với mớ bòng bong của bạn. Nếu các bạn còn nhớ đoạn code xác định đáy và đỉnh hôm qua: Chúng ta thêm comment nội dung sau dấu // xem chúng ta đang làm gì ở đoạn đó. Anh em cũng để ý thấy phần đầu và cuối mỗi đoạn với cú pháp: _section_begin(“ghi tên section”); Nội dung _section_end(); Ok nó giúp phân đoạn dễ dàng hơn. Nhưng nếu thắc mắc rằng việc phân đoạn thì comment như trên là được rồi, phải gõ thêm 2 dòng kia làm gì mất công. Chúng ta hãy làm một thử nghiệm nhỏ. Chỉnh sửa đoạn code trên một chút, như thế này: Thêm cú pháp phân đoạn vào để phân đoạn hiển thị em Quỳnh và em Chi. Save lại và kéo sang biểu đồ giá. Nhấp chuột phải, chọn Delete Indicator và đá em Quỳnh ra khỏi cuộc đời mình. Bằng cách phân tách các Section, chúng mình đã tạo ra các Indicator riêng rẽ để có thể làm việc tốt hơn với chart. Cuối cùng, hãy so sánh trên và dưới. Đoạn văn rõ ràng và mạch lạc hơn so với để trần một cục như đoạn dưới. Tập mổ xẻ, phanh thây và học hỏi các tiền bối Nền y học của thế giới sẽ không phát triển như hiện tại nếu không có những thí nghiệm vô nhân tính trên chính con người của những nhà khoa học điên thời cổ. Họ sẵn sàng mổ phanh một người sống chỉ để xem có gì bên trong cơ thể người. Có những người bị kết cho tội phù thủy và bị thiêu sống sau đó. May mắn thay, chúng ta cũng có thể học tập theo cách đó. Trừ phần vô nhân tính. Vọc code của các tiền bối là một cách tích lũy kinh nghiệm thật hữu hiệu. Quý vị google rồi bấm vào link như trên. http://www.wisestocktrader.com/indicators/1180-ichimokuwith-buy-sell Vào trang web, kéo xuống phần FORMULA, ấn Copy and Paste Friendly. Nó đưa mình sang trang mới. Ấn Ctrl + A chọn toàn bộ. Ctrl+C để copy. Chuyển sang Amibroker, mở cửa sổ code mới (tìm hình cái búa hoặc vào Menu Analysis => Formula Editor). Ctrl+P để dán toàn bộ đoạn vừa Copy vào. Đặt tên rồi Save lại. Nào cùng nhau phân tích đoạn code Ichimoku nổi tiếng. Trước khi tiếp tục, xin nói thêm một thủ tục là kiểm tra. Sau mỗi đoạn code hoàn thành, chúng ta sẽ click vào nút này để kiểm tra sản phẩm của mình. Chương trình sẽ báo lỗi nếu phát hiện sai lỗi cú pháp và chỉ vị trí để dễ dàng sửa lại. Tiếp tục với Ichimoku nhé. Đầu tiên xin cảm ơn tác giả! Đầu tiên, lại đầu tiên chúng ta hãy lướt qua một đoạn từ trên xuống dưới. Chúng mình có thể nhận ra tác giả trình bày từng đoạn một rất gọn gàng ngăn nắp. Có comment ở từng phần nội dung (Tuy rằng hình như có lỗi phông chữ). Đọc từng đoạn code ICHIMOKU Phần đầu: Thiết lập các thông số cơ bản. Trên đây là quy tắc cấu tạo các bộ phân trong Ichimoku. Các chị em anh em chịu khó tìm hiểu thêm quy tắc Ichimoku nhé! Còn đây là phần code Đoạn thứ nhất, n1 n2 n3 quy định 3 mốc thời gian là 9, 26, 52. Đoạn thứ 2 là viết công thức theo quy tắc ở trên. Ví dụ đường Tenkan = trung bình của giá cao nhất và giá thấp nhất trong 9 phiên có công thức: Đường Senkou Span A Các bạn tự đọc những dòng còn lại. Đoạn SpA, SpB và DL tôi không hiểu ý của tác giả và có xuất hiện ở bên dưới. Sau bài viết mọi người có thể suy nghĩ thêm! Đoạn điều kiện Từ phần Cond1 Cond2 đến hết vòng lặp for{} (kết thúc ngay trước Alert). Các điều kiện ở phần này làm tiền đề cho những điều kiện và hành động ở sau. Tôi sẽ thử đọc vài dòng. Cond2 = Ref(Close < Min(SenkouSpanA,SenkouSpanB),-1); Ref(...,-1) nghĩa là điều kiện dựa trên dữ liệu phiên liền trước. So sánh giá đóng cửa của phiên đó phải nhỏ hơn giá trị nhỏ nhất (Min) giữa SenkouSpanA và SenkouSpanB của phiên đó. Cond3 = Ref(Cross(TenkanSen,KijunSen),-1); Ở đây, xuất hiện công thức Cross. Cross (cắt qua) có công thức là Cross( ARRAY1, ARRAY2 ): Array 1 cắt lên trên Array2 Ví dụ: Cross(C,MA(C,20)) có nghĩa là Giá đóng cửa CẮT LÊN TRÊN đường MA20 Nếu giá đóng CẮT XUỐNG DƯỚI thì sẽ đặt C ở sau MA(C,20): Cross(MA(C,20),C) Như vậy, điều kiện Cond3 là ở phiên liền trước, đường Tenkan đã cắt lên trên đường Kijun Nhân tiện đây cũng nói thêm: Trong quá trình mổ xẻ các code đã có sẵn của các tiền bối chúng ta sẽ gặp nhiều công thức hay cấu trúc rất lạ. Và câu trả lời cho hầu hết tình huống thường là: CÔNG NGHỆ TÌM KIẾM THẬT TUYỆT VỜI!!!  Tiếp nào Cond7 = Ref(Cross (Close , Max(SenkouSpanA,SenkouSpanB)),-1); Ở công thức này anh em có thể đọc dễ dàng sau khi đã biết cách đọc 2 công thức bên trên. Tại phiên liền trước, giá đóng cửa đã cắt lên trên giá trị cao nhất của SenkouSpanA và B. Ví dụ: đường SenkouSpanA đang ở trên SenkouSpanB ở phiên đó, và giá đó cửa sẽ cắt lên trên đường SenkouSpanA – suy ra là nếu thỏa mãn điều kiện này, giá sẽ thoát khỏi đám mây Kumo theo chiều tăng! Cond9 và Cond10: 3 điều kiện kết hợp với nhau bởi (bọn lập trình nó gọi là toán tử logic) AND. Nghĩa là điều kiện để bố mua gấu cho là con phải được điểm trên 8 cả môn toán AND tiếng việt AND tiếng anh nhé. RemCond9=ExRem(Cond9,NOT Cond9); RemCond10=ExRem(Cond10,NOT Cond10); Điều kiện RemCond9 và RemCond10: Lần đầu tiên xảy ra điều kiện Cond9 đúng và lần đầu tiên điều kiện Cond10 đúng. Phần này phức tạp hơn chút ít, ở bài khác tôi sẽ nói thêm về Exrem. Từ phần ColSenk đến hết vòng lặp for (ngay trên dòng Alert) là các điều kiện quy định màu sắc. Ở đây, có công thức IIF là để đặt giá trị theo điều kiện. Cấu trúc điều kiện If và Cấu trúc vòng lặp for, các bác sẽ thấy giải thích ở các bài sau. Tôi chỉ nói về IIF. IIF dùng để đặt giá trị thỏa mãn một điều kiện nhất định Ví dụ: Trump = iif(C>O,1,0); nghĩa là ông Trump có giá trị = 1 nếu giá đóng>giá mở, nếu < hoặc = thì Trump sẽ = 0 Obama = iif(Cond1,colorblack,colorred); nghĩa là ông Obama sẽ là da đen nếu thỏa mãn điều kiện Cond1, không thỏa mãn thì da đỏ. Ví dụ hiển thị đường MA trên màn hình: Plot(MA(C,20),”MA20”,Obama,styleline); Như vậy, sau khi thay biến màu sắc Obama đã đặt ở trên vào vị trí của color (màu) trong câu lệnh Plot thì đường MA sẽ màu đen khi thỏa mãn điều kiện Cond1, và màu vàng khi không thỏa mãn Cond1. Có thể ghi trực tiếp câu lệnh iif lồng trong Plot như sau: Plot(MA(C,20),”MA20”, iif(Cond1,colorblack,colorred),styleline); Trong một câu lệnh có nhiều đoạn phải mở đóng ngoặc, chúng ta nên cẩn thận. ColSenk =IIf (Cond1,colorGreen, IIf(Cond2,colorRed,colorLightGrey)); Như trong câu lệnh trên, ColSenk chỉ là tên mà tác giả đặt, chắc có ý đồ sử dụng ở phía dưới. Chúng ta dễ thấy câu lệnh IIf quy định màu sắc (tương tự Obama) và có 2 câu lệnh lồng vào nhau. Các huynh hãy thử diễn giải ý nghĩa trước khi đọc tiếp nhé. Nếu thỏa mãn điều kiện Cond1 thì ColSenk là màu xanh lục, nếu không thỏa mãn Cond1 mà thỏa mãn Cond2 thì đỏ, còn không thỏa mãn đk nào thì màu xám trắng. Flat = TenkanSen == Ref(TenkanSen,-1) OR (NOT(Cond1) AND NOT(Cond2)) ; Điều kiện Flat: thỏa mãn khi Tenkan bằng với Tenkan ngày hôm trước Ref(TenkanSen,-1) hoặc là (OR) không thỏa mãn cả điều kiện Cond1 và Cond2 (NOT(Cond1) AND NOT(Cond2)) CHÚ Ý: 1 dấu = là gán giá trị, còn 2 dấu == liền nhau là bằng nhau theo nghĩa đen Nếu viết là Flat == TenkanSen == Ref(TenkanSen,-1) thì ý ta là 3 giá trị trên bằng với nhau. Còn Flat = TenkanSen == Ref(TenkanSen,-1) thì Flat trở thành một điều kiện mới. Câu lệnh Alertif để có chuông thông báo nếu một điều kiện xảy ra. Cái này chủ yếu dùng cho Intraday trading (giao dịch trong ngày) nêu tôi không đi vào phần này do ở thị trường chứng khoán Việt Nam do T+3 nên giao dịch trong ngày có nhiều hạn chế. Phần hiển thị Anh em ta chịu khó kéo xuống, trang dưới. Trang này chật chội quá. Hừm Anh chị em bỏ hết dấu // của đoạn này đi nhé để biến những dòng comment màu xanh thành những dòng lệnh. Sau đó Save lại rồi kéo thử ra màn hình để xem sự thay đổi với đoạn mã gốc. Tôi đọc dòng đầu tiên (sau khi bỏ // ): Hiển thị hình mũi tên chỉ lên trên, dạng tam giác nếu thỏa mãn điều kiện Cond7. Màu xanh lục. Trời ơi tôi lười quá. Qua những gì chúng ta vừa trải qua thì hy vọng các anh em, à à chị em nữa tự tìm hiểu chức năng này nhé. Bác Google luôn biết tuốt: PlotShapes afl Amibroker. https://www.amibroker.com/guide/afl/plotshapes.html Phần Plot bên dưới (bài trước chúng ta đã làm quen với lệnh Plot rồi) hiển thị các đường chính trong Ichimoku mà tác giả thiết lập ở phần đầu. PlotOHLC là hiển thị 4 giá trị Open, High, Low, Close. Tôi có một thủ thuật nho nhỏ là nếu muốn biết một dòng lệnh dạng Plot có ý nghĩa gì, ta cứ việc thêm // ở đầu để biến nó thành comment (comment thì chỉ có tác dụng giải thích, không ảnh hưởng đến lệnh) nhằm mục đích xem cái gì sẽ biến mất trên màn hình. Các điều kiện và lệnh BUY và SELL Ồ xem ra đây đã là gần hết rồi 3 dòng đầu là lệnh gán điều kiện, cũng giống như Cond1 Cond2 Cond3 ở trên thôi nhỉ! 6 dòng cuối cũng là lệnh gán điều kiện, từ StrongBuy (Mua mạnh) đến WeakSell (bán yếu) Mọi người chú ý đến lệnh Buy và Sell Đây cũng là câu lệnh điều kiện trong Amibroker, nhưng là một điều kiện thực thi. Nó khác với các loại gán điều kiện khác (kiểu Cond1 Cond2) ở chỗ: Cond1 chỉ là một thứ (tôi bí từ) mà chúng ta đặt ra, sau đó dùng cái “thứ” điều kiện ấy để làm vật liệu cho các câu lệnh thực thi. Còn Buy và Sell nó ở một đẳng cấp khác. Đường đường là câu lệnh gốc trong Amibroker, nên khi viết Buy hoặc Sell, Ami sẽ nhận ra và in đậm ngay. Buy (mua) khi Tenkan cắt lên trên Kijun và DL lớn hơn giá đóng cửa. Các bạn xem lại giá trị DL ở phần thiết lập trên đầu nhé. Sell các bạn cũng tự đọc nhé. Phần cuối Phần cuối cùng lại là PlotShapes (hy vọng mọi người đã Gu Gồ và hiểu ý nghĩa câu lệnh này). Các câu lệnh PlotShapes ở phần dưới lồng trong lệnh IIF để hiển thị mũi tên báo mua bán, mua yếu mua mạnh, bán yếu bán mạnh. Áp dụng thử thủ thuật thêm dấu // comment để xem tác dụng của các câu lệnh “dạng Plot” như Plot, PlotShapes hay PlotOHLC nhé. 2 câu lệnh cuối cùng chính là để hiển thị dải Ruy-băng ở bên dưới. À giờ thì đã hiểu câu lệnh IIF màu sắc ColSenk ở phía trên rồi! Cảm ơn mọi người! Hướng dẫn code đơn giản Amibroker - P3 *CẨN THẬN: phần đầu nhảm nhí. Anh em kéo xuống trang 2 luôn cũng được, hoặc chịu khó đọc nhé. Xin chào các bạn! Mình vào chủ đề luôn. À thôi, nói phét tý đã, hề hề! Mình cứ đi cóp nhặt linh ta linh tinh, nên mỗi phần lại một đoạn. Mông không ra mông, ngực không ra ngực. Nghĩ gì nói đấy, lại kém về phần tổng hợp nên cách thức nhặt mỗi chỗ một tý cứ như nồi lẩu tả pí lù thập cẩm. Nấu lẩu hải sản, thêm tý thịt gà bò, con cá nát bét xong rồi lại mắm tôm vào gia vị Thái thì hết muốn ăn. Vậy nên hôm nay cũng chia phần ra chút. Nếu nói về việc code Amibroker ra một sản phẩm như thế nào, thì theo ý mình – theo ý mình thôi nhé – có 3 mục đích, hay cách dùng (hay dùng từ thế nào tùy bạn). (1) là tạo ra những công cụ hiển thị diễn giải – (2) là áp dụng hệ thống giao dịch – (3) là lọc lựa cổ phiếu. Nghe tên hơi trừu tượng khó hiểu, cho rằng người viết có vẻ tinh tướng ta đây thích dùng chơi chữ - mình cố tình đấy hề hề. Thật ra không có gì lạ cả, tôi giải thích ngay đây. 1. Các công cụ diễn giải biểu đồ Đây là những “thứ” quen thuộc nhất đối với người dùng Amibroker. Thôi nói thẳng luôn, là mấy indicator như đường MA, chỉ báo giao động RSI, MACD, Bollinger Band, đường ADX, Stochastic, ... được xây dựng theo một công thức nào đó do ông Robert Williams John Kevin Rayer gì đấy nghĩ ra. Nói chung hầu hết những thứ các bạn sử dụng, nhìn thấy trên biểu đồ. Mấy anh bạn phân tích thì vì RSI đã đi từ vùng quá mua sang vùng trung tính, kết hợp với giá chạm bật MA50 và MACD, Stochastic đều cho tín hiệu mua, v.v... rồi cho vào báo cáo môi giới đều sử dụng indicator cũng là dạng này. Hãy nhìn tranh bên dưới! Từ trên xuống dưới: RSI, đồ thị giá, ADX và MACD. Code của RSI, ADX và MACD. (Các bạn click chuột phải vào tên indicator rồi chọn edit để hiện cửa sổ code như trên). Các anh em hãy chú ý đến một câu lệnh rất quen thuộc đối với chúng ta trong 2 bài trước. Đúng vậy, đó là lệnh PLOT. Để hiển thị lên trên biểu đồ, ta dùng lệnh đó. Các Indicator chủ yếu để diễn giải chuyển động của giá hay khối lượng, vì nếu ai không quen nhìn biểu đồ trần (nghĩa là chỉ có giá & khối lượng, không mặc thêm gì hết) thì indicator dùng để giải thích, kiểu như: MA20 nằm trên MA50 thì xu thế tăng ngắn hạn, hay ADX> 50 thì xu hướng (mua hoặc bán) đang mạnh, ... Đầu tiên, chúng ta phải nghĩ ra ta muốn xem cái gì trên con người cô ấy, nghĩa là muốn hiểu cái gì về biểu đồ giá. Như ở bài 1, chúng ta đã cùng nhau tạo ra sự hiển thị các mức giá cao/thấp nhất trong 3 tháng hay biểu đồ “làm mềm” khối lượng.  Bước 1: Tạo ra công thức dựa trên những dữ liệu gốc là giá (O,H,L,C) và khối lượng (V)  Bước 2: Hiển thị bằng lệnh PLOT Ở ví dụ trên, RSI(), ADX(), MACD() là những hàm tính toán có sẵn trong Amibroker, chúng ta chỉ việc thêm thông số vào trong dấu ngoặc () như RSI(14) – cho 14 ngày. Đối với RSI mình cho thêm 2 đường quá mua, quá bán (tôi đặt là 80-20) là nét gạch. Thêm vào đơn giản trong code (các bạn có thể sửa 80-20 thành thông số khác tùy theo): Plot(80,"Overbought",colorYellow,styleDashed); Plot(20,"Oversold",colorYellow,styleDashed); Các indicator cơ bản mình hay sử dụng đều có sẵn trong Amibroker, chỉ việc thêm thông số. Các bạn chịu khó google như cách mình chỉ ở bài trước đối với một công thức chưa hiểu rõ nhé. 2. Hệ thống giao dịch Một hệ thống giao dịch gồm những điều kiện để vào lệnh và thoát lệnh. Theo một cách máy móc – vì chúng ta đang lập trình cho máy thực hiện, chỉ cần đạt đủ các điều kiện là ok, phát tín hiệu. Ở đây chém gió một chút, mặc dù máy móc rất kỷ luật nhưng lại chính là điểm yếu – đó chính là khó thích nghi với những thay đổi của thị trường. (ví dụ như tùy từng loại robo hay hệ thống giao dịch mà phù hợp với thị trường có xu hướng hay thị trường trong khung giao động). Con người dễ thích nghi nhưng cũng chính là điểm yếu – thiếu kỷ luật. Có lẽ nhiều người đã từng nhìn thấy những dạng biểu đồ như thế này: Những mũi tên xanh đỏ đại diện cho những quy tắc chứa những điều kiện cho việc mua/bán được kích hoạt trong code của chúng ta. Theo truyền thống của 2 bài trước, ta hãy viết một code đơn giản nhé. Các bạn đọc trên các website viết thế này Ừ thì ông nói thế biết thế chứ tôi biết thế nào. Lúc đầu đọc mấy dòng này cũng thấy hợp lý mà có hiệu quả không nhỉ? Mở chát, vẽ MA rồi nheo mắt nhìn, a chỗ này cắt, giá lên. A chỗ kia cắt, sao giá không giảm? Nhiều chỗ loạn mắt quá, sao phân biệt? Viết thử code đơn giản giao dịch bằng đường trung bình động (Moving Average) - Đầu tiên, chúng ta xác định đường nhanh và chậm. Tôi sẽ thử với nhanh – 20 ngày. Chậm – 50 ngày. o Các anh em còn nhớ cách đặt thông số chứ? Nhanh = Param("Thoi gian nhanh",20,1,200,1); Cham = Param("Thoi gian cham",50,1,200,1); Tiếp theo sẽ thiết lập 2 đường MA (tôi sẽ dùng EMA – MA lũy thừa thay cho MA đơn giản) MAnhanh=EMA(C,Nhanh); MAcham=EMA(C,Cham); Điều kiện 2 đường cắt nhau: Ở đây có 2 cách Cách 1: Dùng Cross (Cắt nhau) //==Dieu kien DieukienMua= Cross(MAnhanh,MAcham); DieukienBan= Cross(MAcham,MAnhanh); //==Buy and Sell Buy = DieukienMua; Sell = DieukienBan;
- Xem thêm -

Tài liệu liên quan

Tài liệu xem nhiều nhất