-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
4本値の取得方法 #309
Comments
4本値は @values = {}
current = tick[:USDJPY].bid
@values[:close] = current
@values[:open] = current unless @values[:open]
@values[:high] = current if @values[:high] < current
@values[:low] = current if @values[:low] > current これを任意の期間ごとに集計して、 順次 |
コメントありがとうございます。 require 'jiji/model/agents/agent'
class DmiAgent
include Jiji::Model::Agents::Agent
def self.description
<<-STR
DMIを使うエージェントです。
-ゴールデンクロスで買い&売り建て玉をコミット。
-デッドクロスで売り&買い建て玉をコミット。
STR
end
# UIから設定可能なプロパティの一覧
def self.property_infos
[
Property.new('range', '集計期間', 14),
Property.new('interval', '集計間隔', 240) # 1時間
]
end
def post_create
# DMIの算出クラス
# 共有ライブラリのクラスを利用。
@dmi=Signals::DMI.new(@range.to_i)
@data=Data.new(@interval.to_i)
@cross = Cross.new
# DMIグラフ
@graph_dmi = graph_factory.create('DMI',
:line, :average, ['#FFCC33','#FF6633','#666699'])
end
# 次のレートを受け取る
def next_tick(tick)
# DMIを計算
data = @data.next_data(tick[:USDJPY].bid)
return unless data
values = {open: data.first,close: data.last, high: data.max, low: data.min}
logger.debug values
dmi = @dmi.next_data(values)
return unless dmi
logger.debug dmi
# グラフに出力
@graph_dmi << [dmi[:pdi],dmi[:mdi],dmi[:dx]]
# ゴールデンクロス/デッドクロスを判定
@cross.next_data(dmi[:pdi],dmi[:mdi])
do_trade(dmi[:dx])
end
def do_trade(dx)
if @cross.cross_up?
# ゴールデンクロス
# 売り建玉があれば全て決済
close_exist_positions(:sell)
# 新規に買い
broker.buy(:USDJPY, 1)
elsif @cross.cross_down?
# デッドクロス
# 買い建玉があれば全て決済
close_exist_positions(:buy)
# 新規に売り
broker.sell(:USDJPY, 1)
end
end
def close_exist_positions(sell_or_buy)
@broker.positions.each do |p|
p.close if p.sell_or_buy == sell_or_buy
end
end
# エージェントの状態を返却
def state
{
dmi: @dmi.state
}
end
# 永続化された状態から元の状態を復元する
def restore_state(state)
return unless state[:dmi]
@dmi.restore_state(state[:dmi])
end
end
class Data < Signals::RangeSignal
def calculate(data) #:nodoc:
data
end
end ログ内容
|
@graph_dmi << [dmi[:pdi],dmi[:mdi],dmi[:dx]] を、以下のように変更して試してみてください。 @graph_dmi << [dmi[:pdi],dmi[:mdi],dmi[:dx]] if dmi[:dx] && dmi[:pdi] && dmi[:mdi] |
すみません変更してもダメでした D, [2017-07-06T21:09:49.220361 #1] DEBUG -- : {:open=>112.157, :close=>112.159, :high=>112.179, :low=>112.115}
D, [2017-07-06T21:09:49.220543 #1] DEBUG -- : {:pdi=>0.0, :mdi=>0.0, :dx=>NaN, :adx=>NaN}
E, [2017-07-06T21:09:49.220861 #1] ERROR -- : NaN (FloatDomainError)
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:43:in `to_r'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:43:in `+'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:43:in `update_context'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:24:in `block in merge'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:22:in `each'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:22:in `each_with_index'
/app/jiji2/src/jiji/model/graphing/internal/aggregation_strategies.rb:22:in `merge'
/app/jiji2/src/jiji/model/graphing/internal/graph_data_saver.rb:47:in `updata'
/app/jiji2/src/jiji/model/graphing/internal/graph_data_saver.rb:20:in `save_data_if_required'
/app/jiji2/src/jiji/model/graphing/graph.rb:79:in `block in save_data'
/app/jiji2/src/jiji/model/graphing/graph.rb:78:in `each'
/app/jiji2/src/jiji/model/graphing/graph.rb:78:in `save_data'
/app/jiji2/src/jiji/model/graphing/graph_factory.rb:40:in `block in save_data'
/app/jiji2/src/jiji/model/graphing/graph_factory.rb:39:in `each'
/app/jiji2/src/jiji/model/graphing/graph_factory.rb:39:in `save_data'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:53:in `save_graph_data'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:88:in `after_do_next'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:18:in `exec'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:74:in `exec'
/app/jiji2/src/jiji/model/trading/process.rb:37:in `do_next_job'
/app/jiji2/src/jiji/model/trading/process.rb:30:in `run'
/app/jiji2/src/jiji/model/trading/process.rb:24:in `block in start'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:67:in `call'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:67:in `execute'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:405:in `block (2 levels) in spawn_thread'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:372:in `loop'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:372:in `block in spawn_thread' |
失礼しました。 @graph_dmi << [dmi[:pdi],dmi[:mdi],dmi[:dx]] if dmi[:dx] && dmi[:pdi] && dmi[:mdi] && !dmi[:dx].nan? && !dmi[:pdi].nan? && !dmi[:mdi].nan? |
すみませんダメでした。ちょっと他に原因ありそうなので調べてみます。 D, [2017-07-06T23:33:44.976815 #1] DEBUG -- : {:open=>112.362, :close=>112.362, :high=>112.362, :low=>112.362}
D, [2017-07-06T23:33:44.977033 #1] DEBUG -- : {:pdi=>NaN, :mdi=>NaN, :dx=>NaN, :adx=>NaN}
E, [2017-07-06T23:33:44.977235 #1] ERROR -- : undefined method `>' for nil:NilClass (NoMethodError)
/app/jiji2/src/jiji/model/agents/builtin_files/cross.rb:79:in `calculate_state'
/app/jiji2/src/jiji/model/agents/builtin_files/cross.rb:41:in `next_data'
agent/dmi_agent.rb:55:in `next_tick'
/app/jiji2/src/jiji/model/agents/agents.rb:35:in `block in next_tick'
/app/jiji2/src/jiji/model/agents/agents.rb:33:in `each'
/app/jiji2/src/jiji/model/agents/agents.rb:33:in `next_tick'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:17:in `exec'
/app/jiji2/src/jiji/model/trading/jobs/notify_next_tick_job.rb:74:in `exec'
/app/jiji2/src/jiji/model/trading/process.rb:37:in `do_next_job'
/app/jiji2/src/jiji/model/trading/process.rb:30:in `run'
/app/jiji2/src/jiji/model/trading/process.rb:24:in `block in start'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:67:in `call'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:67:in `execute'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:405:in `block (2 levels) in spawn_thread'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:372:in `loop'
/usr/local/bundle/gems/thread-0.2.2/lib/thread/pool.rb:372:in `block in spawn_thread' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
素晴らしいツールありがとうございます。
サンプルの移動平均エージェントをRSIやmacdに書き換えて試させていただいています。
同じ要領でdmiを試そうとしたのですが、
def next_tick(tick)のtickには4本値が渡って来ないようでうまくいきません。
4本値はどのように取得すべきでしょうか?
The text was updated successfully, but these errors were encountered: