Pineスクリプトで逆指値トラップリピート自動売買プログラムを作りたい。ソースコードを教えて。
# 逆指値トラップリピート自動売買プログラム (Pine Script)
以下は、TradingViewのPine Scriptで作成した逆指値トラップリピート自動売買プログラムの例です。このスクリプトは、価格が指定したレベルを突破した後に逆方向に動いた時にエントリーし、利益確定または逆指値で決済後に再度同じ条件でエントリーを試みます。
```pinescript
//@version=5
strategy("逆指値トラップリピート自動売買", overlay=true, margin_long=100, margin_short=100)
// 入力パラメータ
length = input.int(20, title="ATRの期間")
multiplier = input.float(1.5, title="ATR乗数", step=0.1)
stopLossMultiplier = input.float(2.0, title="ストップロス用ATR乗数", step=0.1)
takeProfitMultiplier = input.float(3.0, title="テイクプロフィット用ATR乗数", step=0.1)
trailingStopMultiplier = input.float(1.5, title="トレーリングストップ用ATR乗数", step=0.1)
useTrailingStop = input(true, title="トレーリングストップを使用する")
entryAfterBars = input.int(1, title="エントリー後の再エントリー禁止期間", minval=1)
// ATR計算
atr = ta.atr(length)
// ブレイクアウトレベル計算
longTrigger = high + multiplier * atr
shortTrigger = low - multiplier * atr
// ストップロスとテイクプロフィット計算
longStopLoss = low - stopLossMultiplier * atr
longTakeProfit = close + takeProfitMultiplier * atr
shortStopLoss = high + stopLossMultiplier * atr
shortTakeProfit = close - takeProfitMultiplier * atr
// トレーリングストップ計算
trailingStop = trailingStopMultiplier * atr
// 状態管理変数
var bool longTriggered = false
var bool shortTriggered = false
var int lastEntryBar = 0
// ブレイクアウト検出
if not longTriggered and not shortTriggered and not (strategy.position_size != 0)
if high >= longTrigger[1]
longTriggered := true
else if low <= shortTrigger[1]
shortTriggered := true
// ロングエントリー条件
longCondition = longTriggered and close < open and bar_index > lastEntryBar + entryAfterBars
// ショートエントリー条件
shortCondition = shortTriggered and close > open and bar_index > lastEntryBar + entryAfterBars
// エントリー実行
if longCondition
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", stop=longStopLoss, limit=longTakeProfit, trail_points=useTrailingStop ? trailingStop : na)
longTriggered := false
lastEntryBar := bar_index
if shortCondition
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", stop=shortStopLoss, limit=shortTakeProfit, trail_points=useTrailingStop ? trailingStop : na)
shortTriggered := false
lastEntryBar := bar_index
// ポジションがクローズしたらリセット
if strategy.position_size == 0
longTriggered := false
shortTriggered := false
// チャート表示
plot(longTrigger, color=color.green, style=plot.style_circles, title="Long Trigger")
plot(shortTrigger, color=color.red, style=plot.style_circles, title="Short Trigger")
plot(strategy.position_size > 0 ? longStopLoss : na, color=color.red, style=plot.style_linebr, title="Long Stop Loss")
plot(strategy.position_size > 0 ? longTakeProfit : na, color=color.green, style=plot.style_linebr, title="Long Take Profit")
plot(strategy.position_size < 0 ? shortStopLoss : na, color=color.red, style=plot.style_linebr, title="Short Stop Loss")
plot(strategy.position_size < 0 ? shortTakeProfit : na, color=color.green, style=plot.style_linebr, title="Short Take Profit")
```
## プログラムの説明
1. **入力パラメータ**:
- ATRの期間と乗数を調整可能
- ストップロス、テイクプロフィット、トレーリングストップの設定
- 再エントリー禁止期間の設定
2. **動作原理**:
- 高値/安値がATRベースのトリガーレベルを突破するとフラグが立つ
- その後価格が逆方向に動いた場合にエントリー
- ストップロスまたはテイクプロフィットで決済
- 決済後、再度同じ条件でエントリーを試みる
3. **リスク管理**:
- ATRベースの動的ストップロス
- トレーリングストップオプション
- 再エントリー禁止期間で過剰な取引を防止
このスクリプトはTradingViewのストラテジーテスターでバックテスト可能です。パラメータはご自身の取引スタイルに合わせて調整してください。