Tài nguyên đang được tải lên... tải...

FMZ PINE Script Doc

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2022-04-28 16:05:05, Cập nhật: 2024-10-12 17:25:27

Thay đổi giá trị trường

type order
    float price
    float amount
    string symbol

if strategy.position_size == 0 and open > close
    strategy.entry("long", strategy.long, 1)
    
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

if strategy.position_size != 0
    runtime.log(order1)
    order1.price := 999
    order1.amount := 100
    runtime.log(order1)
    runtime.error("stop")

Giá trị của một trường đối tượng có thể được thay đổi bằng cách sử dụng:=người điều hành chuyển giao.

Bộ sưu tập đối tượng

Ví dụ tuyên bố một mảng trống sẽ chứa các đối tượng của loại thứ tự được xác định bởi người dùng:

type order
    float price
    float amount
    string symbol

arrOrder = array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

hoặc

type order
    float price
    float amount
    string symbol

var array<order> arrOrder = na
arrOrder := array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

Sao chép đối tượng

Trong Pine, các đối tượng được gán theo tham chiếu. Khi một đối tượng hiện có được gán cho một biến mới, cả hai đều tham chiếu đến cùng một đối tượng.

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)

Trong ví dụ sau, chúng ta tạo ra một đối tượng pivot1 và đặt trường x của nó là 1000. Sau đó chúng ta tuyên bố một biến pivot2 có chứa một tham chiếu đến đối tượng pivot1, vì vậy cả hai đều trỏ đến cùng một trường hợp. Do đó, thay đổi pivot2.x cũng thay đổi pivot1.x, bởi vì cả hai đều tham chiếu đến trường x của cùng một đối tượng.

Để tạo một bản sao độc lập với đối tượng gốc, trong trường hợp này chúng ta có thể sử dụng phương pháp copy ((()) tích hợp. Trong ví dụ này, chúng ta tuyên bố biến pivot2 để tham chiếu đến trường hợp sao chép của đối tượng pivot1. Bây giờ, thay đổi pivot2.x sẽ không thay đổi pivot1.x, bởi vì nó đề cập đến trường x của một đối tượng riêng biệt:

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)

Cần lưu ý rằng phương pháp copy của TradingView là một bản sao nông. Nếu một đối tượng có các loại trường đặc biệt (bảng, vv), các trường trong bản sao nông của đối tượng sẽ trỏ đến cùng một trường hợp như đối tượng. Nền tảng FMZ trực tiếp thực hiện sao chép sâu, và không cần xử lý bổ sung.

Bản sao sâu

//@version=5

indicator("test deepCopy")

type orderInfo
    float price
    float amount

type labelInfo
    orderInfo order
    string labelMsg

labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)

labelInfo1.labelMsg := "labelInfo1->2"    // Modify the base type field of labelInfo1 to see if it affects labelInfo2
labelInfo1.order.price := 999             // Modify the composite type field of labelInfo1 to see if it affects labelInfo2

runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")

