Lua. многомерная таблица с дырками

1 февраля, 2015

Недавно на форуме QUIK возник вопрос:

«Каким образом создать многомерную таблицу с расходованием памяти лишь на существующие элементы.»

Т е возможность такой записи :    Matrix[1][3][5][7]=456

с затратами памяти лишь на хранение данного значения

(реально затраты будут больше, так как надо хранить еще 5 указателей),

но это существенно меньше,

чем хранить всю таблицу с пустыми значениями.

Вот мое решение данной задачи:

———————функция печати результата——————

function printM(x) if (type(y)==»table») then print(«пусто»);else print(«y=»..y); end end
————-метатаблица—————
mt={__index = function(t,k) t[k]=setmetatable({}, mt); return t[k] end}

Matrix = setmetatable({}, mt);  — создание таблицы Matrix

Matrix2 = setmetatable({}, mt);  — создание таблицы Matrix2

y=Matrix[1][3][5][7];   printM(y);    —чтение несуществующего элемента

Matrix[1][3][5][7]=456;                — запись значения в Matrix

y=Matrix[1][3][5][7]; printM(y);   —чтение значения

Matrix2[5][1][3][5][7]=674;         — запись значения в Matrix2

y=Matrix2[5][1][3][5][7]; printM(y); —чтение значения

результат:

пусто
y=456
y=674

———————————————————-

Если хочется сделать программу нагляднее, то можно записать так:

————-метатаблица—————
mt={__index = function(t,k) t[k]=setmetatable({}, mt); return t[k] end}

———— функция для создания таблиц ——————

new=function() setmetatable({}, mt); end

тогда определение таблиц запишется так:

Matrix = new();  — создание таблицы Matrix

Matrix2 = new();  — создание таблицы Matrix2

Робот Вова. Месяц в школе.

30 января, 2015

В начале этого года я написал нового робота.

Весь январь робот учился. Теперь можно подвести некоторые результаты его обучения.

Как обычно для любознательных привожу картинку и итоговую таблицу.

Первоначально я включил в историю весь 2007 год. Но изменение стоимости акций в середине 2007 года в 100 раз создавали лишних 100% прибыли. Поэтому первые полгода 2007 года я просто исключил из истории.

vova_2015_1_003

 

 

 

 

 

 

——————————————————————————————

crossT3_2015 — Backtest Report

All trades Long trades Short trades
Initial capital 1000000.00 1000000.00 1000000.00
Ending capital 30803875.07 16588170.56 15215704.51
Net Profit 29803875.07 15588170.56 14215704.51
Net Profit % 2980.39 % 1558.82 % 1421.57 %
Exposure % 10.81 % 4.87 % 5.94 %
Net Risk Adjusted Return % 27581.83 % 32012.98 % 23947.12 %
Annual Return % 57.58 % 45.16 % 43.50 %
Risk Adjusted Return % 532.89 % 927.40 % 732.86 %
Total transaction costs 1526502.53 768632.66 757869.87

All trades 3079 1539 (49.98 %) 1540 (50.02 %)
 Avg. Profit/Loss 9679.73 10128.77 9230.98
 Avg. Profit/Loss % 0.98 % 1.02 % 0.93 %
 Avg. Bars Held 61.50 59.81 63.18

Winners 1700 (55.21 %) 815 (26.47 %) 885 (28.74 %)
 Total Profit 39112435.37 20162285.72 18950149.65
 Avg. Profit 23007.31 24739.00 21412.60
 Avg. Profit % 2.32 % 2.49 % 2.16 %
 Avg. Bars Held 78.05 80.77 75.54
 Max. Consecutive 62 31 37
 Largest win 782922.70 782922.70 374864.22
 # bars in largest win 303 303 162

Losers 1379 (44.79 %) 724 (23.51 %) 655 (21.27 %)
 Total Loss -9308560.30 -4574115.16 -4734445.14
 Avg. Loss -6750.23 -6317.84 -7228.16
 Avg. Loss % -0.68 % -0.63 % -0.73 %
 Avg. Bars Held 41.10 36.22 46.49
 Max. Consecutive 15 7 9
 Largest loss -41968.30 -28291.04 -41968.30
 # bars in largest loss 83 44 83

Max. trade drawdown -209887.13 -209887.13 -116009.48
Max. trade % drawdown -13.51 % -13.51 % -10.32 %
Max. system drawdown -225472.44 -234805.64 -136146.00
Max. system % drawdown -10.27 % -7.23 % -5.44 %
Recovery Factor 132.18 66.39 104.42
CAR/MaxDD 5.61 6.25 8.00
RAR/MaxDD 51.90 128.30 134.71
Profit Factor 4.20 4.41 4.00
Payoff Ratio 3.41 3.92 2.96
Standard Error 3305795.95 1804790.04 1518087.95
Risk-Reward Ratio 1.02 1.01 1.02
Ulcer Index 0.73 0.86 0.64
Ulcer Performance Index 71.29 46.11 59.26
Sharpe Ratio of trades 5.41 5.12 5.91
K-Ratio 0.0051 0.0051 0.0051