ドキュメント

Deepwick Script リファレンス

Deepwick Script は Deepwick のチャートとバックテストの言語です。Pine Script の一部を実行します。ta.*、math.*、str.*、input.*、plot*、strategy.* の多くの関数はそのまま動き、対応していない行は行番号と列番号で示されます。このページには、現時点でエンジンが対応しているものとしていないものをすべて載せています。

Deepwick は初めてですか?まずは手順ガイドから: Pine Script の戦略を無料でバックテストする方法.

Deepwick Script を書く AI を作っていますか? このリファレンスを 1 つの Markdown 文書で.

更新日:

言語

Deepwick Script は Pine Script の一部(enum、用户定義型、メソッド、map)を実行します。//@version の行は検証されません。スクリプトは一番古いバーから一番新しいバーまで、1 バーに 1 回実行され、各変数は履歴を保持します。

構文何をするか
x = expr / x := expr変数を宣言し、:= で再代入します。名前の前に任意の型(int、float、bool、string、color、series、simple、const、line、label)を書けます。
var / varip最初のバーで一度だけ初期化し、以降のバーでも値を保ちます。スクリプトは閉じたバーで実行されるので、varip は var と同じ挙動になります。
x[n]履歴演算子:n 本前の x の値(最初のバーより前では na)。
if / else条件分岐のブロック。インデントは 4 スペースです。if は式としても使えます。
cond ? a : b三項演算子。
switch複数分岐。比較する値を指定する形かどうかは任意です。
for i = a to b [by step]回数の指定があるループ。break と continue を使えます。
while cond条件が成り立つ間繰り返すループ。
f(x, y) => expr用户定義の関数。1 行で書くことも、インデントしたブロックで最後の式を返す形でもかまいません。Pine と同じく、呼び出し位置ごとに ta.* の状態は独立しています。
[a, b] = f()タプル:関数は複数の値を返せます。ta.macd() や ta.bb() といった組み込み関数も複数値を返します。
and / or / not論理演算子。算術:+ - * / %;比較:== != < <= > >=。

宣言

構文何をするか
indicator(title, shorttitle, overlay, precision)インジケーターを宣言します。チャートに描画するだけで、バックテストする対象はありません。study() は別名として受け付けられます。
strategy(title, overlay, initial_capital, default_qty_type, default_qty_value, commission_type, commission_value, slippage, pyramiding)戦略を宣言します。初期値:initial_capital 100000、注文ごとに 1 枚、手数料 0、slippage 0 ティック、 pyramiding 1。process_orders_on_close などの他の引数は無視されます。

入力

入力はエディターの横とインジケーターの設定に表示されるので、コードを触らずに値を変えられます。

構文何をするか
input.int(defval, title, minval, maxval, step)整数。
input.float(defval, title, minval, maxval, step)小数。
input.bool(defval, title)チェックボックス。
input.string(defval, title, options)テキスト、または選択肢のリスト。
input.session(defval, title)"0930-1600" のような取引セッション、または "23456" のような曜日。session.ismarket() やほかの session.* の判定に渡します。
input.source(defval, title)価格ソース:open、high、low、close、hl2、hlc3、ohlc4、hlcc4。
input.color(defval, title)カラーピッカー。
input(defval, title)汎用入力。型は初期値から決まります。

バーデータと時刻

時刻は UTC のミリ秒です。hour() とほかの時刻関数は任意の時刻を受け取ります。hour() はさらに、固定的オフセット一覧から選んだタイムゾーンも受け取ります。夏時間は考慮しません。

