- /*
- * Copyright (c) Daisuke OKAJIMA All rights reserved.
- *
- * $Id$
- */
- using System;
- using System.Xml;
- using System.IO;
- using System.Drawing;
- using System.Diagnostics;
- using System.Text;
- using System.Windows.Forms;
- using System.Collections;
- using System.Security.Cryptography;
- using Zanetti.Arithmetic;
- using Zanetti.Data;
- using Zanetti.DataSource;
- using Zanetti.Forms;
- using Zanetti.Config;
- using Zanetti.SystemTrading.Screening;
- using Zanetti.SystemTrading.AutoTrading;
- using Zanetti.Prediction;
- using Zanetti.Indicators;
- using Zanetti.UI;
- using Zanetti.Parser;
- using Travis.Storage;
- using Travis.Util;
- using Travis.PKI;
- using Crownwood.Magic.Common;
- using Crownwood.Magic.Controls;
- using Crownwood.Magic.Docking;
- using TabControl = Crownwood.Magic.Controls.TabControl;
- //using Crownwood.DotNetMagic.Menus;
- namespace Zanetti.Commands {
- /* 新しいコマンドを追加するときは次のことをすること
- *
- * 1) Command.CIDのEnum値に追加
- * 2) Command#Init, Execを修正
- * 3) コマンドがメニューやツールバーを持つ場合は、MenuItemとCommandの関連付けなどを追加
- */
- internal enum CommandResult {
- Succeeded,
- Ignored,
- Failed
- }
- //キーカスタマイズダイアログではこの順番で表示される
- internal enum CID {
- None = 0 ,
- //ダイアログ表示
- ShowDownloadDialog,
- ShowInitializeDialog,
- ShowPrintDialog,
- ShowCustomizeDialog,
- ShowScreeningDialog,
- ShowPredictionDialog,
- ShowAutoTradingDialog,
- ShowAddBookmarkDialog,
- ShowAboutBox,
- ShowExtensionKitDialog,
- ShowTestKitDialog,
- ShowSearchBrandDialog,
- ShowKeyConfigDialog,
- ShowEnvironmentDialog,
- RegisterUserCode,
- //スタイル変更
- SetStyleDaily,
- SetStyleWeekly,
- SetStyleMonthly,
- SetStyleYearly,
- SetStyleHalfDaily, //堂島用
- ShrinkCandleWidth,
- ExpandCandleWidth,
- ToggleLogarithmStyle,
- ToggleInverseStyle,
- ClearFreeLines,
- ToggleBookmarkPane,
- ToggleSplitAdjuster,
- ToggleScaleLock,
- TogglePriceEnabled,
- ToggleAccumulativeVolumeEnabled,
- //移動
- MoveToFirstDate,
- MoveToLastDate,
- MoveToPrevPage,
- MoveToNextPage,
- MoveToPrevDate, //ロウソク1本分の移動
- MoveToNextDate,
- ShowPrevBrand, //現在見えているペインでの銘柄移動
- ShowNextBrand,
- ShowPrevCode, //コード順での移動
- ShowNextCode,
- Back,
- Front,
- //データ関係
- UpdateCurrentData,
- DownloadIndexFile,
- ExportBrand,
- ExportHalfDaily,
- //Web
- OpenWeb,
- OpenCompanyInfoSite_Yahoo,
- OpenCompanyInfoSite_Infoseek,
- OpenCompanyInfoSite_Nikkei,
- OpenCompanyInfoSite_Livedoor,
- FixDate,//☆FixDate
- //その他
- Quit,
- ReloadKit,
- //これより前にあるコマンドはキーカスタマイズ等の一覧で出てくる。後のコマンドは出てこない。
- VisibleCount,
- ShowInputCode,
- ShowSpecifiedBrand,
- //サポート用コマンド
- #if ENABLE_SUPPORT_COMMAND
- SupRebuildIndex,
- SupCreateKey,
- SupReload,
- SupCreateCert,
- SupStatistics,
- SupShrinkData,
- #endif
- //終端
- Count
- }
- internal class Command : ICloneable {
- private CID _id;
- private string _description;
- private Keys _shortcut;
- public CID ID {
- get {
- return _id;
- }
- }
- public string Description {
- get {
- return _description;
- }
- }
- public Keys Shortcut {
- get {
- return _shortcut;
- }
- }
- public object Clone() {
- return new Command(_id, _description, _shortcut);
- }
- /// これはCommandCollectionからしか呼ばない。
- public void SetChortcut(Keys key) {
- _shortcut = key;
- }
- public bool Visible {
- get {
- return _id < CID.VisibleCount;
- }
- }
- public Command(CID id, string description, Keys shortcut) {
- _id = id;
- _description = description;
- _shortcut = shortcut;
- }
- public CommandResult Exec() {
- switch(_id) {
- //ダイアログ表示
- case CID.ShowDownloadDialog:
- return CommandExec.ShowDownloadDialog();
- case CID.ShowInitializeDialog:
- return CommandExec.ShowInitializeDialog();
- case CID.ShowPrintDialog:
- return CommandExec.ShowPrintDialog();
- case CID.ShowCustomizeDialog:
- return CommandExec.ShowCustomizeDialog();
- case CID.ShowScreeningDialog:
- return CommandExec.ShowScreeningDialog();
- case CID.ShowPredictionDialog:
- return CommandExec.ShowPredictionDialog();
- case CID.ShowAutoTradingDialog:
- return CommandExec.ShowAutoTradingDialog();
- case CID.ShowAddBookmarkDialog:
- return CommandExec.ShowAddBookmarkDialog();
- case CID.ShowAboutBox:
- return CommandExec.AboutBox();
- case CID.ShowExtensionKitDialog:
- return CommandExec.ShowExtensionKitDialog();
- case CID.ShowTestKitDialog:
- return CommandExec.ShowKitTestDialog();
- case CID.ShowSearchBrandDialog:
- return CommandExec.ShowSearchBrandDialog();
- case CID.ShowKeyConfigDialog:
- return CommandExec.ShowKeyConfigDialog();
- case CID.ShowEnvironmentDialog:
- return CommandExec.ShowEnvironmentDialog();
- case CID.RegisterUserCode:
- return CommandExec.RegisterUserCode();
- //スタイル変更
- case CID.SetStyleDaily:
- return CommandExec.SetChartFormat(ChartFormat.Daily);
- case CID.SetStyleWeekly:
- return CommandExec.SetChartFormat(ChartFormat.Weekly);
- case CID.SetStyleMonthly:
- return CommandExec.SetChartFormat(ChartFormat.Monthly);
- case CID.SetStyleYearly:
- return CommandExec.SetChartFormat(ChartFormat.Yearly);
- #if DOJIMA
- case CID.SetStyleHalfDaily:
- return CommandExec.SetChartFormat(ChartFormat.HalfDaily);
- case CID.ExportHalfDaily:
- return CommandExec.ExportHalfDailyData();
- #endif
- case CID.ShrinkCandleWidth:
- return CommandExec.ShrinkCandleWidth();
- case CID.ExpandCandleWidth:
- return CommandExec.ExpandCandleWidth();
- case CID.ToggleLogarithmStyle:
- return CommandExec.SetLogarithmStyle(!Env.Preference.LogScale);
- case CID.ToggleInverseStyle:
- return CommandExec.SetInverseStyle(!Env.Preference.InverseChart);
- case CID.ClearFreeLines:
- return CommandExec.ClearFreeLines();
- case CID.ToggleBookmarkPane:
- return CommandExec.ShowBookmarkPane(!Env.Frame.IsBookmarkPaneVisible);
- case CID.ToggleSplitAdjuster:
- return CommandExec.SetSplitAdjuster(!Env.Preference.AdjustSplit);
- case CID.ToggleScaleLock:
- return CommandExec.SetScaleLock(!Env.Preference.ScaleLock);
- case CID.TogglePriceEnabled:
- return CommandExec.SetPriceEnabled(!Env.Preference.ShowPrice);
- case CID.ToggleAccumulativeVolumeEnabled:
- return CommandExec.SetAccumulativeVolumeEnabled(!Env.Preference.ShowAccumulativeVolume);
- //移動
- case CID.MoveToFirstDate:
- return CommandExec.JumpDate(Keys.Home);
- case CID.MoveToLastDate:
- return CommandExec.JumpDate(Keys.End);
- case CID.MoveToNextPage:
- return CommandExec.JumpDate(Keys.PageDown);
- case CID.MoveToPrevPage:
- return CommandExec.JumpDate(Keys.PageUp);
- case CID.MoveToNextDate:
- return CommandExec.JumpDate(Keys.Right);
- case CID.MoveToPrevDate:
- return CommandExec.JumpDate(Keys.Left);
- case CID.ShowNextBrand:
- return CommandExec.ShowNextBrand();
- case CID.ShowPrevBrand:
- return CommandExec.ShowPrevBrand();
- case CID.ShowNextCode:
- return CommandExec.ShowNextCode();
- case CID.ShowPrevCode:
- return CommandExec.ShowPrevCode();
- case CID.Back:
- return CommandExec.Back(1);
- case CID.Front:
- return CommandExec.Front(1);
- //データ関係
- case CID.DownloadIndexFile:
- return CommandExec.DownloadIndexFile();
- case CID.UpdateCurrentData:
- return CommandExec.UpdateCurrentData();
- case CID.ExportBrand:
- return CommandExec.ExportBrand();
- //Web
- case CID.OpenWeb:
- return CommandExec.OpenWeb();
- case CID.OpenCompanyInfoSite_Yahoo:
- return CommandExec.OpenCompanyInfoPage(CompanyInfoSite.Yahoo);
- case CID.OpenCompanyInfoSite_Infoseek:
- return CommandExec.OpenCompanyInfoPage(CompanyInfoSite.Infoseek);
- case CID.OpenCompanyInfoSite_Nikkei:
- return CommandExec.OpenCompanyInfoPage(CompanyInfoSite.Nikkei);
- case CID.OpenCompanyInfoSite_Livedoor:
- return CommandExec.OpenCompanyInfoPage(CompanyInfoSite.Livedoor);
- case CID.FixDate://☆FixDate
- Env.FixDate = true;
- return CommandResult.Succeeded;
- //その他
- case CID.Quit:
- return CommandExec.Quit();
- case CID.ReloadKit:
- return CommandExec.Reload(null);
- #if ENABLE_SUPPORT_COMMAND
- case CID.SupRebuildIndex: {
- Data.StaticGrouping.Run();
- return CommandResult.Succeeded;
- }
- case CID.SupReload:
- return CommandExec.Reload(null);
- case CID.SupCreateKey:
- return CommandExec.CreateKey();
- case CID.SupCreateCert:
- return CommandExec.GenerateUserCode();
- case CID.SupStatistics:
- return CommandExec.StatisticsTest();
- case CID.SupShrinkData:
- return CommandExec.ShrinkData();
- #endif
- default:
- Debug.WriteLine("Unknown command " + _id);
- return CommandResult.Ignored;
- }
- }
- }
- internal class CommandCollection : ICloneable {
- //Collection
- private Hashtable _keyToCommand;
- private Command[] _idArray;
- public CommandCollection(StorageNode keys) {
- Init(keys);
- }
- public void Reset() {
- Init(null);
- }
- private CommandCollection() {
- _keyToCommand = new Hashtable();
- _idArray = new Command[(int)CID.Count];
- }
- public object Clone() {
- CommandCollection r = new CommandCollection();
- foreach(Command cmd in _idArray) {
- Command nc = (Command)cmd.Clone();
- r._idArray[(int)nc.ID] = nc;
- if(nc.Shortcut!=Keys.None) r._keyToCommand[nc.Shortcut] = nc;
- }
- return r;
- }
- private void Init(StorageNode keys) {
- _keyToCommand = new Hashtable();
- _idArray = new Command[(int)CID.Count];
- //ダイアログ表示
- AddCommand(CID.ShowDownloadDialog, "データのダウンロード", keys, Keys.Control|Keys.O);
- AddCommand(CID.ShowInitializeDialog, "データの初期化", keys, Keys.None);
- AddCommand(CID.ShowPrintDialog, "印刷", keys, Keys.Control|Keys.P);
- AddCommand(CID.ShowCustomizeDialog, "カスタマイズ", keys, Keys.Control|Keys.T);
- AddCommand(CID.ShowScreeningDialog, "スクリーニング", keys, Keys.Control|Keys.S);
- AddCommand(CID.ShowAutoTradingDialog, "自動売買検証", keys, Keys.Control|Keys.V);
- AddCommand(CID.ShowPredictionDialog, "セオリー検証", keys, Keys.None);
- AddCommand(CID.ShowAddBookmarkDialog, "ブックマークへの追加", keys, Keys.None);
- AddCommand(CID.ShowAboutBox, "バージョン情報の表示", keys, Keys.None);
- AddCommand(CID.ShowKeyConfigDialog, "キー割り当てのカスタマイズ", keys, Keys.None);
- AddCommand(CID.ShowEnvironmentDialog, "環境設定", keys, Keys.None);
- AddCommand(CID.ShowExtensionKitDialog, "拡張キット一覧", keys, Keys.None);
- AddCommand(CID.ShowTestKitDialog, "拡張キットテスト", keys, Keys.None);
- AddCommand(CID.ShowSearchBrandDialog, "銘柄の検索", keys, Keys.Control|Keys.F);
- AddCommand(CID.RegisterUserCode, "Contribution Certificateの登録", keys, Keys.None);
- //スタイル変更
- AddCommand(CID.SetStyleDaily, "日足表示", keys, Keys.Control|Keys.D);
- AddCommand(CID.SetStyleWeekly, "週足表示", keys, Keys.Control|Keys.W);
- AddCommand(CID.SetStyleMonthly, "月足表示", keys, Keys.Control|Keys.M);
- AddCommand(CID.SetStyleYearly, "年足表示", keys, Keys.Control|Keys.Y);
- AddCommand(CID.SetStyleHalfDaily, "半日足表示", keys, Keys.Control|Keys.H);
- AddCommand(CID.ShrinkCandleWidth, "ロウソク幅の縮小", keys, Keys.Control|Keys.OemMinus);
- AddCommand(CID.ExpandCandleWidth, "ロウソク幅の拡大", keys, Keys.Control|Keys.Oemplus);
- AddCommand(CID.ToggleLogarithmStyle, "対数表示切替", keys, Keys.Control|Keys.L);
- AddCommand(CID.ToggleInverseStyle, "上下反転表示切替", keys, Keys.Control|Keys.R);
- AddCommand(CID.ClearFreeLines, "自由直線のクリア", keys, Keys.None);
- AddCommand(CID.ToggleBookmarkPane, "ブックマーク表示の切替", keys, Keys.Control|Keys.B);
- AddCommand(CID.ToggleSplitAdjuster, "分割の考慮切替", keys, Keys.None);
- AddCommand(CID.ToggleScaleLock, "縮尺の固定", keys, Keys.None);
- AddCommand(CID.TogglePriceEnabled, "価格と凡例の表示", keys, Keys.None);
- AddCommand(CID.ToggleAccumulativeVolumeEnabled, "価格帯出来高の表示",keys,Keys.None);
- //移動
- AddCommand(CID.MoveToFirstDate, "最初の日付へ移動", keys, Keys.Home);
- AddCommand(CID.MoveToLastDate, "最後の日付へ移動", keys, Keys.End);
- //このブロックはKeyConfigDialogでカスタマイズできる。1コマンドずつの独立ではないことに注意
- AddCommand(CID.MoveToNextPage, "1画面先の日付へ移動", keys, Keys.None);
- AddCommand(CID.MoveToPrevPage, "1画面前の日付へ移動", keys, Keys.None);
- AddCommand(CID.MoveToNextDate, "1日次へ", keys, Keys.None);
- AddCommand(CID.MoveToPrevDate, "1日前へ", keys, Keys.None);
- AddCommand(CID.ShowNextBrand, "次の表示順銘柄", keys, Keys.None);
- AddCommand(CID.ShowPrevBrand, "前の表示順銘柄", keys, Keys.None);
- AddCommand(CID.ShowNextCode, "次のコード順銘柄", keys, Keys.None);
- AddCommand(CID.ShowPrevCode, "前のコード順銘柄", keys, Keys.None);
- AddCommand(CID.Back, "戻る", keys, Keys.Back);
- AddCommand(CID.Front, "進む", keys, Keys.Shift|Keys.Back);
- AddCommand(CID.ShowInputCode, "コード入力", keys, Keys.None);
- //データ関係
- AddCommand(CID.DownloadIndexFile, "インデックスファイルのダウンロード", keys, Keys.None);
- AddCommand(CID.UpdateCurrentData, "現在の銘柄を更新", keys, Keys.F5);
- AddCommand(CID.ExportBrand, "データのエクスポート", keys, Keys.None);
- AddCommand(CID.ExportHalfDaily, "半日足データのエクスポート", keys, Keys.None);
- //Web
- AddCommand(CID.OpenWeb, "OmegaChartのWebを開く", keys, Keys.None);
- AddCommand(CID.OpenCompanyInfoSite_Yahoo, "Yahooの企業情報ページを開く", keys, Keys.None);
- AddCommand(CID.OpenCompanyInfoSite_Infoseek, "Infoseekの企業情報ページを開く", keys, Keys.None);
- AddCommand(CID.OpenCompanyInfoSite_Nikkei, "日経の企業情報ページを開く", keys, Keys.None);
- AddCommand(CID.OpenCompanyInfoSite_Livedoor, "livedoorの企業情報ページを開く", keys, Keys.None);
- AddCommand(CID.FixDate, "日付ルーラー固定" , keys, Keys.None);//☆FixDate
- //その他
- AddCommand(CID.Quit, "OmegaChartの終了", keys, Keys.Control|Keys.Shift|Keys.X);
- AddCommand(CID.ReloadKit, "拡張キットのリロード", keys, Keys.None);
- //サポート用コマンド
- #if ENABLE_SUPPORT_COMMAND
- AddCommand(CID.SupRebuildIndex, "Active500などのindex再作成", keys, Keys.None);
- AddCommand(CID.SupReload, "リロード", keys, Keys.None);
- AddCommand(CID.SupCreateKey, "キーの再作成", keys, Keys.None);
- AddCommand(CID.SupCreateCert, "Contribution Cert作成", keys, Keys.None);
- AddCommand(CID.SupStatistics, "Statistics", keys, Keys.None);
- AddCommand(CID.SupShrinkData, "データ縮小", keys, Keys.None);
- #endif
- }
- private void AddCommand(CID cid, string desc, StorageNode keys, Keys def) {
- Keys k = keys==null? def : Util.ParseKey(keys[cid.ToString()]);
- Command cmd = new Command(cid, desc, k);
- _idArray[(int)cid] = cmd;
- if(k!=Keys.None) _keyToCommand[k] = cmd;
- }
- public Command Get(CID cid) {
- Command r = _idArray[(int)cid];
- Debug.Assert(r!=null);
- return r;
- }
- public CommandResult Exec(CID cid) {
- Command cmd = Get(cid);
- Debug.Assert(cmd!=null);
- return cmd.Exec();
- }
- public CommandResult Exec(Keys key) {
- Command cmd = _keyToCommand[key] as Command;
- CID cid;
- if(cmd!=null)
- return cmd.Exec();
- else if((cid = Env.Options.KeyConfig.Translate(key))!=CID.None) {
- return Exec(cid);
- }
- else if(Keys.D0 <= key && key <= Keys.D9) {
- CommandExec.PromptInputCode(false, (char)('0' + (key-Keys.D0)));
- return CommandResult.Succeeded;
- }
- else if(Keys.NumPad0 <= key && key <= Keys.NumPad9) {
- CommandExec.PromptInputCode(false, (char)('0' + (key-Keys.NumPad0)));
- return CommandResult.Succeeded;
- }
- else
- return CommandResult.Ignored;
- }
- public CommandResult Exec(ref Message m) {
- if(m.Msg==Win32.WM_KEYDOWN) {
- int k = m.WParam.ToInt32();
- return Exec((Keys)k | Control.ModifierKeys); //VKシリーズ定数と同じと仮定
- }
- else if(m.Msg==Win32.WM_MOUSEWHEEL) {
- return ExecMouseWheel(m.WParam.ToInt32() >> 16);
- }
- else
- return CommandResult.Ignored;
- }
- public CommandResult ExecMouseWheel(int delta) {
- CID cid;
- if((cid = Env.Options.KeyConfig.TranslateWheel(delta))!=CID.None) {
- return Exec(cid);
- }
- else
- return CommandResult.Ignored;
- }
- public IEnumerator Enum() {
- return _idArray.GetEnumerator();
- }
- public void SetKeyAssign(Command cmd, Keys newkey) {
- Debug.Assert(_keyToCommand[newkey]==null);
- _keyToCommand[cmd.Shortcut] = null;
- _keyToCommand[newkey] = cmd;
- cmd.SetChortcut(newkey);
- }
- public void SaveTo(StorageNode node) {
- foreach(Command cmd in _idArray) {
- if(cmd.Shortcut!=Keys.None)
- node[cmd.ID.ToString()] = Util.FormatShortcut(cmd.Shortcut);
- }
- }
- }
- internal class CommandExec {
- public static CommandResult ShowBrand(AbstractBrand b) {
- AbstractBrand old = Env.Frame.ChartCanvas.GetBrand();
- if(old!=null) Env.BrandHistory.Update(old);
- CommandResult r = ShowBrandInternal(b);
- return r;
- }
- private static CommandResult ShowBrandInternal(AbstractBrand b) {
- Env.Preference.ScaleLock = false;
- RefreshChart();
- Env.Frame.ChartCanvas.LoadBrand(b, true);
- KitTestDialog kittest = Env.Frame.CurrentModelessDialog as KitTestDialog;
- if(kittest!=null) kittest.UpdateBrandName();
- return CommandResult.Succeeded;
- }
- public static CommandResult Back(int step) {
- if(!Env.BrandHistory.HasBack) return CommandResult.Ignored;
- AbstractBrand b = Env.BrandHistory.Back(Env.Frame.ChartCanvas.GetBrand(), step);
- return ShowBrandInternal(b);
- }
- public static CommandResult Front(int step) {
- if(!Env.BrandHistory.HasFront) return CommandResult.Ignored;
- AbstractBrand b = Env.BrandHistory.Redo(Env.Frame.ChartCanvas.GetBrand(), step);
- return ShowBrandInternal(b);
- }
- public static CommandResult ClearFreeLines() {
- Env.FreeLines.Clear(Env.Frame.ChartCanvas.GetBrand(), Env.CurrentIndicators.Format, Env.Preference.LogScale);
- Env.Frame.ChartCanvas.DrawingEngine.ClearScale();
- Env.Frame.ChartCanvas.Invalidate();
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowDownloadDialog() {
- return ShowDownloadDialog(null);
- }
- public static CommandResult ShowDownloadDialog(DownloadOrder order) {
- MainFrame f = Env.Frame;
- //!!ModelessDialog機構はまだ未完成
- DownloadDialog dlg = new DownloadDialog(order);
- #if PRIVATE_FEATURE //自分専用:ダウンロードしたら即hottestでスクリーニング
- if(Control.ModifierKeys==Keys.Control) {
- dlg.RunScreeningNow = true;
- dlg.Text = "自分専用ダウンロード 即スクリーニング";
- }
- #endif
- dlg.Owner = f;
- Rectangle rc = f.DesktopBounds;
- dlg.Left = (rc.Left + rc.Right)/2 - dlg.Width/2;
- dlg.Top = (rc.Top + rc.Bottom)/2 - dlg.Height/2;
- //f.CurrentModelessDialog = dlg;
- dlg.Show();
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowInitializeDialog() {
- InitializeData dlg = new InitializeData();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- return RefreshChart();
- }
- else
- return CommandResult.Failed;
- }
- private static CodeInput _codeInput;
- public static void PromptInputCode(bool fromMenu, char ch) {
- if(_codeInput==null) _codeInput = new CodeInput(); //2回目から再利用
- if(!fromMenu) _codeInput.StockCode = (int)(ch - '0');
- if(_codeInput.ShowDialog(Env.Frame)==DialogResult.OK) {
- AbstractBrand br = Env.BrandCollection.FindBrand(_codeInput.StockCode);
- if(br!=null)
- ShowBrand(br);
- if(fromMenu)
- Util.Information(Env.Frame, "このメニューを使うかわりに、通常の画面で4桁の数値を打ち込めば銘柄を指定することができます。");
- }
- }
- public static CommandResult ShowPrintDialog() {
- new PrintSupport().ShowPrintDialog();
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowCustomizeDialog() {
- CustomizeDialog dlg = new CustomizeDialog();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- RefreshChart(null);
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult ExportBrand() {
- ExportDialog dlg = new ExportDialog();
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowScreeningDialog() {
- if(Env.Frame.CurrentModelessDialog!=null) {
- Util.Warning(Env.Frame, "現在ダウンロードを実行中のため、スクリーニングはできません。");
- return CommandResult.Succeeded;
- }
- ScreeningDialog dlg = new ScreeningDialog();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- if(dlg.ScreeningOrder.Result!=null) {
- if(dlg.ScreeningOrder.Result.ResultCount > 0) {
- ScreeningResultPane pane = new ScreeningResultPane(dlg.ScreeningOrder);
- AddDockingPane(pane, dlg.ScreeningOrder.Name, pane.RequiredWidth, IconConst.SEARCH);
- }
- }
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowPredictionDialog() {
- PredictionDialog dlg = new PredictionDialog();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- if(dlg.Result!=null) {
- if(dlg.Result.HitCount==0) {
- Util.Warning(Env.Frame, "条件に該当するデータはありませんでした。");
- }
- else {
- PredictionResultPane pane = new PredictionResultPane(dlg.Result);
- AddDockingPane(pane, dlg.Result.Item.Title, pane.RequiredWidth, IconConst.COPY);
- }
- }
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowAutoTradingDialog() {
- AutoTradingDialog dlg = new AutoTradingDialog();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- if(dlg.Result!=null) {
- AutoTradingResultPane pane = new AutoTradingResultPane(dlg.Result);
- AddDockingPane(pane, dlg.Result.Item.Title, pane.RequiredWidth, IconConst.COPY);
- }
- }
- return CommandResult.Succeeded;
- }
- private static Content AddDockingPane(Control content, string title, int width, int imgindex) {
- DockingManager m = Env.Frame.DockingManager;
- WindowContentTabbed wc = FindTabControl(m, State.DockLeft);
- Content c;
- if(wc==null) {
- c = m.Contents.Add(content, title);
- c.DisplaySize = new Size(width+16,500);
- c.FloatingSize = new Size(width+16,500);
- m.AddContentWithState(c, State.DockLeft);
- }
- else {
- c = m.Contents.Add(content, title);
- //通常のタブがあればそこに追加
- if(wc.TabControl.HideTabsMode==TabControl.HideTabsModes.HideUsingLogic)
- m.AddContentToWindowContent(c, wc);
- c.BringToFront();
- }
- c.ImageList = Env.ImageList16;
- c.ImageIndex = imgindex;
- return c;
- }
- private static WindowContentTabbed FindTabControl(DockingManager m, State s) {
- foreach(Content c in m.Contents) {
- WindowContentTabbed t = c.ParentWindowContent as WindowContentTabbed;
- if(t!=null && t.State==s) return t;
- }
- return null;
- }
- public static CommandResult ShowAddBookmarkDialog() {
- SelectBookmarkFolder dlg = new SelectBookmarkFolder();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- AbstractBrand br = Env.Frame.ChartCanvas.GetBrand();
- if(dlg.ResultFolder.ContainsCode(br.Code,false))
- Util.Warning(Env.Frame, "既に同じ銘柄が登録されています。");
- else{
- Content cnt = Env.Frame.BookmarkPaneContent;
- if(cnt!=null && !cnt.Visible)
- ShowBookmarkPane(true);
- dlg.ResultFolder.AddChild(new BrandBookmark(dlg.ResultFolder,br.Code),null);
- }
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowBookmarkPane(bool show) {
- if(show) {
- foreach(Content content in Env.Frame.DockingManager.Contents) {
- if(content.Control is BookmarkPane) {
- content.BringToFront();
- return CommandResult.Failed;
- }
- }
- BookmarkPane pane = new BookmarkPane();
- Env.Frame.BookmarkPaneContent = AddDockingPane(pane, "お気に入り", 150, IconConst.STAR);
- }
- else {
- foreach(Content content in Env.Frame.DockingManager.Contents) {
- if(content.Control is BookmarkPane) {
- Env.Frame.DockingManager.Contents.Remove(content);
- return CommandResult.Failed;
- }
- }
- //Env.Frame.DockingManager.Contents.Remove(Env.Frame.BookmarkPaneContent);
- //Env.Frame.BookmarkPaneContent = null;
- //Env.Frame.DockingManager.HideContent(Env.Frame.BookmarkPaneContent);
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult SetSplitAdjuster(bool adjust) {
- Env.BrandCollection.ClearAllFarms();
- Env.Preference.AdjustSplit = adjust;
- return ResetLayout();
- }
- public static CommandResult SetScaleLock(bool lock_) {
- Env.BrandCollection.ClearAllFarms();
- Env.Preference.ScaleLock = lock_;
- return ResetLayout();
- }
- public static CommandResult SetPriceEnabled(bool value) {
- Env.Preference.ShowPrice = value;
- return ResetLayout();
- }
- public static CommandResult SetAccumulativeVolumeEnabled(bool value) {
- Env.Preference.ShowAccumulativeVolume = value;
- return ResetLayout();
- }
- //!!Keysを使うのはやめたいところ
- public static CommandResult JumpDate(Keys key) {
- DataFarm farm = Env.Frame.ChartCanvas.GetBrand().ReserveFarm();
- if(farm.IsEmpty) return CommandResult.Failed;
- int limit = farm.TotalLength;
- int w = Env.Layout.DisplayColumnCount;
- int n = Env.Frame.ChartCanvas.FirstDateIndex;
- int cursor = n;
- switch(key) {
- case Keys.Home:
- n = 0;
- cursor = n;
- break;
- case Keys.End:
- n = limit - w;
- if(n<0) n = 0;
- cursor = limit-1;
- break;
- case Keys.PageUp:
- n -= w;
- if(n<0) n = 0;
- cursor = n;
- break;
- case Keys.PageDown:
- n += w;
- if(n > limit-w) n = limit-w;
- if(n < 0) n = 0;
- cursor = n + w - 1;
- break;
- case Keys.Left:
- n -= 5;
- if(n < 0) n=0;
- cursor = n;
- break;
- case Keys.Right:
- n += 5;
- if(n > limit-w) n = limit-w;
- if(n < 0) n = 0;
- cursor = n + w - 1;
- break;
- }
- Env.Frame.ChartCanvas.SetDateIndex(n, cursor);
- return CommandResult.Succeeded;
- }
- public static CommandResult OpenWeb() {
- try {
- Process.Start("http://www.omegachart.org/");
- }
- catch(Exception) {
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult AboutBox() {
- AboutBox dlg = new AboutBox();
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowExtensionKitDialog() {
- ExtensionKitListDialog dlg = new ExtensionKitListDialog();
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- Env.SaveEnv();
- Reload(null);
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowKeyConfigDialog() {
- KeyConfigDialog dlg = new KeyConfigDialog();
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowEnvironmentDialog() {
- EnvironmentDialog dlg = new EnvironmentDialog();
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowKitTestDialog() {
- KitTestDialog dlg = Env.KitTestDialog;
- if(dlg==null) {
- dlg = new KitTestDialog();
- Rectangle rc = Env.Frame.DesktopBounds;
- dlg.Left = (rc.Left + rc.Right)/2 - dlg.Width/2;
- dlg.Top = (rc.Top + rc.Bottom)/2 - dlg.Height/2;
- }
- if(dlg.Visible) return CommandResult.Ignored;
- Env.Frame.CurrentModelessDialog = dlg;
- dlg.Owner = Env.Frame;
- dlg.Show();
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowSearchBrandDialog() {
- SearchBrandDialog dlg = new SearchBrandDialog();
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- //IndicatorSetの再構築と再表示
- public static CommandResult RefreshChart() {
- RefreshChart(null);
- return CommandResult.Succeeded;
- }
- public static CommandResult RefreshChart(IIndicatorCustomizer ic) {
- Env.Frame.Cursor = Cursors.WaitCursor;
- ChartCanvas cnv = Env.Frame.ChartCanvas;
- AbstractBrand br = cnv.GetBrand();
- ChartFormat format= Env.Options.ChartFormat;
- #if DOJIMA
- //派生銘柄時の半日足は許可しない 原理的にはできるはずだが
- if(br is DerivedBrand && format==ChartFormat.HalfDaily)
- format = ChartFormat.Daily;
- #endif
- Env.BrandCollection.ClearAllFarms();
- Env.Preference.Refresh();
- IndicatorSetBuilder bld = new IndicatorSetBuilder();
- bld.Customizer = ic;
- bld.Construct(Env.Options.ChartFormat);
- Env.CurrentIndicators = bld.Result;
- cnv.ReloadFromPreference();
- cnv.LoadBrand(br, false);
- ResetLayout();
- Env.Frame.Cursor = Cursors.Default;
- return CommandResult.Succeeded;
- }
- public static CommandResult ResetLayout() {
- Env.Layout.Init();
- Env.Frame.ChartCanvas.ResetLayout();
- Env.Frame.Invalidate(true);
- return CommandResult.Succeeded;
- }
- public static CommandResult Reload(IIndicatorCustomizer ic) {
- Env.ReloadSchema();
- RefreshChart(ic);
- //Util.Information(Env.Frame, "リロードしました");
- return CommandResult.Succeeded;
- }
- public static CommandResult Quit() {
- Env.Frame.Close();
- return CommandResult.Succeeded;
- }
- //署名関係
- public static CommandResult CreateKey() {
- RSAKeyPair kp = RSAKeyPair.GenerateNew(256, new Random());
- //PrivateKey保存
- StreamWriter wr = new StreamWriter(Env.GetAppDir()+"privatekey.txt");
- wr.WriteLine(kp.D.ToHexString());
- wr.WriteLine(kp.P.ToHexString());
- wr.WriteLine(kp.Q.ToHexString());
- wr.WriteLine(kp.U.ToHexString());
- wr.Close();
- //PublicKeyダンプ
- RSAPublicKey pub = (RSAPublicKey)kp.PublicKey;
- Debug.WriteLine("Pubkey-Mod="+pub.Modulus.ToHexString());
- Debug.WriteLine("Pubkey-Exp="+pub.Exponent.ToHexString());
- return CommandResult.Succeeded;
- }
- public static CommandResult SignKit() {
- OpenFileDialog dlg = new OpenFileDialog();
- dlg.Title = "XMLフォーマットの拡張キット選択";
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- string fn = dlg.FileName;
- StorageNode node = new DOMNodeReader(XmlUtil.LoadDOM(fn)).Read();
- Stream strm = new FileStream(fn+".bin", FileMode.Create, FileAccess.Write);
- new BinaryNodeWriter(strm).Write(node);
- strm.Close();
- SignFile(fn+".bin", fn+".signed");
- }
- return CommandResult.Succeeded;
- }
- public static CommandResult SignFile(string fn, string destfile) {
- StreamReader re = new StreamReader(Env.GetAppDir()+"privatekey.txt");
- BigInteger d = new BigInteger(re.ReadLine(), 16);
- BigInteger p = new BigInteger(re.ReadLine(), 16);
- BigInteger q = new BigInteger(re.ReadLine(), 16);
- BigInteger u = new BigInteger(re.ReadLine(), 16);
- RSAPublicKey pub = ZPublicKey.PubKeyForExtensionKit;
- RSAKeyPair kp = new RSAKeyPair(pub.Exponent, d, pub.Modulus, u, p, q);
- byte[] data = new byte[(int)new FileInfo(fn).Length];
- FileStream s = new FileStream(fn, FileMode.Open, FileAccess.Read);
- s.Read(data, 0, data.Length);
- s.Close();
- Debug.WriteLine("Signed length="+data.Length);
- byte[] hash = new SHA1CryptoServiceProvider().ComputeHash(data, 0, data.Length);
- byte[] signature = kp.Sign(hash);
- kp.Verify(signature, hash);
- Stream strm = new FileStream(destfile, FileMode.Create, FileAccess.Write);
- strm.Write(data, 0, data.Length);
- strm.Write(signature, 0, signature.Length);
- strm.Close();
- return CommandResult.Succeeded;
- }
- public static CommandResult GenerateUserCode() {
- RegistrationDialog dlg = new RegistrationDialog();
- dlg.GeneratingCode = true;
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult RegisterUserCode() {
- RegistrationDialog dlg = new RegistrationDialog();
- dlg.GeneratingCode = false;
- dlg.ShowDialog(Env.Frame);
- return CommandResult.Succeeded;
- }
- public static CommandResult OpenCompanyInfoPage(CompanyInfoSite type) {
- try {
- string url = null;
- int code = Env.Frame.ChartCanvas.GetBrand().Code;
- switch(type) {
- case CompanyInfoSite.Yahoo:
- url = String.Format("http://profile.yahoo.co.jp/biz/fundamental/{0}.html", code);
- break;
- case CompanyInfoSite.Infoseek:
- url = String.Format("http://money.www.infoseek.co.jp/MnStock?qt={0}&sv=MN&pg=mn_creport.html", code);
- break;
- case CompanyInfoSite.Nikkei:
- url = String.Format("http://company.nikkei.co.jp/index.cfm?scode={0}", code);
- break;
- case CompanyInfoSite.Livedoor:
- url = String.Format("http://finance.livedoor.com/quote/profile?c={0}", code);
- break;
- }
- Process.Start(url);
- return CommandResult.Succeeded;
- }
- catch(Exception ex) {
- Util.ReportCriticalError(ex);
- return CommandResult.Failed;
- }
- }
- //!!このあたりのペアはdelegateを使うなどしてまとめたい
- public static CommandResult ShowNextCode(){
- AbstractBrand br = Env.BrandCollection.FindNextBrand(
- Env.Frame.ChartCanvas.GetBrand().Code);
- ShowBrand(br);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowPrevCode() {
- AbstractBrand br = Env.BrandCollection.FindPrevBrand(
- Env.Frame.ChartCanvas.GetBrand().Code);
- ShowBrand(br);
- return CommandResult.Succeeded;
- }
- public static CommandResult ShowNextBrand(){
- BrandListPane pane = Env.Frame.CurrentBrandListPane;
- if(pane!=null) {
- AbstractBrand br = pane.NextBrand;
- if(br!=null)
- return ShowBrand(br);
- else
- return CommandResult.Failed;
- }
- return CommandResult.Ignored;
- }
- public static CommandResult ShowPrevBrand() {
- BrandListPane pane = Env.Frame.CurrentBrandListPane;
- if(pane!=null) {
- AbstractBrand br = pane.PrevBrand;
- if(br!=null)
- return ShowBrand(br);
- else
- return CommandResult.Failed;
- }
- return CommandResult.Ignored;
- }
- public static CommandResult ShrinkCandleWidth() {
- int hcw = Env.Preference.HalfCandleWidth;
- if(--hcw < 1) {
- hcw = 1;
- }
- Env.Preference.CandleWidth = hcw * 2;
- ResetLayout();
- return CommandResult.Succeeded;
- }
- public static CommandResult ExpandCandleWidth(){
- int hcw = Env.Preference.HalfCandleWidth;
- if(++hcw > 20) { // 特に意味なし
- hcw = 20;
- }
- Env.Preference.CandleWidth = hcw * 2;
- ResetLayout();
- return CommandResult.Succeeded;
- }
- public static CommandResult SetCandleWidth(int width) {
- Env.Preference.CandleWidth = width;
- ResetLayout();
- return CommandResult.Succeeded;
- }
- public static CommandResult SetLogarithmStyle(bool value){
- Env.Preference.LogScale = value;
- ResetLayout();
- return CommandResult.Succeeded;
- }
- public static CommandResult SetInverseStyle(bool value){
- Env.Preference.InverseChart = value;
- ResetLayout();
- return CommandResult.Succeeded;
- }
- public static CommandResult SetChartFormat(ChartFormat fmt) {
- if(Env.Options.ChartFormat==fmt) return CommandResult.Ignored;
- Env.Options.ChartFormat = fmt;
- RefreshChart();
- return CommandResult.Succeeded;
- }
- public static CommandResult UpdateCurrentData() {
- #if KENMILLE
- Env.Frame.ChartCanvas.ChartTitle.UpdateCurrentBrand();
- return CommandResult.Succeeded;
- #else
- return CommandResult.Failed;
- #endif
- }
- public static CommandResult DownloadIndexFile() {
- using (var dlg = new DownloadIndexFileDialog())
- dlg.ShowDialog();
- return CommandResult.Succeeded;
- }
- #if DOJIMA
- public static CommandResult ExportHalfDailyData() {
- if(Env.CurrentIndicators.Format!=ChartFormat.HalfDaily) {
- Util.Warning("半日足を表示した状態でのみエクスポートできます");
- return CommandResult.Failed;
- }
- SaveFileDialog dlg = new SaveFileDialog();
- dlg.Title = "半日足データのエクスポート";
- dlg.Filter = "CSV Files(*.csv)|*.csv";
- dlg.DefaultExt = "csv";
- if(dlg.ShowDialog(Env.Frame)==DialogResult.OK) {
- string filename = dlg.FileName;
- DailyDataFarm f = (DailyDataFarm)Env.Frame.ChartCanvas.GetBrand().ReserveFarm();
- Dojima.DojimaUtil.HalfDailyDataFarmCache.Get(f).ExportInCSV(filename);
- return CommandResult.Succeeded;
- }
- else
- return CommandResult.Ignored;
- }
- #endif
- //初期データの縮小
- public static CommandResult ShrinkData() {
- Env.Frame.Text = "データ縮小中";
- int date = 20050701; //ここ以降の日付のみ切り出す
- string dir = "shrinked";
- if(!Directory.Exists(dir))
- Directory.CreateDirectory("shrinked");
- IDictionaryEnumerator ie = Env.BrandCollection.GetEnumerator();
- while(ie.MoveNext()) {
- BasicBrand br = ie.Value as BasicBrand;
- if(br!=null) {
- DailyDataFarm f = new DailyDataFarm();
- f.LoadFor(br);
- if(!f.IsEmpty) {
- int index = f.DateToIndex(date);
- FileStream fs = new FileStream(dir + "\\" + br.CodeAsString, FileMode.Create, FileAccess.Write);
- fs.Write(f.RawDataImage, index*DataFarm.RECORD_LENGTH, (f.TotalLength-index)*DataFarm.RECORD_LENGTH);
- fs.Close();
- }
- }
- }
- Util.Information(Env.Frame, "終了");
- return CommandResult.Succeeded;
- }
- //試作:統計情報
- public static CommandResult StatisticsTest() {
- //RunPrivateScreening();
- //MyStatistics.Do();
- return CommandResult.Succeeded;
- }
- #if PRIVATE_FEATURE
- public static void RunPrivateScreening() {
- ScreeningItem item = FindScreeningItem("hottest");
- ScreeningOrder so = new ScreeningOrder(item.Header, item);
- so.Execute();
- ScreeningResult sr = so.Result as ScreeningResult; //!!asがいやらしい
- Util.Information(Env.Frame, "完了");
- if(sr.ResultCount > 0) {
- ScreeningResultPane pane = new ScreeningResultPane(so);
- AddDockingPane(pane, item.Header, pane.RequiredWidth, IconConst.SEARCH);
- }
- }
- private static ScreeningItem FindScreeningItem(string name) {
- foreach(ScreeningItem item in Env.CurrentIndicators.GetScreeningItems()) {
- if(item.Header=="要注意銘柄") return item;
- }
- return null;
- }
- #endif
- }
- }