У вас должно быть два курса, курс обмена usd -> rub и курс обмена rub -> usd, и они должны отличаться. Правильная реализация - вы должны держать где-то, где можно менять рубли и баксы туда сюда (в идеале биржа, так как там спред минимальный), некоторую кеш-сумму в обоих валютах, и в момент когда ваш клиент заключает сделку, делать обмен, точно такой же суммы на этой бирже. Таким образом суммарное количество баксов и рублей на бирже и на кошельке perfectmoney у вас не должно меняться. Затем, когда перекос на бирже станет опасным, делать перевод с perfectmoney на биржу (или наборот), возвращая соотношение сумм валют к некой базовой.
Чтобы понять сколько какой валюты нужно держать, необходимо решить, в какой валюте вы будете держать депозит - это будет основная валюта, все остальные валюты должны быть на балансе ровно в том объеме, который может понадобиться, чтобы обслужить одновременно подошедших пользователей. Одновременно - это значит с момента когда пользователь подошел и вы ему показали курс и он нажал кнопку 'да я плачу' кто то еще делает то же самое.
Если вы не будете (или не можете) делать так как я сказал (например к вам пришли одновременно клиенты на сумму больше кеш суммы на бирже), то вы можете покрыть свои риски изменения курса (пока у вас на руках баксы а вам нужны рубли например) увеличением разницы курсов покупки и продажи (по которым вы на площадке показываете цену) относительно курсов на бирже, где вы держите кеш суммы. Так делают например банки - на бирже спред доли процента, а банк обменный курс вам дает несколько процентов.
Само собой вышеописанная схема универсальная, когда у вас в оббе стороны нужна конвертация, обычно она нужна только в одну сторону, а значит на бирже можно держать только одну валюту.