The brackets are not needed because the +/- operators have higher priority than <= or >=.

For having only one open trade, check the NumOpenLong / NumOpenShort variable and enter a new trade only when it's at 0. Alternatively, for entering only one trade, use "else if" conditions to make sure that only one trade is entered per bar, and start with the more distant conditions first.

And the buy price is not up to you I'm afraid. No matter how much code you write, it's always the price of the asset at the moment when you buy laugh.