Giới thiệu

Nếu không có các công cụ giao dịch phù hợp, bạn sẽ không thể thực hiện phân tích kỹ thuật một cách hiệu quả. Một chiến lược giao dịch đúng đắn sẽ giúp bạn tránh những sai lầm phổ biến, cải thiện hiệu quả quản lý rủi ro, cũng như nâng cao khả năng xác định và tận dụng cơ hội.

Đối với nhiều người, TradingView là nền tảng lập biểu đồ toàn diện. Với một loạt công cụ phân tích kỹ thuật, ứng dụng web HTML5 mạnh mẽ này được hàng triệu người sử dụng để theo dõi biến động trên thị trường Forex, tiền mã hoá và thị trường chứng khoán truyền thống.

TradingView có nhiều tính năng hữu ích: cho phép người dùng theo dõi tài sản trên nhiều nền tảng giao dịch và công khai ý tưởng giao dịch trong mạng xã hội của TradingView. Trong bài viết này, chúng tôi sẽ tập trung vào khả năng tùy chỉnh của nền tảng này. Chúng tôi sẽ sử dụng Pine Script, ngôn ngữ kịch bản riêng của TradingView, cho phép chúng tôi kiểm soát chi tiết bố cục biểu đồ.

Cùng bắt đầu thôi!


Pine Script là gì?

Pine Script là ngôn ngữ kịch bản có thể dùng để sửa đổi biểu đồ trên TradingView. Nền tảng này đã trang bị cho bạn nhiều tính năng để thực hiện việc này, nhưng Pine Script còn cho phép bạn tiến thêm một bước nữa. Cho dù bạn muốn thay đổi màu sắc của nến hay kiểm tra lại một chiến lược mới, Pine Editor sẽ cho phép bạn tùy chỉnh biểu đồ theo thời gian thực khi thấy phù hợp.

Bản thân mã được thiết kế một cách hoàn hảo, vì vậy hãy nhớ xem hướng dẫn sử dụng để biết thêm thông tin. Mục tiêu của chúng tôi trong hướng dẫn này là thảo luận về một số kiến thức cơ bản và giới thiệu các chỉ báo có thể hữu ích khi giao dịch tiền mã hóa.


Thiết lập

Bạn có thể bắt đầu dễ dàng với Pine Script. Mọi mã chúng tôi viết đều chạy trên máy chủ của TradingView, vì vậy bạn có thể truy cập trình chỉnh sửa và phát triển các tập lệnh của mình từ trình duyệt – mà không cần tải xuống hoặc cấu hình thêm.

Trong hướng dẫn này, chúng tôi sẽ lập biểu đồ cặp tiền Bitcoin/Binance USD (BTCBUSD). Nếu bạn chưa có, hãy tạo một tài khoản miễn phí (cũng có cả gói đăng ký pro, nhưng không cần thiết với hướng dẫn này). 

Nhấn vào liên kết này và bạn sẽ thấy một biểu đồ giống như bên dưới:


Biểu đồ BTCBUSD trên TradingView

Biểu đồ của bạn có thể sẽ mới hơn bản của chúng tôi.


Tại đây, chúng tôi sẽ sử dụng biểu đồ đầy đủ tính năng – nhấp vào nút để truy cập. Biểu đồ này cung cấp cho chúng tôi thông tin chi tiết hơn nhiều, công cụ vẽ và tùy chọn để vẽ đường xu hướng, v.v.


Biểu đồ BTCBUSD đầy đủ tính năng trên TradingView

Biểu đồ đầy đủ tính năng. Bạn có thể điều chỉnh khung thời gian bằng cách nhấp vào chế độ xem phía trên tab được đánh dấu.


Chúng tôi sẽ không thảo luận về cách sử dụng các công cụ có sẵn, nhưng nếu muốn phân tích kỹ thuật một cách nghiêm túc, bạn nên tìm hiểu về các công cụ này. Ở phía dưới bên trái (được trình bày trong hình), bạn sẽ thấy một vài tab khác nhau – hãy nhấp vào Pine Editor.


Pine Editor


ảnh chụp màn hình Pine Editor


Trình chỉnh sửa này thực sự hữu ích. Chúng tôi sẽ nêu những gì chúng tôi muốn làm, sau đó nhấp vào Thêm vào biểu đồ để xem phần chú thích của chúng tôi xuất hiện ở trên. Xin lưu ý rằng mọi thứ có thể trở nên lộn xộn nếu chúng tôi đưa nhiều chú thích vào cùng một lúc, vì vậy chúng tôi sẽ xóa chú thích trong các ví dụ (nhấp chuột phải vào biểu đồ > Remove Indicators).

Bạn có thể thấy chúng tôi đã có vài dòng mã ở đó. Hãy nhấp vào Add to Chart để xem điều gì sẽ xảy ra.


Thêm tập lệnh đầu tiên vào biểu đồ trên TradingView


Một biểu đồ thứ hai được thêm vào bên dưới bản gốc. Biểu đồ mới đại diện cho cùng một dữ liệu. Di chuột qua My Script và nhấp vào dấu gạch chéo để xóa. Bây giờ, chúng ta sẽ đi sâu vào mã.

study("My Script")

Dòng đầu tiên này chỉ là tạo chú thích. Dòng này chỉ yêu cầu bạn đặt tên bạn muốn cho chỉ báo (trong trường hợp này là "My Script"), nhưng cũng có một số tham số (không bắt buộc) mà bạn có thể thêm. Một trong số đó là lớp phủ, yêu cầu TradingView đặt chỉ báo lên biểu đồ hiện có (thay vì trong một phân đoạn mới). Như bạn có thể thấy trong ví dụ đầu tiên, hệ thống mặc định là false. Mặc dù chúng ta sẽ không thấy lớp phủ hiển thị ngay bây giờ, nhưng overlay=true sẽ thêm chỉ báo vào biểu đồ hiện có.

plot(close)

Dòng này là chỉ thị vẽ giá đóng cửa của Bitcoin. plot chỉ đơn giản là cung cấp cho chúng tôi biểu đồ đường, nhưng chúng tôi cũng có thể hiển thị biểu đồ nến và thanh, như bạn sẽ thấy ngay sau đây. 

Bây giờ, chúng ta hãy thử dòng mã sau:

//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)

Sau khi thêm dòng mã này, bạn sẽ thấy biểu đồ thứ hai (trông giống như biểu đồ ban đầu được chuyển sang bên phải). Thay vào đó, tất cả những gì chúng tôi đã làm là vẽ giá mở cửa và do giá mở cửa của ngày hiện tại là giá đóng cửa của ngày hôm trước, nghĩa là chúng có hình dạng giống hệt nhau.

Được rồi! Hãy xóa các chú thích hiện tại (hãy nhớ, chúng tôi làm điều đó bằng cách nhấp chuột phải và nhấn Remove Indicators). Di chuột qua Bitcoin/BUSD và nhấp vào nút Hide để xóa cả biểu đồ hiện tại.

Nhiều trader thích biểu đồ hình nến vì chúng cung cấp nhiều thông tin hơn là biểu đồ đơn giản như biểu đồ chúng tôi vừa làm. Tiếp theo, chúng tôi sẽ thêm dòng mã sau. 

//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)

Khởi đầu rất tốt, nhưng thiếu màu sắc khiến biểu đồ trở nên hơi nhạt nhẽo. Tốt nhất, chúng ta nên sử dụng nến đỏ khi giá mở cửa cao hơn giá đóng cửa trong khung thời gian nhất định và nến màu xanh lá cây nếu giá đóng cửa cao hơn giá mở cửa. Chúng tôi sẽ thêm một dòng mã phía trên hàm plotcandle():

//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close)

Biểu đồ này sẽ xem mọi thanh nến và kiểm tra xem giá mở cửa lớn hơn hay bằng giá đóng cửa. Nếu đúng như vậy, điều đó nghĩa là giá đã giảm trong khoảng thời gian này, vì vậy nến sẽ được tô màu đỏ. Nếu ngược lại, nến sẽ được tô màu xanh lá cây. Sửa hàm plotcandle() để đưa quy tắc màu này vào:

//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close, color=colors)

Hãy xóa các chỉ báo hiện tại nếu bạn chưa xóa và thêm chỉ báo này vào biểu đồ. Giờ chúng ta sẽ có một biểu đồ hình nến thông thường.


Biểu đồ nến trên TradingView

