Browse Source

Various updates

master
Denis Tereshkin 6 years ago
parent
commit
81ffb9f7d0
  1. 3
      .gitignore
  2. 25
      src/naiback/analyzers/statsanalyzer.py
  3. 1
      src/naiback/analyzers/tradeslistanalyzer.py
  4. 4
      src/naiback/indicators/highest.py
  5. 4
      src/naiback/indicators/lowest.py
  6. 2
      src/naiback/strategy/strategy.py

3
.gitignore vendored

@ -3,4 +3,5 @@ build/*
dist/* dist/*
src/naiback.egg-info/* src/naiback.egg-info/*
.* .*
__pycache__ __pycache__
\#*.*\#

25
src/naiback/analyzers/statsanalyzer.py

@ -3,6 +3,9 @@ from .analyzer import Analyzer
from prettytable import PrettyTable from prettytable import PrettyTable
import numpy as np
import math
def render_float(a): def render_float(a):
return "{:.3f}".format(a) return "{:.3f}".format(a)
@ -98,4 +101,26 @@ class StatsAnalyzer(Analyzer):
result['long']['profit_factor'] = render_ratio(result['long']['total_won'], -result['long']['total_lost']) result['long']['profit_factor'] = render_ratio(result['long']['total_won'], -result['long']['total_lost'])
result['short']['profit_factor'] = render_ratio(result['short']['total_won'], -result['short']['total_lost']) result['short']['profit_factor'] = render_ratio(result['short']['total_won'], -result['short']['total_lost'])
mean = np.mean(list(map(lambda x: x.pnl(), positions)))
stddev = np.std(list(map(lambda x: x.pnl(), positions)))
sharpe = mean / stddev
tstat = sharpe * math.sqrt(len(positions))
result['all']['sharpe_ratio'] = sharpe
result['all']['t_stat'] = tstat
mean = np.mean(list(map(lambda x: x.pnl(), longs)))
stddev = np.std(list(map(lambda x: x.pnl(), longs)))
sharpe = mean / stddev
tstat = sharpe * math.sqrt(len(longs))
result['long']['sharpe_ratio'] = sharpe
result['long']['t_stat'] = tstat
mean = np.mean(list(map(lambda x: x.pnl(), shorts)))
stddev = np.std(list(map(lambda x: x.pnl(), shorts)))
sharpe = mean / stddev
tstat = sharpe * math.sqrt(len(shorts))
result['short']['sharpe_ratio'] = sharpe
result['short']['t_stat'] = tstat
return result return result

1
src/naiback/analyzers/tradeslistanalyzer.py

@ -16,6 +16,7 @@ class TradesListAnalyzer(Analyzer):
'entry_time' : pos.entry_time(), 'entry_time' : pos.entry_time(),
'exit_time' : pos.exit_time(), 'exit_time' : pos.exit_time(),
'pnl' : pos.pnl(), 'pnl' : pos.pnl(),
'profit_percentage' : pos.profit_percentage(),
'is_long' : pos.is_long(), 'is_long' : pos.is_long(),
'security' : pos.ticker, 'security' : pos.ticker,
'size' : pos.original_size() } 'size' : pos.original_size() }

4
src/naiback/indicators/highest.py

@ -7,7 +7,7 @@ def Highest(data, period):
return result return result
result[0] = data[0] result[0] = data[0]
for i in range(1, len(data)): for i in range(1, len(data)):
result[i] = max(data[max(0, i - period):(i+1)]) result[i] = max(data[max(0, i - period + 1):(i+1)])
return result return result
@ -16,4 +16,4 @@ def HighestValue(data, index, period):
return None return None
if index == 0: if index == 0:
return data[0] return data[0]
return max(data[max(0, index - period):(index+1)]) return max(data[max(0, index - period + 1):(index+1)])

4
src/naiback/indicators/lowest.py

@ -7,7 +7,7 @@ def Lowest(data, period):
return result return result
result[0] = data[0] result[0] = data[0]
for i in range(1, len(data)): for i in range(1, len(data)):
result[i] = min(data[max(0, i - period):(i+1)]) result[i] = min(data[max(0, i - period + 1):(i+1)])
return result return result
@ -16,4 +16,4 @@ def LowestValue(data, index, period):
return None return None
if index == 0: if index == 0:
return data[0] return data[0]
return min(data[max(0, index - period):(index+1)]) return min(data[max(0, index - period + 1):(index+1)])

2
src/naiback/strategy/strategy.py

@ -100,7 +100,7 @@ class Strategy:
for dt in all_dates: for dt in all_dates:
if len(bars.timestamp) > bar_pos: if len(bars.timestamp) > bar_pos:
print("new close: {} ({})".format(close, dt)) print("new close: {} ({})".format(close, dt))
if bars.timestamp[bar_pos] > dt: if bars.timestamp[bar_pos] > dt:
print("Inserting at {}: {}".format(dt, close)) print("Inserting at {}: {}".format(dt, close))
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt) bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)

Loading…
Cancel
Save