title: Pine Script Multi Time Frame - My strategy is repainting and I can't figure out why
body: <p>I thought I understood how to avoid repainting, but I'm still seeing trades on my chart not lining up with alerts, or vice versa.</p>
  <p>My script takes data from the 60m chart to trade on the 15m chart. I'm accessing historical data on the 60m (at least 4 bars back), and I'm only entering trades on the 15m if <code>barstate.isconfirmed</code>. I see trades trigger alerts and then disappear, or trades that never triggered an alert show up retrospectively.</p>
  <p>As far as I can tell, I wrote my script so future data should not affect historical decisions, but something is clearly going on. I'm at a loss</p>
  <pre><code>//@version=4
  strategy(title=&quot;60-15 ETH/USD&quot;, precision=2, default_qty_type=strategy.cash, initial_capital=100.0, currency=&quot;USD&quot;, commission_type=strategy.commission.percent, commission_value=0.1)
  
  // get input  
  i_length        = input(group=&quot;Stochastic&quot;, title=&quot;Stochastic Length&quot;, minval=1, defval=15)                                     
  i_k             = input(group=&quot;Stochastic&quot;, title=&quot;Stochastic %K&quot;, minval=1, defval=2)
  i_d             = input(group=&quot;Stochastic&quot;, title=&quot;Stochastic %D&quot;, minval=1, defval=10)
  i_trailingStop  = input(group=&quot;Trade Settings&quot;, title=&quot;Trailing Stop?&quot;, type=input.bool, defval=true)                           // should stop loss be dynamic, based on most recent high, or static, based on entry price?
  i_stopPercent   = input(group=&quot;Trade Settings&quot;, title=&quot;Stop Percent&quot;, type=input.float, defval=0.05, maxval=1.0, minval=0.001)  // how much (percentage) can price fall before exiting the trade
  i_takeProfit    = input(group=&quot;Trade Settings&quot;, title=&quot;Take Profit&quot;, type=input.float, defval=0.06, maxval=1.0, minval=0.001)   // how much (percentage) can price rise before exiting the trade
  i_sellThreshold = input(group=&quot;Trade Settings&quot;, title=&quot;Sell Threshold&quot;, type=input.float, defval=75.0, maxval=100, minval=0.0)  // when stochastic %D crosses under this value, exit the trade
  i_buyThreshold  = input(group=&quot;Trade Settings&quot;, title=&quot;Buy Threshold&quot;, type=input.float, defval=40.0, maxval=100, minval=0.0)   // stochastic %D must be below this value to enter a trade
  
  
  // declare order variables
  var recentHigh  = 0.0   // the highest high while in a trade
  var stop        = 0.0   // the price that will trigger as stop loss
  var entryPrice  = 0.0   // the price when the trade was entered
  
  // build stochastic
  sto = stoch(close, high, low, i_length)
  K   = sma(sto, i_k)
  D   = sma(K, i_d)
  
  // get stochastic trend
  stoch_upTrend = D &gt; D[1]
  
  // get stochastic trend for 60 minute
  stoch_60         = security(syminfo.tickerid, &quot;60&quot;, D)
  stoch_60_upTrend = (stoch_60[4] &gt;= stoch_60[8])
  
  // entry
  if (D &lt; i_buyThreshold) and stoch_upTrend and stoch_60_upTrend and barstate.isconfirmed and strategy.position_size == 0
      recentHigh := close
      entryPrice := close
      stop       := (close * (1-i_stopPercent)) 
      strategy.entry(id=&quot;60-15-Long&quot;, long=strategy.long, comment='buy')
  
  // update recent high, trailing stop
  if close &gt; recentHigh  
      recentHigh := close
      stop       := i_trailingStop ? (recentHigh * i_stopPercent) : stop
  
  // exit
  strategy.exit(id=&quot;60-15-Long&quot;, stop=stop, comment='sell-stop')
  if close &gt; (entryPrice * (1+i_takeProfit)) and barstate.isconfirmed
      strategy.close(id=&quot;60-15-Long&quot;, comment='sell-profit')
  if crossunder(D, i_sellThreshold) and barstate.isconfirmed
      strategy.close(id=&quot;60-15-Long&quot;, comment='sell-trend')
      
  // plot
  plot(K, title=&quot;%K&quot;, color=color.blue, linewidth=1)
  plot(D, title=&quot;%D&quot;, color=color.orange, linewidth=1)
  plot(stoch_60, title=&quot;Hourly Stochastic (D)&quot;, color= stoch_60_upTrend ? color.green : color.red, style=plot.style_stepline)
  upperBand  = hline(i_sellThreshold, title=&quot;Upper Limit&quot;, linestyle=hline.style_dashed)
  middleBand = hline(50, title=&quot;Midline&quot;, linestyle=hline.style_dotted)
  lowerBand  = hline(i_buyThreshold, title=&quot;Lower Limit&quot;, linestyle=hline.style_dashed)
  fill(lowerBand, upperBand, color=color.purple, transp=75)
  </code></pre>