欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python制作股票交易計算器

 更新時間:2024年12月19日 10:43:32   作者:PieroPc  
這篇文章主要為大家詳細(xì)介紹了如何利用Python和Html分別制作一個股票交易計算器,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考一下

python版

完整代碼

import tkinter as tk
from tkinter import ttk, messagebox
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from datetime import datetime
 
class StockDesigner:
    def __init__(self, root):
        self.root = root
        self.root.title("股票交易計算器")
        self.root.geometry("1000x700")
        
        # 設(shè)置主題樣式
        style = ttk.Style()
        style.theme_use('clam')  # 使用 clam 主題
        
        # 自定義樣式
        style.configure('TLabel', font=('微軟雅黑', 10))
        style.configure('TButton', font=('微軟雅黑', 10))
        style.configure('TLabelframe', font=('微軟雅黑', 10))
        style.configure('TLabelframe.Label', font=('微軟雅黑', 10, 'bold'))
        style.configure('Custom.TButton', padding=10, font=('微軟雅黑', 10, 'bold'))
        
        # 設(shè)置默認(rèn)手續(xù)費率
        self.commission_rate = 0.00025
        self.stamp_duty = 0.001
        self.min_commission = 5
        
        # 創(chuàng)建主框架
        self.main_frame = ttk.Frame(root, padding="20")
        self.main_frame.grid(row=0, column=0, sticky="nsew")
        
        self.create_widgets()
        
        # 配置根窗口的網(wǎng)格權(quán)重
        root.grid_rowconfigure(0, weight=1)
        root.grid_columnconfigure(0, weight=1)
        
    def create_widgets(self):
        # 創(chuàng)建標(biāo)題
        title_label = ttk.Label(self.main_frame, text="股票交易計算器", 
                              font=('微軟雅黑', 16, 'bold'))
        title_label.grid(row=0, column=0, columnspan=2, pady=(0, 20))
        
        # 創(chuàng)建左側(cè)輸入框架
        input_frame = ttk.LabelFrame(self.main_frame, text="交易數(shù)據(jù)輸入", padding="20")
        input_frame.grid(row=1, column=0, padx=(0, 10), sticky="nsew")
        
        # 修改輸入框布局
        labels = ["股票代碼:", "買入價格:", "買入數(shù)量:", "目標(biāo)賣出價:", "目標(biāo)盈利金額:"]
        entries = ["code_entry", "buy_price_entry", "volume_entry", "sell_price_entry", "target_profit_entry"]
        
        for i, (label, entry) in enumerate(zip(labels, entries)):
            ttk.Label(input_frame, text=label).grid(row=i, column=0, pady=10, padx=(0, 10), sticky="e")
            entry_widget = ttk.Entry(input_frame, width=25, font=('微軟雅黑', 10))
            entry_widget.grid(row=i, column=1, pady=10, sticky="w")
            setattr(self, entry, entry_widget)
        
        # 添加說明文本
        hint_text = "注:手續(xù)費率為萬分之2.5,印花稅為千分之1"
        ttk.Label(input_frame, text=hint_text, font=('微軟雅黑', 9), foreground='gray')\
            .grid(row=len(labels), column=0, columnspan=2, pady=(10, 0))
        
        # 添加兩個計算按鈕
        calc_button = ttk.Button(input_frame, text="計算交易成本和收益", 
                               command=self.calculate_profit, style='Custom.TButton')
        calc_button.grid(row=len(labels)+1, column=0, columnspan=2, pady=(20,5))
        
        reverse_calc_button = ttk.Button(input_frame, text="計算目標(biāo)賣出價", 
                                       command=self.calculate_target_price, style='Custom.TButton')
        reverse_calc_button.grid(row=len(labels)+2, column=0, columnspan=2, pady=(5,20))
        
        # 創(chuàng)建右側(cè)顯示框架
        display_frame = ttk.LabelFrame(self.main_frame, text="計算結(jié)果", padding="20")
        display_frame.grid(row=1, column=1, sticky="nsew")
        
        # 創(chuàng)建結(jié)果顯示區(qū)
        self.result_text = tk.Text(display_frame, height=20, width=45, 
                                 font=('Consolas', 10), bg='#F8F8F8')
        self.result_text.grid(row=0, column=0, sticky="nsew")
        
        # 添???滾動條
        scrollbar = ttk.Scrollbar(display_frame, orient="vertical", 
                                command=self.result_text.yview)
        scrollbar.grid(row=0, column=1, sticky="ns")
        self.result_text.configure(yscrollcommand=scrollbar.set)
        
        # 設(shè)置網(wǎng)格權(quán)重
        self.main_frame.grid_columnconfigure(1, weight=1)
        self.main_frame.grid_rowconfigure(1, weight=1)
        display_frame.grid_columnconfigure(0, weight=1)
        display_frame.grid_rowconfigure(0, weight=1)
        
    def calculate_profit(self):
        try:
            buy_price = float(self.buy_price_entry.get())
            volume = int(self.volume_entry.get())
            sell_price = float(self.sell_price_entry.get())
            
            if not all([buy_price > 0, volume > 0, sell_price > 0]):
                messagebox.showerror("錯誤", "請輸入有效的數(shù)據(jù)!")
                return
            
            # 計算買入成本
            buy_amount = buy_price * volume
            buy_commission = max(buy_amount * self.commission_rate, self.min_commission)
            
            # 計算賣出收入
            sell_amount = sell_price * volume
            sell_commission = max(sell_amount * self.commission_rate, self.min_commission)
            stamp_duty = sell_amount * self.stamp_duty
            
            # 計算總成本和收益
            total_cost = buy_amount + buy_commission + sell_commission + stamp_duty
            total_income = sell_amount
            net_profit = total_income - total_cost
            profit_rate = (net_profit / total_cost) * 100
            
            # 顯示結(jié)果
            result = f"""┌{'─'*40}┐
│            交易明細(xì)                    │
└{'─'*40}┘
 買入價格: {buy_price:.3f}元
 買入數(shù)量: {volume:,}股
 買入金額: {buy_amount:,.2f}元
 買入手續(xù)費: {buy_commission:.2f}元
 賣出價格: {sell_price:.3f}元
 賣出金額: {sell_amount:,.2f}元
 賣出手續(xù)費: {sell_commission:.2f}元
 印花稅: {stamp_duty:.2f}元
┌{'─'*40}┐
│            盈虧分析                    │
└{'─'*40}┘
 總成本: {total_cost:,.2f}元
 總收入: {total_income:,.2f}元
 凈利潤: {net_profit:,.2f}元
 收益率: {profit_rate:.2f}%
┌{'─'*40}┐
│            盈虧平衡點                  │
└{'─'*40}┘
 最低賣出價格: {(total_cost/volume):.3f}元
"""
            self.result_text.delete(1.0, tk.END)
            self.result_text.insert(tk.END, result)
            
        except ValueError:
            messagebox.showerror("錯誤", "請輸入正確的數(shù)值!")
 
    def calculate_target_price(self):
        try:
            buy_price = float(self.buy_price_entry.get())
            volume = int(self.volume_entry.get())
            target_profit = float(self.target_profit_entry.get())
            
            if not all([buy_price > 0, volume > 0, target_profit > 0]):
                messagebox.showerror("錯誤", "請輸入有效的數(shù)據(jù)!")
                return
            
            # 計算買入成本
            buy_amount = buy_price * volume
            buy_commission = max(buy_amount * self.commission_rate, self.min_commission)
            
            # 通過二分法查找目標(biāo)賣出價
            left, right = buy_price, buy_price * 2
            target_price = 0
            
            while left <= right:
                mid = (left + right) / 2
                sell_amount = mid * volume
                sell_commission = max(sell_amount * self.commission_rate, self.min_commission)
                stamp_duty = sell_amount * self.stamp_duty
                
                total_cost = buy_amount + buy_commission + sell_commission + stamp_duty
                net_profit = sell_amount - total_cost
                
                if abs(net_profit - target_profit) < 0.01:
                    target_price = mid
                    break
                elif net_profit < target_profit:
                    left = mid + 0.0001
                else:
                    right = mid - 0.0001
            
            # 計算詳細(xì)成本
            buy_amount = buy_price * volume
            buy_commission = max(buy_amount * self.commission_rate, self.min_commission)
            
            sell_amount = target_price * volume
            sell_commission = max(sell_amount * self.commission_rate, self.min_commission)
            stamp_duty = sell_amount * self.stamp_duty
            
            total_cost = buy_amount + buy_commission + sell_commission + stamp_duty
            
            # 修改顯示結(jié)果,添加成本明細(xì)
            result = f"""┌{'─'*40}┐
│            反向計算結(jié)果                │
└{'─'*40}┘
 買入價格: {buy_price:.3f}元
 買入數(shù)量: {volume:,}股
 買入金額: {buy_amount:,.2f}元
 買入手續(xù)費: {buy_commission:.2f}元
 目標(biāo)盈利: {target_profit:.2f}元
 需要賣出價格: {target_price:.3f}元
 賣出金額: {sell_amount:,.2f}元
 賣出手續(xù)費: {sell_commission:.2f}元
 印花稅: {stamp_duty:.2f}元
┌{'─'*40}┐
│            成本與收益                  │
└{'─'*40}┘
 總成本: {total_cost:,.2f}元
 總收入: {sell_amount:,.2f}元
 凈利潤: {target_profit:.2f}元
 上漲幅度: {((target_price/buy_price - 1) * 100):.2f}%
"""
            self.result_text.delete(1.0, tk.END)
            self.result_text.insert(tk.END, result)
            
            # 自動填充賣出價格輸入框
            self.sell_price_entry.delete(0, tk.END)
            self.sell_price_entry.insert(0, f"{target_price:.3f}")
            
        except ValueError:
            messagebox.showerror("錯誤", "請輸入正確的數(shù)值!")
 
