unageanu-jiji 0.1.0 → 1.0.0

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 (61) hide show
  1. data/README +1 -0
  2. data/base/agents/moving_average_agent.rb +78 -0
  3. data/base/shared_lib/moving_average.rb +34 -0
  4. data/bin/jiji +5 -0
  5. data/html/css/default.css +7 -0
  6. data/html/img/button_calendar_over.gif +0 -0
  7. data/html/img/button_cancel.gif +0 -0
  8. data/html/img/button_no.gif +0 -0
  9. data/html/img/button_no_gray.gif +0 -0
  10. data/html/img/button_no_over.gif +0 -0
  11. data/html/img/button_save.gif +0 -0
  12. data/html/img/button_save_gray.gif +0 -0
  13. data/html/img/button_save_over.gif +0 -0
  14. data/html/img/button_update_s.gif +0 -0
  15. data/html/img/button_update_s_gray.gif +0 -0
  16. data/html/img/button_update_s_over.gif +0 -0
  17. data/html/img/button_yes.gif +0 -0
  18. data/html/img/button_yes_gray.gif +0 -0
  19. data/html/img/button_yes_over.gif +0 -0
  20. data/html/index.html +29 -33
  21. data/html/js/agent-editor-page.js +178 -88
  22. data/html/js/agent-selector.js +68 -39
  23. data/html/js/bt-create-page.js +24 -11
  24. data/html/js/dialog.js +43 -34
  25. data/html/js/result-page.js +37 -25
  26. data/html/js/rt-setting-page.js +13 -6
  27. data/html/js/sidebar.js +8 -5
  28. data/html/js/templates.js +37 -3
  29. data/html/js/utils.js +47 -9
  30. data/html/swf/chart.swf +0 -0
  31. data/lib/jiji/agent/agent_manager.rb +2 -2
  32. data/lib/jiji/agent/agent_registry.rb +4 -1
  33. data/lib/jiji/command.rb +6 -0
  34. data/lib/jiji/process.rb +32 -10
  35. data/lib/jiji/process_manager.rb +7 -0
  36. data/lib/jiji/registry.rb +6 -4
  37. data/lib/jiji/server.rb +6 -1
  38. data/lib/jiji/service/output_service.rb +10 -6
  39. data/swf/chart/fx/chart/Chart.as +4 -1
  40. data/swf/chart/fx/chart/ui/Constants.as +3 -3
  41. data/swf/chart/fx/chart/ui/InformationWindow.as +45 -41
  42. data/swf/chart/fx/chart/ui/Pointer.as +6 -4
  43. data/swf/chart/fx/chart/ui/Scroll.as +3 -2
  44. data/swf/chart/fx/chart/ui/Stage.as +3 -3
  45. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +9 -8
  46. data/swf/chart/fx/chart/ui/TradeResult.as +3 -17
  47. data/swf/chart/fx/chart/ui/graph/Graph.as +4 -2
  48. data/swf/chart/fx/chart/ui/graph/GraphManager.as +3 -1
  49. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  50. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  51. data/swf/chart/fx/net/StubFactory.as +3 -3
  52. data/test/all_tests.rb +1 -1
  53. data/test/test_AgentManager.rb +4 -4
  54. data/test/{test_AgentRegistory.rb → test_AgentRegistry.rb} +0 -0
  55. data/test/test_Collector.rb +1 -1
  56. data/test/test_Output_registry.rb +7 -3
  57. data/test/test_Process.rb +5 -5
  58. data/test/test_ProcessManager.rb +120 -68
  59. metadata +20 -14
  60. data/bin/jiji.rb +0 -6
  61. data/html/js/W3CDTF.js +0 -131