Kết quả thử nghiệm cho thấy labelInfo.copy ((labelInfo1) là một bản sao sâu khi thực hiện và sửa đổi bất kỳ trường nào của labelInfo1 sẽ không ảnh hưởng đến labelInfo2.

Phương pháp

Các phương thức trong ngôn ngữ Pine là các hàm đặc biệt được liên kết với một thực thể cụ thể của một loại được xây dựng hoặc được người dùng xác định. Về hầu hết các khía cạnh, chúng về cơ bản giống như các hàm thông thường, nhưng cung cấp cú pháp ngắn hơn, thuận tiện hơn. Người dùng có thể truy cập các phương thức trực tiếp trên các biến bằng cách sử dụng ký hiệu chấm, giống như truy cập các trường của các đối tượng Pine. Pine bao gồm các phương thức tích hợp cho tất cả các loại đặc biệt, bao gồm mảng, ma trận, bản đồ, đường, đường điền và nhiều hơn nữa.

Phương pháp tích hợp

Ví dụ, một mã kịch bản như thế này:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    array.push(sourceArray, sourceInput)
    array.shift(sourceArray)
    // Update the mean and standard deviaiton values.
    sampleMean := array.avg(sourceArray)
    sampleDev  := array.stdev(sourceArray) * multiplier

// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Có thể được viết lại tương đương như:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Bạn có thể thấy rằng sau khi Pine hỗ trợMethods, mãarray.avg(sourceArray)có thể được viết dưới dạng các phương pháp:sourceArray.avg(). Lưu ý rằng FMZ không hỗ trợ các cuộc gọi nhưarray.avg currently.

Phương pháp được xác định bởi người dùng

Pine cho phép người dùng xác định các phương thức tùy chỉnh hoạt động với các đối tượng của bất kỳ loại tích hợp hoặc được người dùng xác định.

  1. Từ khóa phương thức phải được bao gồm trước tên hàm.
  2. Loại tham số đầu tiên của phương thức phải được tuyên bố rõ ràng vì nó đại diện cho loại đối tượng mà phương pháp sẽ được liên kết.

Ví dụ, trong mã sau đây, mã để tính toán chỉ số Bollinger được tóm tắt như một phương pháp được xác định bởi người dùng:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Được sửa đổi thành:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
    if takeSample
        srcArray.push(value)
        srcArray.shift()
    srcArray

method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
    var float mean = na
    var float dev  = na
    if calculate
        mean := srcArray.avg()
        dev  := srcArray.stdev() * mult
    [mean, mean + dev, mean - dev]

bool newSample = bar_index % n == 0

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Bạn có thể thấy rằng tham số đầu tiên trong danh sách tham số của các phương thức được xác định bởi người dùng được tuyên bố với phương thức từ khóa: maintainQueue và calcBB là loạiarray<float>, có nghĩa là phương pháp là phương pháp của một biến thể loạiarray<float>, vì vậy bạn có thể thấy rằng mã sau được gọi để tính toán chỉ số Bollinger.

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

Phương pháp quá tải

Các phương thức được xác định bởi người dùng có thể ghi đè và quá tải các phương thức tích hợp sẵn và các phương thức được xác định bởi người dùng với cùng một nhận dạng. Tính năng này cho phép người dùng xác định nhiều thói quen liên quan đến các chữ ký lập luận khác nhau dưới cùng một tên phương thức. Như một ví dụ đơn giản, giả sử chúng ta muốn xác định một phương thức để xác định loại biến. Vì chúng ta phải xác định rõ ràng loại đối tượng liên quan đến một phương thức được xác định bởi người dùng, chúng ta cần xác định quá tải cho mỗi loại chúng ta muốn nó nhận diện. Tiếp theo chúng ta xác định một phương thức getType (()) trả về một biểu diễn chuỗi của một biến kiểu s và có quá tải cho năm loại cơ bản:

//@version=5
indicator("Type Inspection")

// @function   Identifies an object's type.
// @param this Object to inspect.
// @returns    (string) A string representation of the type.
method getType(int this) =>
    na(this) ? "int(na)" : "int"

method getType(float this) =>
    na(this) ? "float(na)" : "float"

method getType(bool this) =>
    na(this) ? "bool(na)" : "bool"

method getType(color this) =>
    na(this) ? "color(na)" : "color"

method getType(string this) =>
    na(this) ? "string(na)" : "string"

a = 1             // a.getType(): float
b = 1.0           // b.getType(): float
c = true          // c.getType(): bool
d = color.white   // d.getType(): string(na)
e = "1"           // e.getType(): string

runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")

Loại cơ sở của mỗi biến xác định mức quá tải củagetType()Trên nền tảng FMZ, vì thực hiện cơ bản của các kịch bản PINE là Javascript, kiểu số sẽ được đánh giá là dữ liệu dấu phẩy nổi (float).

Chức năng tích hợp

Khi gọi một hàm, bạn có thể truyền các đối số. Bạn có thể gán tên đối số để gán giá trị. Bạn có thể trực tiếp truyền các biến trong các vị trí đối số tương ứng. Sử dụng hỗn hợp cũng được hỗ trợ. Ví dụ:

plot(close, title="test plot")     // Pass the argument close directly; specify the argument title and assign the string "test plot"

Sau khi chỉ định việc gán tên đối số, bạn không còn có thể trực tiếp truyền biến thành một đối số, và các đối số tiếp theo phải được viết dưới dạng gán tên đối số.

// plot(close, title="test", color.red)    // Although the third argument of plot is the color value, but this will report an error
plot(close, title="test", color=color.red) // Correct writing
plot(close, "test", color.red)             // Correct writing

khung thời gian

khung thời gian.in_seconds

Chuyển đổi khoảng thời gian trôi quatimeframelập luận trong vài 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)

Quay lạiMột đại diện int của số giây trong một thanh của mộttimeframe.

Các lập luận

  • timeframe(trong chuỗi đơn giản) khung thời gian. tùy chọn. mặc định là khung thời gian. thời gian.

Nhận xétĐối vớitimeframeChức năng >= 1M tính toán số giây dựa trên 30,4167 (365/12) ngày trong tháng.

