dsl - www - वित्त में डीएसएल




धर्मेंद्र सर (4)

क्या यहां किसी ने कभी भी वित्त डोमेन में डीएसएल (डोमेन विशिष्ट भाषाएँ) के साथ काम किया है? मैं उस आवेदन में कुछ प्रकार के डीएसएल समर्थन पेश करने की योजना बना रहा हूं, जिस पर मैं काम कर रहा हूं और कुछ विचारों को साझा करना चाहता हूं।

मैं यह पहचानने के एक चरण में हूं कि कौन सी सबसे स्थिर डोमेन तत्व हैं और इस सुविधा का चयन करना जो डीएसएल के साथ बेहतर ढंग से लागू होगा। मैंने अभी तक इस पहली फीचर के लिए सिंटैक्स परिभाषित नहीं किया है।

मैं किसी सलाह की सराहना करता हूं

गुस्तावो


जे फील्ड्स और ओबी फर्नांडीज ने इस विषय पर व्यापक रूप से लिखा और बात की है।

मार्टिन फोवेलर्स के लेखन में डीएसएल को लागू करने पर आपको सामान्य सामान भी मिलेगा (लेकिन वित्त के लिए विशिष्ट नहीं)


साइमन पेयटन जोन्स और जीन मार्क-एर्बी द्वारा डीएसएल के रूप में वित्तीय अनुबंधों को सुंदर ढंग से तैयार किया गया है। उनके डीएसएल, हास्केल में एम्बेडेड, पेपर में प्रस्तुत किया गया है कैसे एक वित्तीय अनुबंध लिखना है


डोमेन विशिष्ट भाषाओं (डीएसएल) वित्तीय साधनों का प्रतिनिधित्व करने के लिए सबसे अधिक उपयोग किया जाता है कैनोनिकल पेपर साइमन पेयटन जोन्स ' कम्पोजिंग कॉन्ट्रैक्ट्स: फाइनेंशियल इंजीनियरिंग में एक एडवेंचर है जो हास्केल में एक संयोजक लाइब्रेरी का उपयोग कर अनुबंध का प्रतिनिधित्व करता है। संयोजक दृष्टिकोण का सबसे प्रमुख उपयोग LexiFi की एमएलएफआई भाषा है , जो ओकैमल (उनके सीईओ, जीन-मार्क एबर, कम्पोजिंग कॉन्ट्रैक्ट्स पेपर पर सह-लेखक हैं) के शीर्ष पर बनाया गया है। एक बिंदु पर बार्कले ने दृष्टिकोण की प्रतिलिपि बनाई है और कुछ अतिरिक्त लाभों का वर्णन किया है, जैसे कि मानव-पठनीय गणितीय मूल्य निर्धारण फ़ार्मुलों ( वाणिज्यिक उपयोग: विदेशी व्यापारों पर कार्यात्मक रूप से जाना) को उत्पन्न करने की क्षमता।

वित्तीय अनुबंधों के लिए DSL आमतौर पर एक कार्यात्मक भाषा जैसे कि हास्केल, स्काला, या ओकैमल में एक एम्बेडिंग का उपयोग करके बनाया जाता है वित्तीय उद्योग में कार्यात्मक प्रोग्रामिंग भाषाओं की तेजता इस दृष्टिकोण को आकर्षक बनाना जारी रखेगी

वित्तीय साधनों का प्रतिनिधित्व करने के अलावा, डीएसएल का उपयोग वित्त में भी किया जाता है:

मैं http://www.dslfin.org/resources.html पर वित्तीय DSL के कागजात, वार्ता, और अन्य संसाधनों की पूरी सूची बनाए रखता हूं।

यदि आप वित्तीय प्रणालियों के लिए DSL के साथ काम कर रहे पेशेवरों और शोधकर्ताओं से मिलना चाहते हैं, तो 1 अक्टूबर को मियामी, फ्लोरिडा में मॉडल्स 2013 सम्मेलन में एक आगामी कार्यशाला है: http://www.dslfin.org/


मुझे लगता है कि साइमन पाय्टोन जोन्स और जीन मार्क एबर का काम "कम्पोजिंग कॉन्ट्रैक्ट्स: एडवेंचर इन फाइनेंशियल इंजीनियरिंग" और " लिसिकफी और एमएलएफआई " से प्राप्त सभी चीजें के कारण सबसे प्रभावशाली है।

शाहबाज चौधरी के स्कला को सबसे आकर्षक रूप में कार्यान्वित किया गया, जो कि एमएलएफआई आम तौर पर उपलब्ध नहीं है (और क्योंकि स्कैला फंक्शनल भाषा के रूप में अधिक सुविधाजनक है जो हास्केल)।

देखें "एडवेंचर्स इन फाइनेंशियल एंड सॉफ्टवेयर इंजीनियरिंग" और अन्य सामग्री जो वहां से संदर्भित हैं।

मैं यह कार्यान्वयन कैसे कर सकता हूं, इसके विचार के लिए एक स्निप की प्रतिलिपि करने की हिम्मत करेगा।

  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)
  }

}

एफ # में टॉमस पेट्रीसैक का उत्कृष्ट कार्य अन्वेषण करने के लिए काफी मूल्यवान है।

"डीएसएल" प्रतिमान से परे मेरा सुझाव है कि हमें कई अन्य शक्तिशाली मानदंडों से योगदान की ज़रूरत है ताकि "बड़ी डेटा" वास्तविकताओं को पूरा करते हुए वित्तीय साधनों और वित्तीय अनुबंधों के जटिल शब्दों का प्रतिनिधित्व करने का पूरा तरीका हो।

यहां उल्लिखित कुछ भाषाओं की समीक्षा करने के योग्य: http://www.dslfin.org/resources.html