ストラテジーの全コード

第4回で学んだ部品(strategy(...)・組み込み変数・if文・strategy.entrystrategy.close)だけで、これで完成です。

Pine Script:月末ロング(全コード)
//@version=6
strategy("月末ロング (簡易ToM)", overlay=true,
     default_qty_type=strategy.fixed, default_qty_value=1)

dom = dayofmonth   // その足の日付(1〜31)

// ノーポジ かつ 日付25以上 → 買い条件
isEntry = strategy.position_size == 0 and dom >= 25
// 保有中 かつ 日付3〜15 → 決済条件
isExit  = strategy.position_size > 0 and dom >= 3 and dom <= 15

if isEntry
    strategy.entry("Long", strategy.long)
if isExit
    strategy.close("Long")

// 保有中の期間をチャートに薄く塗る(目で確認するため)
bgcolor(strategy.position_size > 0 ? color.new(color.gray, 88) : na)

1行ずつ読む

条件を isEntryisExit という名前にまとめたのは、if文の行を短く読みやすくするためです。第7回のMQL5でif文の中に直接条件を書いたのと、やっていることは同じです。

MQL5版との違い

同じルールなのに、コードの見た目はかなり違います。主な違いを整理します。

MQL5 ① 新しい足を検出(自分で書く) ② 日付を取り出す ③ ポジションの有無を確認 ④ 買い / 決済 Pine ① 日付(dayofmonth) ② 条件(isEntry / isExit) ③ 買い / 決済 繰り返し・データ指定は自動
同じルールでも、Pineは繰り返しとデータ指定が自動なぶん段数が減る
Pine TradingView上で検証 MQL5 MT5上で検証・売買 同じルールでも、環境差で結果が少しズレる
Pine版はチャート上で確認しやすく、MQL5版は実行環境に近い確認ができます。

チャートで動かして確認する

  1. TradingViewでS&P500系の銘柄(例:SPX)を開き、時間足を日足にします。
  2. Pineエディタで新規作成し、上のコードを貼り付けて「チャートに追加」します(既存スクリプトを上書きしないよう注意)。
  3. チャート上に売買の矢印が表示され、保有期間が薄く塗られます。月末に買い、翌月初に手放しているか、目で確認します。
  4. 下部のストラテジーテスタータブで、総損益・勝率・最大ドローダウン・トレード数を記録します。
  5. 設定の「プロパティ」で手数料を現実的な値にします。0のままだと甘い結果になります。

Pineの強みは、この「チャートに重ねて目で確認できる」点です。数字だけでなく、実際にどの位置で売買しているかが見えるので、ルールの勘違いに気づきやすい。第7回のMQL5テスターの数字と、ここでの数字が違っていたら、その差の理由を考える材料になります(第10回)。

約定タイミングの確認

Pineは既定で「次の足の始値」で約定する

第4回で触れたとおり、strategy.entry() がある足で true になっても、実際の約定は既定で次の足の始値です。これは第7回のMQL5版(前の足で判定→次の足の頭で約定)とほぼ同じ考え方で、この2つは約定タイミングの点で近くなります。 一方、第9回のPythonでは「その足の引けで約定」として計算します。だから、MQL5とPineは近く、Pythonが少しずれる、という関係になりがちです。実際の数字でそうなるかは、第10回で確かめます。

チェックリスト

次の記事に進む前に、以下が自分の言葉で説明できるか確認してください。

ミニテスト

最後に3問だけ確認です。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。

Q1. Pine版がMQL5版より短くなる主な理由は?

ルールは同じで、省略はしていません。Pineは繰り返しとデータ供給が自動なので、その下ごしらえのコードが不要になります。

Q2. Pineで「今ノーポジかどうか」を判定するのに使うのは?

strategy.position_size が0ならノーポジ、正なら買い持ちです。PositionSelect() はMQL5の書き方です。

Q3. 約定タイミングについて、本文の説明として正しいのは?

Pineは既定で次の足の始値で約定するため、MQL5版(前の足で判定→次の足の頭)と近くなります。Pythonは引けで約定として計算するので、少しずれます。