会則
@OmegaChartはサポートを終了しています。
ご自身でコンパイルできない方は、他のソフトを利用して下さい。
A連投で初歩的な質問をする人やクレクレ君は、立ち入り禁止。
●公式サイト
OmegaChart公式HP(閉鎖)
ttp://www.omegachart.org/
OmegaChart公式HPのアーカイブ(消滅)
ttp://web.archive.org/web/20131010105520/http://www.omegachart.org/
メーリングリスト(2014年5月28日で終了)
ttp://groups.yahoo.co.jp/group/omegachart/
作者Blog(サポート終了)
ttp://okajima.air-nifty.com/
●有志による維持活動
panacoran氏のサイト
ttp://sourceforge.jp/users/panacoran/pf/OmegaChart/wiki/FrontPage
●前スレ
OmegaChartスレ ver.10
https://egg.5ch.net/test/read.cgi/software/1488866170/
OmegaChartスレ ver.11
■ このスレッドは過去ログ倉庫に格納されています
2018/10/12(金) 16:06:42.77ID:xz6O6ruA0
291名無しさん@お腹いっぱい。
2019/03/05(火) 17:51:50.17ID:PRV6GrY50292名無しさん@お腹いっぱい。
2019/03/05(火) 18:02:05.58ID:G/Hb54uh0 >>241
>>242
Fibonacciラインのファイル更新、何度も何度もありがとうございます。
試用させて頂きましたて、どうしても分からなかったので質問させて下さい。
最新のファイルでは、1.618や、--1.618を描画する場合。
安値から高値方向にFibonacciを引いた場合も、逆に、高値から安値の方向に引いた場合も、0.618などFibonacci目盛りや符号を上下反転させる仕様を廃止されたのでしょうか。
それと、Fibonacciラインの特徴は。
仮に、目盛りや目盛りの符号を上下反転させる仕様で使うにしても。(一つ前のファイルバージョンまでの仕様のように)
Fibonacciラインを引き直したとき、高値位置を動かすと安値から高値方向に引いた場合の目盛りの表示に戻ってしまい。
逆に、安値の位置を動かすと高値から安値の方向に引いた場合の目盛りの表示に戻ってしまうのは。
これは以前のご説明にあった、引き直したFibonacciラインにはコピー元のFibonacciラインとの区別が無くなってしまうので仕方がない、という理解でよろしいですか。
お手数ですがどのように工夫して利用できるのか考えてみるための参考としたいので。
>>242
Fibonacciラインのファイル更新、何度も何度もありがとうございます。
試用させて頂きましたて、どうしても分からなかったので質問させて下さい。
最新のファイルでは、1.618や、--1.618を描画する場合。
安値から高値方向にFibonacciを引いた場合も、逆に、高値から安値の方向に引いた場合も、0.618などFibonacci目盛りや符号を上下反転させる仕様を廃止されたのでしょうか。
それと、Fibonacciラインの特徴は。
仮に、目盛りや目盛りの符号を上下反転させる仕様で使うにしても。(一つ前のファイルバージョンまでの仕様のように)
Fibonacciラインを引き直したとき、高値位置を動かすと安値から高値方向に引いた場合の目盛りの表示に戻ってしまい。
逆に、安値の位置を動かすと高値から安値の方向に引いた場合の目盛りの表示に戻ってしまうのは。
これは以前のご説明にあった、引き直したFibonacciラインにはコピー元のFibonacciラインとの区別が無くなってしまうので仕方がない、という理解でよろしいですか。
お手数ですがどのように工夫して利用できるのか考えてみるための参考としたいので。
293名無しさん@お腹いっぱい。
2019/03/05(火) 18:16:28.10ID:PRV6GrY50 >>287
自分も著作物?と言われると違和感が非常に強いです。
判例もないようですし、法律に詳しくないので良くわかりません。
だからと言って、個人的にJPXと戦ってまでOmegaChartを利用する覚悟もないのです。
よっぽどのことがなければ、ダウンロードがバレて違法性を問われることはないだろうと思ってはいますが、小心者なもので。
一つ質問ですが、なぜかの日経平均の出来高は1桁落としているようですが、オーバーフロー対策ですかね。
日経プロファイルには残念ながら出来高がないので欲しいところです。
ウェブにOmegaのバイナリデーターを置いてクラウドのようにOmegaChartで直接アクセスした場合の動作はどうなんだろうと妄想しています。
チャート表示はさほど遅くならなくてもスクリーニングなどは遅くて使い物にならないかもしれませんね。
自分も著作物?と言われると違和感が非常に強いです。
判例もないようですし、法律に詳しくないので良くわかりません。
だからと言って、個人的にJPXと戦ってまでOmegaChartを利用する覚悟もないのです。
よっぽどのことがなければ、ダウンロードがバレて違法性を問われることはないだろうと思ってはいますが、小心者なもので。
一つ質問ですが、なぜかの日経平均の出来高は1桁落としているようですが、オーバーフロー対策ですかね。
日経プロファイルには残念ながら出来高がないので欲しいところです。
ウェブにOmegaのバイナリデーターを置いてクラウドのようにOmegaChartで直接アクセスした場合の動作はどうなんだろうと妄想しています。
チャート表示はさほど遅くならなくてもスクリーニングなどは遅くて使い物にならないかもしれませんね。
294名無しさん@お腹いっぱい。
2019/03/05(火) 18:52:21.24ID:P2/Zt2zS0 著作権法(定義)第二条十の三に該当する様ですね
データベース、論文、数値、図形その他の情報の集合物であつて、それらの情報を電子計算機を用いて検索することができるように体系的に構成したものをいう
データベース、論文、数値、図形その他の情報の集合物であつて、それらの情報を電子計算機を用いて検索することができるように体系的に構成したものをいう
2019/03/05(火) 19:02:08.52ID:d6cnwoki0
>>293
>日経平均の出来高
仰る通りで、オーバーフロー対策で桁を落としました。RSSの素データだと、万株単位です。
これを10000倍すると、intの最大値を超えることもありそうなので1000倍にとどめました。
>Omegaのバイナリデータ
GoogleのFirebaseとか使って何かできないかと思っています。
>日経平均の出来高
仰る通りで、オーバーフロー対策で桁を落としました。RSSの素データだと、万株単位です。
これを10000倍すると、intの最大値を超えることもありそうなので1000倍にとどめました。
>Omegaのバイナリデータ
GoogleのFirebaseとか使って何かできないかと思っています。
296名無しさん@お腹いっぱい。
2019/03/05(火) 19:12:58.63ID:PRV6GrY502019/03/05(火) 19:15:28.65ID:d6cnwoki0
>>290
これはすごい。
これはすごい。
2019/03/05(火) 20:03:12.18ID:d6cnwoki0
>>292
確かにおかしな表示になってましたね。下のファイルの修正だと並びは問題ないはずです。
変更箇所は561行目からのretText()だけ。
OmegaChart Fibonacciリトレースメント Fibonacci.cs 新規追加 ※差し替え その9 修正ポイントには //☆Fibonacci 20190207
https://osdn.net/users/omegachartuser/pastebin/6077
気づいてしまったんですが、フリーラインが何も引かれていない状態で、フィボナッチラインを引いても保存されないというバグがありました。
明日の作戦会議をしないといけないので、プログラムに関してはまた今度にしたいと思います。
確かにおかしな表示になってましたね。下のファイルの修正だと並びは問題ないはずです。
変更箇所は561行目からのretText()だけ。
OmegaChart Fibonacciリトレースメント Fibonacci.cs 新規追加 ※差し替え その9 修正ポイントには //☆Fibonacci 20190207
https://osdn.net/users/omegachartuser/pastebin/6077
気づいてしまったんですが、フリーラインが何も引かれていない状態で、フィボナッチラインを引いても保存されないというバグがありました。
明日の作戦会議をしないといけないので、プログラムに関してはまた今度にしたいと思います。
2019/03/05(火) 22:19:46.79ID:d6cnwoki0
>>290
これ、チャート右クリックしてダイアログ表示、「ルーラーの固定」をクリックでこの機能を実行。
解除は、画面のどこかをクリックしたら解除って流れにしたら、すごい良さそう。
チャート画面スクショを保存するときに使える。
これ、チャート右クリックしてダイアログ表示、「ルーラーの固定」をクリックでこの機能を実行。
解除は、画面のどこかをクリックしたら解除って流れにしたら、すごい良さそう。
チャート画面スクショを保存するときに使える。
300名無しさん@お腹いっぱい。
2019/03/06(水) 06:44:30.67ID:YBkeRq660 >>299
Env.cs
1 [STAThread] 137行 の前に行を追加
public static bool FixDate { get; set; }
Command.cs
2 //その他 111行の前に以下を追加
FixDate,
3 //その他 288行の前に以下3行を追加
case CID.FixDate:
Env.FixDate = true;
return CommandResult.Succeeded;
4 //その他 408行の前に以下を追加
AddCommand(CID.FixDate, "日付ルーラー固定", keys, Keys.None);
MainFrame.cs
5 private ZMainMenuItem _menuMove; 78行の前に以下の変数追加
private ZMenuItem _menuFixDate;
6 this._menuMove = ... 236行の前に以下の行を追加
this._menuFixDate = new ZMenuItem();
7 397行のthis._menuLinkToInfoの後に以下を挿入
, this._menuFixDate
8 // _menuMove 512行の1行前に以下の4行を追加
this._menuFixDate.Index = 12;
this._menuFixDate.Text = "日付ルーラーの固定";
this._menuFixDate.Click += new System.EventHandler(this.OnMenu);
this._menuFixDate.CID = CID.FixDate;
Env.cs
1 [STAThread] 137行 の前に行を追加
public static bool FixDate { get; set; }
Command.cs
2 //その他 111行の前に以下を追加
FixDate,
3 //その他 288行の前に以下3行を追加
case CID.FixDate:
Env.FixDate = true;
return CommandResult.Succeeded;
4 //その他 408行の前に以下を追加
AddCommand(CID.FixDate, "日付ルーラー固定", keys, Keys.None);
MainFrame.cs
5 private ZMainMenuItem _menuMove; 78行の前に以下の変数追加
private ZMenuItem _menuFixDate;
6 this._menuMove = ... 236行の前に以下の行を追加
this._menuFixDate = new ZMenuItem();
7 397行のthis._menuLinkToInfoの後に以下を挿入
, this._menuFixDate
8 // _menuMove 512行の1行前に以下の4行を追加
this._menuFixDate.Index = 12;
this._menuFixDate.Text = "日付ルーラーの固定";
this._menuFixDate.Click += new System.EventHandler(this.OnMenu);
this._menuFixDate.CID = CID.FixDate;
301名無しさん@お腹いっぱい。
2019/03/06(水) 06:45:23.42ID:YBkeRq660 >>300
ChartCanvas.cs
9 OnMouseMove イベント 317行から349行までを以下で囲む
if(!Env.FixDate){ 317行から349行まで}
10 OnMouseDown イベント 487行から
490行 if(e.Button==... の前に 以下の2行を追加
if (Env.FixDate)
Env.FixDate = false;
*ダブルクリックで固定の編集済みの場合は
追加した変数 private bool fixDate; をコメントアウト
OnDoubleClick内のコメントアウトを戻して
fixDate = !fixDate;をコメントアウトしてください
ChartCanvas.cs
9 OnMouseMove イベント 317行から349行までを以下で囲む
if(!Env.FixDate){ 317行から349行まで}
10 OnMouseDown イベント 487行から
490行 if(e.Button==... の前に 以下の2行を追加
if (Env.FixDate)
Env.FixDate = false;
*ダブルクリックで固定の編集済みの場合は
追加した変数 private bool fixDate; をコメントアウト
OnDoubleClick内のコメントアウトを戻して
fixDate = !fixDate;をコメントアウトしてください
2019/03/06(水) 07:31:59.67ID:xUuwbOSc0
>>300
仕事早いですね b
このコード、ここでまとめてしまっても構わないでしょうか?
https://osdn.net/projects/omegachartusers/wiki/FrontPage
仕事早いですね b
このコード、ここでまとめてしまっても構わないでしょうか?
https://osdn.net/projects/omegachartusers/wiki/FrontPage
303名無しさん@お腹いっぱい。
2019/03/06(水) 08:09:08.21ID:YBkeRq6602019/03/06(水) 08:09:56.71ID:xUuwbOSc0
>>303
ありがとうございます
ありがとうございます
305名無しさん@お腹いっぱい。
2019/03/07(木) 11:16:07.49ID:EnPI3fa70 >>283
DreamVisor の終了対応で ...DataVariousSource を導入されましたが このコンストラクターを使えば重複気味のコードがすっきりしませんか
いつもお手数をお掛けして申し訳ありませんが 一寸ためしにやってみたいのですが コードの続きをあげて頂けると助かります
DreamVisor の終了対応で ...DataVariousSource を導入されましたが このコンストラクターを使えば重複気味のコードがすっきりしませんか
いつもお手数をお掛けして申し訳ありませんが 一寸ためしにやってみたいのですが コードの続きをあげて頂けると助かります
2019/03/07(木) 13:15:50.28ID:ek+6REnJ0
どうもありがとうございます
2019/03/07(木) 18:09:41.86ID:yoVS+pDF0
>>307
>>303さん考案の「任意のローソク足でルーラーを止める」機能をまとめました。
https://osdn.net/projects/omegachartusers/wiki/FrontPage
通常カーソルを動かすとルーラーも追従するが、これを任意のローソク足の上で固定する機能。
固定したいローソク足の上で右クリック。表示されるダイアログから、「日付ルーラーの固定」クリックでルーラーが止まる。
解除するときは、画面のどこかをクリックする。
OmegaChart 任意のローソク足でルーラーを止める ChartCanvas.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6080
OmegaChart 任意のローソク足でルーラーを止める Command.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6081
OmegaChart 任意のローソク足でルーラーを止める Env.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6082
OmegaChart 任意のローソク足でルーラーを止める MainFrame.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6083
>>303さん考案の「任意のローソク足でルーラーを止める」機能をまとめました。
https://osdn.net/projects/omegachartusers/wiki/FrontPage
通常カーソルを動かすとルーラーも追従するが、これを任意のローソク足の上で固定する機能。
固定したいローソク足の上で右クリック。表示されるダイアログから、「日付ルーラーの固定」クリックでルーラーが止まる。
解除するときは、画面のどこかをクリックする。
OmegaChart 任意のローソク足でルーラーを止める ChartCanvas.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6080
OmegaChart 任意のローソク足でルーラーを止める Command.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6081
OmegaChart 任意のローソク足でルーラーを止める Env.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6082
OmegaChart 任意のローソク足でルーラーを止める MainFrame.cs 追加・修正ポイントには//☆FixDate
https://osdn.net/users/omegachartuser/pastebin/6083
309名無しさん@お腹いっぱい。
2019/03/07(木) 21:49:57.77ID:jo89Xa1+0 >>305
あくまで思いつきを提案しただけで、実際に試しているわけではなくうまくいかない可能性もある事を了承して下さい。
また、ウェブページをループで巡回する場合プログラムミスから存在しないURLリクエストや無限ループ等でサーバーに短時間でリクエストを繰り返して、重大な損害を与えてしまうことも考えられます。
場合によっては損害賠償などを請求される場合もありうる事を覚悟のうえで(定かではありませんが、何処かで見たような記憶があります)、
デバッグモードで各所にブレークポイントを置いて進行状況を確認しながらやるなどして、プログラミングに自信がなければ安易に手を出さない方が無難です。
また、ウェブページの構造が変更された場合(外観は一見同じであっても)自力で修正が必要になりますから、正規表現などについての知識が絶対に必要です。
はっきり言うと、panacoranさんから正規の対応版が出るのを待つのが無難です。
今回は、○探で業種別指数がとれるとの事がきっかけですがその業種別指数のURLが分からないので、ヤフーのドル円を例に参考コードを書いて見ます。
もしかするとYahoo.cs個別銘柄の正規表現ではデータを取れないくてエラーになることがあるかもしれません。
* ヤフーはスクレイピング禁止を明示しています。自分は実際にデータが取れるか試したわけではなく、机上の空論です。
Yahooでのダウンロードを勧めているわけではなく、コードを変更して他のサイトで利用するための参考例として投稿するものです。
ダウンロードダイアログで為替にチェックを入れて、個別銘柄とともに201(ドル円)をダウンロードする事を想定しています。
あくまで思いつきを提案しただけで、実際に試しているわけではなくうまくいかない可能性もある事を了承して下さい。
また、ウェブページをループで巡回する場合プログラムミスから存在しないURLリクエストや無限ループ等でサーバーに短時間でリクエストを繰り返して、重大な損害を与えてしまうことも考えられます。
場合によっては損害賠償などを請求される場合もありうる事を覚悟のうえで(定かではありませんが、何処かで見たような記憶があります)、
デバッグモードで各所にブレークポイントを置いて進行状況を確認しながらやるなどして、プログラミングに自信がなければ安易に手を出さない方が無難です。
また、ウェブページの構造が変更された場合(外観は一見同じであっても)自力で修正が必要になりますから、正規表現などについての知識が絶対に必要です。
はっきり言うと、panacoranさんから正規の対応版が出るのを待つのが無難です。
今回は、○探で業種別指数がとれるとの事がきっかけですがその業種別指数のURLが分からないので、ヤフーのドル円を例に参考コードを書いて見ます。
もしかするとYahoo.cs個別銘柄の正規表現ではデータを取れないくてエラーになることがあるかもしれません。
* ヤフーはスクレイピング禁止を明示しています。自分は実際にデータが取れるか試したわけではなく、机上の空論です。
Yahooでのダウンロードを勧めているわけではなく、コードを変更して他のサイトで利用するための参考例として投稿するものです。
ダウンロードダイアログで為替にチェックを入れて、個別銘柄とともに201(ドル円)をダウンロードする事を想定しています。
310名無しさん@お腹いっぱい。
2019/03/07(木) 21:51:22.51ID:jo89Xa1+0 >>309
Yahoo.cs
1 38行目のコンストラクターを以下のように変更(オリジナルをコメントアウトして)
public YahooDataSource(int[] dates, List<int> list = null) : base(dates)
2 42行目 Foreach ... { の次の行に 以下の2行を追加
if (!list.Contains(brand.Code))
continue;
3 GetPageに追加したコードで呼ばれた場合にヤフーのurlに変換するための変更が必要
tryの前の行(141行付近)に以下2行を追加
if (code == 201)
url = "https://stocks.finance.yahoo.co.jp/stocks/history/?code=USDJPY=X";
* 今回は例としてドル円のみ。Yahooの中に他の指標があるかは不明
DownloadOrder.csの変更
1 139行から143行をコメントアウトして以下に変更
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();
if (_currencies) {
list.AddRange(new int[] { 201 }); }
if (list.Count > 0) {
var ds = new Specialized.YahooDataSource(_dateArray, list);
col.Add(ds); }
Yahoo.cs
1 38行目のコンストラクターを以下のように変更(オリジナルをコメントアウトして)
public YahooDataSource(int[] dates, List<int> list = null) : base(dates)
2 42行目 Foreach ... { の次の行に 以下の2行を追加
if (!list.Contains(brand.Code))
continue;
3 GetPageに追加したコードで呼ばれた場合にヤフーのurlに変換するための変更が必要
tryの前の行(141行付近)に以下2行を追加
if (code == 201)
url = "https://stocks.finance.yahoo.co.jp/stocks/history/?code=USDJPY=X";
* 今回は例としてドル円のみ。Yahooの中に他の指標があるかは不明
DownloadOrder.csの変更
1 139行から143行をコメントアウトして以下に変更
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();
if (_currencies) {
list.AddRange(new int[] { 201 }); }
if (list.Count > 0) {
var ds = new Specialized.YahooDataSource(_dateArray, list);
col.Add(ds); }
311名無しさん@お腹いっぱい。
2019/03/07(木) 22:10:52.41ID:jo89Xa1+0 >>310
注意
数日間のデータ取得を想定しています。
長期間のデータ取得はこれではできません。
20本以上のデータを取得しようとした場合の挙動はわかりません。
オリジナルコードをよく見ていませんが、もしかすると無限ループになるかもしれません。
注意
数日間のデータ取得を想定しています。
長期間のデータ取得はこれではできません。
20本以上のデータを取得しようとした場合の挙動はわかりません。
オリジナルコードをよく見ていませんが、もしかすると無限ループになるかもしれません。
312名無しさん@お腹いっぱい。
2019/03/07(木) 22:52:20.96ID:jo89Xa1+0 >>310
ミス発見
Yahoo.cs YahooDataSource 45行
if (brand.Market == MarketType.B || brand.Market == MarketType.Custom ||
を
if (brand.Market == MarketType.Custom ||
に変更
他にもあるかも
ミス発見
Yahoo.cs YahooDataSource 45行
if (brand.Market == MarketType.B || brand.Market == MarketType.Custom ||
を
if (brand.Market == MarketType.Custom ||
に変更
他にもあるかも
313名無しさん@お腹いっぱい。
2019/03/08(金) 00:13:09.91ID:T+gcw58Q0 >>310
Yahoo.csのParsePageメソッドを見ると、200行でIndex判定をしていますが、
230行のIsIndex(int code)を見ると、日経とTOPIXだけをIndexと判定しています。
これであれば、データ保存する倍率が変わりデータ連続性がなくなるはずです。
指数判定コードの修正が必要です。
また、Yahoo.csのRun() を見ると、先にn225をデーターを取得しているようです。
これで有効な日付があればデーターを更新して、さらに追加したコード一覧_codesとTOPIXを読みに行くようです。
したがって、n225とtopixは他のデータソースも含め2度ダウンロードしてしまうことになりそうです。
確か、無尽蔵では上書きですが、
例えば、データソースをYahooに指定して為替のチェックを入れると問題を起こすかもしれません。
個別銘柄をダウンロードする際に、再び日経をダウンロードしますがこの時追加の日付がなくて個別に進まない可能性があるかもしれません。
パラメーターで渡したコードだけダウンロードするように変更するには、渡されたlistがnullかどうかをprivate のbool変数で保持して、
Run()の中で、listが渡された時には日経をスキップするようなコード変更が必要になります。
Yahoo.csのParsePageメソッドを見ると、200行でIndex判定をしていますが、
230行のIsIndex(int code)を見ると、日経とTOPIXだけをIndexと判定しています。
これであれば、データ保存する倍率が変わりデータ連続性がなくなるはずです。
指数判定コードの修正が必要です。
また、Yahoo.csのRun() を見ると、先にn225をデーターを取得しているようです。
これで有効な日付があればデーターを更新して、さらに追加したコード一覧_codesとTOPIXを読みに行くようです。
したがって、n225とtopixは他のデータソースも含め2度ダウンロードしてしまうことになりそうです。
確か、無尽蔵では上書きですが、
例えば、データソースをYahooに指定して為替のチェックを入れると問題を起こすかもしれません。
個別銘柄をダウンロードする際に、再び日経をダウンロードしますがこの時追加の日付がなくて個別に進まない可能性があるかもしれません。
パラメーターで渡したコードだけダウンロードするように変更するには、渡されたlistがnullかどうかをprivate のbool変数で保持して、
Run()の中で、listが渡された時には日経をスキップするようなコード変更が必要になります。
314名無しさん@お腹いっぱい。
2019/03/08(金) 00:38:19.57ID:T+gcw58Q0 >>313
データ倍率に関しては、IsIndexを呼び出す行200を、
AbstractBrand brand = Env.BrandCollection.FindBrand(code);
var shift = 1 / brand.PriceScale;
に変更すれば良いと思います。
データ倍率に関しては、IsIndexを呼び出す行200を、
AbstractBrand brand = Env.BrandCollection.FindBrand(code);
var shift = 1 / brand.PriceScale;
に変更すれば良いと思います。
315名無しさん@お腹いっぱい。
2019/03/08(金) 07:05:21.94ID:7BM+lHkR0 >>309-314
ご丁寧に教示して頂き有り難うございます ちょっとした思いつきで回答を求めた形になりすみません
コードを見ると細かいところは色々違っているようで早とちりでした
海外や業種別指数(○..は251以降)等々は別途自前のプログラムで取得していますがチャート表示には
オメガが良いのでつい手抜きで本体からもダウンロード出来ればと思ってしまいます
この時代にスクレイピング規制はどうかなとは思いますが迷惑のかからない程度に抑えておきます
ご丁寧に教示して頂き有り難うございます ちょっとした思いつきで回答を求めた形になりすみません
コードを見ると細かいところは色々違っているようで早とちりでした
海外や業種別指数(○..は251以降)等々は別途自前のプログラムで取得していますがチャート表示には
オメガが良いのでつい手抜きで本体からもダウンロード出来ればと思ってしまいます
この時代にスクレイピング規制はどうかなとは思いますが迷惑のかからない程度に抑えておきます
316名無しさん@お腹いっぱい。
2019/03/08(金) 07:51:29.99ID:T+gcw58Q0 >>315
自前の外部プログラムを利用しているのですね、スクレイピング知識がないものと余計な注意を書いて申し訳ありませんでした。
自分も、Zanetti.DataSource.Specializedのクラスとスレッドの使い方に関しては難しくてよく理解できない部分も多々ありコンソールアプリ等で定期的にダウンロードとOmegaへのコンバートの方が簡単と思っています。
○..は251以降ですか。
omegachartuserさんのKabutan.csも先ほど見せてもらいましたが、Yahoo.csを忠実に移植されているように思えます。
正規表現が有効であれば、Kabutan.csも同じようにコンストラクターとGetPage他諸々を変更します。
ちなみにGetPageは行233以降はこんな感じですか。
else if(code>=(int)BuiltInIndex.SI_FISHING & code <= (int)BuiltInIndex.SI_SERVICE){
code -= (int)BuiltInIndex.SI_FISHING + 251;
}
DownloadOrder.csにはif(_currencies)の前あたりに以下を追加すればいいように思えます。
if (_sectors) {
for (int i = (int)BuiltInIndex.SI_FISHING; i <= (int)BuiltInIndex.SI_SERVICE; i++)
list.Add(i);
var ds = new Specialized.KabutanSource(_dateArray, list);
list.Clear();
}
多分、数カ所のデータソースを利用することも可能だろうと想像しています。
自前の外部プログラムを利用しているのですね、スクレイピング知識がないものと余計な注意を書いて申し訳ありませんでした。
自分も、Zanetti.DataSource.Specializedのクラスとスレッドの使い方に関しては難しくてよく理解できない部分も多々ありコンソールアプリ等で定期的にダウンロードとOmegaへのコンバートの方が簡単と思っています。
○..は251以降ですか。
omegachartuserさんのKabutan.csも先ほど見せてもらいましたが、Yahoo.csを忠実に移植されているように思えます。
正規表現が有効であれば、Kabutan.csも同じようにコンストラクターとGetPage他諸々を変更します。
ちなみにGetPageは行233以降はこんな感じですか。
else if(code>=(int)BuiltInIndex.SI_FISHING & code <= (int)BuiltInIndex.SI_SERVICE){
code -= (int)BuiltInIndex.SI_FISHING + 251;
}
DownloadOrder.csにはif(_currencies)の前あたりに以下を追加すればいいように思えます。
if (_sectors) {
for (int i = (int)BuiltInIndex.SI_FISHING; i <= (int)BuiltInIndex.SI_SERVICE; i++)
list.Add(i);
var ds = new Specialized.KabutanSource(_dateArray, list);
list.Clear();
}
多分、数カ所のデータソースを利用することも可能だろうと想像しています。
317名無しさん@お腹いっぱい。
2019/03/08(金) 08:08:02.02ID:7BM+lHkR0 >>316
○..は勿論頭に0がいりますが エキスパートの方に対して恐縮ですがGetPageのは最後に
以下を追加しています
else if (code >= (int)BuiltInIndexGroup.SectorIndexStart && code <= (int)BuiltInIndexGroup.SectorIndexEnd)
code = code - (int)BuiltInIndexGroup.SectorIndexStart + 251;
IsIndexにも同様に記述して指数倍率判定をクリヤーさせています
code >= (int)BuiltInIndexGroup.SectorIndexStart && code <= (int)BuiltInIndexGroup.SectorIndexEnd;
○..は勿論頭に0がいりますが エキスパートの方に対して恐縮ですがGetPageのは最後に
以下を追加しています
else if (code >= (int)BuiltInIndexGroup.SectorIndexStart && code <= (int)BuiltInIndexGroup.SectorIndexEnd)
code = code - (int)BuiltInIndexGroup.SectorIndexStart + 251;
IsIndexにも同様に記述して指数倍率判定をクリヤーさせています
code >= (int)BuiltInIndexGroup.SectorIndexStart && code <= (int)BuiltInIndexGroup.SectorIndexEnd;
318名無しさん@お腹いっぱい。
2019/03/08(金) 08:37:33.74ID:CNlAT/KE0319名無しさん@お腹いっぱい。
2019/03/08(金) 08:42:34.53ID:CNlAT/KE0320名無しさん@お腹いっぱい。
2019/03/08(金) 08:58:42.41ID:CNlAT/KE0321名無しさん@お腹いっぱい。
2019/03/08(金) 11:47:12.55ID:CNlAT/KE0 >>310
Kabutan.csの修正と日経除外版
34行から
private bool _listOnly; //追加
public KabutanSource(int[] dates, List<int> list = null) : base(dates) { //変更
if (list != null)
_listOnly = true;
foreach (AbstractBrand brand in Env.BrandCollection.Values) {
if (list != null && !list.Contains(brand.Code)) //追加
continue; //追加
var basic = brand as BasicBrand;
if ( brand.Market == MarketType.Custom || //変更
basic == null || basic.Obsolete)
continue;
_codes.Add(brand.Code); } }
GetPageメソッド 233行に追加
else if(code>=(int)BuiltInIndexGroup.SectorIndexStart & code <= (int)BuiltInIndexGroup.SectorIndexEnd){
code += - (int)BuiltInIndexGroup.SectorIndexStart + 251; }
ParsePageメソッド 291行を変更
AbstractBrand brand = Env.BrandCollection.FindBrand(code);
var shift = 1 / brand.PriceScale;
Kabutan.csの修正と日経除外版
34行から
private bool _listOnly; //追加
public KabutanSource(int[] dates, List<int> list = null) : base(dates) { //変更
if (list != null)
_listOnly = true;
foreach (AbstractBrand brand in Env.BrandCollection.Values) {
if (list != null && !list.Contains(brand.Code)) //追加
continue; //追加
var basic = brand as BasicBrand;
if ( brand.Market == MarketType.Custom || //変更
basic == null || basic.Obsolete)
continue;
_codes.Add(brand.Code); } }
GetPageメソッド 233行に追加
else if(code>=(int)BuiltInIndexGroup.SectorIndexStart & code <= (int)BuiltInIndexGroup.SectorIndexEnd){
code += - (int)BuiltInIndexGroup.SectorIndexStart + 251; }
ParsePageメソッド 291行を変更
AbstractBrand brand = Env.BrandCollection.FindBrand(code);
var shift = 1 / brand.PriceScale;
322名無しさん@お腹いっぱい。
2019/03/08(金) 11:49:01.41ID:CNlAT/KE0 >>321
Run()メソッド
66行(do {の次)から92行(var retry = 0;の前)までを以下でくくって変更
if (!_listOnly) { 66行 - 92行 }
else {
var n = Math.Min(DaysAtOnce, dates.Count);
var original = dates.GetRange(0, n);
dates.RemoveRange(0, n);
_series.Clear();
foreach (var date in original) {
_series.Add(date); }
if (_series.Count == 0)
return;
_codeQueue = new Queue<int>(_codes); }
ParsePageメソッド内で matches.Count == 0 となり、正規表現による日経平均の解析でエラーが出ました。
正規表現を変更してみたところデータを取得できました。
Run()の内部のコード変更はどうかなと思いますが、十分にロジックを理解していませんので興味ある方改良してください。
Run()メソッド
66行(do {の次)から92行(var retry = 0;の前)までを以下でくくって変更
if (!_listOnly) { 66行 - 92行 }
else {
var n = Math.Min(DaysAtOnce, dates.Count);
var original = dates.GetRange(0, n);
dates.RemoveRange(0, n);
_series.Clear();
foreach (var date in original) {
_series.Add(date); }
if (_series.Count == 0)
return;
_codeQueue = new Queue<int>(_codes); }
ParsePageメソッド内で matches.Count == 0 となり、正規表現による日経平均の解析でエラーが出ました。
正規表現を変更してみたところデータを取得できました。
Run()の内部のコード変更はどうかなと思いますが、十分にロジックを理解していませんので興味ある方改良してください。
323名無しさん@お腹いっぱい。
2019/03/08(金) 12:47:32.59ID:7BM+lHkR0 さすがに速いですねこちらはゆっくり楽しんでコーディングにトライしてみます 有り難うございました
89 << 言わずもがなと思い書きませんでしたが昨年の12月にほんのページの体裁が少し変わり正規表現の変更が必要になっていました
89 << 言わずもがなと思い書きませんでしたが昨年の12月にほんのページの体裁が少し変わり正規表現の変更が必要になっていました
324名無しさん@お腹いっぱい。
2019/03/08(金) 15:22:07.31ID:kJ20mdEA0 >>308
リビルド失敗しちゃうんですけど...
リビルド失敗しちゃうんですけど...
2019/03/08(金) 15:56:31.16ID:vge9LSFC0
>>324
あら、失礼しました。ちょっと用事があるので、夜にでも直します。
あら、失礼しました。ちょっと用事があるので、夜にでも直します。
326名無しさん@お腹いっぱい。
2019/03/08(金) 18:34:14.58ID:kJ20mdEA0 >>325
よろしくお願いいたします<m(__)m>
よろしくお願いいたします<m(__)m>
2019/03/08(金) 19:21:20.21ID:vge9LSFC0
>>324
こちらで再現しようとすると、エラーにならないんで、たぶん修正漏れかなと思います。
一番可能性が高いのはMainFrame.csのコメントアウトするところじゃないかと思いました。
MainFrame.cs
398行目だけに「//☆FixDate」と書いてますが、その前の行の行末をコメントアウトしているのも忘れずにお願いします。
this._menuLinkToInfo//});
ChartCanvas.cs
316行目からの if(!Env.FixDate) のIF文で囲むのはオリジナルのソース(4fee7d9)でいうと316行目から349行目です。
Command.cs
288行目のcase文は、この3行を挿入してください。
case CID.FixDate://☆FixDate
Env.FixDate = true;
return CommandResult.Succeeded;
こちらで再現しようとすると、エラーにならないんで、たぶん修正漏れかなと思います。
一番可能性が高いのはMainFrame.csのコメントアウトするところじゃないかと思いました。
MainFrame.cs
398行目だけに「//☆FixDate」と書いてますが、その前の行の行末をコメントアウトしているのも忘れずにお願いします。
this._menuLinkToInfo//});
ChartCanvas.cs
316行目からの if(!Env.FixDate) のIF文で囲むのはオリジナルのソース(4fee7d9)でいうと316行目から349行目です。
Command.cs
288行目のcase文は、この3行を挿入してください。
case CID.FixDate://☆FixDate
Env.FixDate = true;
return CommandResult.Succeeded;
328名無しさん@お腹いっぱい。
2019/03/09(土) 10:03:50.92ID:OuuDkNJL0 >>324
すでに何かソースを修正済みだったのではないですか?
上書きで差し替えられたファイルへの参照などが残っているためでないかと想像しますが。
順番にデバッグしてみることを勧めます。
なお、OmegaChartの場合ビルドしたファイルをコピーするのが煩わしいと思いますので、以下の方法をすすめます。
1 VisualStudioのプロジェクトファイルの履歴で区別がつきやすくなるように、エクスプローラーで例えばzanetti.slnをomega_fixdate.slnに変更します(これはしなくても良いですがVSの履歴でzanettiだらけになるとわからなくなるので便利だと思います)。
心配であれば、ディレクトリを丸ごと複製してバックアップしておいてください。
2 変更したソリューションファイルをダブルクリックするとVisualStudioが起動します。
3 メニューの「プロジェクト」「zanettiのプロパティ」を開いて編集。
3−1 アプリケーションタブ一番上のアッセンブリ名を変更します(現在利用しているOmegaChart.exeが上書きされないようにするため) 例:OmegaFixDate
3−2 ビルドタブを開いて、一番下の出力パスを現在のOmegaChartファイルのパスに変更(dataフォルダが必要なため)。
この時一番上の構成がDebugまたはアクティブな(Debug)であることを確認。
*デバッグで問題ないと分かれば、最終的にReleaseに変更してパスも変えるとリリース版が出力されます。
3−3 ここで、一度デバッグを開始します。緑右三角ボタンまたは「デバッグ」「デバッグの開始」
OmegaChartが起動するはずです。エクスプローラーでOmegaChartのフォルダを見るとOmegaFixDate.exeが新たに作成されているはずです。options.confなどもオリジナルを利用するはずです。
4 これで準備完了です。ソースを変更して随時デバッグで動くか確認しながら作業して行きます。
今回であれば、 >>290 の修正をしてデバッグで動くかを確認。
動くようであれば、>>300 の修正をチャレンジという流れです。
おそらく一手間省けると思います。
すでに何かソースを修正済みだったのではないですか?
上書きで差し替えられたファイルへの参照などが残っているためでないかと想像しますが。
順番にデバッグしてみることを勧めます。
なお、OmegaChartの場合ビルドしたファイルをコピーするのが煩わしいと思いますので、以下の方法をすすめます。
1 VisualStudioのプロジェクトファイルの履歴で区別がつきやすくなるように、エクスプローラーで例えばzanetti.slnをomega_fixdate.slnに変更します(これはしなくても良いですがVSの履歴でzanettiだらけになるとわからなくなるので便利だと思います)。
心配であれば、ディレクトリを丸ごと複製してバックアップしておいてください。
2 変更したソリューションファイルをダブルクリックするとVisualStudioが起動します。
3 メニューの「プロジェクト」「zanettiのプロパティ」を開いて編集。
3−1 アプリケーションタブ一番上のアッセンブリ名を変更します(現在利用しているOmegaChart.exeが上書きされないようにするため) 例:OmegaFixDate
3−2 ビルドタブを開いて、一番下の出力パスを現在のOmegaChartファイルのパスに変更(dataフォルダが必要なため)。
この時一番上の構成がDebugまたはアクティブな(Debug)であることを確認。
*デバッグで問題ないと分かれば、最終的にReleaseに変更してパスも変えるとリリース版が出力されます。
3−3 ここで、一度デバッグを開始します。緑右三角ボタンまたは「デバッグ」「デバッグの開始」
OmegaChartが起動するはずです。エクスプローラーでOmegaChartのフォルダを見るとOmegaFixDate.exeが新たに作成されているはずです。options.confなどもオリジナルを利用するはずです。
4 これで準備完了です。ソースを変更して随時デバッグで動くか確認しながら作業して行きます。
今回であれば、 >>290 の修正をしてデバッグで動くかを確認。
動くようであれば、>>300 の修正をチャレンジという流れです。
おそらく一手間省けると思います。
329名無しさん@お腹いっぱい。
2019/03/10(日) 10:14:17.36ID:Tb4/01lT0 >>327
早速のご対応ありがとうございました(^^ゞ
オリジナル(4fee7d9)版で行うと正常にビルドできてomrgachartも正常に機能しました。
多分おっしゃるとおりすでに修正済みのソースでやってみたのが間違いだと思います。
お手数かけて申し訳ございませんでした。
早速のご対応ありがとうございました(^^ゞ
オリジナル(4fee7d9)版で行うと正常にビルドできてomrgachartも正常に機能しました。
多分おっしゃるとおりすでに修正済みのソースでやってみたのが間違いだと思います。
お手数かけて申し訳ございませんでした。
330名無しさん@お腹いっぱい。
2019/03/10(日) 12:33:36.70ID:0nrxpnx50 いつもお世話になっています
OmegaChartは今は必ず個別銘柄をダウンロードする仕様になっていますが為替や指数類だけで良い場合も結構あります
ダウンロード画面のボタンチェックで個別銘柄の取得を選択できればソースの切り替えにもつながり便利だと思います
DownloadOrderを見ると180行のif(stock_ds!=null) col.Add(stock_ds);
こいつの前にスキップ変数(?)をかませばよさそうな気がしますが上手い書き方ありませんか?
OmegaChartは今は必ず個別銘柄をダウンロードする仕様になっていますが為替や指数類だけで良い場合も結構あります
ダウンロード画面のボタンチェックで個別銘柄の取得を選択できればソースの切り替えにもつながり便利だと思います
DownloadOrderを見ると180行のif(stock_ds!=null) col.Add(stock_ds);
こいつの前にスキップ変数(?)をかませばよさそうな気がしますが上手い書き方ありませんか?
331名無しさん@お腹いっぱい。
2019/03/10(日) 14:18:29.60ID:9znjn8BB0 Download.csのコンボボックスcomboBoxSourceに、DownloadOrder.csのプロパティStockDataSourceNames [line]37 以外のitemを追加してこれを選択するだけでできるような気がします。
試していませんのでブレークポイントを置いてデバッグしながらチャレンジしてみてください。
[file]Download.cs [class]Zanetti.Forms.DownloadDialog [method]ShowOrderGroup() [line]435
if(_currentOrder==null)の前に以下を追加
comboBoxSource.Items.Add("個別銘柄をスキップ");
追加したitemをコンボボックスで選択して開始ボタンをクリックすると OnOKが呼ばれます。
さらにStartDownload() が呼ばれてこの最初のコード
_dataSource = _currentOrder.ConvertToDataSource();
でDownloadOrder.csの ConvertToDataSource() に移るようです。
おそらく、既存のデータソースを追加していなければstock_ds=nullのまま進むように思えます。
もし、業種別指数等のデータソースを一つでも変数colに追加していれば呼び出し元に戻ってそのまま進みそういですし、データソースが追加されていなければConvertToDataSource()の[line]540で中断されるように思います。
_dataSource.AsyncProcess(this.Handle); 以降でエラーが出る可能性があるかもしれませんが。
確信はないので、参考まで。
試していませんのでブレークポイントを置いてデバッグしながらチャレンジしてみてください。
[file]Download.cs [class]Zanetti.Forms.DownloadDialog [method]ShowOrderGroup() [line]435
if(_currentOrder==null)の前に以下を追加
comboBoxSource.Items.Add("個別銘柄をスキップ");
追加したitemをコンボボックスで選択して開始ボタンをクリックすると OnOKが呼ばれます。
さらにStartDownload() が呼ばれてこの最初のコード
_dataSource = _currentOrder.ConvertToDataSource();
でDownloadOrder.csの ConvertToDataSource() に移るようです。
おそらく、既存のデータソースを追加していなければstock_ds=nullのまま進むように思えます。
もし、業種別指数等のデータソースを一つでも変数colに追加していれば呼び出し元に戻ってそのまま進みそういですし、データソースが追加されていなければConvertToDataSource()の[line]540で中断されるように思います。
_dataSource.AsyncProcess(this.Handle); 以降でエラーが出る可能性があるかもしれませんが。
確信はないので、参考まで。
332名無しさん@お腹いっぱい。
2019/03/10(日) 14:55:39.96ID:0nrxpnx50 goto文で抜ければいけるんですがスマートな書き方ですね 難しそうですがトライして見ます
333名無しさん@お腹いっぱい。
2019/03/10(日) 16:34:41.12ID:0nrxpnx50 >>331
うまく行くようです ただ”個別銘柄をスキップ"というメニューが2つ出てきますね
うまく行くようです ただ”個別銘柄をスキップ"というメニューが2つ出てきますね
334名無しさん@お腹いっぱい。
2019/03/10(日) 16:44:03.39ID:9znjn8BB0 >>333
おかしいですね。
メニューというのはコンボボックスの「無尽蔵、Yahoo時系列、edatalab.bet」などのアイテムのことですよね。
コードには1行を追加しただけですから、コンボボックスの最後に「個別銘柄をスキップ」が一つだけ追加されるはずですが。
行435以外にも追加していませんか?
おかしいですね。
メニューというのはコンボボックスの「無尽蔵、Yahoo時系列、edatalab.bet」などのアイテムのことですよね。
コードには1行を追加しただけですから、コンボボックスの最後に「個別銘柄をスキップ」が一つだけ追加されるはずですが。
行435以外にも追加していませんか?
335名無しさん@お腹いっぱい。
2019/03/10(日) 17:01:14.56ID:0nrxpnx50 >>334
すみません 修正したコードを使ってました すばらしいアイデアを有り難うございました
すみません 修正したコードを使ってました すばらしいアイデアを有り難うございました
2019/03/13(水) 18:56:39.41ID:6b+aWHrs0
どうもありがとうございます
2019/03/14(木) 10:17:06.44ID:uhMXW8WL0
株価がなぜか置いてあるサイトの2019年3月13日分がNot Foundになるのですが、ほかの方は閲覧できますでしょうか?
2019/03/14(木) 15:17:53.13ID:8N/gazry0
2019/03/14(木) 20:29:32.04ID:/hrnpTFf0
>>338 ご対応どうもありがとうございます
340名無しさん@お腹いっぱい。
2019/03/17(日) 09:42:02.17ID:+1g2tVyr0341名無しさん@お腹いっぱい。
2019/03/19(火) 16:47:04.29ID:Nefah/eR0 ブックマーク銘柄の株価ダウンロードをしたい ダウンロードメニューは混み合ってるから お気に入りの右クリックが良さそう
自分にできるのは右クリックメニューを表示させることくらいなので恥をしのんで またまた頼んでみる 何とかなりませんか?
自分にできるのは右クリックメニューを表示させることくらいなので恥をしのんで またまた頼んでみる 何とかなりませんか?
2019/03/19(火) 19:43:42.51ID:r9zAqVWb0
善意に甘んじてあまり負担をかけるのはよくないよ
343名無しさん@お腹いっぱい。
2019/03/20(水) 06:23:37.68ID:TJRt14YG0 そだね〜
2019/03/20(水) 08:42:15.05ID:fLe6YufQ0
大まかには、
・BookmarkPane.csのInitContextMenuで項目を追加して、ダウンロードメニューを表示可能にさせる
・OmegaChartのお気に入りに作ったフォルダ配下銘柄がダウンロード対象ならば、これらの銘柄コードを取得する必要がある
→下記のようにすれば銘柄コードを取得できる
ArrayList al = new ArrayList();
BookmarkFolder f = _treeView.SelectedNode.Tag as BookmarkFolder;
foreach(var e in f.Children)
{
al.Add(((BrandBookmark)e).Code);
}
・以下URLの情報を参考にすると銘柄指定して株価ダウンロードする仕組みができる
https://osdn.net/users/omegachartuser/pastebin/6050
UpdateOneBrand uob = new UpdateOneBrand();
uob.Update(al);//このUpdateを改造して、ArrayListを引数して、銘柄コードを取得、順次ダウンロードする仕組みに書き換える
という流れで可能だと思います。
・BookmarkPane.csのInitContextMenuで項目を追加して、ダウンロードメニューを表示可能にさせる
・OmegaChartのお気に入りに作ったフォルダ配下銘柄がダウンロード対象ならば、これらの銘柄コードを取得する必要がある
→下記のようにすれば銘柄コードを取得できる
ArrayList al = new ArrayList();
BookmarkFolder f = _treeView.SelectedNode.Tag as BookmarkFolder;
foreach(var e in f.Children)
{
al.Add(((BrandBookmark)e).Code);
}
・以下URLの情報を参考にすると銘柄指定して株価ダウンロードする仕組みができる
https://osdn.net/users/omegachartuser/pastebin/6050
UpdateOneBrand uob = new UpdateOneBrand();
uob.Update(al);//このUpdateを改造して、ArrayListを引数して、銘柄コードを取得、順次ダウンロードする仕組みに書き換える
という流れで可能だと思います。
345名無しさん@お腹いっぱい。
2019/03/21(木) 06:32:49.82ID:nzO6Ifvu0 >>344
アドバイスありがとうございました 大きな変更でなければ自分でもできるので真面目にソースを追ってみます
アドバイスありがとうございました 大きな変更でなければ自分でもできるので真面目にソースを追ってみます
346名無しさん@お腹いっぱい。
2019/03/22(金) 11:26:52.16ID:T3HLXd5W0 ということは BookmarkPane.cs にコンテキストメニュー表示、そこに例えば OnBookmarkDownloadで引数付きのUpdateを呼び出せば良くて
UpdateOneBrand.cs の改造は Updateのオーバーロード処理を書いてやれば 従来の単一銘柄だけの更新も生かせるということでしょうか
UpdateOneBrand.cs の改造は Updateのオーバーロード処理を書いてやれば 従来の単一銘柄だけの更新も生かせるということでしょうか
2019/03/22(金) 12:37:20.71ID:0TAjLeLf0
OmegaChart TradeStationスキャナから出力したCSVで株価取得に関してなのですが、
TradeStation 9.5ではCSVファイルでの出力ができなくなり、TXTファイルでの出力となっております。
また、出力されたTXTファイルを開きますと中部電力の場合
9502-NG
9502-TS
のように2つコードとともに4本値が出力されます。
この場合、TradeStationスキャナから出力したCSVで株価取得を用いて作成したOmegaChartを用いた場合、どちらの市場の値が取得されるのでしょうか?
TradeStation 9.5ではCSVファイルでの出力ができなくなり、TXTファイルでの出力となっております。
また、出力されたTXTファイルを開きますと中部電力の場合
9502-NG
9502-TS
のように2つコードとともに4本値が出力されます。
この場合、TradeStationスキャナから出力したCSVで株価取得を用いて作成したOmegaChartを用いた場合、どちらの市場の値が取得されるのでしょうか?
2019/03/22(金) 12:41:52.73ID:0TAjLeLf0
index.txtの市場がT1,T2であれば、TSのほうの4本値が取得されるということでよろしいでしょうか?
2019/03/22(金) 15:15:00.18ID:X5aRqTHq0
>>346
仰る通りです。
元のUpdateOneBrand、Updateでは、画面表示している銘柄の株価をダウンロードするということで、
AbstractBrand br = Env.Frame.ChartCanvas.GetBrand();
この1行で済んでいました。
オーバーロードで、銘柄コードを格納した変数を受け取って、格納した銘柄コード分をループさせて株価取得しに行く必要があります。
foreach文などでループさせながら、次のようなコードでOmegaChartが認識できる銘柄コードかを判別します。
foreach (var cd in codes)
{
//略
AbstractBrand br = Env.BrandCollection.FindBrand((int)cd);
//略
}
受け取るのはArrayListよりもListの方がいいかもしれないですね。銘柄コードはint型と決まってるわけですから。
仰る通りです。
元のUpdateOneBrand、Updateでは、画面表示している銘柄の株価をダウンロードするということで、
AbstractBrand br = Env.Frame.ChartCanvas.GetBrand();
この1行で済んでいました。
オーバーロードで、銘柄コードを格納した変数を受け取って、格納した銘柄コード分をループさせて株価取得しに行く必要があります。
foreach文などでループさせながら、次のようなコードでOmegaChartが認識できる銘柄コードかを判別します。
foreach (var cd in codes)
{
//略
AbstractBrand br = Env.BrandCollection.FindBrand((int)cd);
//略
}
受け取るのはArrayListよりもListの方がいいかもしれないですね。銘柄コードはint型と決まってるわけですから。
2019/03/22(金) 15:20:47.40ID:X5aRqTHq0
>>347
仰る通り、東証のレコードの方が選択されます。
これはスキャナから読み取るC#コードですが、
https://osdn.net/users/omegachartuser/pastebin/5755
CheckMarketで、福証などは排除されます。大証やジャスダックとの重複はなくなったので、ここでは問題がおきないという認識です。
もし万が一、重複したコードが通ってしまった場合は、FillDataでエラーになるのでわかります。resultのキーはユニークである必要があるからです。
仰る通り、東証のレコードの方が選択されます。
これはスキャナから読み取るC#コードですが、
https://osdn.net/users/omegachartuser/pastebin/5755
CheckMarketで、福証などは排除されます。大証やジャスダックとの重複はなくなったので、ここでは問題がおきないという認識です。
もし万が一、重複したコードが通ってしまった場合は、FillDataでエラーになるのでわかります。resultのキーはユニークである必要があるからです。
2019/03/22(金) 16:04:31.71ID:0TAjLeLf0
>>350 どうもありがとうございます。
ざっと調べた限りなのですが、TradeStationスキャナから出力したCSVで株価取得のコードを用いて作成したOmegaChartでも、TXTファイルで出力された株価データからデータ取得ができるようです。
ざっと調べた限りなのですが、TradeStationスキャナから出力したCSVで株価取得のコードを用いて作成したOmegaChartでも、TXTファイルで出力された株価データからデータ取得ができるようです。
352名無しさん@お腹いっぱい。
2019/03/23(土) 14:08:06.41ID:dPcTjOiB0 >>349
List型を引数にしてUpdateを書き足してみました うまく行きました どうも有り難うございました
List型を引数にしてUpdateを書き足してみました うまく行きました どうも有り難うございました
353名無しさん@お腹いっぱい。
2019/03/27(水) 11:45:00.60ID:v1FLBsmO0 data.cs では
public const int CREDITSHORT_OFFSET = 24;
public const int CREDITLONG_OFFSET = 28;
他の所ではすべてcreditlongがcreditshortより先に来ている このためデータエキスポートとインポートで信用残の値が逆になりトラブルのもと
DataImporter.cs の中でも以下の様になっていますね
ndd.creditlong = BitConverter.ToInt32(farm.RawDataImage, i * 32 + 24);
ndd.creditshort = BitConverter.ToInt32(farm.RawDataImage, i * 32 + 28);
いっそのこと定義をかえてCREDITSHORT_OFFSETとCREDITLONG_OFFSETを逆にしたらどうでしょう?
public const int CREDITSHORT_OFFSET = 24;
public const int CREDITLONG_OFFSET = 28;
他の所ではすべてcreditlongがcreditshortより先に来ている このためデータエキスポートとインポートで信用残の値が逆になりトラブルのもと
DataImporter.cs の中でも以下の様になっていますね
ndd.creditlong = BitConverter.ToInt32(farm.RawDataImage, i * 32 + 24);
ndd.creditshort = BitConverter.ToInt32(farm.RawDataImage, i * 32 + 28);
いっそのこと定義をかえてCREDITSHORT_OFFSETとCREDITLONG_OFFSETを逆にしたらどうでしょう?
354名無しさん@お腹いっぱい。
2019/03/27(水) 19:50:58.49ID:xHMyQJhm0 >>353
オリジナルのOmegaChartのデータ構造は、作者ページでDate-Open-High-Low-VolumeShort-Longの順で4バイト整数を格納したバイナリファイルと説明されていたと記憶しています。
すでに作者のページが存在しないので確認はできませんが、機能追加等で誤変更されたのではないでしょうか。
ちなみに、DataImporter.csというファイルはオリジナル、panacoran氏の最新ソースのいずれにも見当たらないですね。
オリジナルのOmegaChartのデータ構造は、作者ページでDate-Open-High-Low-VolumeShort-Longの順で4バイト整数を格納したバイナリファイルと説明されていたと記憶しています。
すでに作者のページが存在しないので確認はできませんが、機能追加等で誤変更されたのではないでしょうか。
ちなみに、DataImporter.csというファイルはオリジナル、panacoran氏の最新ソースのいずれにも見当たらないですね。
355名無しさん@お腹いっぱい。
2019/03/28(木) 06:45:26.90ID:p/JV8m+Q0 そうすると逆なんですかね
2019/03/28(木) 15:08:37.62ID:4znjkZFN0
>>353
まったく仰る通りですね。
公式がないので、残った資料から判断するしかないのですが、公式のFAQにあるデータ形式は、買残→売残の順でした。
メーリングリストでそれらしき情報を探っても、売残→買残 の並びである情報はありませんでした。
以前、ユーザーが多数使っていたCSV to Omegaのreadmeを見ても、「信用買残,信用売残」となっています。
ですので、Data.csだけが逆転してるように思えます。
まったく仰る通りですね。
公式がないので、残った資料から判断するしかないのですが、公式のFAQにあるデータ形式は、買残→売残の順でした。
メーリングリストでそれらしき情報を探っても、売残→買残 の並びである情報はありませんでした。
以前、ユーザーが多数使っていたCSV to Omegaのreadmeを見ても、「信用買残,信用売残」となっています。
ですので、Data.csだけが逆転してるように思えます。
357名無しさん@お腹いっぱい。
2019/03/28(木) 18:08:58.64ID:VNXJ3UAk0 >>356
そう言われると自分の思い込みだったかと急に自信がなくなりました。
しかし、Data.csで順番を書き換えると、過去データとの整合性がなくなります。
現在のデータソースで信用残は取れないですが、独自に信用残を追加している場合過去データを全て変更しなければならなくなります。
オリジナルには信用残のエクスポートはなく、Data.csの順番による不具合はないと思います。
他にも不具合があるというのであれば賛成しますが、
追加機能である信用残のエクスポートとデータインポートのコードを書き換えるべきと考えますが、どうでしょうか?
そう言われると自分の思い込みだったかと急に自信がなくなりました。
しかし、Data.csで順番を書き換えると、過去データとの整合性がなくなります。
現在のデータソースで信用残は取れないですが、独自に信用残を追加している場合過去データを全て変更しなければならなくなります。
オリジナルには信用残のエクスポートはなく、Data.csの順番による不具合はないと思います。
他にも不具合があるというのであれば賛成しますが、
追加機能である信用残のエクスポートとデータインポートのコードを書き換えるべきと考えますが、どうでしょうか?
358名無しさん@お腹いっぱい。
2019/03/28(木) 18:30:36.43ID:p/JV8m+Q0 私は勝手に信用売り、信用買いの順で全て統一してしまいました 後はおまかせします
359名無しさん@お腹いっぱい。
2019/03/28(木) 19:40:27.64ID:p/JV8m+Q0 済みませんかきわすれました 353です 今も信用データ取っています過去データの入れ替えはできなくは無いですが結構つらいです
2019/03/28(木) 22:39:58.96ID:4znjkZFN0
よほどのことがない限り、panacoranさんの方のソース変更までは至らないと思うんでご心配には及ばないと思いますよ。
DataImporter.csというのは、私が書いたコードだ思うんですが、時間とやる気が戻り次第、サンプルコードを直すという話にさせてください。
>>248と https://osdn.net/projects/omegachartusers/wiki/FrontPage
について注釈を入れて置くということでご容赦ください。
・OmegaChartのデータファイル・レコードの並び順が、信用売残→信用買残という指摘があり、このサンプルコードは、信用買残→信用売残という並びを想定しているのでこのコードをご使用の際は適宜お気をつけください。
DataImporter.csというのは、私が書いたコードだ思うんですが、時間とやる気が戻り次第、サンプルコードを直すという話にさせてください。
>>248と https://osdn.net/projects/omegachartusers/wiki/FrontPage
について注釈を入れて置くということでご容赦ください。
・OmegaChartのデータファイル・レコードの並び順が、信用売残→信用買残という指摘があり、このサンプルコードは、信用買残→信用売残という並びを想定しているのでこのコードをご使用の際は適宜お気をつけください。
2019/03/29(金) 09:12:57.22ID:GCfk8EGP0
yahoo信用残時系列が売残/買残だからですかね?今となっては分かりませんね。
2019/03/29(金) 15:39:42.41ID:D/G16IIQ0
労力が必要となる割に、プログラムのミスでエラーになる可能性があるならかえって直さないほうがいい気がします
363名無しさん@お腹いっぱい。
2019/03/29(金) 16:50:59.50ID:XBwkRXes0 確かに今となってはどうでも良いとは言わないがそのままでもいいでしょうね
364名無しさん@お腹いっぱい。
2019/03/29(金) 18:13:16.29ID:HTAUnwl20 信用データに関してはほとんどの人が利用していないと思われ、さらに週次データであることから無駄があリます。
また、日々のデータ更新も発表日以外は前日データを参照して埋めなければならずプログラムも多少面倒です。
データをdate-open-high-low-volumeだけにして、信用残に関しては日付の週次データとしてバイナリまたはcsvでサブフォルダに保存。
DailyDataFarmを読み込む時に信用がなければDataFarmを0埋め、信用データがある場合にはメインデータと一緒に読み込んで次の日付までの間をデータを代入。
このような形にすると多少コンパクトになって無駄が省けるようにも思っています。
しかし、信用データがないとしてもデータ読み込みが劇的に早くなるかは疑問符です。
しかもデータ構造を変えるとなると、データ更新系にも影響出る可能性も無いとも言えず、かなり大掛かりになるかもしれません。
ちょっと思いついた机上の空論で、労多く功少なしといったところですから単なる話題提供としてスルーしてください。
また、日々のデータ更新も発表日以外は前日データを参照して埋めなければならずプログラムも多少面倒です。
データをdate-open-high-low-volumeだけにして、信用残に関しては日付の週次データとしてバイナリまたはcsvでサブフォルダに保存。
DailyDataFarmを読み込む時に信用がなければDataFarmを0埋め、信用データがある場合にはメインデータと一緒に読み込んで次の日付までの間をデータを代入。
このような形にすると多少コンパクトになって無駄が省けるようにも思っています。
しかし、信用データがないとしてもデータ読み込みが劇的に早くなるかは疑問符です。
しかもデータ構造を変えるとなると、データ更新系にも影響出る可能性も無いとも言えず、かなり大掛かりになるかもしれません。
ちょっと思いついた机上の空論で、労多く功少なしといったところですから単なる話題提供としてスルーしてください。
365名無しさん@お腹いっぱい。
2019/03/30(土) 06:46:35.06ID:wyYRlang0 Omegachartの自由直線はカーソルを離すと大部分が点線表示になりますよね あれは仕様ですか
2019/03/30(土) 09:26:14.77ID:bKnlqIeX0
クリックしながらマウスを移動して、左クリックを解除した、その部分だけが実線。残りが破線という仕様。
367名無しさん@お腹いっぱい。
2019/03/30(土) 10:13:35.93ID:wyYRlang0 そうでしたか ありがとうございました
2019/03/31(日) 19:26:05.71ID:FhAz5Bp60
>>135
OmegaChartの初期化ファイル(ZIP)更新しました。2019年3月末分まで。
https://drive.google.com/open?id=1yFyFiI1OI-HlJwB9KoBMd9_qqa9y8mAQ
(前回と同じURLです)
OmegaChartの初期化ファイル(ZIP)更新しました。2019年3月末分まで。
https://drive.google.com/open?id=1yFyFiI1OI-HlJwB9KoBMd9_qqa9y8mAQ
(前回と同じURLです)
2019/04/01(月) 11:05:20.44ID:OlRb25lG0
ありがとうございます
370名無しさん@お腹いっぱい。
2019/04/02(火) 18:43:49.25ID:Gz6/SBJ30 株価のダウンロードを自動化したいがメニューのマウスクリックが面倒くさい 解決済みのかたいますか?
2019/04/02(火) 21:52:01.65ID:JQqkzGQB0
タスクスケジューラ起動で、ダウンロードする仕組みを作ったらどうですかね。
372名無しさん@お腹いっぱい。
2019/04/03(水) 07:38:22.75ID:d/SKwv9p0 Omegaで設定してタスクに投げる それありかな
2019/04/03(水) 07:59:18.62ID:ZuL1JM+E0
定形のGUI操作にはautoit使ってる
374名無しさん@お腹いっぱい。
2019/04/03(水) 08:38:17.73ID:d/SKwv9p0 最初はAutoHotkey で行けるのかなと思ったけど autoitで実際に自働DLできますか
Omegachartからダウンロード設定を読み込んでそれをパラメータで渡して起動できれば良さそう
Omegachartからダウンロード設定を読み込んでそれをパラメータで渡して起動できれば良さそう
375名無しさん@お腹いっぱい。
2019/04/03(水) 16:39:01.49ID:d/SKwv9p0 とりあえずやってみたら簡単に出来ました どうもありがとうございました
376名無しさん@お腹いっぱい。
2019/04/03(水) 16:41:57.32ID:d/SKwv9p0 ↑
AutoIt
AutoIt
377名無しさん@お腹いっぱい。
2019/04/03(水) 20:05:16.91ID:IXZ6aFDB0 平日19時に自動ダウンロードするサンプル(ダイアログが出るが何もクリックせずにダウンロード開始して終了後に閉じると思う)
前提として、ダウンロードオーダーを保存して、保存した設定でダウンロードの1が表示されることが必要。
19時以降は起動するごとにダウンロードしますので、修正の余地ありです。
充分検証していないので不具合あるかもしれません。
MainFrame.cs
@ line:120 public MainFrame() { の前々行あたりに以下を追加
//-----------
private Timer _timer;
private void Timer_Tick(object sender, EventArgs e) {
Console.WriteLine("timer" + DateTime.Now.ToString());
if (DateTime.Now.DayOfWeek > DayOfWeek.Sunday & DateTime.Now.DayOfWeek < DayOfWeek.Saturday & DateTime.Now.Hour >= 19) {
_timer.Enabled = false;
//保存した設定でダウンロードメニューの最初の項目が必須
DownloadOrder o = Env.Options.DownloadOrders[0];
DownloadDialog dlg = new DownloadDialog(o);
dlg.Show();
dlg.Refresh();
dlg.OnOK(null, null); } }
//-----------
A public MainFrame(){を以下に変更
//-----------
public MainFrame() {
_timer = new Timer();
_timer.Interval = 60000;
_timer.Tick += Timer_Tick;
_timer.Enabled = true; }
//-----------
B Download.cs 526行のOnOKをpublic に変更
public void OnOK(object sender, EventArgs args) {
前提として、ダウンロードオーダーを保存して、保存した設定でダウンロードの1が表示されることが必要。
19時以降は起動するごとにダウンロードしますので、修正の余地ありです。
充分検証していないので不具合あるかもしれません。
MainFrame.cs
@ line:120 public MainFrame() { の前々行あたりに以下を追加
//-----------
private Timer _timer;
private void Timer_Tick(object sender, EventArgs e) {
Console.WriteLine("timer" + DateTime.Now.ToString());
if (DateTime.Now.DayOfWeek > DayOfWeek.Sunday & DateTime.Now.DayOfWeek < DayOfWeek.Saturday & DateTime.Now.Hour >= 19) {
_timer.Enabled = false;
//保存した設定でダウンロードメニューの最初の項目が必須
DownloadOrder o = Env.Options.DownloadOrders[0];
DownloadDialog dlg = new DownloadDialog(o);
dlg.Show();
dlg.Refresh();
dlg.OnOK(null, null); } }
//-----------
A public MainFrame(){を以下に変更
//-----------
public MainFrame() {
_timer = new Timer();
_timer.Interval = 60000;
_timer.Tick += Timer_Tick;
_timer.Enabled = true; }
//-----------
B Download.cs 526行のOnOKをpublic に変更
public void OnOK(object sender, EventArgs args) {
378名無しさん@お腹いっぱい。
2019/04/04(木) 06:52:53.66ID:h1d9fXHn0 >>377
DLの設定を読み込むにはこういうふうにするんですね参考になります
後は起動するたびにダウンロードするのは具合が悪いので時間帯制限をするとすれば条件の手直しですぐ出来るので
意図せぬDLを防ぐために 例えば "Omegachart.exe /AutoDL”の様に引数を与えた場合だけに限れば可能ですよね
そうするとタスクスケジュラーに渡すのもすんなり行きますが他のやりかたも含めてアドバイス頂ければ助かります
DLの設定を読み込むにはこういうふうにするんですね参考になります
後は起動するたびにダウンロードするのは具合が悪いので時間帯制限をするとすれば条件の手直しですぐ出来るので
意図せぬDLを防ぐために 例えば "Omegachart.exe /AutoDL”の様に引数を与えた場合だけに限れば可能ですよね
そうするとタスクスケジュラーに渡すのもすんなり行きますが他のやりかたも含めてアドバイス頂ければ助かります
379名無しさん@お腹いっぱい。
2019/04/04(木) 12:46:54.46ID:0ERwLm0S0 >>378
起動するたびの再ダウンロードを抑制するには、最後のダウンロードした日付をファイルなどにセーブするなどいくつかの方法が考えられます。
せっかくですから、101の最終データをチェックして再ダウンロードを抑制する例を書いて見ます。
>>377 @のTimer_Tickイベント内の最初に挿入してみてください。
//-------日経最終日のチェック
AbstractBrand nikkei = Env.BrandCollection.FindBrand(101);
DataFarm farm = nikkei.ReserveFarm();
int lastdate = farm.LastDate;
if(int.Parse(DateTime.Now.ToString("yyyyMMdd")) <= lastdate) {
_timer.Enabled = false;
return; }
//--------
多分これで再ダウンロードしないと思われます。
起動するたびの再ダウンロードを抑制するには、最後のダウンロードした日付をファイルなどにセーブするなどいくつかの方法が考えられます。
せっかくですから、101の最終データをチェックして再ダウンロードを抑制する例を書いて見ます。
>>377 @のTimer_Tickイベント内の最初に挿入してみてください。
//-------日経最終日のチェック
AbstractBrand nikkei = Env.BrandCollection.FindBrand(101);
DataFarm farm = nikkei.ReserveFarm();
int lastdate = farm.LastDate;
if(int.Parse(DateTime.Now.ToString("yyyyMMdd")) <= lastdate) {
_timer.Enabled = false;
return; }
//--------
多分これで再ダウンロードしないと思われます。
380名無しさん@お腹いっぱい。
2019/04/04(木) 13:32:21.22ID:h1d9fXHn0 なるほど色んなやり方を良く思いつかれますね 確かに自動ダウンロード可能でした
データが準備できていない時間帯だと取得を繰り返す様ですが取得時間帯を決めてやれば問題なさそうです
どうも有り難うございました
データが準備できていない時間帯だと取得を繰り返す様ですが取得時間帯を決めてやれば問題なさそうです
どうも有り難うございました
381名無しさん@お腹いっぱい。
2019/04/04(木) 17:06:44.26ID:h1d9fXHn0 ttp://datadownload.php.xdomain.jp/data/daily/2019/20190403.txt
は 7277以降取れていない様ですね 本日分は大丈夫みたいですが
は 7277以降取れていない様ですね 本日分は大丈夫みたいですが
2019/04/04(木) 17:27:46.26ID:G4Y9hGed0
>>381
ご指摘ありがとうございます。直しました。
ご指摘ありがとうございます。直しました。
2019/04/04(木) 22:11:44.14ID:fNGT/eXg0
サーバーに障害が起きているのか、index.txtがダウンロード出来なくなっています。
2019/04/05(金) 07:58:57.91ID:1HOwP1xR0
どうもありがとうございます
2019/04/05(金) 18:49:53.36ID:DnxVUqjK0
なぜか株価が置いてあるサイトは、閉鎖になりそうです。BANされたっぽい。
index.txtダウンロードの件は、今確認してみると、問題なさそうですね。
index.txtダウンロードの件は、今確認してみると、問題なさそうですね。
386名無しさん@お腹いっぱい。
2019/04/05(金) 19:33:11.58ID:+a2gm2jn0 もう閉まってるっぽい
2019/04/05(金) 22:07:11.81ID:9UwuJZN90
2017年12月14日は普通に見れますね、一部だけ見れる理由もよくわからないのですが・・・
388名無しさん@お腹いっぱい。
2019/04/08(月) 09:02:10.14ID:og/5HePl0 AngleSharp で書き換えればダウンロード速くなるかな
2019/04/08(月) 15:07:10.09ID:I6awwBeF0
AngleSharpなるものを知りませんでしたが、
https://qiita.com/matarillo/items/a92e7efbfd2fdec62595
かなり良い感じですね。メンテが楽そう。
https://qiita.com/matarillo/items/a92e7efbfd2fdec62595
かなり良い感じですね。メンテが楽そう。
390名無しさん@お腹いっぱい。
2019/04/09(火) 06:33:16.11ID:4Spu8vRK0 vs_community_2019 にしても大丈夫ですか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 毒親「働かないでいつもゴロゴロして!」俺「…」毒親「あっ近隣に熊が出たって!」俺「ふぅ」毒親「どこ行くんだ」
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 生活保護の受給額ってなんでこんなに安いの?
- お前らは“スカイマイルタワー”建設計画を知っているか?
- これ誰か分かるか?
- 支払い詰まってインターネット止まった