Thật tuyệt!


Vẽ đường trung bình động (MA)

Chúng tôi đã có một số đường cơ bản. Hãy chuyển sang chỉ báo tùy chỉnh đầu tiên – đường trung bình động hàm mũ, hay còn gọi là EMA. Đây là một công cụ có giá trị do nó cho phép chúng tôi lọc bỏ mọi tín hiệu nhiễu thị trường và làm mượt hành động giá. 

EMA hơi khác với đường trung bình động đơn giản (SMA) ở chỗ EMA tập trung vào dữ liệu gần đây nhất. EMA có xu hướng phản ứng mạnh hơn với các biến động đột ngột và thường được dùng cho giao dịch ngắn hạn (ví dụ: giao dịch trong ngày).


Đường trung bình động đơn giản (SMA)

Chúng tôi cũng có thể vẽ SMA, để có thể so sánh cả hai sau. Hãy thêm dòng mã này vào tập lệnh của bạn:

plot(sma(close, 10))

Dòng mã này vẽ mức trung bình của mười ngày trước đó. Chỉnh số trong ngoặc để xem đường cong thay đổi như thế nào khi xem xét các độ dài khác nhau.


Đường trung bình động đơn giản dựa trên 10 ngày trước

SMA, dựa trên mười ngày trước đó.


Đường trung bình động hàm mũ (EMA)

EMA sẽ khó hiểu hơn một chút, nhưng đừng lo. Trước tiên, hãy chia nhỏ công thức:

EMA = (Giá đóng cửa - EMA của ngày hôm trước) * Hệ số nhân - EMA của ngày hôm trước

Vậy thì công thức này cho chúng ta biết điều gì? Mỗi ngày, chúng tôi lại tính toán một đường trung bình động mới dựa trên đường trung bình động của ngày hôm trước. Hệ số nhân “đo sức nặng” của khoảng thời gian gần đây nhất và được tính theo công thức sau:

Hệ số nhân = 2 / (Độ dài của EMA + 1)

Đối với đường trung bình động đơn giản, chúng ta cần xác định độ dài của EMA. Về mặt cú pháp, hàm vẽ EMA tương tự như hàm vẽ SMA. Chúng tôi vẽ EMA cùng với SMA để bạn có thể so sánh cả hai:

//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close,10))


EMA và SMA trên một biểu đồ TradingView

Bạn có thể thấy sự khác biệt nhỏ trong hai loại MA.


➠ Bạn muốn bắt đầu hành trình với tiền mã hoá? Mua Bitcoin trên Binance!


Tập lệnh cài sẵn

Cho đến giờ, chúng tôi đã viết mã theo cách thủ công để bạn có thể hiểu rõ. Nhưng chúng tôi sẽ giới thiệu cách khác giúp bạn tiết kiệm thời gian, đặc biệt nếu bạn đang viết tập lệnh phức tạp hơn và không muốn làm lại từ đầu.

Ở phía trên bên phải của trình chỉnh sửa, nhấp vào New. Bạn sẽ thấy menu thả xuống hiển thị tất cả các loại chỉ báo kỹ thuật. Nhấp vào Moving Average Exponential để xem mã nguồn mở của chỉ báo EMA.



Đường trung bình động hàm mũ trong Pine Script

Tiếp tục và thêm dòng mã này vào biểu đồ.


Dòng mã này khác với dòng mã của chúng tôi – bạn sẽ nhận thấy hàm input(). Đây là hàm hữu ích nếu nhìn từ góc độ khả năng sử dụng vì bạn có thể nhấp vào hộp này…


Sửa đổi biểu đồ trên giao diện TradingView


...và dễ dàng thay đổi một số giá trị trong cửa sổ bật lên bằng cách nhấp vào biểu tượng Cài đặt.


thay đổi dữ liệu đầu vào của EMA


Chúng tôi sẽ thêm một số hàm input() trong tập lệnh tiếp theo để chứng minh điều này.


Vẽ chỉ báo Chỉ số sức mạnh tương đối (RSI)

