starfishX


NamestarfishX JSON
Version 0.155555 PyPI version JSON
download
home_pagehttps://github.com/tapattan/starfishX
SummaryGet data of stock exchange thailand (SET)
upload_time2023-03-11 04:03:02
maintainer
docs_urlNone
authornattapat attiratanasunthron
requires_python
license
keywords starfishx finance การลงทุน หุ้น peterlynch
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Library สำหรับประมวลข้อมูลตลาดหุ้นไทย Stock Exchange of Thailand https://www.set.or.th และการจัดการ Portfolio

พื้นฐานที่ต้องการ

    $ conda install -c conda-forge matplotlib

จาก https://anaconda.org/conda-forge/matplotlib


การติดตั้ง

    $ pip install starfishX  หรือ  $ pip install starfishX --upgrade

หรือ

    $ pip3 install starfishX --upgrade

Quantitative 
- sx.loadHistData(str|list,start="2018-01-01",end="2018-12-31") ``end ถ้าไม่ใส่คือวันที่ล่าสุด``
- df,k = sx.MonthlyReturn([str],"2016-01-01")
- sx.linregressIndicator(basket,periodDay) ``int periodDay`` จำนวนวันล่าสุดที่จะใช้ใน Linear least-squares regression
- sx.getNVDRVolume ดึงข้อมูลปริมาณการซื้อขายของ NVDR

ข้อมูลงบการเงินและข้อมูลตลาด
- sx.commonsizeBS(str)
- sx.commonsizeIS(str)
- sx.getFinanceRatio(str|list) 
  ``str,list`` ส่งค่าเป็น str จะ return ค่าย้อนหลังได้หลายปี หากส่งค่าเป็น array list จะ return แบบเปรียบเทียบ
  
- sx.spiderCompare([str1,str2]) 
  ``ใช้คู่กับ sx.getFinanceRatio และ list ความยาว 2 เท่านั้น``
  
- sx.getIncomeStatement(str)
- sx.getIncomeStatementCompare(list)
- sx.getBalanceSheet(str)
- sx.getBalanceSheetCompare(list)
- sx.getMemberOfIndex("set50") 
  ``SET50,SET100,sSET,SETCLMV,SETHD,SETTHSI,SETWB``
  
- sx.listStockInSector("kbank") 
  ``สุ่มอะไรก็ได้ในกลุ่มอุตสาหกรรมนั้นๆ``
  
- sx.getFundamentalInSector("kbank") 
  ``สุ่มอะไรก็ได้ในกลุ่มอุตสาหกรรมนั้นๆ``
- sx.findCASH("aot")
- sx.listShareholders(str|list,csv="file.csv") 
  ``csv สำหรับบันทึกข้อมูลเป็น csv``
- sx.listSecurities()
- sx.findMarketCap(str|list)
- sx.DuPontROE(str,int,firstLine=False)
  ``str Symbol ของหุ้นรายตัว`` 
  ``int Year เป็นปีพ.ศ. เช่น 2562 หรือ 2561``
  ``firstLine True`` คือ SALE ใช้บรรทัดแรก แต่ถ้าเป็น False SALE จะใช้รายได้รวมทั้งหมด ถ้าไม่ใส่ปกติจะเป็น False

- sx.InterestBearingDebt(str) ``str Symbol ของหุ้นรายตัว`` ใช้หาหนี้ที่มีคาดว่ามีภาระดอกเบี้ย
- sx.DA(str) ``str Symbol `` ใช้หาค่าเสื่อมราคาและค่าตัดจำหน่าย

- sx.morningstarGetfn(str,Indicates=sx.MStar) ดึงค่าปัจจัยพื้นฐานจาก morningstar 
  ``str Symbol ของหุ้นรายตัว``
  ``sx.MStar`` คือ ตัวคัดกรองที่ต้องการ เช่น ปันผลใช้ sx.MStar.Dividends , รายได้ใช้ sx.MStar.Revenue เป็นต้น
  จาก Cr.http://financials.morningstar.com

- sx.marketview(indexMarket,start=year) 
  ``str year ใช้ปีค.ศ. เช่น 2010-01-01 YYYY-MM-DD``
  ``indexMarket Class เช่น sx.indexMarket.SET50``

- rp = sx.marketViewForeignTrade(indexMarket,start="2016-01-01") 
  ``indexMarket ของต่างชาติซื้อขายมีเพียง SET และ mai เท่านั้น`` ``str year ใช้ปีค.ศ. เช่น 2010-01-01 YYYY-MM-DD``

- sx.AnomalyDetectionVolume(DataSet,contamination=0.01,viewplot=True) 
  ``DataSet เป็น DataFrame ของปริมาณการซื้อขาย`` ``contamination ส่วนของสิ่งผิดปกติใน DataSet ``