Xem thêm input.timeframe timeframe.period

ticker

ticker.heikinashi

Tạo một mã nhận dạng ticker để yêu cầu một giá trị đại diện int trung bình trơn tru.

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)

Quay lạiGiá trị chuỗi của mã cổ phiếu có thể được cung cấp cho hàm request.security.

Các lập luận

  • symbol(dòng chuỗi đơn giản) mã sản phẩm.

Xem thêm syminfo.tickerid syminfo.ticker request.security

yêu cầu

request.data

Yêu cầu dữ liệu bên ngoài.

request.data(url, attribute)

Ví dụ

/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice

plot(diff, "perpetual-spot difference")
plot(futuresPrice, "futures prices", overlay=true)
plot(spotPrice, "spot prices", overlay=true)

if diff > 80 and strategy.position_size >= 0
    runtime.log("diff > 80")
    strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
    runtime.log("diff < 60")
    strategy.entry("Enter Short", strategy.long)

Giá trị trả lạiĐối số thuộc tính xác định chuỗi dữ liệu.

Các lập luận

  • url(dòng chuỗi đơn giản) URL nguồn dữ liệu được yêu cầu và định dạng dữ liệu của phản hồi nguồn dữ liệu phải đáp ứng các yêu cầu (bao gồm ít nhất các thuộc tính thời gian và dữ liệu):{"data": [], "schema": ["time", "data"]}Bạn có thể tham khảo định dạng dữ liệu trong ví dụ:

    {
        "data": [
            [1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
            [1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
            // ...
        ],
        "schema": ["time", "data"]
    }
    
  • attribute(simple string) chỉ định tên thuộc tính và trả về dữ liệu cần thiết. Ví dụ:"$.spot_close_price", sử dụng$.như tiền tố, và tên thuộc tính phù hợp với thuộc tính trong trường dữ liệu trong dữ liệu trong phản hồi khi yêu cầu nguồn dữ liệu

Nếu một lỗi được yêu cầu, bạn cần phải kiểm tra xem phạm vi thời gian được yêu cầu bởirequest.datalà phù hợp với khoảng thời gian được thiết lập cho backtest. Nếu không có dữ liệu nào có thể được truy vấn trong chuỗi thời gian backtest, sẽ báo cáo lỗi.

Tuyên bố SQL truy vấn dữ liệu dữ liệu trong ví dụ này là:

WITH latest_data AS (
    SELECT 
        klines.spot_1d.Time AS time,
        CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
    FROM 
        klines.spot_1d
    JOIN 
        klines.future_1d
    ON 
        klines.spot_1d.Time = klines.future_1d.Time
    WHERE
        klines.spot_1d.Symbol = 'btc_usdt'
    AND 
        klines.future_1d.Symbol = 'btc_usdt.swap'
    AND 
        klines.spot_1d.Exchange = 'Binance'
    AND 
        klines.future_1d.Exchange = 'Binance'
    ORDER BY 
        klines.spot_1d.Time DESC
    LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;

Bạn có thể truy vấn và tạo liên kết dữ liệu trênKhảo sát dữ liệutrang của nền tảng FMZ, đó làhttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/datađược sử dụng trong ví dụ.

request.security

Yêu cầu 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)

Quay lạiDòng yêu cầu

Các lập luận

  • symbolBiểu tượng.
  • timeframeMột chuỗi trống được giải thích là độ phân giải hiện tại của biểu đồ.
  • expression(series int/float/bool/color) Một biểu thức có thể được tính toán và trả về từ cuộc gọi request.security.
  • gaps(barmerge_gaps) Chiến lược sáp nhập cho dữ liệu được yêu cầu (dữ liệu được yêu cầu tự động sáp nhập với dữ liệu OHLC loạt chính). Các giá trị có thể: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - dữ liệu được yêu cầu được sáp nhập với các khoảng trống có thể (không có giá trị). barmerge.gaps_off - dữ liệu được yêu cầu được sáp nhập liên tục mà không có khoảng trống, tất cả các khoảng trống được lấp đầy với các giá trị hiện có gần nhất trước đó. Giá trị mặc định là barmerge.gaps_off.
  • lookahead(barmerge_lookahead) Chiến lược sáp nhập cho vị trí dữ liệu được yêu cầu. Các giá trị có thể: barmerge.lookahead_on, barmerge.lookahead_off. Giá trị mặc định là barmerge.lookahead_off bắt đầu từ phiên bản 3. Lưu ý rằng hành vi giống nhau trong thời gian thực và chỉ khác nhau trên lịch sử.
  • ignore_invalid_symbol(const bool) Một đối số tùy chọn. Xác định hành vi của hàm nếu biểu tượng được chỉ định không được tìm thấy: nếu không đúng, kịch bản sẽ dừng lại và trả lại lỗi thời gian chạy; nếu đúng, hàm sẽ trả lại na và thực thi sẽ tiếp tục. Giá trị mặc định là sai.
  • currency(simple string) Tiền tệ mà các giá trị liên quan đến tiền tệ của ký hiệu (ví dụ OHLC) sẽ được chuyển đổi.expressionsau đó được tính dựa trên các giá trị chuyển đổi. Tỷ lệ chuyển đổi được sử dụng dựa trên các cặp FX_IDC tỷ lệ hàng ngày của ngày trước (so với thanh mà tính toán được thực hiện). Tùy chọn. mặc định là syminfo.currency. Các giá trị có thể: một chuỗi ba chữ cái với mã tiền tệ theo định dạng ISO 4217 (ví dụ: USD) hoặc một trong những hằng số trong không gian tên tiền tệ.*, ví dụ: currency.USD.

Nhận xétMã PineScript sử dụng chức năng này có thể tính toán khác nhau trên dữ liệu lịch sử và thời gian thực. Nếu bạn muốn xác định các đối số bổ sung cho biểu tượng được yêu cầu, ví dụ như phiên hoặc loại điều chỉnh, bạn có thể sử dụngticker.new() chức năng. Không thể truyền một phân bố cho hàm này bằng cách sử dụng biến ticker. Bạn có thể sử dụngticker.new biến hoặc biểu diễn chuỗi của ticker, ví dụ: AAPL+MSFT*TSLA. Hiện tại, có thể có tới 40 cuộc gọi request.security trong một kịch bản. Xin lưu ý rằng việc sử dụng biến/chức năng này có thể gây ra việc sơn lại chỉ số.

Các giá trị cho phép của đối số giải quyết là: 1S, 5S, 15S, 30S - cho các khoảng thời gian giây (phân giải biểu đồ nên nhỏ hơn hoặc bằng với độ phân giải yêu cầu) từ 1 đến 1440 cho phút từ 1D đến 365D trong ngày từ 1W đến 52W trong vài tuần từ 1M đến 12M trong nhiều tháng

Xem thêm syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

Trả về đúng nếusourcechuỗi chứa cácstrSubstring, sai nếu không.

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)

Quay lạiĐúng nếustrđược tìm thấy trongsourcestring, sai nếu không.

Các lập luận

  • source(serial string) nguồn string.
  • str(serial string) Dòng chuỗi phụ để tìm kiếm.

Xem thêm str.pos str.match

str.endswith

Trả về đúng nếusourcechuỗi kết thúc với chuỗi con được chỉ định trongstrNếu không thì sai.

str.endswith(source, str)

Quay lạiĐúng nếusourcechuỗi kết thúc với chuỗi con được chỉ định trongstrNếu không thì sai.

Các lập luận

  • source(serial string) nguồn string.
  • str(serial string) Dòng chuỗi phụ để tìm kiếm.

Xem thêm str.startswith

str.startswith

Trả về đúng nếusourcechuỗi bắt đầu với chuỗi con được chỉ định trongstrNếu không thì sai.

str.startswith(source, str)

Quay lạiĐúng nếusourcechuỗi bắt đầu với chuỗi con được chỉ định trongstrNếu không thì sai.

Các lập luận

  • source(serial string) nguồn string.
  • str(serial string) Dòng chuỗi phụ để tìm kiếm.

Xem thêm str.endswith

str.substring

Trả về một chuỗi mới là một chuỗi con củasourceCác substring bắt đầu với các ký tự tại chỉ mục được chỉ định bởibegin_posvà mở rộng đến end_pos - 1 củasource string.

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)

