資源の読み込みに... 荷物...

FMZ PINE スクリプト ドック

作者: リン・ハーン発明者 量化 - 微かな夢, 作成日:2022-04-28 16:05:05, 更新日:2024-10-12 17:25:27

フィールド値を変更する

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")

オブジェクトフィールドの値は,:=転用操作者

オブジェクトコレクション

この例では,ユーザが定義した順序型のオブジェクトを保持する空の配列を宣言します.

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")

または

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")

コピーオブジェクト

パインでは,オブジェクトは参照によって割り当てられます.既存のオブジェクトが新しい変数に割り当てられたとき,どちらも同じオブジェクトを参照します.

//@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)

次の例では,ピボット1オブジェクトを作成し,そのxフィールドを1000に設定します.その後,ピボット1オブジェクトへの参照を含むピボット2変数を宣言します.したがって,どちらも同じインスタンスを指します.したがって,ピボット2.xを変更すると,どちらも同じオブジェクトのxフィールドを指すため,ピボット1.xも変更されます.

オリジナルオブジェクトから独立したコピーを作成するには,この場合,組み込みコピー() メソッドを使用できます.この例では,ピボット1オブジェクトのコピーインスタンスを参照するために変数pivot2を宣言します.今,ピボット2.xを変更すると,別のオブジェクトのxフィールドを参照するため,ピボット1.xは変更されません.

//@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)

TradingViewのコピーメソッドは浅いコピーであることに注意してください.オブジェクトが特殊な種類のフィールド (配列など) を持っていれば,オブジェクトの浅いコピー内のこれらのフィールドはオブジェクトと同じインスタンスを指します. FMZプラットフォームは直接ディープコピーを実装し,追加の処理は必要ありません.以下の例を参照してください:

深層コピー

//@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")

テスト結果は labelInfo.copy ((labelInfo1) が実行されたときにディープコピーであることを示し, labelInfo1 の任意のフィールドを変更すると labelInfo2 に影響しません.

方法

パイン言語のメソッドは,組み込みまたはユーザー定義型の特定のインスタンスの関連した特殊機能である.ほとんどの点で,それらは基本的に通常の関数と同じであるが,より短く,より便利な文法を提供します.ユーザーは,パインオブジェクトのフィールドにアクセスするように,ドットノテーションを使用して変数に直接メソッドにアクセスできます. パインには,配列,行列,マップ,線,フイルラインなどすべての特殊型のための組み込みメソッドが含まれます.これらのメソッドは,スクリプトでこれらのタイプの特殊プログラムを呼び出すより簡潔な方法を提供します.

組み込み方法

例えば こんなスクリプトコードです

//@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)

相当に書き換えることができます:

//@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)

PINEのサポート後Methods, コードarray.avg(sourceArray)方法として書ける:sourceArray.avg()- わかった FMZは,このような呼び出しをサポートしないことに注意してください.array.avg currently.

ユーザが定義した方法

パインは,ユーザが任意の内蔵またはユーザー定義型のオブジェクトで動作するカスタムメソッドを定義することを可能にします.メソッドを定義することは,基本的に関数を定義することと同じですが,二つの重要な違いがあります:

  1. メソッドキーワードは関数名前に含まれなければならない.
  2. メソッドの最初のパラメータのタイプは,メソッドが関連付けられるオブジェクトのタイプを表すため,明示的に宣言されなければならない.

この項目は,Bollinger インディケーターを計算するコードを,ユーザが定義した方法として表します.

//@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)

変更された:

//@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)

キーワードメソッド: maintainQueue と calcBB で宣言されたユーザー定義メソッドのパラメータリストの最初のパラメータは,array<float>, これは,この方法がタイプ変数の方法であることを意味しますarray<float>このコードがボリンジャー指標を計算するために呼び出されます.

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

過負荷の方法

ユーザ定義メソッドは,既存の内蔵メソッドとユーザ定義メソッドを同じ識別子でオーバーライドし,オーバーロードすることができます.この機能により,ユーザーは同じメソッド名で異なる引数署名に関連付けられた複数のルーチンを定義できます.簡単な例として,変数のタイプを識別するためのメソッドを定義したいと仮定します.ユーザ定義メソッドに関連付けられたオブジェクトタイプを明示的に指定する必要があるため,認識したい各タイプに対してオーバーロードを定義する必要があります.次に, getType ( getType) メソッドを定義します.これは変数s タイプの文字列表示を返し,5つの基本的なタイプに対してオーバーロードを持っています:

//@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")

各変数の基本型がどの変数の過負荷を決定する.getType()FMZ プラットフォームでは,PINE スクリプトの基礎実装が Javascript になっているため,数値型は浮動小数点データ (float) として判断されます.

内蔵機能

函数を呼び出すとき,引数を渡すことができます. 値を代入するために引数の名前を代入できます. 対応する引数の位置に直接変数を渡すことができます. 混合使用もサポートされています. 例えば:

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

引数名割り当てを指定した後は,変数を直接引数として渡すことはできなくなり,次の引数は引数名割り当ての形式で記述する必要があります.

// 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

時間枠

タイムフレーム.in_sec

経過した時間をtimeframe2秒で議論する.

timeframe.in_seconds(timeframe)

// 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)

リターン1つのバーで秒の数を表す inttimeframe.

議論

  • timeframe(シンプルな文字列) タイムフレーム オプション デフォルトはタイムフレーム 期間

コメントについてtimeframe>= 1M関数は,月の30.4167 (365/12) 日に基づいて秒数を計算します.

ほかにも参照 input.timeframe timeframe.period

ティッカー

ticker.heikinashi

スムーズされた平均 int 表示値を要求するための ticker 識別子を作成します.

ticker.heikinashi(symbol)

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)

