MATL, 85 83 bytes
And I thought that having a spiral builtin would make for short code...
Oli2+XH:UQXItH:+XJh(YsXKoQ3I(4J(5l(H:)0HX^XkU(6H(3M1YL3X!P)'|-\/@' '<v>^'KHq))h0hw)
Try it online!
Explanation
Let N denote the input. We will create a vector of length ceil(sqrt(N+2))^2, that is, the smallest perfect square that equals or exceeds N+2. This vector will be filled with numeric values, rolled into a spiral (that's why its length needs to be a perfect square), and then the numeric values will be replaced by characters.
Let n denote each step starting from 1 at the center of the spiral. The steps where the snake turns are given by n2+1 (that is: 2, 5, 10, ...) for \ symbols and n2+n+1 (that is: 3, 7, 13, ...) for /. The steps between a \ and a / should be -, and those between a / and a \ should be |.
The vector is created such that it contains 1 at the turn points (2,3,5,7,10,13...) and 0 at the rest. The parity of the cumulative sum tells if each entry should be a - or a |. Adding 1 to this result we get a vector containing 1 (for |) or 2 (for -). But this makes the turn points themselves become 1 or 2 too. So the turn points, whose positions we know, are overwritten: positions n2+1 are filled with 3 and positions n2+n+1 are filled with 4. The tail and head are also special cases: the first element of the vector (tail) is set to 5, and the element with index N+2 (head) is set to 6. Finally, elements with indices exceeding N+2 are set to 0.
Taking input N=19 as an example, we now have a vector with length 25:
5 3 4 1 3 2 4 1 1 3 2 2 4 1 1 1 3 2 2 2 6 0 0 0 0
We need to roll this vector into a spiral. For this we use a builtin function that generates a spiral matrix, followed by a reflection and a transposition to produce:
13 12 11 10 25
14  3  2  9 24
15  4  1  8 23
16  5  6  7 22
17 18 19 20 21 
Indexing the vector with the matrix gives
4 2 2 3 0
1 4 3 1 0
1 1 5 1 0
1 3 2 4 0
3 2 2 2 6
where 0 corresponds to space, 1 corresponds to |, 2to -, 3 to \, 4 to /, 5 to @, and 6 to the head.
To know which of the four characters ^, <, v, or > the head should have, we use the cumulative sum of turn points that we previously computed. Specifically, the second-last value of this cumulative sum (i.e. the N+1-th value) modulo 4 tells us which character should be used for the head. We take the second-last value of the cumulative sum, not the last, because of the requirement "if the head ends on a corner the head <, >, ^, v takes priority in the direction the snake is curled". For the N=19 example the head  is >.
Now we can build a string containing all the snake characters, including the appropriate character for the head at the sixth position: '|-\/@> '. We then index this string with the above matrix  (indexing is 1-based and modular, so space goes last), which gives
/--\ 
|/\| 
||@| 
|\-/ 
\--->
2It's not very clear that I'm not just allowed to draw a straight snake like
@---->. You probably intend more strict conditions about the snake shape. Also make clear how much whitespace is or isn't allowed – Ton Hospel – 2016-10-04T11:57:58.2731"The snake must start in the middle with it's tail but it may go outwards in any direction you choose and either clockwise or counter-clockwise" – jacksonecac – 2016-10-04T11:59:33.720
1So I say
@is the middle (possible add some spaces to make it so), declare "to the right" to be the direction and make just the head point down and declare that clockwise. Your terms may seem clear to you, but they are actually ambiguous. I realize you probably mean an as tightly as possible coiled snake, but you should make that clear – Ton Hospel – 2016-10-04T12:10:02.523@TonHospel Else what kind of challenge is this? – Erik the Outgolfer – 2016-10-04T13:08:58.643
http://codegolf.stackexchange.com/q/55819/21348 related – edc65 – 2016-10-04T13:54:22.073
I haven't seen this :( – jacksonecac – 2016-10-04T13:55:38.083
1Don't worry. That one is a lot harder due to the offsets in that challenge. – Martin Ender – 2016-10-04T14:07:32.280
Your challenge could use a few more test cases though. Especially the minimum input would be good to know. – Martin Ender – 2016-10-04T14:07:55.643
can you please give an output for n == 1 – Kishan Kumar – 2016-10-04T14:14:33.803
I added a N = 1 example and clarified that the head takes priority over a corner – jacksonecac – 2016-10-04T14:39:51.110
Related (but simpler) – DLosc – 2016-10-04T16:51:39.373
Can we optionally take length including head and tail? The examples would be inputs
21and3respectively – Luis Mendo – 2016-10-04T17:36:46.947No, sorry :). There are already solutions posted. – jacksonecac – 2016-10-04T17:39:14.340
2Nice first challenge! Welcome to the site! – Luis Mendo – 2016-10-04T18:14:40.210
"Unless the head ends on a corner in which case the head <, >, ^, v takes priority in the direction the snake is curled" Should not the head be curved upwards in the example? It's in a corner. – Emilio M Bumachar – 2016-10-04T18:37:07.867
@EmilioMBumachar are you referring to the N=1 example? The direction being clockwise vs counter-clockwise not N, S, E and W. – jacksonecac – 2016-10-04T18:41:24.883
@LuisMendo thank you! I lurked for a long time :) – jacksonecac – 2016-10-04T18:45:02.953
1why the hurry? you can wait how long you want to accept an answer (in fact you don't even need to accept one). If you accept an answer, it MAY discourage new answers – Rod – 2016-10-04T19:04:32.540
@Rod Ok I'll keep it open awhile. I wasn't sure the protocol for these :) – jacksonecac – 2016-10-04T19:09:36.867