Quay lạiDòng chuỗi phụ được trích xuất từ chuỗi nguồn.

Các lập luận

  • source(dòng chuỗi) Dòng nguồn để trích xuất chuỗi con.
  • begin_pos(series int) Vị trí bắt đầu của chuỗi phụ được trích xuất. Nó bao gồm (s chuỗi phụ được trích xuất bao gồm ký tự ở vị trí đó).
  • end_pos(series int) Vị trí kết thúc. Nó là độc quyền (dòng chuỗi được trích xuất KHÔNG bao gồm ký tự vị trí đó). Tùy chọn.source string.

Nhận xétChỉ mục chuỗi bắt đầu từ 0. Nếubegin_posbằng vớiend_pos, hàm trả về một chuỗi trống.

Xem thêm str.contains str.pos str.match

str.tonumber

str.tonumber(string)

Quay lạiMột phiên bản float của chuỗi nếu nó chứa một số hợp lệ, na nếu không.

Các lập luận

  • string(dòng chuỗi) biểu diễn chuỗi của một int hoặc float.

str.format

Chuyển đổi chuỗi định dạng và giá trị (s) thành chuỗi định dạng. chuỗi định dạng có thể chứa văn bản theo nghĩa đen và một vị trí giữ chỗ trong dấu ngoặc xoắn {} cho mỗi giá trị được định dạng. Mỗi vị trí giữ chỗ bao gồm chỉ mục của đối số yêu cầu (bắt đầu từ 0) sẽ thay thế nó, và một trình chỉ định định dạng tùy chọn. Chỉ mục đại diện cho vị trí của đối số đó trong danh sách đối 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)

