ストラテジーの全コード

第4回で学んだ部品(strategy(...)・組み込み変数・if文・strategy.entry/strategy.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行ずつ読む

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

MQL5版との違い

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

同じ戦略の実装対比:MQL5(詳細記述型)vs Pine Script(宣言型) MQL5(4段階) (厳密だがコード量大) ① 新足オープン判定(自前で時刻チェック) ② TimeCurrentから日付(day)を取り出す ③ 現在のポジション保有状況を確認 ④ trade.Buy / trade.PositionClose 呼出 Pine Script(3行) (圧倒的に簡潔) ① 日付組込変数: dayofmonth が自動更新 ② 条件判定式: isEntry = dayofmonth >= 25 ③ 売買実行: strategy.entry("Long", ...) ★ 繰り返し・データ指定・ポジション管理は全自動
同じルールでも、Pineは繰り返しとデータ指定が自動なぶん段数が減る
適材適所の使い分け:Pine ScriptとMQL5の開発ワークフロー Pine(TradingView) 仮説の高速プロトタイプ • チャート上で売買サインを目視確認 • コードが短く、アイデア検証が最速 用途:アイデアの素早いスクリーニング 有望な戦略 を移植 MQL5(MT5) 厳密検証と自動売買(EA) • ティックデータによる精密バックテスト • そのままリアル口座での自動運用が可能 用途:精密検証と本番トレード実行 同じルールでも、環境の約定モデルやヒストリカルデータ差によって結果に微小なズレが生じます
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は引けで約定として計算するので、少しずれます。