2008-08-22 17 views
11

क्या यहां किसी ने भी वित्त डोमेन में DSLs (Domain Specific Languages) के साथ काम किया है? मैं उस एप्लिकेशन में किसी प्रकार का डीएसएल समर्थन पेश करने की योजना बना रहा हूं जिस पर मैं काम कर रहा हूं और कुछ विचार साझा करना चाहता हूं।वित्त में डीएसएल

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

मैं किसी भी सलाह

गुस्तावो

उत्तर

7

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

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

13

वित्तीय अनुबंधों साइमन Peyton जोन्स और जीन-मार्क-Erby द्वारा एक डीएसएल के रूप में सुंदर ढंग से मॉडलिंग की गई है। हास्केल में एम्बेडेड उनका डीएसएल, पेपर How to write a financial contract में प्रस्तुत किया गया है।

0

हम Fairmat के साथ एक वित्तीय मूल्यांकन डीएसएल बनाने के विचार पर काम किया (http://www.fairmat.com)

-यह एक डीएसएल जो भुगतान नापसंद और भुगतान निर्भरता व्यक्त करने के लिए -यह बनाने के लिए एक विस्तार के मॉडल शामिल हैं इस्तेमाल किया जा सकता को उजागर करता है और विश्लेषणात्मक के नए प्रकार सैद्धांतिक गतिशीलता हमारे अंतर्निहित गणित पुस्तकालय के साथ का उपयोग कर नेट/सी # का कार्यान्वयन (https://github.com/fairmat

4

डोमेन विशिष्ट भाषाओं (DSLs) पर कुछ खुला स्रोत उदाहरण देखने के सबसे अधिक वित्तीय साधनों का प्रतिनिधित्व किया जाता है। विहित कागज है साइमन पेटन जोन्स 'Composing Contracts: an Adventure in Financial Engineering जो एक combinato का उपयोग कर अनुबंध का प्रतिनिधित्व करता है हास्केल में आर लाइब्रेरी। संयोजक दृष्टिकोण का सबसे प्रमुख उपयोग LexiFi's MLFi language है, जो ओकैमल के शीर्ष पर बनाया गया है (उनके सीईओ, जीन-मार्क एबर, कंपोज़िंग कॉन्ट्रैक्ट्स पेपर पर सह-लेखक हैं)। बार्कले ने एक बिंदु पर दृष्टिकोण की प्रतिलिपि बनाई और कुछ अतिरिक्त लाभों का वर्णन किया, जैसे मानव-पठनीय गणितीय मूल्य निर्धारण सूत्र (Commercial Uses: Going Functional on Exotic Trades) उत्पन्न करने की क्षमता।

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

  • मॉडलिंग वित्तीय संस्थाओं (Financial Industry Business Ontology)
  • की जगह संगणना आम तौर पर स्प्रेडशीट का उपयोग करके (http://doi.acm.org/10.1145/1411204.1411236)
  • मॉडलिंग वर्णित:

    वित्तीय साधनों का प्रतिनिधित्व करने के अलावा, DSLs भी वित्त में के लिए उपयोग किया जाता है पेंशन योजनाएं (Case Study: Financial Services)

  • वित्तीय बाजार डेटा का विश्लेषण (The Hedgehog Language)

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

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

0

मुझे लगता है कि साइमन के काम पेटन जोन्स और जीन मार्क एबर "रचनात्मक अनुबंध: वित्तीय प्रबंधन में एक साहसिक" और उससे प्राप्त सब कुछ के कारण सबसे प्रभावशाली है: "LexiFi and MLFi"।

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

"Adventures in financial and software engineering" और वहां से संदर्भित अन्य सामग्री देखें।

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

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

} 

excellent work of Tomas Petricek एफ # में बहुत ज्यादा की खोज के लायक है।

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

  • संभाव्य प्रोग्रामिंग: Figaro, स्टेन, आदि
  • बिग डेटा विश्लेषण: आर, स्पार्क, SparkR
  • स्केलेबल "डेटा कपड़े" ("बंद ढेर स्मृति"; वस्तु हार्डवेयर भर में लेकिन यह भी across languages): "DataFrames in Spark for Large Scale Data Science" (आर, स्कैला/जावा और पायथन के साथ काम करता है)
  • अर्थपूर्ण वेब: "Financial Topic Models" और ऑटोलॉजीज।

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

संबंधित मुद्दे