リターンrequest.security関数に提供できるストックコードの文字列値.

議論

  • symbol商品コード識別子 (シンプル・ストリング)

ほかにも参照 syminfo.tickerid syminfo.ticker request.security

要求

request.data

外部データ要求

request.data(url, attribute)

/*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)

返金値属性引数はデータシリーズを指定します.

議論

  • url(単純な文字列) 要求されたデータソースURLとデータソース応答のデータ形式は,以下の要件を満たす必要があります (少なくとも時間とデータ属性を含む):{"data": [], "schema": ["time", "data"]}データの形式を参照してください:

    {
        "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) は,属性の名前を指定し,必要なデータを返します.例えば:"$.spot_close_price"服用する$.前置詞として,および属性の名前は,データソースの要求時に応答のデータフィールドの属性と一致します

要求される時間範囲がrequest.dataバックテストに設定された時間帯と一致します.バックテストの時間系列でデータに問い合わせができない場合は,エラーが報告されます.

この例の SQL 文は,次のようになります.

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;

検索し,データリンクを作成できます.データ探査FMZプラットフォームのページです.https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/dataこの例で使ったものです

request.security

別の色/解像度を求めます.

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

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)

リターン要求されたシリーズ

議論

  • symbolシンボルだ
  • timeframe(単純な文字列) タイム・ピリオド.空の文字列は,チャートの現在の解像度として解釈されます.
  • expression(series int/float/bool/color) 式は request.security コールから計算され返される. 式は,シリーズにキャストできる要素を含むシリーズまたはタプルである.
  • gaps(barmerge_gaps) 要求されたデータのための合併戦略 (要求されたデータは主シリーズOHLCデータと自動的に合併します). 可能な値: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - 要求されたデータは可能なギャップ (na value) と合併されます. barmerge.gaps_off - 要求されたデータはギャップなしで連続的に合併され,すべてのギャップは以前の最も近い既存の値で満たされます. デフォルト値は barmerge.gaps_offです.
  • lookahead(barmerge_lookahead) 要求されたデータ位置のための合併戦略.可能な値は: barmerge.lookahead_on, barmerge.lookahead_off. バージョン3から開始してデフォルト値は barmerge.lookahead_offです. 行動がリアルタイムで同じであり,履歴でのみ異なることに注意してください.
  • ignore_invalid_symbol(const bool) 任意の引数.指定されたシンボルが見つからない場合,関数の動作を決定する. false の場合は,スクリプトは停止し実行時のエラーを返します. true の場合は,関数は na を返して実行を続けます. デフォルト値は false です.
  • currency(単純な文字列) 符号の通貨関連値 (例えば OHLC) が変換される通貨.expression変換された値に基づいて計算されます. 変換レートは,前日のFX_IDCペア日々のレート (計算が行われるバーとの関係) に基づいています. オプションです. デフォルトは syminfo.currencyです. 可能な値: ISO 4217形式の通貨コード (例えばUSD) の3文字文字文字文字列または通貨の定数の一つ. *名前空間に,例えば currency.USD.

コメントパインスクリプトコードが この関数を使えば 歴史とリアルタイムデータで 異なる計算が可能になります 設定タイプなど,追加引数を指定するには,ticker.new() 関数 この関数にticker変数を使ってスプレッドを渡すことはできません.ticker.new変数または表示符の文字列表示,例えば AAPL+MSFT*TSLA 現在,スクリプトでは最大40の request.security コールができます. この変数/関数を使用すると,インジケーターが塗り替えられる可能性があることに注意してください.

解析引数の許容値は次のとおりです. 1S, 5S, 15S, 30S - 秒間隔 (チャート解像度は要求された解像度より小さいか同等である) 1から1440分 1Dから365Dまで 1Wから52Wまで 1Mから12Mまで

ほかにも参照 syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

ストラ

str.contains

true を返します.source文字列にはstrサブストリングは誤りです

str.contains(source, str)

// 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)

リターン本当ならstr発見されましたsource文字列は誤りです

議論

  • sourceソース文字列です
  • str検索するサブ文字列です

ほかにも参照 str.pos str.match

str.endswith

true を返します.source文字列は,この項に指定されたサブ文字列で終了します.str偽りです

str.endswith(source, str)

リターン本当ならsource文字列は,この項に指定されたサブ文字列で終了します.str偽りです

議論

  • sourceソース文字列です
  • str検索するサブ文字列です

ほかにも参照 str.startswith

str.startswith

true を返します.source文字列は,この項で指定されたサブ文字列から始まります.str偽りです

str.startswith(source, str)

リターン本当ならsource文字列は,この項で指定されたサブ文字列から始まります.str偽りです

議論

  • sourceソース文字列です
  • str検索するサブ文字列です

ほかにも参照 str.endswith

str.substring

新しい文字列を返します.source字幕文字列は,指定されたインデックスで文字列から始まります.begin_posend_pos - 1 に及びます.source string.

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

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)

リターンソース文字列から抽出したサブ文字列です

議論

  • sourceソース文字列からサブ文字列を抽出します
  • begin_pos(series int) 抽出されたサブ文字列の開始位置.それは包括的です (抽出されたサブ文字列にはその位置にある文字が含まれます).
  • end_pos(series int) 終了位置. 限定 (抽出文字列にはその位置s文字が含まれていない). オプション. デフォルトは文字列の長さです.source string.

コメント文字列のインデックスが0から始まる場合begin_posと等しいです.end_pos,関数は空の文字列を返します.

ほかにも参照 str.contains str.pos str.match

str.tonumber

str.tonumber(string)

リターン文字列の浮遊式バージョンは,有効な番号を含んでいる場合,または

議論

  • stringint または float の文字列表示.

str.format

フォーマット文字列と value (s) をフォーマットされた文字列に変換する.フォーマット文字列には文字文字とフォーマットされる各値の丸い括弧 {} でのプレスホルダーが含まれる.プレスホルダーには,それを置き換える必要な引数のインデックス (0から始まる) とオプションのフォーマット仕様表が含まれます.インデックスはstr.format引数のリスト内のその引数の位置を表します.

str.format(formatString, arg0, arg1, ...)

// 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)

リターン形式化された文字列です.

議論

  • formatString(シリーズ文字列) 形式文字列
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) フォーマットする値

コメント引用されていないパターンの内にあるすべての巻き帯はバランスでなければならない.例えば,ab {0} deab } de は有効なパターンだが,ab {0} de, ab } de{ はそうではない.

str.length

その文字列の文字列数に相当する整数を返します

str.length(string)

リターンソース文字列の文字列数

議論

  • stringソース文字列です

str.lower

すべての文字を小文字に変換した新しい文字列を返します.

str.lower(source)

リターン新しい文字列で,すべての文字が小文字に変換されます.

議論

  • source変換する文字列です

ほかにも参照 str.upper

str.upper

すべての文字を大文字に変換した新しい文字列を返します.

str.upper(source)

リターン新しい文字列で,すべての文字が大文字に変換されます.

議論

  • source変換する文字列です

ほかにも参照 str.lower

str.match

新しいサブ文字列を返しますsource文字列が a に一致する場合はregex正規表現で またはでない場合

str.match(source, regex) 

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"

リターンこの新しいサブ文字列は,source文字列が a に一致する場合はregex正規表現で またはでない場合

議論

  • sourceソース文字列です
  • regexこの文字列がマッチする正規式です

コメントこの関数は,正規式の最初の出現を返します.sourceストリング 逆斜線 文字regex文字列は追加的な逆斜線で逃げる必要があります.例えば,\dは正規式\dを表します.

ほかにも参照 str.contains str.substring

str.pos

元の位置を返します.strストリングsourceストリング

str.pos(source, str)

リターン位置strストリングsource string.

議論

  • sourceソース文字列です
  • str検索するサブ文字列です

コメント文字列のインデックスが0から始まります

ほかにも参照 str.contains str.match str.substring

str.replace

N+1番目の文字列を返しますtarget文字列と以前の発生target文字列はreplacement文字列で N はoccurrence. N は,ソース文字列で置き換える目的文字列のマッチングインデックスです.

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

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)

リターン処理した糸

議論

  • sourceソース文字列です
  • target文字列を交換する.
  • replacement(シリーズ文字列) ターゲット文字列の代わりに挿入する文字列.
  • occurrence(series int) ソース文字列で置き換えるターゲット文字列の発生のマッチングインデックスは,最初のマッチで0から開始されます.オプションです.デフォルト値は0です.

ほかにも参照 str.replace_all str.match

str.replace_all について

ソース文字列のターゲット文字列の各出現を 置き換え文字列に置き換える.

str.replace_all(source, target, replacement)

リターン処理した糸

議論

  • sourceソース文字列です
  • target文字列を交換する.
  • replacement(シリーズ文字列) ターゲット文字列の各出現で置き換えられる文字列.

str.split

文字列をサブ文字列の配列に分割して配列IDを返します

str.split(string, separator)

リターン文字列の識別子です

議論

  • stringソース文字列です
  • separator(シリーズ文字列) 各サブ文字列を分離する文字列.

str.tostring

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

リターン文字列表示はvalue議論する もしvalue引数は文字列で,そのまま返されます. その時にvalue文字列を返します.

議論

  • value(series int/float/bool/string/int[]/float[]/bool[]/string[]) 要素が文字列に変換される値または配列ID.
  • format(シリーズ文字列) フォーマット文字列. このフォーマットを受け入れます.* 定数: format.mintick, format.percent, format.volume. オプション. デフォルト値は #.##########.

コメント浮遊値のフォーマットは,必要に応じてそれらの値を丸める.例えば,str.tostring ((3.99, #) は,4 を返します. 尾行ゼロを表示するには,#の代わりに0を使用します.例えば,#.000. format.mintick を使用するときは,残りを含まない syminfo.mintick で割り切れる最も近い数に丸められます.文字列は尾行ゼロで返されます. x引数が文字列である場合は,同じ文字列値が返されます. Bool型引数は true または false を返します. xが naであるとき,関数は NaN を返します.

color.new

関数色は,指定された透明性を与えられた色に適用します.

color.new(color, transp)

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

リターン指定された透明性のある色

議論

  • color(シリーズの色)
  • transp(int/floatシリーズ) 可能な値は0 (透明ではない) から100 (見えない) までです.

コメント常数でない引数 (例: simple, inputまたは series) を使用すると,スクリプトの Settings/Style タブに表示される色に影響を及ぼします.詳細についてはユーザーマニュアルを参照してください.

color.rgb

RGB色モデルを使用して透明性のある新しい色を作成します.

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

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

リターン指定された透明性のある色

議論

  • red(シリーズ int/float) 赤色の要素 0 から 255 までの値が可能です
  • green(int/float) 緑色のコンポーネント 0 から 255 までの可能な値
  • blue青色構成要素 0 から 255 までの値が可能です
  • transp(series int/float) オプション.色透明性.可能な値は0 (不透明) から100 (見えない) です.デフォルト値は0です.

コメント常数でない引数 (例: simple, inputまたは series) を使用すると,スクリプトの Settings/Style タブに表示される色に影響を及ぼします.詳細についてはユーザーマニュアルを参照してください.

実行時間

runtime.debug

変数情報をコンソールに印刷する.

FMZ PINE 言語特有の機能runtime.debug(value)議論だけでした

runtime.log

ログの出力内容

FMZ PINE 言語特有の機能runtime.log(1, 2, 3, close, high, ...)複数の引数を渡すことができます

runtime.error

呼び出されると,実行時にエラーが発生し,実行時にエラーメッセージが表示されます.message argument.

runtime.error(message)

議論メッセージ (シリーズ文字列) エラーメッセージ

インプット

インプット

スクリプトの設定のインプットタブに入力を追加します.この機能は,スクリプトユーザーに設定オプションを提供することができます.この機能は,自動的にdefvalに使用される引数の種類を検出し,対応する入力ウィジェットを使用します.

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

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)

リターン入力変数の値

議論

  • defval(const int/float/bool/string/color or source-type built-in) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を決定し,スクリプトユーザが変更することができます. ソースタイプ内蔵は計算のソースを指定する,内蔵された連続浮動変数です:close, hlc3など
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.

コメント入力関数の結果は常に変数に割り当てられるべきであり,上記の例を参照してください.

ほかにも参照 input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

スクリプトの設定のインプットタブに入力を追加し,スクリプトユーザーに設定オプションを提供できます.この機能は,ユーザが計算のためのソースを選択できるようにドロップダウンを追加します.例えば,close,hl2,など.スクリプトに1つの入力.source() 呼び出しのみが含まれている場合,ユーザはソースとしてチャート上の別の指標から出力を選択することもできます.

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

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

リターン入力変数の値

議論

  • defval(series int/float) スクリプトのSettings/Inputsタブで提案されている入力変数のデフォルト値を決定し,ユーザが変更することができます.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.

コメントinput.source関数の結果は常に変数に割り当てられるべきであり,上記の例を参照してください.

ほかにも参照 input.bool input.int input.float input.string input.timeframe input.color input

input.string

スクリプトの設定のインプットタブに入力を追加します.この機能は,スクリプトの入力に文字列入力のためのフィールドを追加します.

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

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

リターン入力変数の値

議論

  • defval(const string) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を指定し,ユーザが変更できます.optionsその値が1つでなければならない.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • options[<型>...]) 選択可能なオプションのリスト.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合,インダクタがチャートに追加される前に入力値を確認するように要求されます.デフォルト値は false です.

コメントinput.string 関数の結果は常に変数に割り当てられるべきです.上記の例を参照してください.

ほかにも参照 input.bool input.int input.float input.timeframe input.source input.color input

input.bool

スクリプトの設定の入力タブに入力を追加します.この機能により,スクリプトの入力にチェックマークを追加します.

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

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

リターン入力変数の値

議論

  • defval(const bool) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を指定し,ユーザが変更できます.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合,インダクタがチャートに追加される前に入力値を確認するように要求されます.デフォルト値は false です.

コメントinput.bool 関数の結果は常に変数に割り当てられるべきであり,上記の例を参照してください.

ほかにも参照 input.int input.float input.string input.timeframe input.source input.color input

input.int

スクリプトの設定のインプットタブに入力を追加します.この機能は,スクリプトの入力に整数入力のためのフィールドを追加します.

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

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))

リターン入力変数の値

議論

  • defval(const int) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を設定し,スクリプトユーザが変更できます.optionsその値が1つでなければならない.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • minval(const int) 入力変数の最小可能な値.オプションです.
  • maxval(const int) 入力変数の最大可能な値.オプションです.
  • step(const int) 入力を増やし/減量するために使用されるステップ値.オプション.デフォルトは1.
  • options[val1,val2,...] この引数を使用する際には,ドロップダウンメニューから選択できるオプションのリストが,逗子で区切られ,四角括弧に囲まれています.minval, maxvalそしてstep引数は使えない.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合,インダクタがチャートに追加される前に入力値を確認するように要求されます.デフォルト値は false です.

コメント結果としてinput.int変数には常に関数が割り当てられるべきであり,上記の例を参照してください.

ほかにも参照 input.bool input.float input.string input.timeframe input.source input.color input

input.float

スクリプトの設定のインプットタブに入力を追加します.この機能は,スクリプトの入力に浮遊入力のためのフィールドを追加します.

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

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)

リターン入力変数の値

議論

  • defval(const int/float) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を設定し,スクリプトユーザが変更できます.optionsその値が1つでなければならない.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • minval(const int/float) 入力変数の最小可能な値.オプションです.
  • maxval(const int/float) 入力変数の最大可能な値.オプションです.
  • step(const int/float) 入力を増やし/減量するために使用されるステップ値.オプション.デフォルトは1.
  • options(const int/float 値の複数形: [val1,val2,...]) ドロップダウンメニューから選択できるオプションのリスト,逗子で区切られ,正方形括弧に囲まれます: [val1,val2,...]. この引数を使用する場合は,minval, maxvalそしてstep引数は使えない.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合,インダクタがチャートに追加される前に入力値を確認するように要求されます.デフォルト値は false です.

コメントinput.float関数の結果は常に変数に割り当てられるべきです.上記の例を参照してください.

ほかにも参照 input.bool input.int input.string input.timeframe input.source input.color input

input.color

スクリプトの設定の入力タブに入力を追加し,スクリプトユーザーに設定オプションを提供することができます.この機能は,ユーザがパレットまたは六角値から色と透明性を選択できるようにする色ピックラーを追加します.

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

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

リターン入力変数の値

議論

  • defval(const color) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を指定し,ユーザが変更できます.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合,インダクタがチャートに追加される前に入力値を確認するように要求されます.デフォルト値は false です.

コメントinput.color 関数の結果は常に変数に割り当てられるべきであり,上記の例を参照してください.

ほかにも参照 input.bool input.int input.float input.string input.timeframe input.source input

input.price

スクリプトの"設定/入力"タブに価格入力を追加します.confirm = trueインタラクティブな入力モードを起動し,チャートをクリックして価格を選択します.

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

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

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

リターン入力変数の値

議論

  • defval(const int/float) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を指定し,ユーザが変更できます.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • tooltip(const string) ツールティップアイコンを横切るときにユーザに表示される文字列.
  • inline(const string) 同じ引数を使用したすべての入力呼び出しを1行に組み合わせます.引数として使用される文字列は表示されません.同じ行に属する入力だけを識別するために使用されます.
  • group(const string) 同じグループ引数文字列を使用してすべての入力の上にヘッダを作成します.この文字列はヘッダのテキストとしても使用されます.
  • confirm(const bool) true の場合は,インタラクティブな入力モードが有効になり,チャートにインディケーターを追加するときにチャートをクリックするか,インディケーターを選択して選択を移動することによって選択されます.オプションです.デフォルトは false です.

コメントインタラクティブなモードを使用する場合は,両方の関数呼び出しが同じ引数を使用した場合,時間入力と価格入力を組み合わせることができます.inline argument.

ほかにも参照 input.bool input.int input.float input.string input.resolution input.source input.color input

input.timeframe

スクリプトの設定の入力タブに入力を追加し,スクリプトユーザーに設定オプションを提供することができます.この機能は,ユーザがタイムフレームセレクターを介して特定のタイムフレームを選択し,文字列として返却できるようにするドロップダウンを追加します.セレクターは,チャートのタイムフレームドロップダウンを使用してユーザーが追加したカスタムタイムフレームを含みます.

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

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

リターン入力変数の値

議論

  • defval(const string) スクリプトの"設定/入力"タブで提案されている入力変数のデフォルト値を指定し,ユーザが変更できます.optionsその値が1つでなければならない.
  • title(const string) 入力のタイトル.指定されていない場合は,変数の名前が入力のタイトルとして使用されます.タイトルが指定されているが,空いている場合,名前は空の文字列になります.
  • options(タップ)

もっと

乞食なぜ戦略広場複製のパイン戦略が実用化できないのか

発明者 量化 - 微かな夢じゃあ調べてみよう.

乞食張超大の最適化されたトレンドトレーカー

発明者 量化 - 微かな夢こんにちは,具体的にはどんな戦略ですか?