jiji 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. data/ChangeLog +58 -0
  2. data/README +1 -0
  3. data/base/agents/moving_average_agent.rb +78 -0
  4. data/base/shared_lib/moving_average.rb +35 -0
  5. data/base/shared_lib/system/cross.rb +76 -0
  6. data/base/shared_lib/system/position_manager.rb +160 -0
  7. data/base/shared_lib/system/signal.rb +347 -0
  8. data/bin/jiji +5 -0
  9. data/html/css/calendar.css +432 -0
  10. data/html/css/datatable.css +299 -0
  11. data/html/css/default.css +627 -0
  12. data/html/css/dialog.css +77 -0
  13. data/html/css/treeview.css +205 -0
  14. data/html/img/auto_trade_off.gif +0 -0
  15. data/html/img/auto_trade_on.gif +0 -0
  16. data/html/img/back_bottom.gif +0 -0
  17. data/html/img/back_middle.gif +0 -0
  18. data/html/img/back_top.gif +0 -0
  19. data/html/img/bin_closed.png +0 -0
  20. data/html/img/bin_empty.png +0 -0
  21. data/html/img/bt-create-title-1.gif +0 -0
  22. data/html/img/bt-create-title-2.gif +0 -0
  23. data/html/img/bt-create-title-3.gif +0 -0
  24. data/html/img/button_add.gif +0 -0
  25. data/html/img/button_add_gray.gif +0 -0
  26. data/html/img/button_add_over.gif +0 -0
  27. data/html/img/button_add_small.gif +0 -0
  28. data/html/img/button_add_small_gray.gif +0 -0
  29. data/html/img/button_add_small_over.gif +0 -0
  30. data/html/img/button_apply.gif +0 -0
  31. data/html/img/button_apply_gray.gif +0 -0
  32. data/html/img/button_apply_over.gif +0 -0
  33. data/html/img/button_calendar.gif +0 -0
  34. data/html/img/button_calendar_over.gif +0 -0
  35. data/html/img/button_cancel.gif +0 -0
  36. data/html/img/button_cancel.jpg +0 -0
  37. data/html/img/button_cancel_gray.gif +0 -0
  38. data/html/img/button_cancel_over.gif +0 -0
  39. data/html/img/button_cancel_over.jpg +0 -0
  40. data/html/img/button_close.gif +0 -0
  41. data/html/img/button_close_gray.gif +0 -0
  42. data/html/img/button_close_over.gif +0 -0
  43. data/html/img/button_mkcol.gif +0 -0
  44. data/html/img/button_mkcol_gray.gif +0 -0
  45. data/html/img/button_mkcol_over.gif +0 -0
  46. data/html/img/button_no.gif +0 -0
  47. data/html/img/button_no_gray.gif +0 -0
  48. data/html/img/button_no_over.gif +0 -0
  49. data/html/img/button_ok.gif +0 -0
  50. data/html/img/button_ok_gray.gif +0 -0
  51. data/html/img/button_ok_over.gif +0 -0
  52. data/html/img/button_remove.gif +0 -0
  53. data/html/img/button_remove_gray.gif +0 -0
  54. data/html/img/button_remove_over.gif +0 -0
  55. data/html/img/button_remove_small.gif +0 -0
  56. data/html/img/button_remove_small_gray.gif +0 -0
  57. data/html/img/button_remove_small_over.gif +0 -0
  58. data/html/img/button_rename.gif +0 -0
  59. data/html/img/button_rename_gray.gif +0 -0
  60. data/html/img/button_rename_over.gif +0 -0
  61. data/html/img/button_save.gif +0 -0
  62. data/html/img/button_save_gray.gif +0 -0
  63. data/html/img/button_save_over.gif +0 -0
  64. data/html/img/button_start.gif +0 -0
  65. data/html/img/button_start_over.gif +0 -0
  66. data/html/img/button_update.gif +0 -0
  67. data/html/img/button_update_gray.gif +0 -0
  68. data/html/img/button_update_over.gif +0 -0
  69. data/html/img/button_update_s.gif +0 -0
  70. data/html/img/button_update_s_gray.gif +0 -0
  71. data/html/img/button_update_s_over.gif +0 -0
  72. data/html/img/button_yes.gif +0 -0
  73. data/html/img/button_yes_gray.gif +0 -0
  74. data/html/img/button_yes_over.gif +0 -0
  75. data/html/img/circle.gif +0 -0
  76. data/html/img/control_play.png +0 -0
  77. data/html/img/control_play_blue.png +0 -0
  78. data/html/img/delta.gif +0 -0
  79. data/html/img/dialog_info.jpg +0 -0
  80. data/html/img/dialog_input.jpg +0 -0
  81. data/html/img/dialog_warn.jpg +0 -0
  82. data/html/img/dt-arrow-dn.png +0 -0
  83. data/html/img/dt-arrow-up.png +0 -0
  84. data/html/img/folder.png +0 -0
  85. data/html/img/folder_brick.png +0 -0
  86. data/html/img/folder_user.png +0 -0
  87. data/html/img/foot.jpg +0 -0
  88. data/html/img/goto.gif +0 -0
  89. data/html/img/goto_o.gif +0 -0
  90. data/html/img/h3_bt-create_0.gif +0 -0
  91. data/html/img/h3_bt-create_1.gif +0 -0
  92. data/html/img/h3_bt-create_2.gif +0 -0
  93. data/html/img/h3_result_0.gif +0 -0
  94. data/html/img/h3_result_1.gif +0 -0
  95. data/html/img/h3_result_2.gif +0 -0
  96. data/html/img/h3_result_3.gif +0 -0
  97. data/html/img/h3_result_4.gif +0 -0
  98. data/html/img/h3_result_5.gif +0 -0
  99. data/html/img/h3_result_6.gif +0 -0
  100. data/html/img/h3_rt-setting_0.gif +0 -0
  101. data/html/img/h3_rt-setting_1.gif +0 -0
  102. data/html/img/head.jpg +0 -0
  103. data/html/img/line-numbers.png +0 -0
  104. data/html/img/line_white.gif +0 -0
  105. data/html/img/loading.gif +0 -0
  106. data/html/img/page_white_ruby.png +0 -0
  107. data/html/img/panel_100_bottom.gif +0 -0
  108. data/html/img/panel_100_middle.gif +0 -0
  109. data/html/img/panel_100_top.gif +0 -0
  110. data/html/img/panel_140_650_b.gif +0 -0
  111. data/html/img/panel_140_650_m.gif +0 -0
  112. data/html/img/panel_140_650_t.gif +0 -0
  113. data/html/img/panel_140_660_b.gif +0 -0
  114. data/html/img/panel_140_660_m.gif +0 -0
  115. data/html/img/panel_140_660_t.gif +0 -0
  116. data/html/img/panel_140_b.gif +0 -0
  117. data/html/img/panel_140_m.gif +0 -0
  118. data/html/img/panel_140_t.gif +0 -0
  119. data/html/img/panel_260_b.gif +0 -0
  120. data/html/img/panel_260_m.gif +0 -0
  121. data/html/img/panel_260_t.gif +0 -0
  122. data/html/img/panel_300_b.gif +0 -0
  123. data/html/img/panel_300_m.gif +0 -0
  124. data/html/img/panel_300_t.gif +0 -0
  125. data/html/img/panel_320_b.gif +0 -0
  126. data/html/img/panel_320_m.gif +0 -0
  127. data/html/img/panel_320_t.gif +0 -0
  128. data/html/img/panel_360_b.gif +0 -0
  129. data/html/img/panel_360_m.gif +0 -0
  130. data/html/img/panel_360_t.gif +0 -0
  131. data/html/img/panel_380_b.gif +0 -0
  132. data/html/img/panel_380_m.gif +0 -0
  133. data/html/img/panel_380_t.gif +0 -0
  134. data/html/img/panel_500_b.gif +0 -0
  135. data/html/img/panel_500_m.gif +0 -0
  136. data/html/img/panel_500_t.gif +0 -0
  137. data/html/img/panel_620_b.gif +0 -0
  138. data/html/img/panel_620_m.gif +0 -0
  139. data/html/img/panel_620_t.gif +0 -0
  140. data/html/img/panel_780_b.gif +0 -0
  141. data/html/img/panel_780_m.gif +0 -0
  142. data/html/img/panel_780_t.gif +0 -0
  143. data/html/img/problem.gif +0 -0
  144. data/html/img/progressbar.gif +0 -0
  145. data/html/img/result-title-1-1.gif +0 -0
  146. data/html/img/result-title-1-2.gif +0 -0
  147. data/html/img/result-title-2-1.gif +0 -0
  148. data/html/img/result-title-2-2.gif +0 -0
  149. data/html/img/result-title-3-1.gif +0 -0
  150. data/html/img/result-title-4-1.gif +0 -0
  151. data/html/img/rt-setting-title-1.gif +0 -0
  152. data/html/img/rt-setting-title-2.gif +0 -0
  153. data/html/img/s.gif +0 -0
  154. data/html/img/scroll.gif +0 -0
  155. data/html/img/separator.gif +0 -0
  156. data/html/img/sidebar_agent.png +0 -0
  157. data/html/img/sidebar_agent_edit.png +0 -0
  158. data/html/img/sidebar_agent_edit_agent.png +0 -0
  159. data/html/img/sidebar_agent_edit_agent_over.png +0 -0
  160. data/html/img/sidebar_agent_edit_agent_s.png +0 -0
  161. data/html/img/sidebar_agent_edit_over.png +0 -0
  162. data/html/img/sidebar_agent_edit_s.png +0 -0
  163. data/html/img/sidebar_agent_edit_shared_lib.png +0 -0
  164. data/html/img/sidebar_agent_edit_shared_lib_over.png +0 -0
  165. data/html/img/sidebar_agent_edit_shared_lib_s.png +0 -0
  166. data/html/img/sidebar_back.gif +0 -0
  167. data/html/img/sidebar_bt.png +0 -0
  168. data/html/img/sidebar_bt_create.png +0 -0
  169. data/html/img/sidebar_bt_create_over.png +0 -0
  170. data/html/img/sidebar_bt_create_s.png +0 -0
  171. data/html/img/sidebar_bt_result.png +0 -0
  172. data/html/img/sidebar_bt_result_over.png +0 -0
  173. data/html/img/sidebar_bt_result_s.png +0 -0
  174. data/html/img/sidebar_result_rmt.png +0 -0
  175. data/html/img/sidebar_result_rmt_over.png +0 -0
  176. data/html/img/sidebar_result_rmt_s.png +0 -0
  177. data/html/img/sidebar_rt.png +0 -0
  178. data/html/img/sidebar_rt_setting.png +0 -0
  179. data/html/img/sidebar_rt_setting_over.png +0 -0
  180. data/html/img/sidebar_rt_setting_s.png +0 -0
  181. data/html/img/sprite.png +0 -0
  182. data/html/img/submenu_agents.png +0 -0
  183. data/html/img/submenu_agents_over.png +0 -0
  184. data/html/img/submenu_agents_s.png +0 -0
  185. data/html/img/submenu_graph.png +0 -0
  186. data/html/img/submenu_graph_over.png +0 -0
  187. data/html/img/submenu_graph_s.png +0 -0
  188. data/html/img/submenu_info.png +0 -0
  189. data/html/img/submenu_info_over.png +0 -0
  190. data/html/img/submenu_info_s.png +0 -0
  191. data/html/img/submenu_log.png +0 -0
  192. data/html/img/submenu_log_over.png +0 -0
  193. data/html/img/submenu_log_s.png +0 -0
  194. data/html/img/submenu_operation.png +0 -0
  195. data/html/img/submenu_operation_over.png +0 -0
  196. data/html/img/submenu_operation_s.png +0 -0
  197. data/html/img/submenu_trade.png +0 -0
  198. data/html/img/submenu_trade_over.png +0 -0
  199. data/html/img/submenu_trade_s.png +0 -0
  200. data/html/img/td_over.gif +0 -0
  201. data/html/img/td_over_d.gif +0 -0
  202. data/html/img/td_selected.gif +0 -0
  203. data/html/img/thead.gif +0 -0
  204. data/html/img/transparent.gif +0 -0
  205. data/html/img/yui/treeview-sprite.gif +0 -0
  206. data/html/index.html +492 -0
  207. data/html/js/agent-editor/agent-editor-page.js +324 -0
  208. data/html/js/agent-editor/agent-editor.js +363 -0
  209. data/html/js/agent-editor/agent-list-tree.js +251 -0
  210. data/html/js/agent-selector.js +666 -0
  211. data/html/js/app.js +198 -0
  212. data/html/js/bt-create-page.js +205 -0
  213. data/html/js/container-min.js +1 -0
  214. data/html/js/container-utils.js +78 -0
  215. data/html/js/container.js +944 -0
  216. data/html/js/dialog.js +279 -0
  217. data/html/js/edit_area/autocompletion.js +491 -0
  218. data/html/js/edit_area/edit_area.css +546 -0
  219. data/html/js/edit_area/edit_area.js +539 -0
  220. data/html/js/edit_area/edit_area_compressor.php +408 -0
  221. data/html/js/edit_area/edit_area_full.gz +0 -0
  222. data/html/js/edit_area/edit_area_full.js +38 -0
  223. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  224. data/html/js/edit_area/edit_area_full_with_plugins.js +39 -0
  225. data/html/js/edit_area/edit_area_functions.js +1205 -0
  226. data/html/js/edit_area/edit_area_loader.js +1082 -0
  227. data/html/js/edit_area/elements_functions.js +334 -0
  228. data/html/js/edit_area/highlight.js +391 -0
  229. data/html/js/edit_area/images/autocompletion.gif +0 -0
  230. data/html/js/edit_area/images/close.gif +0 -0
  231. data/html/js/edit_area/images/fullscreen.gif +0 -0
  232. data/html/js/edit_area/images/go_to_line.gif +0 -0
  233. data/html/js/edit_area/images/goto.png +0 -0
  234. data/html/js/edit_area/images/help.gif +0 -0
  235. data/html/js/edit_area/images/help.png +0 -0
  236. data/html/js/edit_area/images/highlight.gif +0 -0
  237. data/html/js/edit_area/images/load.gif +0 -0
  238. data/html/js/edit_area/images/move.gif +0 -0
  239. data/html/js/edit_area/images/newdocument.gif +0 -0
  240. data/html/js/edit_area/images/opacity.png +0 -0
  241. data/html/js/edit_area/images/processing.gif +0 -0
  242. data/html/js/edit_area/images/redo.gif +0 -0
  243. data/html/js/edit_area/images/redo.png +0 -0
  244. data/html/js/edit_area/images/reset_highlight.gif +0 -0
  245. data/html/js/edit_area/images/save.gif +0 -0
  246. data/html/js/edit_area/images/save.png +0 -0
  247. data/html/js/edit_area/images/search.gif +0 -0
  248. data/html/js/edit_area/images/search.png +0 -0
  249. data/html/js/edit_area/images/smooth_selection.gif +0 -0
  250. data/html/js/edit_area/images/spacer.gif +0 -0
  251. data/html/js/edit_area/images/statusbar_resize.gif +0 -0
  252. data/html/js/edit_area/images/undo.gif +0 -0
  253. data/html/js/edit_area/images/undo.png +0 -0
  254. data/html/js/edit_area/images/word_wrap.gif +0 -0
  255. data/html/js/edit_area/keyboard.js +145 -0
  256. data/html/js/edit_area/langs/bg.js +73 -0
  257. data/html/js/edit_area/langs/cs.js +67 -0
  258. data/html/js/edit_area/langs/de.js +67 -0
  259. data/html/js/edit_area/langs/dk.js +67 -0
  260. data/html/js/edit_area/langs/en.js +67 -0
  261. data/html/js/edit_area/langs/eo.js +67 -0
  262. data/html/js/edit_area/langs/es.js +64 -0
  263. data/html/js/edit_area/langs/fi.js +67 -0
  264. data/html/js/edit_area/langs/fr.js +67 -0
  265. data/html/js/edit_area/langs/hr.js +67 -0
  266. data/html/js/edit_area/langs/it.js +67 -0
  267. data/html/js/edit_area/langs/ja.js +67 -0
  268. data/html/js/edit_area/langs/mk.js +67 -0
  269. data/html/js/edit_area/langs/nl.js +67 -0
  270. data/html/js/edit_area/langs/pl.js +67 -0
  271. data/html/js/edit_area/langs/pt.js +67 -0
  272. data/html/js/edit_area/langs/ru.js +67 -0
  273. data/html/js/edit_area/langs/sk.js +67 -0
  274. data/html/js/edit_area/langs/zh.js +67 -0
  275. data/html/js/edit_area/license_apache.txt +7 -0
  276. data/html/js/edit_area/license_bsd.txt +10 -0
  277. data/html/js/edit_area/license_lgpl.txt +458 -0
  278. data/html/js/edit_area/manage_area.js +623 -0
  279. data/html/js/edit_area/plugins/charmap/charmap.js +90 -0
  280. data/html/js/edit_area/plugins/charmap/css/charmap.css +64 -0
  281. data/html/js/edit_area/plugins/charmap/images/charmap.gif +0 -0
  282. data/html/js/edit_area/plugins/charmap/jscripts/map.js +373 -0
  283. data/html/js/edit_area/plugins/charmap/langs/bg.js +12 -0
  284. data/html/js/edit_area/plugins/charmap/langs/cs.js +6 -0
  285. data/html/js/edit_area/plugins/charmap/langs/de.js +6 -0
  286. data/html/js/edit_area/plugins/charmap/langs/dk.js +6 -0
  287. data/html/js/edit_area/plugins/charmap/langs/en.js +6 -0
  288. data/html/js/edit_area/plugins/charmap/langs/eo.js +6 -0
  289. data/html/js/edit_area/plugins/charmap/langs/es.js +6 -0
  290. data/html/js/edit_area/plugins/charmap/langs/fr.js +6 -0
  291. data/html/js/edit_area/plugins/charmap/langs/hr.js +6 -0
  292. data/html/js/edit_area/plugins/charmap/langs/it.js +6 -0
  293. data/html/js/edit_area/plugins/charmap/langs/ja.js +6 -0
  294. data/html/js/edit_area/plugins/charmap/langs/mk.js +6 -0
  295. data/html/js/edit_area/plugins/charmap/langs/nl.js +6 -0
  296. data/html/js/edit_area/plugins/charmap/langs/pl.js +6 -0
  297. data/html/js/edit_area/plugins/charmap/langs/pt.js +6 -0
  298. data/html/js/edit_area/plugins/charmap/langs/ru.js +6 -0
  299. data/html/js/edit_area/plugins/charmap/langs/sk.js +6 -0
  300. data/html/js/edit_area/plugins/charmap/langs/zh.js +6 -0
  301. data/html/js/edit_area/plugins/charmap/popup.html +24 -0
  302. data/html/js/edit_area/plugins/test/css/test.css +3 -0
  303. data/html/js/edit_area/plugins/test/images/Thumbs.db +0 -0
  304. data/html/js/edit_area/plugins/test/images/test.gif +0 -0
  305. data/html/js/edit_area/plugins/test/langs/bg.js +10 -0
  306. data/html/js/edit_area/plugins/test/langs/cs.js +4 -0
  307. data/html/js/edit_area/plugins/test/langs/de.js +4 -0
  308. data/html/js/edit_area/plugins/test/langs/dk.js +4 -0
  309. data/html/js/edit_area/plugins/test/langs/en.js +4 -0
  310. data/html/js/edit_area/plugins/test/langs/eo.js +4 -0
  311. data/html/js/edit_area/plugins/test/langs/es.js +4 -0
  312. data/html/js/edit_area/plugins/test/langs/fr.js +4 -0
  313. data/html/js/edit_area/plugins/test/langs/hr.js +4 -0
  314. data/html/js/edit_area/plugins/test/langs/it.js +4 -0
  315. data/html/js/edit_area/plugins/test/langs/ja.js +4 -0
  316. data/html/js/edit_area/plugins/test/langs/mk.js +4 -0
  317. data/html/js/edit_area/plugins/test/langs/nl.js +4 -0
  318. data/html/js/edit_area/plugins/test/langs/pl.js +4 -0
  319. data/html/js/edit_area/plugins/test/langs/pt.js +4 -0
  320. data/html/js/edit_area/plugins/test/langs/ru.js +4 -0
  321. data/html/js/edit_area/plugins/test/langs/sk.js +4 -0
  322. data/html/js/edit_area/plugins/test/langs/zh.js +4 -0
  323. data/html/js/edit_area/plugins/test/test.js +110 -0
  324. data/html/js/edit_area/plugins/test/test2.js +1 -0
  325. data/html/js/edit_area/reg_syntax/basic.js +69 -0
  326. data/html/js/edit_area/reg_syntax/brainfuck.js +44 -0
  327. data/html/js/edit_area/reg_syntax/c.js +62 -0
  328. data/html/js/edit_area/reg_syntax/coldfusion.js +119 -0
  329. data/html/js/edit_area/reg_syntax/cpp.js +65 -0
  330. data/html/js/edit_area/reg_syntax/css.js +84 -0
  331. data/html/js/edit_area/reg_syntax/html.js +50 -0
  332. data/html/js/edit_area/reg_syntax/java.js +56 -0
  333. data/html/js/edit_area/reg_syntax/js.js +93 -0
  334. data/html/js/edit_area/reg_syntax/pas.js +82 -0
  335. data/html/js/edit_area/reg_syntax/perl.js +88 -0
  336. data/html/js/edit_area/reg_syntax/php.js +156 -0
  337. data/html/js/edit_area/reg_syntax/python.js +144 -0
  338. data/html/js/edit_area/reg_syntax/robotstxt.js +24 -0
  339. data/html/js/edit_area/reg_syntax/ruby.js +67 -0
  340. data/html/js/edit_area/reg_syntax/sql.js +55 -0
  341. data/html/js/edit_area/reg_syntax/tsql.js +87 -0
  342. data/html/js/edit_area/reg_syntax/vb.js +52 -0
  343. data/html/js/edit_area/reg_syntax/xml.js +56 -0
  344. data/html/js/edit_area/reg_syntax.js +166 -0
  345. data/html/js/edit_area/regexp.js +139 -0
  346. data/html/js/edit_area/resize_area.js +78 -0
  347. data/html/js/edit_area/search_replace.js +174 -0
  348. data/html/js/edit_area/template.html +101 -0
  349. data/html/js/json-broker-client.js +67 -0
  350. data/html/js/page-manager.js +93 -0
  351. data/html/js/prototype.js +4184 -0
  352. data/html/js/result-page.js +775 -0
  353. data/html/js/rt-setting-page.js +152 -0
  354. data/html/js/sidebar.js +263 -0
  355. data/html/js/templates.js +386 -0
  356. data/html/js/utils.js +890 -0
  357. data/html/js/uuid.js +103 -0
  358. data/html/js/yui/treeview.js +3671 -0
  359. data/html/swf/chart.swf +0 -0
  360. data/html/test/agent_editor_spec.js +815 -0
  361. data/html/test/index.html +40 -0
  362. data/html/test/jsspec/JSSpec.css +224 -0
  363. data/html/test/jsspec/JSSpec.js +1549 -0
  364. data/html/test/jsspec/diff_match_patch.js +1 -0
  365. data/html/test/utils_spec.js +111 -0
  366. data/lib/jiji/agent/agent.rb +149 -0
  367. data/lib/jiji/agent/agent_manager.rb +138 -0
  368. data/lib/jiji/agent/agent_registry.rb +165 -0
  369. data/lib/jiji/agent/permitter.rb +128 -0
  370. data/lib/jiji/agent/util.rb +16 -0
  371. data/lib/jiji/collector.rb +226 -0
  372. data/lib/jiji/command.rb +204 -0
  373. data/lib/jiji/configuration.rb +86 -0
  374. data/lib/jiji/dao/file_system_dao.rb +158 -0
  375. data/lib/jiji/dao/rate_dao.rb +149 -0
  376. data/lib/jiji/dao/timed_data_dao.rb +336 -0
  377. data/lib/jiji/dao/trade_result_dao.rb +128 -0
  378. data/lib/jiji/error.rb +49 -0
  379. data/lib/jiji/migration/migrator.rb +50 -0
  380. data/lib/jiji/migration/migrator1_0_3.rb +26 -0
  381. data/lib/jiji/migration/migrator1_1_0.rb +46 -0
  382. data/lib/jiji/migration/migrator1_2_0.rb +67 -0
  383. data/lib/jiji/models.rb +223 -0
  384. data/lib/jiji/observer.rb +105 -0
  385. data/lib/jiji/operator.rb +396 -0
  386. data/lib/jiji/output.rb +221 -0
  387. data/lib/jiji/output_manager.rb +84 -0
  388. data/lib/jiji/plugin/embedded/click_securities_demo_plugin.rb +141 -0
  389. data/lib/jiji/plugin/embedded/single_click_client.rb +116 -0
  390. data/lib/jiji/plugin/plugin_loader.rb +53 -0
  391. data/lib/jiji/plugin/securities_plugin.rb +134 -0
  392. data/lib/jiji/process.rb +234 -0
  393. data/lib/jiji/process_manager.rb +290 -0
  394. data/lib/jiji/registry.rb +349 -0
  395. data/lib/jiji/server.rb +127 -0
  396. data/lib/jiji/service/agent_service.rb +230 -0
  397. data/lib/jiji/service/hello_service.rb +10 -0
  398. data/lib/jiji/service/output_service.rb +82 -0
  399. data/lib/jiji/service/process_service.rb +76 -0
  400. data/lib/jiji/service/rate_service.rb +38 -0
  401. data/lib/jiji/service/system_service.rb +14 -0
  402. data/lib/jiji/service/trade_result_service.rb +31 -0
  403. data/lib/jiji/util/backtester.rb +116 -0
  404. data/lib/jiji/util/block_to_session.rb +70 -0
  405. data/lib/jiji/util/cache.rb +79 -0
  406. data/lib/jiji/util/csv_append_support.rb +15 -0
  407. data/lib/jiji/util/file_lock.rb +86 -0
  408. data/lib/jiji/util/fix_yaml_bug.rb +11 -0
  409. data/lib/jiji/util/include_proxy.rb +17 -0
  410. data/lib/jiji/util/iterator.rb +70 -0
  411. data/lib/jiji/util/json_broker.rb +55 -0
  412. data/lib/jiji/util/json_rpc_requestor.rb +30 -0
  413. data/lib/jiji/util/rate_data_importer.rb +219 -0
  414. data/lib/jiji/util/synchronize_interceptor.rb +41 -0
  415. data/lib/jiji/util/thread_use_generator.rb +52 -0
  416. data/lib/jiji/util/util.rb +112 -0
  417. data/lib/jiji_plugin.rb +6 -0
  418. data/swf/build.xml +23 -0
  419. data/swf/chart/FxChart-config.xml +9 -0
  420. data/swf/chart/FxChart.mxml +17 -0
  421. data/swf/chart/fx/chart/Chart.as +173 -0
  422. data/swf/chart/fx/chart/ctrl/AutoUpdate.as +96 -0
  423. data/swf/chart/fx/chart/ctrl/Controller.as +270 -0
  424. data/swf/chart/fx/chart/ctrl/Event.as +75 -0
  425. data/swf/chart/fx/chart/model/Model.as +228 -0
  426. data/swf/chart/fx/chart/model/TimedData.as +40 -0
  427. data/swf/chart/fx/chart/ui/AbstractChartUI.as +59 -0
  428. data/swf/chart/fx/chart/ui/AbstractDrawChartUI.as +63 -0
  429. data/swf/chart/fx/chart/ui/Constants.as +233 -0
  430. data/swf/chart/fx/chart/ui/InformationWindow.as +228 -0
  431. data/swf/chart/fx/chart/ui/LayerManager.as +95 -0
  432. data/swf/chart/fx/chart/ui/Loading.as +32 -0
  433. data/swf/chart/fx/chart/ui/Pointer.as +61 -0
  434. data/swf/chart/fx/chart/ui/RangeInfoWindow.as +84 -0
  435. data/swf/chart/fx/chart/ui/RenderingContext.as +54 -0
  436. data/swf/chart/fx/chart/ui/ScaleSelector.as +84 -0
  437. data/swf/chart/fx/chart/ui/Scroll.as +241 -0
  438. data/swf/chart/fx/chart/ui/ScrollBar.as +378 -0
  439. data/swf/chart/fx/chart/ui/Stage.as +97 -0
  440. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +147 -0
  441. data/swf/chart/fx/chart/ui/TradeResult.as +330 -0
  442. data/swf/chart/fx/chart/ui/Window.as +96 -0
  443. data/swf/chart/fx/chart/ui/candle/Axis.as +112 -0
  444. data/swf/chart/fx/chart/ui/candle/Candle.as +79 -0
  445. data/swf/chart/fx/chart/ui/candle/CandleChart.as +81 -0
  446. data/swf/chart/fx/chart/ui/graph/Graph.as +200 -0
  447. data/swf/chart/fx/chart/ui/graph/GraphManager.as +192 -0
  448. data/swf/chart/fx/chart/ui/resource/buy.gif +0 -0
  449. data/swf/chart/fx/chart/ui/resource/cursor_hand.gif +0 -0
  450. data/swf/chart/fx/chart/ui/resource/diff_label.gif +0 -0
  451. data/swf/chart/fx/chart/ui/resource/down.gif +0 -0
  452. data/swf/chart/fx/chart/ui/resource/down_buy.gif +0 -0
  453. data/swf/chart/fx/chart/ui/resource/down_buy_1.gif +0 -0
  454. data/swf/chart/fx/chart/ui/resource/down_buy_2.gif +0 -0
  455. data/swf/chart/fx/chart/ui/resource/down_buy_3.gif +0 -0
  456. data/swf/chart/fx/chart/ui/resource/down_sell.gif +0 -0
  457. data/swf/chart/fx/chart/ui/resource/down_sell_1.gif +0 -0
  458. data/swf/chart/fx/chart/ui/resource/down_sell_2.gif +0 -0
  459. data/swf/chart/fx/chart/ui/resource/down_sell_3.gif +0 -0
  460. data/swf/chart/fx/chart/ui/resource/draw_buy.gif +0 -0
  461. data/swf/chart/fx/chart/ui/resource/draw_sell.gif +0 -0
  462. data/swf/chart/fx/chart/ui/resource/end_label.gif +0 -0
  463. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  464. data/swf/chart/fx/chart/ui/resource/loading.gif +0 -0
  465. data/swf/chart/fx/chart/ui/resource/max_label.gif +0 -0
  466. data/swf/chart/fx/chart/ui/resource/min_label.gif +0 -0
  467. data/swf/chart/fx/chart/ui/resource/scroll_bar.gif +0 -0
  468. data/swf/chart/fx/chart/ui/resource/scroll_bar_a.gif +0 -0
  469. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle.gif +0 -0
  470. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_a.gif +0 -0
  471. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_o.gif +0 -0
  472. data/swf/chart/fx/chart/ui/resource/scroll_bar_left.gif +0 -0
  473. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_a.gif +0 -0
  474. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_o.gif +0 -0
  475. data/swf/chart/fx/chart/ui/resource/scroll_bar_o.gif +0 -0
  476. data/swf/chart/fx/chart/ui/resource/scroll_bar_right.gif +0 -0
  477. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_a.gif +0 -0
  478. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_o.gif +0 -0
  479. data/swf/chart/fx/chart/ui/resource/scroll_handle.gif +0 -0
  480. data/swf/chart/fx/chart/ui/resource/scroll_info_handle.gif +0 -0
  481. data/swf/chart/fx/chart/ui/resource/scroll_left_button.gif +0 -0
  482. data/swf/chart/fx/chart/ui/resource/scroll_left_button_d.gif +0 -0
  483. data/swf/chart/fx/chart/ui/resource/scroll_left_button_down.gif +0 -0
  484. data/swf/chart/fx/chart/ui/resource/scroll_left_button_g.gif +0 -0
  485. data/swf/chart/fx/chart/ui/resource/scroll_left_button_o.gif +0 -0
  486. data/swf/chart/fx/chart/ui/resource/scroll_left_button_up.gif +0 -0
  487. data/swf/chart/fx/chart/ui/resource/scroll_outer.gif +0 -0
  488. data/swf/chart/fx/chart/ui/resource/scroll_outer_left.gif +0 -0
  489. data/swf/chart/fx/chart/ui/resource/scroll_outer_right.gif +0 -0
  490. data/swf/chart/fx/chart/ui/resource/scroll_right_button.gif +0 -0
  491. data/swf/chart/fx/chart/ui/resource/scroll_right_button_d.gif +0 -0
  492. data/swf/chart/fx/chart/ui/resource/scroll_right_button_down.gif +0 -0
  493. data/swf/chart/fx/chart/ui/resource/scroll_right_button_g.gif +0 -0
  494. data/swf/chart/fx/chart/ui/resource/scroll_right_button_o.gif +0 -0
  495. data/swf/chart/fx/chart/ui/resource/scroll_right_button_up.gif +0 -0
  496. data/swf/chart/fx/chart/ui/resource/scroll_slider_left.gif +0 -0
  497. data/swf/chart/fx/chart/ui/resource/scroll_slider_right.gif +0 -0
  498. data/swf/chart/fx/chart/ui/resource/sell.gif +0 -0
  499. data/swf/chart/fx/chart/ui/resource/start_label.gif +0 -0
  500. data/swf/chart/fx/chart/ui/resource/stripe.gif +0 -0
  501. data/swf/chart/fx/chart/ui/resource/stripe_b.gif +0 -0
  502. data/swf/chart/fx/chart/ui/resource/stripe_r.gif +0 -0
  503. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  504. data/swf/chart/fx/chart/ui/resource/up.gif +0 -0
  505. data/swf/chart/fx/chart/ui/resource/up_buy.gif +0 -0
  506. data/swf/chart/fx/chart/ui/resource/up_buy_1.gif +0 -0
  507. data/swf/chart/fx/chart/ui/resource/up_buy_2.gif +0 -0
  508. data/swf/chart/fx/chart/ui/resource/up_buy_3.gif +0 -0
  509. data/swf/chart/fx/chart/ui/resource/up_sell.gif +0 -0
  510. data/swf/chart/fx/chart/ui/resource/up_sell_1.gif +0 -0
  511. data/swf/chart/fx/chart/ui/resource/up_sell_2.gif +0 -0
  512. data/swf/chart/fx/chart/ui/resource/up_sell_3.gif +0 -0
  513. data/swf/chart/fx/net/StubFactory.as +113 -0
  514. data/swf/chart/fx/util/ListenerSupport.as +55 -0
  515. data/swf/chart/fx/util/PositionManager.as +95 -0
  516. data/swf/chart/fx/util/ScaleFormatter.as +156 -0
  517. data/swf/chart/fx/util/Util.as +61 -0
  518. data/swf/chart/log.as +40 -0
  519. data/swf/lib/corelib.swc +0 -0
  520. data/test/BackCollectorTest/basic/2008-08-04/AUDJPY.csv +5 -0
  521. data/test/BackCollectorTest/basic/2008-08-04/USDJPY.csv +5 -0
  522. data/test/BackCollectorTest/basic/2008-08-04/ZARJPY.csv +5 -0
  523. data/test/BackCollectorTest/basic/2008-08-05/AUDJPY.csv +5 -0
  524. data/test/BackCollectorTest/basic/2008-08-05/USDJPY.csv +5 -0
  525. data/test/BackCollectorTest/basic/2008-08-05/ZARJPY.csv +5 -0
  526. data/test/BackCollectorTest/basic/2008-08-06/AUDJPY.csv +5 -0
  527. data/test/BackCollectorTest/basic/2008-08-06/USDJPY.csv +5 -0
  528. data/test/BackCollectorTest/basic/2008-08-06/ZARJPY.csv +5 -0
  529. data/test/BackCollectorTest/basic/2008-08-07/AUDJPY.csv +5 -0
  530. data/test/BackCollectorTest/basic/2008-08-07/USDJPY.csv +5 -0
  531. data/test/BackCollectorTest/basic/2008-08-07/ZARJPY.csv +5 -0
  532. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-04.csv +5 -0
  533. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-05.csv +5 -0
  534. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-06.csv +5 -0
  535. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-07.csv +5 -0
  536. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-04.csv +5 -0
  537. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-05.csv +5 -0
  538. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-06.csv +5 -0
  539. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-07.csv +5 -0
  540. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-04.csv +5 -0
  541. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-05.csv +5 -0
  542. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-06.csv +5 -0
  543. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-07.csv +5 -0
  544. data/test/BackCollectorTest/lack/2008-08-04/AUDJPY.csv +5 -0
  545. data/test/BackCollectorTest/lack/2008-08-04/USDJPY.csv +5 -0
  546. data/test/BackCollectorTest/lack/2008-08-04/ZARJPY.csv +5 -0
  547. data/test/BackCollectorTest/lack/2008-08-06/AUDJPY.csv +5 -0
  548. data/test/BackCollectorTest/lack/2008-08-06/USDJPY.csv +5 -0
  549. data/test/BackCollectorTest/lack/2008-08-06/ZARJPY.csv +5 -0
  550. data/test/BackCollectorTest/lack/2008-08-07/AUDJPY.csv +5 -0
  551. data/test/BackCollectorTest/lack/2008-08-07/USDJPY.csv +5 -0
  552. data/test/BackCollectorTest/lack/2008-08-07/ZARJPY.csv +5 -0
  553. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-04.csv +5 -0
  554. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-06.csv +5 -0
  555. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-07.csv +5 -0
  556. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-04.csv +5 -0
  557. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-06.csv +5 -0
  558. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-07.csv +5 -0
  559. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-04.csv +5 -0
  560. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-06.csv +5 -0
  561. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-07.csv +5 -0
  562. data/test/OutputregistryTest/conf/configuration.yaml +3 -0
  563. data/test/ProcessManagerTest/agents/moving_average.rb +95 -0
  564. data/test/ProcessManagerTest/conf/configuration.yaml +6 -0
  565. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-21.csv +5853 -0
  566. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-22.csv +5821 -0
  567. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-23.csv +5921 -0
  568. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-24.csv +5956 -0
  569. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-25.csv +5796 -0
  570. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-21.csv +5853 -0
  571. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-22.csv +5821 -0
  572. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-23.csv +5921 -0
  573. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-24.csv +5956 -0
  574. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-25.csv +5796 -0
  575. data/test/ProcessTest/agents/foo.rb +10 -0
  576. data/test/ProcessTest/conf/configuration.yaml +3 -0
  577. data/test/agent/agent_tests.rb +10 -0
  578. data/test/agent/test_AgentManager.rb +321 -0
  579. data/test/agent/test_AgentRegistry.rb +662 -0
  580. data/test/agent/test_PeriodicallyAgent.rb +180 -0
  581. data/test/agent/test_Permitter.rb +217 -0
  582. data/test/all_tests.rb +24 -0
  583. data/test/dao/dao_tests.rb +9 -0
  584. data/test/dao/test_FileSystemDao.rb +431 -0
  585. data/test/dao/test_RateDao.rb +695 -0
  586. data/test/dao/test_TradeResultDao.rb +487 -0
  587. data/test/jiji_plugin.rb +7 -0
  588. data/test/migration/migration_tests.rb +10 -0
  589. data/test/migration/migrator1_0_3test_data/rmt/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  590. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75YuV5bmz5Z2H57ea/meta.yaml +12 -0
  591. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75Yuasdwqdd/meta.yaml +12 -0
  592. data/test/migration/migrator1_1_0test_data/configuration.yaml +11 -0
  593. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  594. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  595. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  596. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  597. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  598. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  599. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  600. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  601. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  602. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  603. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  604. data/test/migration/migrator1_2_0test_data/basic/props.yaml +85 -0
  605. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  606. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  607. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  608. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  609. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  610. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  611. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  612. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  613. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  614. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  615. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  616. data/test/migration/migrator1_2_0test_data/illegal_props/props.yaml +1 -0
  617. data/test/migration/migrator1_2_0test_data/no_outs/props.yaml +85 -0
  618. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  619. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  620. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  621. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  622. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  623. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  624. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  625. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  626. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  627. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  628. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  629. data/test/migration/test_Migrator.rb +117 -0
  630. data/test/migration/test_Migrator1_0_3.rb +118 -0
  631. data/test/migration/test_Migrator1_1_0.rb +56 -0
  632. data/test/migration/test_Migrator1_2_0.rb +94 -0
  633. data/test/plugin/embedded/test_SingleClickClient.rb +144 -0
  634. data/test/plugin/error_test/jiji_plugin.rb +2 -0
  635. data/test/plugin/plugin_tests.rb +8 -0
  636. data/test/plugin/test/foo_plugin.rb +1 -0
  637. data/test/plugin/test/jiji_plugin.rb +2 -0
  638. data/test/plugin/test_Loader.rb +33 -0
  639. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a-1.0.0.gem +0 -0
  640. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a.gemspec +10 -0
  641. data/test/plugin/test_gem/a/lib/jiji_plugin.rb +2 -0
  642. data/test/plugin/test_gem/a/lib/jiji_plugin_test.rb +6 -0
  643. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b-1.0.0.gem +0 -0
  644. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b.gemspec +9 -0
  645. data/test/plugin/test_gem/b/lib/jiji_plugin.rb +2 -0
  646. data/test/service/all_service_tests.rb +10 -0
  647. data/test/service/test_AgentService.rb +185 -0
  648. data/test/service/test_OutputService.rb +33 -0
  649. data/test/service/test_RateService.rb +56 -0
  650. data/test/shared/rate.csv +144 -0
  651. data/test/shared/shared_tests.rb +9 -0
  652. data/test/shared/test_Cross.rb +144 -0
  653. data/test/shared/test_PositionManager.rb +285 -0
  654. data/test/shared/test_Signal.rb +65 -0
  655. data/test/test_BackTestCollector.rb +273 -0
  656. data/test/test_Collector.rb +230 -0
  657. data/test/test_Configuration.rb +61 -0
  658. data/test/test_Configuration_a.yaml +6 -0
  659. data/test/test_Operator.rb +501 -0
  660. data/test/test_Output.rb +175 -0
  661. data/test/test_OutputManager.rb +162 -0
  662. data/test/test_Output_registry.rb +42 -0
  663. data/test/test_Process.rb +557 -0
  664. data/test/test_ProcessManager.rb +723 -0
  665. data/test/test_utils.rb +112 -0
  666. data/test/util/test_BlockToSession.rb +121 -0
  667. data/test/util/test_CSV.rb +84 -0
  668. data/test/util/test_SynchronizeInterceptor.rb +76 -0
  669. data/test/util/util_tests.rb +9 -0
  670. metadata +941 -0