ประเมินมูลค่าหุ้น
- sx.getEVEBITDA(symbol,year) ``int Year เป็นปีพ.ศ. เช่น 2562 หรือ 2561 ``
- sx.analyseEVEBITDA(basket,yearstart,yearend) ``วิเคราะห์คุณภาพ EV/EBITDA``
- sx.DividendDiscountModel(symbol,year,k) 
  ``int Year เป็นปีพ.ศ. เช่น 2562 หรือ 2561 ``
  ``k อัตราผลตอบแทนที่คาดหวัง``

- sx.thaibma(year,bondtype=sx.BondType.ThaiGovernmentBond10Year) 
``strFormat ใช้ค.ศ. เช่น 2019-06-10 YYYY-MM-DD``
Cr.http://www.thaibma.or.th

- sx.thaibma_series(year,bondtype=sx.BondType.ThaiGovernmentBond10Year) 

- sx.beta(str) ``str Symbol ``

- sx.EarningYieldGap(indexMarket,bondtype,start=year) ``str year ใช้ปีค.ศ. เช่น 2010-01-01 YYYY-MM-DD``

Optimization
- sx.MarkowitzProcess(df,alias=symbols,random=5000)

ดึงวันหยุดของตลาด (วันหยุดตามประเพณีของสถาบันการเงิน)
- df = sx.getHolidayMarket('2021') ``int Year เป็นปีค.ศ. เช่น 2010-01-01 YYYY-MM-DD ``

สถิติข้อมูล IPO ของหุ้น ราคา IPO /ข้อมูล ณ วันแรกที่ซื้อขาย / บริษัทที่ปรึกษาทางการเงิน
- df = sx.ipoStat(start,end) ``int start,end เป็นปีค.ศ. เช่น 2020 ``

ดึงราคา Warrant หรือใบสําคัญแสดงสิทธิ symbol : string เช่น mint-w7,jmart-w4
- df = sx.getWarrant('mint-w7')

ดึงราคา Derivative Warrants หรือใบสำคัญแสดงสิทธิอนุพันธ์ symbol : string เช่น 'INTU01C2201A'
- df = sx.getDW('INTU01C2201A')  

คำนวณค่า Greek ของ Warrant ที่เราต้องการ
- ``float asset_price : ราคาสินค้าอ้างอิง ``  
  ``float asset_volatility : ความผันผวนของราคาสินค้าอ้างอิง `` 
  ``float strike_price : ราคาใช้สิทธิ `` 
  ``float time_to_expiration : วันหมดอายุ (จำนวนวัน/365) ``
  ``float risk_free_rate : อัตราผลตอบแทนที่ไม่มีความเสี่ยง ``

  callOption = EuropeanCall(asset_price=4.94, asset_volatility=0.80,strike_price=2,
                          time_to_expiration=2.901, risk_free_rate=0.015)

  คืนค่าเป็น Option Price,Delta,Gamma,Vega,Theta และ Rho

  Cr.เอกสารประกอบจาก
  1.https://medium.com/swlh/black-scholes-algorithmic-delta-hedging-c2cdd42ce175 
  2.https://aaronschlegel.me/measure-sensitivity-derivatives-greeks-python.html 

ตัวอย่าง Data Type และอื่นๆ
- list เช่น ["aot","ptt"]
- str เช่น "aot" 
- sx.checkServices() เป็นการตรวจสอบการทำงานของ Server โดยภาพรวมว่า function ยังทำงานโดยปกติไหม

ตัวอย่างการใช้งาน

    import starfishX as sx

    print(sx.__version__)

    sx.getBalanceSheet("aot")

ตัวอย่างการใช้งาน

    import starfishX as sx

    symbol = ["aot","ptt"]

    df = sx.loadHistData(symbol,start="2018-01-01")

ตัวอย่างการใช้งาน

    import starfishX as sx

    symbols = ["ptt","cpf","mint","aav"]

    df = sx.loadHistData(symbols,start="2018-01-01")

    sx.MarkowitzProcess(df,alias=symbols,random=5000)


ค้นหาหุ้นตามแนวทางของ Peter Lynch โดยใช้เนื้อหาจากหนังสือ “เหนือกว่าวอลสตรีท One Up On Wall Street” สร้างเป็น Package เสริมโดยใช้ฟังก์ชั่นพื้นฐานจาก starfishX

    import starfishX.peterlynch as pl 

- อัตราการเติบโตของกำไรเป็นอย่างไร
- P/E อุตสาหกรรม และ P/E บริษัทที่คล้ายกัน
- P/E ต่ออัตราการเติบโตของกำไร
- P/E ย้อนหลัง 10 ปี
  - ตัวอย่างเช่น df = pl.getPEHistory('aot') ``str symbol``