Chỉ số sức mạnh tương đối (RSI) là một chỉ báo thiết yếu khác trong phân tích kỹ thuật. Được gọi là chỉ báo động lượng, chỉ báo này đo lường tốc độ mà tài sản được mua và bán. Với thang điểm từ 0 đến 100, điểm RSI cho nhà đầu tư biết tài sản đang quá mua hay quá bán. Thông thường, một tài sản có thể được coi là quá bán nếu có điểm số nhỏ hơn hoặc bằng 30 và được coi là quá mua nếu điểm số lớn hơn hoặc bằng 70.

Nếu bạn chuyển đến mục New > RSI Strategy, bạn có thể thấy điều này. RSI thường được đo theo khoảng thời gian 14 (tức là 14 giờ hoặc 14 ngày), nhưng bạn có thể thoải mái điều chỉnh cài đặt đó cho phù hợp với chiến lược của bạn.

Thêm chỉ báo này vào biểu đồ. Bạn sẽ thấy một vài mũi tên được hiển thị ngay bây giờ (được xác định bằng hàm strategy.entry() trong mã). RsiLE cho biết cơ hội tiềm năng để long tài sản khi tài sản có thể quá bán. RsiSE làm nổi bật các điểm mà bạn có thể short tài sản khi tài sản quá mua. Xin lưu ý rằng, đối với mọi chỉ báo, bạn không nhất thiết phải dựa vào những tín hiệu này để chắc chắn rằng giá sẽ giảm/tăng.


Kiểm tra lại

Có một cách để bạn kiểm tra các chỉ báo tùy chỉnh. Mặc dù hiệu suất trong quá khứ không đảm bảo kết quả trong tương lai, nhưng việc kiểm tra lại các tập lệnh có thể cho bạn biết chúng có hiệu quả như thế nào trong việc thu thập tín hiệu. 

Chúng tôi sẽ đưa ra ví dụ về một tập lệnh đơn giản bên dưới. Chúng tôi sẽ tạo ra một chiến lược đơn giản để vào vị thế long khi giá BTC giảm xuống dưới mức 11.000 USD và thoát khỏi vị thế khi giá vượt quá mức 11.300 USD. Sau đó, bạn có thể thấy chiến lược này tạo lợi nhuận như thế nào trong quá khứ.

//@version=4 strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) price = close if (price <= enter)     strategy.entry("BuyTheDip", strategy.long, comment="BuyTheDip") if (price >= exit)     strategy.close_all(comment="SellTheNews")

Ở đây, chúng tôi xác định entryexit là các biến – cả hai đều là dữ liệu đầu vào, nghĩa là chúng tôi có thể thay đổi chúng trên biểu đồ sau này. Chúng tôi cũng đặt biến price, lấy giá đóng cửa của từng khoảng thời gian. Sau đó, chúng tôi sử dụng một số logic dưới dạng câu lệnh if. Nếu phần trong ngoặc là true, thì khối được thụt lề bên dưới sẽ chạy. Nếu không, sẽ bị bỏ qua.

Vì vậy, nếu giá nhỏ hơn hoặc bằng giá vào lệnh mong muốn của chúng tôi, biểu thức đầu tiên sẽ đánh giá là true và chúng tôi sẽ mở vị thế long. Khi giá bằng hoặc vượt quá giá thoát lệnh mong muốn, khối thứ hai sẽ được kích hoạt, đóng tất cả các vị thế đang mở. 

Chúng tôi sẽ chú thích biểu đồ bằng các mũi tên cho biết điểm vào/thoát lệnh, do đó, chúng tôi đã định rõ nhãn sẽ gắn cho các điểm này bằng tham số comment (trong ví dụ này là “BuyTheDip” và “SellTheNews”). Sao chép mã và thêm mã vào biểu đồ.


chỉ báo đang hoạt động trên biểu đồ TradingView

Giờ bạn có thể nhìn thấy các chỉ báo trên biểu đồ. Bạn nên thu nhỏ biểu đồ lại.


TradingView sẽ tự động áp dụng các quy tắc cho dữ liệu trước đây. Bạn cũng sẽ nhận thấy TradingView chuyển từ Pine Editor sang tab Trình Strategy Tester. Việc này cho phép bạn xem thông tin tổng quan về lợi nhuận tiềm năng của mình, danh sách giao dịch và hiệu suất của từng giao dịch.


Công cụ kiểm tra chiến lược trên TradingView

Các vị thế chúng tôi đã vào và thoát.


Liên kết

