I think this can be done quite straight forward with "randomization group" feature.
You create 9 groups, the 8 that should be randomized and the one that should be stationary like this:
Group Rand1
Group Rand2
Group "Stationary"
Group Rand3
Group Rand4
Group Rand5
Group Rand6
Group Rand7
Group Rand8
The groups "Rand1" to "Rand8" all receive the same randomization group name. This will randomize the questions among the 8 positions, while the Group "Stationary" will always be on the 3rd position, because it is not part of the "randomization group". So the first part (randomization of the question groups on the random positions 1, 2, 3 and 4) is done.
Now at first I thought that we could just use "always hide" to hide groups Rand5 to Rand8, but this won't work, the always hide would not stick with the position, but with the Group.
What you now need to do is to create relevance equations that hide groups based on the position within the survey.
You will need to use gseq to find out at which position the group is in the survey (
www.limesurvey.org/manual/Expression_Manager
- search for gseq).
It starts with 0, so you probably have to use something like this as relevance equation for all questions groups from "Rand1" to "Rand8":
[code]self.gseq > 3[/quote]
I haven't tried it and I am not sure if self.gseq works here. Usually there should be the question code before the .gseq.
If self doesn't work you could try to use the first question code within the group to check gseq. But you will need to try this.