clickclient 0.0.1
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.
- data/History.txt +4 -0
- data/License.txt +57 -0
- data/README.txt +34 -0
- data/example/example_use_localserver.rb +202 -0
- data/lib/clickclient/common.rb +208 -0
- data/lib/clickclient/fx.rb +992 -0
- data/lib/clickclient/version.rb +9 -0
- data/lib/clickclient.rb +4 -0
- data/test/alltests.rb +6 -0
- data/test/connect_test_fx.rb +728 -0
- data/test/test_base.rb +61 -0
- data/test/test_helper.rb +2 -0
- metadata +69 -0
@@ -0,0 +1,728 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
require "runit/testcase"
|
4
|
+
|
5
|
+
#clickclientのテスト。
|
6
|
+
#約定なしに試せる機能(決済、建玉一覧、約定一覧以外の機能)のテストを実際のサーバーに接続し行う。
|
7
|
+
#実行時にユーザー名/パスワードを引数で指定すること。
|
8
|
+
#
|
9
|
+
# ruby connect_test_fx.rb <CLICK証券のユーザー名> <CLICK証券のパスワード>
|
10
|
+
#
|
11
|
+
class ClickClient_FxTest < RUNIT::TestCase
|
12
|
+
|
13
|
+
# ユーザー名
|
14
|
+
USER_NAME = ARGV[0]
|
15
|
+
# パスワード
|
16
|
+
PASSWORD = ARGV[1]
|
17
|
+
|
18
|
+
#待ち時間。
|
19
|
+
#注文変更後、即座に一覧を取得すると変更中の場合があるため、一定時間待つ。
|
20
|
+
WAIT = 5
|
21
|
+
|
22
|
+
CURRENCY_PAIRS = [
|
23
|
+
ClickClient::FX::USDJPY, ClickClient::FX::EURJPY, ClickClient::FX::GBPJPY,
|
24
|
+
ClickClient::FX::AUDJPY, ClickClient::FX::NZDJPY, ClickClient::FX::CADJPY,
|
25
|
+
ClickClient::FX::CHFJPY, ClickClient::FX::ZARJPY, ClickClient::FX::EURUSD,
|
26
|
+
ClickClient::FX::GBPUSD, ClickClient::FX::AUDUSD, ClickClient::FX::EURCHF,
|
27
|
+
ClickClient::FX::GBPCHF, ClickClient::FX::USDCHF]
|
28
|
+
|
29
|
+
def setup
|
30
|
+
@client = ClickClient::Client.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def teardown
|
34
|
+
end
|
35
|
+
|
36
|
+
# 通貨ペア一覧取得のテスト
|
37
|
+
def test_list_currency_pairs
|
38
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
39
|
+
# 全一覧取得
|
40
|
+
list = fx.list_currency_pairs
|
41
|
+
CURRENCY_PAIRS.each {|code|
|
42
|
+
info = list[code]
|
43
|
+
assert_valid_currency_pair( info, code )
|
44
|
+
}
|
45
|
+
|
46
|
+
# ClickClient::FX::EURJPY, ClickClient::FX::CADJPY, ClickClient::FX::AUDUSDを取得
|
47
|
+
list = fx.list_currency_pairs( [ClickClient::FX::EURJPY, ClickClient::FX::CADJPY, ClickClient::FX::AUDUSD] )
|
48
|
+
assert_equals list.size, 3
|
49
|
+
assert_valid_currency_pair( list[ClickClient::FX::EURJPY], ClickClient::FX::EURJPY )
|
50
|
+
assert_valid_currency_pair( list[ClickClient::FX::CADJPY], ClickClient::FX::CADJPY )
|
51
|
+
assert_valid_currency_pair( list[ClickClient::FX::AUDUSD], ClickClient::FX::AUDUSD )
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
# 現在のレート一覧取得のテスト
|
56
|
+
def test_list_rates
|
57
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
58
|
+
list = fx.list_rates
|
59
|
+
CURRENCY_PAIRS.each {|code|
|
60
|
+
info = list[code]
|
61
|
+
assert_valid_rate( info, code )
|
62
|
+
}
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
# お知らせ一覧取得のテスト
|
67
|
+
def test_list_messages
|
68
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
69
|
+
list = fx.list_messages
|
70
|
+
list.each {|msg|
|
71
|
+
assert_not_nil msg.text
|
72
|
+
assert_not_nil msg.title
|
73
|
+
}
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
# 約定一覧取得のテスト
|
78
|
+
def test_list_execution_results
|
79
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
80
|
+
now = DateTime.now
|
81
|
+
|
82
|
+
# 範囲指定のみ
|
83
|
+
list = fx.list_execution_results now - 100, now
|
84
|
+
list.each {|execution_result|
|
85
|
+
assert_valid_execution_result( execution_result )
|
86
|
+
}
|
87
|
+
|
88
|
+
# 範囲指定、種別、通貨ペアコードを指定
|
89
|
+
list = fx.list_execution_results now - 100, now, ClickClient::FX::TRADE_TYPE_SETTLEMENT, ClickClient::FX::ZARJPY
|
90
|
+
list.each {|execution_result|
|
91
|
+
assert_valid_execution_result( execution_result )
|
92
|
+
}
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
# 余力情報取得のテスト
|
97
|
+
def test_get_margin
|
98
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
99
|
+
margin = fx.get_margin
|
100
|
+
assert_not_nil margin.margin
|
101
|
+
assert_not_nil margin.transferable_money_amount
|
102
|
+
assert_not_nil margin.guarantee_money_status
|
103
|
+
assert_not_nil margin.guarantee_money_maintenance_ratio
|
104
|
+
assert_not_nil margin.market_value
|
105
|
+
assert_not_nil margin.appraisal_profit_or_loss_of_open_interest
|
106
|
+
assert_not_nil margin.balance_in_account
|
107
|
+
assert_not_nil margin.balance_of_cach
|
108
|
+
assert_not_nil margin.settlement_profit_or_loss_of_today
|
109
|
+
assert_not_nil margin.settlement_profit_or_loss_of_next_business_day
|
110
|
+
assert_not_nil margin.settlement_profit_or_loss_of_next_next_business_day
|
111
|
+
assert_not_nil margin.swap_profit_or_loss
|
112
|
+
assert_not_nil margin.freezed_guarantee_money
|
113
|
+
assert_not_nil margin.required_guarantee_money
|
114
|
+
assert_not_nil margin.ordered_guarantee_money
|
115
|
+
margin.guarantee_money_list.each{|g|
|
116
|
+
assert_not_nil g.currency_pair_code
|
117
|
+
assert_not_nil g.guarantee_money
|
118
|
+
}
|
119
|
+
}
|
120
|
+
end
|
121
|
+
|
122
|
+
# 通常注文の発注、変更、キャンセルのテスト
|
123
|
+
def test_basic_order
|
124
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
125
|
+
list = fx.list_rates
|
126
|
+
|
127
|
+
# 注文
|
128
|
+
result = fx.order( ClickClient::FX::USDJPY, ClickClient::FX::BUY, 1, {
|
129
|
+
:rate=>list[ClickClient::FX::USDJPY].ask_rate - 5, # ask-5円で注文。5円急落しないと約定しないので大丈夫?
|
130
|
+
:execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
|
131
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_TODAY
|
132
|
+
})
|
133
|
+
assert_not_nil result.order_no
|
134
|
+
order_no = result.order_no
|
135
|
+
begin
|
136
|
+
|
137
|
+
# 注文確認
|
138
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::USDJPY)
|
139
|
+
order = orders[order_no]
|
140
|
+
assert_equals order.order_no, result.order_no
|
141
|
+
assert_equals order.enable_change_or_cancel, true
|
142
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
143
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
144
|
+
assert_equals order.trade_quantity, 10000 # USDJPNなので1万単位
|
145
|
+
assert_equals order.rate, list[ClickClient::FX::USDJPY].ask - 5
|
146
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
147
|
+
assert_not_nil order.date
|
148
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_TODAY
|
149
|
+
assert_nil order.expiration_date
|
150
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
151
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
152
|
+
assert_nil order.settlement_rate
|
153
|
+
assert_nil order.settlement_date
|
154
|
+
|
155
|
+
#注文変更
|
156
|
+
new_rate = list[ClickClient::FX::USDJPY].ask_rate - 5.01
|
157
|
+
fx.edit_order( order_no, {
|
158
|
+
:rate=>new_rate,
|
159
|
+
:execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
|
160
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_WEEK_END
|
161
|
+
})
|
162
|
+
sleep WAIT
|
163
|
+
|
164
|
+
# 注文確認
|
165
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::USDJPY)
|
166
|
+
order = orders[order_no]
|
167
|
+
assert_equals order.order_no, result.order_no
|
168
|
+
assert_equals order.enable_change_or_cancel, true
|
169
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
170
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
171
|
+
assert_equals order.trade_quantity, 10000 # USDJPNなので1万単位
|
172
|
+
assert_equals order.rate.to_s, new_rate.to_s
|
173
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
174
|
+
assert_not_nil order.date
|
175
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_WEEK_END
|
176
|
+
assert_nil order.expiration_date
|
177
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
178
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
179
|
+
assert_nil order.settlement_rate
|
180
|
+
assert_nil order.settlement_date
|
181
|
+
|
182
|
+
ensure
|
183
|
+
# キャンセル
|
184
|
+
fx.cancel_order order_no
|
185
|
+
|
186
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::USDJPY)
|
187
|
+
order = orders[order_no]
|
188
|
+
assert_equals order.order_no, result.order_no
|
189
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
190
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
191
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
192
|
+
assert_equals order.trade_quantity, 10000 # USDJPNなので1万単位
|
193
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::USDJPY].ask_rate - 5.01).to_s
|
194
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
195
|
+
assert_not_nil order.date
|
196
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_WEEK_END
|
197
|
+
assert_nil order.expiration_date
|
198
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
199
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
200
|
+
assert_nil order.settlement_rate
|
201
|
+
assert_nil order.settlement_date
|
202
|
+
end
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
# OCO注文の発注、変更、キャンセルのテスト
|
207
|
+
def test_oco_order
|
208
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
209
|
+
list = fx.list_rates
|
210
|
+
|
211
|
+
# 注文
|
212
|
+
limit_date = DateTime.now + 5
|
213
|
+
expect_limit = DateTime.new( limit_date.year, limit_date.mon, limit_date.day, limit_date.hour )
|
214
|
+
|
215
|
+
result = fx.order( ClickClient::FX::EURJPY, ClickClient::FX::BUY, 1, {
|
216
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate - 5,
|
217
|
+
:stop_order_rate=>list[ClickClient::FX::EURJPY].ask_rate + 5,
|
218
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
219
|
+
:expiration_date=>limit_date
|
220
|
+
})
|
221
|
+
assert_not_nil result.limit_order_no
|
222
|
+
limit_order_no = result.limit_order_no
|
223
|
+
stop_order_no = result.stop_order_no
|
224
|
+
begin
|
225
|
+
|
226
|
+
# 注文確認
|
227
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
228
|
+
order = orders[limit_order_no]
|
229
|
+
assert_equals order.order_no, result.limit_order_no
|
230
|
+
assert_equals order.enable_change_or_cancel, true
|
231
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
232
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
233
|
+
assert_equals order.trade_quantity, 10000
|
234
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5).to_s
|
235
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
236
|
+
assert_not_nil order.date
|
237
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
238
|
+
assert_equals order.expiration_date, expect_limit
|
239
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
240
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
241
|
+
assert_nil order.settlement_rate
|
242
|
+
assert_nil order.settlement_date
|
243
|
+
|
244
|
+
order = orders[stop_order_no]
|
245
|
+
assert_equals order.order_no, result.stop_order_no
|
246
|
+
assert_equals order.enable_change_or_cancel, true
|
247
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
248
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
249
|
+
assert_equals order.trade_quantity, 10000
|
250
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 5).to_s
|
251
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
252
|
+
assert_not_nil order.date
|
253
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
254
|
+
assert_equals order.expiration_date, expect_limit
|
255
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
256
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
257
|
+
assert_nil order.settlement_rate
|
258
|
+
assert_nil order.settlement_date
|
259
|
+
|
260
|
+
#注文変更
|
261
|
+
limit_date = DateTime.now + 6
|
262
|
+
expect_limit = DateTime.new( limit_date.year, limit_date.mon, limit_date.day, limit_date.hour )
|
263
|
+
fx.edit_order( limit_order_no, {
|
264
|
+
:stop_order_no=>stop_order_no,
|
265
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate - 5.01,
|
266
|
+
:stop_order_rate=>list[ClickClient::FX::EURJPY].ask_rate + 5.01,
|
267
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
268
|
+
:expiration_date=>limit_date
|
269
|
+
})
|
270
|
+
sleep WAIT
|
271
|
+
|
272
|
+
# 注文確認
|
273
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
274
|
+
order = orders[limit_order_no]
|
275
|
+
assert_equals order.order_no, result.limit_order_no
|
276
|
+
assert_equals order.enable_change_or_cancel, true
|
277
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
278
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
279
|
+
assert_equals order.trade_quantity, 10000
|
280
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5.01).to_s
|
281
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
282
|
+
assert_not_nil order.date
|
283
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
284
|
+
assert_equals order.expiration_date, expect_limit
|
285
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
286
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
287
|
+
assert_nil order.settlement_rate
|
288
|
+
assert_nil order.settlement_date
|
289
|
+
|
290
|
+
order = orders[stop_order_no]
|
291
|
+
assert_equals order.order_no, result.stop_order_no
|
292
|
+
assert_equals order.enable_change_or_cancel, true
|
293
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
294
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
295
|
+
assert_equals order.trade_quantity, 10000
|
296
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 5.01).to_s
|
297
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
298
|
+
assert_not_nil order.date
|
299
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
300
|
+
assert_equals order.expiration_date, expect_limit
|
301
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
302
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
303
|
+
assert_nil order.settlement_rate
|
304
|
+
assert_nil order.settlement_date
|
305
|
+
|
306
|
+
ensure
|
307
|
+
# キャンセル
|
308
|
+
fx.cancel_order limit_order_no
|
309
|
+
|
310
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
311
|
+
order = orders[limit_order_no]
|
312
|
+
assert_equals order.order_no, result.limit_order_no
|
313
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
314
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
315
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
316
|
+
assert_equals order.trade_quantity, 10000
|
317
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5.01).to_s
|
318
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
319
|
+
assert_not_nil order.date
|
320
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
321
|
+
assert_equals order.expiration_date, expect_limit
|
322
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
323
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
324
|
+
assert_nil order.settlement_rate
|
325
|
+
assert_nil order.settlement_date
|
326
|
+
|
327
|
+
order = orders[stop_order_no]
|
328
|
+
assert_equals order.order_no, result.stop_order_no
|
329
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
330
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
331
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
332
|
+
assert_equals order.trade_quantity, 10000
|
333
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 5.01).to_s
|
334
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
335
|
+
assert_not_nil order.date
|
336
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
337
|
+
assert_equals order.expiration_date, expect_limit
|
338
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
339
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
340
|
+
assert_nil order.settlement_rate
|
341
|
+
assert_nil order.settlement_date
|
342
|
+
end
|
343
|
+
}
|
344
|
+
end
|
345
|
+
|
346
|
+
# IFD注文の発注、変更、キャンセルのテスト
|
347
|
+
def test_ifd_order
|
348
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
349
|
+
list = fx.list_rates
|
350
|
+
|
351
|
+
# 注文
|
352
|
+
result = fx.order( ClickClient::FX::EURJPY, ClickClient::FX::SELL, 1, {
|
353
|
+
:rate=>list[ClickClient::FX::EURJPY].bid_rate + 5,
|
354
|
+
:execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
|
355
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_INFINITY,
|
356
|
+
:settle=>{
|
357
|
+
:unit=>1,
|
358
|
+
:sell_or_buy=>ClickClient::FX::BUY,
|
359
|
+
:rate=>list[ClickClient::FX::EURJPY].bid_rate + 4,
|
360
|
+
:execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
|
361
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_INFINITY,
|
362
|
+
}
|
363
|
+
})
|
364
|
+
assert_not_nil result.order_no
|
365
|
+
assert_not_nil result.settlement_order_no
|
366
|
+
order_no = result.order_no
|
367
|
+
settlement_order_no = result.settlement_order_no
|
368
|
+
begin
|
369
|
+
|
370
|
+
# 注文確認
|
371
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
372
|
+
order = orders[order_no]
|
373
|
+
assert_equals order.order_no, result.order_no
|
374
|
+
assert_equals order.enable_change_or_cancel, true
|
375
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
376
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
377
|
+
assert_equals order.trade_quantity, 10000
|
378
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 5).to_s
|
379
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
380
|
+
assert_not_nil order.date
|
381
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_INFINITY
|
382
|
+
assert_nil order.expiration_date
|
383
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
384
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
385
|
+
assert_nil order.settlement_rate
|
386
|
+
assert_nil order.settlement_date
|
387
|
+
|
388
|
+
order = orders[settlement_order_no]
|
389
|
+
assert_equals order.order_no, result.settlement_order_no
|
390
|
+
assert_equals order.enable_change_or_cancel, true
|
391
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
392
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
393
|
+
assert_equals order.trade_quantity, 10000
|
394
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 4).to_s
|
395
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
396
|
+
assert_not_nil order.date
|
397
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_INFINITY
|
398
|
+
assert_nil order.expiration_date
|
399
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
400
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
401
|
+
assert_nil order.settlement_rate
|
402
|
+
assert_nil order.settlement_date
|
403
|
+
|
404
|
+
#注文変更
|
405
|
+
limit_date = DateTime.now + 6
|
406
|
+
expect_limit = DateTime.new( limit_date.year, limit_date.mon, limit_date.day, limit_date.hour )
|
407
|
+
fx.edit_order( order_no, {
|
408
|
+
:rate=>list[ClickClient::FX::EURJPY].bid_rate + 5.01,
|
409
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
410
|
+
:expiration_date=>limit_date,
|
411
|
+
:settle=>{
|
412
|
+
:order_no=>settlement_order_no,
|
413
|
+
:rate=>list[ClickClient::FX::EURJPY].bid_rate + 4.01,
|
414
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
415
|
+
:expiration_date=>limit_date
|
416
|
+
}
|
417
|
+
})
|
418
|
+
sleep WAIT
|
419
|
+
|
420
|
+
# 注文確認
|
421
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
422
|
+
order = orders[order_no]
|
423
|
+
assert_equals order.order_no, result.order_no
|
424
|
+
assert_equals order.enable_change_or_cancel, true
|
425
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
426
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
427
|
+
assert_equals order.trade_quantity, 10000
|
428
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 5.01).to_s
|
429
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
430
|
+
assert_not_nil order.date
|
431
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
432
|
+
assert_equals order.expiration_date, expect_limit
|
433
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
434
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
435
|
+
assert_nil order.settlement_rate
|
436
|
+
assert_nil order.settlement_date
|
437
|
+
|
438
|
+
order = orders[settlement_order_no]
|
439
|
+
assert_equals order.order_no, result.settlement_order_no
|
440
|
+
assert_equals order.enable_change_or_cancel, true
|
441
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
442
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
443
|
+
assert_equals order.trade_quantity, 10000
|
444
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 4.01).to_s
|
445
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
446
|
+
assert_not_nil order.date
|
447
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
448
|
+
assert_equals order.expiration_date, expect_limit
|
449
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
450
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
451
|
+
assert_nil order.settlement_rate
|
452
|
+
assert_nil order.settlement_date
|
453
|
+
|
454
|
+
ensure
|
455
|
+
# キャンセル
|
456
|
+
fx.cancel_order order_no
|
457
|
+
|
458
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
459
|
+
order = orders[order_no]
|
460
|
+
assert_equals order.order_no, result.order_no
|
461
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
462
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
463
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
464
|
+
assert_equals order.trade_quantity, 10000
|
465
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 5.01).to_s
|
466
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
467
|
+
assert_not_nil order.date
|
468
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
469
|
+
assert_equals order.expiration_date, expect_limit
|
470
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
471
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
472
|
+
assert_nil order.settlement_rate
|
473
|
+
assert_nil order.settlement_date
|
474
|
+
|
475
|
+
order = orders[settlement_order_no]
|
476
|
+
assert_equals order.order_no, result.settlement_order_no
|
477
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
478
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
479
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
480
|
+
assert_equals order.trade_quantity, 10000
|
481
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].bid_rate + 4.01).to_s
|
482
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
483
|
+
assert_not_nil order.date
|
484
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
485
|
+
assert_equals order.expiration_date, expect_limit
|
486
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
487
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
488
|
+
assert_nil order.settlement_rate
|
489
|
+
assert_nil order.settlement_date
|
490
|
+
end
|
491
|
+
}
|
492
|
+
end
|
493
|
+
|
494
|
+
# IFD-OCO
|
495
|
+
def test_ifdoco_order
|
496
|
+
@client.fx_session(USER_NAME, PASSWORD){|fx|
|
497
|
+
list = fx.list_rates
|
498
|
+
|
499
|
+
limit_date = DateTime.now + 6
|
500
|
+
expect_limit = DateTime.new( limit_date.year, limit_date.mon, limit_date.day, limit_date.hour )
|
501
|
+
|
502
|
+
# 注文
|
503
|
+
result = fx.order( ClickClient::FX::EURJPY, ClickClient::FX::BUY, 1, {
|
504
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate - 5,
|
505
|
+
:execution_expression=>ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER,
|
506
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
507
|
+
:expiration_date=>limit_date,
|
508
|
+
:settle=>{
|
509
|
+
:unit=>1,
|
510
|
+
:sell_or_buy=>ClickClient::FX::SELL,
|
511
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate + 4,
|
512
|
+
:stop_order_rate=>list[ClickClient::FX::EURJPY].ask_rate - 6,
|
513
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
514
|
+
:expiration_date=>limit_date,
|
515
|
+
}
|
516
|
+
})
|
517
|
+
|
518
|
+
assert_not_nil result.order_no
|
519
|
+
assert_not_nil result.kessaiSashineChumonBango
|
520
|
+
assert_not_nil result.kessaiGyakusashiChumonBango
|
521
|
+
order_no = result.order_no
|
522
|
+
settlement_order_no = result.kessaiSashineChumonBango
|
523
|
+
reverse_settlement_order_no = result.kessaiGyakusashiChumonBango
|
524
|
+
begin
|
525
|
+
|
526
|
+
# 注文確認
|
527
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
528
|
+
order = orders[order_no]
|
529
|
+
assert_equals order.order_no, result.order_no
|
530
|
+
assert_equals order.enable_change_or_cancel, true
|
531
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
532
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
533
|
+
assert_equals order.trade_quantity, 10000
|
534
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5).to_s
|
535
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
536
|
+
assert_not_nil order.date
|
537
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
538
|
+
assert_equals order.expiration_date, expect_limit
|
539
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
540
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
541
|
+
assert_nil order.settlement_rate
|
542
|
+
assert_nil order.settlement_date
|
543
|
+
|
544
|
+
order = orders[settlement_order_no]
|
545
|
+
assert_equals order.order_no, settlement_order_no
|
546
|
+
assert_equals order.enable_change_or_cancel, true
|
547
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
548
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
549
|
+
assert_equals order.trade_quantity, 10000
|
550
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 4).to_s
|
551
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
552
|
+
assert_not_nil order.date
|
553
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
554
|
+
assert_equals order.expiration_date, expect_limit
|
555
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
556
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
557
|
+
assert_nil order.settlement_rate
|
558
|
+
assert_nil order.settlement_date
|
559
|
+
|
560
|
+
order = orders[reverse_settlement_order_no]
|
561
|
+
assert_equals order.order_no, reverse_settlement_order_no
|
562
|
+
assert_equals order.enable_change_or_cancel, true
|
563
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
564
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
565
|
+
assert_equals order.trade_quantity, 10000
|
566
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 6 ).to_s
|
567
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
568
|
+
assert_not_nil order.date
|
569
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
570
|
+
assert_equals order.expiration_date, expect_limit
|
571
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
572
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
573
|
+
assert_nil order.settlement_rate
|
574
|
+
assert_nil order.settlement_date
|
575
|
+
|
576
|
+
#注文変更
|
577
|
+
limit_date = DateTime.now + 7
|
578
|
+
expect_limit = DateTime.new( limit_date.year, limit_date.mon, limit_date.day, limit_date.hour )
|
579
|
+
fx.edit_order( order_no, {
|
580
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate - 5.01,
|
581
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
582
|
+
:expiration_date=>limit_date,
|
583
|
+
:settle=>{
|
584
|
+
:order_no=>settlement_order_no,
|
585
|
+
:stop_order_no=>reverse_settlement_order_no,
|
586
|
+
:rate=>list[ClickClient::FX::EURJPY].ask_rate + 4.01,
|
587
|
+
:stop_order_rate=>list[ClickClient::FX::EURJPY].ask_rate - 6.01,
|
588
|
+
:expiration_type=>ClickClient::FX::EXPIRATION_TYPE_SPECIFIED,
|
589
|
+
:expiration_date=>limit_date
|
590
|
+
}
|
591
|
+
})
|
592
|
+
sleep WAIT
|
593
|
+
|
594
|
+
# 注文確認
|
595
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
596
|
+
order = orders[order_no]
|
597
|
+
assert_equals order.order_no, order_no
|
598
|
+
assert_equals order.enable_change_or_cancel, true
|
599
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
600
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
601
|
+
assert_equals order.trade_quantity, 10000
|
602
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5.01).to_s
|
603
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
604
|
+
assert_not_nil order.date
|
605
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
606
|
+
assert_equals order.expiration_date, expect_limit
|
607
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_RECEIVED
|
608
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
609
|
+
assert_nil order.settlement_rate
|
610
|
+
assert_nil order.settlement_date
|
611
|
+
|
612
|
+
order = orders[settlement_order_no]
|
613
|
+
assert_equals order.order_no, settlement_order_no
|
614
|
+
assert_equals order.enable_change_or_cancel, true
|
615
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
616
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
617
|
+
assert_equals order.trade_quantity, 10000
|
618
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 4.01).to_s
|
619
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
620
|
+
assert_not_nil order.date
|
621
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
622
|
+
assert_equals order.expiration_date, expect_limit
|
623
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
624
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
625
|
+
assert_nil order.settlement_rate
|
626
|
+
assert_nil order.settlement_date
|
627
|
+
|
628
|
+
order = orders[reverse_settlement_order_no]
|
629
|
+
assert_equals order.order_no, reverse_settlement_order_no
|
630
|
+
assert_equals order.enable_change_or_cancel, true
|
631
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
632
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
633
|
+
assert_equals order.trade_quantity, 10000
|
634
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 6.01 ).to_s
|
635
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
636
|
+
assert_not_nil order.date
|
637
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
638
|
+
assert_equals order.expiration_date, expect_limit
|
639
|
+
assert_equals order.order_state, ClickClient::FX::ORDER_STATE_WAITING # 決済注文は待機中。
|
640
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_NOT_FAILED
|
641
|
+
assert_nil order.settlement_rate
|
642
|
+
assert_nil order.settlement_date
|
643
|
+
|
644
|
+
ensure
|
645
|
+
# キャンセル
|
646
|
+
fx.cancel_order order_no
|
647
|
+
|
648
|
+
orders = fx.list_orders( ClickClient::FX::ORDER_CONDITION_ALL, ClickClient::FX::EURJPY)
|
649
|
+
order = orders[order_no]
|
650
|
+
assert_equals order.order_no, result.order_no
|
651
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
652
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_NEW
|
653
|
+
assert_equals order.sell_or_buy, ClickClient::FX::BUY
|
654
|
+
assert_equals order.trade_quantity, 10000
|
655
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 5.01).to_s
|
656
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
657
|
+
assert_not_nil order.date
|
658
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
659
|
+
assert_equals order.expiration_date, expect_limit
|
660
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
661
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
662
|
+
assert_nil order.settlement_rate
|
663
|
+
assert_nil order.settlement_date
|
664
|
+
|
665
|
+
order = orders[settlement_order_no]
|
666
|
+
assert_equals order.order_no, settlement_order_no
|
667
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
668
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
669
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
670
|
+
assert_equals order.trade_quantity, 10000
|
671
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate + 4.01).to_s
|
672
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_LIMIT_ORDER
|
673
|
+
assert_not_nil order.date
|
674
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
675
|
+
assert_equals order.expiration_date, expect_limit
|
676
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
677
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
678
|
+
assert_nil order.settlement_rate
|
679
|
+
assert_nil order.settlement_date
|
680
|
+
|
681
|
+
order = orders[reverse_settlement_order_no]
|
682
|
+
assert_equals order.order_no, reverse_settlement_order_no
|
683
|
+
#assert_equals order.enable_change_or_cancel, true #キャンセル後は変更不可だがタイミングによっては変更可となる。
|
684
|
+
assert_equals order.trade_type, ClickClient::FX::TRADE_TYPE_SETTLEMENT
|
685
|
+
assert_equals order.sell_or_buy, ClickClient::FX::SELL
|
686
|
+
assert_equals order.trade_quantity, 10000
|
687
|
+
assert_equals order.rate.to_s, (list[ClickClient::FX::EURJPY].ask_rate - 6.01 ).to_s
|
688
|
+
assert_equals order.execution_expression, ClickClient::FX::EXECUTION_EXPRESSION_REVERSE_LIMIT_ORDER
|
689
|
+
assert_not_nil order.date
|
690
|
+
assert_equals order.expiration_type, ClickClient::FX::EXPIRATION_TYPE_SPECIFIED
|
691
|
+
assert_equals order.expiration_date, expect_limit
|
692
|
+
assert order.order_state == ClickClient::FX::ORDER_STATE_CANCELING || order.order_state == ClickClient::FX::ORDER_STATE_CANCELED # キャンセルorキャンセル中
|
693
|
+
assert_not_nil order.failure_reason, ClickClient::FX::FAILURE_REASON_USER # 不成立になる
|
694
|
+
assert_nil order.settlement_rate
|
695
|
+
assert_nil order.settlement_date
|
696
|
+
end
|
697
|
+
}
|
698
|
+
end
|
699
|
+
|
700
|
+
private
|
701
|
+
# 通貨ペアコードに値が設定されているか評価する
|
702
|
+
def assert_valid_currency_pair( info, code )
|
703
|
+
assert_equals code, info.currency_pair_code
|
704
|
+
assert_not_nil info.name
|
705
|
+
assert_not_nil info.max_trade_quantity.to_i
|
706
|
+
assert_not_nil info.min_trade_quantity.to_i
|
707
|
+
assert_not_nil info.trade_unit.to_i
|
708
|
+
end
|
709
|
+
|
710
|
+
# レートに値が設定されているか評価する
|
711
|
+
def assert_valid_rate( info, code )
|
712
|
+
assert_equals code, info.currency_pair_code
|
713
|
+
assert_not_nil info.bid.to_f
|
714
|
+
assert_not_nil info.ask.to_f
|
715
|
+
assert_not_nil info.day_before_to.to_f
|
716
|
+
assert_not_nil info.bid_high.to_f
|
717
|
+
assert_not_nil info.bid_low.to_f
|
718
|
+
assert_not_nil info.sell_swap.to_i
|
719
|
+
assert_not_nil info.buy_swap.to_i
|
720
|
+
assert_not_nil info.date
|
721
|
+
assert_not_nil info.days_of_grant.to_i
|
722
|
+
end
|
723
|
+
|
724
|
+
# 約定に値が設定されているか評価する
|
725
|
+
def assert_valid_execution_result( execution_result )
|
726
|
+
assert_not_nil execution_result.currency_pair_code
|
727
|
+
end
|
728
|
+
end
|