- นักวิเคราะห์สนใจหุ้นเราไหม
- บริษัทมีข่าวการซื้อหุ้นคืนบ้างหรือเปล่า
- เปอร์เซ็นต์การถือหุ้นของสถาบัน
- มีบุคคลภายในกำลังซื้อหุ้นของบริษัทบ้างไหม ตรวจสอบรายงาน 59-2 และรายงาน 246-2
- โครงสร้างหนี้เป็นอย่างไร
- มีงบดุลที่แข็งแกร่งขนาดไหน
- เงินสดต่อหุ้นเป็นยังไงบ้าง
- อัตราการปันผลสม่ำเสมอหรือเปล่า
- อัตรา Payout เป็นอย่างไรบ้าง
- กระแสเงินสดอิสระ Free Cash Flow เป็นยังไง
- หาบริษัทที่ยอดเยี่ยมในอุตสาหกรรมที่ยอดแย่
- สัญญานหนึ่งของการเพื่องฟู
- หุ้นทรัพย์สินมาก ประยุกต์ใช้เทคนิค Sum Of The Part
- การคัดกรอง หุ้นโตช้า ,หุ้นแข็งแกร่ง ,หุ้นโตเร็ว ตามอัตราการเติบโต

Historical Volatility

    import starfishX.volatility as vol

    from starfishX.volatility.vol import TypeVol as tv

    df = sx.loadHistData("JMART",OHLC=True,start="2020-01-01") 

    N = 30 #sma 

    vol.historicalVolatility(df,N,tv.hvCloseToClose)
    
    vol.historicalVolatility(df,N,tv.hvParkinson)

starfishX.volatility ตอนนี้ก็จะมี 6 ฟังก์ชัน
- 1.Close To Close
- 2.Parkinson  (High-Low)
- 3.Garman-Klass (Open-High-Low-Close)
- 4.Rogers-Satchell  (Open-High-Low-Close + จัดการราคาที่ไม่เปลี่ยนแปลงได้)
- 5.GARMAN-KLASS YANG-ZHANG EXTENSION (Open-High-Low-Close + จัดการราคาที่มีการเปิดกระโดดได้)
- 6.Yang-Zhang (Open-High-Low-Close + จัดการราคาที่ไม่เปลี่ยนแปลงได้ + จัดการราคาที่มีการเปิดกระโดดได้)

