init
This commit is contained in:
132
MarketDataLib/Helper/MovingAverageHelperSheet.cs
Normal file
132
MarketDataLib/Helper/MovingAverageHelperSheet.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using MarketData.DataAccess;
|
||||
using MarketData.MarketDataModel;
|
||||
using MarketData.Generator;
|
||||
using MarketData.Utils;
|
||||
|
||||
namespace MarketData.Helper
|
||||
{
|
||||
public class MovingAverageHelperSheet
|
||||
{
|
||||
public MovingAverageHelperSheet()
|
||||
{
|
||||
}
|
||||
public static bool GenerateMovingAverageSheet(String strPathTemplateFile, String symbol)
|
||||
{
|
||||
Microsoft.Office.Interop.Excel.Application excelApp = null;
|
||||
Microsoft.Office.Interop.Excel.Workbook workbook = null;
|
||||
Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
|
||||
Microsoft.Office.Interop.Excel.Sheets worksheets = null;
|
||||
int rowOffset = 1;
|
||||
try
|
||||
{
|
||||
String companyName = PricingDA.GetNameForSymbol(symbol);
|
||||
DateGenerator dateGenerator = new DateGenerator();
|
||||
DateTime startDate = dateGenerator.GetPrevBusinessDay(DateTime.Now);
|
||||
String currentWorkingDirectory = Directory.GetCurrentDirectory();
|
||||
if (!File.Exists(strPathTemplateFile))
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"Cannot locate " + strPathTemplateFile);
|
||||
return false;
|
||||
}
|
||||
MovingAverages movingAverages = MovingAverageGenerator.GenerateMovingAverages(symbol);
|
||||
String pathOutputFile = currentWorkingDirectory + "\\" + symbol + "-MA-" + Utility.DateTimeToStringMMHDDHYYYY(movingAverages.ThruDate);
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"Generating " + pathOutputFile);
|
||||
File.Delete(pathOutputFile + ".xlsx");
|
||||
excelApp = new Microsoft.Office.Interop.Excel.Application();
|
||||
excelApp.ScreenUpdating = false;
|
||||
workbook = excelApp.Workbooks.Open(strPathTemplateFile, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
|
||||
worksheets = workbook.Worksheets;
|
||||
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)worksheets.get_Item("Sheet1");
|
||||
Microsoft.Office.Interop.Excel.ChartObjects chartObjects = worksheet.ChartObjects();
|
||||
Microsoft.Office.Interop.Excel.ChartObject movingAverageChartObject = chartObjects.Item(1); // yes, chart 1 is the fast line
|
||||
movingAverageChartObject.Chart.ChartTitle.Text = companyName + " (" + symbol + ") " + Utility.DateTimeToStringMMHDDHYYYY(movingAverages.FromDate) + " - " + Utility.DateTimeToStringMMHDDHYYYY(movingAverages.ThruDate) + " MA(55,21,5)";
|
||||
Axis vertAxis = (Axis)movingAverageChartObject.Chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
|
||||
vertAxis.MaximumScaleIsAuto = false;
|
||||
vertAxis.MaximumScale = GetMaxData(movingAverages);
|
||||
vertAxis.MinimumScaleIsAuto = false;
|
||||
vertAxis.MinimumScale = GetMinData(movingAverages);
|
||||
vertAxis.HasMajorGridlines = true;
|
||||
Axis horzAxis = (Axis)movingAverageChartObject.Chart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);
|
||||
horzAxis.HasMajorGridlines = true;
|
||||
for (int index = 0; index < movingAverages.Count; index++)
|
||||
{
|
||||
MovingAverageElement movingAverageElement = movingAverages[index];
|
||||
worksheet.Cells[index + 1 + rowOffset, 1] = movingAverageElement.Symbol;
|
||||
worksheet.Cells[index + 1 + rowOffset, 2] = movingAverageElement.Date;
|
||||
worksheet.Cells[index + 1 + rowOffset, 3] = movingAverageElement.Close;
|
||||
worksheet.Cells[index + 1 + rowOffset, 4] = movingAverageElement.High;
|
||||
worksheet.Cells[index + 1 + rowOffset, 5] = movingAverageElement.Low;
|
||||
worksheet.Cells[index + 1 + rowOffset, 6] = movingAverageElement.MA55;
|
||||
worksheet.Cells[index + 1 + rowOffset, 7] = movingAverageElement.MA21;
|
||||
worksheet.Cells[index + 1 + rowOffset, 8] = movingAverageElement.MA5;
|
||||
}
|
||||
workbook.SaveAs(pathOutputFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true, Type.Missing, Type.Missing, Type.Missing);
|
||||
return true;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,exception.ToString());
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (null != worksheet) ReleaseObject(worksheet);
|
||||
if (null != worksheets) ReleaseObject(worksheets);
|
||||
if (null != workbook) ReleaseObject(workbook);
|
||||
excelApp.Quit();
|
||||
}
|
||||
}
|
||||
private static double GetMinData(MovingAverages movingAverages)
|
||||
{
|
||||
double minData = double.MaxValue;
|
||||
for (int index = 0; index < movingAverages.Count; index++)
|
||||
{
|
||||
MovingAverageElement movingAverageElement = movingAverages[index];
|
||||
if (movingAverageElement.Close < minData) minData = movingAverageElement.Close;
|
||||
if (movingAverageElement.High < minData) minData = movingAverageElement.High;
|
||||
if (movingAverageElement.Low < minData) minData = movingAverageElement.Low;
|
||||
if (movingAverageElement.MA55 < minData) minData = movingAverageElement.MA55;
|
||||
if (movingAverageElement.MA21 < minData) minData = movingAverageElement.MA21;
|
||||
if (movingAverageElement.MA5 < minData) minData = movingAverageElement.MA5;
|
||||
}
|
||||
return minData - (minData * .05);
|
||||
}
|
||||
private static double GetMaxData(MovingAverages movingAverages)
|
||||
{
|
||||
double maxData = 0;
|
||||
for (int index = 0; index < movingAverages.Count; index++)
|
||||
{
|
||||
MovingAverageElement movingAverageElement = movingAverages[index];
|
||||
if (movingAverageElement.Close > maxData) maxData = movingAverageElement.Close;
|
||||
if (movingAverageElement.High > maxData) maxData = movingAverageElement.High;
|
||||
if (movingAverageElement.Low > maxData) maxData = movingAverageElement.Low;
|
||||
if (movingAverageElement.MA55 > maxData) maxData = movingAverageElement.MA55;
|
||||
if (movingAverageElement.MA21 > maxData) maxData = movingAverageElement.MA21;
|
||||
if (movingAverageElement.MA5 > maxData) maxData = movingAverageElement.MA5;
|
||||
}
|
||||
return maxData + (maxData * .05);
|
||||
}
|
||||
private static void ReleaseObject(object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
|
||||
obj = null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,ex.ToString());
|
||||
obj = null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
GC.Collect();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user