2009-07-08 27 views
5

Muy bien, espero que esta no sea una pregunta demasiado amplia, pero mi curiosidad se apoderó de mí. Estoy trabajando para una gran compañía de seguros. Estamos construyendo hojas de cálculo de Excel que manejan la proyección del valor futuro en efectivo para pólizas de seguro de vida. Estos son libros de trabajo bastante grandes (40-50mb) con una tonelada de hojas y columnas que tienen que tener en cuenta una cantidad asquerosa de variables para proyectar con precisión los valores en efectivo.Cómo diseñar un programa para realizar cálculos financieros complejos con .NET

¿Cómo se podría construir esto como una aplicación de escritorio o de negocios? Conozco .net bastante bien para un principiante, pero tengo problemas para pensar fuera de la mentalidad de la hoja de cálculo y cómo podrías aplicar .net a algo como esto. ¿Cómo rastrear un cálculo en código, que toma 3 o 4 páginas con 60 columnas en 1300 filas cada una en una hoja de cálculo? Además de cambiar las tasas de interés, tarifas y otras cosas que afectan la política, basadas dinámicamente en entradas como edad, sexo, fumador/no fumador, etc ...

Respuesta

4

Apuesto a que su empresa está haciendo> $ 1B anualmente, todo basado en una hoja de cálculo de Excel. No estás solo en eso.

Empezaría pensando en el problema en lugar de en la hoja de cálculo de Excel. ¿Cuál es el problema comercial? ¿Puedes modelarlo con objetos? Veo algunos objetos: Política, con todos sus hijos de Cobertura y Clase asistentes; Asegurado, con características como género, fumador, etc., se entiende la idea.

La proyección parece que tendrá un puñado de variables "qué pasa si" que tendrán algunas propiedades estadísticas que variará. Su trabajo consistirá en ejecutar muchas simulaciones tipo Monte Carlo que alteran las variables al extraer de una muestra y calcular la salida. Su resultado será un valor medio proyectado con una desviación estándar y un nivel de confianza.

Podría ser un buen candidato para la informática paralela masiva.

¿Cuál es la base de los cálculos? ¿Algún modelo conocido que puedas compartir? Tal vez eso daría una pista.

+0

Es bastante parecido a cómo lo describió. Hay 3 hojas, una con tasas estimadas realistas, una con tasas garantizadas que suelen ser un poco más altas, y luego una tercera que las promedia. Las otras hojas tienen que ver con los préstamos y el cumplimiento del código tributario. – Dcritelli

0

Tendría que descomponer las cosas en una sola pieza tiempo, y comience con el diseño de la base de datos. Piensa en las tablas subyacentes. Puede examinar cada hoja en Excel y pensar cómo sería si tomara información relacionada y la incluyera en una tabla de base de datos.

Las vistas de la base de datos serían excelentes para hacer operaciones matemáticas básicas, ya que pueden hacer cálculos basados ​​en muchas tablas y presentar los resultados en un formato agradable.

0

Aquí es el enfoque que tomaría:

  • almacenar sus datos (las cosas en las páginas 3-4 con 60 columnas/1.300 filas) en una base de datos u otro almacén de datos.
  • hacer los cálculos ya sea usando funciones de base de datos (select sum (foo) del bla;), tablas temporales, en memoria matrices, lo
  • Guardar cálculos en almacén de datos (para su posterior recuperación más fácil y auditoría)
2

Esto es realmente una pregunta simple ... con una respuesta compleja.

Usted se está preguntando: ¿Cómo puedo planificar un proyecto de software complicado?

Conocer su entorno (que suena como si lo hace):

Conocer la ingeniería de software:

Conoce tu entorno de idioma/desarrollo:


  1. El primer paso es averiguar cómo se trabaja como desarrollador.
  2. Planifique los pasos que realizará o podría realizar.
  3. Simplifique todo a su MÍNIMO.
  4. Revise su lista de lo que debe hacer.
  5. Simulacro.
  6. Hazlo.

Si está nervioso acerca de cómo iniciar, a continuación, me gustaría crear un prototipo funcional simple. Comience visualizando el proyecto en algo como Balsamiq Mockups, para que pueda ver cómo cada pieza del rompecabezas se unirá.

Si se toma unos días de investigación de métodos de ingeniería de software, se ahorrará horas y horas de dolores de cabeza. Comience con las buenas prácticas que nos han regalado esos geeks alfa que ya han hecho lo que están tratando de hacer.