Quay lạiDòng chữ được định dạng.

Các lập luận

  • formatString(serial string) định dạng string.
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) Giá trị định dạng.

Nhận xétBất kỳ thắt nét lăn nào trong một mẫu không được trích dẫn phải được cân bằng. Ví dụ, ab {0} deab } de là các mẫu hợp lệ, nhưng ab {0} de, ab } de{ không.

str.length

Trả về một số nguyên tương ứng với số lượng chars trong chuỗi đó.

str.length(string)

Quay lạiSố ký tự trong chuỗi nguồn.

Các lập luận

  • string(serial string) nguồn string.

str.lower

Trả về một chuỗi mới với tất cả các chữ cái được chuyển đổi thành chữ cái nhỏ.

str.lower(source)

Quay lạiMột chuỗi mới với tất cả các chữ cái được chuyển đổi thành chữ cái nhỏ.

Các lập luận

  • source(dòng chuỗi) Dòng được chuyển đổi.

Xem thêm str.upper

str.upper

Trả về một chuỗi mới với tất cả các chữ cái được chuyển đổi thành chữ cái lớn.

str.upper(source)

Quay lạiMột chuỗi mới với tất cả các chữ cái được chuyển đổi thành chữ cái lớn.

Các lập luận

  • source(dòng chuỗi) Dòng được chuyển đổi.

Xem thêm str.lower

str.match

Trả về chuỗi con mới củasourcechuỗi nếu nó phù hợp với mộtregexbiểu hiện thông thường, na khác.

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) // "EXCHANGE_NAME:SYMBOL_NAME"

Quay lạiCác chuỗi con mới củasourcechuỗi nếu nó phù hợp với mộtregexbiểu hiện thông thường, na khác.

Các lập luận

  • source(serial string) nguồn string.
  • regex(dòng chuỗi) biểu thức thường mà chuỗi này sẽ được khớp.

Nhận xétChức năng trả về lần xuất hiện đầu tiên của biểu thức đều đặn trongsourcedây. Biểu tượng backslash regexstring cần được thoát với dấu gạch ngược bổ sung, ví dụ: \d đại diện cho biểu thức thường \d.

Xem thêm str.contains str.substring

str.pos

Trả về vị trí của lần xuất hiện đầu tiên củastrdây trongsourcestring, na nếu không.

str.pos(source, str)

Quay lạiVị trí củastrdây trongsource string.

Các lập luận

  • source(serial string) nguồn string.
  • str(serial string) Dòng chuỗi phụ để tìm kiếm.

Nhận xétChỉ mục chuỗi bắt đầu từ 0.

Xem thêm str.contains str.match str.substring

str.replace

Trả về một chuỗi mới với sự xuất hiện N + 1 củatargetchuỗi và sự xuất hiện trước đó củatargetchuỗi thay thế bằngreplacementchuỗi, trong đó N được chỉ định trongoccurrence. N là chỉ số khớp của chuỗi mục tiêu được thay thế trong chuỗi nguồn.

str.replace(source, target, replacement, occurrence)

Ví dụ

var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"

// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1",  "EXCHANGE2", 0)

if barstate.islastconfirmedhistory
    // Display "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
    runtime.log(newSource)

Quay lạiDòng dây đã được xử lý.

Các lập luận

  • source(serial string) nguồn string.
  • target(serial string) String để được thay thế.
  • replacement(dòng chuỗi) Dòng được chèn thay vì chuỗi mục tiêu.
  • occurrence(series int) Chỉ số khớp của sự xuất hiện của chuỗi mục tiêu được thay thế trong chuỗi nguồn Indexing bắt đầu từ 0 cho sự khớp đầu tiên. Tùy chọn. Giá trị mặc định là 0.

