Commit Latest
This commit is contained in:
@@ -124,6 +124,7 @@ namespace PortfolioManager.ViewModels
|
||||
bollingerBandRenderer.SyncTradeToBand = syncTradeToBand;
|
||||
bollingerBandRenderer.ShowInsiderTransactions = showInsiderTransactions;
|
||||
bollingerBandRenderer.ShowTradeLabels = showTradeLabels;
|
||||
bollingerBandRenderer.ExternalStopLimits = stopLimits;
|
||||
bollingerBandRenderer.SetData(selectedSymbol, selectedDayCount);
|
||||
bollingerBandRenderer.Render();
|
||||
});
|
||||
|
||||
@@ -21,6 +21,7 @@ using MarketData.MarketDataModel;
|
||||
using MarketData.Utils;
|
||||
using PortfolioManager.DataSeriesViewModels;
|
||||
using PortfolioManager.Dialogs;
|
||||
using PortfolioManager.Extensions;
|
||||
using PortfolioManager.Models;
|
||||
using PortfolioManager.UIUtils;
|
||||
using StopLimit = MarketData.MarketDataModel.StopLimit;
|
||||
@@ -177,14 +178,92 @@ namespace PortfolioManager.ViewModels
|
||||
await ReloadTradeFile();
|
||||
}
|
||||
|
||||
// public async Task ExecuteBollingerBands()
|
||||
// {
|
||||
// SaveParameters saveParams = SaveParameters.Parse("Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedPosition.Symbol + ",SelectedWatchList,{All},SelectedDayCount,90");
|
||||
// saveParams.Referer=this;
|
||||
// WorkspaceInstantiator.Invoke(saveParams);
|
||||
// await Task.FromResult(true);
|
||||
// }
|
||||
|
||||
public async Task ExecuteBollingerBands()
|
||||
{
|
||||
SaveParameters saveParams = SaveParameters.Parse("Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedPosition.Symbol + ",SelectedWatchList,{All},SelectedDayCount,90");
|
||||
MarketData.MarketDataModel.StopLimits stopLimits = GetHistoricalStopLimitsMarketDataModel();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
SaveParameters saveParams = null;
|
||||
sb = new StringBuilder();
|
||||
sb.Append("Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol,");
|
||||
sb.Append(selectedPosition.Symbol).Append(",");
|
||||
sb.Append("SelectedWatchList,{All},SelectedDayCount,");
|
||||
sb.Append(GetDayCountSelectionForBollingerBands(selectedPosition, true));
|
||||
saveParams = SaveParameters.Parse(sb.ToString());
|
||||
SaveParameters stopLimitParams = StopLimitsExtensions.FromStopLimits(stopLimits);
|
||||
saveParams.AddRange(stopLimitParams);
|
||||
saveParams.Referer=this;
|
||||
WorkspaceInstantiator.Invoke(saveParams);
|
||||
WorkspaceInstantiator.Invoke(saveParams);
|
||||
await Task.FromResult(true);
|
||||
}
|
||||
|
||||
// This getter returns non-model (MarketData.MarketDataModel) specific stop limits to pass along to the bollinger bands
|
||||
private MarketData.MarketDataModel.StopLimits GetHistoricalStopLimitsMarketDataModel()
|
||||
{
|
||||
if (null == sessionParams || null == selectedPosition) return null;
|
||||
DateGenerator dateGenerator = new DateGenerator();
|
||||
|
||||
MarketData.MarketDataModel.StopLimits marketDataModelStopLimits = new MarketData.MarketDataModel.StopLimits();
|
||||
|
||||
MarketData.Generator.Model.StopLimits stopLimits =
|
||||
new MarketData.Generator.Model.StopLimits((from MarketData.Generator.Model.StopLimit stopLimit in sessionParams.StopLimits
|
||||
where stopLimit.StopLimitId.Equals(selectedPosition.Symbol + Utility.DateTimeToStringYYYYMMDDMMSSTT(selectedPosition.PurchaseDate)) select stopLimit).
|
||||
OrderByDescending(x => x.AnalysisDate).ToList());
|
||||
|
||||
MarketData.MarketDataModel.StopLimit initialStopLimit = new MarketData.MarketDataModel.StopLimit();
|
||||
initialStopLimit.Symbol = selectedPosition.Symbol;
|
||||
initialStopLimit.Shares = 0;
|
||||
initialStopLimit.StopPrice = selectedPosition.InitialStopLimit;
|
||||
initialStopLimit.StopType = StopLimitConstants.STOP_QUOTE;
|
||||
initialStopLimit.EffectiveDate = selectedPosition.PurchaseDate;
|
||||
initialStopLimit.Active = 1;
|
||||
marketDataModelStopLimits.Add(initialStopLimit);
|
||||
|
||||
foreach (MarketData.Generator.Model.StopLimit stopLimit in stopLimits)
|
||||
{
|
||||
MarketData.MarketDataModel.StopLimit marketDataModelStopLimit = new MarketData.MarketDataModel.StopLimit();
|
||||
marketDataModelStopLimit.Symbol = stopLimit.Symbol;
|
||||
marketDataModelStopLimit.Shares = 0;
|
||||
marketDataModelStopLimit.StopPrice = stopLimit.NewStop;
|
||||
marketDataModelStopLimit.StopType = StopLimitConstants.STOP_QUOTE;
|
||||
marketDataModelStopLimit.EffectiveDate = stopLimit.AnalysisDate;
|
||||
marketDataModelStopLimit.Active = 1;
|
||||
marketDataModelStopLimits.Add(marketDataModelStopLimit);
|
||||
}
|
||||
|
||||
return marketDataModelStopLimits;
|
||||
}
|
||||
|
||||
private int GetDayCountSelectionForBollingerBands(MGSHPositionModel selectedPosition,bool ignoreActivePosition=false)
|
||||
{
|
||||
DateGenerator dateGenerator=new DateGenerator();
|
||||
DateTime maxDate = DateTime.Today;
|
||||
|
||||
if(!ignoreActivePosition)
|
||||
{
|
||||
maxDate = PricingDA.GetLatestDate(selectedPosition.Symbol);
|
||||
if(!selectedPosition.IsActivePosition)
|
||||
{
|
||||
maxDate = selectedPosition.SellDate;
|
||||
}
|
||||
}
|
||||
int daysBetween=dateGenerator.DaysBetween(selectedPosition.PurchaseDate, maxDate);
|
||||
if(daysBetween<90)return 90;
|
||||
if(daysBetween<180)return 180;
|
||||
if(daysBetween<360)return 360;
|
||||
if(daysBetween<720)return 720;
|
||||
if(daysBetween<1440)return 1440;
|
||||
return 3600;
|
||||
}
|
||||
|
||||
public async Task ReloadTradeFile()
|
||||
{
|
||||
LoadSessionFile();
|
||||
|
||||
Reference in New Issue
Block a user