Patrick [TFO]This Patrick indicator was made for the 1 year anniversary of my Spongebob indicator, which was an experiment in using the polyline features of Pine Script to draw complex subjects. This indicator was made with the same methodology, with some helper functions to make things a bit easier on myself. It's sole purpose is to display a picture of Patrick Star on your chart, particularly the "I have $3" meme.
The initial Spongebob indicator included more than 1300 lines of code, as there were several more shapes to account for compared to Patrick, however it was done rather inefficiently. I essentially used an anchor point for each "layer" or shape (eye, nose, mouth, etc.), and drew from that point. This resulted in a ton of trial and error as I had to be very careful about the anchor points for each and every layer, and then draw around that point. In this indicator, however, I gave myself a frame to work with by specifying fixed bounds that you'll see in the code: LEFT, RIGHT, TOP, and BOTTOM.
var y_size = 4
atr = ta.atr(50)
LEFT = bar_index + 10
RIGHT = LEFT + 200
TOP = open + atr * y_size
BOTTOM = open - atr * y_size
You may notice that the top and bottom scale with the atr, or Average True Range to account for varying price fluctuations on different assets.
With these limits established, I could write some simple functions to translate my coordinates, using a range of 0-100 to describe how far the X coordinates should be from left to right, where left is 0 and right is 100; and likewise how far the Y coordinates should be from bottom to top, where bottom is 0 and top is 100.
X(float P) =>
result = LEFT + math.floor((RIGHT - LEFT)*P/100)
Y(float P) =>
result = BOTTOM + (TOP - BOTTOM)*P/100
With these functions, I could then start drawing points much simpler, with respect to the overall frame of the picture. If I wanted a point in the dead center of the frame, I would choose X(50), Y(50) for example.
At this point, the process just became tediously drawing each layer of my reference picture, including but not limited to Patrick's body, arm, mouth, eyes, eyebrows, etc. I've attached the reference picture here (left), without the text enabled.
As tedious as this was to create, it was done much more efficiently than Spongebob, and the ideas used here will make it much easier to draw more complex subjects in the future.
Spongebob
Spongebob [TFO]This Spongebob indicator is an experiment with the newly released polyline drawing features in Pine Script. As someone that enjoys a challenge, I thought of a complex subject to draw with polylines, and Spongebob was one of the first things that came to mind due to his wavy body shape. Although, other features like the shoulders, shoes, and hands proved to be much more difficult than the body shape itself.
With this indicator enabled, Spongebob will be automatically be drawn on the last confirmed bar of the current chart, and should mostly auto-fit to any symbol's price axis through use of the Average True Range (ATR) function. ATR allows us to get the average range of the most recent bars (in this case I used 50 bars). I used this as a base value from which to scale and determine various heights of each body shape, like the radius of the eyes, the length of the pants, etc. - that way, it would scale to any price axis, from forex to index futures.
Attached is a picture of the indicator (left) compared to my subject reference (right). I'm honestly surprised at how well it came out, and how intuitive it was to form the majority of my shapes using polylines. I'm really happy with how this project turned out, and may have to attempt more drawings in the future!