FMZ PINE スクリプトのドキュメント

作者: リン・ハーン小さな夢, 作成日: 2022-05-06 14:27:06, 更新日: 2024-02-23 15:36:48

[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()声明文はこちら.

コード

スクリプト内の注釈やコンパイルヤー命令以外の行は,スクリプトのアルゴリズムを実装する文である. 文はそれらのいずれかである.

  • 変数宣言
  • 変数の再定義
  • 関数宣言
  • 内蔵関数呼び出し,ユーザー定義関数呼び出し
  • ifforwhileあるいはswitch等式構造

文は様々な方法で並べられます

  • いくつかの文言は1行で表現できるが,例えばほとんどの変数宣言は1行のみの関数呼び出しを含む文言または1行の関数宣言である.他の文言は,構造のように,常に複数の行を必要とするが,それらは局所的なブロックを必要とする.
  • スクリプトの全域の文 (すなわち,部分に属していない部分) は,空格あるいは制表符(タブキー) 開始.それらの最初の文字も行の最初の文字でなければならない.行の最初の位置から始まる行は,定義によってスクリプトの全域の一部である.
  • 構造や多行関数宣言には常に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 言語取引庫"のパラメータ設定説明.

取引設定

  • 実行方法 閉じる価格モデル:現在のBARが終わるまでモデルを実行し,下根BARが始まるときに取引を実行する. リアルタイム価格モデル:価格の変化ごとにモデルを実行し,信号がすぐに取引を実行します.
  • デフォルト開場数:取引指示が取引数を指定していない場合,その設定に従って取引を行う.
  • 最大単一の取引回数:実際の盘口に基づいて,このパラメータ設定と組み合わせ,各次最大の注文回数を決定し,盘面への衝撃を避ける.
  • スライドポイント数:定价货币精度パラメータとこのパラメータは,注文時のスライド価格を決定する.例えば,価格設定の通貨精度が2,つまり小数点の2番目まで正確で,0.01まで正確である.その場合は,スライドポイントは1点ごとに0.01の価格単位を表す.このとき,スライドポイント数は5に設定され,注文時のスライド価格は0.05である. (スライドポイントは,注文時のスライド価格の部分により,注文の取引の溢出額を計上するため)
  • 変数の最長周期数:グラフKの線BARの数に影響を与え,javascript戦略での呼び出しSetMaxBarLenこの関数は同じです.

フューチャーオプション

  • 品種コード: 契約コード,取引所のオブジェクトが非現貨取引所のオブジェクトである場合にのみ設定する必要があります.
  • 最小契約数:注文時に契約の最小取引量.

リアルディスクオプション

  • 自動復旧: 前回のポリシー停止前の状態に自動的に復元する.
  • 注文の再試行数: 取引が完了しない場合は,注文を撤回し,再注文を試みます.このパラメータは最大再試行数を制限するために使用されます.
  • ネットワークリクエスト間隔 (ミリ秒): REST プロトコルのみで有効で,ネットワークリクエスト間隔を制御し,リクエストが頻繁すぎたり,取引所の制限を超えたりすることを避ける.
  • アカウント・シンクロタイム (※秒): アカウント・データのシンクロの時間周期.
  • オープン後のポジション同期時間 (ミリ秒):一部の取引所のデータ遅延による重複のポジションのみに対して,同期時間を大きく設定することで,このような問題を軽減できます.
  • 引き上げ倍数:引き上げ倍数を設定する.

現金取引,その他の設定

  • 一手取引量:デフォルトの"手取引量,現金のみで有効.
  • 最小取引量: 最小取引量.
  • 定価通貨精度:価格精度,つまり価格の小数位.
  • 取引品種精度:下位単位精度,つまり下位単位の小数位数.
  • 料金:この設定により,いくつかのデータに対して計算する. 0.002 は千分の2 です.
  • 利益損益統計の間隔:実盤でのみ利益損益統計の使用を示します.
  • 復試失敗 (ミリ秒): ネットワーク要求が失敗したときの復試間隔.
  • REST プロトコルでのみ有効である.
  • 一般的なネットワークエラーを隠す: ログエリアで一般的なエラーログを隠す.
  • 基地のアドレスを切り替える: REST プロトコルでのみ有効である.
  • メッセージを送信します. メッセージを送信します.

契約書

オープン

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この関数は,この関数から,limitstopパラメータは.

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市場が現在の価格よりも高い場合にのみ,注文が誘発される.

  • ストップ 注文

    オーダーのストップ・ロスト価格を設定し,オーダーが買い物である場合,市場の現在の価格がその価格よりも高くなる場合にのみオーダーが触発される. 注文がセールスオーダーである場合,現在の市場価格がその価格を下回る場合にのみ注文が誘発される.

  • ストップ・リミット

    設定するlimitstopパラメータ,注文が最初に条件を満たす価格でトリガーされる.

声明,論理構造キーワード

ワール

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

変数aは,一連の各柱線の最初の柱線の閉じる価格を維持する. 変数bは,シリーズ第1のの価格棒の閉店価格を維持した. 変数cは,シリーズ第10位のの閉店価格を維持した.

FMZでは,リアルタイムの価格モデル,閉じる価格モデル,varvarip変数を宣言する場合は,次のコードでテストします.

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線段階.varvarip宣言された変数 i、ii は,戦略コードの各実行回ごとに増幅操作を実行します.if trueしたがって,確実に対応する条件コードブロックを実行する) ー だから,回帰結果のK線BARに表示される数字がそれぞれが1を増加していることがわかります. 歴史のK線段階が終了すると,リアルタイムK線段階を開始します.varvarip宣言された変数は異なる変化が始まる. リアルタイム価格モデルであるため,K線BAR内の価格の変化ごとに戦略コードが繰り返される.i := i + 1そしてii := ii + 1i は次の実行回でも変更されるが,次の実行回でも変更されるが,現在のK線BARが終了するまで更新しない. (つまり,次の実行回でも変更されない) だから,i 変数は依然としてBAR1 を追加する.しかし,i 変数はBAR に何度か加算される.

  • 閉店価格モデル 閉じる価格モデルは,K線BARが走るたびに1回の戦略論理を実行する.したがって,閉じる価格モデルでは,歴史的なK線段階とリアルタイムK線段階は,varvarip宣言された変数は,上記の例で増加して表されるのに完全に一致し,各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 脚本言語では,else if文法を使用することができます.

共有コードは:

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_then0var_decl_then1条件が false ならば,文塊を使用します.else if可能性はelse論理はvar_decl_else0var_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 変数にempty 値 ((na、false または) を割り当てます:

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

複数のelse ifブロックを使用したり,まったく使用しないこともできます. ※then,else if,else ifのブロックは4つのスペースに移動されます:

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

軽視するif文の結果値 ((var_declarationX=は省略できる) です. 表現の副語が必要な場合は,これは有用かもしれません.例えば戦略取引では:

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) ループを中断する.series int/float thresholds/expressionsを使用することは許容されるが,これらはループの第1回転時にのみ評価される.step_num-カウンタの値増加/減少. それはオプションである. デフォルト値は+1または-1である. それはfrom_numまたはto_numの最大値に依存する. 値を使用するときは,カウンタはfrom_numまたはto_numの最大値によって増加/減少する. したがって,step_numの+/-記号はオプションである.statements | continue | break- 任意の数の文,またはcontinueまたはbreakキーワードを4つのスペースまたは1つのタブに縮小します.return_expression- ループの返却値は,存在する場合はvar_declarationの変数に割り当てられます. もしループがcontinueまたはbreakキーワードによって退出した場合,ループの返却値は,ループを退出する前に割り当てられた最後の変数の返却値です.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- 任意の数の文,またはcontinueまたはbreakキーワードを4つのスペースまたは1つのタブに縮小します.return_expression- 回転の返り値が割り当てるvar_declaration中にある変数,もし存在する場合. もしループがcontinueまたはbreakキーワードによって退出した場合,ループの返回値は,ループが退出する前の最後の割り当て変数である.continue- ループ内でのみ使用できるキーワード. それはループの次のアイディアを実行させる.breakキーワードは"退団する"です.

ループ内の配列の要素またはそのサイズを変更することを許可する. このビデオでは,for...in単項式で,各K線に何つのK線のOHLC値がcloseのSMA値よりも大きいかを決定する:

// 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 を返します. 単元+は,expr (単元演算子の対称性に対して何も追加しない) を返します.

コメント数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.

+=

加法指令は、数値表現や文字列に適用される。

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 を返します. 1円-負の式を返します.

コメント数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.

-=

減法指令は、数値式に適用されます。

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と評価される.

コメントelseの枝としてnaを使用してください. 2つまたはそれ以上を使用することができます: 操作符を組み合わせて,スイッチのような文を実現します (上の例を参照してください). 数字付きの算術演算子と変数列を使用できます. 数列を使用する場合は,演算子が要素に適用されます.

また会おう 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"変数の値は true、false,または na になる.

// 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 ((整数) 型のキーワードである.

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

コメント変数宣言に明示的に種類を言及することは,na で初期化されていない限り選択可能である. タイプシステムのユーザーマニュアルページでPine型について詳しく見る.

また会おう var varip float bool color string

浮遊機

変数またはパラメータを明示的に宣言するfloat (浮点) 型のキーワード.

// 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)             // 正确写法

時間枠

タイムフレーム.in_sec

送られてきます.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)

