using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TradeIdeas.TIProData;
using TradeIdeas.TIProData.Configuration;
using TradeIdeas.TIProData.Interfaces;
namespace TradeIdeas.TIProGUI.OddsMaker
{
public partial class OddsMakerConfigWindow : Form
{
private IConnectionMaster _connectionMaster;
private ISendManager _sendManager;
///
/// Stores the current odds maker settings based on the user input.
///
private OddsMakerConfiguration.OddsMakerConfigMemento _oddsMakerConfig = new OddsMakerConfiguration.OddsMakerConfigMemento();
public OddsMakerConfiguration.OddsMakerConfigMemento OddsMakerConfigMemento
{
get { return _oddsMakerConfig; }
}
public IHoldOddsMakerConfig OddsMakerSettingsContainer
{
get { return _oddsMakerSettingsContainer; } //we want to retrieve this item within the OddsMakerResults window before this window is closed down
}
public string AlertConfig
{
get { return _alertConfig; } //we want to retrieve this item within the OddsMakerResults window before this window is closed down
}
private string _targetFilterCode = "";
private Filter _targetFilter = null;
private bool _useTargetFilter = false;
private string _stopFilterCode = "";
private Filter _stopFilter = null;
private bool _useStopFilter = false;
private string _exitCondition = "";
private string _alertConfig = "";
private string _windowName = "";
private bool _long = true;
private OddsMakerResults _oddsMakerResults;
private OddsMakerColumnConfiguration _columnConfigType = GuiEnvironment.OddsMakerColumnConfigType;
private IHoldOddsMakerConfig _oddsMakerSettingsContainer;
private FontManager _fontManager;
private const float DEFAULT_FONT_SIZE = 9.75F;
///
/// Displays the Odds Maker configuration screen.
///
/// Config string for alert strategy
/// Connection master object
/// Window name for alert strategy
/// AlertForm object for saving the Odds Maker settings that user selects if they actually end up performing a test.
/// Default settings to be used in the form.
public OddsMakerConfigWindow(string config, IConnectionMaster connectionMaster, string windowName, IHoldOddsMakerConfig oddsMakerSettingsContainer, OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerConfig)
{
_connectionMaster = connectionMaster;
_sendManager = connectionMaster.SendManager;
_alertConfig = config;
_oddsMakerSettingsContainer = oddsMakerSettingsContainer;
_windowName = windowName;
_fontManager = new FontManager(this, DEFAULT_FONT_SIZE);
_oddsMakerConfig = (OddsMakerConfiguration.OddsMakerConfigMemento)oddsMakerConfig.Clone();
Icon = GuiEnvironment.Icon;
_long = _oddsMakerConfig.Long;
this.StartPosition = FormStartPosition.CenterParent;
InitializeComponent();
// Hide exit strategy config option for Optima users.
if(GuiEnvironment.OPTIMA)
{
radioButtonExitStrategy.Visible = false;
buttonExitStrategyConfigure.Visible = false;
}
MinimizeBox = false;
selectTheFont();
SetSlidersMinMax();
InitializeTimeSliders();
InitializeRadioGroups();
PopulateGuiFromSettings();
UpdatePrevNextButtons();
UpdateBacktestButtons();
RequestFilters();
}
///
/// Requests the filters available to populate the comboboxes.
///
private void RequestFilters()
{
ConfigurationWindowManager configManager = new ConfigurationWindowManager();
configManager.LoadFromServer(_connectionMaster, ConfigurationType.Alerts, OnConfigLoaded, _alertConfig);
}
///
/// List of available filters from the server. Requested upon starting this form.
/// Sort filter list in alphabetical order.
///
private List _filters = new List();
private void OnConfigLoaded(ConfigurationWindowManager configManager)
{
_filters.Clear();
List filters = new List();
filters = configManager.FiltersInOrder.ToList();
// Sort list in alphabetical order
_filters = filters.OrderBy(o => o.LongDescription).ToList();
PopulateFilters();
}
private void PopulateFilters()
{
this.InvokeIfRequired(delegate()
{
comboBoxTargetFilter.DataSource = new BindingSource(_filters, null);
comboBoxTargetFilter.DisplayMember = "LongDescription";
comboBoxTargetFilter.ValueMember = "InternalCode";
comboBoxStopFilter.DataSource = new BindingSource(_filters, null);
comboBoxStopFilter.DisplayMember = "LongDescription";
comboBoxStopFilter.ValueMember = "InternalCode";
if (_targetFilterCode != "" && _filters.Where(x => x.InternalCode == _targetFilterCode).Count() > 0)
{
Filter filter = _filters.Where(x => x.InternalCode == _targetFilterCode).First();
_targetFilter = filter;
comboBoxTargetFilter.SelectedItem = filter;
}
else
comboBoxTargetFilter.SelectedIndex = 0;
if (_stopFilterCode != "" && _filters.Where(x => x.InternalCode == _stopFilterCode).Count() > 0)
{
Filter filter = _filters.Where(x => x.InternalCode == _stopFilterCode).First();
_stopFilter = filter;
comboBoxStopFilter.SelectedItem = filter;
}
else
comboBoxStopFilter.SelectedIndex = 0;
ReflectUserSelectionRiskManagement();
UpdateSummaryTab();
});
}
///
/// Updates state of buttons (colors) based on long/short
///
private void UpdateBacktestButtons()
{
ToggleBoldFont(buttonBuy, _long);
ToggleBoldFont(buttonSell, !_long);
}
///
/// Populate the GUI form with settings from _oddsMakerConfig
///
private void PopulateGuiFromSettings()
{
int totalMinutesFromStart = _oddsMakerConfig.EntryHoursStart * 60 + _oddsMakerConfig.EntryMinutesStart;
if (totalMinutesFromStart < trackBarStartTime.Minimum)
trackBarStartTime.Value = trackBarStartTime.Minimum;
else if (totalMinutesFromStart >= trackBarStartTime.Maximum)
trackBarStartTime.Value = trackBarStartTime.Maximum - 1;
else
trackBarStartTime.Value = totalMinutesFromStart;
int totalMinutesFromEnd = _oddsMakerConfig.EntryHoursEnd * 60 + _oddsMakerConfig.EntryMinutesEnd;
if (totalMinutesFromEnd > 0)
totalMinutesFromEnd = -totalMinutesFromEnd;
DateTime startTime = GuiEnvironment.GetMarketOpenLocalTime().AddMinutes(trackBarStartTime.Value);
DateTime endTime = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes(totalMinutesFromEnd);
if (totalMinutesFromEnd < trackBarEndTime.Minimum || startTime >= endTime)
trackBarEndTime.Value = (int)(startTime - GuiEnvironment.GetMarketCloseLocalTime()).TotalMinutes + 1;
else if (totalMinutesFromEnd > trackBarEndTime.Maximum)
trackBarEndTime.Value = trackBarEndTime.Maximum;
else
trackBarEndTime.Value = totalMinutesFromEnd;
int exitTimeDays = _oddsMakerConfig.ExitTimeOpenDays;
if (_oddsMakerConfig.UseExitTimeFutureClose)
exitTimeDays = _oddsMakerConfig.ExitTimeCloseDays;
if (exitTimeDays > trackBarDailyExitDays.Maximum)
trackBarDailyExitDays.Value = trackBarDailyExitDays.Maximum;
else if (exitTimeDays < trackBarDailyExitDays.Minimum)
trackBarDailyExitDays.Value = trackBarDailyExitDays.Minimum;
else
trackBarDailyExitDays.Value = exitTimeDays;
int timeStopMinutesBeforeClose = -_oddsMakerConfig.ExitTimeMinutesBefore;
if (timeStopMinutesBeforeClose >= trackBarTimeStop.Minimum && timeStopMinutesBeforeClose <= trackBarTimeStop.Maximum)
trackBarTimeStop.Value = timeStopMinutesBeforeClose;
else
trackBarTimeStop.Value = 0;
if (_oddsMakerConfig.ExitTimeMinutesAfter < trackBarTimeAfterEntry.Minimum)
trackBarTimeAfterEntry.Value = trackBarTimeAfterEntry.Minimum;
else if (_oddsMakerConfig.ExitTimeMinutesAfter > trackBarTimeAfterEntry.Maximum)
trackBarTimeAfterEntry.Value = trackBarTimeAfterEntry.Maximum;
else
trackBarTimeAfterEntry.Value = _oddsMakerConfig.ExitTimeMinutesAfter;
if (_oddsMakerConfig.DaysOfTest > trackBarTestDays.Maximum)
trackBarTestDays.Value = trackBarTestDays.Maximum;
else if (_oddsMakerConfig.DaysOfTest < trackBarTestDays.Minimum)
trackBarTestDays.Value = trackBarTestDays.Minimum;
else
trackBarTestDays.Value = _oddsMakerConfig.DaysOfTest;
textBoxTrailingStopPercent.Text = "";
if (_oddsMakerConfig.ExitCondPercent.HasValue)
textBoxTrailingStopPercent.Text = _oddsMakerConfig.ExitCondPercent.Value.ToString();
textBoxTrailingStopBars.Text = "";
if (_oddsMakerConfig.ExitCondBars.HasValue)
textBoxTrailingStopBars.Text = _oddsMakerConfig.ExitCondBars.Value.ToString();
textBoxTarget.Text = "";
if (_oddsMakerConfig.ProfitTarget.HasValue)
textBoxTarget.Text = _oddsMakerConfig.ProfitTarget.Value.ToString();
_targetFilterCode = _oddsMakerConfig.TargetFilter;
radioButtonTargetFilter.Checked = _oddsMakerConfig.UseTargetFilter;
textBoxStopLoss.Text = "";
if (_oddsMakerConfig.StopLoss.HasValue)
textBoxStopLoss.Text = _oddsMakerConfig.StopLoss.Value.ToString();
_stopFilterCode = _oddsMakerConfig.StopFilter;
radioButtonStopLossFilter.Checked = _oddsMakerConfig.UseStopFilter;
radioButtonDollars.Checked = _oddsMakerConfig.UseDollars;
radioButtonNone.Checked = _oddsMakerConfig.UseNoAdvancedExit;
radioButtonMinutesAfterEntry.Checked = _oddsMakerConfig.UseExitTimeMinutesAfter;
radioButtonTimeOfDay.Checked = _oddsMakerConfig.UseExitAtTimeOfDay;
rdoExitTimeFutureClose.Checked = _oddsMakerConfig.UseExitTimeFutureClose;
rdoExitTimeFutureOpen.Checked = _oddsMakerConfig.UseExitTimeFutureOpen;
radioButtonPercent.Checked = _oddsMakerConfig.UsePercent;
radioButtonTrailingStopBars.Checked = _oddsMakerConfig.UseExitCondBars;
radioButtonTrailingStopPercent.Checked = _oddsMakerConfig.UseExitCondPercent;
radioButtonExitStrategy.Checked = _oddsMakerConfig.UseExitCondAnotherAlert;
radioButtonExitStrategy.Enabled = _oddsMakerConfig.UseExitCondAnotherAlert;
if (!radioButtonTimeOfDay.Checked && !rdoExitTimeFutureOpen.Checked && !rdoExitTimeFutureClose.Checked && !radioButtonMinutesAfterEntry.Checked)
radioButtonMinutesAfterEntry.Checked = true;
checkBoxProfitTarget.Checked = _oddsMakerConfig.UseProfitTarget;
checkBoxStopLoss.Checked = _oddsMakerConfig.UseStopLoss;
checkBoxWiggle.Checked = _oddsMakerConfig.UseWiggle;
_exitCondition = _oddsMakerConfig.ExitCondition;
SetEndTime();
SetStartTime();
SetDailyExitDays();
SetTestDays();
SetTimeAfterEntryExit();
SetTimeStop();
UpdateColumnConfigStatus();
}
private void SetTestDays()
{
this.InvokeIfRequired(delegate()
{
labelTestDays.Text = "Test Days: " + trackBarTestDays.Value.ToString();
});
}
///
/// Sets the minimum and maximum values for all sliders in the form.
///
private void SetSlidersMinMax()
{
trackBarDailyExitDays.Maximum = trackBarTestDays.Maximum = GuiEnvironment.GetGeneralInfo(_connectionMaster.SendManager).GetOddsMakerDays();
trackBarTestDays.Minimum = 1;
labelTestDaysMax.Text = trackBarTestDays.Maximum + " days";
DateTime marketOpenLocal = GuiEnvironment.GetMarketOpenLocalTime();
DateTime marketCloseLocal = GuiEnvironment.GetMarketCloseLocalTime();
TimeSpan span = marketCloseLocal - marketOpenLocal;
int totalMinutes = (int)span.TotalMinutes;
int minutesInTradingDay = (int)(marketCloseLocal - marketOpenLocal).TotalMinutes;
trackBarEndTime.Maximum = 0;
trackBarEndTime.Minimum = -totalMinutes;
trackBarStartTime.Minimum = 0;
trackBarStartTime.Maximum = totalMinutes;
trackBarTimeStop.Maximum = 0;
trackBarTimeStop.Minimum = -totalMinutes;
trackBarTimeAfterEntry.Minimum = 1;
trackBarTimeAfterEntry.Maximum = minutesInTradingDay;
labelTimeAfterEntryMax.Text = minutesInTradingDay + " min";
}
///
/// Sets up the radio buttons to work together in all tabs
///
private void InitializeRadioGroups()
{
radioButtonMinutesAfterEntry.CheckedChanged += radioButtonMinutesAfterEntry_CheckedChanged;
radioButtonTimeOfDay.CheckedChanged += radioButtonTimeOfDay_CheckedChanged;
rdoExitTimeFutureClose.CheckedChanged += rdoExitTimeFutureClose_CheckedChanged;
rdoExitTimeFutureOpen.CheckedChanged += rdoExitTimeFutureOpen_CheckedChanged;
radioButtonStopLossConstant.CheckedChanged += radioButtonStopLossConstant_CheckedChanged;
radioButtonStopLossFilter.CheckedChanged += radioButtonStopLossFilter_CheckedChanged;
radioButtonNone.CheckedChanged += radioButtonNone_CheckedChanged;
radioButtonTrailingStopBars.CheckedChanged += radioButtonTrailingStopBars_CheckedChanged;
radioButtonTrailingStopPercent.CheckedChanged += radioButtonTrailingStopPercent_CheckedChanged;
radioButtonExitStrategy.CheckedChanged += radioButtonExitStrategy_CheckedChanged;
}
void radioButtonExitStrategy_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonExitStrategy.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopBars.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
}
ReflectUserSelectionAdvancedTab();
}
void radioButtonTrailingStopPercent_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTrailingStopPercent.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopBars.Checked = false;
radioButtonExitStrategy.Checked = false;
}
ReflectUserSelectionAdvancedTab();
}
void radioButtonTrailingStopBars_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTrailingStopBars.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
radioButtonExitStrategy.Checked = false;
}
ReflectUserSelectionAdvancedTab();
}
void radioButtonNone_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonNone.Checked)
{
radioButtonTrailingStopBars.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
radioButtonExitStrategy.Checked = false;
}
ReflectUserSelectionAdvancedTab();
}
void radioButtonStopLossFilter_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonStopLossFilter.Checked)
radioButtonStopLossConstant.Checked = false;
ReflectUserSelectionRiskManagement();
}
void radioButtonStopLossConstant_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonStopLossConstant.Checked)
radioButtonStopLossFilter.Checked = false;
ReflectUserSelectionRiskManagement();
}
void rdoExitTimeFutureOpen_CheckedChanged(object sender, EventArgs e)
{
if (rdoExitTimeFutureOpen.Checked)
{
rdoExitTimeFutureClose.Checked = false;
radioButtonMinutesAfterEntry.Checked = false;
radioButtonTimeOfDay.Checked = false;
}
SetDailyExitDays();
ReflectUserSelectionTimedExits();
}
void rdoExitTimeFutureClose_CheckedChanged(object sender, EventArgs e)
{
if (rdoExitTimeFutureClose.Checked)
{
rdoExitTimeFutureOpen.Checked = false;
radioButtonMinutesAfterEntry.Checked = false;
radioButtonTimeOfDay.Checked = false;
}
SetDailyExitDays();
ReflectUserSelectionTimedExits();
}
void radioButtonTimeOfDay_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTimeOfDay.Checked)
{
rdoExitTimeFutureOpen.Checked = false;
radioButtonMinutesAfterEntry.Checked = false;
rdoExitTimeFutureClose.Checked = false;
}
ReflectUserSelectionTimedExits();
}
void radioButtonMinutesAfterEntry_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonMinutesAfterEntry.Checked)
{
rdoExitTimeFutureOpen.Checked = false;
radioButtonTimeOfDay.Checked = false;
rdoExitTimeFutureClose.Checked = false;
}
ReflectUserSelectionTimedExits();
}
private void InitializeTimeSliders()
{
trackBarStartTime.ValueChanged += new EventHandler(trackBarStartTime_ValueChanged);
trackBarEndTime.ValueChanged += new EventHandler(trackBarEndTime_ValueChanged);
trackBarTimeStop.Scroll += trackBarTimeStop_Scroll;
trackBarTestDays.Scroll += trackBarTestDays_Scroll;
trackBarDailyExitDays.Scroll += trackBarDailyExitDays_Scroll;
trackBarTimeAfterEntry.Scroll += trackBarTimeAfterEntry_Scroll;
SetStartTime();
SetEndTime();
SetTimeStop();
SetTestDays();
SetDailyExitDays();
SetTimeAfterEntryExit();
labelEndTimeMax.Text = GuiEnvironment.GetMarketCloseLocalTime().ToShortTimeString();
labelStartTimeMax.Text = GuiEnvironment.GetMarketCloseLocalTime().ToShortTimeString();
labelEndTimeMin.Text = GuiEnvironment.GetMarketOpenLocalTime().ToShortTimeString();
labelStartTimeMin.Text = GuiEnvironment.GetMarketOpenLocalTime().ToShortTimeString();
labelTimeStopMax.Text = GuiEnvironment.GetMarketCloseLocalTime().ToShortTimeString();
labelTimeStopMin.Text = GuiEnvironment.GetMarketOpenLocalTime().ToShortTimeString();
ReflectUserSelectionTimedExits();
}
void trackBarTestDays_Scroll(object sender, EventArgs e)
{
SetTestDays();
}
///
/// Updates gui controls enabling/disabling them based on user selection
///
private void ReflectUserSelectionTimedExits()
{
this.InvokeIfRequired(delegate()
{
if (radioButtonMinutesAfterEntry.Checked)
{
ToggleBoldFont(radioButtonMinutesAfterEntry, true);
trackBarTimeAfterEntry.Enabled = true;
radioButtonTimeOfDay.Checked = false;
ToggleBoldFont(radioButtonTimeOfDay, false);
rdoExitTimeFutureClose.Checked = false;
ToggleBoldFont(rdoExitTimeFutureClose, false);
rdoExitTimeFutureOpen.Checked = false;
ToggleBoldFont(rdoExitTimeFutureOpen, false);
trackBarDailyExitDays.Enabled = false;
trackBarTimeStop.Enabled = false;
}
else if (radioButtonTimeOfDay.Checked)
{
ToggleBoldFont(radioButtonTimeOfDay, true);
trackBarTimeStop.Enabled = true;
trackBarTimeAfterEntry.Enabled = false;
radioButtonMinutesAfterEntry.Checked = false;
ToggleBoldFont(radioButtonMinutesAfterEntry, false);
rdoExitTimeFutureClose.Checked = false;
ToggleBoldFont(rdoExitTimeFutureClose, false);
rdoExitTimeFutureOpen.Checked = false;
ToggleBoldFont(rdoExitTimeFutureOpen, false);
trackBarDailyExitDays.Enabled = false;
}
else if (rdoExitTimeFutureClose.Checked)
{
ToggleBoldFont(rdoExitTimeFutureClose, true);
trackBarDailyExitDays.Enabled = true;
radioButtonMinutesAfterEntry.Checked = false;
ToggleBoldFont(radioButtonMinutesAfterEntry, false);
radioButtonTimeOfDay.Checked = false;
ToggleBoldFont(radioButtonTimeOfDay, false);
rdoExitTimeFutureOpen.Checked = false;
ToggleBoldFont(rdoExitTimeFutureOpen, false);
trackBarTimeAfterEntry.Enabled = false;
trackBarTimeStop.Enabled = false;
}
else if (rdoExitTimeFutureOpen.Checked)
{
ToggleBoldFont(rdoExitTimeFutureOpen, true);
trackBarDailyExitDays.Enabled = true;
radioButtonMinutesAfterEntry.Checked = false;
ToggleBoldFont(radioButtonMinutesAfterEntry, false);
radioButtonTimeOfDay.Checked = false;
ToggleBoldFont(radioButtonTimeOfDay, false);
rdoExitTimeFutureClose.Checked = false;
ToggleBoldFont(rdoExitTimeFutureClose, false);
trackBarTimeAfterEntry.Enabled = false;
trackBarTimeStop.Enabled = false;
}
});
}
///
/// Updates gui controls enabling/disabling them based on user selection
///
private void ReflectUserSelectionAdvancedTab()
{
this.InvokeIfRequired(delegate()
{
if (radioButtonNone.Checked)
{
radioButtonTrailingStopBars.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
radioButtonExitStrategy.Checked = false;
textBoxTrailingStopBars.Enabled = false;
textBoxTrailingStopPercent.Enabled = false;
}
else if (radioButtonTrailingStopBars.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
radioButtonExitStrategy.Checked = false;
textBoxTrailingStopBars.Enabled = true;
textBoxTrailingStopPercent.Enabled = false;
}
else if (radioButtonTrailingStopPercent.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopBars.Checked = false;
radioButtonExitStrategy.Checked = false;
textBoxTrailingStopBars.Enabled = false;
textBoxTrailingStopPercent.Enabled = true;
}
else if (radioButtonExitStrategy.Checked)
{
radioButtonNone.Checked = false;
radioButtonTrailingStopPercent.Checked = false;
radioButtonTrailingStopBars.Checked = false;
textBoxTrailingStopBars.Enabled = false;
textBoxTrailingStopPercent.Enabled = false;
}
if (radioButtonColumnsFromStrategy.Checked)
radioButtonUseAllColumns.Checked = false;
else if (radioButtonUseAllColumns.Checked)
radioButtonColumnsFromStrategy.Checked = false;
});
}
///
/// Toggles boldness of font of control.
///
/// Control to have its font changed
/// true = make bold, false = unbold
private void ToggleBoldFont(Control control, bool bold)
{
this.InvokeIfRequired(delegate()
{
if (bold)
control.Font = new Font(control.Font, FontStyle.Bold);
else
control.Font = new Font(control.Font, FontStyle.Regular);
});
}
void trackBarTimeAfterEntry_Scroll(object sender, EventArgs e)
{
SetTimeAfterEntryExit();
}
private void SetTimeAfterEntryExit()
{
this.InvokeIfRequired(delegate()
{
radioButtonMinutesAfterEntry.Text = "Minutes After Entry: " + trackBarTimeAfterEntry.Value.ToString();
});
}
void trackBarDailyExitDays_Scroll(object sender, EventArgs e)
{
SetDailyExitDays();
}
private void SetDailyExitDays()
{
this.InvokeIfRequired(delegate()
{
if (rdoExitTimeFutureClose.Checked)
{
rdoExitTimeFutureOpen.Text = "At Market Open";
if (trackBarDailyExitDays.Value == 0)
rdoExitTimeFutureClose.Text = "At Market Close: Tomorrow";
else if (trackBarDailyExitDays.Value == 1)
rdoExitTimeFutureClose.Text = "At Market Close: Day after Tomorrow";
else if (trackBarDailyExitDays.Value > 1)
rdoExitTimeFutureClose.Text = "At Market Close: Tomorrow + " + trackBarDailyExitDays.Value.ToString() + " days";
}
else if (rdoExitTimeFutureOpen.Checked)
{
rdoExitTimeFutureClose.Text = "At Market Close";
if (trackBarDailyExitDays.Value == 0)
rdoExitTimeFutureOpen.Text = "At Market Open: Tomorrow";
else if (trackBarDailyExitDays.Value == 1)
rdoExitTimeFutureOpen.Text = "At Market Open: Day after Tomorrow";
else if (trackBarDailyExitDays.Value > 1)
rdoExitTimeFutureOpen.Text = "At Market Open: Tomorrow + " + trackBarDailyExitDays.Value.ToString() + " days";
}
});
}
void trackBarTimeStop_Scroll(object sender, EventArgs e)
{
SetTimeStop();
}
private void SetTimeStop()
{
this.InvokeIfRequired(delegate()
{
DateTime currentTimeStop = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes((double)trackBarTimeStop.Value);
radioButtonTimeOfDay.Text = "Time of Day: " + currentTimeStop.ToShortTimeString();
});
}
private void trackBarStartTime_ValueChanged(object sender, EventArgs e)
{
// starttime has min of 0, but endtime has max of zero, so we need to convert to time of day
DateTime startTime = GuiEnvironment.GetMarketOpenLocalTime().AddMinutes(trackBarStartTime.Value);
DateTime endTime = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes(trackBarEndTime.Value);
if (startTime >= endTime)
trackBarStartTime.Value = (int)(endTime - GuiEnvironment.GetMarketOpenLocalTime()).TotalMinutes - 1;
SetStartTime();
}
private void trackBarEndTime_ValueChanged(object sender, EventArgs e)
{
// starttime has min of 0, but endtime has max of zero, so we need to convert to time of day
DateTime startTime = GuiEnvironment.GetMarketOpenLocalTime().AddMinutes(trackBarStartTime.Value);
DateTime endTime = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes(trackBarEndTime.Value);
if (startTime >= endTime)
trackBarEndTime.Value = (int)(startTime - GuiEnvironment.GetMarketCloseLocalTime()).TotalMinutes + 1;
SetEndTime();
}
///
/// Gets current start time from current state of form.
///
///
private DateTime GetCurrentStartTime()
{
DateTime currentStartTime = GuiEnvironment.GetMarketOpenLocalTime().AddMinutes((double)trackBarStartTime.Value);
return currentStartTime;
}
private void SetStartTime()
{
this.InvokeIfRequired(delegate()
{
DateTime currentStartTime = GetCurrentStartTime();
labelStartTimeValue.Text = "Start Time: " + currentStartTime.ToShortTimeString();
});
}
///
/// Gets current start time from current state of form.
///
///
private DateTime GetCurrentEndTime()
{
DateTime currentEndTime = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes((double)trackBarEndTime.Value);
return currentEndTime;
}
private void SetEndTime()
{
this.InvokeIfRequired(delegate()
{
DateTime currentEndTime = GetCurrentEndTime();
labelEndTimeValue.Text = "End Time: " + currentEndTime.ToShortTimeString();
});
}
private void buttonBuy_Click(object sender, EventArgs e)
{
GuiEnvironment.RecordUseCase("OddsMakerConfig.Button.SimulateBuy", _sendManager);
DialogResult = System.Windows.Forms.DialogResult.OK;
PerformBacktest(true);
}
private void buttonSell_Click(object sender, EventArgs e)
{
GuiEnvironment.RecordUseCase("OddsMakerConfig.Button.SimulateSell", _sendManager);
DialogResult = System.Windows.Forms.DialogResult.OK;
PerformBacktest(false);
}
///
/// Actually perform the backtest.
///
/// Simulate going long or short (long = true, short = false).
private void PerformBacktest(bool isLong)
{
OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerSettings = GetSettingsFromGui();
oddsMakerSettings.Long = isLong;
_oddsMakerSettingsContainer.SetOddsMakerSettings(oddsMakerSettings);
OddsMakerRequest request = GetRequestFromGui();
request.SuccessDirectionUp = isLong;
tabControlMain.SelectedTab = tabPageSummary;
_oddsMakerResults = new OddsMakerResults(request, _connectionMaster, this, _windowName, oddsMakerSettings);
}
///
/// Left over from original OddsMakerConfiguration window.
///
public void selectTheFont()
{
_fontManager.selectTheFont();
}
public void restoreDefault(OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerSettings)
{
_oddsMakerConfig = oddsMakerSettings;
}
public void setUserOddsSettings(OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerSettings)
{
_oddsMakerConfig = oddsMakerSettings;
}
private OddsMakerConfiguration.OddsMakerConfigMemento GetSettingsFromGui()
{
OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerConfig = new OddsMakerConfiguration.OddsMakerConfigMemento();
oddsMakerConfig.Long = _long;
oddsMakerConfig.ExitTimeCloseDays = trackBarDailyExitDays.Value;
oddsMakerConfig.ExitTimeOpenDays = trackBarDailyExitDays.Value;
oddsMakerConfig.ExitTimeMinutesBefore = -trackBarTimeStop.Value;
oddsMakerConfig.ExitTimeMinutesAfter = trackBarTimeAfterEntry.Value;
oddsMakerConfig.EntryHoursStart = 0;
oddsMakerConfig.EntryMinutesStart = trackBarStartTime.Value;
oddsMakerConfig.EntryHoursEnd = 0;
oddsMakerConfig.EntryMinutesEnd = -trackBarEndTime.Value;
oddsMakerConfig.DaysOfTest = trackBarTestDays.Value;
double exitConditionPercent = 0;
if ("" != textBoxTrailingStopPercent.Text && double.TryParse(textBoxTrailingStopPercent.Text, out exitConditionPercent))
oddsMakerConfig.ExitCondPercent = exitConditionPercent;
double exitConditionBars = 0;
if ("" != textBoxTrailingStopBars.Text && double.TryParse(textBoxTrailingStopBars.Text, out exitConditionBars))
oddsMakerConfig.ExitCondBars = exitConditionBars;
double profitTarget = 0;
if ("" != textBoxTarget.Text && double.TryParse(textBoxTarget.Text, out profitTarget))
oddsMakerConfig.ProfitTarget = profitTarget;
double stopLoss = 0;
if ("" != textBoxStopLoss.Text && double.TryParse(textBoxStopLoss.Text, out stopLoss))
oddsMakerConfig.StopLoss = stopLoss;
oddsMakerConfig.ByAtLeastDollars = 0.01;
oddsMakerConfig.ByAtLeastPerCent = 0.01;
oddsMakerConfig.UseDollars = radioButtonDollars.Checked;
oddsMakerConfig.UsePercent = radioButtonPercent.Checked;
oddsMakerConfig.UseNoAdvancedExit = radioButtonNone.Checked;
oddsMakerConfig.UseExitTimeMinutesAfter = radioButtonMinutesAfterEntry.Checked;
oddsMakerConfig.UseExitAtTimeOfDay = radioButtonTimeOfDay.Checked;
oddsMakerConfig.UseExitTimeFutureClose = rdoExitTimeFutureClose.Checked;
oddsMakerConfig.UseExitTimeFutureOpen = rdoExitTimeFutureOpen.Checked;
oddsMakerConfig.UseExitCondPercent = radioButtonTrailingStopPercent.Checked;
oddsMakerConfig.UseExitCondBars = radioButtonTrailingStopBars.Checked;
oddsMakerConfig.UseExitCondAnotherAlert = radioButtonExitStrategy.Checked;
oddsMakerConfig.UseProfitTarget = checkBoxProfitTarget.Checked;
oddsMakerConfig.UseStopLoss = checkBoxStopLoss.Checked;
oddsMakerConfig.UseWiggle = checkBoxWiggle.Checked;
oddsMakerConfig.cboLocation = 0;
oddsMakerConfig.ExitCondition = _exitCondition;
if (radioButtonStopLossFilter.Checked && comboBoxStopFilter.SelectedValue != null)
{
_useStopFilter = true;
Filter filter = comboBoxStopFilter.SelectedItem as Filter;
if (null != filter)
{
_stopFilterCode = filter.InternalCode;
_stopFilter = filter;
oddsMakerConfig.StopFilter = _stopFilterCode;
}
}
else
_useStopFilter = false;
oddsMakerConfig.UseStopFilter = _useStopFilter;
if (radioButtonTargetFilter.Checked && comboBoxTargetFilter.SelectedValue != null)
{
_useTargetFilter = true;
Filter filter = comboBoxTargetFilter.SelectedItem as Filter;
if (null != filter)
{
_targetFilterCode = filter.InternalCode;
_targetFilter = filter;
oddsMakerConfig.TargetFilter = _targetFilterCode;
}
}
else
_useTargetFilter = false;
oddsMakerConfig.UseTargetFilter = _useTargetFilter;
return oddsMakerConfig;
}
private OddsMakerRequest GetRequestFromGui()
{
OddsMakerRequest request = new OddsMakerRequest();
request.EntryCondition = _alertConfig;
request.DaysOfTest = trackBarTestDays.Value;
request.SkipDays = 0;
request.ColumnConfig = _columnConfigType;
request.EntryTimeEnd = -trackBarEndTime.Value;
request.EntryTimeStart = trackBarStartTime.Value;
request.Location = SelectedLocation.US;
if (checkBoxProfitTarget.Checked)
{
Filter selectedTargetFilter = comboBoxTargetFilter.SelectedItem as Filter;
if (null != selectedTargetFilter && radioButtonTargetFilter.Checked)
{
request.TargetFilter = selectedTargetFilter.InternalCode;
request.UseTargetFilter = true;
}
else
{
double number;
if (Double.TryParse(textBoxTarget.Text, out number))
request.ProfitTarget = number;
else
request.ProfitTarget = 1;
}
}
else
request.ProfitTarget = null;
if (checkBoxStopLoss.Checked)
{
Filter selectedStopFilter = comboBoxStopFilter.SelectedItem as Filter;
if (null != selectedStopFilter && radioButtonStopLossFilter.Checked)
{
request.StopFilter = selectedStopFilter.InternalCode;
request.UseStopFilter = true;
}
else
{
double number;
if (Double.TryParse(textBoxStopLoss.Text, out number))
request.StopLoss = number;
else
request.StopLoss = 1;
}
}
else
request.StopLoss = null;
request.StopLossWiggle = checkBoxWiggle.Checked;
request.SuccessMinMove = 0.01;
request.SuccessTypePercent = radioButtonPercent.Checked;
if (radioButtonMinutesAfterEntry.Checked)
{
request.TimeoutType = TimeoutType.MinutesAfterEntry;
request.TimeoutMinutes = trackBarTimeAfterEntry.Value;
}
else if (radioButtonTimeOfDay.Checked)
{
request.TimeoutType = TimeoutType.Close;
request.BeforeCloseMinutes = -trackBarTimeStop.Value;
}
else if (rdoExitTimeFutureOpen.Checked)
{
request.TimeoutType = TimeoutType.Open;
request.AtOpenDays = trackBarDailyExitDays.Value;
}
else if (rdoExitTimeFutureClose.Checked)
{
request.TimeoutType = TimeoutType.FutureClose;
request.AtCloseDays = trackBarDailyExitDays.Value;
}
else
{
request.TimeoutType = TimeoutType.MinutesAfterEntry;
request.TimeoutMinutes = trackBarTimeAfterEntry.Value;
}
request.XmlMode = true;
request.ExitConditionAlert = _exitCondition;
if (radioButtonTrailingStopPercent.Checked)
{
double number;
if (Double.TryParse(textBoxTrailingStopPercent.Text, out number))
request.ExitConditionTrailingStop = number;
else
request.ExitConditionTrailingStop = 0.5;
request.ExitConditionType = ExitConditionType.TrailingPercent;
}
else if (radioButtonTrailingStopBars.Checked)
{
double number;
if (Double.TryParse(textBoxTrailingStopBars.Text, out number))
request.ExitConditionTrailingStop = number;
else
request.ExitConditionTrailingStop = 0.5; // Set to default
request.ExitConditionType = ExitConditionType.TrailingBars;
}
else if (radioButtonExitStrategy.Checked)
{
request.ExitConditionAlert = _exitCondition;
request.ExitConditionType = ExitConditionType.Alert;
}
else
request.ExitConditionType = ExitConditionType.None;
request.RequestCsvFile = true;
return request;
}
///
/// Enables/disables gui controls based on user selection in the Risk Management tab.
///
private void ReflectUserSelectionRiskManagement()
{
this.InvokeIfRequired(delegate()
{
if (radioButtonDollars.Checked)
{
labelTargetConstantLabel.Text = "$";
labelStopLossConstantLabel.Text = "$";
}
else
{
labelTargetConstantLabel.Text = "%";
labelStopLossConstantLabel.Text = "%";
}
if (checkBoxProfitTarget.Checked)
{
radioButtonTargetConstant.Enabled = true;
radioButtonTargetFilter.Enabled = true;
comboBoxTargetFilter.Enabled = radioButtonTargetFilter.Checked;
textBoxTarget.Enabled = radioButtonTargetConstant.Checked;
labelTargetConstantLabel.Enabled = radioButtonTargetConstant.Checked;
}
else
{
radioButtonTargetConstant.Enabled = false;
radioButtonTargetFilter.Enabled = false;
comboBoxTargetFilter.Enabled = false;
textBoxTarget.Enabled = false;
labelTargetConstantLabel.Enabled = false;
}
if (checkBoxStopLoss.Checked)
{
radioButtonStopLossConstant.Enabled = true;
radioButtonStopLossFilter.Enabled = true;
comboBoxStopFilter.Enabled = radioButtonStopLossFilter.Checked;
textBoxStopLoss.Enabled = radioButtonStopLossConstant.Checked;
checkBoxWiggle.Enabled = radioButtonStopLossConstant.Checked;
labelStopLossConstantLabel.Enabled = radioButtonStopLossConstant.Checked;
}
else
{
radioButtonStopLossConstant.Enabled = false;
radioButtonStopLossFilter.Enabled = false;
comboBoxStopFilter.Enabled = false;
textBoxStopLoss.Enabled = false;
checkBoxWiggle.Enabled = false;
labelStopLossConstantLabel.Enabled = false;
}
if (!radioButtonStopLossFilter.Checked && !radioButtonStopLossConstant.Checked)
radioButtonStopLossConstant.Checked = true;
if (!radioButtonTargetFilter.Checked && !radioButtonTargetConstant.Checked)
radioButtonTargetConstant.Checked = true;
});
}
private void radioButtonDollars_CheckedChanged(object sender, EventArgs e)
{
ReflectUserSelectionRiskManagement();
}
private void radioButtonPercent_CheckedChanged(object sender, EventArgs e)
{
ReflectUserSelectionRiskManagement();
}
private void checkBoxProfitTarget_CheckedChanged(object sender, EventArgs e)
{
ReflectUserSelectionRiskManagement();
}
private void radioButtonTargetConstant_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTargetConstant.Checked)
radioButtonTargetFilter.Checked = !radioButtonTargetConstant.Checked;
ReflectUserSelectionRiskManagement();
}
private void radioButtonTargetFilter_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTargetFilter.Checked)
radioButtonTargetConstant.Checked = !radioButtonTargetFilter.Checked;
ReflectUserSelectionRiskManagement();
}
private void checkBoxStopLoss_CheckedChanged(object sender, EventArgs e)
{
ReflectUserSelectionRiskManagement();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
Close();
}
private void buttonPrevious_Click(object sender, EventArgs e)
{
if (tabControlMain.SelectedTab == tabPageSummary)
tabControlMain.SelectedTab = tabPageAdvanced;
else if (tabControlMain.SelectedTab == tabPageAdvanced)
tabControlMain.SelectedTab = tabPageRiskMgmt;
else if (tabControlMain.SelectedTab == tabPageRiskMgmt)
tabControlMain.SelectedTab = tabPageTimedExit;
else if (tabControlMain.SelectedTab == tabPageTimedExit)
tabControlMain.SelectedTab = tabPageEntry;
UpdatePrevNextButtons();
}
private void buttonNext_Click(object sender, EventArgs e)
{
if (tabControlMain.SelectedTab == tabPageEntry)
tabControlMain.SelectedTab = tabPageTimedExit;
else if (tabControlMain.SelectedTab == tabPageTimedExit)
tabControlMain.SelectedTab = tabPageRiskMgmt;
else if (tabControlMain.SelectedTab == tabPageRiskMgmt)
tabControlMain.SelectedTab = tabPageAdvanced;
else if (tabControlMain.SelectedTab == tabPageAdvanced)
tabControlMain.SelectedTab = tabPageSummary;
UpdatePrevNextButtons();
}
///
/// Updates enabled state of previous and next buttons based on currently selected tab.
///
private void UpdatePrevNextButtons()
{
buttonPrevious.Enabled = tabControlMain.SelectedTab != tabPageEntry;
buttonNext.Enabled = tabControlMain.SelectedTab != tabPageSummary;
}
///
/// Updates summary tab to reflect current state of user selections on the form.
///
private void UpdateSummaryTab()
{
this.InvokeIfRequired(delegate()
{
OddsMakerConfiguration.OddsMakerConfigMemento oddsMakerSettings = GetSettingsFromGui();
labelInitiateTradesValue.Text = GetCurrentStartTime().ToShortTimeString() + " - " + GetCurrentEndTime().ToShortTimeString();
if (oddsMakerSettings.UseExitTimeMinutesAfter)
labelTimedExitValue.Text = oddsMakerSettings.ExitTimeMinutesAfter.ToString() + " minutes after entry";
else if (oddsMakerSettings.UseExitAtTimeOfDay)
labelTimedExitValue.Text = GuiEnvironment.GetMarketCloseLocalTime().AddMinutes(-oddsMakerSettings.ExitTimeMinutesBefore).ToShortTimeString();
else if (oddsMakerSettings.UseExitTimeFutureClose)
labelTimedExitValue.Text = "At close after " + oddsMakerSettings.ExitTimeCloseDays.ToString() + " days";
else if (oddsMakerSettings.UseExitTimeFutureOpen)
labelTimedExitValue.Text = "At open after " + oddsMakerSettings.ExitTimeOpenDays.ToString() + " days";
else
labelTimedExitValue.Text = "None";
string dollarsText = "";
string percentText = "";
if (oddsMakerSettings.UsePercent)
percentText = "%";
if (oddsMakerSettings.UseDollars)
dollarsText = "$";
if (oddsMakerSettings.UseStopLoss)
{
if (oddsMakerSettings.UseStopFilter)
{
if (null != _stopFilter)
labelStopLossExitValue.Text = _stopFilter.LongDescription;
else
labelStopLossExitValue.Text = _stopFilterCode;
}
else if (oddsMakerSettings.StopLoss.HasValue)
{
string wiggleText = "";
if (oddsMakerSettings.UseWiggle)
wiggleText = " + Wiggle";
labelStopLossExitValue.Text = dollarsText + oddsMakerSettings.StopLoss.Value.ToString() + percentText + wiggleText;
}
else
labelStopLossExitValue.Text = "Unknown";
}
else
labelStopLossExitValue.Text = "None";
if (oddsMakerSettings.UseProfitTarget)
{
if (oddsMakerSettings.UseTargetFilter)
{
if (null != _targetFilter)
labelProfitTargetExitValue.Text = _targetFilter.LongDescription;
else
labelProfitTargetExitValue.Text = _targetFilterCode;
}
else if (oddsMakerSettings.ProfitTarget.HasValue)
labelProfitTargetExitValue.Text = dollarsText + oddsMakerSettings.ProfitTarget.Value.ToString() + percentText;
else
labelProfitTargetExitValue.Text = "Unknown";
}
else
labelProfitTargetExitValue.Text = "None";
if (oddsMakerSettings.UseNoAdvancedExit)
labelAdvancedExitValue.Text = "None";
else if (oddsMakerSettings.UseExitCondPercent && oddsMakerSettings.ExitCondPercent.HasValue)
labelAdvancedExitValue.Text = oddsMakerSettings.ExitCondPercent.Value.ToString() + " trailing stop %";
else if (oddsMakerSettings.UseExitCondBars && oddsMakerSettings.ExitCondBars.HasValue)
labelAdvancedExitValue.Text = oddsMakerSettings.ExitCondBars.Value.ToString() + " trailing bars";
else if (oddsMakerSettings.ExitCondition != "")
labelAdvancedExitValue.Text = "Alert Exit";
else
labelAdvancedExitValue.Text = "None";
labelTestDaysValue.Text = trackBarTestDays.Value.ToString() + " days";
});
}
private void tabControlMain_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateSummaryTab();
UpdatePrevNextButtons();
}
private void radioButtonColumnsFromStrategy_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonColumnsFromStrategy.Checked)
{
radioButtonUseAllColumns.Checked = false;
if (_columnConfigType != OddsMakerColumnConfiguration.Strategy)
_columnConfigType = OddsMakerColumnConfiguration.Strategy;
}
UpdateColumnConfigStatus();
}
private void radioButtonColumnsFavorites_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonUseAllColumns.Checked)
{
radioButtonColumnsFromStrategy.Checked = false;
if (_columnConfigType != OddsMakerColumnConfiguration.Favorites)
_columnConfigType = OddsMakerColumnConfiguration.Favorites;
}
UpdateColumnConfigStatus();
}
private void UpdateColumnConfigStatus()
{
radioButtonColumnsFromStrategy.Checked = _columnConfigType == OddsMakerColumnConfiguration.Strategy;
radioButtonUseAllColumns.Checked = _columnConfigType == OddsMakerColumnConfiguration.Favorites;
GuiEnvironment.OddsMakerColumnConfigType = _columnConfigType;
}
private void buttonSetFavorites_Click(object sender, EventArgs e)
{
string initialString = "O=8000000000000000000000000_41D_0&WN=My+Alerts" + GetColumnConfig(GuiEnvironment.OddsMakerFavoriteFilters);
ConfigWindowWrapper configWindowWrapper = ConfigWindowWrapper.DefaultFactory(ConfigurationType.Alerts, _connectionMaster);
configWindowWrapper.InitialConfig = initialString;
configWindowWrapper.OnlyShowColumns = true;
configWindowWrapper.UsingOddsMaker = true;
configWindowWrapper.UseCaseName = "OddsColumns";
configWindowWrapper.ShowIt();
if (!configWindowWrapper.Canceled)
GuiEnvironment.OddsMakerFavoriteFilters = configWindowWrapper.Strategy.Columns.Select(x => x.InternalCode).ToList();
}
///
/// Returns a formatted string for use in GuiEnvironment.OddsMakerFavoriteFilters.
///
/// List of filters by InternalCode.
/// string representation. e.g. show0=Price&show1=RV
private string GetColumnConfig(List columns)
{
int index = 0;
StringBuilder config = new StringBuilder();
foreach (string internalCode in columns)
{
config.Append("&show");
config.Append(index);
index++;
config.Append("=");
config.Append(internalCode);
}
config.Append("&show");
config.Append(index);
index++;
config.Append('=');
return config.ToString();
}
private void buttonExitStrategyConfigure_Click(object sender, EventArgs e)
{
GuiEnvironment.RecordUseCase("OddsMakerConfig.Button.Configure", _sendManager);
ConfigWindowWrapper configWindowWrapper = ConfigWindowWrapper.DefaultFactory(ConfigurationType.Alerts, _connectionMaster);
configWindowWrapper.InitialConfig = _exitCondition;
configWindowWrapper.HideColumns = true;
configWindowWrapper.UseCaseName = "Odds";
configWindowWrapper.NotAWindow = true;
configWindowWrapper.ShowIt();
if (!configWindowWrapper.Canceled)
{
_exitCondition = configWindowWrapper.Strategy.MakeConfigString();
radioButtonExitStrategy.Enabled = true;
radioButtonExitStrategy.Checked = true;
}
}
private void OddsMakerConfigWindow_FormClosing(object sender, FormClosingEventArgs e)
{
this.Dispose(); //we're not hiding this window.. instead it shall be closed.
}
}
}