用python来写了个仓位预算程序

一个稳健的投资者在买入股票的时候总是分批建仓,在不同的价位依次买入,那就要考虑一下,自己的本金是多少,分几次买,买入的价格和数量各是多少。就像网格交易,如果不先设定好,钱用完了,股票可能还在继续下跌。

现在我们用python来写一个仓位预算程序。首先选用tkinter来创建窗体,输入股票代码、股票名称、初始资金,买入价格、数量、网格间距等。主要控件为标签和文本框,用来输入数据,另外还有两个按钮,用于执行计算程序和退出。

用python来写了个仓位预算程序

接下来,我们来写计算仓位的函数。

第一步,获取文本框里的值。用get(),例如stock_name = entry_stock.get()获取文本框里输入的股票名称。依此类推,取得所有输入的信息。

第二步,用padans来创建一个DataFrame数据表。

df = pd.DataFrame(columns=[‘股票名称’, ‘股票代码’, ‘买入价格’, ‘买入数量’, ‘持仓数量’, ‘可用金额’])

第三步,用while循环,向数据表中写入数据。条件是买入价大于0,同时可用资金大于买入资金,我们就按照设定的价格及数量买买买。

用python来写了个仓位预算程序

最后一步,输出结果,写入excel文件中。

用python来写了个仓位预算程序

为了便于学习交流,源码附后:

from tkinter import *
import pandas as pd

# 计算仓位函数
def calculate_position():
    stock_name = entry_stock.get()         # 获取股票名称
    stock_code = entry_code.get()          # 获取股票代码
    total_amount = float(entry_TotalAmount.get())    # 获取资金总额
    buy_price = float(entry_BuyPrice.get())           # 获取买入价格
    buy_count = float(entry_BuyCount.get())         # 获取买入数量
    buy_add = float(entry_BuyAdd.get())         # 获取买入增量
    price_between = float(entry_PriceBetween.get())    # 获取网格间距
    BuyAmount = buy_count * buy_price      # 买入金额
    HoldingAmount = 0  # 持仓数量
    Balance = total_amount - BuyAmount    # 剩余资金
    # 创建DataFrame
    df = pd.DataFrame(columns=['股票名称', '股票代码',  '买入价格', '买入数量',  '持仓数量', '可用金额'])
    while BuyAmount <= Balance and buy_price > 0:         # 买入金额小于等于剩余资金
        # 增加一行数据
        HoldingAmount = HoldingAmount + buy_count
        df.loc[len(df)] = [stock_name, stock_code, buy_price, buy_count, HoldingAmount, Balance]  # 剩余资金
        buy_price = buy_price - price_between
        buy_count = buy_count + buy_add
        Balance = Balance - buy_price * buy_count

    print("股票名称:", stock_name)
    print("股票代码:", stock_code)
    print("资金总额:", total_amount)
    print("买入价格:", buy_price)
    print("买入数量:", buy_count)
    print("买入增量:", buy_add)
    print("网格间距:", price_between)
    print(df)


    # 写入excel文件
    df.to_excel("仓位预算.xlsx", sheet_name="仓位预算", index=False)


# 创建窗口
root = Tk()
root.title("仓位预算")
label_stock = Label(root, text="股票名称:")
label_stock.grid(row=0, column=0)
entry_stock = Entry(root)
entry_stock.insert(0, "上证50")
entry_stock.grid(row=0, column=1)
label_code = Label(root, text="股票代码:")
label_code.grid(row=1, column=0)
entry_code = Entry(root)
entry_code.insert(0, "510050")
entry_code.grid(row=1, column=1)
label_TotalAmount = Label(root, text="资金总额:")
label_TotalAmount.grid(row=2, column=0)
entry_TotalAmount = Entry(root)
entry_TotalAmount.insert(0, "28000")
entry_TotalAmount.grid(row=2, column=1)
label_BuyPrice = Label(root, text="买入价格:")
label_BuyPrice.grid(row=3, column=0)
entry_BuyPrice = Entry(root)
entry_BuyPrice.insert(0, "2.28")
entry_BuyPrice.grid(row=3, column=1)
label_BuyCount = Label(root, text="买入数量:")
label_BuyCount.grid(row=4, column=0)
entry_BuyCount = Entry(root)
entry_BuyCount.insert(0, "1000")
entry_BuyCount.grid(row=4, column=1)
label_BuyAdd = Label(root, text="买入增量:")
label_BuyAdd.grid(row=5, column=0)
entry_BuyAdd = Entry(root)
entry_BuyAdd.insert(0, "100")
entry_BuyAdd.grid(row=5, column=1)
label_PriceBetween = Label(root, text="网格间距:")
label_PriceBetween.grid(row=6, column=0)
entry_PriceBetween = Entry(root)
entry_PriceBetween.insert(0, "0.2")
entry_PriceBetween.grid(row=6, column=1)
button_calculate = Button(root, text="计算仓位",command=calculate_position)
button_calculate.grid( row=7, column=1, padx=10, pady=10)
button_exit = Button(root, text="退出", command=root.quit)
button_exit.grid(row=7, column=2, padx=10, pady=10)
root.mainloop()

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73471
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注