Re: Fun with ThinkScript June 29, 2015 09:45AM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript June 29, 2015 09:49AM |
Registered: 10 years ago Posts: 615 |
Quote
I understand it shifts at midnight. The problem here, if I understand correctly, is from 0000 to 0930 the daily close is (will be) that of 1600. During this period there’s no data if our main aggregation period is less than a day. Is it possible to replace the daily close during 0000 ~ 0930 with 1600[1] (previous day close)?
Re: Fun with ThinkScript June 29, 2015 10:50AM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript June 29, 2015 04:45PM |
Registered: 10 years ago Posts: 615 |
Quote
Palmer
I posted this some time ago and now getting back to it. Basically, it is a scan to be done during pre-market hours that compares the current price close during pre-market to the close at 1459 (USA cst) the previous day. It looks for a 3% change to the upside during pre-market; a gap up. I'm missing symbols according to some on-line pre-market gainers and it is also including symbols that are significantly lower during pre-market compared to the previous day's close.
input price = close; input percent_change = 3.00; def closing_price = close(period = "day" )[1]; def afterhours_percent_change = 100 * (price / closing_price - 1); def meet_scan_criteria = afterhours_percent_change >= percent_change; plot scan = meet_scan_criteria;
Re: Fun with ThinkScript June 29, 2015 05:16PM |
Registered: 10 years ago Posts: 615 |
Quote
KevinR
Robert,
How would I reference only the most recent datapoint?
# ----- define a valley as any point which is lower than the three preceding lows and the three following lows def Valley = low < Lowest(low[1], 3) and low < Lowest(low[-3], 3); # ----- mark each valley with an up arrow ----- plot ArrowUP = Valley; ArrowUP.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP); ArrowUP.SetDefaultColor(Color.WHITE); ArrowUP.SetLineWeight(4); # ----- draw a straight line connecting each valley ----- plot line = if ArrowUP then low else Double.NaN; line.EnableApproximation(); line.SetDefaultColor(Color.LIME); line.SetLineWeight(2); # ----- remember the most recent valley's low price ----- def ValleyLow = if Valley then low else ValleyLow[1]; # ----- plot then ValleyLow as a quick visual means of verifying that the low value is being remembered plot VisualCheck = ValleyLow; VisualCheck.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); VisualCheck.SetDefaultColor(Color.DARK_ORANGE);
Re: Fun with ThinkScript June 29, 2015 06:37PM |
Registered: 9 years ago Posts: 53 |
Re: Fun with ThinkScript June 29, 2015 09:29PM |
Registered: 8 years ago Posts: 7 |
def ValleyLow = if Valley then LowOfValley else MostRecentCandleOnChart;
Re: Fun with ThinkScript June 30, 2015 03:25PM |
Registered: 8 years ago Posts: 26 |
def FullK_Daily = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_Daily, RSI_Daily, RSI_Daily, slowing_period, averageType).FullK;
def FullK_4H = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_4H, RSI_4H, RSI_4H, slowing_period, averageType).FullK; def FullK_Daily = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_Daily, RSI_Daily, RSI_Daily, slowing_period, averageType).FullK;
def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period);
declare lower; # 4H StochRSI 40 Xover and Daily StochRSI trend input RSI_length = 14; input over_bought = 80; input over_sold = 20; input cross_over = 40; input RSI_average_type = AverageType.WILDERS; def RSI_price_4H = close (period = AggregationPeriod.FOUR_HOURS); input KPeriod = 14; input DPeriod = 3; input slowing_period = 1; input averageType = AverageType.SIMPLE; def RSI_4H = RSI(price = RSI_price_4H, length = RSI_length, averageType = RSI_average_type); def FullK_4H = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_4H, RSI_4H, RSI_4H, slowing_period, averageType).FullK; def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def C1 = if FullK_4H > 40 then 3 else -3; def C4 = if (FullK_Daily >= FullK_Daily[1] and FullK_Daily[1] > FullK_Daily[2]) then 1 else if (FullK_Daily <= FullK_Daily[1] and FullK_Daily[1] < FullK_Daily[2]) then -1 else 0; # 4H and Daily MACD trend input fastLength = 12; input slowLength = 26; input MACDLength = 9; input averageType2 = AverageType.EXPONENTIAL; def Value_4H = MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), slowLength); def Avg_4H = MovingAverage(averageType2, Value_4H, MACDLength); def Diff_4H = Value_4H - Avg_4H; def Value_Daily = MovingAverage(averageType2, close(period = AggregationPeriod.DAY), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.DAY), slowLength); def Avg_Daily = MovingAverage(averageType2, Value_Daily, MACDLength); def Diff_Daily = Value_Daily - Avg_Daily; def C2 = if (Value_4H >= Value_4H[1] and Value_4H[1] > Value_4H[2]) then 1 else if (Value_4H <= Value_4H[1] and Value_4H[1] < Value_4H[2]) then -1 else 0; def C5 = if (Value_Daily >= Value_Daily[1] and Value_Daily[1] > Value_Daily[2]) then 2 else if (Value_Daily <= Value_Daily[1] and Value_Daily[1] < Value_Daily[2]) then -2 else 0; def C6 = if (Diff_Daily >= Diff_Daily[1] and Diff_Daily[1] > Diff_Daily[2]) then 2 else if (Diff_Daily <= Diff_Daily[1] and Diff_Daily[1] < Diff_Daily[2]) then -2 else 0; # Plot Sum of weighted scores def C = C1 + C2 + C4 + C5 + C6; plot Ctotal = C; # Draw vertical line to indicate call and put signals and when to get out def triggerup = if FullK_4H > 40 and FullK_4H[1] <= 40 and C >= 3 then 1 else 0; def unload = if triggerup then 0 else if unload == 0 and C > -2 then unload[1] else 1; def unloadc = if unload and unload[1] == 0 then 1 else 0; def triggerdown = if FullK_4H <= 40 and FullK_4H[1] > 40 and C <= -3 then 1 else 0; def cover = if triggerdown then 0 else if cover == 0 and C < 2 then cover[1] else 1; def coverc = if cover and cover[1] == 0 then 1 else 0; AddVerticalLine(triggerup, "Up", Color.UPTICK); AddVerticalLine(unloadc, "unload", Color.LIGHT_GREEN); AddVerticalLine(triggerdown, "Down", Color.DOWNTICK); AddVerticalLine(coverc, "cover", Color.LIGHT_RED);
# 4H StochRSI 40 Xover and Daily StochRSI trend input RSI_length = 14; input over_bought = 80; input over_sold = 20; input cross_over = 40; input RSI_average_type = AverageType.WILDERS; def RSI_price_4H = close (period = AggregationPeriod.FOUR_HOURS); input KPeriod = 14; input DPeriod = 3; input slowing_period = 1; input averageType = AverageType.SIMPLE; def RSI_4H = RSI(price = RSI_price_4H, length = RSI_length, averageType = RSI_average_type); def FullK_4H = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_4H, RSI_4H, RSI_4H, slowing_period, averageType).FullK; def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def C1 = if FullK_4H > 40 then 3 else -3; def C4 = if (FullK_Daily >= FullK_Daily[1] and FullK_Daily[1] > FullK_Daily[2]) then 1 else if (FullK_Daily <= FullK_Daily[1] and FullK_Daily[1] < FullK_Daily[2]) then -1 else 0; # 4H and Daily MACD trend input fastLength = 12; input slowLength = 26; input MACDLength = 9; input averageType2 = AverageType.EXPONENTIAL; def Value_4H = MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), slowLength); def Avg_4H = MovingAverage(averageType2, Value_4H, MACDLength); def Diff_4H = Value_4H - Avg_4H; def Value_Daily = MovingAverage(averageType2, close(period = AggregationPeriod.DAY), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.DAY), slowLength); def Avg_Daily = MovingAverage(averageType2, Value_Daily, MACDLength); def Diff_Daily = Value_Daily - Avg_Daily; def C2 = if (Value_4H >= Value_4H[1] and Value_4H[1] > Value_4H[2]) then 1 else if (Value_4H <= Value_4H[1] and Value_4H[1] < Value_4H[2]) then -1 else 0; def C5 = if (Value_Daily >= Value_Daily[1] and Value_Daily[1] > Value_Daily[2]) then 2 else if (Value_Daily <= Value_Daily[1] and Value_Daily[1] < Value_Daily[2]) then -2 else 0; def C6 = if (Diff_Daily >= Diff_Daily[1] and Diff_Daily[1] > Diff_Daily[2]) then 2 else if (Diff_Daily <= Diff_Daily[1] and Diff_Daily[1] < Diff_Daily[2]) then -2 else 0; # Plot Sum of weighted scores def C = C1 + C2 + C4 + C5 + C6; # Draw vertical line to indicate call and put signals and when to get out def triggerup = if FullK_4H > 40 and FullK_4H[1] <= 40 and C >= 3 then 1 else 0; def unload = if triggerup then 0 else if unload == 0 and C > -2 then unload[1] else 1; def unloadc = if unload and unload[1] == 0 then 1 else 0; def triggerdown = if FullK_4H <= 40 and FullK_4H[1] > 40 and C <= -3 then 1 else 0; def cover = if triggerdown then 0 else if cover == 0 and C < 2 then cover[1] else 1; def coverc = if cover and cover[1] == 0 then 1 else 0; AddOrder(OrderType.Buy_TO_OPEN, triggerup, close, arrowcolor = Color.GREEN); AddOrder(OrderType.Sell_To_cloSE, unloadC, close, arrowcolor = Color.BLUE); AddOrder(OrderType.Sell_To_OpEN, triggerdown, close, arrowcolor = Color.RED); AddOrder(OrderType.Buy_TO_CLOSE, coverC, close, arrowcolor = Color.PINK);
Re: Fun with ThinkScript June 30, 2015 08:21PM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 01, 2015 02:24AM |
Registered: 8 years ago Posts: 26 |
declare lower; # 4H StochRSI 40 Xover and Daily StochRSI trend input RSI_length = 14; input over_bought = 80; input over_sold = 20; input cross_over = 40; input RSI_average_type = AverageType.WILDERS; def RSI_price_4H = close (period = AggregationPeriod.FOUR_HOURS); input KPeriod = 14; input DPeriod = 3; input slowing_period = 1; input averageType = AverageType.SIMPLE; def RSI_4H = RSI(price = RSI_price_4H, length = RSI_length, averageType = RSI_average_type); def FullK_4H = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_4H, RSI_4H, RSI_4H, slowing_period, averageType).FullK; def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def C1 = if FullK_4H > 40 then 3 else -3; def C4 = if (FullK_Daily >= FullK_Daily[1] and FullK_Daily[1] > FullK_Daily[2]) then 1 else if (FullK_Daily <= FullK_Daily[1] and FullK_Daily[1] < FullK_Daily[2]) then -1 else 0; # 4H and Daily MACD trend input fastLength = 12; input slowLength = 26; input MACDLength = 9; input averageType2 = AverageType.EXPONENTIAL; def Value_4H = MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), slowLength); def Avg_4H = MovingAverage(averageType2, Value_4H, MACDLength); def Diff_4H = Value_4H - Avg_4H; def Value_Daily = MovingAverage(averageType2, close(period = AggregationPeriod.DAY), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.DAY), slowLength); def Avg_Daily = MovingAverage(averageType2, Value_Daily, MACDLength); def Diff_Daily = Value_Daily - Avg_Daily; def C2 = if (Value_4H >= Value_4H[1] and Value_4H[1] > Value_4H[2]) then 1 else if (Value_4H <= Value_4H[1] and Value_4H[1] < Value_4H[2]) then -1 else 0; def C5 = if (Value_Daily >= Value_Daily[1] and Value_Daily[1] > Value_Daily[2]) then 2 else if (Value_Daily <= Value_Daily[1] and Value_Daily[1] < Value_Daily[2]) then -2 else 0; def C6 = if (Diff_Daily >= Diff_Daily[1] and Diff_Daily[1] > Diff_Daily[2]) then 2 else if (Diff_Daily <= Diff_Daily[1] and Diff_Daily[1] < Diff_Daily[2]) then -2 else 0; # Plot Sum of weighted scores def C = C1 + C2 + C4 + C5 + C6; plot Ctotal = C; # Draw vertical line to indicate call and put signals and when to get out def triggerup = if FullK_4H > 40 and FullK_4H[1] <= 40 and C >= 3 then 1 else 0; def unload = if triggerup then 0 else if C > -2 then unload[1] else 1; def unloadc = if unload and unload[1] == 0 then 1 else 0; def triggerdown = if FullK_4H <= 40 and FullK_4H[1] > 40 and C <= -3 then 1 else 0; def cover = if triggerdown then 0 else if C < 2 then cover[1] else 1; def coverc = if cover and cover[1] == 0 then 1 else 0; AddVerticalLine(triggerup, "Up", Color.UPTICK); AddVerticalLine(unloadc, "unload", Color.LIGHT_GREEN); AddVerticalLine(triggerdown, "Down", Color.DOWNTICK); AddVerticalLine(coverc, "cover", Color.LIGHT_RED);
# 4H StochRSI 40 Xover and Daily StochRSI trend input RSI_length = 14; input over_bought = 80; input over_sold = 20; input cross_over = 40; input RSI_average_type = AverageType.WILDERS; def RSI_price_4H = close (period = AggregationPeriod.FOUR_HOURS); input KPeriod = 14; input DPeriod = 3; input slowing_period = 1; input averageType = AverageType.SIMPLE; def RSI_4H = RSI(price = RSI_price_4H, length = RSI_length, averageType = RSI_average_type); def FullK_4H = StochasticFull(over_bought, over_sold, KPeriod, DPeriod, RSI_4H, RSI_4H, RSI_4H, slowing_period, averageType).FullK; def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def C1 = if FullK_4H > 40 then 3 else -3; def C4 = if (FullK_Daily >= FullK_Daily[1] and FullK_Daily[1] > FullK_Daily[2]) then 1 else if (FullK_Daily <= FullK_Daily[1] and FullK_Daily[1] < FullK_Daily[2]) then -1 else 0; # 4H and Daily MACD trend input fastLength = 12; input slowLength = 26; input MACDLength = 9; input averageType2 = AverageType.EXPONENTIAL; def Value_4H = MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.FOUR_HOURS), slowLength); def Avg_4H = MovingAverage(averageType2, Value_4H, MACDLength); def Diff_4H = Value_4H - Avg_4H; def Value_Daily = MovingAverage(averageType2, close(period = AggregationPeriod.DAY), fastLength) - MovingAverage(averageType2, close(period = AggregationPeriod.DAY), slowLength); def Avg_Daily = MovingAverage(averageType2, Value_Daily, MACDLength); def Diff_Daily = Value_Daily - Avg_Daily; def C2 = if (Value_4H >= Value_4H[1] and Value_4H[1] > Value_4H[2]) then 1 else if (Value_4H <= Value_4H[1] and Value_4H[1] < Value_4H[2]) then -1 else 0; def C5 = if (Value_Daily >= Value_Daily[1] and Value_Daily[1] > Value_Daily[2]) then 2 else if (Value_Daily <= Value_Daily[1] and Value_Daily[1] < Value_Daily[2]) then -2 else 0; def C6 = if (Diff_Daily >= Diff_Daily[1] and Diff_Daily[1] > Diff_Daily[2]) then 2 else if (Diff_Daily <= Diff_Daily[1] and Diff_Daily[1] < Diff_Daily[2]) then -2 else 0; # Plot Sum of weighted scores def C = C1 + C2 + C4 + C5 + C6; # Draw vertical line to indicate call and put signals and when to get out def triggerup = if FullK_4H > 40 and FullK_4H[1] <= 40 and C >= 3 then 1 else 0; def unloadc = if C <=-2 then 1 else 0; def triggerdown = if FullK_4H <= 40 and FullK_4H[1] > 40 and C <= -3 then 1 else 0; def coverc = if C>=2 then 1 else 0; AddOrder(OrderType.Buy_TO_OPEN, triggerup, close, arrowcolor = Color.GREEN); AddOrder(OrderType.Sell_To_cloSE, unloadC, close, arrowcolor = Color.BLUE); AddOrder(OrderType.Sell_To_OpEN, triggerdown, close, arrowcolor = Color.RED); AddOrder(OrderType.Buy_TO_CLOSE, coverC, close, arrowcolor = Color.PINK);
Re: Fun with ThinkScript July 01, 2015 04:32AM |
Registered: 10 years ago Posts: 615 |
Quote
KevinR
Also, I made a set of "gapless" indicators, but is there a display it as a line from open-close, then a new line from the next days open-close. I do not want it to plot between the close and next days open. Currently I just have the plot set to "DOTS", since it does not connect them.
plot DailyHigh = high(period = "day" ); plot DailyLow = low(period = "day" );
plot DailyHigh = high(period = "day" ); DailyHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); plot DailyLow = low(period = "day" ); DailyLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
Re: Fun with ThinkScript July 01, 2015 05:02AM |
Registered: 10 years ago Posts: 615 |
Quote
howo3579
I have a general question tho. FullK_Daily is calculated with aggregation period of a day. Does FullK_Daily[1] on hourly chart mean it return FullK_Daily of previous hour candle or the value of previous day? I think it's going back the previous hour. How can I let it go back to previous day since it defeats the purpose of comparing daily values if it's just comparing intraday noise?
def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def Compare = FullK_Daily > FullK_Daily[1];
def FullK_Daily = wildersaverage((close(period = AggregationPeriod.day) - Lowest(low(period = AggregationPeriod.day), KPeriod)) / (Highest(high(period = AggregationPeriod.day), KPeriod) - Lowest(low(period = AggregationPeriod.day), KPeriod)) * 100, slowing_period); def Yesterddays_FullK_Daily = wildersaverage((close(period = AggregationPeriod.day)[1] - Lowest(low(period = AggregationPeriod.day)[1], KPeriod)) / (Highest(high(period = AggregationPeriod.day)[1], KPeriod) - Lowest(low(period = AggregationPeriod.day)[1], KPeriod)) * 100, slowing_period); def Compare = FullK_Daily > Yesterdays_FullK_Daily;
Re: Fun with ThinkScript July 01, 2015 05:27AM |
Registered: 10 years ago Posts: 615 |
Quote
Palmer
Does TOS count every minute on the clock from 7:30am to the previous close at 1459 as one bar, count bars where there is only data for, or count bars according to what the actual market trading hours are?
Re: Fun with ThinkScript July 01, 2015 08:08AM |
Registered: 8 years ago Posts: 7 |
Re: Fun with ThinkScript July 01, 2015 02:18PM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 01, 2015 08:18PM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 02, 2015 12:00AM |
Registered: 8 years ago Posts: 59 |
Re: Fun with ThinkScript July 02, 2015 03:20AM |
Registered: 10 years ago Posts: 615 |
Quote
Ralph53
Robert, this script works great and I was wondering if there's a way to set an end point to the line (say 15 candles)? Thanks again.
# 5 Cents Below Open # def OpenNeg5 = (open("period" = AggregationPeriod.DAY) - .05); def lastbar = HighestAll(if IsNaN(close) then 0 else BarNumber()); plot condition = if BarNumber() <= lastbar - 10 and BarNumber() >= lastbar - 25 then GetValue(OpenNeg5, BarNumber() - lastbar) else Double.NaN; AddChartBubble(BarNumber() == lastbar - 10, condition, "-5", Color.CYAN, 0);
Re: Fun with ThinkScript July 02, 2015 09:43AM |
Registered: 8 years ago Posts: 26 |
def unload = if triggerup then 0 else if C > -2 then unload[1] else 1; def unloadc = if unload and unload[1] == 0 then 1 else 0;
def unloadc = if C <=-2 then 1 else 0;
Re: Fun with ThinkScript July 02, 2015 03:09PM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript July 02, 2015 03:33PM |
Registered: 10 years ago Posts: 615 |
Quote
howo3579
Robert,
I've set the study alert when FullK_Day crosses 40. Once the alert is fired I have to go set it up again. Is there way to keep the alert condition without having to go in and set up every time? Kind of hard to do when I'm not with the platform during the day.
Re: Fun with ThinkScript July 02, 2015 06:30PM |
Registered: 10 years ago Posts: 35 |
Re: Fun with ThinkScript July 02, 2015 08:05PM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript July 02, 2015 08:36PM |
Registered: 10 years ago Posts: 615 |
Alert(FullK_Daily > 40, GetSymbol() + " FullK above 40", Alert.Bar, Sound.Bell);
Re: Fun with ThinkScript July 02, 2015 09:10PM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 02, 2015 10:24PM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript July 03, 2015 05:41AM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 03, 2015 08:55AM |
Registered: 8 years ago Posts: 26 |
Re: Fun with ThinkScript July 03, 2015 12:39PM |
Registered: 8 years ago Posts: 61 |
Re: Fun with ThinkScript July 03, 2015 01:00PM |
Registered: 8 years ago Posts: 61 |