返した値 timeframeint は,K 行の秒数を表す形である.

パラメータ

  • timeframe(simple string) タイムフレーム、オプション、デフォルトはtimeframe.period。

コメントについてtimeframe>=1M関数は,月中の30.4167 (365/12) 日数による秒数である.

また会おう input.timeframe timeframe.period

ティッカー

ticker.heikinashi

コード識別子を作成して,平均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

外部のデータを求めます.

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

異なった種類/解像度を求めます.

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) を変換した通貨である.その後,変換された値に基づいて式式を計算する.使用した変換率は,前日のFX_IDC対の日々の為替率 (計算されるK線に対して).オプション.デフォルト値はsyminfo.currencyである.可能な値:ISO 4217形式の通貨コード (例えばUSD) を含む3文字文字文字文字列または currency.名前空間の定数の一つ,例えばcurrency.USDである.

コメントこの機能を使用したPineScriptコードは,履歴とリアルタイムデータに対して異なる計算を行うことができます.要求された商品に追加パラメータを指定したい場合,例えば取引時間帯や調整タイプ,您可以使用ticker.newこの関数は, この関数に点差を伝達するには,ticker変数を使用することはできません.ticker.new変数または株コードの文字列表示形式,例えばAAPL+MSFT*TSLA.現在,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

ストラ

str.contains

もし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

str.endswith

もしsource文字列はstr指定された子文字列の終わりは true を返します.

str.endswith(source, str)

返した値もしsource文字列はstr指定された子文字列の終了は true,またはfalse です.

パラメータ

  • source(series string) ソース文字列
  • str(series string) 検索する子文字列.

また会おう str.startswith

str.startswith

もしsource文字列はstr中に指定された子文字列の始まりは true を返します.

str.startswith(source, str)

返した値もしsource文字列はstr指定された子文字列の始まりは true,または false です.

パラメータ

  • source(series string) ソース文字列
  • str(series string) 検索する子文字列.

また会おう str.endswith

str.substring

文字列を書き換えるには,source文字列の子文字列は、子文字列はbegin_pos指定されたインデックス文字から始まり,source文字列のend_pos - 1

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

str.tonumber(string)

返した値有効数字を含む場合,文字列の浮点型,そうでない場合は na です.

パラメータ

  • string(series string) intまたはfloatの文字列表示形式.

str.format

形式文字列と値をフォーマット文字列に変換する.形式文字列には文字テキストとフォーマットされる各値の大きな括弧{} の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[]) はフォーマットする値である.

コメント引用されていないスタイルのすべての括弧はバランスをとらなければなりません.例えば,ab {0} de"と"ab } de"は有効スタイルですが",ab {0} de,ab } de"と{"は有効スタイルではありません.

str.length

文字列の文字数に対応する整数を返します.

str.length(string)

返した値ソース文字列の文字数.

パラメータ

  • string(series string) ソース文字列

str.lower

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

str.lower(source)

返した値すべての文字が新しい文字列に変換される.

パラメータ

  • source(series string) 変換する文字列.

また会おう str.upper

str.upper

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

str.upper(source)

返した値すべての文字が新しい文字列に大文字で変換される.

パラメータ

  • source(series string) 変換する文字列.

また会おう str.lower

str.match

組み合わせた場合regexこの式は,source文字列の新しい子文字列,またはnaを返します.

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 言語取引庫の模範庫のパラメータ.