if __name__ == "__main__":
    root = tk.Tk()
    app = StockDesigner(root)
    root.mainloop()

效果圖

Html 版

完整代碼

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>股票交易計算器</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 0 auto;
            padding: 20px;
        }
        .calculator {
            border: 1px solid #ccc;
            padding: 20px;
            border-radius: 5px;
        }
        .input-group {
            margin-bottom: 15px;
        }
        label {
            display: inline-block;
            width: 120px;
        }
        input {
            width: 150px;
            padding: 5px;
        }
        button {
            background-color: #4CAF50;
            color: white;
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:hover {
            background-color: #45a049;
        }
        .result {
            margin-top: 20px;
            padding: 10px;
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <div class="calculator">
        <h2>股票交易計算器</h2>
        <div class="input-group">
            <label>買入價格:</label>
            <input type="number" id="buyPrice" step="0.01">
        </div>
        <div class="input-group">
            <label>賣出價格:</label>
            <input type="number" id="sellPrice" step="0.01">
        </div>
        <div class="input-group">
            <label>交易數(shù)量:</label>
            <input type="number" id="quantity">
        </div>
        <div class="input-group">
            <label>手續(xù)費率:</label>
            <input type="number" id="feeRate" value="0.00025" step="0.0001">
        </div>
        <button onclick="calculate()">計算</button>
        <div class="result" id="result"></div>
    </div>
 
    <script>
        function calculate() {
            // 獲取輸入值
            const buyPrice = parseFloat(document.getElementById('buyPrice').value);
            const sellPrice = parseFloat(document.getElementById('sellPrice').value);
            const quantity = parseInt(document.getElementById('quantity').value);
            const feeRate = parseFloat(document.getElementById('feeRate').value);
 
            // 驗證輸入
            if (!buyPrice || !sellPrice || !quantity || !feeRate) {
                alert('請?zhí)顚懰斜匾畔ⅲ?);
                return;
            }
 
            // 計算交易費用
            const buyTotal = buyPrice * quantity;
            const sellTotal = sellPrice * quantity;
            const buyFee = Math.max(buyTotal * feeRate, 5); // 最低手續(xù)費5元
            const sellFee = Math.max(sellTotal * feeRate, 5);
 
            // 計算盈虧
            const profit = sellTotal - buyTotal - buyFee - sellFee;
            const profitRate = (profit / buyTotal * 100).toFixed(2);
 
            // 顯示結(jié)果
            const resultHTML = `
                <h3>交易明細(xì):</h3>
                <p>買入總額:¥${buyTotal.toFixed(2)}</p>
                <p>買入手續(xù)費:¥${buyFee.toFixed(2)}</p>
                <p>賣出總額:¥${sellTotal.toFixed(2)}</p>
                <p>賣出手續(xù)費:¥${sellFee.toFixed(2)}</p>
                <p>凈盈虧:¥${profit.toFixed(2)}</p>
                <p>收益率:${profitRate}%</p>
            `;
            
            document.getElementById('result').innerHTML = resultHTML;
        }
    </script>
</body>
</html>

效果圖

到此這篇關(guān)于基于Python制作股票交易計算器的文章就介紹到這了,更多相關(guān)Python股票交易計算器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python類方法總結(jié)講解

    Python類方法總結(jié)講解

    這篇文章主要介紹了Python類方法總結(jié)講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Win10+GPU版Pytorch1.1安裝的安裝步驟

    Win10+GPU版Pytorch1.1安裝的安裝步驟

    這篇文章主要介紹了Win10+GPU版Pytorch1.1安裝的安裝步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python numpy中cumsum的用法詳解

    python numpy中cumsum的用法詳解

    這篇文章主要介紹了python numpy中cumsum的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python自動化實現(xiàn)日報數(shù)據(jù)可視化

    Python自動化實現(xiàn)日報數(shù)據(jù)可視化

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)自動化生成日報數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • python 引用傳遞和值傳遞詳解(實參,形參)

    python 引用傳遞和值傳遞詳解(實參,形參)

    這篇文章主要介紹了python 引用傳遞和值傳遞詳解(實參,形參)。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • django中使用POST方法獲取POST數(shù)據(jù)

    django中使用POST方法獲取POST數(shù)據(jù)

    這篇文章主要介紹了django中使用POST方法獲取POST數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    通過圖像可以直觀地學(xué)習(xí)函數(shù)變化、分布等規(guī)律,在學(xué)習(xí)函數(shù)、概率分布等方面效果顯著,下面這篇文章主要給大家介紹了關(guān)于如何在Python中利用matplotlib.pyplot畫出函數(shù)圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 使用scrapy實現(xiàn)爬網(wǎng)站例子和實現(xiàn)網(wǎng)絡(luò)爬蟲(蜘蛛)的步驟

    使用scrapy實現(xiàn)爬網(wǎng)站例子和實現(xiàn)網(wǎng)絡(luò)爬蟲(蜘蛛)的步驟

    本文分二個示例,第一個是個簡單的爬網(wǎng)站的小例子,第二個例子實現(xiàn)目是從一個網(wǎng)站的列表頁抓取文章列表,然后存入數(shù)據(jù)庫中,數(shù)據(jù)庫包括文章標(biāo)題、鏈接、時間,大家參考使用吧
    2014-01-01
  • 用Python的Turtle制作自己的星空

    用Python的Turtle制作自己的星空

    這篇文章主要介紹了用Python的Turtle制作自己的星空,本文用了turtle繪圖包,是一款非常強大的內(nèi)置包,需要的朋友可以參考下
    2023-04-04
  • Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗

    Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗

    這篇文章主要為大家介紹了Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論