3

También asegúrese de no usar flotadores o dobles para los cálculos que involucran dinero. Use Decimal.

0

Considere por un momento que las hojas de cálculo, para muchas cosas, están trabajando con un nivel de abstracción más alto que el código C#.

Así que volver a implementar las hojas de cálculo en .Net usted tiene unos pocos amplio acerca solución ad-hoc

  1. encargo con un montón de características específicas estrechas alrededor de su dominio del problema
  2. O bien, usted podría volver a desarrollar el concepto de una hoja de cálculo. Divida el motor de cálculo que evalúa una matriz de expresiones con dependencias opcionales entre las celdas de la persistencia y la vista de los valores maxtrix. Almacene los datos en un almacén de datos que le guste (xml, relationalDB), cree una aplicación web/escritorio para editar y leer los resultados y evaluarlos utilizando el motor personalizado.
+0

Originalmente hablamos sobre hacer algo similar a su opción 2 pero por alguna razón decidieron desechar esa idea a favor de hojas de cálculo simples. Siendo el hombre bajo no tengo voz, entonces estamos construyendo 150 hojas de cálculo para hacer exactamente los mismos cálculos con ligeras diferencias. Después de copiar y pegar durante varias horas me hizo pensar (soñar despierto) en otras posibilidades. – Dcritelli

+0

Dicen que la pereza es un sello distintivo de un buen codificador ... En realidad, no es pereza sino una creencia obstinada de que hay una mejor manera de hacer las cosas. Las computadoras son máquinas que están diseñadas para manejar tareas de datos repetitivos; solo necesita aprender a usarlas. Buena suerte. – steamer25

0

Para añadir algunos detalles:

  • Los valores de celda se convierten en variables o entradas en una base de datos. Por ejemplo, en lugar de la fórmula para ser B1 = A1 + 2 (donde A1 contiene el número de widgets para una política determinada), se tiene:

    var widgets = (from policy in db.Policies select new {policy.widgets}).First().widgets;
    var moreWidgets = widgets + 2;

  • Funciones y macros obtener portado - por ejemplo, Ronda (B1, 0) se convierte en Math.Round (moreWidgets, 0, MidpointRounding.AwayFromZero)

  • Los datos y la funcionalidad relacionados se agrupan en clases e instancias de objetos.
  • Las hojas se convierten en tablas de base de datos para el almacenamiento y las páginas de pestañas/cuadros de diálogo/páginas web, etc. para la interfaz de usuario.
  • Es posible hacer que los formularios de datos que se ingresaron/revisados ​​uno a la vez:

Nombre: [________________]
Apellido: [________________]
SSN: [________________]

Las ventajas a hacer todo esto (suponiendo que se hace bien) es:

  • Organización mejorada para que la funcionalidad se pueda encontrar más fácilmente para reutilización/aumento.
  • Rendimiento mejorado
  • Acceso compartido en tiempo real a los datos, incluida la agregación de datos que se distribuyen actualmente en varios archivos.
  • Todo un mundo de nuevas funcionalidades, quizás desee agregar síntesis de voz o lo que sea que tenga.
+0

Supongo que la base de datos debería haber sido obvia y se me pasó por la cabeza. Sin embargo, tiendo a pensar en las bases de datos como cubos en lugar de herramientas complejas.Tengo muchos estudios para hacer eso parece. – Dcritelli

+0

Las bases de datos son buenas para combinar, agrupar y ordenar datos. En .NET 3, Microsoft agregó Language Integrated Query (LINQ) que le permite realizar tareas de tipo base de datos en el código donde debe vivir el procesamiento complejo real. – steamer25

1

le permite utilizar sus modelos de Excel directamente en sus aplicaciones .NET sin Excel y sin tener que gastar un montón de tiempo para la conversión de C# o VB cada vez que la gente de negocios quieren actualizar el modelo.

Puede descargar una versión de prueba gratuita here si quiere probarlo usted mismo.

Descargo de responsabilidad: Tengo SpreadsheetGear LLC

+0

+1. Para completar, otro que se debe considerar es KDCalc. Descargo de responsabilidad: No trabajo para Spreadsheet Gear o Knowledge Dynamics (KDCalc). – RichardOD

+0

¿Qué es mejor? KDCalc o SpreadsheetGear? – Dan

Cuestiones relacionadas