@@ -0,0 +1,501 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $: << "../lib"
4
+
5
+ require 'rubygems'
6
+ require 'runit/testcase'
7
+ require 'runit/cui/testrunner'
8
+ require 'jiji/operator'
9
+ require 'jiji/collector'
10
+ require 'jiji/agent/agent'
11
+ require 'jiji/agent/agent_manager'
12
+ require 'jiji/agent/agent_registry'
13
+ require 'jiji/agent/permitter'
14
+ require 'jiji/agent/util'
15
+ require 'test_utils'
16
+
17
+ class OperatorTest < RUNIT::TestCase
18
+
19
+ include Test::Constants
20
+
21
+ def setup
22
+ @operator = JIJI::Operator.new nil, 200000
23
+ @operator.conf = CONF
24
+ end
25
+
26
+ def teardown
27
+ end
28
+
29
+ def test_basic
30
+
31
+ pair_infos = {
32
+ :EURJPY => Info.new( 10000 )
33
+ }
34
+
35
+ # 初期状態は建玉,損益共に0
36
+ assert_equals @operator.profit_or_loss, 0
37
+ assert_equals @operator.positions, {}
38
+
39
+ # レートを挿入
40
+ rates = JIJI::Rates.new( pair_infos, {
41
+ :EURJPY => Rate.new( 100.0,100.05,-200,200,1 )
42
+ })
43
+ time_1 = rates.time
44
+ @operator.next_rates( rates )
45
+ assert_equals @operator.profit_or_loss, 0
46
+ assert_equals @operator.positions, {}
47
+
48
+ # 購入
49
+ sell_1 = @operator.sell 1
50
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
51
+ assert_equals sell_1.state, JIJI::Position::STATE_START
52
+ assert_equals sell_1.date, time_1
53
+ assert_equals sell_1.fix_date, nil
54
+ assert_equals sell_1.count, 1
55
+ assert_equals sell_1.price, 1000000
56
+ assert_equals sell_1.current_price, 1000500
57
+ assert_equals sell_1.profit_or_loss, -500
58
+
59
+ buy_1 = @operator.buy 1
60
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
61
+ assert_equals buy_1.state, JIJI::Position::STATE_START
62
+ assert_equals buy_1.date, time_1
63
+ assert_equals buy_1.fix_date, nil
64
+ assert_equals buy_1.count, 1
65
+ assert_equals buy_1.price, 1000500
66
+ assert_equals buy_1.current_price, 1000000
67
+ assert_equals buy_1.profit_or_loss, -500
68
+
69
+ assert_equals @operator.profit_or_loss, -1000
70
+ assert_equals @operator.fixed_profit_or_loss, 0
71
+ assert_equals @operator.positions.length, 2
72
+ assert_equals @operator.win_rate, 0.0
73
+
74
+ # レートを更新
75
+ rates = JIJI::Rates.new( pair_infos, {
76
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,2 )
77
+ })
78
+ @operator.next_rates( rates )
79
+
80
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
81
+ assert_equals sell_1.state, JIJI::Position::STATE_START
82
+ assert_equals sell_1.date, time_1
83
+ assert_equals sell_1.fix_date, nil
84
+ assert_equals sell_1.count, 1
85
+ assert_equals sell_1.price, 1000000
86
+ assert_equals sell_1.current_price, 1001000
87
+ assert_equals sell_1.profit_or_loss, -1000
88
+
89
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
90
+ assert_equals buy_1.state, JIJI::Position::STATE_START
91
+ assert_equals buy_1.date, time_1
92
+ assert_equals buy_1.fix_date, nil
93
+ assert_equals buy_1.count, 1
94
+ assert_equals buy_1.price, 1000500
95
+ assert_equals buy_1.current_price, 1000500
96
+ assert_equals buy_1.profit_or_loss, 0
97
+
98
+ assert_equals @operator.profit_or_loss, -1000
99
+ assert_equals @operator.fixed_profit_or_loss, 0
100
+ assert_equals @operator.positions.length, 2
101
+ assert_equals @operator.win_rate, 0.0
102
+
103
+ # レートを更新
104
+ rates = JIJI::Rates.new( pair_infos, {
105
+ :EURJPY => Rate.new( 100.20,100.25,-200,200,3 )
106
+ })
107
+ time_3 = rates.time
108
+ @operator.next_rates( rates )
109
+
110
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
111
+ assert_equals sell_1.state, JIJI::Position::STATE_START
112
+ assert_equals sell_1.date, time_1
113
+ assert_equals sell_1.fix_date, nil
114
+ assert_equals sell_1.count, 1
115
+ assert_equals sell_1.price, 1000000
116
+ assert_equals sell_1.current_price, 1002500
117
+ assert_equals sell_1.profit_or_loss, -2500
118
+
119
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
120
+ assert_equals buy_1.state, JIJI::Position::STATE_START
121
+ assert_equals buy_1.date, time_1
122
+ assert_equals buy_1.fix_date, nil
123
+ assert_equals buy_1.count, 1
124
+ assert_equals buy_1.price, 1000500
125
+ assert_equals buy_1.current_price, 1002000
126
+ assert_equals buy_1.profit_or_loss, 1500
127
+
128
+ assert_equals @operator.profit_or_loss, -1000
129
+ assert_equals @operator.fixed_profit_or_loss, 0
130
+ assert_equals @operator.positions.length, 2
131
+ assert_equals @operator.win_rate, 0.0
132
+
133
+
134
+ # sell をコミット
135
+ @operator.commit(sell_1)
136
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
137
+ assert_equals sell_1.state, JIJI::Position::STATE_FIXED
138
+ assert_equals sell_1.date, time_1
139
+ assert_equals sell_1.fix_date, time_3
140
+ assert_equals sell_1.count, 1
141
+ assert_equals sell_1.price, 1000000
142
+ assert_equals sell_1.current_price, 1002500
143
+ assert_equals sell_1.profit_or_loss, -2500
144
+
145
+
146
+ # レートを更新
147
+ rates = JIJI::Rates.new( pair_infos, {
148
+ :EURJPY => Rate.new( 100.15,100.20,-200,200,4 )
149
+ })
150
+ time_4 = rates.time
151
+ @operator.next_rates( rates )
152
+
153
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
154
+ assert_equals sell_1.state, JIJI::Position::STATE_FIXED
155
+ assert_equals sell_1.date, time_1
156
+ assert_equals sell_1.fix_date, time_3
157
+ assert_equals sell_1.count, 1
158
+ assert_equals sell_1.price, 1000000
159
+ assert_equals sell_1.current_price, 1002500
160
+ assert_equals sell_1.profit_or_loss, -2500
161
+
162
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
163
+ assert_equals buy_1.state, JIJI::Position::STATE_START
164
+ assert_equals buy_1.date, time_1
165
+ assert_equals buy_1.fix_date, nil
166
+ assert_equals buy_1.count, 1
167
+ assert_equals buy_1.price, 1000500
168
+ assert_equals buy_1.current_price, 1001500
169
+ assert_equals buy_1.profit_or_loss, 1000
170
+
171
+ assert_equals @operator.profit_or_loss, -1500
172
+ assert_equals @operator.fixed_profit_or_loss, -2500
173
+ assert_equals @operator.positions.length, 1
174
+ assert_equals @operator.win_rate, 0.0
175
+
176
+ # 新規買い
177
+ buy_2 = @operator.buy 2
178
+ assert_equals buy_2.sell_or_buy, JIJI::Position::BUY
179
+ assert_equals buy_2.state, JIJI::Position::STATE_START
180
+ assert_equals buy_2.date, time_4
181
+ assert_equals buy_2.fix_date, nil
182
+ assert_equals buy_2.count, 2
183
+ assert_equals buy_2.price, 2004000
184
+ assert_equals buy_2.current_price, 2003000
185
+ assert_equals buy_2.profit_or_loss, -1000
186
+
187
+ assert_equals @operator.profit_or_loss, -2500
188
+ assert_equals @operator.fixed_profit_or_loss, -2500
189
+ assert_equals @operator.positions.length, 2
190
+ assert_equals @operator.win_rate, 0.0
191
+
192
+
193
+ # レートを更新
194
+ rates = JIJI::Rates.new( pair_infos, {
195
+ :EURJPY => Rate.new( 100.20,100.25,-200,200,5 )
196
+ })
197
+ time_5 = rates.time
198
+ @operator.next_rates( rates )
199
+
200
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
201
+ assert_equals sell_1.state, JIJI::Position::STATE_FIXED
202
+ assert_equals sell_1.date, time_1
203
+ assert_equals sell_1.fix_date, time_3
204
+ assert_equals sell_1.count, 1
205
+ assert_equals sell_1.price, 1000000
206
+ assert_equals sell_1.current_price, 1002500
207
+ assert_equals sell_1.profit_or_loss, -2500
208
+
209
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
210
+ assert_equals buy_1.state, JIJI::Position::STATE_START
211
+ assert_equals buy_1.date, time_1
212
+ assert_equals buy_1.fix_date, nil
213
+ assert_equals buy_1.count, 1
214
+ assert_equals buy_1.price, 1000500
215
+ assert_equals buy_1.current_price, 1002000
216
+ assert_equals buy_1.profit_or_loss, 1500
217
+
218
+ assert_equals buy_2.sell_or_buy, JIJI::Position::BUY
219
+ assert_equals buy_2.state, JIJI::Position::STATE_START
220
+ assert_equals buy_2.date, time_4
221
+ assert_equals buy_2.fix_date, nil
222
+ assert_equals buy_2.count, 2
223
+ assert_equals buy_2.price, 2004000
224
+ assert_equals buy_2.current_price, 2004000
225
+ assert_equals buy_2.profit_or_loss, 0
226
+
227
+ assert_equals @operator.profit_or_loss, -1000
228
+ assert_equals @operator.fixed_profit_or_loss, -2500
229
+ assert_equals @operator.positions.length, 2
230
+ assert_equals @operator.win_rate, 0.0
231
+
232
+
233
+ @operator.commit(buy_1)
234
+ @operator.commit(buy_2)
235
+
236
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
237
+ assert_equals sell_1.state, JIJI::Position::STATE_FIXED
238
+ assert_equals sell_1.date, time_1
239
+ assert_equals sell_1.fix_date, time_3
240
+ assert_equals sell_1.count, 1
241
+ assert_equals sell_1.price, 1000000
242
+ assert_equals sell_1.current_price, 1002500
243
+ assert_equals sell_1.profit_or_loss, -2500
244
+
245
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
246
+ assert_equals buy_1.state, JIJI::Position::STATE_FIXED
247
+ assert_equals buy_1.date, time_1
248
+ assert_equals buy_1.fix_date, time_5
249
+ assert_equals buy_1.count, 1
250
+ assert_equals buy_1.price, 1000500
251
+ assert_equals buy_1.current_price, 1002000
252
+ assert_equals buy_1.profit_or_loss, 1500
253
+
254
+ assert_equals buy_2.sell_or_buy, JIJI::Position::BUY
255
+ assert_equals buy_2.state, JIJI::Position::STATE_FIXED
256
+ assert_equals buy_2.date, time_4
257
+ assert_equals buy_2.fix_date, time_5
258
+ assert_equals buy_2.count, 2
259
+ assert_equals buy_2.price, 2004000
260
+ assert_equals buy_2.current_price, 2004000
261
+ assert_equals buy_2.profit_or_loss, 0
262
+
263
+ assert_equals @operator.profit_or_loss, -1000
264
+ assert_equals @operator.fixed_profit_or_loss, -1000
265
+ assert_equals @operator.positions.length, 0
266
+ assert_equals @operator.win_rate, 1.0/3
267
+
268
+ rates = JIJI::Rates.new( pair_infos, {
269
+ :EURJPY => Rate.new( 100.30,100.35,-200,200,6 )
270
+ })
271
+ @operator.next_rates( rates )
272
+
273
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
274
+ assert_equals sell_1.state, JIJI::Position::STATE_FIXED
275
+ assert_equals sell_1.date, time_1
276
+ assert_equals sell_1.fix_date, time_3
277
+ assert_equals sell_1.count, 1
278
+ assert_equals sell_1.price, 1000000
279
+ assert_equals sell_1.current_price, 1002500
280
+ assert_equals sell_1.profit_or_loss, -2500
281
+
282
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
283
+ assert_equals buy_1.state, JIJI::Position::STATE_FIXED
284
+ assert_equals buy_1.date, time_1
285
+ assert_equals buy_1.fix_date, time_5
286
+ assert_equals buy_1.count, 1
287
+ assert_equals buy_1.price, 1000500
288
+ assert_equals buy_1.current_price, 1002000
289
+ assert_equals buy_1.profit_or_loss, 1500
290
+
291
+ assert_equals buy_2.sell_or_buy, JIJI::Position::BUY
292
+ assert_equals buy_2.state, JIJI::Position::STATE_FIXED
293
+ assert_equals buy_2.date, time_4
294
+ assert_equals buy_2.fix_date, time_5
295
+ assert_equals buy_2.count, 2
296
+ assert_equals buy_2.price, 2004000
297
+ assert_equals buy_2.current_price, 2004000
298
+ assert_equals buy_2.profit_or_loss, 0
299
+
300
+ assert_equals @operator.profit_or_loss, -1000
301
+ assert_equals @operator.fixed_profit_or_loss, -1000
302
+ assert_equals @operator.positions.length, 0
303
+ assert_equals @operator.win_rate, 1.0/3
304
+
305
+ end
306
+
307
+ # stopのテスト。
308
+ def test_stop
309
+
310
+ pair_infos = {
311
+ :EURJPY => Info.new( 10000 )
312
+ }
313
+
314
+ # レートを挿入
315
+ rates = JIJI::Rates.new( pair_infos, {
316
+ :EURJPY => Rate.new( 100.0,100.05,-200,200,1 )
317
+ })
318
+ time_1 = rates.time
319
+ @operator.next_rates( rates )
320
+ assert_equals @operator.profit_or_loss, 0
321
+ assert_equals @operator.positions, {}
322
+
323
+ # 購入
324
+ sell_1 = @operator.sell 1
325
+ buy_1 = @operator.buy 1
326
+
327
+
328
+ # レートを更新
329
+ rates = JIJI::Rates.new( pair_infos, {
330
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,2 )
331
+ })
332
+ @operator.next_rates( rates )
333
+
334
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
335
+ assert_equals sell_1.state, JIJI::Position::STATE_START
336
+ assert_equals sell_1.date, time_1
337
+ assert_equals sell_1.fix_date, nil
338
+ assert_equals sell_1.count, 1
339
+ assert_equals sell_1.price, 1000000
340
+ assert_equals sell_1.current_price, 1001000
341
+ assert_equals sell_1.profit_or_loss, -1000
342
+
343
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
344
+ assert_equals buy_1.state, JIJI::Position::STATE_START
345
+ assert_equals buy_1.date, time_1
346
+ assert_equals buy_1.fix_date, nil
347
+ assert_equals buy_1.count, 1
348
+ assert_equals buy_1.price, 1000500
349
+ assert_equals buy_1.current_price, 1000500
350
+ assert_equals buy_1.profit_or_loss, 0
351
+
352
+ @operator.stop
353
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
354
+ assert_equals sell_1.state, JIJI::Position::STATE_LOST
355
+ assert_equals sell_1.date, time_1
356
+ assert_equals sell_1.fix_date, nil
357
+ assert_equals sell_1.count, 1
358
+ assert_equals sell_1.price, 1000000
359
+ assert_equals sell_1.current_price, 1001000
360
+ assert_equals sell_1.profit_or_loss, -1000
361
+
362
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
363
+ assert_equals buy_1.state, JIJI::Position::STATE_LOST
364
+ assert_equals buy_1.date, time_1
365
+ assert_equals buy_1.fix_date, nil
366
+ assert_equals buy_1.count, 1
367
+ assert_equals buy_1.price, 1000500
368
+ assert_equals buy_1.current_price, 1000500
369
+ assert_equals buy_1.profit_or_loss, 0
370
+
371
+ end
372
+
373
+ # スワップのテスト
374
+ def test_swap
375
+
376
+ pair_infos = {
377
+ :EURJPY => Info.new( 10000 )
378
+ }
379
+
380
+ # レートを挿入
381
+ rates = JIJI::Rates.new( pair_infos, {
382
+ :EURJPY => Rate.new( 100.05,100.10,-200,200, Time.local( 2000, 1, 1, 0, 0, 0 ) )
383
+ }, Time.local( 2000, 1, 1, 0, 0, 0 ))
384
+ @operator.next_rates( rates )
385
+
386
+ # 取引
387
+ sell_1 = @operator.sell 1
388
+ assert_equals sell_1.sell_or_buy, JIJI::Position::SELL
389
+ assert_equals sell_1.price, 1000500
390
+ assert_equals sell_1.current_price, 1001000
391
+ assert_equals sell_1.profit_or_loss, -500
392
+ assert_equals sell_1.swap, 0
393
+
394
+ buy_1 = @operator.buy 1
395
+ assert_equals buy_1.sell_or_buy, JIJI::Position::BUY
396
+ assert_equals buy_1.price, 1001000
397
+ assert_equals buy_1.current_price, 1000500
398
+ assert_equals buy_1.profit_or_loss, -500
399
+ assert_equals buy_1.swap, 0
400
+
401
+
402
+ # レートを更新
403
+ rates = JIJI::Rates.new( pair_infos, {
404
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 1, 3, 59, 59 ) )
405
+ }, Time.local( 2000, 1, 1, 3, 59, 59 ))
406
+ @operator.next_rates( rates )
407
+
408
+ # 時間前なので、スワップは更新されない
409
+ assert_equals sell_1.swap, 0
410
+ assert_equals buy_1.swap, 0
411
+
412
+ # レートを更新
413
+ rates = JIJI::Rates.new( pair_infos, {
414
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 1, 5, 0, 0 ) )
415
+ },Time.local( 2000, 1, 1, 5, 0, 0 ))
416
+ @operator.next_rates( rates )
417
+
418
+ # スワップが+される
419
+ assert_equals sell_1.swap, -200
420
+ assert_equals buy_1.swap, 200
421
+
422
+
423
+ # レートを更新
424
+ rates = JIJI::Rates.new( pair_infos, {
425
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 1, 5, 0, 0 ) )
426
+ },Time.local( 2000, 1, 1, 5, 0, 0 ))
427
+ @operator.next_rates( rates )
428
+
429
+ # スワップはそのまま
430
+ assert_equals sell_1.swap, -200
431
+ assert_equals sell_1.current_price, 1001000
432
+ assert_equals sell_1.profit_or_loss, -700
433
+ assert_equals buy_1.swap, 200
434
+ assert_equals buy_1.current_price, 1000500
435
+ assert_equals buy_1.profit_or_loss, -300
436
+
437
+ # レートを更新
438
+ rates = JIJI::Rates.new( pair_infos, {
439
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 1, 5, 10, 0 ) )
440
+ },Time.local( 2000, 1, 1, 5, 10, 0 ))
441
+ @operator.next_rates( rates )
442
+
443
+ # スワップはそのまま
444
+ assert_equals sell_1.swap, -200
445
+ assert_equals sell_1.current_price, 1001000
446
+ assert_equals sell_1.profit_or_loss, -700
447
+ assert_equals buy_1.swap, 200
448
+ assert_equals buy_1.current_price, 1000500
449
+ assert_equals buy_1.profit_or_loss, -300
450
+
451
+
452
+ # さらに取引
453
+ sell_2 = @operator.sell 1
454
+ assert_equals sell_2.sell_or_buy, JIJI::Position::SELL
455
+ assert_equals sell_2.price, 1000500
456
+ assert_equals sell_2.current_price, 1001000
457
+ assert_equals sell_2.profit_or_loss, -500
458
+ assert_equals sell_2.swap, 0
459
+
460
+
461
+ # レートを更新
462
+ rates = JIJI::Rates.new( pair_infos, {
463
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 1, 12, 0, 0 ) )
464
+ },Time.local( 2000, 1, 1, 12, 0, 0 ))
465
+ @operator.next_rates( rates )
466
+ # スワップはそのまま
467
+ assert_equals sell_1.swap, -200
468
+ assert_equals buy_1.swap, 200
469
+ assert_equals sell_2.swap, 0
470
+
471
+
472
+ # レートを更新
473
+ rates = JIJI::Rates.new( pair_infos, {
474
+ :EURJPY => Rate.new( 100.05,100.10,-200,200,Time.local( 2000, 1, 2, 3, 0, 0 ) )
475
+ },Time.local( 2000, 1, 2, 3, 0, 0 ))
476
+ @operator.next_rates( rates )
477
+ # スワップはそのまま
478
+ assert_equals sell_1.swap, -200
479
+ assert_equals buy_1.swap, 200
480
+ assert_equals sell_2.swap, 0
481
+
482
+ # レートを更新
483
+ rates = JIJI::Rates.new( pair_infos, {
484
+ :EURJPY => Rate.new( 100.05,100.10,-100,100,Time.local( 2000, 1, 2, 5, 0, 10 ) )
485
+ },Time.local( 2000, 1, 2, 5, 0, 10 ))
486
+ @operator.next_rates( rates )
487
+ # スワップも更新される
488
+ assert_equals sell_1.swap, -300
489
+ assert_equals sell_1.current_price, 1001000
490
+ assert_equals sell_1.profit_or_loss, -800
491
+ assert_equals buy_1.swap, 300
492
+ assert_equals buy_1.current_price, 1000500
493
+ assert_equals buy_1.profit_or_loss, -200
494
+ assert_equals sell_2.swap, -100
495
+ assert_equals sell_2.current_price, 1001000
496
+ assert_equals sell_2.profit_or_loss, -600
497
+
498
+ end
499
+
500
+
501
+ end
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $: << "../lib"
4
+
5
+ require 'runit/testcase'
6
+ require 'runit/cui/testrunner'
7
+ require 'jiji/output'
8
+ require 'fileutils'
9
+
10
+ class OutputTest < RUNIT::TestCase
11
+
12
+ def setup
13
+ @dir = File.dirname(__FILE__) + "/OutputTest.tmp"
14
+ FileUtils.mkdir_p @dir
15
+
16
+ @o = JIJI::Output.new( "agent_id", @dir )
17
+ @o.scales = ["30s","1m","1h"]
18
+ @o.agent_name = "エージェント名"
19
+ end
20
+
21
+ def teardown
22
+ FileUtils.rm_rf @dir
23
+ end
24
+
25
+ def test_basic
26
+
27
+ # 書き込み
28
+ out = @o.get( "テスト", :event, { :a=>"aaa", :b=>"bbb" } )
29
+ out2 = @o.get( "テスト2", :graph )
30
+
31
+ assert_equals @o.agent_name, "エージェント名"
32
+ assert_equals out.options, { :a=>"aaa", :b=>"bbb", :name=>"テスト", :type=>"event" }
33
+ assert_equals out2.options, { :name=>"テスト2", :type=>"graph" }
34
+
35
+ @o.time = Time.local(2008, 8, 1, 10, 0, 0)
36
+ out.put( "type", "データ\nデータ" )
37
+ out2.put 100, 110
38
+ @o.time = Time.local(2008, 8, 1, 12, 10, 20)
39
+ out.put( "type2", "データ2\nデータ" )
40
+ out2.put 200, 220
41
+ @o.time = Time.local(2008, 8, 2, 10, 0, 0)
42
+ out.put( "type3", "データ3" )
43
+ @o.time = Time.local(2008, 8, 3, 10, 0, 0)
44
+ out.put( "type4", "データ4" )
45
+ out2.put 10, 20
46
+
47
+ # データの取得
48
+ list = read( out, Time.local(2008), Time.local(2008,8,10) )
49
+ assert_equals list, [
50
+ ["type", "データ\nデータ", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
51
+ ["type2", "データ2\nデータ" , Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
52
+ ["type3", "データ3" , Time.local(2008, 8, 2, 10, 0, 0).to_i.to_s],
53
+ ["type4", "データ4", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
54
+ ]
55
+ list = read( out, nil, nil )
56
+ assert_equals list, [
57
+ ["type", "データ\nデータ", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
58
+ ["type2", "データ2\nデータ" , Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
59
+ ["type3", "データ3" , Time.local(2008, 8, 2, 10, 0, 0).to_i.to_s],
60
+ ["type4", "データ4", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
61
+ ]
62
+ list = read( out, Time.local(2008, 8, 1, 12, 10, 0), Time.local(2008, 8, 3, 0, 0, 0) )
63
+ assert_equals list, [
64
+ ["type2", "データ2\nデータ" , Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
65
+ ["type3", "データ3" , Time.local(2008, 8, 2, 10, 0, 0).to_i.to_s]
66
+ ]
67
+ list = read( out, Time.local(2008, 8, 2, 9, 10, 0), nil )
68
+ assert_equals list, [
69
+ ["type3", "データ3" , Time.local(2008, 8, 2, 10, 0, 0).to_i.to_s],
70
+ ["type4", "データ4", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
71
+ ]
72
+ list = read( out, nil, Time.local(2008, 8, 2, 9, 10, 0) )
73
+ assert_equals list, [
74
+ ["type", "データ\nデータ", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
75
+ ["type2", "データ2\nデータ" , Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s]
76
+ ]
77
+ list = read( out, Time.local(2008, 9, 2, 12, 10, 0), Time.local(2008, 9, 2, 13, 10, 0) )
78
+ assert_equals list, []
79
+
80
+
81
+ list = read( out2, Time.local(2008), Time.local(2008,8,10) )
82
+ assert_equals list, [
83
+ ["100", "110", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
84
+ ["200", "220", Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
85
+ ["10" , "20", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
86
+ ]
87
+ list = read( out2, nil, nil )
88
+ assert_equals list, [
89
+ ["100", "110", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
90
+ ["200", "220", Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
91
+ ["10" , "20", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
92
+ ]
93
+ list = read( out2, Time.local(2008, 8, 1, 12, 10, 0), Time.local(2008, 8, 3, 0, 0, 0) )
94
+ assert_equals list, [
95
+ ["200", "220", Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s]
96
+ ]
97
+ list = read( out2, Time.local(2008, 8, 2, 9, 10, 0), nil )
98
+ assert_equals list, [
99
+ ["10" , "20", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
100
+ ]
101
+ list = read( out2, nil, Time.local(2008, 8, 2, 9, 10, 0) )
102
+ assert_equals list, [
103
+ ["100", "110", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
104
+ ["200", "220", Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s]
105
+ ]
106
+ list = read( out2, Time.local(2008, 8, 1, 13, 10, 0), Time.local(2008, 8, 1, 13, 10, 0) )
107
+ assert_equals list, []
108
+
109
+
110
+ # 出力先一覧
111
+ @o.each {|k, v|
112
+ case k
113
+ when "テスト"
114
+ assert_equals v, out
115
+ when "テスト2"
116
+ assert_equals v, out2
117
+ else
118
+ fail
119
+ end
120
+ }
121
+
122
+ # 出力先を再取得 # 同じインスタンスが返される
123
+ assert_equals out.object_id, @o.get( "テスト", :event ).object_id
124
+ assert_equals out2.object_id, @o.get( "テスト2", :event ).object_id
125
+
126
+ #プロパティの更新
127
+ assert_equals out.options, { :a=>"aaa", :b=>"bbb", :name=>"テスト", :type=>"event" }
128
+ assert_equals out2.options, { :name=>"テスト2", :type=>"graph" }
129
+
130
+ out.set_properties( {:x=>"xxx", "a"=>"abc"} ) # 文字列をキーにしてもto_symされたものがキーにされる。
131
+ out2.set_properties( {:y=>"yyy", :a=>"ab"} )
132
+
133
+ assert_equals out.options, {:x=>"xxx", :a=>"abc", :b=>"bbb", :name=>"テスト", :type=>"event" }
134
+ assert_equals out2.options, { :y=>"yyy", :a=>"ab", :name=>"テスト2", :type=>"graph" }
135
+
136
+ #名前の更新
137
+ @o.agent_name = "エージェント名2"
138
+ assert_equals @o.agent_name, "エージェント名2"
139
+
140
+ # 再作成 # 既存のデータがロードされる
141
+ @o = JIJI::Output.new( "agent_id", @dir )
142
+ list = read( @o.get("テスト"), nil, nil )
143
+ assert_equals list, [
144
+ ["type", "データ\nデータ", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
145
+ ["type2", "データ2\nデータ" , Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
146
+ ["type3", "データ3" , Time.local(2008, 8, 2, 10, 0, 0).to_i.to_s],
147
+ ["type4", "データ4", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
148
+ ]
149
+ list = read( @o.get("テスト2"), nil, nil )
150
+ assert_equals list, [
151
+ ["100", "110", Time.local(2008, 8, 1, 10, 0, 0).to_i.to_s],
152
+ ["200", "220", Time.local(2008, 8, 1, 12, 10, 20).to_i.to_s],
153
+ ["10" , "20", Time.local(2008, 8, 3, 10, 0, 0).to_i.to_s]
154
+ ]
155
+ assert_equals @o.agent_name, "エージェント名2"
156
+ assert_equals @o.get("テスト").options, {:x=>"xxx", :a=>"abc", :b=>"bbb", :name=>"テスト", :type=>"event" }
157
+ assert_equals @o.get("テスト2").options, { :y=>"yyy", :a=>"ab", :name=>"テスト2", :type=>"graph" }
158
+ @o.each {|k, v|
159
+ case k
160
+ when "テスト"
161
+ assert_equals v, @o.get("テスト")
162
+ when "テスト2"
163
+ assert_equals v, @o.get("テスト2")
164
+ else
165
+ fail
166
+ end
167
+ }
168
+ end
169
+
170
+ def read( out, start_date, end_date, scale=:raw )
171
+ list = []
172
+ out.each( scale, start_date, end_date ) {|row| list << row }
173
+ return list
174
+ end
175
+ end