[TOC]
Pine のコードが従う一般的な構造は:
<version>
<declaration_statement>
<code>
FMZのPine言語サポートの注釈符号:単行本注釈//
ブログの記事へのトラックバック (0) 1/* */
この例の注釈の書き方では,
[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')
次の形式のコンパイラ指示は,コンパイラがPineでどのバージョンで脚本を書いたかを伝える:
//@version=5
V5 のバージョンとして,コードから省略できます.//@version=5
。
indicator()
strategy()
ステートメントは,スクリプトのタイプを決定し,それがどのような内容を許容し,どのように使用され,実行されるかを決定する. スクリプトのキー属性を設定する. 例えば,その名前,グラフに追加されたときにそれがどこに現れるか,それが表示する数値の精度とフォーマット,実行時に動作する特定の数値を管理する. 例えば,グラフに表示される最大数のグラフオブジェクトを管理する. 策略については,属性には,初期資本,佣金,スライドポイントなど,回転を制御するパラメータが含まれます. FMZのPineは,策略コードに含まれなければならないことを要求しません.indicator()
可能性はstrategy()
声明文はこちら.
スクリプト内の注釈やコンパイルヤー命令以外の行は,スクリプトのアルゴリズムを実装する文である. 文はそれらのいずれかである.
if
,for
,while
あるいはswitch
等式構造文は様々な方法で並べられます
空格
あるいは制表符
(タブキー) 開始.それらの最初の文字も行の最初の文字でなければならない.行の最初の位置から始まる行は,定義によってスクリプトの全域の一部である.local block
〔ローカルブロックは,表記符または4つの空間に収縮しなければならない (そうでなければ,前行のシリアルコードとして解析される.つまり,前行のコードの連続的な内容であると判断される) 〕各ローカルブロックは異なるローカル範囲を定義する.例えば,三つの局所からなる,一つはカスタム関数宣言で,二つは変数宣言でif構造を使用する,以下のコード:
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
長い行は複数の行に分けられる,または"包み込む"ことができる.包み込まれた行は,4の倍数でない限り,任意の数の空間に収縮しなければならない (これらの境界は局所を収縮するために使用される).
a = open + high + low + close
文字列は4の倍数ではなく,各行に縮小されたスペースの数に注意してください.
a = open +
high +
low +
close
長いプロット (plot) の呼び出しは,パッケージ化できます.
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)
ユーザー定義された関数宣言内の文言も包み込むことができる.しかし,局所が文法的に縮小で始まる (四つのスペースまたは一つの表記符) のために,次の行に分割すると,文言の続続は"つ以上の縮小で始まる (四つのスペースの倍数に等しくない) "である.例えば:
test(c, o) =>
ret = c > o ?
(c > o+5000 ?
1 :
0):
(c < o-5000 ?
-1 :
0)
a = test(close, open)
plot(a, title="a")
タイムシーケンスとは,データ型や形式ではなく,PINE言語における基本的な構造の概念である. 時間の連続変化の値を保存するために使用され,各値は時間点に対応する. タイムシーケンスという概念の構造は,時間の変化を記録する一連のデータを処理するのに適している.
内蔵変数open
例えば,open
初期価格を記録します.open
この線は5分間のK線周期です.open
変数に記録されるのは,K線BAR (コラム) の開通価格です. 実行中にコードに引用されます.open
初期値 (過去値) を参照する. 前の値 (過去値) を参照する.[]
履歴操作は,K線BARで実行するときに,open[1]
前のK線BARの開通価格を参照する.
しかしタイムシーケンス"配列"というようなデータ構造を思い出すのは簡単です.PINE言語には配列タイプもありますが,それらは時間配列とは全く異なる概念です.
PINE言語でこのような時間列を設計することで,策略コードで簡単に収束価格の累積値を計算することができ,forのようなループ構造を使用する必要もなく,PINE言語の内蔵関数を使用するだけです.ta.cum(close)
また例として,最後の14のK行BAR (つまり,コード実行時に現在の時点から最も近い14のK行BAR) の最大値と最小値差の平均を計算する必要があります.ta.sma(high - low, 14)
タイムシーンの上で関数を呼び出す結果もタイムシーンの上で痕跡を残します.[]
歴史演算子は前の値に引用します.例えば,現在のK線BARの閉じる価格が最後の10つのK線BARの最高価格の最大値を超えているかどうかをテストするときに (現在のK線BARを含まない場合) を書きます.breach = close > ta.highest(close, 10)[1]
文字の表記は,breach = close > ta.highest(close[1], 10)
│ だからta.highest(close, 10)[1]
そしてta.highest(close[1], 10)
メディアは,
確認は以下のコードでできます.
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)
上記のテストコードは,aとbがそれぞれのBARでそれぞれの時間配列の値を出力する.aとbの値は常に等しいので,両表示方法が等価であることが見えます.
PINE ポリシーの内蔵テンプレート"Pine 言語取引庫"のパラメータ設定説明.
定价货币精度
パラメータとこのパラメータは,注文時のスライド価格を決定する.例えば,価格設定の通貨精度が2,つまり小数点の2番目まで正確で,0.01まで正確である.その場合は,スライドポイントは1点ごとに0.01の価格単位を表す.このとき,スライドポイント数は5に設定され,注文時のスライド価格は0.05である. (スライドポイントは,注文時のスライド価格の部分により,注文の取引の溢出額を計上するため)javascript
戦略での呼び出しSetMaxBarLen
この関数は同じです.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%持仓
PINE言語の保持機構は,単方向保持に似ている.例として,多頭方向のポジションを保持している場合 ("多頭保持"),販売操作の注文,計画リストなどがある場合 ("保持方向の逆方向) の注文が実行を誘発する場合は,最初に多頭方向のポジションを平らにする (すべての多頭保持を平らにする),その後,平ら化前の保持方向の逆方向の命令を実行する.
下記の命令を使用すると,任意の価格が指定されていない場合,市場価格リストをデフォルトとして設定します. 上記の命令は,市場価格以外の計画命令で注文できます. 計画命令は即座に実行されません. 計画命令は,触発されていないときに存在するプログラムの計画委託列の中に,リアルディスク/再テスト時間状態情報 (つまり,戦略が実行されている時の状態バー) の"予定注文"の表のページ別には見える. 市場がリアルタイム価格条件を満たしているときにこれらの予定注文を起動するまでは,システムが実際に注文する. したがって,これらの注文の取引価格にわずかな偏差があることは正常な状況である.strategy.entry
この関数は,この関数から,limit
、stop
パラメータは.
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
制限注文
注文の制限価格を設定します.direction
このパラメータはstrategy.long
市場が現在の価格を下回る場合にのみ,注文が誘発される.
注文が売り物である場合 (つまり)direction
このパラメータはstrategy.short
市場が現在の価格よりも高い場合にのみ,注文が誘発される.
ストップ 注文
オーダーのストップ・ロスト価格を設定し,オーダーが買い物である場合,市場の現在の価格がその価格よりも高くなる場合にのみオーダーが触発される. 注文がセールスオーダーである場合,現在の市場価格がその価格を下回る場合にのみ注文が誘発される.
ストップ・リミット
設定するlimit
、stop
パラメータ,注文が最初に条件を満たす価格でトリガーされる.
var は,割り当ておよび一度の初期化変数のキーワードである. 通常,キーワード var を含まない変数の赋值文法は,データを更新するたびに変数の値を覆う結果になる.逆に,キーワード var を使った変数の割り当てでは,データが更新されたとしても,状態を保持し,if-expressions の条件を満たす場合にのみ変更することができる.
var variable_name = expression
解説:
variable_name
- パインスクリプトで許可されているユーザ変数の名前 (大文字と小文字のラテン文字,数字,下書きを含むが,数字から始まるわけではない)expression
−任意の算術式は,通常の変数を定義するのと同じである. ー計算式を計算し,変数に一度割り当てます.例
// 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")
変数
FMZでは,リアルタイムの価格モデル,閉じる価格モデル,var
、varip
変数を宣言する場合は,次のコードでテストします.
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
リアルタイム価格モデル
上記のテストコードは実行時に2つの段階に分かれます: 1, 歴史K線段階; 2, リアルタイムK線段階.var
、varip
宣言された変数 i、ii は,戦略コードの各実行回ごとに増幅操作を実行します.if true
したがって,確実に対応する条件コードブロックを実行する) ー だから,回帰結果のK線BARに表示される数字がそれぞれが1を増加していることがわかります. 歴史のK線段階が終了すると,リアルタイムK線段階を開始します.var
、varip
宣言された変数は異なる変化が始まる. リアルタイム価格モデルであるため,K線BAR内の価格の変化ごとに戦略コードが繰り返される.i := i + 1
そしてii := ii + 1
i は次の実行回でも変更されるが,次の実行回でも変更されるが,現在のK線BARが終了するまで更新しない. (つまり,次の実行回でも変更されない) だから,i 変数は依然としてBAR1 を追加する.しかし,i 変数はBAR に何度か加算される.
閉店価格モデル
閉じる価格モデルは,K線BARが走るたびに1回の戦略論理を実行する.したがって,閉じる価格モデルでは,歴史的なK線段階とリアルタイムK線段階は,var
、varip
宣言された変数は,上記の例で増加して表されるのに完全に一致し,各K線BARは増加して1である.
varp (varip intrabar persist) は,変数を割り当てたり,一度に初期化したりするキーワードである.これはvarキーワードと似ているが,varip宣言を用いた変数は,リアルタイムでK行更新の間に値を保持する.
varip variable_name = expression
解説:
variable_name
- Pine スクリプトで許容されるユーザ変数の名前 (大文字と小文字のラテン文字,数字,下線を含むが,数字から始まるわけではない)expression
−任意の算術式は,通常の変数を定義する時と同じである. 最初のK線では,式が1回だけ計算され,変数に1回割り当てられる.例
// varip
varip int v = -1
v := v + 1
plot(v)
varを使用すると,グラフはbar_indexの値を返します.varipを使用すると,歴史のK行では同じ動作が起こりますが,リアルタイムのK行では,グラフは1つの値を返します.この値は1つのティックごとに増加します.
コメントfloat、int、bool、stringなどのシンプルなタイプと,それらのタイプの配列とのみ使用できます.
この式は,この式で表示されるように,この式で表示されるように,比較あるいは論理演算子で計算できる値である.
コメント参照してください比較演算子と論理演算子の説明は,
また会おう
bool
ブル型変数の値と,比較操作,論理操作の結果を表示する.
コメント参照してください比較演算子と論理演算子の説明は,
また会おう
bool
If文は,表現条件を満たすときに実行しなければならない文塊を定義する. 4版のPine 脚本言語では,
共有コードは:
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
コメント
var_declarationX
- この変数はif文の値を取得します.condition
- 条件がtrueである場合,文塊を使用します.then
論理はvar_decl_then0
,var_decl_then1
条件が false ならば,文塊を使用します.else if
可能性はelse
論理はvar_decl_else0
,var_decl_else1
ほらreturn_expression_then , return_expression_else
- モジュール内の最後の式またはブロックelseからの式は,文の最終値を返します. 変数の宣言が最後にある場合,その値は結果値になります.
返される値の種類は,return_expression_then
そしてreturn_expression_else
タイプ、TradingViewで実行すると,そのタイプがマッチしなければならない:elseブロックに文字文字値があるとき,then文塊から整数を返すのは不可能である.FMZで実行すると,以下の例はエラーを返さない.y値が"open"と取られるとき,プロットグラフが描かれるときの値はn/aである.
例
// 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)
省略できるelse
ブロック.この場合,条件が false ならば,var_declaration X 変数に
例
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
複数の
例
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
軽視するif
文の結果値 ((
例
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
If文は,次のように相互に含まれます.
例
// if
float x = na
if close > open
if close > close[1]
x := close
else
x := close[1]
else
x := open
plot(x)
'for' 構造は,複数の文を繰り返し実行することを許可します.
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- return_expression の値として指定されるオプション変数宣言.counter
- 回転カウンター値の変数を保存し,回転の毎回代数で 1 または step_num の値を増加/減少します.from_num
-カウンタの初期値.............to_num
-カウンタの最終値.カウンタがto_numより大きいとき (from_num > to_numの場合to_numより小さい場合to_num) ループを中断する.step_num
-カウンタの値増加/減少. それはオプションである. デフォルト値は+1または-1である. それはfrom_numまたはto_numの最大値に依存する. 値を使用するときは,カウンタはfrom_numまたはto_numの最大値によって増加/減少する. したがって,step_numの+/-記号はオプションである.statements | continue | break
- 任意の数の文,またはreturn_expression
- ループの返却値は,存在する場合はvar_declarationの変数に割り当てられます. もしループがcontinue
- ループ内でのみ使用できるキーワード. それはループの次のアイディアを実行させる.break
キーワードは"退団する"です.
例
// 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))
また会おう
for...in
while
for...in
構造は,配列内の各要素に対して複数の文を繰り返し実行することを許可する. これは任意の参数と併用できる:array_element
参数2つとも使えます.[index, array_element]
〔2番目の形式はループの機能に影響しない〕.それは元组の最初の変数で現在のイデレーションのインデックスを追跡する。
[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
- ループに指定されるオプションの変数宣言return_expression
価値は、index
- 現在のリターンインデックスに選べる変数を追跡する...............array_element
基本的には,array_element
- ループで処理される各連続配列要素の変数を含む. この変数はループ体内で不変である.array_id
- ループを繰り返す配列ID ーstatements | continue | break
- 任意の数の文,またはreturn_expression
- 回転の返り値が割り当てるvar_declaration
中にある変数,もし存在する場合. もしループがcontinue
- ループ内でのみ使用できるキーワード. それはループの次のアイディアを実行させる.break
キーワードは"退団する"です.
ループ内の配列の要素またはそのサイズを変更することを許可する.
このビデオでは,for...in
単項式で,各K線に何つのK線のOHLC値が
例
// 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))
この2つの式は,この2つの式で,isPos
この式は,true
都市部で起きていることです.valuesArray
数列の対応値は正時です.
例
// 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))
また会おう
for
while
array.sum
array.min
array.max
while
コードブロックの条件を繰り返すようにします.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
解説:variable_declaration
- 選択可能な変数宣言.return expression
この変数には初期化値が与えられます.boolean_expression
実行します. 実行します.while
文のローカルブロックである. false の場合は,while
文章の後,脚本を実行します.continue
- continue
キーワードは次のイラストへの循環分岐を導きます.break
- break
キーワードがループを停止させる.while
文章の後,再開します.return_expression
- 提供するwhile
文の返される値は選択可能な行である.
例
// 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)
コメント初期while
列の後のローカルコードブロックは,4つのスペースまたは1つの表記符に縮小する必要があります.while
サイクリングwhile
実行する必要があります. 実行するには,次の boolean 式が false になる必要があります.break
。
switch オペレーターは条件と表現の値に応じて,コントロールをいくつかの文のいずれかに移動します.
[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
このスイッチは,
例
// 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)
表現のないスイッチ:
例
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)
返した値実行される本文ブロックの最後の表現の値である.
コメント実行するだけです.local_block
例やdefault_local_block
半島では,default_local_block
単に=>
標識が一緒に引入され,前方のブロックが実行されていない場合にのみ実行されます.switch
文の結果は変数に割り当てられ,指定されていません.default_local_block
実行しない場合local_block
この文は,この文に戻ります.na
│ │switch
変数に代入すると,local_block
この例は,同じタイプの値を返す必要があります.
また会おう
if
?:
series は,データシリーズ型を表すキーワードである.series
キーワードは通常不要です.
変数に代入する用法ですが,変数を宣言するときにのみ ((初めて使用) される).
変数への赋值を左側で示す赋值演算子. 前述した変数の赋值に使用される.
これは,任意の式に適用される式である.
expr1 != expr2
返した値ブル値,またはブル値の集合.
模数 (=整数余数) ーは数式に適用される.
expr1 % expr2
返した値整数,浮点値,または一連の値.
コメントパイン脚本では,整数の余剰分を計算するときに,商人は切断される.すなわち,その四角を最小絶対値に5乗する.得られる値は配当と同じ符号を持つ.
例:-1 % 9 = -1 - 9 *truncate ((-1/9) = -1 - 9 *truncate ((-0.111) = -1 - 9 * 0 = -1。
モジュメント指令は,数値表現に使用される.
expr1 %= expr2
例
// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)
返した値整数,浮点値,または一連の値.
掛け算は,数式に適用される.
expr1 * expr2
返した値整数,浮点値,または一連の値.
掛け算指令は、数値式に適用される。
expr1 *= expr2
例
// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)
返した値整数,浮点値,または一連の値.
追加または単一の正数. 数値表現または文字列に使用する.
expr1 + expr2
+ expr
返した値文字列の二進制+
この式は,expr1とexpr2の組み合わせを返します.
数字は整数または浮点値,または一連の値を返します.
二進法
コメント数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.
加法指令は、数値表現や文字列に適用される。
expr1 += expr2
例
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
返した値文字列の場合は,expr1とexpr2の連列を返します.数字の場合は,整数または浮点値,または一連の値を返します.
コメント数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.
減法または単数負数. 数値式に適用される.
expr1 - expr2
- expr
返した値返信は,整数または浮点値,または一連の値:
二進制-
負の式を返します.
コメント数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.
減法指令は、数値式に適用されます。
expr1 -= expr2
例
// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)
返した値整数,浮点値,または一連の値.
例外は、数値式に適用される。
expr1 / expr2
返した値整数,浮点値,または一連の値.
除法指定は、数値式に適用される。
expr1 /= expr2
例
// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)
返した値整数,浮点値,または一連の値.
この式は,数値式に適用されます.
expr1 < expr2
返した値ブル値,またはブル値の集合.
値表記は,数値表記に適用される.
expr1 <= expr2
返した値ブル値,またはブル値の集合.
この式は,任意の式に適用されます.
expr1 == expr2
返した値ブル値,またはブル値の集合.
'=>' オペレータは,ユーザ定義の関数宣言およびswitch
文章の中で.
函数宣言の文法としては,
<identifier>([<parameter_name>[=<default_value>]], ...) =>
<local_block>
<function_result>
"つ<local_block>
単語の単語は0個以上あります.<function_result>
変数,表現,または元群である.
例
// 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))
コメントユーザマニュアルの宣言関数と脚本庫ページで,ユーザ定義関数についてもっと学ぶことができます.
大きい. 数値表現に適用する.
expr1 > expr2
返した値ブル値,またはブル値の集合.
この式は,数式に適用されます.
expr1 >= expr2
返した値ブル値,またはブル値の集合.
三元条件演算子.
expr1 ? expr2 : expr3
例
// 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)
返した値もしexpr1がtrueと評価された場合,expr2はtrueと評価され,そうでない場合,expr3はtrueと評価され,0とNaN+,Infinity,-Infinityはfalseと評価され,他の値はtrueと評価される.
コメント
また会おう
na
行列下標詞、expr1行列の前の値へのアクセスを提供、expr2は過去k行の数であり,数値でなければならない。浮遊は下置される。
expr1[expr2]
例
// [] 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)
返した値文字列は,数値の列である.
また会おう
math.floor
論理 AND は,ブル式に適用されます.
expr1 and expr2
返した値ブル値,またはブル値の集合.
論理ORは,ブル式に適用されます.
expr1 or expr2
返した値ブル値,またはブル値の集合.
論理反論 (NOT) は,ブル式に適用されます.
not expr1
返した値ブル値,またはブル値の集合.
変数または参数を明示的に宣言する
例
// bool
bool b = true // Same as `b = true`
b := na
plot(b ? open : close)
コメント変数宣言に明示的に種類を言及することは,na で初期化されていない限り選択可能である. タイプシステムのユーザーマニュアルページでPine型について詳しく見る.
また会おう
var
varip
int
float
color
string
true
false
変数または参数を明示的に宣言する
例
// int
int i = 14 // Same as `i = 14`
i := na
plot(i)
コメント変数宣言に明示的に種類を言及することは,na で初期化されていない限り選択可能である. タイプシステムのユーザーマニュアルページでPine型について詳しく見る.
また会おう
var
varip
float
bool
color
string
変数またはパラメータを明示的に宣言する
例
// float
float f = 3.14 // Same as `f = 3.14`
f := na
plot(f)
コメント変数宣言に明示的に種類を言及することは,naで初期化されていない限り選択可能である.
また会おう
var
varip
int
bool
color
string
変数または参数を明示的に宣言する"string"タイプキーワードである.
例
// string
string s = "Hello World!" // Same as `s = "Hello world!"`
// string s = na // same as ""
plot(na, title=s)
コメント変数宣言に明示的に種類を言及することは,na で初期化されていない限り選択可能である. タイプシステムのユーザーマニュアルページでPine型について詳しく見る.
また会おう
var
varip
int
float
bool
str.tostring
str.format
変数やパラメータを明示的に宣言する"color"タイプキーワードである.
例
// color
color textColor = color.green
if barstate.islastconfirmedhistory
runtime.log("test", textcolor = textColor)
コメント色文字は次の形式を有する:#RRGGBBまたは#RRGGBBAA.文字は00からFFまでの十六桁の値を表す (十桁の0から255),RR,GG,BBは色の赤,緑,青分数の値である.AAは色透明度 (またはアルファ分数のオプション値である.00は見えない,FFは透明ではない).AAが提供されていない場合,FFを使用する.十六桁の文字は上小文字または上小文字で書ける. 変数宣言に明示的に種類を言及することは,na で初期化されていない限り選択可能である. タイプシステムのユーザーマニュアルページでPine型について詳しく見る.
また会おう
var
varip
int
float
string
color.rgb
color.new
変数またはパラメータを明示的に宣言するarray.new<type>
,array.from
この関数は array object (またはID) を作成します.
例
// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))
コメント配列オブジェクトは,常に
また会おう
var
array.new
array.from
函数呼び出し時に参数伝達,参数名付けを指定し,対応する参数位置で直接変数を伝達し,混合使用もサポートする.例えば:
plot(close, title="test plot") // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"
参数名付けを指定した後に,直接参数として変数を転送することはできません.その後の送信は,参数名付けの形式で記述する必要があります.
// plot(close, title="test", color.red) // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red) // 正确写法
送られてきます.timeframe
パラメータの時間周期を秒に変換します.
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)
返した値
timeframe
int は,K 行の秒数を表す形である.
パラメータ
timeframe
(simple string) タイムフレーム、オプション、デフォルトはtimeframe.period。コメントについてtimeframe
>=
また会おう
input.timeframe
timeframe.period
コード識別子を作成して,平均K行値をスムーズに要求します.
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
(simple string) 商品コードの識別子.また会おう
syminfo.tickerid
syminfo.ticker
request.security
外部のデータを求めます.
request.data(url, attribute)
例
/*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)
返した値パラメータattribute
指定されたデータシリーズ.
パラメータ
url
(simple string) 要求されたデータソースのurl,データソースが返信するデータ形式は,以下の条件を満たす必要があります (少なくともtime、data属性を含む):{"data": [], "schema": ["time", "data"]}
◎例のデータ形式を参照してください:{
"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) 属性の名前を指定し,必要なデータを返します.例えば:"$.add_investor"
活用する$.
前記として,属性名と要求されたデータソースで返信されたデータ内のdataフィールド内の属性が一致する異なった種類/解像度を求めます.
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
(simple string) 商品コード.timeframe
(simple string) 時間周期.空の文字列は,グラフの現在の時間周期として解釈されます.expression
(series int/float/bool/color) は,request.security から計算を呼び出し,表現を返します. それは,一行または一行に変換できる要素を含む要素を含む一組である可能性があります.gaps
(barmerge_gaps) 要求されたデータへの統合ポリシー (データにOHLCの主要な一連のデータに自動的に結合することを要求する) 可能な値:barmerge.gaps_on,barmerge.gaps_off、barmerge.gaps_on - 要求されたデータと可能なギャップを組み合わせ (ナ値) ・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
(simple string) 商品の通貨関連値 (例えば OHLC) を変換した通貨である.その後,変換された値に基づいてコメントこの機能を使用したPineScriptコードは,履歴とリアルタイムデータに対して異なる計算を行うことができます.要求された商品に追加パラメータを指定したい場合,例えば取引時間帯や調整タイプ,您可以使用ticker.newこの関数は,
この関数に点差を伝達するには,現在,1つのスクリプトには最大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
もし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)
返した値存在している場合source
文字列で見つけましたstr
偽の場合は true となる.
パラメータ
source
(series string) ソース文字列str
(series string) 検索する子文字列.また会おう
str.pos
str.match
もしsource
文字列はstr
指定された子文字列の終わりは true を返します.
str.endswith(source, str)
返した値もしsource
文字列はstr
指定された子文字列の終了は true,またはfalse です.
パラメータ
source
(series string) ソース文字列str
(series string) 検索する子文字列.また会おう
str.startswith
もしsource
文字列はstr
中に指定された子文字列の始まりは true を返します.
str.startswith(source, str)
返した値もしsource
文字列はstr
指定された子文字列の始まりは true,または false です.
パラメータ
source
(series string) ソース文字列str
(series string) 検索する子文字列.また会おう
str.endswith
文字列を書き換えるには,source
文字列の子文字列は、子文字列はbegin_pos
指定されたインデックス文字から始まり,source
文字列の
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
(series string) ソース文字列から子文字列を抽出する.begin_pos
(series int) を抽出した子文字列の開始位置. それは独占的である. (抽出した子文字列にはその位置の文字が含まれている).end_pos
(series int) 終了位置、それは独占的である (引出した文字列にはその位置の文字が含まれていない)、オプションである。デフォルト値はsource
文字列の長さ.コメント文字列のインデックスは0から始まる.begin_pos
これは,end_pos
この関数は,空の文字列を返す.
また会おう
str.contains
str.pos
str.match
str.tonumber(string)
返した値有効数字を含む場合,文字列の浮点型,そうでない場合は na です.
パラメータ
string
(series string) intまたはfloatの文字列表示形式.形式文字列と値をフォーマット文字列に変換する.形式文字列には文字テキストとフォーマットされる各値の大きな括弧{} の1つの占有符が含まれます.各占有符には,その必須パラメータを代用するインデックス ((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
(series string) 形式の文字列.arg0, arg1, ...
(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) はフォーマットする値である.コメント引用されていないスタイルのすべての括弧はバランスをとらなければなりません.例えば,
文字列の文字数に対応する整数を返します.
str.length(string)
返した値ソース文字列の文字数.
パラメータ
string
(series string) ソース文字列文字をすべて小文字に変換した新しい文字列を返します.
str.lower(source)
返した値すべての文字が新しい文字列に変換される.
パラメータ
source
(series string) 変換する文字列.また会おう
str.upper
文字をすべて大文字に変換した新しい文字列を返します.
str.upper(source)
返した値すべての文字が新しい文字列に大文字で変換される.
パラメータ
source
(series string) 変換する文字列.また会おう
str.lower
組み合わせた場合regex
この式は,source
文字列の新しい子文字列,または
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) // "EXCHAN
ウウオヤン取引が同時に行われることを望むなら,
軽い雲JSと同じようなトランザクションも行えますか? ありがとうございました.
リサ20231詳細なドキュメントをありがとうございました.
芸術このPineScriptは,Okexのシミュレーションディスクをプラットフォーム上でどのように使っているのでしょうか?
芸術開発者のプラットフォームに直接コピーして利用できます!
小さな夢PINE言語は単種策のみを行うが,多種策は,python,javascript,c++で設計を書くのがベストである.
小さな夢OKXは特殊なもので,彼らの模擬環境とリアルディスク環境は同じアドレスですが,別の場所では区別されます.
軽い雲OKX模擬盤は使えませんでした.
小さな夢この多様なアーキテクチャの問題は,各取引所のインターフェースが異なるため,インターフェースの周波数制限が異なるため,多くの問題が生じる.
小さな夢雲山さん,この提案をありがとうございました.
軽い雲JSと混同した方が良いと感じて,JSは様々な取引方法により適している.
トレンドハンター販売価格は各品種にわたって行われます.
小さな夢嫌なことをする.
軽い雲素晴らしい,ありがとう,夢大さん.
小さな夢PINE言語の戦略は,一時的に単一品種のみです.
小さな夢この記事へのトラックバック一覧です.
小さな夢ほら,もういいから
小さな夢PINE 模範庫のパラメータは,交換取引所のベースアドレスを設定することができます. 文書の開始: PINE 言語取引庫の模範庫のパラメータ.