data/README CHANGED
@@ -0,0 +1 @@
1
+ see http://unageanu.sakura.ne.jp/jiji
@@ -0,0 +1,78 @@
1
+ #
2
+ # 移動平均を使うエージェント。
3
+ # -ゴールデンクロスで買い。
4
+ # -デッドクロスで売り。
5
+ #
6
+ class MovingAverageAgent < JIJI::PeriodicallyAgent
7
+
8
+ # エージェントの説明
9
+ def description
10
+ <<-STR
11
+ 移動平均を使うエージェントです。
12
+ -ゴールデンクロスで買い&売り建て玉をコミット。
13
+ -デッドクロスで売り&買い建て玉をコミット。
14
+ STR
15
+ end
16
+
17
+ # エージェントを初期化する。
18
+ def init
19
+ # 移動平均の算出クラス
20
+ # 共有ライブラリのクラスを利用。(JIJI::Agent::Sharedモジュールに定義される。)
21
+ @mvs = [
22
+ JIJI::Agent::Shared::MovingAverage.new(@short),
23
+ JIJI::Agent::Shared::MovingAverage.new(@long)
24
+ ]
25
+ @prev_state = nil
26
+
27
+ # 移動平均をグラフで表示するためのOutput
28
+ @out = output.get( "移動平均線", :graph, {
29
+ :column_count=>2, # データ数は2
30
+ :graph_type=>:rate, # レートにあわせる形式で表示
31
+ :colors=>["#779999","#557777"] # デフォルトのグラフの色
32
+ } )
33
+ end
34
+
35
+ # 次のレートを受け取る
36
+ def next_period_rates( rates )
37
+
38
+ # 移動平均を計算
39
+ res = @mvs.map{|mv| mv.next_rate( rates[:EURJPY].bid ) }
40
+
41
+ return if ( !res[0] || !res[1])
42
+
43
+ # グラフに出力
44
+ @out.put( *res )
45
+
46
+ # ゴールデンクロス/デッドクロスを判定
47
+ state = res[0] > res[1] ? :high : :low
48
+ if ( @prev_state && @prev_state != state )
49
+ if state == :high
50
+ # ゴールデンクロス
51
+ # 売り建玉があれば全て決済
52
+ operator.positions.each_pair {|k,p|
53
+ operator.commit(p) if p.sell_or_buy == JIJI::Position::SELL
54
+ }
55
+ # 新規に買い
56
+ operator.buy 1
57
+ else
58
+ # デッドクロス
59
+ # 買い建玉があれば全て決済
60
+ operator.positions.each_pair {|k,p|
61
+ operator.commit(p) if p.sell_or_buy == JIJI::Position::BUY
62
+ }
63
+ # 新規に売り
64
+ operator.sell 1
65
+ end
66
+ end
67
+ @prev_state = state
68
+ end
69
+
70
+ # UIから設定可能なプロパティの一覧を返す。
71
+ def property_infos
72
+ super().concat [
73
+ Property.new( "short", "短期移動平均線", 25, :number ),
74
+ Property.new( "long", "長期移動平均線", 75, :number )
75
+ ]
76
+ end
77
+
78
+ end
@@ -0,0 +1,34 @@
1
+ # 一定期間の移動平均を得る
2
+ class MovingAverage
3
+ def initialize( range=25 )
4
+ @rates = [] # レートを記録するバッファ
5
+ @range = range
6
+ end
7
+
8
+ def next_rate( rate )
9
+ # バッファのデータを更新
10
+ @rates.push rate
11
+ @rates.shift if @rates.length > @range
12
+
13
+ # バッファサイズが十分でなければ、nilを返す。
14
+ return nil if @rates.length != @range
15
+
16
+ # 移動平均を算出
17
+ return MovingAverage.get_moving_average(@rates)
18
+ end
19
+
20
+ # 前の結果(引数で指定した件数だけ記録。)
21
+ attr :prev, true
22
+
23
+ private
24
+ # 移動平均値を計算する。
25
+ def self.get_moving_average( rates )
26
+ total = 0
27
+ rates.each {|s|
28
+ total += s.end
29
+ total += s.max
30
+ total += s.min
31
+ }
32
+ return total / ( rates.length * 3 )
33
+ end
34
+ end
data/bin/jiji ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'jiji/command'
5
+ JIJI::Command.new.run( ARGV )
data/html/css/default.css CHANGED
@@ -262,6 +262,7 @@ div.button {
262
262
  float: left;
263
263
  margin-right: 10px;
264
264
  }