構文何をするか
open, high, low, close, volume現在のバーの価格と出来高。
hl2, hlc3, ohlc4, hlcc4代表的な価格の平均。
bar_index, last_bar_index現在のバーのインデックス(0 が一番古い)と、最後のバーのインデックス。
time, time_closeバーの始値時刻と終値時刻。関数として — time("D")、time(timeframe.period, "0000-0900:23456", "UTC") — は、このバーを含む上位時間足の開始(または終了)時刻を返し、バーがセッション外なら na を返します。セッション:"HHMM-HHMM"、日付をまたぐものも可、カンマ区切りの複数の窓、コロン後ろの曜日は任意(1 = 日曜 … 7 = 土曜)、"24x7"。
timeframe.change(timeframe)新しい期間ごとの最初のバーで true になります。例:timeframe.change("D") は毎日最初のバーで true(週は月曜から)。
timestamp(timezone?, year, month, day, hour, minute, second)各要素からミリ秒の時刻を作る、または日付文字列から作る:timestamp("2026-01-05T09:30:00Z")。
dayofweek.sunday … dayofweek.saturdaydayofweek(1 … 7)と比較するための曜日定数。
session.ismarket, isfirstbar, islastbar, ispremarket, ispostmarketセッションの状態。ここの市場は終日取引されるので、すべてのバーが取引セッションに属します。isfirstbar / islastbar は各 UTC 日の最初と最後のバーを示します。
year, month, weekofyear, dayofmonth, dayofweek, hour, minute, secondバーの時刻のカレンダー要素。時刻を指定して呼ぶこともできます(例:hour(time, "America/New_York"))。dayofweek:1 = 日曜 … 7 = 土曜。
barstate.isfirst, islast, isnew, isconfirmed, ishistory, isrealtimeスクリプトがバー履歴のどこに位置しているか。
timeframe.period, multiplier, isintraday, isdaily, isweekly, ismonthlyチャートの時間足。
syminfo.ticker, tickerid, mintick, pointvalueチャートの銘柄、価格刻み、.point の値。

テクニカル分析(ta.*)

Pine と同じく、呼び出し位置ごとに状態が独立しています。別の行にある 2 つの ta.ema() 呼び出しは、2 つの別々の平均です。バーが十分になるまで結果は na です。

構文何をするか
ta.sma(source, length)単純移動平均。
ta.ema(source, length)指数移動平均。
ta.rma(source, length)Wilder の移動平均(RSI と ATR が使います)。
ta.wma(source, length)加重移動平均。
ta.vwma(source, length)出来高加重移動平均。
ta.hma(source, length)Hull の移動平均。
ta.linreg(source, length, offset)線形回帰線の値。
ta.vwap(source)出来高加重平均価格。毎日 00:00 UTC でリセットされます。
ta.rsi(source, length)相対力指数(RSI)、0 から 100。
ta.macd(source, fastlen, slowlen, siglen)[macd, signal, histogram] を返します。
ta.stoch(source, high, low, length)ストキャスティクス %K、0 から 100。
ta.cci(source, length)commodity チャンネル指数(CCI)。
ta.mfi(series, length)資金フロー指数(MFI)。
ta.wpr(length)Williams %R、-100 から 0。
ta.dmi(diLength, adxSmoothing)[+DI, -DI, ADX] を返します。
ta.supertrend(factor, atrPeriod)[supertrend, direction] を返します。direction は上昇トレンドで -1、下落トレンドで 1 です。
ta.sar(start, inc, max)パラボリック SAR。
ta.mom(source, length)モメンタム:source から length 本前の source を引いた値。
ta.roc(source, length)変化率(パーセント)。
ta.change(source, length)length 本前との差(既定は 1)。
ta.tr / ta.tr(handle_na)真値幅(True Range)。
ta.atr(length)真値幅の平均(Wilder)。
ta.bb(series, length, mult)Bollinger バンド:[middle, upper, lower] を返します。
ta.bbw(series, length, mult)Bollinger バンド幅:(upper - lower) / middle。
ta.kc(series, length, mult)Keltner チャンネル:[middle, upper, lower] を返します。真値幅の EMA を使います。
ta.stdev(source, length, biased)標準偏差。
ta.variance(source, length, biased)分散。
ta.dev(source, length)平均絶対偏差。
ta.median(source, length)中央値。
ta.highest(source, length) / ta.highest(length)直近 length 本の最高値(既定は high)。
ta.lowest(source, length) / ta.lowest(length)直近 length 本の最低値(既定は low)。
ta.highestbars(source, length)最高値からのオフセット:0 または負の数。
ta.lowestbars(source, length)最低値からのオフセット:0 または負の数。
ta.rising(source, length)source が前の length 本のどの値よりも上なら true。
ta.falling(source, length)source が前の length 本のどの値よりも下なら true。
ta.crossover(source1, source2)source1 が source2 を上へ_cross したバーで true。
ta.crossunder(source1, source2)source1 が source2 を下に_crossしたバーで true。
ta.cross(source1, source2)どちらの方向のクロスでも true。
ta.pivothigh(source, leftbars, rightbars)Pivot high の価格。Pivot の rightbars 本後に確定し、それ以外は na。source は任意(既定は high)。
ta.pivotlow(source, leftbars, rightbars)Pivot low の価格。Pivot の rightbars 本後に確定し、それ以外は na。source は任意(既定は low)。
ta.valuewhen(condition, source, occurrence)condition が true だった直近 occurrence 番目のバーにおける source の値。
ta.barssince(condition)condition が最後に true になってからのバー数。
ta.cum(source)最初のバーからの累計。