Xem thêm str.replace_all str.match

str.replace_all

Thay thế mỗi lần xuất hiện của chuỗi mục tiêu trong chuỗi nguồn bằng chuỗi thay thế.

str.replace_all(source, target, replacement)

Quay lạiDòng dây đã được xử lý.

Các lập luận

  • source(serial string) nguồn string.
  • target(serial string) String để được thay thế.
  • replacement(serial string) Dòng chữ được thay thế cho mỗi lần xuất hiện của chuỗi mục tiêu.

str.split

Chia một chuỗi thành một mảng các chuỗi con và trả về ID mảng của nó.

str.split(string, separator)

Quay lạiID của một mảng các chuỗi.

Các lập luận

  • string(serial string) nguồn string.
  • separator(s string series) Dây chuỗi tách mỗi chuỗi phụ.

str.tostring

str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)

Quay lạiCác đại diện chuỗi củavaluetranh cãi. Nếuvalueđối số là một chuỗi, nó được trả về như vậy. Khivaluelà na, hàm trả về chuỗi NaN.

Các lập luận

  • value(series int/float/bool/string/int[]/float[]/bool[]/string[]) Giá trị hoặc mã số mảng mà các phần tử được chuyển đổi thành một chuỗi.
  • format(serial string) Format string. Chấp nhận các định dạng.* hằng số: format.mintick, format.percent, format.volume. Tùy chọn. Giá trị mặc định là #.##########

Nhận xétViệc định dạng các giá trị float cũng sẽ làm tròn các giá trị đó khi cần thiết, ví dụ: str.tostring ((3.99, #) sẽ trả về 4. Để hiển thị các số không sau, hãy sử dụng 0 thay vì #. Ví dụ, #.000. Khi sử dụng format.mintick, giá trị sẽ được làm tròn thành số gần nhất có thể được chia cho syminfo.mintick mà không có phần còn lại. Dòng được trả về với số không sau. Nếu đối số x là một chuỗi, cùng một giá trị chuỗi sẽ được trả về. Các đối số kiểu Bool trả về true hoặc false. Khi x là na, hàm trả về NaN.

màu sắc

color.new

Màu hàm áp dụng độ minh bạch được chỉ định cho màu được đưa ra.

color.new(color, transp)

Ví dụ

plot(close, color=color.new(color.red, 50))

Quay lạiMàu sắc với độ minh bạch được chỉ định.

Các lập luận

  • color(màu loạt)
  • transp(series int/float) Các giá trị có thể là từ 0 (không minh bạch) đến 100 (không hiển thị).

Nhận xétSử dụng các đối số không phải là hằng số (ví dụ: simple, input hoặc series) sẽ ảnh hưởng đến màu sắc hiển thị trong tab Settings/Style của kịch bản.

color.rgb

Tạo một màu mới với độ minh bạch bằng cách sử dụng mô hình màu RGB.

color.rgb(red, green, blue, transp)

Ví dụ

plot(close, color=color.rgb(255, 0, 0, 50))

Quay lạiMàu sắc với độ minh bạch được chỉ định.

Các lập luận

  • red(series int/float) thành phần màu đỏ. Các giá trị có thể là từ 0 đến 255.
  • green(series int/float) thành phần màu xanh lá cây. Các giá trị có thể là từ 0 đến 255.
  • blue(series int/float) thành phần màu xanh. Các giá trị có thể là từ 0 đến 255.
  • transp(series int/float) Tùy chọn. Độ minh bạch màu sắc. Các giá trị có thể là từ 0 (mờ) đến 100 (không nhìn thấy). Giá trị mặc định là 0.

Nhận xétSử dụng các đối số không phải là hằng số (ví dụ: simple, input hoặc series) sẽ ảnh hưởng đến màu sắc hiển thị trong tab Settings/Style của kịch bản.

thời gian chạy

runtime.debug

In thông tin biến vào bảng điều khiển.

Các chức năng cụ thể về ngôn ngữ FMZ PINE,runtime.debug(value), chỉ với một cuộc tranh luận.

runtime.log

Nội dung đầu ra trong nhật ký.

Các chức năng cụ thể về ngôn ngữ FMZ PINE,runtime.log(1, 2, 3, close, high, ...), bạn có thể vượt qua nhiều lập luận.

runtime.error

Khi được gọi, gây ra một lỗi thời gian chạy với thông báo lỗi được chỉ định trongmessage argument.

runtime.error(message)

Các lập luậnthông báo (dòng chuỗi) thông báo lỗi.

đầu vào

đầu vào

Thêm đầu vào vào tab Inputs của cài đặt kịch bản, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản. Chức năng này tự động phát hiện loại đối số được sử dụng cho defval và sử dụng widget đầu vào tương ứng.

input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)

Ví dụ

i_switch = input(true, "On/Off")     // Set true, the default is checked.
plot(i_switch ? open : na)

i_len = input(7, "Length")
i_src = input(close, "Source")       // Drop-down box, select close by default.
plot(ta.sma(i_src, i_len))

i_col = input(color.red, "Plot Color")
plot(close, color=i_col)

i_text = input("Hello!", "Message")
runtime.log(i_text)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const int/float/bool/string/color or source-type built-in) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng script có thể thay đổi nó.close, hlc3, vv
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.