265
+ div.button * { font-size: 0px; }
265
266
 
266
267
  /* white line -------------------------------------------------------------- */
267
268
  div.wl {
@@ -280,6 +281,12 @@ div.wl {
280
281
  background-position: 0px 3px;
281
282
  margin-bottom: 5px;
282
283
  }
284
+ #agent_edit_msg {
285
+ margin: 10px 0px 0px 0px;
286
+ padding: 10px;
287
+ border: 1px dotted #999999;
288
+ width:480px;
289
+ }
283
290
 
284
291
  div.agent-property-editor {
285
292
  padding: 10px 10px 10px 20px;
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/html/index.html CHANGED
@@ -61,20 +61,20 @@
61
61
  <div id="hesder">
62
62
  <!-- ロゴとメッセージ表示領域 -->
63
63
  <div style="float:right;margin:10px 20px 0px 0px;">
64
- <img id="head_trade_enable" src="./img/auto_trade_off.gif" alt="自動取引" />
64
+ <img id="head_trade_enable" src="./img/auto_trade_off.gif" alt="自動取引" title="自動取引" />
65
65
  </div>
66
66
  </div>
67
67
  <div id="body">
68
68
  <div id="left">
69
69
  <!-- メニュー -->
70
70
  <div class="menu-container">
71
- <div class="menu-1"><img src="./img/sidebar_rt.png" alt="リアルトレード" /></div>
71
+ <div class="menu-1"><img src="./img/sidebar_rt.png" alt="リアルトレード" title="リアルトレード" /></div>
72
72
  <div class="menu-2 menu" id="sidebar_result_rmt" alt="状態を見る" style="width:178px"></div>
73
73
  <div class="menu-2 menu" id="sidebar_rt_setting" alt="設定" style="width:178px"></div>
74
74
  </div>
75
75
 
76
76
  <div class="menu-container">
77
- <div class="menu-1"><img src="./img/sidebar_agent.png" alt="エージェント" /></div>
77
+ <div class="menu-1"><img src="./img/sidebar_agent.png" alt="エージェント" title="エージェント" /></div>
78
78
  <div class="menu-2 menu" id="sidebar_agent_edit_agent" alt="エージェントの編集" style="width:178px">
79
79
  </div>
80
80
  <div class="menu-2 menu" id="sidebar_agent_edit_shared_lib" alt="共有ライブラリの編集" style="width:178px">
@@ -82,11 +82,11 @@
82
82
  </div>
83
83
 
84
84
  <div class="menu-container">
85
- <div class="menu-1"><img src="./img/sidebar_bt.png" alt="バックテスト" /></div>
85
+ <div class="menu-1"><img src="./img/sidebar_bt.png" alt="バックテスト" title="バックテスト" /></div>
86
86
  <div class="menu-2 menu" id="sidebar_bt_create" alt="新規作成" style="width:178px">
87
87
  </div>
88
88
  <div class="menu-2">
89
- <img src="./img/sidebar_bt_result.png" alt="テスト結果をみる" style="width:178px"/>
89
+ <img src="./img/sidebar_bt_result.png" alt="テスト結果をみる" title="テスト結果をみる" style="width:178px"/>
90
90
  <div id="back-tests" style="margin-top:5px;">
91
91
  </div>
92
92
  </div>
@@ -162,7 +162,7 @@
162
162
  <div class="breaker"></div>
163
163
  </div>
164
164
  <div class="separator" style="width:620px;"></div>
165
- <div><img src="./img/h3_result_0.gif" alt="統計" /></div>
165
+ <div><img src="./img/h3_result_0.gif" alt="統計" title="統計" /></div>
166
166
  <div class="wl" style="width:620px;"></div>
167
167
  <div id="subpage-trade_summary" >
168
168
  </div>
@@ -170,7 +170,7 @@
170
170
  </div>
171
171
  <div style="margin-left:10px;">
172
172
  <div style="width:620px;">
173
- <div style="margin-top:20px;"><img src="./img/h3_result_1.gif" alt="エージェントごとの統計" /></div>
173
+ <div style="margin-top:20px;"><img src="./img/h3_result_1.gif" alt="エージェントごとの統計" title="エージェントごとの統計" /></div>
174
174
  <div class="wl" style="width:620px;"></div>
175
175
  </div>
176
176
  </div>
@@ -183,7 +183,7 @@
183
183
  </div>
184
184
  <div style="margin-left:10px;">
185
185
  <div style="width:620px;">
186
- <div style="margin-top:20px;"><img src="./img/h3_result_2.gif" alt="取引一覧" /></div>
186
+ <div style="margin-top:20px;"><img src="./img/h3_result_2.gif" alt="取引一覧" title="取引一覧" /></div>
187
187
  <div class="wl" style="width:620px;"></div>
188
188
  </div>
189
189
  </div>
@@ -198,13 +198,13 @@
198
198
  <div class="page" id="subpage-info">
199
199
  <div style="margin-left:10px;" >
200
200
  <div id="subpage-info_info">
201
- <div><img src="./img/h3_result_3.gif" alt="設定" /></div>
201
+ <div><img src="./img/h3_result_3.gif" alt="設定" title="設定" /></div>
202
202
  <div class="wl" style="width:620px;"></div>
203
203
  <div id="subpage-info_info-values" style="margin: 10px 0px 15px 0px;">
204
204
  </div>
205
205
  </div>
206
206
 
207
- <div><img src="./img/h3_result_4.gif" alt="エージェント" /></div>
207
+ <div><img src="./img/h3_result_4.gif" alt="エージェント" title="エージェント" /></div>
208
208
  <div class="wl" style="width:620px;"></div>
209
209
  </div>
210
210
  <div id="subpage-info_as">
@@ -230,7 +230,7 @@
230
230
  <div class="page" id="subpage-log" style="margin-left:10px;" >
231
231
  <div style="width:620px;">
232
232
  <div style="float: left;">
233
- <div><img src="./img/h3_result_5.gif" alt="ログ" /></div>
233
+ <div><img src="./img/h3_result_5.gif" alt="ログ" title="ログ" /></div>
234
234
  <div class="wl" style="width:450px;"></div>
235
235
  </div>
236
236
  <div style="float: right;">
@@ -243,7 +243,7 @@
243
243
  </div>
244
244
  <div class="page" id="subpage-graph" style="margin-left:10px;" >
245
245
  <div style="width:620px;">
246
- <div><img src="./img/h3_result_6.gif" alt="グラフの表示設定" /></div>
246
+ <div><img src="./img/h3_result_6.gif" alt="グラフの表示設定" title="グラフの表示設定" /></div>
247
247
  <div class="wl" style="width:620px;"></div>
248
248
  <div class="desc" style="margin-top:10px;" >
249
249
  ※ローソク足チャートで表示するグラフを設定します。
@@ -268,7 +268,7 @@
268
268
  <div class="separator" style="width:780px;margin-left:10px;"></div>
269
269
 
270
270
  <div style="margin-left:10px;">
271
- <div style="margin-top:20px;" ><img src="./img/h3_rt-setting_0.gif" alt="自動取引の設定" /></div>
271
+ <div style="margin-top:20px;" ><img src="./img/h3_rt-setting_0.gif" alt="自動取引の設定" title="自動取引の設定" /></div>
272
272
  <div class="wl" style="margin-right:10px;width:780px;"></div>
273
273
  <div style="margin: 10px 0px 0px 20px;">
274
274
  <form id="rt-setting_form" name="rt-setting_form" action="javascript:void(0);" >
@@ -286,7 +286,7 @@
286
286
  </div>
287
287
 
288
288
  <div style="margin-left:10px;margin-bottom:10px;">
289
- <div style="margin-top:30px;" ><img src="./img/h3_rt-setting_1.gif" alt="エージェント" /></div>
289
+ <div style="margin-top:30px;" ><img src="./img/h3_rt-setting_1.gif" alt="エージェント" title="エージェント" /></div>
290
290
  <div class="wl" style="margin-right:10px;width:780px;"></div>
291
291
  <div class="desc" style="margin-top:10px;" >※自動取引で動作させるエージェントを選択します。</div>
292
292
  </div>
@@ -319,6 +319,8 @@
319
319
 
320
320
  <!-- エージェント - 新規作成/編集 -->
321
321
  <div class="page" id="page-agent-edit" style="margin-left:10px;margin-top:10px;">
322
+ <div id="agent_edit_desc" class="desc" style="margin:10px;clear:both;" >
323
+ </div>
322
324
  <div style="float:left;">
323
325
  <div style="margin-left:9px;">
324
326
  <div id="agent-edit_add" class="button"></div>
@@ -338,8 +340,16 @@
338
340
 
339
341
  <div style="float:right;">
340
342
  <div style="margin-left:10px;">
341
- <div id="agent-editor-file-name">-</div>
342
- <div class="wl" style="margin-right:10px;width:500px;"></div>
343
+ <div>
344
+ <div style="float: left;width:370px;">
345
+ <div id="agent-editor-file-name">-</div>
346
+ <div class="wl" style="margin-right:10px;width:370px;"></div>
347
+ </div>
348
+ <div id="agent-edit_save" class="button" style="margin-left:10px;" ></div>
349
+ <div class="breaker"></div>
350
+ </div>
351
+ <div id="agent_edit_msg" class="agent_edit_msg" >
352
+ </div>
343
353
  </div>
344
354
  <div class="panel_500">
345
355
  <div class="panel_top"></div>
@@ -366,7 +376,7 @@
366
376
  <div class="separator" style="width:780px;margin-left:10px;"></div>
367
377
 
368
378
  <div style="margin-left:10px;">
369
- <div style="margin-top:20px;" ><img src="./img/h3_bt-create_0.gif" alt="テストの名前とメモ" /></div>
379
+ <div style="margin-top:20px;" ><img src="./img/h3_bt-create_0.gif" alt="テストの名前とメモ" title="テストの名前とメモ" /></div>
370
380
  <div class="wl" style="margin-right:10px;width:780px;"></div>
371
381
  <div class="desc" style="margin-top:10px;" >※バックテストの名前を設定します。メモとして任意のテキストを残すこともできます。</div>
372
382
  <div style="margin: 10px 0px 0px 0px;">
@@ -391,7 +401,7 @@
391
401
  </div>
392
402
 
393
403
  <div style="margin-left:10px;">
394
- <div style="margin-top:20px;" ><img src="./img/h3_bt-create_1.gif" alt="期間" /></div>
404
+ <div style="margin-top:20px;" ><img src="./img/h3_bt-create_1.gif" alt="期間" title="期間" /></div>
395
405
  <div class="wl" style="margin-right:10px;width:780px;"></div>
396
406
  <div class="desc" style="margin:10px 0px 0px 0px;" >
397
407
  ※テストする期間を設定します。日付を直接入力するか、カレンダーから選択して下さい。<br/>
@@ -419,7 +429,7 @@
419
429
  </div>
420
430
 
421
431
  <div style="margin-left:10px;margin-bottom:10px;">
422
- <div style="margin-top:30px;" ><img src="./img/h3_bt-create_2.gif" alt="エージェント" /></div>
432
+ <div style="margin-top:30px;" ><img src="./img/h3_bt-create_2.gif" alt="エージェント" title="エージェント" /></div>
423
433
  <div class="wl" style="margin-right:10px;width:780px;"></div>
424
434
  <div class="desc" style="margin-top:10px;" >※バックテストで動作させるエージェントを選択します。</div>
425
435
  </div>
@@ -450,20 +460,6 @@
450
460
  </div>
451
461
  </div>
452
462
 
453
- <!-- バックテスト - 結果を見る -->
454
- <div class="page" id="page-bt-result">
455
- <!--
456
- - チャート
457
- - タブ
458
- - 取引結果一覧
459
- - エージェント
460
- - エラーログ
461
- -
462
- - 「再実行する」
463
- -->
464
- </div>
465
-
466
-
467
463
  </div>
468
464
  <div class="breaker"></div>
469
465
  </div>