ほかの時間足(request.*)

上位の時間足はチャートのバーそのものから作られるので、エンジンが持っていないデータは要りません。上位時間足の値は、そのバーが閉じた「後」のチャートバーでだけ見えます。4 時間足のバーは自分の中からは決して読めない — バックテストを正直に保つのはこの性質だからです。

構文何をするか
request.security(symbol, timeframe, expression)同じ銘柄の上位時間足で expression を実行し、最後に「閉じた」値を返します。チャートの銘柄(または syminfo.tickerid、空の銘柄)でのみ動作します。別の銘柄は na を返します。エンジンはチャートのバーしか持っていないからです。時間足は Pine の書き方("60"、"240"、"D"、"W"、"M")と Deepwick の書き方("1h"、"4h"、"1d")の両方を受け付けます。expression は ta.* の呼び出しでもよく、その場合は上位時間足の系列で評価されます。該当するバーが閉じるまで na を返します。
request.security(..., lookahead)受け付けられが無視されます。lookahead_on を有効にすると、バックテストが形成中の上位時間足バーを読んでしまい、それは未来見です。エンジンは決して覗きません。gaps はバー内の描画にだけ影響しますが、ここでは該当しません。

戦略(strategy.*)

成行注文は次のバーの始値で約定します。ストップ注文とリミット注文はバーの流れに沿って約定します:始値 → 始値に近い方の極値 → もう一方の極値 → 終値。価格が注文を飛び越えてギャップすると、始値で約定します。手数料はすべての約定で発生し、slippage は成行とストップの約定に適用されます。

構文何をするか
strategy.entry(id, direction, qty, limit, stop, comment)ポジションを開く、またはポジションを増やす注文。limit や stop を指定しない場合は成行注文です。
strategy.order(id, direction, qty, limit, stop, comment)strategy.entry() と同じ引数です。
strategy.exit(id, from_entry, qty_percent, profit, limit, loss, stop, trail_points, trail_offset, comment)エントリーの利益確定、損切り、トレーリングストップ:利益と損失はティック数、limit と stop は価格。trail_points は最高値からのティック距離、trail_offset はトレーリングストップが効くまでに確保しておくべき利益(ティック数)です。ストップはあなたに有利な方向にしか動かず、「閉じた」バーでしか動かないので、バー自身の高値が設定したストップを、そのバー自身が約定することはありません。
strategy.close(id, comment, qty_percent)エントリーを次のバーの成行で決済します。
strategy.close_all(comment)すべてのオープンポジションを決済します。
strategy.cancel(id) / strategy.cancel_all()未約定の注文を取り消します。
strategy.position_size, position_avg_price現在のポジション(ロングなら正、ショートなら負)と平均価格。
strategy.opentrades.entry_bar_index(n), entry_price, entry_time, entry_id, size, profit, commission, max_runup, max_drawdownオープン中の取引 n の詳細(0 が一番古い)。該当なしなら na。ショートでは size が負になります。例:10 本後に決済するには bar_index - strategy.opentrades.entry_bar_index(0) >= 10。
strategy.closedtrades.entry_bar_index(n), exit_bar_index, entry_price, exit_price, entry_time, exit_time, entry_id, size, profit, commission, max_runup, max_drawdown決済済み取引 n の詳細(0 が一番古い。最後は strategy.closedtrades - 1)。
strategy.equity, netprofit, openprofit, grossprofit, grossloss, initial_capital口座の数値。
strategy.closedtrades, opentrades, wintrades, losstrades取引件数。
strategy.long, strategy.short方向。
strategy.fixed, strategy.cash, strategy.percent_of_equitydefault_qty_type の値。
strategy.commission.percent, cash_per_order, cash_per_contractcommission_type の値。

