|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
from naiback.broker.position import Position
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
|
def position():
|
|
|
|
|
return Position('FOO')
|
|
|
|
|
|
|
|
|
|
def test_position_enter(position):
|
|
|
|
|
position.enter(3.50, 10)
|
|
|
|
|
|
|
|
|
|
assert position.entry_price() == 3.50
|
|
|
|
|
assert position.size() == 10
|
|
|
|
|
|
|
|
|
|
def test_position_enter_metadata(position):
|
|
|
|
|
position.enter(3.50, 10, commission=0.1, bar=42)
|
|
|
|
|
|
|
|
|
|
assert position.entry_metadata['commission'] == 0.1
|
|
|
|
|
assert position.entry_metadata['bar'] == 42
|
|
|
|
|
|
|
|
|
|
def test_position_metadata_helpers(position):
|
|
|
|
|
position.enter(3.50, 10, commission=0.1, bar=42)
|
|
|
|
|
|
|
|
|
|
assert position.entry_commission() == 0.1
|
|
|
|
|
assert position.entry_bar() == 42
|
|
|
|
|
|
|
|
|
|
def test_position_exit(position):
|
|
|
|
|
position.enter(3.50, 10)
|
|
|
|
|
position.exit(4.50)
|
|
|
|
|
|
|
|
|
|
assert position.exit_price() == 4.50
|
|
|
|
|
assert position.size() == 0
|
|
|
|
|
|
|
|
|
|
def test_position_enter_short(position):
|
|
|
|
|
position.enter(3.50, -10)
|
|
|
|
|
|
|
|
|
|
assert position.entry_price() == 3.50
|
|
|
|
|
assert position.size() == -10
|
|
|
|
|
|
|
|
|
|
def test_position_exit_pnl(position):
|
|
|
|
|
position.enter(3.50, 10)
|
|
|
|
|
position.exit(4.00)
|
|
|
|
|
|
|
|
|
|
assert position.pnl() == 5
|
|
|
|
|
|