firehawkco
New member
Hello, I created a fairly simple ATR stop that begins the stop calculation based on the date/time that I entered a trade. The issue I'm having is that if the date/time bar is no longer in the current chart's timeframe, the ATR stop gets calculated on the first bar of the chart and this new stop may be further away from the ATR stop calculated in historical bars that are not on the chart.
I'd like to use this ATR stop as a conditional order to sell. But, for example, if I'm trading based on an hourly chart the conditional order uses 20 days of historical data and if my trade is 25 days in, a new ATR stop always starts on the first bar of that 20 day chart. This problem would be even worse if I were to use a 1 minute chart since those only go back 1 day.
I've tried various ways to count the number of bars back to that original date/time bar with no luck and can't seem to find anyone with a similar issue in the forum.
I hope I'm making sense and I'm posting my code. Thanks!
I'd like to use this ATR stop as a conditional order to sell. But, for example, if I'm trading based on an hourly chart the conditional order uses 20 days of historical data and if my trade is 25 days in, a new ATR stop always starts on the first bar of that 20 day chart. This problem would be even worse if I were to use a 1 minute chart since those only go back 1 day.
I've tried various ways to count the number of bars back to that original date/time bar with no luck and can't seem to find anyone with a similar issue in the forum.
I hope I'm making sense and I'm posting my code. Thanks!
Ruby:
#Trailing stop for Conditional Exit Orders.
#Use Date/Time and trade position.
#Time formula adjusts from Eastern to Mountain time
input ATRFactor = 1;
input TradePosition = {default long, short};
input FillDate = 20240101;
input FillTime = 0000;
input ATRPeriod = 15;
Assert(ATRFactor > 0, "'atr factor' must be positive: " + ATRFactor);
def plotStart = (GetYYYYMMDD() == FillDate and SecondsFromTime(FillTime + 200) >= 0) or (GetYYYYMMDD() > FillDate);
def trueRange = TrueRange(high, close, low);
def loss = ATRFactor * MovingAverage(data = trueRange, length = ATRPeriod);
def trail;
switch (TradePosition) {
case long:
trail = if plotstart then Max(trail[1], high - loss) else 0;
case short:
trail = if plotstart then min(trail[1], low + loss) else 9999999;
}
plot TrailingStop = if plotstart then trail else double.nan;
#plot testplotstart = plotStart;
TrailingStop.SetPaintingStrategy(PaintingStrategy.POINTS);
TrailingStop.setdefaultcolor(createcolor(197,160,0));
Last edited: