会則
@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
252名無しさん@お腹いっぱい。
2019/02/12(火) 21:58:37.03ID:MyBX68rD0 //>>251 Mujinzou.cs 1
//新規にコンソールアプリを作成、要参照追加 System.IO.Compressionの参照追加して以下をメインにコピペ
//dateを適当に変更して実行 *ウンロードできなければエラーとなる
DateTime date = DateTime.Parse("2019/2/12");
string[] urls = new string[] {
"http://souba-data.com/d_data/" + date.ToString(@"yyyy\d/yy_MM\d/TyyMMdd") + ".zip",
"http://souba-data.com/k_data/" + date.ToString(@"yyyy/yy_MM/TyyMMdd") + ".zip" };
string[] sources = new string[2] { null, null };
using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) {
for (int i=0;i<2;i++) {
using (var zipStream = client.GetStreamAsync(urls[i]).Result) {
using (System.IO.Compression.ZipArchive archive = new System.IO.Compression.ZipArchive(zipStream)) {
using (System.IO.StreamReader reader = new System.IO.StreamReader(archive.Entries[0].Open(),
System.Text.Encoding.Default)) {
sources[i] = reader.ReadToEnd();
System.IO.File.WriteAllText((i == 0 ? "t" : "k") + archive.Entries[0].Name, sources[i], Encoding.Default);
} } } } }
Dictionary<int, string[]> dicIndexMarket = new Dictionary<int, string[]>();
string indexfile = @"Z:\data\trade\OmegaChart\index.txt";
string[] lines = System.IO.File.ReadAllLines(indexfile, Encoding.Default);
foreach (string line in lines) {
string[] cols = line.Split(',');
if (cols.Contains("OBS"))
continue;
if (int.TryParse(cols[0], out int code)) {
dicIndexMarket.Add(code, new string[]{cols[1], cols[2],
cols[2].Replace("T1","東証1部").Replace("T2","東証2部").Replace("J","JAQ").Replace("M","東証マ") });
} }
//新規にコンソールアプリを作成、要参照追加 System.IO.Compressionの参照追加して以下をメインにコピペ
//dateを適当に変更して実行 *ウンロードできなければエラーとなる
DateTime date = DateTime.Parse("2019/2/12");
string[] urls = new string[] {
"http://souba-data.com/d_data/" + date.ToString(@"yyyy\d/yy_MM\d/TyyMMdd") + ".zip",
"http://souba-data.com/k_data/" + date.ToString(@"yyyy/yy_MM/TyyMMdd") + ".zip" };
string[] sources = new string[2] { null, null };
using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) {
for (int i=0;i<2;i++) {
using (var zipStream = client.GetStreamAsync(urls[i]).Result) {
using (System.IO.Compression.ZipArchive archive = new System.IO.Compression.ZipArchive(zipStream)) {
using (System.IO.StreamReader reader = new System.IO.StreamReader(archive.Entries[0].Open(),
System.Text.Encoding.Default)) {
sources[i] = reader.ReadToEnd();
System.IO.File.WriteAllText((i == 0 ? "t" : "k") + archive.Entries[0].Name, sources[i], Encoding.Default);
} } } } }
Dictionary<int, string[]> dicIndexMarket = new Dictionary<int, string[]>();
string indexfile = @"Z:\data\trade\OmegaChart\index.txt";
string[] lines = System.IO.File.ReadAllLines(indexfile, Encoding.Default);
foreach (string line in lines) {
string[] cols = line.Split(',');
if (cols.Contains("OBS"))
continue;
if (int.TryParse(cols[0], out int code)) {
dicIndexMarket.Add(code, new string[]{cols[1], cols[2],
cols[2].Replace("T1","東証1部").Replace("T2","東証2部").Replace("J","JAQ").Replace("M","東証マ") });
} }
253名無しさん@お腹いっぱい。
2019/02/12(火) 22:05:53.80ID:MyBX68rD0 //>>251 Mujinzou.cs 2
SortedDictionary<int, string> dic = new SortedDictionary<int, string>();
lines = sources[0].Replace("\r", "").Split('\n');
foreach (string line in lines) {
if (line.Trim() == "") continue;
string[] cols = line.Split(',');
int code = int.Parse(cols[1]);
if (dic.ContainsKey(code)) {
Console.WriteLine("当日株価データに重複して存在しています {0}", code);
Console.WriteLine(" 新 :{0}", line);
Console.WriteLine(" 既存:{0}", dic[code]);
continue; }
dic.Add(code, line); }
Console.WriteLine("\r\nindex.txtのOBS以外で銘柄当日株価に銘柄コードが見当たらないもの");
foreach (int code in dicIndexMarket.Keys) {
if (!dic.ContainsKey(code))
Console.WriteLine(" {0} {1} {2}", code, dicIndexMarket[code][1], dicIndexMarket[code][0]); }
Console.WriteLine("\r\nindex.txtに存在しない当日株価の銘柄");
foreach (var pair in dic) {
if (pair.Key > 1300 && !dicIndexMarket.ContainsKey(pair.Key))
Console.WriteLine(" {0}", pair.Value); }
lines = sources[1].Replace("\r", "").Split('\n');
Dictionary<int, List<string[]>> dicPast = new Dictionary<int, List<string[]>>();
for (int i = 0; i < lines.Length; i++) {
if (lines[i].Trim() == "") continue;
string[] cols = lines[i].Split(',');
int code = int.Parse(cols[01]);
if (dicPast.ContainsKey(code)) {
List<string[]> list = dicPast[code];
list.Add(cols);
dicPast[code] = list; }
else dicPast.Add(code, new List<string[]> { cols }); }
SortedDictionary<int, string> dic = new SortedDictionary<int, string>();
lines = sources[0].Replace("\r", "").Split('\n');
foreach (string line in lines) {
if (line.Trim() == "") continue;
string[] cols = line.Split(',');
int code = int.Parse(cols[1]);
if (dic.ContainsKey(code)) {
Console.WriteLine("当日株価データに重複して存在しています {0}", code);
Console.WriteLine(" 新 :{0}", line);
Console.WriteLine(" 既存:{0}", dic[code]);
continue; }
dic.Add(code, line); }
Console.WriteLine("\r\nindex.txtのOBS以外で銘柄当日株価に銘柄コードが見当たらないもの");
foreach (int code in dicIndexMarket.Keys) {
if (!dic.ContainsKey(code))
Console.WriteLine(" {0} {1} {2}", code, dicIndexMarket[code][1], dicIndexMarket[code][0]); }
Console.WriteLine("\r\nindex.txtに存在しない当日株価の銘柄");
foreach (var pair in dic) {
if (pair.Key > 1300 && !dicIndexMarket.ContainsKey(pair.Key))
Console.WriteLine(" {0}", pair.Value); }
lines = sources[1].Replace("\r", "").Split('\n');
Dictionary<int, List<string[]>> dicPast = new Dictionary<int, List<string[]>>();
for (int i = 0; i < lines.Length; i++) {
if (lines[i].Trim() == "") continue;
string[] cols = lines[i].Split(',');
int code = int.Parse(cols[01]);
if (dicPast.ContainsKey(code)) {
List<string[]> list = dicPast[code];
list.Add(cols);
dicPast[code] = list; }
else dicPast.Add(code, new List<string[]> { cols }); }
254名無しさん@お腹いっぱい。
2019/02/12(火) 22:08:52.25ID:MyBX68rD0 //>>251 Mujinzou.cs 3
Console.WriteLine("\r\nindex.txtと市場が異なる当日株価の銘柄");
foreach (var pair in dic) {
string[] cols = pair.Value.Split(',');
if (dicIndexMarket.ContainsKey(pair.Key) && cols[9] != dicIndexMarket[pair.Key][2]) {
StringBuilder sb2 = new StringBuilder();
if (!dicPast.ContainsKey(pair.Key))
sb2.Append("該当銘柄なし");
else {
foreach (string[] cols2 in dicPast[pair.Key]) {
if (cols2[9] == dicIndexMarket[pair.Key][2]) {
sb2.Clear();
sb2.Append("[一致]");
sb2.Append(string.Join(",", cols2));
break; }
else
sb2.Append(cols2[9] + ","); } }
if (!sb2.ToString().Contains("[一致]")) {
sb2.Remove(sb2.Length - 1, 1);
sb2.Append("(一致せず)"); }
Console.WriteLine(" {0} omega[{1,-2}] 当日株価:({3}){2} \t過去:{4}\t{5}",
pair.Key, dicIndexMarket[pair.Key][1], cols[9], cols[2], sb2.ToString(), dicIndexMarket[pair.Key][0]); } }
Console.WriteLine("\r\n過去株価に存在するが当日株価には存在しない銘柄コード");
for (int i = 0; i < lines.Length; i++) {
if (lines[i].Trim() == "") continue;
int code = int.Parse(lines[i].Split(',')[1]);
if (!dic.ContainsKey(code))
Console.WriteLine(" {0}", lines[i]); }
Console.WriteLine("\r\nindex.txtと市場が異なる当日株価の銘柄");
foreach (var pair in dic) {
string[] cols = pair.Value.Split(',');
if (dicIndexMarket.ContainsKey(pair.Key) && cols[9] != dicIndexMarket[pair.Key][2]) {
StringBuilder sb2 = new StringBuilder();
if (!dicPast.ContainsKey(pair.Key))
sb2.Append("該当銘柄なし");
else {
foreach (string[] cols2 in dicPast[pair.Key]) {
if (cols2[9] == dicIndexMarket[pair.Key][2]) {
sb2.Clear();
sb2.Append("[一致]");
sb2.Append(string.Join(",", cols2));
break; }
else
sb2.Append(cols2[9] + ","); } }
if (!sb2.ToString().Contains("[一致]")) {
sb2.Remove(sb2.Length - 1, 1);
sb2.Append("(一致せず)"); }
Console.WriteLine(" {0} omega[{1,-2}] 当日株価:({3}){2} \t過去:{4}\t{5}",
pair.Key, dicIndexMarket[pair.Key][1], cols[9], cols[2], sb2.ToString(), dicIndexMarket[pair.Key][0]); } }
Console.WriteLine("\r\n過去株価に存在するが当日株価には存在しない銘柄コード");
for (int i = 0; i < lines.Length; i++) {
if (lines[i].Trim() == "") continue;
int code = int.Parse(lines[i].Split(',')[1]);
if (!dic.ContainsKey(code))
Console.WriteLine(" {0}", lines[i]); }
255名無しさん@お腹いっぱい。
2019/02/12(火) 22:09:45.24ID:MyBX68rD0 //>>251 Mujinzou.cs 4
Console.WriteLine("\r\n過去株価と当日株価の内容が異なるもの");
int prevcode = 0;
StringBuilder sb = new StringBuilder();
for (int i=0;i<lines.Length;i++) {
if (lines[i].Trim() == "")
continue;
int code = int.Parse(lines[i].Split(',')[1]);
if (!dic.ContainsKey(code))
continue;
if (code != prevcode) {
if (sb.Length > 0 && !sb.ToString().Contains("当日株価に一致"))
Console.WriteLine(sb.ToString());
sb.Clear(); }
//過去株価では名証が名古となっている
if (lines[i].Replace(",名古",",名証") != dic[code]) {
if (code != prevcode) {
sb.AppendFormat(" 当日株価:{0}\r\n", dic[code]);
sb.AppendFormat(" 過去株価:{0}\r\n", lines[i]); }
else
sb.AppendFormat(" 過去株価:{0}\r\n", lines[i]); }
else if(code == prevcode) {
sb.AppendFormat(" 過去株価:{0} 当日株価に一致", lines[i]); }
prevcode = code; }
Console.WriteLine("hit any key then quit");
Console.ReadKey();
Console.WriteLine("\r\n過去株価と当日株価の内容が異なるもの");
int prevcode = 0;
StringBuilder sb = new StringBuilder();
for (int i=0;i<lines.Length;i++) {
if (lines[i].Trim() == "")
continue;
int code = int.Parse(lines[i].Split(',')[1]);
if (!dic.ContainsKey(code))
continue;
if (code != prevcode) {
if (sb.Length > 0 && !sb.ToString().Contains("当日株価に一致"))
Console.WriteLine(sb.ToString());
sb.Clear(); }
//過去株価では名証が名古となっている
if (lines[i].Replace(",名古",",名証") != dic[code]) {
if (code != prevcode) {
sb.AppendFormat(" 当日株価:{0}\r\n", dic[code]);
sb.AppendFormat(" 過去株価:{0}\r\n", lines[i]); }
else
sb.AppendFormat(" 過去株価:{0}\r\n", lines[i]); }
else if(code == prevcode) {
sb.AppendFormat(" 過去株価:{0} 当日株価に一致", lines[i]); }
prevcode = code; }
Console.WriteLine("hit any key then quit");
Console.ReadKey();
256名無しさん@お腹いっぱい。
2019/02/13(水) 07:47:39.40ID:tmp3OF8z0 >>251 2/12の無尽蔵当日(OmegaChartがダウンロードする)ファイルで4本値が間違っているもの一覧
いずれも過去ファイルには出来高ありますが、当日には出来高なしで要注意。
当日:2019/2/12,9793,11,9793 ダイセキ,0,0,0,0,0,東証1部
過去:2019/2/12,9793,31,9793 ダイセキ,0,0,0,0,0,名古1部
過去:2019/2/12,9793,11,9793 ダイセキ,2578,2636,2576,2624,96700,東証1部
当日:2019/2/12,9900,11,9900 サガミ,0,0,0,0,0,東証1部
過去:2019/2/12,9900,31,9900 サガミ,0,0,0,0,0,名古1部
過去:2019/2/12,9900,11,9900 サガミ,1325,1334,1318,1324,36000,東証1部
当日:2019/2/12,9956,11,9956 バロー,0,0,0,0,0,東証1部
過去:2019/2/12,9956,31,9956 バロー,0,0,0,0,0,名古1部
過去:2019/2/12,9956,11,9956 バロー,2656,2749,2635,2748,244300,東証1部
当日:2019/2/12,9966,11,9966 藤久,0,0,0,0,0,東証1部
過去:2019/2/12,9966,31,9966 藤久,0,0,0,0,0,名古1部
過去:2019/2/12,9966,11,9966 藤久,743,747,742,743,2200,東証1部
当日:2019/2/12,9969,12,9969 ショクブン,0,0,0,0,0,東証2部
過去:2019/2/12,9969,32,9969 ショクブン,0,0,0,0,0,名証セ
過去:2019/2/12,9969,12,9969 ショクブン,227,235,220,233,119300,東証2部
当日:2019/2/12,9982,11,9982 タキヒヨー,0,0,0,0,0,東証1部
過去:2019/2/12,9982,31,9982 タキヒヨー,0,0,0,0,0,名古2部
過去:2019/2/12,9982,11,9982 タキヒヨー,1771,1793,1764,1787,8900,東証1部
当日:2019/2/12,9987,11,9987 スズケン,0,0,0,0,0,東証1部
過去:2019/2/12,9987,31,9987 スズケン,0,0,0,0,0,名古2部
過去:2019/2/12,9987,11,9987 スズケン,5650,5860,5620,5830,367700,東証1部
いずれも過去ファイルには出来高ありますが、当日には出来高なしで要注意。
当日:2019/2/12,9793,11,9793 ダイセキ,0,0,0,0,0,東証1部
過去:2019/2/12,9793,31,9793 ダイセキ,0,0,0,0,0,名古1部
過去:2019/2/12,9793,11,9793 ダイセキ,2578,2636,2576,2624,96700,東証1部
当日:2019/2/12,9900,11,9900 サガミ,0,0,0,0,0,東証1部
過去:2019/2/12,9900,31,9900 サガミ,0,0,0,0,0,名古1部
過去:2019/2/12,9900,11,9900 サガミ,1325,1334,1318,1324,36000,東証1部
当日:2019/2/12,9956,11,9956 バロー,0,0,0,0,0,東証1部
過去:2019/2/12,9956,31,9956 バロー,0,0,0,0,0,名古1部
過去:2019/2/12,9956,11,9956 バロー,2656,2749,2635,2748,244300,東証1部
当日:2019/2/12,9966,11,9966 藤久,0,0,0,0,0,東証1部
過去:2019/2/12,9966,31,9966 藤久,0,0,0,0,0,名古1部
過去:2019/2/12,9966,11,9966 藤久,743,747,742,743,2200,東証1部
当日:2019/2/12,9969,12,9969 ショクブン,0,0,0,0,0,東証2部
過去:2019/2/12,9969,32,9969 ショクブン,0,0,0,0,0,名証セ
過去:2019/2/12,9969,12,9969 ショクブン,227,235,220,233,119300,東証2部
当日:2019/2/12,9982,11,9982 タキヒヨー,0,0,0,0,0,東証1部
過去:2019/2/12,9982,31,9982 タキヒヨー,0,0,0,0,0,名古2部
過去:2019/2/12,9982,11,9982 タキヒヨー,1771,1793,1764,1787,8900,東証1部
当日:2019/2/12,9987,11,9987 スズケン,0,0,0,0,0,東証1部
過去:2019/2/12,9987,31,9987 スズケン,0,0,0,0,0,名古2部
過去:2019/2/12,9987,11,9987 スズケン,5650,5860,5620,5830,367700,東証1部
2019/02/13(水) 12:03:56.19ID:5n4hjP030
どうもありがとうございます。
258名無しさん@お腹いっぱい。
2019/02/13(水) 19:35:35.81ID:tmp3OF8z0 >>245
1月以降を見た限りではEdataLabには市場番号の間違い以外にも、一部データに抜けがありました。
しかし、この抜けはよく見てみると取引のなかった銘柄がファイルに含まない仕様が原因と思われました。
これ以外はBrandCollectionに存在する上場廃止以外の個別銘柄の全てが含まれている様です。
自分はこれまで取引のない場合は0埋めで利用していたので、この場合は出来高0のTradeDataを追加して利用してみようかと考えています。
4本値自体が正確かどうかまでは面倒なので調べていません。
1月以降を見た限りではEdataLabには市場番号の間違い以外にも、一部データに抜けがありました。
しかし、この抜けはよく見てみると取引のなかった銘柄がファイルに含まない仕様が原因と思われました。
これ以外はBrandCollectionに存在する上場廃止以外の個別銘柄の全てが含まれている様です。
自分はこれまで取引のない場合は0埋めで利用していたので、この場合は出来高0のTradeDataを追加して利用してみようかと考えています。
4本値自体が正確かどうかまでは面倒なので調べていません。
2019/02/14(木) 08:42:53.40ID:g9ldMBvo0
データダウンロード元ごとにセレクトできる機能もあったら便利かもしれないですね。
2019/02/16(土) 12:42:29.96ID:Fcv+BUgc0
>>258 いろいろと精査、ありがとうございます。
2019/02/16(土) 23:46:30.48ID:DXxl64GW0
無尽蔵、2/12の当日データ。 2503キリンHが2つあるね。
262名無しさん@お腹いっぱい。
2019/02/17(日) 06:36:08.93ID:3yGscUB10 それはコードの25030と25035との2つが切り詰められたせい
2019/02/17(日) 16:10:01.42ID:7MCH8n720
無尽蔵当日の方は銘柄コードに対してユニークでなければならないはずと思ってたんだけど、
Mujinzou.csの中で、株価を格納するのがHashtableで、これって重複したキーのデータを取り込む時は上書きするようで、ちょっと感動した。
Mujinzou.csの中で、株価を格納するのがHashtableで、これって重複したキーのデータを取り込む時は上書きするようで、ちょっと感動した。
264名無しさん@お腹いっぱい。
2019/02/19(火) 13:19:28.12ID:rxhGTWH+0 OmegaChartも随分良くなったがある意味クレクレのおかげでもあるな
265名無しさん@お腹いっぱい。
2019/02/21(木) 15:09:50.20ID:vnJKHizh0 ああちょうせんぼうえいだいじん
266名無しさん@お腹いっぱい。
2019/02/22(金) 11:38:37.58ID:Ur9eo/Tg0 資産300億オーバー
国内44歳以下専業トレーダー首位のBNF氏も
Omegachartで800から1000のチャートを記憶していました
国内44歳以下専業トレーダー首位のBNF氏も
Omegachartで800から1000のチャートを記憶していました
2019/02/22(金) 12:25:28.35ID:eTTw/Kpb0
BNFがomega使うかよ無知
2019/02/22(金) 20:00:13.81ID:6dcCX3Au0
2005年あたりのチャート環境は、Fchartか、OmegaChartかって感じだった。あんまり選択肢なかったな。
Alfaチャートという、いまいちなチャートから乗り換えて、その使用感と拡張性に感動したのがOmegaChartだった。
Alfaチャートという、いまいちなチャートから乗り換えて、その使用感と拡張性に感動したのがOmegaChartだった。
269名無しさん@お腹いっぱい。
2019/02/23(土) 06:46:45.73ID:ss4c00km0 ブィーエヌエフでーす Omegachartの使い方教えましょか
270名無しさん@お腹いっぱい。
2019/02/24(日) 07:52:42.82ID:LWCvphBG0 アホ〜 何か くれてやろか
271名無しさん@お腹いっぱい。
2019/02/25(月) 08:09:45.69ID:+rj+6hc40 おぉう そんなに利口ならアレくれアレを
272名無しさん@お腹いっぱい。
2019/02/27(水) 17:07:40.85ID:n8K3M/z30 アレて何ですか
273名無しさん@お腹いっぱい。
2019/02/27(水) 20:34:14.93ID:OEl0hTy10 無尽蔵さんで2月20日データ抜けが少しあるようですが
6573,6618、9272、、、まだありそうですかね
6573,6618、9272、、、まだありそうですかね
2019/02/27(水) 21:39:11.96ID:38kXoanj0
今確認したら、その3つとも取れてますね・・・
275名無しさん@お腹いっぱい。
2019/02/28(木) 08:16:42.13ID:nE5gdjt60 >>273
JPXの日報PDFと無尽蔵を比較しました。
4本値の異常 9793,9900,9956,9966,9969,9982,9987
無尽蔵に存在しない日報銘柄(PROMarket除く) 25935,1475,1476,1477,1478,1654,1773,8686,9399,6697,4875
外国銘柄も含まれています
なぜかとは25935以外は一致している様です
JPXの日報PDFと無尽蔵を比較しました。
4本値の異常 9793,9900,9956,9966,9969,9982,9987
無尽蔵に存在しない日報銘柄(PROMarket除く) 25935,1475,1476,1477,1478,1654,1773,8686,9399,6697,4875
外国銘柄も含まれています
なぜかとは25935以外は一致している様です
276名無しさん@お腹いっぱい。
2019/03/01(金) 20:03:36.49ID:2s2JexZy0 確認ありがとうございます。
なぜかうちの子は抜け分をDLできないらしいですね。
なぜかうちの子は抜け分をDLできないらしいですね。
277名無しさん@お腹いっぱい。
2019/03/02(土) 00:24:15.09ID:HxSHkHkS0 >>276
2/20に限って調べると、無尽蔵3列目の市場番号と10列目の市場名が一致しない銘柄がいくつかあります
(11:T1 12:T2 13:M 91:J 31-33:名古屋)
code 市場番号 市場名 銘柄名 index.txt
1439 13 JAQ 安江工務店 J
1464 12 東証1部 大和J400ダブル T1
3349 12 東証1部 コスモス薬品 T1
3419 13 名証セ アートグリーン なし
5704 13 東証M JMC M
6178 13 東証1部 日本郵政 T1
6190 13 JAQ フェニックス M
9279 11 東証マ ギフト M
Mujinzou.csのCheckMarketのロジックを見る限りでは、5704のJMC以外は取りこぼしていると思います。
対策1 129行からの「CheckMarket」の一部を変更
case MarketType.T1:
return muj == 11 || muj == 12 || muj == 13;
case MarketType.M:
return muj == 21 || muj == 13 || muj == 11;
case MarketType.J:
return muj == 91 || muj == 13;
ただし、これ以外の日に市場番号に別の間違いがあれば取りこぼすと思います。
対策2 93行を以下に変更(市場チェックしない)
if(br!=null) {
4本値の間違いに関しては、他のデータソースを利用するしかないと思われます。
2/20に限って調べると、無尽蔵3列目の市場番号と10列目の市場名が一致しない銘柄がいくつかあります
(11:T1 12:T2 13:M 91:J 31-33:名古屋)
code 市場番号 市場名 銘柄名 index.txt
1439 13 JAQ 安江工務店 J
1464 12 東証1部 大和J400ダブル T1
3349 12 東証1部 コスモス薬品 T1
3419 13 名証セ アートグリーン なし
5704 13 東証M JMC M
6178 13 東証1部 日本郵政 T1
6190 13 JAQ フェニックス M
9279 11 東証マ ギフト M
Mujinzou.csのCheckMarketのロジックを見る限りでは、5704のJMC以外は取りこぼしていると思います。
対策1 129行からの「CheckMarket」の一部を変更
case MarketType.T1:
return muj == 11 || muj == 12 || muj == 13;
case MarketType.M:
return muj == 21 || muj == 13 || muj == 11;
case MarketType.J:
return muj == 91 || muj == 13;
ただし、これ以外の日に市場番号に別の間違いがあれば取りこぼすと思います。
対策2 93行を以下に変更(市場チェックしない)
if(br!=null) {
4本値の間違いに関しては、他のデータソースを利用するしかないと思われます。
278名無しさん@お腹いっぱい。
2019/03/02(土) 00:39:33.71ID:HxSHkHkS0 >>277 追記
列10の市場名とJPXの日報の市場が一致しない銘柄(ETF、出資証券など除く)もリストアップしてみました
code JPX市場名 無尽蔵市場名 銘柄名 index.txt
3131 JASDAQスタンダード銘柄 東証マ シンデンハイ J
3143 市場第二部 東証マ オーウイル T2
3350 JASDAQスタンダード銘柄 東証1部 レッドプラネット J
3560 JASDAQスタンダード銘柄 東証マ ほぼ日 J
3571 市場第一部 東証2部 ソトー T1
3671 マザーズ銘柄 東証1部 ソフトマックス M
3810 市場第二部 東証マ サイバステ T2
4033 市場第一部 東証2部 日東エフシー T1
6045 マザーズ銘柄 東証2部 レントラックス M
6190 マザーズ銘柄 JAQ フェニックス M
6698 市場第二部 東証マ ヴィスコテク T2
7805 JASDAQスタンダード銘柄 東証マ MTG J
7806 マザーズ銘柄 JAQ プリントネット M
9275 市場第二部 東証マ ナルミヤイン T2
9658 市場第一部 東証2部 ビジ太田昭 T1
これらも一部は取り込められていないと思われます。
なお、7805と7806の銘柄名は逆のようです
ダウンロードせずにプログラムでチェックしているので、目視で確認まではしていません。
もしかするとこちらのプログラムミスかもしれません。
列10の市場名とJPXの日報の市場が一致しない銘柄(ETF、出資証券など除く)もリストアップしてみました
code JPX市場名 無尽蔵市場名 銘柄名 index.txt
3131 JASDAQスタンダード銘柄 東証マ シンデンハイ J
3143 市場第二部 東証マ オーウイル T2
3350 JASDAQスタンダード銘柄 東証1部 レッドプラネット J
3560 JASDAQスタンダード銘柄 東証マ ほぼ日 J
3571 市場第一部 東証2部 ソトー T1
3671 マザーズ銘柄 東証1部 ソフトマックス M
3810 市場第二部 東証マ サイバステ T2
4033 市場第一部 東証2部 日東エフシー T1
6045 マザーズ銘柄 東証2部 レントラックス M
6190 マザーズ銘柄 JAQ フェニックス M
6698 市場第二部 東証マ ヴィスコテク T2
7805 JASDAQスタンダード銘柄 東証マ MTG J
7806 マザーズ銘柄 JAQ プリントネット M
9275 市場第二部 東証マ ナルミヤイン T2
9658 市場第一部 東証2部 ビジ太田昭 T1
これらも一部は取り込められていないと思われます。
なお、7805と7806の銘柄名は逆のようです
ダウンロードせずにプログラムでチェックしているので、目視で確認まではしていません。
もしかするとこちらのプログラムミスかもしれません。
2019/03/02(土) 10:02:42.57ID:oVOxFTJx0
どうもありがとうございます
280名無しさん@お腹いっぱい。
2019/03/04(月) 13:18:44.35ID:LZlgT9og0 まだ DreamVisor から業種別指数取れますね サンプルコードを使わせてもらって○探から個別株と業種別指数は取れる様になった
しかしC#が駄目な上に手抜きの小細工なので_codeQueue.EnqueueにSI_FISHINGなどをを書き足すだけ ちょっと恥ずかしい
33個もあればせめてループさせたいがC#の素人ではソースがよく分からずに困っています Mujinzouからのダウンロードにも対応させるには
多分DowloadOrderの書き換えがいるんだろうが全くの力不足で時間がかかりそう せめて最初のループの所だけでもなんとかしたい
どなたかヒントだけでも結構ですので御教示お願い出来ませんか
しかしC#が駄目な上に手抜きの小細工なので_codeQueue.EnqueueにSI_FISHINGなどをを書き足すだけ ちょっと恥ずかしい
33個もあればせめてループさせたいがC#の素人ではソースがよく分からずに困っています Mujinzouからのダウンロードにも対応させるには
多分DowloadOrderの書き換えがいるんだろうが全くの力不足で時間がかかりそう せめて最初のループの所だけでもなんとかしたい
どなたかヒントだけでも結構ですので御教示お願い出来ませんか
281名無しさん@お腹いっぱい。
2019/03/04(月) 22:19:50.48ID:0q1xLtMe0 >>280
現在取得できていて分かりやすければそれでいいと思いますが。
今後のプログラミングの勉強としてforループの例をアドバイスすると、.Enqueueの場所で
for(int code=(int)BuiltInIndex.SI_FISHING;code<=(int)BuiltInIndex.SI_SERVICE;code++)
_codeQueue.Enqueue(code);
と書くことで33業種をまとめて追加できると思います。
また、ウェブページをダウンロードするメソッド内にも、
if(code >= (int)BuiltInIndex.SI_FISHING & code<=(int)BuiltInIndex.SI_SERVICE)
code = [ウェブページの水産コード番号] + code - (int)BuiltInIndex.SI_FISHING;
とするとコードが短くなると思います。
*当然ウェブページのコード番号が連番でなければなりません。
考えたままに書き込んでいるので間違いがあるかもしれません。
現在取得できていて分かりやすければそれでいいと思いますが。
今後のプログラミングの勉強としてforループの例をアドバイスすると、.Enqueueの場所で
for(int code=(int)BuiltInIndex.SI_FISHING;code<=(int)BuiltInIndex.SI_SERVICE;code++)
_codeQueue.Enqueue(code);
と書くことで33業種をまとめて追加できると思います。
また、ウェブページをダウンロードするメソッド内にも、
if(code >= (int)BuiltInIndex.SI_FISHING & code<=(int)BuiltInIndex.SI_SERVICE)
code = [ウェブページの水産コード番号] + code - (int)BuiltInIndex.SI_FISHING;
とするとコードが短くなると思います。
*当然ウェブページのコード番号が連番でなければなりません。
考えたままに書き込んでいるので間違いがあるかもしれません。
2019/03/04(月) 22:27:07.30ID:+jVrQKmi0
これで行けないですかね?
for(int i = 501;i<=533;i++)
{
_codeQueue.Enqueue(i);
}
for(int i = 501;i<=533;i++)
{
_codeQueue.Enqueue(i);
}
283名無しさん@お腹いっぱい。
2019/03/04(月) 23:35:40.08ID:0q1xLtMe0 >>280
個別銘柄をEdatalabまたは無尽蔵で、指標関連をYahooまたは○探からダウンロードしようと考えているのであれば、ある程度大幅にコードの変更が必要です。
データソースとして選択可能な無尽蔵、Edatalab、Yahooに関してはMarketType.B等以外の個別銘柄を全てダウンロードする仕様のはずです。
DreamVisorは指標のダウンロードでクラスの構造が異なるからです。
一つ思いついたのは、Yahooを例にとると銘柄をパラメーターとして渡せるコンストラクターを追加します
public YahooDataSource(int[] dates, int[] codes) : base(dates) {
foreach (AbstractBrand brand in Env.BrandCollection.Values) {
if (Array.IndexOf(codes, brand.Code) < 0)
continue;
...
こちらのコンストラクターを使った場合、指定したコードだけダウンロードするはずです。
ダウンロードダイアログが押されると呼ばれる、DownloadOrder.csの128行からのConvertToDataSourceを変更します。
まずDreamVisor関連をコメントアウト
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();を宣言して
通常版のifを利用して_sectorsその他のindex関連が選択されている場合に、listにコードを追加します。
StockDownload stock_index = new new Specialized.YahooDataSource(_dateArray, list.ToArray());
これをswitchの前かブロック終了後に追加することで、追加したコードのページがあればYahooでダウンロードすると思います。
試していないので確信はありませんが、参考まで。
個別銘柄をEdatalabまたは無尽蔵で、指標関連をYahooまたは○探からダウンロードしようと考えているのであれば、ある程度大幅にコードの変更が必要です。
データソースとして選択可能な無尽蔵、Edatalab、Yahooに関してはMarketType.B等以外の個別銘柄を全てダウンロードする仕様のはずです。
DreamVisorは指標のダウンロードでクラスの構造が異なるからです。
一つ思いついたのは、Yahooを例にとると銘柄をパラメーターとして渡せるコンストラクターを追加します
public YahooDataSource(int[] dates, int[] codes) : base(dates) {
foreach (AbstractBrand brand in Env.BrandCollection.Values) {
if (Array.IndexOf(codes, brand.Code) < 0)
continue;
...
こちらのコンストラクターを使った場合、指定したコードだけダウンロードするはずです。
ダウンロードダイアログが押されると呼ばれる、DownloadOrder.csの128行からのConvertToDataSourceを変更します。
まずDreamVisor関連をコメントアウト
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();を宣言して
通常版のifを利用して_sectorsその他のindex関連が選択されている場合に、listにコードを追加します。
StockDownload stock_index = new new Specialized.YahooDataSource(_dateArray, list.ToArray());
これをswitchの前かブロック終了後に追加することで、追加したコードのページがあればYahooでダウンロードすると思います。
試していないので確信はありませんが、参考まで。
284名無しさん@お腹いっぱい。
2019/03/05(火) 00:40:36.90ID:PRV6GrY50 ダウンロード違法化拡大となると、無尽蔵やなぜかなどのデータソースの利用はためらってしまう。
Yahooもスクレイピングを禁止しているし。
KABU+やトレステが無難かな。
Yahooもスクレイピングを禁止しているし。
KABU+やトレステが無難かな。
285名無しさん@お腹いっぱい。
2019/03/05(火) 06:10:34.29ID:P2/Zt2zS0 >>281,282,283
御回答頂きありがとうございました もしやと思い501から533まで試しに回してみたら行けましたね
大ぴっらにするには問題も結構ありそうなのでご意見を参考にして個人的にトライしてみます
御回答頂きありがとうございました もしやと思い501から533まで試しに回してみたら行けましたね
大ぴっらにするには問題も結構ありそうなのでご意見を参考にして個人的にトライしてみます
286名無しさん@お腹いっぱい。
2019/03/05(火) 08:09:16.55ID:PRV6GrY50 違法ダウンロード対策として
101と日経ジャスダック平均などは日経プロファイルでcsv(1年分)から取得(日経PERのヒストリカルもある)
TOPIX、業種、マザーズなどはJPXの指標で(jsonファイル 最新+過去5日分)
個別銘柄はJPX日報pdfからインポート(翌営業日)
当日引け後にチャートを見る場合は、JPXの株価検索で時系列ダウンロードも可能ではある
著作権元の許可なくアップロードされているものではなく、著作権を主張している発信元が公開しているデータを利用して、データを公開せずに個人利用にとどめれば違法ダウンロードの問題はクリアできそうな気がする。
データの蓄積、改造に該当すると指摘されて問題になるかもしれないが
101と日経ジャスダック平均などは日経プロファイルでcsv(1年分)から取得(日経PERのヒストリカルもある)
TOPIX、業種、マザーズなどはJPXの指標で(jsonファイル 最新+過去5日分)
個別銘柄はJPX日報pdfからインポート(翌営業日)
当日引け後にチャートを見る場合は、JPXの株価検索で時系列ダウンロードも可能ではある
著作権元の許可なくアップロードされているものではなく、著作権を主張している発信元が公開しているデータを利用して、データを公開せずに個人利用にとどめれば違法ダウンロードの問題はクリアできそうな気がする。
データの蓄積、改造に該当すると指摘されて問題になるかもしれないが
2019/03/05(火) 11:50:11.27ID:d6cnwoki0
株価に著作権があるかどうかは、ちょっと疑問に思ってる者ですが、ヤフーなどサイトのレイアウトにはそういうものがあるのでしょうから、それを複製したらアウトになるというのは理解できます。
東証は手数料欲しさに、株価に著作権があるかのように振舞ってるだけじゃないかと思ってます。ちなみに、なぜかの元ネタはRSSです。
東証は手数料欲しさに、株価に著作権があるかのように振舞ってるだけじゃないかと思ってます。ちなみに、なぜかの元ネタはRSSです。
288名無しさん@お腹いっぱい。
2019/03/05(火) 16:32:26.82ID:GDoBMg1Q0 任意のローソク足のところでルーラーを止めておくことが出来るようにファイル改造できないですか?
2019/03/05(火) 17:31:38.33ID:d6cnwoki0
290名無しさん@お腹いっぱい。
2019/03/05(火) 17:47:26.67ID:PRV6GrY50 >>288
ダブルクリックで水平線を描く機能がなくてもいいのならば
ChartCanvas.csを右クリックからコードの表示
OnDoubleClick内
510行 var ev = ...
511行 _currentFreeLine = ...
の2行をコメントアウト
513行 DoubleClickイベントの前に
private bool fixDate;
を追加
コメントアウトした511行の次に
fixDat = !fixDate;
を追加
OnMouseMove イベント内の
317行 int id = ...
349行 }
までのブロックを、
if(!fixDate){
317行
349行
}
で囲む
これで、ダブルクリックするごとに日付の固定と解除が切りかわるはずです。
ダブルクリックで水平線を描く機能がなくてもいいのならば
ChartCanvas.csを右クリックからコードの表示
OnDoubleClick内
510行 var ev = ...
511行 _currentFreeLine = ...
の2行をコメントアウト
513行 DoubleClickイベントの前に
private bool fixDate;
を追加
コメントアウトした511行の次に
fixDat = !fixDate;
を追加
OnMouseMove イベント内の
317行 int id = ...
349行 }
までのブロックを、
if(!fixDate){
317行
349行
}
で囲む
これで、ダブルクリックするごとに日付の固定と解除が切りかわるはずです。
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ファイルで出力された株価データからデータ取得ができるようです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 日本「中国製品買うの辞めます。中国旅行辞めます。」 中国「あぁ、そう…」
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 「遺体、安倍、会いたい」👈逆から読んでみて [175344491]
- お前らの知能指数教えてや