Nhận xétKết quả của hàm đầu vào luôn nên được gán cho một biến, xem ví dụ trên.

Xem thêm input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản. Chức năng này thêm một menu thả xuống cho phép người dùng chọn một nguồn cho phép tính toán, ví dụ như đóng, hl2, vv Nếu kịch bản chỉ bao gồm một input.source() gọi, người dùng cũng có thể chọn một đầu ra từ một chỉ số khác trên biểu đồ của họ như là nguồn.

input.source(defval, title, tooltip, inline, group)

Ví dụ

i_src = input.source(close, "Source")
plot(i_src)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(series int/float) Định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng có thể thay đổi nó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.

Nhận xétKết quả của hàm input.source luôn nên được gán cho một biến, xem ví dụ ở trên.

Xem thêm input.bool input.int input.float input.string input.timeframe input.color input

input.string

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản.

input.string(defval, title, options, tooltip, inline, group, confirm)

Ví dụ

i_text = input.string("Hello!", "Message")
runtime.log(i_text)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const string) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng có thể thay đổi nó.optionsĐâu phải là một trong số đó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • options(Danh sách các hằng số: [...]) Một danh sách các tùy chọn để lựa chọn.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, thì người dùng sẽ được yêu cầu xác nhận giá trị đầu vào trước khi chỉ số được thêm vào biểu đồ. Giá trị mặc định là sai.

Nhận xétKết quả của hàm input.string luôn nên được gán cho một biến, xem ví dụ ở trên.

Xem thêm input.bool input.int input.float input.timeframe input.source input.color input

input.bool

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản.

input.bool(defval, title, tooltip, inline, group, confirm)

Ví dụ

i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const bool) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của kịch bản, từ đó người dùng có thể thay đổi nó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, thì người dùng sẽ được yêu cầu xác nhận giá trị đầu vào trước khi chỉ số được thêm vào biểu đồ. Giá trị mặc định là sai.

Nhận xétKết quả của hàm input.bool luôn nên được gán cho một biến, xem ví dụ ở trên.

Xem thêm input.int input.float input.string input.timeframe input.source input.color input

input.int

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản.

input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm) 
input.int(defval, title, options, tooltip, inline, group, confirm)

Ví dụ

i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))

i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const int) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng script có thể thay đổi nó.optionsĐâu phải là một trong số đó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • minval(const int) Giá trị tối thiểu có thể của biến đầu vào.
  • maxval(const int) Giá trị tối đa có thể của biến đầu vào.
  • step(const int) Giá trị bước được sử dụng để tăng / giảm đầu vào. Tùy chọn. mặc định là 1.
  • options(cặp các giá trị const int: [val1, val2,...]) Một danh sách các tùy chọn để chọn từ menu thả xuống, được tách bằng dấu phẩy và kèm theo trong ngoặc kép: [val1, val2,...].minval, maxvalstepkhông thể sử dụng.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, thì người dùng sẽ được yêu cầu xác nhận giá trị đầu vào trước khi chỉ số được thêm vào biểu đồ. Giá trị mặc định là sai.

Nhận xétKết quả củainput.inthàm luôn nên được gán cho một biến, xem ví dụ ở trên.

Xem thêm input.bool input.float input.string input.timeframe input.source input.color input

input.float

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản.

input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)

Ví dụ

i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)

i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const int/float) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng script có thể thay đổi nó.optionsĐâu phải là một trong số đó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • minval(const int/float) Giá trị tối thiểu có thể của biến đầu vào.
  • maxval(const int/float) Giá trị tối đa có thể của biến đầu vào.
  • step(const int/float) Giá trị bước được sử dụng để tăng hoặc giảm đầu vào. Tùy chọn. mặc định là 1.
  • options(đội các giá trị const int / float: [val1, val2,...]) Một danh sách các tùy chọn để chọn từ menu thả xuống, được tách bằng dấu phẩy và được đặt trong ngoặc kép: [val1, val2,...].minval, maxvalstepkhông thể sử dụng.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, thì người dùng sẽ được yêu cầu xác nhận giá trị đầu vào trước khi chỉ số được thêm vào biểu đồ. Giá trị mặc định là sai.

Nhận xétKết quả của hàm input.float luôn nên được gán cho một biến, xem ví dụ ở trên.

Xem thêm input.bool input.int input.string input.timeframe input.source input.color input

input.color

Thêm một đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản.

input.color(defval, title, tooltip, inline, group, confirm) 

Ví dụ

i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const color) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng có thể thay đổi nó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, thì người dùng sẽ được yêu cầu xác nhận giá trị đầu vào trước khi chỉ số được thêm vào biểu đồ. Giá trị mặc định là sai.

Nhận xétKết quả của hàm input.color luôn nên được gán cho một biến, xem ví dụ trên.

Xem thêm input.bool input.int input.float input.string input.timeframe input.source input

input.price

Thêm nhập giá vào tab Settings/Inputs của script.confirm = truekích hoạt chế độ đầu vào tương tác trong đó một giá được chọn bằng cách nhấp vào biểu đồ.

input.price(defval, title, tooltip, inline, group, confirm) 

Ví dụ

price1 = input.price(title="Date", defval=42)
plot(price1)

price2 = input.price(54, title="Date")
plot(price2)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const int/float) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng có thể thay đổi nó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • tooltip(const string) Dây chuỗi sẽ được hiển thị cho người dùng khi di chuyển qua biểu tượng tooltip.
  • inline(const string) Kết hợp tất cả các cuộc gọi đầu vào sử dụng cùng một đối số trong một dòng. Dòng được sử dụng như một đối số không được hiển thị. Nó chỉ được sử dụng để xác định các đầu vào thuộc cùng một dòng.
  • group(const string) Tạo một tiêu đề trên tất cả các đầu vào bằng cách sử dụng cùng một chuỗi đối số nhóm.
  • confirm(const bool) Nếu đúng, chế độ đầu vào tương tác được bật và lựa chọn được thực hiện bằng cách nhấp vào biểu đồ khi chỉ số được thêm vào biểu đồ, hoặc bằng cách chọn chỉ số và di chuyển lựa chọn sau đó. Tùy chọn. mặc định là sai.

Nhận xétKhi sử dụng chế độ tương tác, đầu vào thời gian có thể được kết hợp với đầu vào giá nếu cả hai cuộc gọi hàm sử dụng cùng một đối số choinline argument.

Xem thêm input.bool input.int input.float input.string input.resolution input.source input.color input

input.timeframe

Thêm đầu vào vào tab Inputs của cài đặt kịch bản của bạn, cho phép bạn cung cấp các tùy chọn cấu hình cho người dùng kịch bản. Chức năng này thêm một menu thả xuống cho phép người dùng chọn một khung thời gian cụ thể thông qua trình chọn khung thời gian và trả về dưới dạng chuỗi.

input.timeframe(defval, title, options, tooltip, inline, group, confirm)

Ví dụ

i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security("syminfo.tickerid", i_res, close)
plot(s)

Quay lạiGiá trị của biến đầu vào.

Các lập luận

  • defval(const string) Xác định giá trị mặc định của biến đầu vào được đề xuất trong tab Settings/Inputs của script, từ đó người dùng có thể thay đổi nó.optionsĐâu phải là một trong số đó.
  • title(const string) Tiêu đề của đầu vào. Nếu không được chỉ định, tên biến được sử dụng làm tiêu đề của đầu vào. Nếu tiêu đề được chỉ định, nhưng nó trống, tên sẽ là một chuỗi trống.
  • options(đóng lên)

Thêm nữa

Người ăn xinTại sao chiến lược quảng trường sao chép chiến lược của Pine không thể thực hiện

Những nhà phát minh định lượng - những giấc mơ nhỏĐược rồi, chúng ta kiểm tra xem.

Người ăn xinTheo dõi xu hướng được tối ưu hóa của Zhang Giang

Những nhà phát minh định lượng - những giấc mơ nhỏXin chào, tôi muốn hỏi chiến lược cụ thể của bạn là gì?