DSLs (اللغات الخاصة بالمجال) في مجال التمويل

StackOverflow https://stackoverflow.com/questions/23448

  •  09-06-2019
  •  | 
  •  

سؤال

وقد عملت مع أي شخص DSL (اللغات الخاصة بالمجال) في المجال المالي؟أخطط لتقديم نوع ما من دعم DSL في التطبيق الذي أعمل عليه وأرغب في مشاركة بعض الأفكار.

أنا في مرحلة تحديد عناصر النطاق الأكثر استقرارًا واختيار الميزات التي يمكن تنفيذها بشكل أفضل باستخدام خط المشترك الرقمي (DSL).لم أقم بعد بتعريف بناء الجملة لهذه الميزة الأولى.

هل كانت مفيدة؟

المحلول

لقد كتب جاي فيلدز وأوبي فرنانديز وتحدثا بشكل موسع حول هذا الموضوع.

ستجد أيضًا أشياء عامة حول تنفيذ DSL في كتابات مارتن فاولر (ولكنها ليست خاصة بالتمويل).

نصائح أخرى

تم تصميم العقود المالية بشكل أنيق على أنها DSL بواسطة سيمون بيتون جونز وجان مارك إربي.يتم عرض DSL الخاص بهم، المضمن في Haskell، في الورقة كيفية كتابة عقد مالي.

تُستخدم اللغات الخاصة بالمجال (DSL) بشكل شائع لتمثيل الأدوات المالية.الورقة الأساسية هي ورقة سيمون بيتون جونز تأليف العقود:مغامرة في الهندسة المالية والذي يمثل العقود باستخدام مكتبة مجمعة في هاسكل.الاستخدام الأبرز لنهج المجمّع هو لغة MLFi الخاصة بـ LexiFi, ، والتي تم بناؤها على رأس OCaml (رئيسها التنفيذي، جان مارك إيبر، هو مؤلف مشارك في ورقة Composition Contracts).وقد قامت شركة باركليز في وقت ما بنسخ هذا النهج ووصفت بعض الفوائد الإضافية، مثل القدرة على توليد صيغ تسعير رياضية يمكن قراءتها بواسطة الإنسان (الاستخدامات التجارية:العمل على الصفقات الغريبة).

عادةً ما يتم إنشاء DSLs للعقود المالية باستخدام التضمين في لغة وظيفية مثل Haskell أو Scala أو OCaml.وسيستمر استيعاب لغات البرمجة الوظيفية في الصناعة المالية في جعل هذا النهج جذابًا.

بالإضافة إلى تمثيل الأدوات المالية، تُستخدم DSLs أيضًا في التمويل من أجل:

أحتفظ بقائمة كاملة من أوراق DSL المالية والمحادثات والموارد الأخرى في http://www.dslfin.org/resources.html.

إذا كنت ترغب في مقابلة محترفين وباحثين يعملون مع DSLs للأنظمة المالية، فهناك ورشة عمل قادمة في الأول من أكتوبر في مؤتمر MODELS 2013 في ميامي، فلوريدا: http://www.dslfin.org/

لقد عملنا على فكرة إنشاء DSL للتقييم المالي مع Fairmat ( http://www.fairmat.com )

-يكشف DSL يمكن استخدامه للتعبير عن عمليات الدفع وتبعيات الدفع -يحتوي على نموذج تمديد لإنشاء أنواع جديدة من التحليلات وتطبيقات الديناميات النظرية باستخدام .NET/ C# مع مكتبة الرياضيات الأساسية لدينا (انظر بعض أمثلة المصدر المفتوح في https://github.com/fairmat

أعتقد أن عمل سيمون بيتون جونز وجان مارك إيبر هو الأكثر إثارة للإعجاب بسبب "تأليف العقود:مغامرة في الهندسة المالية" وكل ما يشتق منها:"ليكسي فاي وMLFi".

وجد شهباز تشودري يعد تنفيذ Scala هو الأكثر جاذبية نظرًا لأن MLFi غير متاح بشكل عام (ولأن Scala كلغة وظيفية يمكن الوصول إليها بشكل أكبر من Haskell).

يرى "مغامرات في الهندسة المالية والبرمجيات" وغيرها من المواد المشار إليها من هناك.

سأجرؤ على تكرار مقتطف للحصول على فكرة عما يمكن أن يفعله هذا التنفيذ.

  object Main extends App {
  //Required for doing LocalDate comparisons...a scalaism
  implicit val LocalDateOrdering = scala.math.Ordering.fromLessThan[java.time.LocalDate]{case (a,b) => (a compareTo b) < 0}

  //custom contract
  def usd(amount:Double) = Scale(Const(amount),One("USD"))
  def buy(contract:Contract, amount:Double) = And(contract,Give(usd(amount)))
  def sell(contract:Contract, amount:Double) = And(Give(contract),usd(amount))
  def zcb(maturity:LocalDate, notional:Double, currency:String) = When(maturity, Scale(Const(notional),One(currency)))
  def option(contract:Contract) = Or(contract,Zero())
  def europeanCallOption(at:LocalDate, c1:Contract, strike:Double) = When(at, option(buy(c1,strike)))
  def europeanPutOption(at:LocalDate, c1:Contract, strike:Double) = When(at, option(sell(c1,strike)))
  def americanCallOption(at:LocalDate, c1:Contract, strike:Double) = Anytime(at, option(buy(c1,strike)))
  def americanPutOption(at:LocalDate, c1:Contract, strike:Double) = Anytime(at, option(sell(c1,strike)))

  //custom observable
  def stock(symbol:String) = Scale(Lookup(symbol),One("USD"))
  val msft = stock("MSFT")


  //Tests
  val exchangeRates = collection.mutable.Map(
    "USD" -> LatticeImplementation.binomialPriceTree(365,1,0),
    "GBP" -> LatticeImplementation.binomialPriceTree(365,1.55,.0467),
    "EUR" -> LatticeImplementation.binomialPriceTree(365,1.21,.0515)
    )
  val lookup = collection.mutable.Map(
    "MSFT" -> LatticeImplementation.binomialPriceTree(365,45.48,.220),
    "ORCL" -> LatticeImplementation.binomialPriceTree(365,42.63,.1048),
    "EBAY" -> LatticeImplementation.binomialPriceTree(365,53.01,.205)
  )
  val marketData = Environment(
    LatticeImplementation.binomialPriceTree(365,.15,.05), //interest rate (use a universal rate for now)
    exchangeRates, //exchange rates
    lookup
  )

  //portfolio test
  val portfolio = Array(
    One("USD")
    ,stock("MSFT")
    ,buy(stock("MSFT"),45)
    ,option(buy(stock("MSFT"),45))
    ,americanCallOption(LocalDate.now().plusDays(5),stock("MSFT"),45)
  )

  for(contract <- portfolio){
    println("===========")
    val propt = LatticeImplementation.contractToPROpt(contract)
    val rp = LatticeImplementation.binomialValuation(propt, marketData)
    println("Contract: "+contract)
    println("Random Process(for optimization): "+propt)
    println("Present val: "+rp.startVal())
    println("Random Process: \n"+rp)
  }

}

ال العمل الممتاز لتوماس بيتريسيك في F# يستحق الاستكشاف كثيرًا.

بعيدًا عن نموذج "DSL"، أقترح أننا سنحتاج إلى مساهمات من عدد من النماذج القوية الأخرى للحصول على طريقة كاملة لتمثيل الدلالات المعقدة للأدوات المالية والعقود المالية مع تلبية حقائق "البيانات الضخمة".

يستحق مراجعة بعض اللغات المذكورة هنا: http://www.dslfin.org/resources.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top