[TOC]
Các cấu trúc chung của mã trong Pine:
<version>
<declaration_statement>
<code>
FMZ hỗ trợ các ký hiệu chú thích ngôn ngữ Pine: một dòng chú thích//
Các dòng chú thích/* */
Ví dụ như cách viết chú thích trong ví dụ sau:
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // 计算MACD指标
/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')
Các hướng dẫn trình biên dịch dưới dạng sau đây cho phép trình biên dịch biết phiên bản nào của kịch bản được viết bằng Pine:
//@version=5
Mặc định là phiên bản v5, có thể bỏ qua trong mã//@version=5
。
indicator()
strategy()
Các tuyên bố xác định loại kịch bản, điều này cũng quyết định nội dung nào được cho phép trong đó, và cách sử dụng và thực hiện. Thiết lập các thuộc tính quan trọng của kịch bản, chẳng hạn như tên của nó, nơi nó sẽ xuất hiện khi nó được thêm vào biểu đồ, độ chính xác và định dạng của các giá trị nó hiển thị, và kiểm soát một số giá trị hành vi của nó khi chạy, chẳng hạn như số lượng đối tượng vẽ tối đa mà nó sẽ hiển thị trên biểu đồ. Đối với các chính sách, thuộc tính bao gồm các tham số kiểm soát xem lại, chẳng hạn như vốn ban đầu, hoa hồng, điểm trượt, vv.indicator()
Hoặcstrategy()
Những lời tuyên bố.
Các dòng không phải là chú thích hoặc hướng dẫn trình biên dịch trong kịch bản là câu nói, nó thực hiện các thuật toán của kịch bản. Một câu nói có thể là một trong số đó.
if
,for
,while
Hoặcswitch
cấu trúc tương tựCâu nói có thể được sắp xếp theo nhiều cách
空格
Hoặc制表符
(tab key) bắt đầu. Chữ ký tự đầu tiên của chúng cũng phải là ký tự đầu tiên của dòng. Các dòng bắt đầu ở vị trí đầu tiên của dòng, theo định nghĩa là một phần của phạm vi toàn cầu của kịch bản.local block
Một khối địa phương phải được thu hẹp thành một biểu mẫu hoặc bốn không gian (nếu không, nó sẽ được phân tích thành dòng mã chuỗi trước đó, nghĩa là được xác định là nội dung liên tục của dòng mã trước đó), và mỗi khối địa phương xác định một phạm vi địa phương khác.Ví dụ, bao gồm ba phần tử, một trong tuyên bố chức năng tùy chỉnh, hai trong tuyên bố biến sử dụng cấu trúc if, mã như sau:
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
Dòng dài có thể được chia thành nhiều dòng, hoặc được "bọc" lên. Dòng được bọc phải thu hẹp vào bất kỳ số lượng không gian nào, miễn là nó không phải là số lần của 4 (các ranh giới này được sử dụng để thu hẹp các phần tử).
a = open + high + low + close
Có thể được đóng gói như sau (lưu ý rằng không có số lượng không gian co lại cho mỗi dòng là số lần của 4):
a = open +
high +
low +
close
Một cuộc gọi dài có thể được đóng gói thành một cuộc gọi dài.
close1 = request.security(syminfo.tickerid, "D", close) // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close) // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100), // 一行长的plot()调用可以被包装
color = color.new(color.purple, 40),
style = plot.style_area,
trackprice = true)
Một câu nói trong một tuyên bố chức năng được xác định bởi người dùng cũng có thể được đóng gói. Tuy nhiên, vì một phần tử địa phương phải bắt đầu bằng cách rút ngắn (tương đương 4 không gian hoặc 1 ký tự), khi chia nó sang dòng tiếp theo, phần tiếp theo của câu nói phải bắt đầu bằng nhiều hơn một lần rút ngắn (không bằng số lần của 4 không gian). Ví dụ:
test(c, o) =>
ret = c > o ?
(c > o+5000 ?
1 :
0):
(c < o-5000 ?
-1 :
0)
a = test(close, open)
plot(a, title="a")
Không phải là một kiểu dữ liệu hoặc định dạng, chuỗi thời gian là một khái niệm cơ bản trong ngôn ngữ PINE. Nó được sử dụng để lưu trữ các giá trị liên tục thay đổi theo thời gian, mỗi giá trị tương ứng với một điểm thời gian.
Các biến tích hợpopen
Ví dụ:open
Các biến cố tích hợp ghi lại giá mở của mỗi dòng KBAR, nếuopen
Dữ liệu của 5 phút K-line cycle.open
Những gì được ghi lại trong biến là giá mở cửa của mỗi 5 phút K-line BAR (cột). Khi chương trình chính sách của bạn đang được thực hiện, tham chiếu trong mãopen
Đó là giá mở cửa của dòng K BAR ở vị trí hiện tại. Để tham khảo giá trị trước trong chuỗi thời gian, chúng ta sử dụng giá trị quá khứ.[]
Chế toán lịch sử, khi một chính sách được thực hiện trên một K-line BARopen[1]
Có nghĩa là tham khảo giá mở đầu của một K-Line BAR trước đó của dòng K hiện tại.
Mặc dùDòng thời gianMột cấu trúc dữ liệu dễ dàng gợi nhớ đến "các mảng", mặc dù ngôn ngữ PINE cũng có loại mảng. Nhưng chúng là một khái niệm hoàn toàn khác với chuỗi thời gian.
Các chuỗi thời gian được thiết kế như vậy trong ngôn ngữ PINE có thể dễ dàng tính toán giá trị tổng hợp của giá đóng cửa trong mã chính sách mà không cần sử dụng cấu trúc vòng lặp như for, chỉ sử dụng các hàm tích hợp của ngôn ngữ PINE.ta.cum(close)
Một ví dụ khác, chúng ta cần tính toán giá trị trung bình của giá trị tối đa và chênh lệch giá trị tối thiểu của 14 dòng K cuối cùng BAR (tức là 14 dòng K gần nhất đến thời điểm thực hiện mã) có thể được viết như sau:ta.sma(high - low, 14)
Kết quả của việc gọi hàm trên chuỗi thời gian cũng sẽ có dấu vết trên chuỗi thời gian, cũng có thể được sử dụng[]
Các toán tử lịch sử đề cập đến các giá trị trước đó. Ví dụ, để kiểm tra giá đóng cửa của dòng K BAR hiện tại có vượt quá giá tối đa của giá cao nhất trong 10 dòng K BAR cuối cùng (không bao gồm dòng K BAR hiện tại)? Chúng ta có thể viết làbreach = close > ta.highest(close, 10)[1]
Và cũng có thể viết như sau:breach = close > ta.highest(close[1], 10)
Vì vậy.ta.highest(close, 10)[1]
vàta.highest(close[1], 10)
Có một số người nói rằng:
Bạn có thể xác minh bằng mã sau:
strategy("test pine", "test", true)
a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)
plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)
Mã kiểm tra trên sẽ xuất ra giá trị của a và b trên chuỗi thời gian tương ứng của chúng trên mỗi BAR, bạn có thể thấy giá trị của a và b luôn bằng nhau, vì vậy cả hai phương pháp biểu diễn đều tương đương.
Phương pháp xây dựng mô hình của chính sách PINE "Pine language transaction library"
定价货币精度
Các tham số và tham số này xác định giá trượt khi đặt hàng; ví dụ, đặt giá chính xác tiền tệ là 2 chính xác đến vị trí thứ hai của số nhỏ, chính xác đến 0.01; sau đó, số điểm trượt cho mỗi điểm đại diện cho 0.01 đơn vị định giá. Tại đây, đặt số điểm trượt là 5, giá trượt khi đặt hàng là 0.05 ((giá trượt chỉ số khi đặt hàng để tốt hơn và thanh toán phần giá quá mức giao dịch).javascript
Gọi trong chiến lượcSetMaxBarLen
Chức năng tương tự.strategy(title = "open long example", pyramiding = 3) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓
strategy(title = "close long example", pyramiding = 2) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1) // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // 平仓,指定平掉分组标签为long2的仓位的80%持仓
Phương pháp nắm giữ của ngôn ngữ PINE tương tự như nắm giữ một chiều. Ví dụ, khi nắm giữ nhiều vị trí, nếu có lệnh bán, danh sách kế hoạch, v.v. (đối với hướng ngược lại với hướng nắm giữ), lệnh sẽ được kích hoạt trước khi thực hiện lệnh kích hoạt đối với hướng ngược lại với hướng nắm giữ trước khi nắm giữ.
Khi sử dụng lệnh đặt hàng, nếu không chỉ định bất kỳ mức giá nào, mặc định đặt hàng theo giá thị trường. Ngoài giá thị trường, bạn cũng có thể đặt hàng bằng đơn đặt hàng theo kế hoạch, đơn đặt hàng sẽ không hoạt động ngay lập tức.Đĩa thực / kiểm tra lạiThông tin trạng thái thời gian (tức là thanh trạng thái khi chính sách đang chạy) được nhìn thấy trong bảng phân trang "lệnh dự kiến"; hệ thống sẽ thực sự đặt các đơn đặt hàng này khi giá thị trường thực tế đáp ứng các điều kiện kích hoạt các đơn đặt hàng này. Vì vậy, các đơn đặt hàng này có sự chênh lệch nhỏ trong giá giao dịch là điều bình thường. Sử dụngstrategy.entry
Khi chúng ta sắp xếp các hàm, chúng ta có thể chỉ địnhlimit
、stop
Các tham số.
var isTrade = false
if not barstate.ishistory and not isTrade
isTrade := true
strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order") // stop
strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order") // limit
strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order") // stop-limit
Đặt hàng giới hạn
Đặt giá giới hạn cho đơn đặt hàng, khi đơn đặt hàng là thanh toán (tức làdirection
Các tham số làstrategy.long
), chỉ khi giá hiện tại trên thị trường thấp hơn, lệnh sẽ được kích hoạt.
Khi đơn đặt hàng là bán hàngdirection
Các tham số làstrategy.short
), chỉ khi giá hiện tại trên thị trường cao hơn, lệnh sẽ được kích hoạt.
Đặt lệnh dừng
Thiết lập giá dừng lỗ cho lệnh, khi lệnh là thanh toán, lệnh chỉ được kích hoạt khi giá hiện tại trên thị trường cao hơn giá đó. Khi lệnh bán, lệnh chỉ được kích hoạt khi giá hiện tại trên thị trường thấp hơn giá đó.
Stop-limit đặt hàng
Có thể được thiết lập cùng một lúclimit
、stop
Các tham số, các đơn đặt hàng được kích hoạt ở mức giá phù hợp với điều kiện đầu tiên.
var là từ khóa được sử dụng để phân bổ và khởi tạo một lần các biến. Thông thường, ngữ pháp gán biến mà không bao gồm từ khóa var sẽ dẫn đến việc giá trị của biến sẽ được phủ lên mỗi khi dữ liệu được cập nhật. Ngược lại, khi sử dụng từ khóa var để phân bổ biến, chúng vẫn có thể giữ trạng thái mặc dù dữ liệu được cập nhật, chỉ thay đổi nó khi đáp ứng các điều kiện trong if-expressions.
var variable_name = expression
Điều này có nghĩa:
variable_name
- Bất kỳ tên biến đổi người dùng nào được cho phép trong Pine Script (có thể bao gồm các ký tự Latin chữ viết lớn và chữ viết nhỏ, số và dấu gạch dưới, nhưng không thể bắt đầu bằng số).expression
- Bất kỳ biểu thức toán học nào cũng giống như định nghĩa một biến thông thường.Ví dụ
// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
var x = close
b := x
green_bars_count := green_bars_count + 1
if green_bars_count >= 10
var y = close
c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")
Các biến a giữ giá đóng cửa của hàng đầu của mỗi hàng trong chuỗi.
Các biến số
Trên FMZ, các mô hình giá thực tế, mô hình giá đóng cửa, mô hình giá bán, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực, mô hình giá bán trong thời gian thực.var
、varip
Các biến được tuyên bố chúng tôi thử nghiệm bằng mã sau đây.
strategy("test pine", "test 1", true)
// 测试 var varip
var i = 0
varip ii = 0
// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)
// 每轮逻辑执行都给i、ii递增1
if true
i := i + 1
ii := ii + 1
Mô hình giá thời gian thực
Mã thử nghiệm trên được phân chia thành hai giai đoạn khi thực hiện: 1, giai đoạn đường K lịch sử. 2, giai đoạn đường K thời gian thực.var
、varip
Các biến i, ii được tuyên bố sẽ thực hiện các thao tác tăng dần mỗi lần thực hiện mã chính sách vìif true
Vì vậy, chắc chắn sẽ thực hiện các phần mã điều kiện tương ứng). Vì vậy, bạn có thể thấy rằng các số hiển thị trên kết quả K-line BAR đều tăng lên 1. Khi giai đoạn K-line lịch sử kết thúc, bắt đầu giai đoạn K-line thời gian thực.var
、varip
Các biến được tuyên bố bắt đầu thay đổi khác nhau. Bởi vì đó là mô hình giá thực tế, mỗi lần thay đổi giá trong một dòng KBAR sẽ được thực hiện một lần mã chiến lược.i := i + 1
vàii := ii + 1
Chỉ có một sự khác biệt là i được thay đổi mỗi lần. i vẫn được thay đổi, nhưng giá trị trước đó sẽ được khôi phục lại khi logic chính sách được thực hiện lần tiếp theo, và sẽ không được cập nhật cho đến khi dòng K BAR hiện tại kết thúc (có nghĩa là giá trị trước đó sẽ không được khôi phục lại khi logic chính sách được thực hiện lần tiếp theo). Vì vậy, chúng ta có thể thấy biến i vẫn là BAR1 mỗi lần; nhưng biến ii được thêm nhiều lần mỗi BAR.
Mô hình giá đóng cửa
Vì mô hình giá đóng là thực hiện một chiến lược logic mỗi khi mỗi K-line BAR đi qua. Vì vậy, trong mô hình giá đóng, giai đoạn K-line lịch sử và giai đoạn K-line thời gian thực sẽ được sử dụng để xác định giá của các dòng.var
、varip
Các biến được tuyên bố diễn ra hoàn toàn đồng bộ trong các ví dụ trên, tăng dần, mỗi K-line BAR tăng lên 1.
varip (var intrabar persist) là một từ khóa dùng để phân bổ và khởi tạo một lần các biến. Nó tương tự như từ khóa var, nhưng các biến được sử dụng trong tuyên bố varip giữ giá trị giữa các bản cập nhật dòng K trong thời gian thực.
varip variable_name = expression
Điều này có nghĩa:
variable_name
- Bất kỳ tên nào cho biến đổi người dùng được cho phép trong kịch bản Pine (có thể bao gồm chữ cái Latin chữ cái, số và dấu phẩy, nhưng không thể bắt đầu bằng số)expression
- Bất kỳ biểu thức toán học nào, giống như khi xác định các biến thông thường. Trên đường K đầu tiên, biểu thức chỉ tính một lần và gán cho các biến một lần.Ví dụ
// varip
varip int v = -1
v := v + 1
plot(v)
Khi sử dụng var, biểu đồ sẽ trả về giá trị của bar_index. Sử dụng varip, hành vi tương tự sẽ xảy ra trên đường K lịch sử, nhưng trên đường K thời gian thực, biểu đồ sẽ trả về một giá trị, tăng một cho mỗi dấu chấm.
Nhận xétChỉ được sử dụng với các kiểu đơn giản như float, int, boolean, string, và các mảng của kiểu này.
Định giá trị của một biến dạng Boolean, hoặc khi biểu thức được sử dụngSo sánhHoặcLý thuyếtGiá trị mà các toán tử có thể tính toán.
Nhận xétXem thêmSo sánhCác toán tử vàLý thuyếtMô tả các toán tử.
Hẹn gặp lại
bool
Chỉ ra giá trị của một biến kiểu Boolean, và kết quả của các hoạt động so sánh, các hoạt động logic.
Nhận xétXem thêmSo sánhCác toán tử vàLý thuyếtMô tả các toán tử.
Hẹn gặp lại
bool
Một câu nói if định nghĩa các đoạn câu phải được thực hiện khi đáp ứng các điều kiện biểu thức. Ngôn ngữ kịch bản Pine phiên bản 4 cho phép bạn sử dụng ngữ pháp ifelse if.
Các mã thông thường được lấy từ:
var_declarationX = if condition
var_decl_then0
var_decl_then1
...
var_decl_thenN
return_expression_then
else if [optional block]
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
else
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
Nhận xét
var_declarationX
- Điều này lấy giá trị của câu ifcondition
- Nếu điều kiện là true, thì sử dụng đoạn vănthen
Điều này có nghĩa làvar_decl_then0
,var_decl_then1
V.v.) ⇒ Nếu điều kiện là false, sử dụng đoạn câuelse if
Hoặcelse
Điều này có nghĩa làvar_decl_else0
,var_decl_else1
Vâng.return_expression_then , return_expression_else
- biểu thức cuối cùng trong module hoặc biểu thức từ khốielse sẽ trả về giá trị cuối của câu lệnh. Nếu biến được tuyên bố ở cuối, giá trị của nó sẽ là giá trị kết quả.
Các giá trị được trả về của câu if phụ thuộc vàoreturn_expression_then
vàreturn_expression_else
Các kiểu này. Khi chạy trên TradingView, các kiểu của chúng phải phù hợp: không thể trả về một giá trị nguyên từ khối câu then khi bạn có một giá trị chuỗi trong khốielse. Khi chạy trên FMZ, các ví dụ sau không trả về lỗi, khi giá trị y được lấy là "open", giá trị khi vẽ đồ họa phác thảo là n/a.
Ví dụ
// This code compiles
x = if close > open
close
else
open
// This code doesn’t compile by trading view
// y = if close > open
// close
// else
// "open"
plot(x)
Có thể bỏ quaelse
Trong trường hợp này, nếu điều kiện là false, thì sẽ gán một threshold
Ví dụ
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
Có thể sử dụng nhiều khối if hoặc không sử dụng. Các khối then, if, if được di chuyển qua bốn không gian:
Ví dụ
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
Có thể bỏ quaif
Giá trị kết quả của câu nói ((
Ví dụ
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
Các câu if có thể chứa lẫn nhau:
Ví dụ
// if
float x = na
if close > open
if close > close[1]
x := close
else
x := close[1]
else
x := open
plot(x)
'for' cấu trúc cho phép lặp lại nhiều câu:
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- Một biến thể tùy chọn được tuyên bố, nó sẽ được chỉ định là giá trị của return_expression trong vòng quay.counter
- Lưu lượng các biến của giá trị của bộ đếm vòng quay, tăng/giảm 1 hoặc step_num giá trị trong mỗi lần lặp của vòng quay.from_num
- Giá trị khởi đầu của bộ đếm. Cho phép sử dụng các hàm int/float threshold/expression.to_num
- Giá trị cuối cùng của bộ đếm; vòng xoay bị ngắt khi bộ đếm lớn hơn to_num (hoặc nhỏ hơn to_num trong trường hợp from_num > to_num); phép sử dụng hàm int/float thresholds/expressions, nhưng chúng chỉ được đánh giá trong lần lặp đầu tiên của vòng xoay;step_num
- Giá trị tăng/giảm của bộ đếm. Nó là tùy chọn. Giá trị mặc định là +1 hoặc-1, tùy thuộc vào số lớn nhất trong số from_num hoặc to_num. Khi sử dụng giá trị, bộ đếm cũng tăng/giảm theo số lớn nhất trong số from_num hoặc to_num, do đó ký hiệu +/- của step_num là tùy chọn.statements | continue | break
- Bất kỳ số câu nào, hoặc các từ khóa liên tục hoặc phá vỡ, thu hẹp 4 không gian hoặc một tab.return_expression
- Giá trị trả về của vòng lặp, nếu có, được gán cho các biến trong var_declaration. Nếu vòng lặp thoát ra do từ khóa continuous loop hoặc break loop, giá trị trả về của vòng lặp là giá trị của biến cuối cùng được gán giá trị trước khi thoát ra vòng lặp.continue
- Từ khóa chỉ được sử dụng trong vòng quay. Nó dẫn đến việc lặp lại vòng quay tiếp theo được thực hiện.break
- Từ khóa để thoát khỏi vòng tròn.
Ví dụ
// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
int result = 0
for i = 1 to lookback
if close[i] > close
result += 1
result
plot(qtyOfHigherCloses(14))
Hẹn gặp lại
for...in
while
for...in
Cấu trúc cho phép thực hiện nhiều câu nói lặp lại cho mỗi phần tử trong mảng. Nó có thể được sử dụng cùng với bất kỳ tham số nào:array_element
, hoặc sử dụng cùng với hai tham số:[index, array_element]
❏ Hình thức thứ hai không ảnh hưởng đến chức năng của vòng lặp. ❏ Nó theo dõi chỉ mục lặp hiện tại trong biến đầu tiên của tập hợp.
[var_declaration =] for array_element in array_id
statements | continue | break
return_expression
[var_declaration =] for [index, array_element] in array_id
statements | continue | break
return_expression
var_declaration
- Một tuyên bố biến tùy chọn sẽ được gán cho vòng lặpreturn_expression
Giá trị của.index
- Theo dõi các biến tùy chọn của chỉ mục lặp hiện tại. ̧ chỉ mục bắt đầu từ 0. ̧ biến là không thể thay đổi trong vòng lặp. ̧ khi sử dụng, nó phải được bao gồm trong một cũng bao gồmarray_element
Trong các tập hợp của.array_element
- Bao gồm các biến cho mỗi phần tử hàng loạt liên tục được xử lý trong vòng lặp. Các biến này không thể thay đổi trong vòng lặp.array_id
- ID mảng lặp lại vòng tròn.statements | continue | break
- Bất kỳ số câu nào, hoặc các từ khóa liên tục hoặc phá vỡ, thu hẹp 4 không gian hoặc một tab.return_expression
- giá trị trả về của vòng lặp được phân bổ chovar_declaration
Các biến trong vòng, nếu có. Nếu vòng tròn thoát ra do các từ khóa "continue" hoặc "break", giá trị trả về của vòng tròn là biến được gán cuối cùng trước khi vòng tròn thoát ra.continue
- Từ khóa chỉ được sử dụng trong vòng quay. Nó dẫn đến việc lặp lại vòng quay tiếp theo được thực hiện.break
- Từ khóa để thoát khỏi vòng tròn.
Cho phép thay đổi các phần tử hoặc kích thước của mảng trong vòng lặp.
Ở đây, chúng ta sử dụngfor...in
Một dạng đơn tham số để xác định trên mỗi đường K, bao nhiêu đường K có giá trị OHLC lớn hơn giá trị SMA của giá trị thâm cận:
Ví dụ
// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
int result = 0
for currentElement in array
if currentElement > value
result += 1
result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))
Ở đây, chúng ta sử dụng hai dạng đối số for...in để tạo ra chúng taisPos
Các giá trị của mảng được đặt làtrue
Khi chúng ở trong nhà chúng tôi,valuesArray
Các giá trị tương ứng trong các tập hợp là:
Ví dụ
// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)
for [index, value] in valuesArray
if value > 0
array.set(isPos, index, true)
if barstate.islastconfirmedhistory
runtime.log(str.tostring(isPos))
Hẹn gặp lại
for
while
array.sum
array.min
array.max
while
Các câu lệnh cho phép các điều kiện lặp lại trong các khối mã cục bộ.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
Điều này có nghĩa:variable_declaration
- Các thông báo biến tùy chọn.return expression
Bạn có thể cung cấp giá trị khởi tạo cho biến này.boolean_expression
- Nếu là true, thực hiệnwhile
Nếu là false, thì ởwhile
Sau câu nói, tiếp tục thực hiện kịch bản.continue
- continue
Từ khóa dẫn đến nhánh vòng lặp đến lần lặp tiếp theo.break
- break
Từ khóa dẫn đến chấm dứt vòng lặp.while
Sau khi nói, hãy tiếp tục.return_expression
- Cung cấpwhile
Các câu trả về các giá trị tùy chọn.
Ví dụ
// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter = i_n
int factorial = 1
while counter > 0
factorial := factorial * counter
counter := counter - 1
plot(factorial)
Nhận xétĐầu tiênwhile
Các khối mã địa phương sau hàng phải được thu nhỏ thành bốn không gian hoặc một ký tự.while
Vòng tròn.while
Các biểu thức Boole sau phải trở thành false hoặc phải thực hiệnbreak
。
Switch chuyển quyền kiểm soát sang một trong vài câu nói dựa trên giá trị của điều kiện và biểu thức.
[variable_declaration = ] switch expression
value1 => local_block
value2 => local_block
...
=> default_local_block
[variable_declaration = ] switch
boolean_expression1 => local_block
boolean_expression2 => local_block
...
=> default_local_block
Một số người nói rằng, "Điều này không phải là điều tốt".
Ví dụ
// Switch using an expression
string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])
float ma = switch i_maType
"EMA" => ta.ema(close, 10)
"SMA" => ta.sma(close, 10)
"RMA" => ta.rma(close, 10)
// Default used when the three first cases do not match.
=> ta.wma(close, 10)
plot(ma)
Một số người đã viết bài viết trên trang web của mình.
Ví dụ
strategy("Switch without an expression", overlay = true)
bool longCondition = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
switch
longCondition => strategy.entry("Long ID", strategy.long)
shortCondition => strategy.entry("Short ID", strategy.short)
Trả về giá trịGiá trị của biểu thức cuối cùng trong khối câu lệnh địa phương được thực hiện.
Nhận xétChỉ có thể thực hiệnlocal_block
ví dụ hoặcdefault_local_block
Một trong số đó.default_local_block
Chỉ với=>
Chữ đánh dấu được giới thiệu cùng với nhau và chỉ được thực hiện khi không thực hiện khối trước đó; nếuswitch
Kết quả của câu nói được gán cho một biến và không được chỉ địnhdefault_local_block
Nếu không thực hiệnlocal_block
Và sau đó, câu trả lời sẽ trở lại.na
◎ sẽswitch
Khi kết quả của câu nói được gán cho một biến, tất cảlocal_block
Các trường hợp phải trả về cùng một kiểu giá trị.
Hẹn gặp lại
if
?:
series là một từ khóa cho loại chuỗi dữ liệu.series
Từ khóa thường không cần thiết.
Sử dụng để gán cho biến, nhưng chỉ khi tuyên bố biến (được sử dụng lần đầu tiên).
Các toán tử gán, gán cho các biến bên trái.
Không bằng với. áp dụng cho bất kỳ loại biểu thức nào.
expr1 != expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Định số (đơn vị tổng số dư) ⇒ áp dụng cho các biểu thức số.
expr1 % expr2
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Nhận xétTrong kịch bản Pine, khi tính số dư của một số nguyên, giao dịch sẽ được cắt đứt; nghĩa là, đặt 4/5 của nó vào giá trị tuyệt đối nhỏ nhất; giá trị thu được sẽ có cùng ký hiệu như cổ tức.
Ví dụ: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.
Định nghĩa mô-đun.
expr1 %= expr2
Ví dụ
// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Xét nhân... áp dụng cho biểu thức số.
expr1 * expr2
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Định nghĩa nhân.
expr1 *= expr2
Ví dụ
// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Thêm hoặc đơn vị chính thức.
expr1 + expr2
+ expr
Trả về giá trịHệ thống nhị phân của chuỗi+
Trả về sự kết hợp của express1 và express2
Số trả về một số nguyên hoặc một giá trị dấu phẩy, hoặc một chuỗi các giá trị:
Chế độ nhị phân +'trả về express1 cộng với express2.
Một đơn vị + một đơn vị trả về expres (không thêm bất kỳ nội dung nào vào đối xứng của một đơn vị).
Nhận xétBạn có thể sử dụng các toán tử toán học với số và số lượng các biến. Trong trường hợp sử dụng các số lượng, các toán tử được áp dụng cho các phần tử.
Định nghĩa gia hạn... được sử dụng cho biểu thức số hoặc chuỗi...
expr1 += expr2
Ví dụ
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
Trả về giá trịĐối với các chuỗi, trả về chuỗi express1 và express2; đối với các số, trả về số nguyên hoặc giá trị dấu phẩy, hoặc một chuỗi các giá trị.
Nhận xétBạn có thể sử dụng các toán tử toán học với số và số lượng các biến. Trong trường hợp sử dụng các số lượng, các toán tử được áp dụng cho các phần tử.
Phân trừ hoặc số âm đơn.
expr1 - expr2
- expr
Trả về giá trịTrả về một số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị:
Binomial x +'trả về express1 trừ express2.
Một đồng-
Trả lại từ chối của expres.
Nhận xétBạn có thể sử dụng các toán tử toán học với số và số lượng các biến. Trong trường hợp sử dụng các số lượng, các toán tử được áp dụng cho các phần tử.
Định nghĩa trừu tượng.
expr1 -= expr2
Ví dụ
// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Ngoại trừ. áp dụng cho biểu thức số.
expr1 / expr2
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Trừ khi chỉ định.
expr1 /= expr2
Ví dụ
// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)
Trả về giá trịMột số nguyên hoặc một giá trị trôi, hoặc một chuỗi các giá trị.
Ít hơn. Đối với các biểu thức số.
expr1 < expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Ít hơn hoặc bằng.
expr1 <= expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Có thể sử dụng cho bất kỳ loại biểu thức nào.
expr1 == expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Các toán tử '=>' được sử dụng cho các tuyên bố hàm được xác định bởi người dùng vàswitch
Trong câu nói.
Phương pháp lập trình của function declaration là:
<identifier>([<parameter_name>[=<default_value>]], ...) =>
<local_block>
<function_result>
Một<local_block>
Một số câu nói của Pine là 0 hoặc nhiều hơn.<function_result>
là một biến, một biểu thức hoặc một nhóm.
Ví dụ
// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) =>
sum = x + y
sumChange = ta.change(sum, 10)
// Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))
Nhận xétBạn có thể tìm hiểu thêm về các hàm được định nghĩa bởi người dùng trên trang tuyên bố hàm và thư mục kịch bản trong hướng dẫn người dùng.
lớn hơn. áp dụng cho các biểu thức số.
expr1 > expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
lớn hơn hoặc bằng.
expr1 >= expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Các toán tử điều kiện ba nguyên tắc.
expr1 ? expr2 : expr3
Ví dụ
// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)
// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)
Trả về giá trịNếu expres1 được đánh giá là true, expres2 sẽ được đánh giá là true, nếu không thì expres3 sẽ được đánh giá là true.
Nhận xétNếu bạn không cần, hãy sử dụng na như là một nhánh của nhánh Else. Bạn có thể sử dụng hai hoặc nhiều hơn: các ký hiệu để thực hiện các câu tương tự như các dấu hiệu chuyển đổi (xem ví dụ trên). Bạn có thể sử dụng các toán tử toán học với số và số lượng các biến. Trong trường hợp sử dụng các số lượng, các toán tử được áp dụng cho các phần tử.
Hẹn gặp lại
na
Chữ con số của chuỗi. Cung cấp quyền truy cập vào các giá trị trước của chuỗi expr1. Expr2 là số của dòng k trong quá khứ và phải là giá trị.
expr1[expr2]
Ví dụ
// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
a := low
plot(a)
Trả về giá trịMột loạt các giá trị.
Hẹn gặp lại
math.floor
Logic AND;; áp dụng cho biểu thức Boolean;;
expr1 and expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Logic OR↑ áp dụng cho biểu thức Boolean↑
expr1 or expr2
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Logical inverse ((NOT) ⇒ áp dụng cho biểu thức Boolean.
not expr1
Trả về giá trịGiá trị Boolean, hoặc một chuỗi giá trị Boolean.
Từ khóa dùng cho các biến hoặc tham số được tuyên bố rõ ràng. Các giá trị của biến "Bool" có thể là true, false hoặc na.
Ví dụ
// bool
bool b = true // Same as `b = true`
b := na
plot(b ? open : close)
Nhận xétViệc đề cập rõ ràng đến kiểu trong tuyên bố biến là tùy chọn, trừ khi nó được khởi tạo bằng na. Tìm hiểu thêm về kiểu Pine trên trang hướng dẫn người dùng của hệ thống kiểu.
Hẹn gặp lại
var
varip
int
float
color
string
true
false
Từ khóa kiểu
Ví dụ
// int
int i = 14 // Same as `i = 14`
i := na
plot(i)
Nhận xétViệc đề cập rõ ràng đến kiểu trong tuyên bố biến là tùy chọn, trừ khi nó được khởi tạo bằng na. Tìm hiểu thêm về kiểu Pine trên trang hướng dẫn người dùng của hệ thống kiểu.
Hẹn gặp lại
var
varip
float
bool
color
string
Từ khóa dùng cho các biến hoặc tham số được tuyên bố rõ ràng.
Ví dụ
// float
float f = 3.14 // Same as `f = 3.14`
f := na
plot(f)
Nhận xétViệc đề cập rõ ràng đến kiểu trong tuyên bố biến là tùy chọn, trừ khi nó được khởi tạo bằng na.
Hẹn gặp lại
var
varip
int
bool
color
string
Từ khóa dùng cho kiểu "string" để tuyên bố rõ ràng các biến hoặc tham số.
Ví dụ
// string
string s = "Hello World!" // Same as `s = "Hello world!"`
// string s = na // same as ""
plot(na, title=s)
Nhận xétViệc đề cập rõ ràng đến kiểu trong tuyên bố biến là tùy chọn, trừ khi nó được khởi tạo bằng na. Tìm hiểu thêm về kiểu Pine trên trang hướng dẫn người dùng của hệ thống kiểu.
Hẹn gặp lại
var
varip
int
float
bool
str.tostring
str.format
Từ khóa dùng cho kiểu "color" để tuyên bố rõ ràng các biến hoặc tham số.
Ví dụ
// color
color textColor = color.green
if barstate.islastconfirmedhistory
runtime.log("test", textcolor = textColor)
Nhận xétChữ màu có định dạng như sau: #RRGGBB hoặc #RRGGBBAA. Các chữ cái đại diện cho giá trị mười sáu chữ số từ 00 đến FF (từ 0 đến 255 chữ số), trong đó RR,GG và BB là các giá trị của các phân số màu đỏ, xanh lá cây và xanh dương. AA là các giá trị tùy chọn cho độ minh bạch màu (hoặc phân số alpha), trong đó 00 không nhìn thấy được, FF không minh bạch. Việc đề cập rõ ràng đến kiểu trong tuyên bố biến là tùy chọn, trừ khi nó được khởi tạo bằng na. Tìm hiểu thêm về kiểu Pine trên trang hướng dẫn người dùng của hệ thống kiểu.
Hẹn gặp lại
var
varip
int
float
string
color.rgb
color.new
Từ khóa dùng cho các kiểu hàm của mảng hàm để tuyên bố rõ ràng các biến hoặc tham số.array.new<type>
,array.from
Chức năng tạo đối tượng mảng (hoặc ID) ⇒
Ví dụ
// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))
Nhận xétCác đối tượng trong mảng luôn có hình thức mảng của chuỗi.
Hẹn gặp lại
var
array.new
array.from
Khi gọi chức năng, bạn có thể chỉ định tên của tham số, bạn có thể truyền biến trực tiếp ở vị trí tham số tương ứng, cũng hỗ trợ sử dụng hỗn hợp. Ví dụ:
plot(close, title="test plot") // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"
Sau khi chỉ định tên tham số, không thể truyền biến trực tiếp như một tham số, và các tham số sau đó phải được viết dưới dạng tên tham số.
// plot(close, title="test", color.red) // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red) // 正确写法
sẽ được chuyển đếntimeframe
Thời gian chu kỳ của tham số được chuyển đổi thành giây.
timeframe.in_seconds(timeframe)
Ví dụ
// Get chart timeframe:
i_tf = input.timeframe("1D")
// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)
plot(tf)
Trả về giá trị
timeframe
Số giây trong một đường K của int được thể hiện dưới dạng.
Các tham số
timeframe
(simple string) chu kỳ thời gian↑ tùy chọn↑ mặc định là timeframe.period↑Nhận xétĐối vớitimeframe
>=
Hẹn gặp lại
input.timeframe
timeframe.period
Tạo một mã nhận dạng yêu cầu trượt giá trị đường K trung bình.
ticker.heikinashi(symbol)
Ví dụ
heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)
Trả về giá trị 股票代码的字符串值,可以提供给request.security函数。
Các tham số
symbol
(simple string) Nhãn nhận dạng mã hóa hàng hóa.Hẹn gặp lại
syminfo.tickerid
syminfo.ticker
request.security
Đơn giản là bạn cần phải có một số thông tin.
request.data(url, attribute)
Ví dụ
/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/
// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")
plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
if add_investor > avg_investor*1.1
runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
strategy.entry("Enter Short", strategy.short)
else if add_investor < avg_investor*0.9
runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
strategy.entry("Enter Long", strategy.long)
Trả về giá trịCác tham sốattribute
Dòng dữ liệu được chỉ định.
Các tham số
url
(simple string) URL của nguồn dữ liệu được yêu cầu, định dạng dữ liệu của nguồn dữ liệu được trả lời cần phải đáp ứng các yêu cầu (ít nhất là chứa thuộc tính time、data):{"data": [], "schema": ["time", "data"]}
◎ Có thể tham khảo các định dạng dữ liệu trong ví dụ:{
"data": [
[1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
[1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
// ...
],
"schema": ["time", "date", "data"]
}
attribute
(simple string) Đặt tên thuộc tính, trả về dữ liệu cần thiết; ví dụ:"$.add_investor"
Sử dụng$.
Như một tiền đề, tên thuộc tính phù hợp với thuộc tính trong trường data trong dữ liệu được trả lời khi nguồn dữ liệu được yêu cầuBạn cần một loại khác / độ phân giải.
request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency)
Ví dụ
s = request.security(syminfo.tickerid, "D", close) // 1 Day
plot(s)
expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)
// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)
Trả về giá trịyêu cầu series
Các tham số
symbol
(simple string) Mã hàng hóa.timeframe
(simple string) chu kỳ thời gian. Dây trống sẽ được giải thích là chu kỳ thời gian hiện tại của biểu đồ.expression
(series int/float/bool/color) có thể được gọi từ request.security và trả về một biểu thức. Nó có thể là một chuỗi hoặc một tập hợp các phần tử có thể được chuyển đổi thành một chuỗi.gaps
(barmerge_gaps) chính sách kết hợp dữ liệu được yêu cầu ((yêu cầu dữ liệu tự động kết hợp với dữ liệu OHLC trong bộ dữ liệu chính)). Giá trị có thể: barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - dữ liệu được yêu cầu được kết hợp với khoảng cách có thể ((na giá trị) ). barmerge.gaps_off - dữ liệu được yêu cầu được kết hợp liên tục không ngừng, tất cả các khoảng trống được lấp đầy trước giá trị hiện có gần đây nhất。 giá trị mặc định là barmerge.gaps_off。lookahead
(barmerge_lookahead) cho chính sách hợp nhất dữ liệu được yêu cầu. Các giá trị có thể: barmerge.lookahead_on, barmerge.lookahead_off. Từ phiên bản 3, giá trị mặc định là barmerge.lookahead_off.ignore_invalid_symbol
(const bool) Một tham số tùy chọn. Nếu không tìm thấy hàng hóa được chỉ định, xác định hành vi của hàm: nếu là false, kịch bản sẽ dừng lại và trả lại lỗi khi chạy; nếu là true, hàm sẽ trả lại na và tiếp tục thực hiện. Giá trị mặc định là false.currency
(simple string) Chuyển đổi giá trị liên quan đến tiền tệ của hàng hóa (ví dụ OHLC) sang tiền tệ; sau đó tính toán giá trị sau khi chuyển đổi theo hàm số biểu thức; tỷ lệ chuyển đổi được sử dụng dựa trên tỷ lệ hối đoái hàng ngày của ngày trước đối với cặp FX_IDC (với so sánh với đường K được tính toán); tùy chọn. Giá trị mặc định là syminfo.currency. Giá trị có thể: một chuỗi ba chữ cái hoặc currency với mã tiền tệ định dạng ISO 4217 (ví dụ: Nhận xétMã PineScript sử dụng chức năng này để thực hiện các tính toán khác nhau đối với các bản ghi lịch sử và dữ liệu thời gian thực.Nếu bạn muốn chỉ định các tham số bổ sung cho hàng hóa được yêu cầu, chẳng hạn như thời gian giao dịch hoặc loại điều chỉnh, bạn có thể thay đổi tùy chọn của bạn.您可以使用ticker.new() hàm.
Không thể sử dụng biến ticker tick để truyền điểm sai cho hàm này. Bạn có thể sử dụng tickticker.newHình thức biểu diễn chuỗi của biến số hoặc mã cổ phiếu, ví dụ như AAPL + MSFT * TSLA Hiện tại, một kịch bản có thể có tối đa 40 cuộc gọi request.security.
Xin lưu ý rằng việc sử dụng biến/chức năng này có thể dẫn đến việc vẽ lại chỉ số.
Các tham số độ phân giải cho phép:
1S, 5S, 15S, 30S - Khoảng giây (chu kỳ biểu đồ nên nhỏ hơn hoặc bằng chu kỳ được yêu cầu)
Từ 1 đến 1440 phút
Từ 1D đến 365D
Từ 1W đến 52W trong vài tuần.
Từ 1M đến 12M trong vài tháng.
Hẹn gặp lại
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Nếusource
Dòng chứastr
Dòng chữ cái, trả về true, nếu không trả về false.
str.contains(source, str)
Ví dụ
// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)
Trả về giá trịNếusource
Tìm trong chuỗistr
, thì là true, nếu không thì là false.
Các tham số
source
(series string) Dòng mã nguồnstr
(series string) Dữ liệu tìm kiếm.Hẹn gặp lại
str.pos
str.match
Nếusource
Dòng chữ cái được tạo bằngstr
Kết thúc của chuỗi con được chỉ định trong trả về true, nếu không trả về false.
str.endswith(source, str)
Trả về giá trịNếusource
Dòng chữ cái được tạo bằngstr
Kết thúc của chuỗi con được chỉ định trong là true, nếu không là false.
Các tham số
source
(series string) Dòng mã nguồnstr
(series string) Dữ liệu tìm kiếm.Hẹn gặp lại
str.startswith
Nếusource
Dòng chữ cái được tạo bằngstr
Đầu của một chuỗi con được chỉ định trong, trả về true, nếu không trả về false.
str.startswith(source, str)
Trả về giá trịNếusource
Dòng chữ cái được tạo bằngstr
Đầu của một chuỗi con được chỉ định trong là true, nếu không là false.
Các tham số
source
(series string) Dòng mã nguồnstr
(series string) Dữ liệu tìm kiếm.Hẹn gặp lại
str.endswith
Trở lại một chuỗi mới, nó làsource
Dòng chữ cái của một chuỗi. Dòng chữ cái của một chuỗi.begin_pos
Chữ trong chỉ mục được chỉ định bắt đầu và mở rộng đếnsource
str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)
Ví dụ
sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":") // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
runtime.log(tkr)
Trả về giá trịDòng chữ cái được lấy từ chuỗi nguồn.
Các tham số
source
(series string) lấy từ đó chuỗi nguồn của chuỗi con.begin_pos
(series int) là vị trí bắt đầu của chuỗi con được trích xuất. Nó là độc quyền (trong chuỗi con được trích xuất bao gồm các ký tự của vị trí đó).end_pos
(series int) kết thúc vị trí. Nó là độc quyền. Các chuỗi được trích xuất không bao gồm các ký tự của vị trí. Tùy chọn.source
Chiều dài của chuỗi.Nhận xétChỉ mục chuỗi bắt đầu từ 0; nếubegin_pos
làend_pos
, hàm trả về một chuỗi trống.
Hẹn gặp lại
str.contains
str.pos
str.match
str.tonumber(string)
Trả về giá trịNếu chứa một số hợp lệ, đó là kiểu dấu tròn của chuỗi, nếu không thì là na.
Các tham số
string
(series string) dạng biểu diễn chuỗi int hoặc float.Chuyển đổi các chuỗi và giá trị định dạng thành các chuỗi định dạng. Các chuỗi định dạng có thể chứa văn bản văn bản và một ký tự trong các dấu ngoặc lớn {} cho mỗi giá trị định dạng. Mỗi ký tự bao gồm chỉ số thay thế các tham số cần thiết của nó (bắt đầu từ 0), và một ký tự định dạng tùy chọn. Chỉ mục cho biết vị trí của tham số trong danh sách các tham số str.format.
str.format(formatString, arg0, arg1, ...)
Ví dụ
// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)
// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)
// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)
// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)
// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)
// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)
// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)
// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)
// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)
Trả về giá trịDữ liệu được định dạng.
Các tham số
formatString
(series string) Dạng chuỗi.arg0, arg1, ...
(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) là giá trị cần định dạng.Nhận xétTất cả các dấu ngoặc trong kiểu không được trích dẫn phải được cân bằng. Ví dụ,
Trả về số nguyên tương ứng với số ký tự trong chuỗi.
str.length(string)
Trả về giá trịSố ký tự trong chuỗi nguồn.
Các tham số
string
(series string) Dòng mã nguồnTrả về một chuỗi mới mà tất cả các chữ cái được chuyển đổi thành chữ cái nhỏ.
str.lower(source)
Trả về giá trịTất cả các chữ cái đã được chuyển thành các chuỗi mới bằng chữ viết nhỏ.
Các tham số
source
(series string) Dòng chữ được chuyển đổi.Hẹn gặp lại
str.upper
Trả về một chuỗi mới mà tất cả các chữ cái được chuyển đổi thành chữ cái lớn.
str.upper(source)
Trả về giá trịTất cả các chữ cái đã được chuyển thành các chuỗi mới chữ cái lớn.
Các tham số
source
(series string) Dòng chữ được chuyển đổi.Hẹn gặp lại
str.lower
Nếu phù hợpregex
Một biểu thức chính xác sẽ trả vềsource
Dòng mới của một chuỗi, nếu không nó sẽ trả về
str.match(source, regex)
Ví dụ
s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")
// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")
if barstate.islastconfirmedhistory
runtime.log(tickerid) // "EXCHAN
ồ ôiLàm thế nào để có nhiều giao dịch đồng thời với một hợp đồng Bitcoin?
Những đám mây nhẹXin vui lòng cho tôi biết, pine có thể giao dịch nhiều lần không? Và cũng có thể giao dịch xuyên suốt như JS không?
Lisa20231Xin cảm ơn vì đã cung cấp các tài liệu chi tiết.
nghệ thuậtWow! Làm thế nào để Pine Script sử dụng OKEX trên nền tảng này?
nghệ thuậtĐiều này đồng nghĩa với việc các chiến lược của nền tảng tradingview được sao chép trực tiếp vào nền tảng của nhà phát minh để sử dụng!
Giấc mơ nhỏNgôn ngữ PINE chỉ có thể thực hiện các chính sách một giống, nhiều giống là tốt nhất hoặc viết thiết kế bằng python, javascript, c ++.
Giấc mơ nhỏỒ, vâng, OKX là khá đặc biệt, môi trường tương tự của họ và môi trường thực của họ là cùng một địa chỉ, chỉ có một sự khác biệt ở nơi khác. Vì vậy, không có cách nào để chuyển đổi địa chỉ cơ sở để chuyển sang ổ đĩa tương tự.
Những đám mây nhẹKhông thể sử dụng okx analog dial............
Giấc mơ nhỏVấn đề kiến trúc đa dạng này không được giải quyết tốt, vì mỗi giao dịch giao diện khác nhau và không giới hạn tần số giao diện khác nhau, sẽ gây ra nhiều vấn đề.
Giấc mơ nhỏĐược rồi, cảm ơn các bạn đã đưa ra đề xuất, hãy báo cáo yêu cầu này nhé.
Những đám mây nhẹCảm thấy tốt hơn khi được kết hợp với JS, JS có thể thích nghi tốt hơn với nhiều cách giao dịch.
Người săn xu hướngBạn có nghĩ đến nhiều giống trong tương lai không?
Giấc mơ nhỏKhông lịch sự.
Những đám mây nhẹTốt, cảm ơn bạn rất nhiều.
Giấc mơ nhỏXin chào, tạm thời, chính sách ngôn ngữ PINE chỉ có thể làm một giống.
Giấc mơ nhỏXin cảm ơn vì sự ủng hộ của bạn.
Giấc mơ nhỏCó, có.
Giấc mơ nhỏPINE Template Library, các tham số có thể được thiết lập để chuyển đổi địa chỉ cơ sở của sàn giao dịch.