Professional Documents
Culture Documents
Pine Script
Pine Script
Mục lục
Tạo chiến lược dựa trên các yếu tố alpha như tình cảm, tiền điện tử, hành động của công
ty và dữ liệu vĩ mô (dữ liệu do QuantConnect cung cấp).
Kiểm tra lại và giao dịch nhiều loại tài sản và ETF ngành (dữ liệu do QuantConnect cung
cấp).
Chiến lược cấp phép cho quỹ đầu cơ (trong khi bạn giữ IP) thông qua Luồng Alpha của
QuantConnect.
Có một số tùy chọn một cú nhấp chuột để đăng ký hoặc sử dụng phương pháp email / mật khẩu
truyền thống.
Có tài khoản cho phép bạn lưu các tập lệnh của mình vào đám mây TradingView và cung cấp
khả năng thêm các chỉ báo tùy chỉnh vào biểu đồ của bạn.
Sau khi đăng ký, hãy khởi chạy nền tảng biểu đồ bằng cách nhấp vào biểu đồ trong menu hoặc
bằng cách điều hướng đến www.tradingview.com/chart
Một màn hình sẽ bật lên trông giống như hình dưới đây.
Trong tập lệnh Pine, bạn sẽ tạo một chỉ báo hoặc một chiến lược. Chúng tôi sẽ thảo luận rộng rãi
về sự khác biệt trong bài viết này.
Nếu bạn đang theo dõi, màn hình bạn đang xem bây giờ là tập lệnh bắt đầu mặc định để tạo chỉ
báo.
Hãy chạy qua nó từng dòng một.
// Mã nguồn này tuân theo các điều khoản của Giấy phép Công cộng
Mozilla 2.0 tại https://mozilla.org/MPL/2.0/
Dòng đầu tiên chỉ đơn giản là một nhận xét. Các chú thích trong tập lệnh Pine bắt đầu bằng hai
dấu gạch chéo về phía trước.
// © JigneshDavda
Dòng thứ hai cũng là một nhận xét, nó được tự động điền với tên người dùng TradingView của
bạn.
// @ version = 4
Ở dòng thứ tư, bạn có thể cho rằng chúng tôi có một nhận xét khác. Tuy nhiên, dòng này có một
chút khác biệt.
Đây được gọi là một chỉ thị trình biên dịch. Nó cho phép trình biên dịch biết chúng ta muốn sử
dụng phiên bản Pine script nào.
Bạn có thể bỏ qua hai dòng chú thích đầu tiên nếu muốn, nhưng chỉ thị trình biên dịch là bắt
buộc trong tất cả các tập lệnh.
study ("My Script")
Dòng 5 là một khai báo. Đây là nơi bạn chỉ định xem bạn có đang tạo một chỉ báo còn được gọi
là một nghiên cứu hay không.
Giải pháp thay thế là tạo ra một chiến lược, nhưng chúng tôi sẽ bắt đầu với nghiên cứu.
Phần thứ hai của Dòng 5, trong dấu ngoặc kép, là tên mà chúng tôi sẽ gán cho nghiên cứu cụ thể
này. Mặc định là Tập lệnh của tôi.
plot (đóng)
Dòng 6 chứa lệnh plot. Như bạn có thể đã đoán, điều này yêu cầu TradingView vẽ một biến cụ
thể.
Trong trường hợp này, biến đóng sẽ được vẽ biểu đồ. Đây là một biến tích hợp có chứa giá
đóng cửa của thanh mới nhất.
Hãy nhấn Thêm vào biểu đồ ở phía trên bên phải của trình chỉnh sửa Pine.
Để biết thêm thông tin chi tiết, bạn có thể khởi chạy cửa sổ trợ giúp. Để thực hiện việc này, hãy
nhấn CTRL trong khi nhấp vào chức năng trên PC. Hoặc, trên máy Mac, nhấn CMD trong khi
nhấp vào chức năng.
Hàm trợ giúp làm rõ cú pháp và thậm chí có các ví dụ hữu ích.
security ("AAPL", "D", close)
Chúng tôi đã sử dụng cú pháp tương tự như ví dụ trong đoạn mã trên. Giá trị đầu tiên trong hàm
bảo mật là biểu tượng mã đánh dấu là AAPL.
Sau đó, chúng tôi đặt khung thời gian thành hàng ngày. Và cuối cùng, chúng tôi đã nói với Pine
script rằng chúng tôi quan tâm đến giá đóng cửa.
Chúng ta có thể lưu giá trị trả về của hàm vào một biến.
apple_price = security ("AAPL", "D", close)
Bây giờ, biến apple_price sẽ chứa giá đóng hàng ngày mới nhất của cổ phiếu Apple.
Các nghiên cứu được tạo trong tập lệnh Pine cần phải có ít nhất một đầu ra, nếu không tập lệnh
này sẽ tạo ra lỗi trình biên dịch.
Hãy vẽ biểu đồ của biến của chúng ta để nó thỏa mãn quy tắc tập lệnh Pine về việc có một đầu
ra.
plot (apple_price)
Sau khi lưu và thêm vào biểu đồ, đây là màn hình của chúng ta trông như thế nào.
Bây giờ chúng ta có biểu đồ giá đóng cửa hàng ngày của Apple trong cửa sổ dữ liệu trong khi
cửa sổ chính hiển thị biểu đồ hình nến của Microsoft.
Mã đầy đủ:
// @ version = 4
study ("price of Apple")
// Nhận giá của Apple
apple_price = security ("AAPL", "D", close)
plot (apple_price)
plot (apple_sma)
Đường trung bình động đơn giản của Apple hiện được vẽ trên cửa sổ dữ liệu của chúng ta.
Đường trung bình động thường được vẽ trên biểu đồ chính. Chúng tôi có thể đạt được điều đó
với một sửa đổi nhỏ trong mã của chúng tôi.
study ("Nhận 20 SMA của Apple", overlay = true)
Bằng cách thêm overlay = True vào khai báo nghiên cứu, chúng tôi có thể vẽ biểu đồ dữ
liệu của mình trực tiếp vào cửa sổ biểu đồ chính thay vì cửa sổ dữ liệu.
Mã đầy đủ:
// @ version = 4
study ("Nhận 20 SMA của Apple")
Làm thế nào để kiểm tra lại một chiến lược chéo trung bình động với Pine Script?
Chúng tôi đã xem xét các chỉ số, hay còn được gọi là một nghiên cứu. Hãy cùng xem các chiến
lược trong Pine script.
Trong ví dụ tiếp theo, chúng tôi sẽ tạo chiến lược chéo qua đường trung bình động với một vài
tham số bổ sung. Sau đó, chúng tôi sẽ kiểm tra lại chiến lược trong TradingView.
// @ version = 4
strategy ("My Strategy", overlay = true)
Để tạo một chiến lược, chúng tôi hoán đổi phần khai báo nghiên cứu với phần khai báo chiến
lược.
// Tạo chỉ báo
shortSMA = sma (close, 10)
longSMA = sma (close, 30)
Điều đầu tiên chúng ta muốn làm là tạo hai đường trung bình động và gán dữ liệu cho các biến.
rsi = rsi (đóng, 14)
Chúng tôi cũng sẽ tạo một chỉ báo RSI sẽ được sử dụng để xác nhận các mục nhập và thoát của
chúng tôi.
Chiến lược này sẽ được chạy trên biểu đồ chính nên chúng ta không cần sử dụng hàm security ()
ở đây.
Tiếp theo, chúng tôi muốn xác định các điều kiện giao nhau của chúng tôi. May mắn thay,
TradingView đã có một chức năng tích hợp cho điều đó, vì vậy chúng tôi không cần phải viết mã
theo cách thủ công.
// Chỉ định điều kiện chéo
longCondition = chéo (shortSMA, longSMA)
shortCondition = chéo (shortSMA, longSMA)
Chúng ta có hai điều kiện, điều kiện đầu tiên là khi SMA ngắn, 10 chu kỳ, vượt lên trên SMA 30
chu kỳ dài hơn.
Điều kiện thứ hai là ngược lại vì chúng tôi đã sử dụng chức năng crossunder trái ngược với chéo.
Cả hai điều kiện này đều được lưu vào các biến. Vì vậy, khi xảy ra sự giao nhau hoặc kết hợp
chéo, các biến này sẽ được cập nhật thành True, một giá trị Boolean.
Chúng ta có thể sử dụng câu lệnh if để kiểm tra xem điều kiện có được thay đổi thành True hay
không và sau đó thực hiện giao dịch dựa trên trường hợp đó.
if (longCondition)
strategy.entry ("long", strategy.long, 100, when = rsi> 50)
Hàm strategy.entry tích hợp được sử dụng để nhập giao dịch. Đây là các tham số được
truyền vào hàm.
1. "Long" - đây là ID thương mại. Chúng tôi sẽ không sử dụng nó trong ví dụ này. Tuy
nhiên, nếu bạn định đóng hoặc hủy giao dịch, nó có thể được thực hiện với ID này.
2. chiến lược.long - đây là một biến được tích hợp sẵn cho Pine script biết rằng chúng ta
muốn sử dụng lâu dài.
3. 100 - số lượng cổ phiếu chúng tôi muốn giao dịch
4. khi = rsi> 50 - đây là một tham số bổ sung cho biết tập lệnh thông chỉ thực hiện giao dịch
nếu RSI cao hơn 50.
Cú pháp cho các mục nhập ngắn của chúng tôi sẽ theo một định dạng rất giống nhau .
if (shortCondition)
strategy.entry ("short", strategy.short, 100, when = rsi <50)
Vì chúng tôi đang chạy một chiến lược, chúng tôi không phải vẽ bất cứ thứ gì hoặc chỉ định đầu
ra.
Nhưng dù sao thì chúng tôi cũng sẽ làm như vậy. Sẽ rất tốt nếu bạn nhìn thấy đường SMA trên
biểu đồ để chúng tôi có thể xác nhận rằng các giao dịch đã diễn ra khi chúng đáng lẽ phải có.
// Vẽ biểu đồ của Đường trung bình di chuyển thành biểu đồ
(shortSMA)
(longSMA, color = color.black)
Nếu chúng ta lưu và thêm vào biểu đồ, chiến lược sẽ chạy và tự động mở cửa sổ Trình kiểm tra
chiến lược sẽ hiển thị một số thống kê quan trọng.
Đây là màn hình của chúng ta trông như thế nào.
Theo mặc định, một tab mới sẽ mở ra hiển thị số liệu thống kê tổng quan cho chiến lược. Bạn có
thể nhấp qua Tóm tắt Hiệu suất hoặc Danh sách Giao dịch để xem các thống kê khác.
Chiến lược sẽ chạy trên khung thời gian được hiển thị trên biểu đồ của bạn.
Bạn có thể dễ dàng chuyển qua các khung thời gian khác nhau bằng cách sử dụng các tùy chọn
khung thời gian trong menu ở đầu màn hình. Chiến lược sẽ tự động cập nhật dựa trên khung thời
gian mới đã chọn.
Mã đầy đủ:
// @ version = 4
strategy ("My Strategy", overlay = true)
// Tạo chỉ báo
shortSMA = sma (close, 10)
longSMA = sma (close, 30)
rsi = rsi (close, 14)
if (shortCondition)
strategy.entry ("short", strategy.short, 100, when = rsi <50)
Cú pháp cho điều kiện ngắn của chúng tôi là tương tự mặc dù một số tính toán hơi khác một
chút.
if (shortCondition)
stopLoss = high + atr * 2
takeProfit = low - atr * 2
strategy.entry ("short", strategy.short, 100, when = rsi <50)
strategy.exit ("exit", "short", stop = stopLoss, limit =
takeProfit)
Phần còn lại của script vẫn không thay đổi so với ví dụ trước. Hãy chạy nó và xem chiến lược
của chúng tôi đã làm như thế nào.
Các lối ra của chúng tôi đang hoạt động và được vẽ trên biểu đồ chính của chúng tôi cùng với
các mục dài và ngắn.
Mã đầy đủ:
// @ version = 4
chiến lược ("Chốt lời & dừng lỗ", overlay = true)
if (shortCondition)
stopLoss = high + atr * 2
takeProfit = low - atr * 2Strategy.short
strategy.entry ("short",, 100, when = rsi <50)
strategy.exit ("exit", "short", stop = stopLoss, limit =
takeProfit)
Làm thế nào để kích hoạt giao dịch với Apple khi Google tăng 5%?
Chúng tôi thấy rằng chức năng bảo mật có thể được sử dụng để hiển thị dữ liệu cho các cổ phiếu
không được hiển thị trên màn hình.
Chúng tôi sẽ sử dụng nó để tạo ra một chiến lược sẽ thực hiện giao dịch với Apple nếu Google di
chuyển nhiều hơn 5%.
Đây là một chiến lược đảo ngược có ý nghĩa, vì vậy nếu Google tăng hơn 5%, chúng tôi sẽ bán
Apple. Nếu Google giảm hơn 5% thì chúng tôi có thể mua Apple.
Điều đầu tiên chúng tôi sẽ làm là lưu trữ giá mở cửa và đóng cửa hàng ngày của Google vào một
biến số.
// @ version = 4
chiến lược ("Giao dịch theo cặp: Apple & Google")
Làm thế nào để sửa đổi các tập lệnh của chúng tôi mà không cần mã hóa?
Một tính năng thú vị về Pine script là chúng ta có thể tạo các đầu vào tùy chỉnh để dễ dàng thay
đổi các thông số của chiến lược và chỉ số của chúng ta.
Hãy xem chỉ báo ATR tiêu chuẩn được cung cấp trong Tradingivew. Lưu ý rằng việc sửa đổi độ
dài và thậm chí cả màu sắc dễ dàng như thế nào thông qua tab Kiểu.
Chúng ta có thể đạt được điều tương tự đối với các nghiên cứu và chiến lược được tạo trong Pine
script bằng cách sử dụng hàm input ().
Đây là một ví dụ về hàm đầu vào sẽ cho phép người dùng tùy chỉnh phần trăm thay đổi từ ví dụ
chiến lược cuối cùng.
longTrigger = input (title = "% thay đổi cho các mục ngắn", type
= input.float, defval = 5)
shortTrigger = input (title = "% thay đổi cho các mục dài", type
= input.float, defval = 5)
chúng ta hãy đi thông qua các tham số được truyền qua hàm input ().
1. title - đây là nơi chúng tôi chỉ định văn bản mà người dùng nhìn thấy khi cố gắng thay đổi
giá trị của thông số cụ thể đó.
2. loại - chúng tôi phải cho TradingView biết loại giá trị nào cần chấp nhận. Vì người dùng
có thể nhập một số chẳng hạn như 4.2, chúng tôi đã sử dụng float.
3. defval - đây là giá trị mặc định.
Nếu bạn không chắc chắn những giá trị nào sẽ sử dụng cho loại, bạn luôn có thể sử dụng chức
năng tự động hoàn thành để xem những gì có sẵn.
Chỉ cần nhập một phần của cú pháp và sau đó nhấn CTRL + phím cách trên PC hoặc CMD +
phím cách trên máy Mac.
Bây giờ chúng tôi có thể nhận được các giá trị từ người dùng. Nhưng họ sẽ nhập một giá trị
chẳng hạn như 5 (%). Chúng ta cần chuyển giá trị này thành 1,05 cho các câu lệnh if của chúng
ta.
longTrigger: = 1 - longTrigger / 100
shortTrigger: = 1 + shortTrigger / 100
Và chúng ta cần thay đổi các câu lệnh if để xem các biến mới được tạo của chúng ta dựa trên đầu
vào của người dùng thay vì các giá trị được mã hóa cứng trước đó.
if price_change <longTrigger
strategy.entry ("long",, 100)
Giá trị tùy chỉnh hiện có thể được đặt cho phần trăm thay đổi được sử dụng trong chiến lược.
Ngoài ra còn có một cửa sổ Thuộc tính cho phép bạn đặt các tùy chọn tùy chỉnh cho các phần
khác của chiến lược.
Và một cửa sổ Kiểu để tùy chỉnh các tùy chọn vẽ đồ thị.
Mã đầy đủ:
// @ version = 4
chiến lược ("Giao dịch theo cặp: Đầu vào")
longTrigger = input (title = "% Thay đổi cho các mục nhập ngắn",
type = input.float, defval = 5)
shortTrigger = input (title = "% Thay đổi cho các mục nhập dài ",
type = input.float, defval = 5)
price_change = google_close /
lô đất (price_change)
Vẽ chú thích
Có một số tùy chọn để in chú thích. Ví dụ, bạn có thể sử dụng hàm hline () để vẽ một mức ngang
trên biểu đồ.
Có một hàm plotchar () cho phép bạn vẽ các ký tự ASCII trên biểu đồ của mình. Điều này
thường được sử dụng để vẽ một ghi chú ở trên cùng hoặc ở dưới cùng của thanh giá.
Một hàm vẽ biểu đồ phổ biến khác là plothape () cho phép bạn vẽ các hình dạng khác nhau. Cách
này khá phổ biến vì rất nhiều người sử dụng nó để vẽ các mũi tên trên đầu hoặc cuối thanh để
hiển thị tín hiệu mua hoặc bán.
Để có danh sách đầy đủ các chú thích khác nhau có sẵn, hãy xem tổng quan về Chú thích trong
hướng dẫn sử dụng Pine script.
Làm cách nào để tạo chỉ báo tùy chỉnh trong tập lệnh Pine?
Chúng tôi sẽ tạo một chỉ báo đa khung thời gian.
Điều này dựa trên chiến lược mở rộng quy mô mà tôi đã sử dụng khi mới bắt đầu giao dịch. Đó
là một chiến lược đảo chiều có nghĩa là hoạt động tốt trong đầu phiên giao dịch Châu Á trên thị
trường ngoại hối khi mọi thứ nói chung là yên tĩnh.
Chiến lược sử dụng Dải Bollinger trên biểu đồ 5 phút và RSI trên biểu đồ 1 phút.
Ý tưởng là tìm kiếm sự phân kỳ rsi trên biểu đồ 1 phút khi giá đạt đến dải Bollinger trên hoặc
dưới trên biểu đồ 5 phút.
Mục tiêu tiềm năng là đường giữa của dải Bollinger 5 phút hoặc đường dưới của dải Bollinger 1
phút.
Hình ảnh trên là một ví dụ về chiến lược. Chỉ báo phiên Forex mà chúng tôi đã sử dụng trong ví
dụ trước được sử dụng ở đây để hiển thị khi phiên giao dịch Châu Á mở cửa.
Chiến lược này hoạt động tốt nhất trong nửa đầu của phiên giao dịch, sau đó rủi ro về sự đột phá
hoặc di chuyển theo hướng có xu hướng tăng lên.
Khi tôi giao dịch chiến lược này, tôi phải mở hai biểu đồ, biểu đồ 1 phút và biểu đồ 5 phút.
Nhưng ví dụ trên cho thấy các dải Bollinger 5 phút được vẽ trực tiếp trên biểu đồ 1 phút. Chúng
tôi sẽ tạo chỉ báo này trong tập lệnh Pine.
// @ version = 4
study (title = "TF BBands cao hơn", shorttitle = "TF BBands",
overlay = true)
Chúng tôi bắt đầu bằng cách khai báo tên cho tập lệnh và cho biết đó là một nghiên cứu. Một tiêu
đề ngắn hơn cũng có thể được thêm vào, đây là tên sẽ được hiển thị trên bảng xếp hạng.
Tiếp theo, chúng tôi đặt một số đầu vào của người dùng. Chúng tôi có thể sao chép hầu hết các
đầu vào từ chỉ báo dải Bollinger thông thường (như thể hiện trong hình trên) cho chỉ báo tùy
chỉnh của chúng tôi.
// Lấy đầu vào của người dùng
tf = input (title = "BBands Timeframe", type = input.resolution,
defval = "5")
len = input (title = "Length", type = input.integer, defval = 20)
stddev = input (title = 'StdDev', type = input.integer, defval =
2)
Chúng ta có thể tạo chỉ báo dải Bollinger từ một chức năng trợ giúp được tích hợp sẵn.
[middle, upper, Lower] = bb (close, len, stddev)
Có ba giá trị được trả về từ hàm này. Dải dưới, dải giữa và dải trên. Chúng được lưu riêng lẻ vào
các biến.
Các giá trị phải được tính toán trên một khung thời gian khác. Chúng ta có thể sử dụng hàm
security () để trỏ đến khung thời gian do người dùng chọn.
Điều này được lưu trữ trong biến tf được tạo bởi đầu vào của người dùng trước đó.
hbbandsMid = security (syminfo.tickerid, tf, middle,
barmerge.gaps_on, barmerge.lookahead_off)
hbbandsUpper = security (syminfo.tickerid, tf, upper,
barmerge.gaps_on, barmerge.lookahead_off)
hbbandsLower = security (syminfof ,tickerid low,
barmerge.gaps_on, barmerge.lookahead_off)
Biểu tượng mã chứng khoán vẫn giữ nguyên, vì vậy chúng tôi đã sử dụngbiểu tượng
syminfo.tickerid ,này sẽ trả về bất kỳ mã nào đang được hiển thị trên biểu đồ chính.
Và điều đó làm được, tất cả những gì còn lại là vẽ chỉ báo mới.
plot (hbbandsMid)
plot (hbbandsUpper)
plot (hbbandsLower)
Bây giờ chúng ta có thể thấy các dải Bollinger từ biểu đồ 5 phút được hiển thị trên biểu đồ 1
phút.
Các đầu vào cho phép dễ dàng tùy chỉnh các thông số dải Bollinger và cho phép chỉ báo này hoạt
động với bất kỳ tổ hợp khung thời gian nào.
Mã đầy đủ:
// @ version = 4
study (title = "TF BBands cao hơn", shorttitle = "TF BBands",
overlay = true)
plot (hbbandsMid)
plot (hbbandsUpper)
plot (hbbandsLower)
Lời kết
Nếu bạn đã theo dõi cùng với các ví dụ, bạn sẽ có một ý tưởng tốt về những gì Pine script có thể
thực hiện.
Nhìn chung, có rất nhiều điều bạn có thể làm với Pine script, mặc dù nó có những hạn chế nhất
định. Bạn có thể lập ra một chiến lược thực sự nhanh chóng khi bạn hiểu rõ mọi thứ.
Từ đó, luôn có một tùy chọn để sử dụng logic đó và lập trình nó sang một ngôn ngữ khác nếu
bạn muốn xây dựng dựa trên nó và tận dụng các thư viện của bên thứ ba.
Các chức năng vẽ biểu đồ rất tuyệt vời và khả năng tạo các chỉ báo tùy chỉnh thực sự hữu ích cho
cả người giao dịch thủ công và hệ thống tự động.
Các số liệu thống kê toàn diện được cung cấp cho các chiến lược cũng là một điểm cộng lớn cho
Pine script.
TradingView có một số tài nguyên nếu bạn muốn nâng cao kỹ năng viết mã Pine script của mình
thêm một bước nữa.
Một số chức năng trợ giúp đã được thảo luận trong bài viết này. Ngoài ra, cũng có một tùy chọn
trợ giúp từ bên trong trình chỉnh sửa Pine.
Dưới đây là một số tài nguyên khác -
1. Hướng dẫn bắt đầu nhanh - Đây là ví dụ về một nghiên cứu và chia nhỏ tập lệnh xuống
từng dòng.
2. Hướng dẫn sử dụng Pine Script v4Hướng dẫn -chi tiết cho Pine script.
3. Blog TradingView - Thông báo về các tính năng mới thường chứa mã mẫu
4. Thư viện tập lệnh TradingViewThư viện -nghiên cứu và chiến lược tập lệnh mã nguồn
mở Pine.
Tùy chọn cuối cùng trong danh sách là một nguồn tuyệt vời vì thường một nhà giao dịch khác có
thể đã viết mã cho nghiên cứu hoặc chiến lược mà bạn đang theo đuổi.
Nó cũng là một nguồn tốt để rút ra các ý tưởng từ đó xây dựng các chỉ số hoặc chiến lược của
riêng bạn.
Nếu bạn muốn thử một số ví dụ, bạn có thể tải xuống tất cả mã bằng một cú nhấp chuột trên
GitHub. Chỉ cần nhấp vào nút màu xanh lá cây và chọn tải xuống zip. Mã sẽ nằm trong tệp văn
bản có thể được sao chép sang trình chỉnh sửa Pine của Tradingview.