先頭の宣言:versionとstrategy
Pineのコードは、まず使うバージョンを書き、次にこれは「ストラテジー」だと宣言することから始まります。ストラテジーは売買して損益を出すもの、という意味です(売買せずチャートに線を引くだけの「インジケーター」とは別物です)。
//@version=6
strategy("月末ロング (簡易ToM)", overlay=true,
default_qty_type=strategy.fixed, default_qty_value=1)
//@version=6 は「Pineのバージョン6で書く」という決まりの1行。overlay=true は売買をローソク足チャートの上に重ねて表示する指定、default_qty_value=1 は1回の売買数量を1にする指定です。
組み込み変数と「足ごとに動く」考え方
Pineの一番の特徴は、コードが左端のローソク足から右端まで、1本ずつ自動でたどりながら実行されることです。MQL5の OnTick のように自分で繰り返しを意識しなくても、Pineが勝手に各足でコード全体を1回ずつ走らせます。
そのとき、次のような組み込み変数が、今たどっている足の値に自動で変わります。
close:その足の終値。open/high/low:その足の始値・高値・安値。dayofmonth:その足の日付(1〜31)。月末ロングの判定に使います。strategy.position_size:今持っているポジションの大きさ。0ならノーポジ、正なら買い持ち。
if文で条件を書く
Pineのif文は、MQL5と考え方は同じで「もし〜なら〜する」です。ただし波かっこ { } を使わず、字下げ(インデント)で範囲を表すのが大きな違いです。条件の下の行を半角スペースで下げると、それが「if の中身」になります。
if dayofmonth >= 25
strategy.entry("Long", strategy.long)
2行目の頭の空白(インデント)が「if の中身」の印。MQL5の { } の代わりです。条件を囲むかっこ ( ) も不要です。
条件の組み合わせは、記号ではなく英単語で書きます。「かつ」は and、「または」は or です。
if dayofmonth >= 3 and dayofmonth <= 15
strategy.close("Long")
strategy.entryとstrategy.close
売買の命令は2つだけ覚えれば足ります。
strategy.entry("Long", strategy.long):"Long"という名前で買いポジションを持つ。strategy.close("Long"):"Long"のポジションを決済する。
ここは第10回で効いてくる重要な違いです。Pineで strategy.entry() がある足で実行されても、実際に約定するのは既定では「次の足の始値」です。「今の足の終値で判定して、次の足の頭で約定」という動きになります。
一方、後で見るPythonの実装では「その足の終値で約定した」と計算します。同じルールでも、約定の瞬間が1本ぶんずれる。これが3環境で結果がずれる原因の1つです。今は「Pineは次の足の頭で約定するのが既定」とだけ覚えておけば十分です。
どこに書いて、どう動かすか
Pineは、TradingViewの画面下部にあるPineエディタに書きます。書いたら「チャートに追加」を押すと、そのストラテジーがチャートに適用され、下部のストラテジーテスタータブに損益・勝率・最大ドローダウンなどが表示されます。MT5のストラテジーテスターと役割は同じです。
環境構築はほぼ不要で、ブラウザだけで完結します。ただし新しいコードを書くときは、既存のスクリプトを上書きしないよう、必ず「新規作成」から始めるのが安全です。詳しい画面操作は「TradingViewの基本設定」を参照してください。
チェックリスト
次の記事に進む前に、以下が自分の言葉で説明できるか確認してください。
- 先頭の
//@version=6とstrategy(...)の役割 - Pineが足を1本ずつ自動でたどること
- close・dayofmonth などの組み込み変数が足ごとに変わること
- Pineのif文は波かっこでなく字下げで範囲を表すこと
- 「かつ」は
and、「または」はor - Pineの約定は既定で「次の足の始値」であること
ミニテスト
最後に3問だけ確認です。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。
Q1. Pine Scriptのif文で「中身」の範囲を表すのは?
Pineは波かっこを使わず、条件の下の行を字下げすることで「if の中身」を表します。MQL5の { } にあたる役割です。
Q2. Pineで「かつ」を表すのは?
Pineは記号ではなく英単語で書きます。「かつ」は and、「または」は or。MQL5の && にあたります。
Q3. Pineの strategy.entry() について、既定の約定タイミングは?
Pineは既定で「今の足で判定して、次の足の始値で約定」します。後で見るPythonは終値で約定と計算するため、同じルールでも約定が1本ぶんずれます(第10回で扱います)。