プロットとアラート

構文何をするか
plot(series, title, color, linewidth, style)チャート上、または専用ペインに系列を描画します。
plotshape(series, title, style, location, color, text)series が true のバーに図形を描画します。
plotchar(series, title, char, location, color)series が true のバーに文字を描画します。
hline(price, title, color, linestyle)固定レベルの水平線。
fill(plot1, plot2, color)2 つのプロット、または 2 本の hlines の間を塗ります。
bgcolor(color)バーの背景を塗ります。
barcolor(color)バー自体を塗ります。
alertcondition(condition, title, message)メール、Telegram、Discord、webhook のアラートに変換できる条件を宣言します。
plot.style_*line、linebr、stepline、histogram、columns、circles、cross、area。
hline.style_*solid、dashed、dotted。
shape.*triangleup, triangledown, arrowup, arrowdown, circle, xcross, cross, diamond, square, flag, labelup, labeldown.
location.*abovebar、belowbar、top、bottom、absolute。
size.*auto、tiny、small、normal、large、huge。受け付けられますが、図形のサイズは 1 種類だけです。

線とボックス

構文何をするか
line.new(x1, y1, x2, y2, extend, color, style, width)2 つのバーインデックスと価格の間に線を描画し、その id を返します。
line.set_x1, set_y1, set_x2, set_y2, set_xy1, set_xy2, set_color, set_style, set_width線を変更します。
line.delete(id)線を削除します。
box.new(left, top, right, bottom, border_color, bgcolor, extend)長方形を描画し、その id を返します。
box.set_left, set_top, set_right, set_bottom, set_bgcolor, set_border_color, set_extendボックスを変更します。
box.delete(id)ボックスを削除します。
line.style_*, box.style_*solid、dashed、dotted。
extend.*none、left、right、both。

数学、文字列、色

構文何をするか
math.abs, ceil, floor, round(number, precision), sign, sqrt, exp, log, log10, pow(base, exponent)算術。
math.max(...), math.min(...), math.avg(...)任意の個数の値に対して。
math.sum(source, length)直近 length 本の合計。
math.pi, math.e定数。
na, na(x), nz(x, replacement), fixnan(x)欠損値、それの判定、置換、そして直近の na でない値。
int(x), float(x), bool(x)型変換。
str.tostring(value, format), str.format(text, ...), str.length(s), str.contains(s, part)文字列。str.format は {0}、{1}… を引数で置き換えます。
color.new(color, transp), color.rgb(red, green, blue, transp)色を作ります。透明度は 0 から 100。
color.*red, green, blue, orange, yellow, purple, aqua, lime, fuchsia, teal, maroon, navy, olive, gray, silver, white, black.

配列(array.*)

構文何をするか
array.new_float, new_int, new_bool, new_string, new_color, new_line, new_box, new_label, new_table(size)配列を作ります。
array.get, set, insert, push, pop, shift, unshift要素を読み書きします。
array.size, first, last, sum, avg, min, max, stdev要素数と統計。

Map とユーザー定義型

ユーザー定義型と `map.<fn>` コレクションがサポートされています。どちらもトップレベルの宣言で、値のインスタンスメソッドは `obj.method(args...)` の書き方になります。

