取引を行う
取引を行うには、broker
を使用します。 broker
は、 Agent
のインスタンス変数として初期化時に設定されます。
注文を行う
成行、指値、逆指値、Market If Touched で注文を行うことができます。
以下、各種注文を行う例です。
# EURJPYを10000単位、成行で売り
broker.sell(:EURJPY, 10000)
# 各種オプションを指定して、EURJPYを10000単位、成行で買い
order_result = broker.buy(:EURJPY, 10000, :market, {
# 建玉の約定条件
stop_loss: { price: 135.23 }, #ストップロス価格
take_profit: { price: 135.73 }, #テイクプロフィット価格
trailing_stop: { distance: 10 } #トレーリングストップのディスタンスをpipsで指定します。
})
# 成行注文の場合、通常、即約定するため、以下のようなコードで注文によって作成された建玉を取得できます
position = broker.positions[order_result.trade_opened.internal_id]
# 指値135.6で売り注文
broker.sell(:USDJPY, 10000, :limit, {
price: 122.6,
time_in_force: 'GTD',
gtd_time: Time.utc(2015, 5, 2) #注文の有効期限
})
# 逆指値112.404で買い注文
broker.buy(:USDJPY, 10000, :stop, {
price: 112.404,
time_in_force: 'GTD',
gtd_time: Time.utc(2015, 5, 2)
# stop_loss等のオプションは、注文方法によらず指定可能です。
stop_loss: { price: 111.404 },
take_profit: { price: 113.404 },
trailing_stop: { distance: 10 }
})
# Market If Touched で買い
broker.buy(:EURUSD, 10000, :marketIfTouched, {
price: 1.4325,
time_in_force: 'GTD',
gtd_time: Time.utc(2015, 5, 2)
})
sell(pair_name, units, type, options)
, buy(pair_name, units, type, options)
の引数は次の通りです。
番号 | 名前 | 説明 |
---|---|---|
1 | pair_name | 取引する通貨ペアを、:EURJPY のようなシンボルで指定します。(必須) |
2 | units |
注文単位を指定します。(必須) OANDA JApan では、1単位からの取引が可能です。 |
3 | type |
取引の種別を指定します。 成行 ( :market )、指値 (:limit )、逆指値 (stop )、
Market If Touched (:marketIfTouched ) のいずれかが指定可能です。省略した場合、成行( :market ) 注文になります。
|
4 | options |
指値注文の指値価格や、有効期限などを指定します。 指定可能なパラメータについては、こちらを参照ください。 |
注文を行うと、 OrderResult が返却されます。
注文一覧を取得する
Broker#orders
で、注文一覧を取得できます。
orders = broker.orders # Orderの配列が返されます。
orders.length
orders.select { |o| o.sell_or_buy == :sell } #売り注文の一覧を取得
Orderの属性はこちらを参照ください。
注文を変更する
指値や決済条件は、 Broker#modify_order(order)
または、 Order#modify
で変更することが可能です。
order = broker.orders[0]
# 変更
order.price = 135.7
order.gtd_time = Time.utc(2015, 5, 2)
order.take_profit_on_fill = {
price: 135.63
}
order.stop_loss_on_fill = {
price: 135.83
}
order.trailing_stop_loss_on_fill = {
distance: 10
}
# 変更を反映
broker.modify_order(order)
# or
order.modify
変更可能なプロパティについては、こちらを参照ください。
注文をキャンセルする
約定していない注文は、 Broker#cancel_order(order)
または、 Order#cancel
でキャンセルできます。
order = broker.orders[0]
# 注文をキャンセル
broker.cancel_order(order)
# or
order.cancel
建玉一覧を取得する
注文が約定すると、 建玉( Position
)が生成されます。
Broker#positions
で、現在の建玉一覧を取得できます。
positions = broker.positions # Positions オブジェクトが返されます
positions.length
positions.select { |p| p.sell_or_buy == :sell } #売建玉の一覧を取得
建玉オブジェクトからは、購入レートや現在の損益が取得できます。
# 建玉
position = broker.positions[0]
position.internal_id # 一意な識別子
position.pair_name # 通貨ペア 例) :EURJPY
position.units # 取引単位
position.sell_or_buy # 売(:sell) or 買(:buy)
# ステータス
# - 新規 .. :live
# - 決済済 .. :closed
# - ロスト .. :lost
# (決済前にシステムが再起動された場合、ロスト状態になります)
position.status
position.profit_or_loss # 損益
position.max_drow_down # 最大ドローダウン
position.entry_price # 購入価格
position.current_price # 現在価格
position.exit_price # 決済価格 (未決済の場合 nil)
position.entered_at # 購入日時
position.exited_at # 決済日時 (未決済の場合 nil)
position.updated_at # 最終更新時刻
# 決済条件
position.closing_policy.take_profit # テイクプロフィット価格
position.closing_policy.stop_loss # ストップロス価格
position.closing_policy.trailing_stop # トレーリングストップディスタンス
position.closing_policy.trailing_amount # トレーリングストップ数量
※証券会社へのアクセス回数を減らすため、建玉情報は1分間キャッシュされます。
最新の建玉を参照したい場合は、
最新の建玉を参照したい場合は、
broker#positions
の代わりに
broker#load_positions
を利用してください。
建玉を決済する
建玉を決済するには、Broker#close_position(position)
または、 Position#close
を実行します。
position = broker.positions.select { |p| p.sell_or_buy == :sell }[0]
# 建玉を決済
broker.close_position(position)
# or
position.close
建玉の決済条件を変更する
Broker#modify_position(position)
または、 Position#modify
で、建玉の決済条件を変更することができます。
position = broker.positions.select { |p| p.sell_or_buy == :sell }[0]
# 決済条件を変更
position.closing_policy = Jiji::Model::Trading::ClosingPolicy.create({
stop_loss: 130,
take_profit: 140.5,
trailing_stop: 10
})
# 変更を反映
broker.modify_position(position)
# or
position.modify