The main problem you have is:
y[y ] = Math.GetRandomNumber(gw_height - 2 * radius) Should be:
y[k ] = Math.GetRandomNumber(gw_height - 2 * radius) The only other comment is that shapes are drawn from the top left corner so to centre shapes on a coordinate we often do the following:
Shapes.Move(particle[k], x[k]-radius, y[k]-radius) I added some paths behind 100 particles. This shows that the random walk is preferentially diagonal since x_step and y_step are relative to the window size.
GraphicsWindow.PenColor = "#33ffffff" 'partially transparent white
GraphicsWindow.PenWidth = 1
While (FlagRun = 1)
...
xlast = x[k]
ylast = y[k]
x[k] = x[k] + dx * signal
y[k] = y[k] + dy * signal
GraphicsWindow.DrawLine(xlast,ylast,x[k],y[k])
Shapes.Move(particle[k], x[k], y[k])