構文何をするか
enum Name Member Member = N ...トップレベルの enum 宣言。値を書かないメンバーは 0 から自動で増えます。明示的な値は数値でも文字列でも構いません。式のどの位置でも `Name.Member` で参照できます。enum の値は素の数値(または文字列)なので、比較演算子や変換なしの `int()` でもそのまま使えます。
type Name field1 field2: int field3 = defaultトップレベルのユーザー定義型。フィールドは 1 行に 1 つずつ書きます。`: type` と `= default` の部分は将来互換のために受け付けられますが、まだ検証はされません。`Type.new(arg1, arg2, ...)` で生成し、`instance.field` でフィールドを読みます。
m = map.new<int, float>()空の map を作ります。型引数 `<K, V>` は受け付けられますが、実行時には無視されます。
m = map.put(m, key, value)キーを設定します。map を返すので、呼び出しを連鎖させたり代入し直したりできます。
v = map.get(m, key)値を読みます。キーがなければ na を返します。
n = map.size(m)要素数。
keys = map.keys(m), values = map.values(m)キーまたは値を Pine の配列として返します(追加順)。
map.contains(m, key), map.remove(m, key)存在判定と削除。どちらも map を返します。

まだ未対応

エンジンが知らない関数を呼ぶと、スクリプトは「Unknown function」として行番号と列番号の場所で停止します。

構文何をするか
label.new(), table.new()まだ利用できません。線とボックスは利用できます。
import, matrix.*, array.new<type>()ライブラリ、行列、型付き配列のコンストラクターはまだ実装されていません。
strategy.risk.*リスクルール(max_position_size、max_intraday_loss、max_drawdown、allow_entry_in)は未対応です。strategy.exit() のトレーリングストップは対応しているので、trail_points と trail_offset を使ってください。

よくある質問

Deepwick Script は Pine Script と同じですか。

いいえ。Deepwick 独自のエンジンで、Pine Script の一部を実行します。このページにある関数がその一部です。ta.*、math.*、str.*、input.*、plot*、strategy.* の大半はそのまま動き、対応していない行は行番号と列番号で示されます。Deepwick は TradingView と提携していません。Pine Script は TradingView, Inc. の商標です。

Deepwick Script は Pine Script のどの機能に対応していますか。

Deepwick Script は Pine Script の一部を実行します。enum、ユーザー定義型(`type`)、メソッド宣言、`map.*` コレクションが対象です。まだ実装されていません:ライブラリ(`import`)、`matrix.*`、型付き `array.new<type>()` コンストラクター。エディターが正確な行番号と列番号で指摘します。//@version の行は検証されません。スクリプトをエディターに貼り付ければ、どの行が動くかが分かります。

Deepwick は request.security() に対応していますか。

はい。ただしチャートの銘柄自体の上位時間足に限ります。request.security(syminfo.tickerid, "240", close) は最後に閉じた 4 時間足の終値を返し、expression は ta.* の呼び出しでもかまいません。別の銘柄は依然 na を返します。エンジンはチャートのバーしか持っておらず、それらしい数値でも間違っていれば、無いより悪いからです。

なぜ request.security() は最初のバーで na を返すのですか。

まだ上位時間足のバーが閉じていないからです。4 時間足のバーは、その閉じた後のチャートバーでだけ読める.まさに、バックテストが形成中のバーを読めないようにしている性質です。1 本閉じた後は、次の 1 本が閉じるまで同じ値が繰り返されます。

バックテストでは、戦略の注文はどう約定しますか。

成行注文は次のバーの始値で約定します。ストップとリミットはバーの流れに沿って約定します(始値 → 近い方の極値 → 遠い方の極値 → 終値)。価格が飛び越えてギャップした注文は始値で約定します。手数料はすべての約定で、slippage は成行とストップの約定で発生し、どちらも strategy() の設定に従います。既定は 0 です。

スクリプトはどこで動きますか。

チャートの上で、あなたのブラウザーの中で、チャートに読み込まれたバーを使って動きます。保存したバックテストは Deepwick のサーバー上で、最大 5,000 本のバーを使って動きます。