Yes, a node can certain perform an atomic exchange between two of its own addresses. You just go through the standard process, specifying the address to use each time you run preparelockspentfrom.
There is currently no way to enforce a particular exchange rate at the blockchain validation level.