Đã đến lúc viết tập lệnh của riêng bạn bằng cách sử dụng một số khái niệm từ đầu đến giờ. Chúng tôi sẽ kết hợp EMA và RSI và sử dụng giá trị của chúng để tô màu cho nến, cung cấp thông tin chi tiết mà chúng tôi có thể dễ dàng hình dung. 

Nội dung này không nên được hiểu là lời khuyên tài chính – không có cách chính xác khách quan nào để sử dụng chỉ báo này. Giống như mọi chỉ báo khác, bạn nên sử dụng chỉ báo này với các công cụ khác để phát triển chiến lược của riêng mình.

Giờ chúng ta sẽ thao tác trên tập lệnh mới. Hãy xóa tất cả chỉ báo khỏi biểu đồ và ẩn cả biểu đồ Bitcoin/BUSD để chúng ta có một khung thao tác hoàn toàn mới.

Hãy bắt đầu bằng cách xác định nghiên cứu của chúng tôi. Bạn có thể đặt bất kỳ tên nào bạn muốn, chỉ cần nhớ đặt overlay=true.

study(title="Binance Academy Script", overlay=true)

Hãy nhớ công thức EMA của chúng tôi trong phần trước đó. Chúng ta cần cung cấp hệ số nhân với độ dài của EMA. Hãy làm cho nó trở thành input yêu cầu nhập số nguyên (vì vậy, không có chữ số thập phân). Chúng tôi cũng sẽ đặt giá trị tối thiểu, có thể là (minval) và giá trị mặc định (defval).

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)


Bằng cách sử dụng biến mới này, chúng tôi có thể tính toán giá trị EMA cho mỗi cây nến trong biểu đồ:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)


Tuyệt vời. Đến RSI. Chúng tôi sẽ cung cấp độ dài cho RSI theo cách tương tự:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)

Giờ chúng tôi có thể tính giá trị:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength)

Trong giai đoạn này, chúng ta sẽ kết hợp logic tô màu cho nến tùy vào giá trị EMA và RSI. Giả sử tình huống khi (a) giá đóng cửa của nến vượt quá đường EMA và (b) khi chỉ báo RSI trên 50.

Tại sao? Bạn có thể quyết định sử dụng kết hợp các chỉ báo này để biết khi nào nên mua hoặc bán Bitcoin. Ví dụ: có thể bạn sẽ cho rằng đáp ứng cả hai điều kiện này đồng nghĩa với việc đây là thời điểm thích hợp để vào vị thế long. Hoặc ngược lại, bạn có thể sử dụng chỉ báo này để biết khi nào không nên short, ngay cả khi các chỉ số khác nói khác.

Do đó, dòng mã tiếp theo sẽ như thế này:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red

Nếu chúng ta dịch dòng mã này ra, nó chỉ đơn thuần có nghĩa là nếu giá trị EMA vượt quá giá đóng cửa điểm số RSI vượt quá 50, nến sẽ được tô màu xanh lá cây. Nếu ngược lại, nến sẽ được tô màu đỏ. 

Tiếp theo, vẽ EMA:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA")

Cuối cùng, vẽ nến, hãy nhớ đưa cả tham số color vào:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)

Đó chính là tập lệnh! Hãy thêm tập lệnh này vào biểu đồ để xem biểu đồ sẽ trông như thế nào.


Tập lệnh đang hoạt động trên Tradingview

Biểu đồ BTC/BUSD có chỉ báo EMA/RSI.


Tổng kết

Trong bài viết này, chúng tôi đã giới thiệu cho bạn một số ví dụ cơ bản về những gì bạn có thể làm với Pine Editor trên TradingView. Giờ bạn có thể tự tin tạo chú thích đơn giản cho biểu đồ giá để có thêm thông tin chi tiết từ các chỉ báo của riêng mình.

Ở đây, chúng tôi chỉ quan tâm đến một vài chỉ báo, nhưng bạn cũng có thể dễ dàng tạo ra các chỉ báo phức tạp hơn – bằng cách chọn tập lệnh cài sẵn từ mục New hoặc tự viết tập lệnh.

Bạn đang thiếu ý tưởng? Các bài viết sau có thể cung cấp cho bạn một số ý tưởng cho dự án tiếp theo: