Chào bạn,
Đến tận bài 5 mà mình mới giới thiệu đến cấu trúc của một script gồm những gì thì các bạn có bị sốt ruột không :). Thực ra mình muốn nói kĩ về những thứ cơ bản trước, khi đã có nền tảng rồi thì mọi việc về sau sẽ nhanh thôi 🙂
Ở các bài trước các bạn cũng đã biết sơ qua về một scrtip sẽ có phần version, phần comment và phần xác định xem mình đang code indicator hay strategy rồi. Giờ mình sẽ đi vào cụ thể từng phần nhé:
- Phần comment trên cùng: Khi new một indicator thì mặc định ở đây sẽ hiện thông tin lincence và tên tác giả, mình thường viết thêm mô tả chức năng, công dụng của indicator mình định code ở đây để sau này xem lại còn biết mình đang code cái gì
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DucTri_dev // Mô tả cụ thể mình đang code cái gì ở đây, để sau này xem lại // Hoặc nếu bạn code strategy thì có thể mô tả strategy của bạn ở đây
- Phần version: phần này không bắt buộc, nếu bạn không điền gì thì mặc định compiler sẽ hiểu là bạn đang dùng version 1. Nhưng tốt nhất là bạn nên dùng version mới nhất của pinescript và code theo đúng cú pháp của version mới nhất
//@version=5
- Phần xác định loại của script mình sẽ code: Phần này bắt buộc, script của bạn phải thuộc 1 trong 3 loại sau
- Indicator
- Strategy
- Library
Indicator và strategy thì mình cũng ví dụ qua rồi, còn lirary thì chắc các bạn chưa cần dùng đến đâu.
Trong câu lệnh indicator() có rất nhiều những tham số bên trong, khi nào cần dùng cái nào thì mình sẽ nói cụ thể cái đó, chứ giới thiệu trước mà chưa dùng ngay thì các bạn cũng sẽ quên thôi 🙂
indicator(title, shorttitle, overlay, format, precision, scale, max_bars_back, timeframe, timeframe_gaps, explicit_plot_zorder, max_lines_count, max_labels_count, max_boxes_count, calc_bars_count, max_polylines_count) // rất nhiểu các tham số khác nhau, mình sẽ giới thiệu một vài tham số quan trọng trước nhé
indicator(title = "Hello World", shorttitle = "Hello" ,overlay = true) //title: tên khi bạn search indicator //shorttitle: tên hiển thị trên chart //overlay = true: indicator sẽ hiển thị cũng với biểu đồ giá //mặc định overlay = false: indicator sẽ hiện thị ở một pane bên dưới
Tiếp theo sẽ đến phần logic code của các bạn. Trong này mình cũng sẽ chia thành các phần nhỏ hơn cho dễ quản lý.
- User input: Thường thì indicator của bạn sẽ cho phép người dùng thay đổi một setting nào đó. Ví dụ như thay đổi độ dài của đường EMA. Thì mình hay code toàn bộ phần User Input ở đầu tiên
- Phần tính toán các giá trị indicator : Tiếp theo sẽ là phần tính toán giá trị các indicator. Có thể là các indicator mặc định, hoặc có thể là các indicator mà bạn tự định nghĩa ra. Ở đây mình ví dụ một tính toán đơn giản để vẽ ra đường MACD
// --- Indicator Calculation --- fastMA = ta.ema(close, inpfastEMALen) slowMA = ta.ema(close, inpSlowEMALen) macd = fastMA - slowMA signal = ta.ema(macd, 9)
- Tiếp theo sẽ đến phần functions. Khi code của bạn phức tạp hơn thì bạn sẽ cần viết rất nhiều những function. Nhưng hiện tại thì các bạn có thể chưa cần quan tâm đến.
- Cuối cùng là phần vẽ lên màn hình: Tất cả những gì cần vẽ lên màn hình thì mình sẽ code ở phần cuối cùng này.
// --- Draw --- plot(macd, color = color.blue) plot(signal, color = color.orange)
Cuối cùng bạn sẽ có được một đoạn code như sau:
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DucTri_dev // Mô tả cụ thể mình đang code cái gì ở đây, để sau này xem lại // Hoặc nếu bạn code strategy thì có thể mô tả strategy của bạn ở đây //@version=5 indicator(title = "Hello World", shorttitle = "Hello" ) //title: tên khi bạn search indicator //shorttitle: tên hiển thị trên chart //overlay = true: indicator sẽ hiển thị cũng với biểu đồ giá //mặc định overlay = false: indicator sẽ hiện thị ở một pane bên dưới // --------- Code logic của bạn sẽ ở ở đây --------- // --- User input --- // thường thì indicator của bạn sẽ cho phép người dùng thay đổi một setting nào đó // Ví dụ như thay đổi độ dài của đường SMA // thì mình hay code toàn bộ phần User Input ở đầu tiên inpfastEMALen = input.int(12, title = "Fast EMA") inpSlowEMALen = input.int(26, title = "Slow EMA") // --- Indicator Calculation --- fastMA = ta.ema(close, inpfastEMALen) slowMA = ta.ema(close, inpSlowEMALen) macd = fastMA - slowMA signal = ta.ema(macd, 9) // --- Functions --- //@function ví dụ một function đơn giản: cộng 2 số lại với nhau //@returns tổng của 2 số fAddition(a ,b) => a + b // sau này khi cần code nhiều function thì nên code tập trung tại 1 chỗ cho dễ quản lý // --- Draw --- // tất cả những gì cần vẽ lên màn hình mình sẽ code hết ở đây plot(macd, color = color.blue) plot(signal, color = color.orange) // --- Alert --- //sau này nếu có cần code thêm alert thì cũng nên code tập trung tại 1 chỗ
Tổ chức code thành từng phần nhỏ như này sẽ rất thuận tiện cho việc xem lại hoặc chỉnh sửa sau này. Khi code của bạn trở nên phức tạp hơn thì bạn sẽ thấy tác dụng rất rõ của việc code có tổ chức ngay từ ban đầu.
Okay,
Bài hôm nay chắc đến đây thôi, bài tiếp theo mình sẽ nói về Time series, một khái niệm vô cùng quan trọng trong pinescript. Các bạn chú ý theo dõi nhé .
Hẹn gặp lại các bạn !
Leave a Reply