Decimalised the trading engine to be more realistic

This commit is contained in:
Michael Halls-Moore
2015-03-06 09:57:15 +00:00
parent 30dbcc7bfa
commit 6c77cc1deb
6 changed files with 106 additions and 78 deletions
+17 -12
View File
@@ -1,3 +1,4 @@
from decimal import Decimal, getcontext
import unittest
from position import Position
@@ -5,12 +6,13 @@ from position import Position
class TestLongGBPUSDPosition(unittest.TestCase):
def setUp(self):
getcontext.prec = 2
side = "LONG"
market = "GBP/USD"
units = 2000
exposure = 2000.0
avg_price = 1.51819
cur_price = 1.51770
exposure = Decimal("2000.00")
avg_price = Decimal("1.51819")
cur_price = Decimal("1.51770")
self.position = Position(
side, market, units, exposure,
avg_price, cur_price
@@ -18,25 +20,28 @@ class TestLongGBPUSDPosition(unittest.TestCase):
def test_calculate_pips(self):
pos_pips = self.position.calculate_pips()
self.assertAlmostEqual(pos_pips, -0.00049)
self.assertEqual(pos_pips, Decimal("-0.00049"))
def test_calculate_profit_base(self):
profit_base = self.position.calculate_profit_base()
self.assertAlmostEqual(profit_base, -0.6457139)
#self.assertEqual(profit_base, Decimal("-0.6457139"))
self.assertEqual(profit_base, Decimal("-0.64571"))
def test_calculate_profit_perc(self):
profit_perc = self.position.calculate_profit_perc()
self.assertAlmostEqual(profit_perc, -0.032285695)
#self.assertEqual(profit_perc, Decimal("-0.032285695"))
self.assertEqual(profit_perc, Decimal("-0.03229"))
class TestShortGBPUSDPosition(unittest.TestCase):
def setUp(self):
getcontext.prec = 2
side = "SHORT"
market = "GBP/USD"
units = 2000
exposure = 2000.0
avg_price = 1.51819
cur_price = 1.51770
exposure = Decimal("2000.00")
avg_price = Decimal("1.51819")
cur_price = Decimal("1.51770")
self.position = Position(
side, market, units, exposure,
avg_price, cur_price
@@ -44,15 +49,15 @@ class TestShortGBPUSDPosition(unittest.TestCase):
def test_calculate_pips(self):
pos_pips = self.position.calculate_pips()
self.assertAlmostEqual(pos_pips, 0.00049)
self.assertEqual(pos_pips, Decimal("0.00049"))
def test_calculate_profit_base(self):
profit_base = self.position.calculate_profit_base()
self.assertAlmostEqual(profit_base, 0.6457139)
self.assertEqual(profit_base, Decimal("0.64571"))
def test_calculate_profit_perc(self):
profit_perc = self.position.calculate_profit_perc()
self.assertAlmostEqual(profit_perc, 0.032285695)
self.assertEqual(profit_perc, Decimal("0.03229"))
if __name__ == "__main__":