ติดต่อฉัน แจ้ง BUG แจ้ง Error ได้ที่

 Facebook : https://www.facebook.com/Superstarman-1464755373546185/

 Email    : tapattan@จีเมล์ดอทคอม


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/tapattan/starfishX",
    "name": "starfishX",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "starfishx,finance,\u0e01\u0e32\u0e23\u0e25\u0e07\u0e17\u0e38\u0e19,\u0e2b\u0e38\u0e49\u0e19,peterlynch",
    "author": "nattapat attiratanasunthron",
    "author_email": "tapattan@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/fa/88/8070d24e79fdd0583209cd5cd7e2375fe8fac1269bc09ca313574912df04/starfishX-0.155555.tar.gz",
    "platform": null,
    "description": "Library \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e15\u0e25\u0e32\u0e14\u0e2b\u0e38\u0e49\u0e19\u0e44\u0e17\u0e22 Stock Exchange of Thailand https://www.set.or.th \u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e01\u0e32\u0e23 Portfolio\n\n\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\n\n    $ conda install -c conda-forge matplotlib\n\n\u0e08\u0e32\u0e01 https://anaconda.org/conda-forge/matplotlib\n\n\n\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\n\n    $ pip install starfishX  \u0e2b\u0e23\u0e37\u0e2d  $ pip install starfishX --upgrade\n\n\u0e2b\u0e23\u0e37\u0e2d\n\n    $ pip3 install starfishX --upgrade\n\nQuantitative \n- sx.loadHistData(str|list,start=\"2018-01-01\",end=\"2018-12-31\") ``end \u0e16\u0e49\u0e32\u0e44\u0e21\u0e48\u0e43\u0e2a\u0e48\u0e04\u0e37\u0e2d\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14``\n- df,k = sx.MonthlyReturn([str],\"2016-01-01\")\n- sx.linregressIndicator(basket,periodDay) ``int periodDay`` \u0e08\u0e33\u0e19\u0e27\u0e19\u0e27\u0e31\u0e19\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19 Linear least-squares regression\n- sx.getNVDRVolume \u0e14\u0e36\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13\u0e01\u0e32\u0e23\u0e0b\u0e37\u0e49\u0e2d\u0e02\u0e32\u0e22\u0e02\u0e2d\u0e07 NVDR\n\n\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e07\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e07\u0e34\u0e19\u0e41\u0e25\u0e30\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e15\u0e25\u0e32\u0e14\n- sx.commonsizeBS(str)\n- sx.commonsizeIS(str)\n- sx.getFinanceRatio(str|list) \n  ``str,list`` \u0e2a\u0e48\u0e07\u0e04\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19 str \u0e08\u0e30 return \u0e04\u0e48\u0e32\u0e22\u0e49\u0e2d\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e44\u0e14\u0e49\u0e2b\u0e25\u0e32\u0e22\u0e1b\u0e35 \u0e2b\u0e32\u0e01\u0e2a\u0e48\u0e07\u0e04\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19 array list \u0e08\u0e30 return \u0e41\u0e1a\u0e1a\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a\n  \n- sx.spiderCompare([str1,str2]) \n  ``\u0e43\u0e0a\u0e49\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a sx.getFinanceRatio \u0e41\u0e25\u0e30 list \u0e04\u0e27\u0e32\u0e21\u0e22\u0e32\u0e27 2 \u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19``\n  \n- sx.getIncomeStatement(str)\n- sx.getIncomeStatementCompare(list)\n- sx.getBalanceSheet(str)\n- sx.getBalanceSheetCompare(list)\n- sx.getMemberOfIndex(\"set50\") \n  ``SET50,SET100,sSET,SETCLMV,SETHD,SETTHSI,SETWB``\n  \n- sx.listStockInSector(\"kbank\") \n  ``\u0e2a\u0e38\u0e48\u0e21\u0e2d\u0e30\u0e44\u0e23\u0e01\u0e47\u0e44\u0e14\u0e49\u0e43\u0e19\u0e01\u0e25\u0e38\u0e48\u0e21\u0e2d\u0e38\u0e15\u0e2a\u0e32\u0e2b\u0e01\u0e23\u0e23\u0e21\u0e19\u0e31\u0e49\u0e19\u0e46``\n  \n- sx.getFundamentalInSector(\"kbank\") \n  ``\u0e2a\u0e38\u0e48\u0e21\u0e2d\u0e30\u0e44\u0e23\u0e01\u0e47\u0e44\u0e14\u0e49\u0e43\u0e19\u0e01\u0e25\u0e38\u0e48\u0e21\u0e2d\u0e38\u0e15\u0e2a\u0e32\u0e2b\u0e01\u0e23\u0e23\u0e21\u0e19\u0e31\u0e49\u0e19\u0e46``\n- sx.findCASH(\"aot\")\n- sx.listShareholders(str|list,csv=\"file.csv\") \n  ``csv \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1b\u0e47\u0e19 csv``\n- sx.listSecurities()\n- sx.findMarketCap(str|list)\n- sx.DuPontROE(str,int,firstLine=False)\n  ``str Symbol \u0e02\u0e2d\u0e07\u0e2b\u0e38\u0e49\u0e19\u0e23\u0e32\u0e22\u0e15\u0e31\u0e27`` \n  ``int Year \u0e40\u0e1b\u0e47\u0e19\u0e1b\u0e35\u0e1e.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2562 \u0e2b\u0e23\u0e37\u0e2d 2561``\n  ``firstLine True`` \u0e04\u0e37\u0e2d SALE \u0e43\u0e0a\u0e49\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14\u0e41\u0e23\u0e01 \u0e41\u0e15\u0e48\u0e16\u0e49\u0e32\u0e40\u0e1b\u0e47\u0e19 False SALE \u0e08\u0e30\u0e43\u0e0a\u0e49\u0e23\u0e32\u0e22\u0e44\u0e14\u0e49\u0e23\u0e27\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 \u0e16\u0e49\u0e32\u0e44\u0e21\u0e48\u0e43\u0e2a\u0e48\u0e1b\u0e01\u0e15\u0e34\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19 False\n\n- sx.InterestBearingDebt(str) ``str Symbol \u0e02\u0e2d\u0e07\u0e2b\u0e38\u0e49\u0e19\u0e23\u0e32\u0e22\u0e15\u0e31\u0e27`` \u0e43\u0e0a\u0e49\u0e2b\u0e32\u0e2b\u0e19\u0e35\u0e49\u0e17\u0e35\u0e48\u0e21\u0e35\u0e04\u0e32\u0e14\u0e27\u0e48\u0e32\u0e21\u0e35\u0e20\u0e32\u0e23\u0e30\u0e14\u0e2d\u0e01\u0e40\u0e1a\u0e35\u0e49\u0e22\n- sx.DA(str) ``str Symbol `` \u0e43\u0e0a\u0e49\u0e2b\u0e32\u0e04\u0e48\u0e32\u0e40\u0e2a\u0e37\u0e48\u0e2d\u0e21\u0e23\u0e32\u0e04\u0e32\u0e41\u0e25\u0e30\u0e04\u0e48\u0e32\u0e15\u0e31\u0e14\u0e08\u0e33\u0e2b\u0e19\u0e48\u0e32\u0e22\n\n- sx.morningstarGetfn(str,Indicates=sx.MStar) \u0e14\u0e36\u0e07\u0e04\u0e48\u0e32\u0e1b\u0e31\u0e08\u0e08\u0e31\u0e22\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19\u0e08\u0e32\u0e01 morningstar \n  ``str Symbol \u0e02\u0e2d\u0e07\u0e2b\u0e38\u0e49\u0e19\u0e23\u0e32\u0e22\u0e15\u0e31\u0e27``\n  ``sx.MStar`` \u0e04\u0e37\u0e2d \u0e15\u0e31\u0e27\u0e04\u0e31\u0e14\u0e01\u0e23\u0e2d\u0e07\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 \u0e40\u0e0a\u0e48\u0e19 \u0e1b\u0e31\u0e19\u0e1c\u0e25\u0e43\u0e0a\u0e49 sx.MStar.Dividends , \u0e23\u0e32\u0e22\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49 sx.MStar.Revenue \u0e40\u0e1b\u0e47\u0e19\u0e15\u0e49\u0e19\n  \u0e08\u0e32\u0e01 Cr.http://financials.morningstar.com\n\n- sx.marketview(indexMarket,start=year) \n  ``str year \u0e43\u0e0a\u0e49\u0e1b\u0e35\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2010-01-01 YYYY-MM-DD``\n  ``indexMarket Class \u0e40\u0e0a\u0e48\u0e19 sx.indexMarket.SET50``\n\n- rp = sx.marketViewForeignTrade(indexMarket,start=\"2016-01-01\") \n  ``indexMarket \u0e02\u0e2d\u0e07\u0e15\u0e48\u0e32\u0e07\u0e0a\u0e32\u0e15\u0e34\u0e0b\u0e37\u0e49\u0e2d\u0e02\u0e32\u0e22\u0e21\u0e35\u0e40\u0e1e\u0e35\u0e22\u0e07 SET \u0e41\u0e25\u0e30 mai \u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19`` ``str year \u0e43\u0e0a\u0e49\u0e1b\u0e35\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2010-01-01 YYYY-MM-DD``\n\n- sx.AnomalyDetectionVolume(DataSet,contamination=0.01,viewplot=True) \n  ``DataSet \u0e40\u0e1b\u0e47\u0e19 DataFrame \u0e02\u0e2d\u0e07\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13\u0e01\u0e32\u0e23\u0e0b\u0e37\u0e49\u0e2d\u0e02\u0e32\u0e22`` ``contamination \u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07\u0e2a\u0e34\u0e48\u0e07\u0e1c\u0e34\u0e14\u0e1b\u0e01\u0e15\u0e34\u0e43\u0e19 DataSet ``\n\n\u0e1b\u0e23\u0e30\u0e40\u0e21\u0e34\u0e19\u0e21\u0e39\u0e25\u0e04\u0e48\u0e32\u0e2b\u0e38\u0e49\u0e19\n- sx.getEVEBITDA(symbol,year) ``int Year \u0e40\u0e1b\u0e47\u0e19\u0e1b\u0e35\u0e1e.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2562 \u0e2b\u0e23\u0e37\u0e2d 2561 ``\n- sx.analyseEVEBITDA(basket,yearstart,yearend) ``\u0e27\u0e34\u0e40\u0e04\u0e23\u0e32\u0e30\u0e2b\u0e4c\u0e04\u0e38\u0e13\u0e20\u0e32\u0e1e EV/EBITDA``\n- sx.DividendDiscountModel(symbol,year,k) \n  ``int Year \u0e40\u0e1b\u0e47\u0e19\u0e1b\u0e35\u0e1e.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2562 \u0e2b\u0e23\u0e37\u0e2d 2561 ``\n  ``k \u0e2d\u0e31\u0e15\u0e23\u0e32\u0e1c\u0e25\u0e15\u0e2d\u0e1a\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e04\u0e32\u0e14\u0e2b\u0e27\u0e31\u0e07``\n\n- sx.thaibma(year,bondtype=sx.BondType.ThaiGovernmentBond10Year) \n``strFormat \u0e43\u0e0a\u0e49\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2019-06-10 YYYY-MM-DD``\nCr.http://www.thaibma.or.th\n\n- sx.thaibma_series(year,bondtype=sx.BondType.ThaiGovernmentBond10Year) \n\n- sx.beta(str) ``str Symbol ``\n\n- sx.EarningYieldGap(indexMarket,bondtype,start=year) ``str year \u0e43\u0e0a\u0e49\u0e1b\u0e35\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2010-01-01 YYYY-MM-DD``\n\nOptimization\n- sx.MarkowitzProcess(df,alias=symbols,random=5000)\n\n\u0e14\u0e36\u0e07\u0e27\u0e31\u0e19\u0e2b\u0e22\u0e38\u0e14\u0e02\u0e2d\u0e07\u0e15\u0e25\u0e32\u0e14 (\u0e27\u0e31\u0e19\u0e2b\u0e22\u0e38\u0e14\u0e15\u0e32\u0e21\u0e1b\u0e23\u0e30\u0e40\u0e1e\u0e13\u0e35\u0e02\u0e2d\u0e07\u0e2a\u0e16\u0e32\u0e1a\u0e31\u0e19\u0e01\u0e32\u0e23\u0e40\u0e07\u0e34\u0e19)\n- df = sx.getHolidayMarket('2021') ``int Year \u0e40\u0e1b\u0e47\u0e19\u0e1b\u0e35\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2010-01-01 YYYY-MM-DD ``\n\n\u0e2a\u0e16\u0e34\u0e15\u0e34\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 IPO \u0e02\u0e2d\u0e07\u0e2b\u0e38\u0e49\u0e19 \u0e23\u0e32\u0e04\u0e32 IPO /\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 \u0e13 \u0e27\u0e31\u0e19\u0e41\u0e23\u0e01\u0e17\u0e35\u0e48\u0e0b\u0e37\u0e49\u0e2d\u0e02\u0e32\u0e22 / \u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e17\u0e35\u0e48\u0e1b\u0e23\u0e36\u0e01\u0e29\u0e32\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e40\u0e07\u0e34\u0e19\n- df = sx.ipoStat(start,end) ``int start,end \u0e40\u0e1b\u0e47\u0e19\u0e1b\u0e35\u0e04.\u0e28. \u0e40\u0e0a\u0e48\u0e19 2020 ``\n\n\u0e14\u0e36\u0e07\u0e23\u0e32\u0e04\u0e32 Warrant \u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e1a\u0e2a\u0e4d\u0e32\u0e04\u0e31\u0e0d\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e34\u0e17\u0e18\u0e34 symbol : string \u0e40\u0e0a\u0e48\u0e19 mint-w7,jmart-w4\n- df = sx.getWarrant('mint-w7')\n\n\u0e14\u0e36\u0e07\u0e23\u0e32\u0e04\u0e32 Derivative Warrants \u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e1a\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e2d\u0e19\u0e38\u0e1e\u0e31\u0e19\u0e18\u0e4c symbol : string \u0e40\u0e0a\u0e48\u0e19 'INTU01C2201A'\n- df = sx.getDW('INTU01C2201A')  \n\n\u0e04\u0e33\u0e19\u0e27\u0e13\u0e04\u0e48\u0e32 Greek \u0e02\u0e2d\u0e07 Warrant \u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\n- ``float asset_price : \u0e23\u0e32\u0e04\u0e32\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07 ``  \n  ``float asset_volatility : \u0e04\u0e27\u0e32\u0e21\u0e1c\u0e31\u0e19\u0e1c\u0e27\u0e19\u0e02\u0e2d\u0e07\u0e23\u0e32\u0e04\u0e32\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07 `` \n  ``float strike_price : \u0e23\u0e32\u0e04\u0e32\u0e43\u0e0a\u0e49\u0e2a\u0e34\u0e17\u0e18\u0e34 `` \n  ``float time_to_expiration : \u0e27\u0e31\u0e19\u0e2b\u0e21\u0e14\u0e2d\u0e32\u0e22\u0e38 (\u0e08\u0e33\u0e19\u0e27\u0e19\u0e27\u0e31\u0e19/365) ``\n  ``float risk_free_rate : \u0e2d\u0e31\u0e15\u0e23\u0e32\u0e1c\u0e25\u0e15\u0e2d\u0e1a\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e48\u0e22\u0e07 ``\n\n  callOption = EuropeanCall(asset_price=4.94, asset_volatility=0.80,strike_price=2,\n                          time_to_expiration=2.901, risk_free_rate=0.015)\n\n  \u0e04\u0e37\u0e19\u0e04\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19 Option Price,Delta,Gamma,Vega,Theta \u0e41\u0e25\u0e30 Rho\n\n  Cr.\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e08\u0e32\u0e01\n  1.https://medium.com/swlh/black-scholes-algorithmic-delta-hedging-c2cdd42ce175 \n  2.https://aaronschlegel.me/measure-sensitivity-derivatives-greeks-python.html \n\n\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07 Data Type \u0e41\u0e25\u0e30\u0e2d\u0e37\u0e48\u0e19\u0e46\n- list \u0e40\u0e0a\u0e48\u0e19 [\"aot\",\"ptt\"]\n- str \u0e40\u0e0a\u0e48\u0e19 \"aot\" \n- sx.checkServices() \u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 Server \u0e42\u0e14\u0e22\u0e20\u0e32\u0e1e\u0e23\u0e27\u0e21\u0e27\u0e48\u0e32 function \u0e22\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19\u0e42\u0e14\u0e22\u0e1b\u0e01\u0e15\u0e34\u0e44\u0e2b\u0e21\n\n\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\n\n    import starfishX as sx\n\n    print(sx.__version__)\n\n    sx.getBalanceSheet(\"aot\")\n\n\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\n\n    import starfishX as sx\n\n    symbol = [\"aot\",\"ptt\"]\n\n    df = sx.loadHistData(symbol,start=\"2018-01-01\")\n\n\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\n\n    import starfishX as sx\n\n    symbols = [\"ptt\",\"cpf\",\"mint\",\"aav\"]\n\n    df = sx.loadHistData(symbols,start=\"2018-01-01\")\n\n    sx.MarkowitzProcess(df,alias=symbols,random=5000)\n\n\n\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2b\u0e38\u0e49\u0e19\u0e15\u0e32\u0e21\u0e41\u0e19\u0e27\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 Peter Lynch \u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e08\u0e32\u0e01\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d \u201c\u0e40\u0e2b\u0e19\u0e37\u0e2d\u0e01\u0e27\u0e48\u0e32\u0e27\u0e2d\u0e25\u0e2a\u0e15\u0e23\u0e35\u0e17 One Up On Wall Street\u201d \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19 Package \u0e40\u0e2a\u0e23\u0e34\u0e21\u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e48\u0e19\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19\u0e08\u0e32\u0e01 starfishX\n\n    import starfishX.peterlynch as pl \n\n- \u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23\u0e40\u0e15\u0e34\u0e1a\u0e42\u0e15\u0e02\u0e2d\u0e07\u0e01\u0e33\u0e44\u0e23\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23\n- P/E \u0e2d\u0e38\u0e15\u0e2a\u0e32\u0e2b\u0e01\u0e23\u0e23\u0e21 \u0e41\u0e25\u0e30 P/E \u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e17\u0e35\u0e48\u0e04\u0e25\u0e49\u0e32\u0e22\u0e01\u0e31\u0e19\n- P/E \u0e15\u0e48\u0e2d\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23\u0e40\u0e15\u0e34\u0e1a\u0e42\u0e15\u0e02\u0e2d\u0e07\u0e01\u0e33\u0e44\u0e23\n- P/E \u0e22\u0e49\u0e2d\u0e19\u0e2b\u0e25\u0e31\u0e07 10 \u0e1b\u0e35\n  - \u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e0a\u0e48\u0e19 df = pl.getPEHistory('aot') ``str symbol``\n- \u0e19\u0e31\u0e01\u0e27\u0e34\u0e40\u0e04\u0e23\u0e32\u0e30\u0e2b\u0e4c\u0e2a\u0e19\u0e43\u0e08\u0e2b\u0e38\u0e49\u0e19\u0e40\u0e23\u0e32\u0e44\u0e2b\u0e21\n- \u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e21\u0e35\u0e02\u0e48\u0e32\u0e27\u0e01\u0e32\u0e23\u0e0b\u0e37\u0e49\u0e2d\u0e2b\u0e38\u0e49\u0e19\u0e04\u0e37\u0e19\u0e1a\u0e49\u0e32\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e1b\u0e25\u0e48\u0e32\n- \u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e47\u0e19\u0e15\u0e4c\u0e01\u0e32\u0e23\u0e16\u0e37\u0e2d\u0e2b\u0e38\u0e49\u0e19\u0e02\u0e2d\u0e07\u0e2a\u0e16\u0e32\u0e1a\u0e31\u0e19\n- \u0e21\u0e35\u0e1a\u0e38\u0e04\u0e04\u0e25\u0e20\u0e32\u0e22\u0e43\u0e19\u0e01\u0e33\u0e25\u0e31\u0e07\u0e0b\u0e37\u0e49\u0e2d\u0e2b\u0e38\u0e49\u0e19\u0e02\u0e2d\u0e07\u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e1a\u0e49\u0e32\u0e07\u0e44\u0e2b\u0e21 \u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19 59-2 \u0e41\u0e25\u0e30\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19 246-2\n- \u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e35\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23\n- \u0e21\u0e35\u0e07\u0e1a\u0e14\u0e38\u0e25\u0e17\u0e35\u0e48\u0e41\u0e02\u0e47\u0e07\u0e41\u0e01\u0e23\u0e48\u0e07\u0e02\u0e19\u0e32\u0e14\u0e44\u0e2b\u0e19\n- \u0e40\u0e07\u0e34\u0e19\u0e2a\u0e14\u0e15\u0e48\u0e2d\u0e2b\u0e38\u0e49\u0e19\u0e40\u0e1b\u0e47\u0e19\u0e22\u0e31\u0e07\u0e44\u0e07\u0e1a\u0e49\u0e32\u0e07\n- \u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23\u0e1b\u0e31\u0e19\u0e1c\u0e25\u0e2a\u0e21\u0e48\u0e33\u0e40\u0e2a\u0e21\u0e2d\u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e1b\u0e25\u0e48\u0e32\n- \u0e2d\u0e31\u0e15\u0e23\u0e32 Payout \u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23\u0e1a\u0e49\u0e32\u0e07\n- \u0e01\u0e23\u0e30\u0e41\u0e2a\u0e40\u0e07\u0e34\u0e19\u0e2a\u0e14\u0e2d\u0e34\u0e2a\u0e23\u0e30 Free Cash Flow \u0e40\u0e1b\u0e47\u0e19\u0e22\u0e31\u0e07\u0e44\u0e07\n- \u0e2b\u0e32\u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e17\u0e35\u0e48\u0e22\u0e2d\u0e14\u0e40\u0e22\u0e35\u0e48\u0e22\u0e21\u0e43\u0e19\u0e2d\u0e38\u0e15\u0e2a\u0e32\u0e2b\u0e01\u0e23\u0e23\u0e21\u0e17\u0e35\u0e48\u0e22\u0e2d\u0e14\u0e41\u0e22\u0e48\n- \u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e07\u0e1f\u0e39\n- \u0e2b\u0e38\u0e49\u0e19\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e4c\u0e2a\u0e34\u0e19\u0e21\u0e32\u0e01 \u0e1b\u0e23\u0e30\u0e22\u0e38\u0e01\u0e15\u0e4c\u0e43\u0e0a\u0e49\u0e40\u0e17\u0e04\u0e19\u0e34\u0e04 Sum Of The Part\n- \u0e01\u0e32\u0e23\u0e04\u0e31\u0e14\u0e01\u0e23\u0e2d\u0e07 \u0e2b\u0e38\u0e49\u0e19\u0e42\u0e15\u0e0a\u0e49\u0e32 ,\u0e2b\u0e38\u0e49\u0e19\u0e41\u0e02\u0e47\u0e07\u0e41\u0e01\u0e23\u0e48\u0e07 ,\u0e2b\u0e38\u0e49\u0e19\u0e42\u0e15\u0e40\u0e23\u0e47\u0e27 \u0e15\u0e32\u0e21\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e01\u0e32\u0e23\u0e40\u0e15\u0e34\u0e1a\u0e42\u0e15\n\nHistorical Volatility\n\n    import starfishX.volatility as vol\n\n    from starfishX.volatility.vol import TypeVol as tv\n\n    df = sx.loadHistData(\"JMART\",OHLC=True,start=\"2020-01-01\") \n\n    N = 30 #sma \n\n    vol.historicalVolatility(df,N,tv.hvCloseToClose)\n    \n    vol.historicalVolatility(df,N,tv.hvParkinson)\n\nstarfishX.volatility \u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e01\u0e47\u0e08\u0e30\u0e21\u0e35 6 \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\n- 1.Close To Close\n- 2.Parkinson  (High-Low)\n- 3.Garman-Klass (Open-High-Low-Close)\n- 4.Rogers-Satchell  (Open-High-Low-Close + \u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e23\u0e32\u0e04\u0e32\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e44\u0e14\u0e49)\n- 5.GARMAN-KLASS YANG-ZHANG EXTENSION (Open-High-Low-Close + \u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e23\u0e32\u0e04\u0e32\u0e17\u0e35\u0e48\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e44\u0e14\u0e49)\n- 6.Yang-Zhang (Open-High-Low-Close + \u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e23\u0e32\u0e04\u0e32\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e44\u0e14\u0e49 + \u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e23\u0e32\u0e04\u0e32\u0e17\u0e35\u0e48\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e44\u0e14\u0e49)\n\n\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e09\u0e31\u0e19 \u0e41\u0e08\u0e49\u0e07 BUG \u0e41\u0e08\u0e49\u0e07 Error \u0e44\u0e14\u0e49\u0e17\u0e35\u0e48\n\n Facebook : https://www.facebook.com/Superstarman-1464755373546185/\n\n Email    : tapattan@\u0e08\u0e35\u0e40\u0e21\u0e25\u0e4c\u0e14\u0e2d\u0e17\u0e04\u0e2d\u0e21\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Get data of stock exchange thailand (SET)",
    "version": "0.155555",
    "split_keywords": [
        "starfishx",
        "finance",
        "\u0e01\u0e32\u0e23\u0e25\u0e07\u0e17\u0e38\u0e19",
        "\u0e2b\u0e38\u0e49\u0e19",
        "peterlynch"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f1cae31f3c7e9e174b249faa94b09c005e16c705081ee34d8fff6a412cc1c83",
                "md5": "7cccbe9e6516cf75baf68f81e9156706",
                "sha256": "502b2964005320afefaf150dcaf88ce2c4244a489f1fa8dd06177ccf61fc868d"
            },
            "downloads": -1,
            "filename": "starfishX-0.155555-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7cccbe9e6516cf75baf68f81e9156706",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 119611,
            "upload_time": "2023-03-11T04:02:55",
            "upload_time_iso_8601": "2023-03-11T04:02:55.261805Z",
            "url": "https://files.pythonhosted.org/packages/3f/1c/ae31f3c7e9e174b249faa94b09c005e16c705081ee34d8fff6a412cc1c83/starfishX-0.155555-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fa888070d24e79fdd0583209cd5cd7e2375fe8fac1269bc09ca313574912df04",
                "md5": "d22788112fc798b0b66f67fd0bed233a",
                "sha256": "dae9099dfed9a944ec5bb0f930299b5e9cb39988bd069a947a49b4c263135a5d"
            },
            "downloads": -1,
            "filename": "starfishX-0.155555.tar.gz",
            "has_sig": false,
            "md5_digest": "d22788112fc798b0b66f67fd0bed233a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 94689,
            "upload_time": "2023-03-11T04:03:02",
            "upload_time_iso_8601": "2023-03-11T04:03:02.465673Z",
            "url": "https://files.pythonhosted.org/packages/fa/88/8070d24e79fdd0583209cd5cd7e2375fe8fac1269bc09ca313574912df04/starfishX-0.155555.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-03-11 04:03:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "tapattan",
    "github_project": "starfishX",
    "lcname": "starfishx"
}
        
Elapsed time: 0.10534s