var 订阅
VAR(Video Assistant Referee),是足球专用术语,意指视频助理裁判,其实质是使用视频回放技术帮助主裁判作出正确判罚决定——VAR本身不会作出任何决定,而是帮助主裁判作出决定。 [1-2]  2018年3月16日, 国际足联主席因凡蒂诺表示,国际足联决定视频助理裁判技术(VAR)应用在俄罗斯世界杯上。 [3] 展开全文
VAR(Video Assistant Referee),是足球专用术语,意指视频助理裁判,其实质是使用视频回放技术帮助主裁判作出正确判罚决定——VAR本身不会作出任何决定,而是帮助主裁判作出决定。 [1-2]  2018年3月16日, 国际足联主席因凡蒂诺表示,国际足联决定视频助理裁判技术(VAR)应用在俄罗斯世界杯上。 [3]
信息
属    性
足球专业术语
外文名
VAR(Video Assistant Referee)
原    理
视频助理裁判使用视频回放技术帮助主裁判作出正确判罚决定
所属领域
足球
运用赛事
世界杯、德甲、中超等
中文名
视频助理裁判
VAR词语概念
VAR(2张) VAR是英文Video Assistant Referee的缩写,也被称作“视频助理裁判”,由现役裁判员担任,他的职责是通过回放视频向裁判员提供信息,协助裁判员纠正改变比赛走势清晰明显的错漏判,提高判罚的准确性。VAR主要依靠遍布足球场上的多个摄像机镜头,多机位,多角度捕捉场上球员的每一个细小动作,从而做到“火眼金睛”。当场上出现争议判罚或主裁判需要调取比赛录像时,由技术人员操作,调出相对应的回放节点,以得到更加公正的比赛判罚。 [4] 
收起全文
精华内容
下载资源
问答
  • var
    万次阅读
    2020-12-05 11:20:48

    本文整理汇总了Python中tkinter.StringVar方法的典型用法代码示例。如果您正苦于以下问题:Python tkinter.StringVar方法的具体用法?Python tkinter.StringVar怎么用?Python tkinter.StringVar使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在模块tkinter的用法示例。

    在下文中一共展示了tkinter.StringVar方法的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

    示例1: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master=None, store_name=None, **kwargs):

    super(FileBrowse, self).__init__(master=master, **kwargs)

    self.label_text = tk.StringVar()

    btn = tk.Button(self, text="下载到", command=self.choose_file)

    btn.pack(

    side=tk.LEFT,

    )

    tk.Label(self, textvariable=self.label_text).pack(

    side=tk.LEFT,

    fill=tk.X,

    )

    self.pack(fill=tk.X)

    self._store_name = store_name

    if store_name is not None:

    self._config = config_store

    save_path = self._config.op_read_path(store_name) or get_working_dir()

    else:

    self._config = None

    save_path = get_working_dir()

    self.label_text.set(

    save_path

    )

    开发者ID:winkidney,项目名称:PickTrue,代码行数:27,

    示例2: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, width=500, height=300):

    TkBase.__init__(self, width, height)

    self.plist_path = tk.StringVar()

    self.plist_path.set(os.path.abspath('.'))

    frame0 = tk.Frame(self.window)

    frame0.pack()

    frame1 = tk.Frame(self.window)

    frame1.pack()

    frame2 = tk.Frame(self.window)

    frame2.pack()

    self.__make_title_info(frame0, 0, 0)

    self.__make_title(frame1, 0, 1, 'Andromeda.plist 文件目录')

    self.__make_title_empty(frame1, 1, 0)

    self.__make_select_text(frame1, 1, 1, 1, self.plist_path)

    self.__make_title_empty(frame2, 0, 0)

    self.__make_select_confirm(frame2, 1, 0)

    self.window.mainloop()

    开发者ID:liucaide,项目名称:Andromeda,代码行数:25,

    示例3: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, root, resource_dir, lang="fr"):

    ttk.Frame.__init__(self, root)

    self.resource_dir = resource_dir

    self._lang = None

    langs = os.listdir(os.path.join(self.resource_dir, "master"))

    if langs:

    self._lang = (lang if lang in langs else langs[0])

    self.items = (os.listdir(os.path.join(self.resource_dir, "master", self._lang)) if self._lang else [])

    self.items.sort(key=lambda x: x.lower())

    max_length = max([len(item) for item in self.items])

    self.select_workflow_label = ttk.Label(root, text=u"select workflow:")

    #strVar = tkinter.StringVar()

    self.masters = tkinter.Listbox(root, width=max_length+1, height=len(self.items))#, textvariable=strVar)

    for item in self.items:

    self.masters.insert(tkinter.END, item)

    开发者ID:YoannDupont,项目名称:SEM,代码行数:21,

    示例4: addLine

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def addLine(self, settingsList, dpsFrame):

    lineNumber = len(settingsList)

    settingsList.append({"transitionValue": "", "color": "#FFFFFF"})

    settingsList[lineNumber]["transitionValue"] = tk.StringVar()

    settingsList[lineNumber]["transitionValue"].set(str(100*lineNumber))

    removeButton = tk.Button(dpsFrame, text="X", command=lambda:self.removeLine(lineNumber, settingsList, dpsFrame))

    font = tkFont.Font(font=removeButton['font'])

    font.config(weight='bold')

    removeButton['font'] = font

    removeButton.grid(row=lineNumber, column="0")

    lineLabel = tk.Label(dpsFrame, text="Threshold when the line changes color:")

    lineLabel.grid(row=lineNumber, column="1")

    initialThreshold = tk.Entry(dpsFrame, textvariable=settingsList[lineNumber]["transitionValue"], width=10)

    initialThreshold.grid(row=lineNumber, column="2")

    initialLabel = tk.Label(dpsFrame, text="Color:")

    initialLabel.grid(row=lineNumber, column="3")

    colorButton = tk.Button(dpsFrame, text=" ",

    command=lambda:self.colorWindow(settingsList[lineNumber], colorButton),

    bg=settingsList[lineNumber]["color"])

    colorButton.grid(row=lineNumber, column="4")

    开发者ID:ArtificialQualia,项目名称:PyEveLiveDPS,代码行数:23,

    示例5: create_variables

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def create_variables(self):

    settings = TkUtil.Settings.Data

    self.restore = settings.get_bool(GENERAL, RESTORE, True)

    self.menuImages = {}

    self.toolbarImages = {}

    self.toolbars = []

    self.toolbarMenu = None

    self.dockWindows = []

    self.dockWindowMenu = None

    self.statusText = tk.StringVar()

    self.fontFamily = tk.StringVar()

    self.fontPointSize = tk.StringVar()

    self.bold = tk.BooleanVar()

    self.italic = tk.BooleanVar()

    self.alignment = tk.StringVar()

    self.recentFiles = []

    self.findDialog = None

    self.x = self.y = self.dock = None

    开发者ID:lovexiaov,项目名称:python-in-practice,代码行数:20,

    示例6: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master, options):

    self.options = options

    board = self.options.board

    self.columns = tk.StringVar()

    self.columns.set(board.columns)

    self.rows = tk.StringVar()

    self.rows.set(board.rows)

    self.maxColors = tk.StringVar()

    self.maxColors.set(board.maxColors)

    self.delay = tk.StringVar()

    self.delay.set(board.delay)

    self.restore = tk.BooleanVar()

    self.restore.set(self.options.restore)

    self.showToolbar = tk.BooleanVar()

    self.showToolbar.set(self.options.showToolbar)

    super().__init__(master, "Preferences — {}".format(APPNAME),

    TkUtil.Dialog.OK_BUTTON|TkUtil.Dialog.CANCEL_BUTTON)

    开发者ID:lovexiaov,项目名称:python-in-practice,代码行数:19,

    示例7: load_settings

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def load_settings(self):

    """Load settings into our self.settings dict."""

    vartypes = {

    'bool': tk.BooleanVar,

    'str': tk.StringVar,

    'int': tk.IntVar,

    'float': tk.DoubleVar

    }

    # create our dict of settings variables from the model's settings.

    self.settings = {}

    for key, data in self.settings_model.variables.items():

    vartype = vartypes.get(data['type'], tk.StringVar)

    self.settings[key] = vartype(value=data['value'])

    # put a trace on the variables so they get stored when changed.

    for var in self.settings.values():

    var.trace('w', self.save_settings)

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:21,

    示例8: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, parent, label='', input_class=ttk.Entry,

    input_var=None, input_args=None, label_args=None,

    **kwargs):

    super().__init__(parent, **kwargs)

    input_args = input_args or {}

    label_args = label_args or {}

    self.variable = input_var

    if input_class in (ttk.Checkbutton, ttk.Button, ttk.Radiobutton):

    input_args["text"] = label

    input_args["variable"] = input_var

    else:

    self.label = ttk.Label(self, text=label, **label_args)

    self.label.grid(row=0, column=0, sticky=(tk.W + tk.E))

    input_args["textvariable"] = input_var

    self.input = input_class(self, **input_args)

    self.input.grid(row=1, column=0, sticky=(tk.W + tk.E))

    self.columnconfigure(0, weight=1)

    self.error = getattr(self.input, 'error', tk.StringVar())

    self.error_label = ttk.Label(self, textvariable=self.error)

    self.error_label.grid(row=2, column=0, sticky=(tk.W + tk.E))

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:24,

    示例9: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, *args, error_var=None, **kwargs):

    self.error = error_var or tk.StringVar()

    super().__init__(*args, **kwargs)

    vcmd = self.register(self._validate)

    invcmd = self.register(self._invalid)

    style = ttk.Style()

    widget_class = self.winfo_class()

    validated_style = 'ValidatedInput.' + widget_class

    style.map(

    validated_style,

    foreground=[('invalid', 'white'), ('!invalid', 'black')],

    fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')]

    )

    self.config(

    style=validated_style,

    validate='all',

    validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'),

    invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d')

    )

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:24,

    示例10: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, *args, **kwargs):

    super().__init__(*args, **kwargs)

    self.title("ABQ Data Entry Application")

    self.resizable(width=False, height=False)

    ttk.Label(

    self,

    text="ABQ Data Entry Application",

    font=("TkDefaultFont", 16)

    ).grid(row=0)

    self.recordform = v.DataRecordForm(self, m.CSVModel.fields)

    self.recordform.grid(row=1, padx=10)

    self.savebutton = ttk.Button(self, text="Save", command=self.on_save)

    self.savebutton.grid(sticky="e", row=2, padx=10)

    # status bar

    self.status = tk.StringVar()

    self.statusbar = ttk.Label(self, textvariable=self.status)

    self.statusbar.grid(sticky="we", row=3, padx=10)

    self.records_saved = 0

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:27,

    示例11: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, *args, **kwargs):

    super().__init__(*args, **kwargs)

    self.title("ABQ Data Entry Application")

    self.resizable(width=False, height=False)

    ttk.Label(

    self,

    text="ABQ Data Entry Application",

    font=("TkDefaultFont", 16)

    ).grid(row=0)

    self.recordform = DataRecordForm(self)

    self.recordform.grid(row=1, padx=10)

    self.savebutton = ttk.Button(self, text="Save", command=self.on_save)

    self.savebutton.grid(sticky=tk.E, row=2, padx=10)

    # status bar

    self.status = tk.StringVar()

    self.statusbar = ttk.Label(self, textvariable=self.status)

    self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10)

    self.records_saved = 0

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:26,

    示例12: __init__

    ​点赞 6

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, parent, *args, **kwargs):

    super().__init__(parent, *args, **kwargs)

    self.name = tk.StringVar()

    self.hello_string = tk.StringVar()

    self.hello_string.set("Hello World")

    name_label = ttk.Label(self, text="Name:")

    name_entry = ttk.Entry(self, textvariable=self.name)

    ch_button = ttk.Button(self, text="Change", command=self.on_change)

    hello_label = ttk.Label(self, textvariable=self.hello_string,

    font=("TkDefaultFont", 64), wraplength=600)

    # Layout form

    name_label.grid(row=0, column=0, sticky=tk.W)

    name_entry.grid(row=0, column=1, sticky=(tk.W + tk.E))

    ch_button.grid(row=0, column=2, sticky=tk.E)

    hello_label.grid(row=1, column=0, columnspan=3)

    self.columnconfigure(1, weight=1)

    开发者ID:PacktPublishing,项目名称:Python-GUI-Programming-with-Tkinter,代码行数:21,

    示例13: __init__

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master, **kwargs):

    super().__init__(**kwargs )

    self.geometry('350x100')

    self.title('Find and Replace')

    self.text_to_find = tk.StringVar()

    self.text_to_replace_with = tk.StringVar()

    top_frame = tk.Frame(self)

    middle_frame = tk.Frame(self)

    bottom_frame = tk.Frame(self)

    find_entry_label = tk.Label(top_frame, text="Find: ")

    self.find_entry = ttk.Entry(top_frame, textvar=self.text_to_find)

    replace_entry_label = tk.Label(middle_frame, text="Replace: ")

    self.replace_entry = ttk.Entry(middle_frame, textvar=self.text_to_replace_with)

    self.find_button = ttk.Button(bottom_frame, text="Find", command=self.on_find)

    self.replace = ttk.Button(bottom_frame, text="Replace", command=self.on_replace)

    self.cancel_button = ttk.Button(bottom_frame, text="Cancel", command=self.destroy)

    find_entry_label.pack(side=tk.LEFT, padx=(20, 0))

    self.find_entry.pack(side=tk.LEFT, fill=tk.X, expand=1)

    replace_entry_label.pack(side=tk.LEFT)

    self.replace_entry.pack(side=tk.LEFT, fill=tk.X, expand=1)

    self.find_button.pack(side=tk.LEFT, padx=(85, 0))

    self.cancel_button.pack(side=tk.RIGHT, padx=(0, 30))

    top_frame.pack(side=tk.TOP, expand=1, fill=tk.X, padx=30)

    middle_frame.pack(side=tk.TOP, expand=1, fill=tk.X, padx=30)

    bottom_frame.pack(side=tk.TOP, expand=1, fill=tk.X)

    开发者ID:PacktPublishing,项目名称:Tkinter-GUI-Programming-by-Example,代码行数:37,

    示例14: on_ctrl_d

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def on_ctrl_d(event=None):

    top = tk.Toplevel(win)

    top.geometry("200x200")

    sv = tk.StringVar()

    sv.set("Hover the mouse over me")

    label = tk.Label(top, textvar=sv)

    label.bind("", lambda e, sv=sv: sv.set("Hello mouse!"))

    label.bind("", lambda e, sv=sv: sv.set("Goodbye mouse!"))

    label.pack(expand=1, fill=tk.BOTH)

    开发者ID:PacktPublishing,项目名称:Tkinter-GUI-Programming-by-Example,代码行数:11,

    示例15: __init__

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self):

    super().__init__()

    self.title("Hello Tkinter")

    self.label_text = tk.StringVar()

    self.label_text.set("Choose One")

    self.label = tk.Label(self, textvar=self.label_text)

    self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)

    hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)

    hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))

    goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)

    goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))

    开发者ID:PacktPublishing,项目名称:Tkinter-GUI-Programming-by-Example,代码行数:16,

    示例16: __init__

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master):

    # More advanced as compared to regular buttons

    # Check buttons can also store binary values

    self.checkbutton = ttk.Checkbutton(master, text = 'Check Me!')

    self.checkbutton.pack()

    self.label = ttk.Label(master, text = 'Ready!! Nothing has happened yet.')

    self.label.pack()

    # Tkinter variable classes

    # self.boolvar = tk.BooleanVar() # boolean type variable of tk

    # self.dblvar = tk.DoubleVar() # double type variable of tk

    # self.intvar = tk.IntVar() # int type variable of tk

    self.checkme = tk.StringVar() # string type variable of tk

    self.checkme.set('NULL') # set value for string type tkinter variable

    print('Current value of checkme variable is \'{}\''.format(self.checkme.get()))

    # setting of binary value for check button: 1. onvaalue and 2. offvalue

    self.checkbutton.config(variable = self.checkme, onvalue = 'I am checked!!', offvalue = 'Waiting for someone to check me!')

    self.checkbutton.config(command = self.oncheckme)

    # creating another tkinter string type variable - StringVar

    self.papertype = tk.StringVar() # created a variable

    self.radiobutton1 = ttk.Radiobutton(master, text = 'Paper1', variable=self.papertype, value = 'Robotics Research')

    self.radiobutton1.config(command = self.onselectradio)

    self.radiobutton1.pack()

    self.radiobutton2 = ttk.Radiobutton(master, text = 'Paper2', variable=self.papertype, value = 'Solid Mechanics Research')

    self.radiobutton2.config(command = self.onselectradio)

    self.radiobutton2.pack()

    self.radiobutton3 = ttk.Radiobutton(master, text = 'Paper3', variable=self.papertype, value = 'Biology Research')

    self.radiobutton3.config(command = self.onselectradio)

    self.radiobutton3.pack()

    self.radiobutton4 = ttk.Radiobutton(master, text = 'Paper4', variable=self.papertype, value = 'SPAM Research')

    self.radiobutton4.config(command = self.onselectradio)

    self.radiobutton4.pack()

    self.radiobutton5 = ttk.Radiobutton(master, text = 'Change Checkme text', variable=self.papertype, value = 'Radio Checkme Selected')

    self.radiobutton5.pack()

    self.radiobutton5.config(command = self.onradiobuttonselect)

    开发者ID:adipandas,项目名称:python-gui-demos,代码行数:40,

    示例17: __init__

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master):

    self.label = ttk.Label(master, text='Enter the text below')

    self.label.pack()

    self.entry = ttk.Entry(master, width = 30) # number of characters along the width

    self.entry.pack()

    self.button = ttk.Button(master, text = "Get Entry")

    self.button.pack()

    self.tkstrvar = tk.StringVar() # create tk string variable

    self.tkstrvar.set('Nothing is done yet!') # set the value of tk string variable

    self.button.config(command = self.getEntry)

    self.msg = ttk.Label(master, text = self.tkstrvar.get()) # get the value of string variable

    self.msg.pack()

    self.btn1 = ttk.Button(master, text='Delete the entry', command = self.btn1func)

    self.btn1.pack()

    self.crypt = tk.StringVar()

    self.crypt.set('Encrypt')

    self.btn2 = ttk.Button(master, text = "{} Text in Entry Field".format(self.crypt.get()), command = self.changecrypt)

    self.btn2.pack()

    #self.entryText = ttk.Entry(master, width=30)

    ttk.Button(master, text = 'Disable Entry Field', command = self.btn3func).pack()

    ttk.Button(master, text = 'Enable Entry Field', command = self.btn4func).pack()

    ttk.Button(master, text = 'Readonly Entry Field', command = self.btn5func).pack()

    ttk.Button(master, text = 'Edit Entry Field', command = self.btn6func).pack()

    开发者ID:adipandas,项目名称:python-gui-demos,代码行数:31,

    示例18: __init__

    ​点赞 5

    # 需要导入模块: import tkinter [as 别名]

    # 或者: from tkinter import StringVar [as 别名]

    def __init__(self, master):

    ttk.Label(master, text = "PROGRESS CONTROL").pack()

    # Inderterminant Progressbar

    ttk.Label(master, text = 'Inderterminant Progress').pack()

    self.prgrsbr_indtr = ttk.Progressbar(master, orient = tk.HORIZONTAL, length = 300, mode = 'indeterminate')

    self.prgrsbr_indtr.pack()

    self.checkpbi = tk.StringVar()

    self.checkpbi.set("Start")

    # Button

    self.btn1 = ttk.Button(master, text = "{} Inderterminant Progress Bar".format(self.checkpbi.get()), command = self.btn1cmd)

    self.btn1.pack()

    # Derterminant progress

    ttk.Label(master, text = 'Derterminant Progress').pack()

    self.prgrsbr_dtr = ttk.Progressbar(master, orient=tk.HORIZONTAL, length = 300, mode = 'determinate')

    self.prgrsbr_dtr.pack()

    self.prgrsbr_dtr.config(maximum = 10.0, value = 2.0) # notice both these properties have float values

    # Button

    ttk.Button(master, text = 'Reset Progress Bar to zero', command = self.resetProgressBarVal).pack()

    # Button

    ttk.Button(master, text = 'Increase Progress Bar by 2', command = self.shift2ProgressBarVal).pack()

    # create double variable

    self.prgrsBrVal = tk.DoubleVar()

    self.prgrsbr_dtr.config(variable = self.prgrsBrVal) # set variable property of progressbar to look at DoubleVar()

    # Scale widget

    self.scalebar = ttk.Scale(master, orient = tk.HORIZONTAL, length = 400, variable=self.prgrsBrVal, from_ = 0.0, to= 10.0)

    self.scalebar.pack()

    # Label to display current value of scalebar

    ttk.Label(master, text = "Current value of Progress Bar is as below:").pack()

    self.scalebar_label = ttk.Label(master, textvariable = self.prgrsBrVal)

    self.scalebar_label.pack()

    开发者ID:adipandas,项目名称:python-gui-demos,代码行数:41,

    注:本文中的tkinter.StringVar方法示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。

    更多相关内容
  • 金融分析与风险管理——风险价值(VaR)1. 风险价值(VaR)简述1.1 Python可视化风险价值2. VaR值的测度方法2.1 方差-协方差法2.2 历史模拟法2.3 蒙特卡洛模拟法3. 回溯检验4. 压力测试5. 压力VaR 1. 风险价值(VaR...

    1. 风险价值(VaR)简述

    风险价值(value at risk,VaR)是指在一定的持有期和给定的置信水平下,利率、汇率、股价等风险因子发生变化时可能对投资组合造成的潜在最大损失。例如:持有期 1 天、置信水平 95% 的情况下,计算得到的 VaR 值为 1000 万元,则表明该投资组合在1天中有 95%的可能性损失不会超过1000万,换句话说,1 天中,有5%的可能性损失会超过 1000 万元。

    VaR的大小取决于两个参数:持有期(N)、置信水平(X)。由于 VaR 度量的是投资组合的亏损,其对应于投资组合盈亏分布的左端尾部,为了表述方便,通常 VaR 值用绝对值表示。

    VaR 的数学表达式如下:

    P r o b ( Δ P < − V a R ) = 1 − X P r o b : 概 率 函 数 Δ P : 投 资 组 合 亏 损 金 额 X : 置 信 水 平 Prob(\Delta P < - VaR) = 1 - X \\[10pt] Prob:概率函数 \\[10pt] \Delta P:投资组合亏损金额 \\[10pt] X:置信水平 Prob(ΔP<VaR)=1XProbΔPX

    根据巴塞尔协议的明确规定:银行需要计算持有期10天、置信水平99%的VaR。在实际计算中,通常先计算 N=1 时的VaR,在计算相同置信水平下 N>1 时的 VaR,其表达式如下:

    N 天 V a R = 1 天 V a R ∗ N N天VaR = 1天VaR*\sqrt{N} NVaR=1VaRN

    上式成立的条件是:投资组合价值在不同交易日之间的变化是相互独立并服从期望值为0的相同正态分布,其他情况下,该等式只是一个近似值。

    1.1 Python可视化风险价值

    利用Python对VaR进行可视化,图中阴影部分右侧的临界值就是对应置信水平的VaR,其程序如下:

    import numpy as np
    import pandas as pd
    import scipy.stats as st
    '''
    st.norm中的子模块
    pdf:概率密度函数
    cdf:累计概率分布函数
    ppf:分位点函数,cdf的反函数
    '''
    
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] #中文显示问题
    plt.rcParams['axes.unicode_minus'] = False #负数显示问题
    
    
    a = 0.95 #置信水平
    z = st.norm.ppf(q=1-a) #返回q对应的分位点
    x = np.linspace(-4,4,200) #组合的盈亏数组
    y = st.norm.pdf(x) #组合盈亏对应的概率密度数组
    x1 = np.linspace(-4,z,100) #组合最小亏损值与返回的分位点构成的盈亏数组
    y1 = st.norm.pdf(x1)
    
    plt.figure(figsize=(8,6))
    plt.plot(x,y)
    plt.fill_between(x1, y1)
    plt.grid('True')
    

    在这里插入图片描述

    2. VaR值的测度方法

    2.1 方差-协方差法

    数学假定:

    • 1 投资组合的各风险因子服从联合正态分布
    • 2 线性假定,持有期内,投资组合的风险暴露与风险因子之间是线性相关的

    其表达式如下:

    V a R = V p [ z c σ p − E ( R p ) ] E ( R p ) = ∑ w i E ( R i ) σ 2 = W c o v ( R i , R j ) W T V p : 投 资 组 合 的 最 新 价 值 z c : 显 著 性 水 平 c 对 应 的 分 位 数 绝 对 值 E ( R p ) : 投 资 组 合 的 期 望 收 益 VaR = V_p[z_c\sigma_p - E(R_p)] \\[10pt] E(R_p) = \sum w_iE(R_i) \\[10pt] \sigma^2 = Wcov(R_i,R_j)W^{T} \\[10pt] V_p:投资组合的最新价值 \\[10pt] z_c:显著性水平 c 对应的分位数绝对值 \\[10pt] E(R_p):投资组合的期望收益 \\[10pt] VaR=Vp[zcσpE(Rp)]E(Rp)=wiE(Ri)σ2=Wcov(Ri,Rj)WTVp:zccE(Rp)

    本文通过一个案例来说明如何运用方差-协方差法计算投资组合的 VaR,该投资组合有 5 个不同的资产构成,投资组合当前的市值为1亿元,其权重权重配比如下表:

    资产名称贵州茅台交通银行嘉实增强信用基金华夏恒生ETF基金博时标普500ETF基金
    权重0.150.20.50.050.1

    案例中投资组合2015年—2018年完整的数据可以通过百度网盘获取,提取码:zbbx。

    Python程序如下:

    data = pd.read_excel(r'C:\Users\Administrator\Desktop\投资组合配置的资产情况.xlsx',header = 0,index_col = 0)
    
    #初始数据的归一化处理
    R = np.log(data/data.shift(1))
    #处理缺失数据
    R = R.dropna() 
    
    R_mean = R.mean() #计算均值
    R_cov = R.cov() #计算协方差
    R_corr = R.corr() #计算相关系数
    R_vol = R.std() #计算标准差
    
    # 方差协方差方法
    def VaR_VCM(value,Rp,Vp,X,N):
        '''
        Parameters
        ----------
        value : 投资组合的价值
        Rp : 投资组合的日收益率
        Vp : 投资组合的日波动率
        X : 置信水平
        N : 持有天数
        
        '''
        import scipy.stats as st
        import numpy as np
        
        z = np.abs(st.norm.ppf(q=1-X))
        
        return np.sqrt(N)*value*(z*Vp-Rp)
    
    weights = np.array([0.15,0.20,0.5,0.05,0.1])
    #计算投资组合的期望收益率
    Rp_daily = np.sum(weights*R_mean)
    #计算投资组合的日波动率
    Vp_daily = np.sqrt(np.dot(weights,np.dot(R_cov,weights.T)))
    
    print('投资组合日收益率:',Rp_daily)
    print('投资组合日波动率:',Vp_daily)
    
    D1 = 1
    D2 = 10
    X1 = 0.99
    X2 = 0.95
    value_port = 100000000
    
    VaR99_1day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X1, N=D1)
    VaR99_10day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X1, N=D2)
    VaR95_1day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X2, N=D1)
    VaR95_10day_VCM = VaR_VCM(value=value_port, Rp=Rp_daily, Vp=Vp_daily, X=X2, N=D2)
    
    print('1天、99%的VaR:',VaR99_1day_VCM)
    print('10天、99%的VaR:',VaR99_10day_VCM)  
    print('1天、95%的VaR:',VaR95_1day_VCM)
    print('10天、99%的VaR:',VaR95_10day_VCM)  
    

    计算结果表明:持有期10天、置信水平99%的VaR=464.34万;持有期10天、置信水平95%的VaR=325.83万。

    2.2 历史模拟法

    历史模拟法:从当前回溯一定时期投资组合的历史盈亏,并把历史盈亏按照由大到小的顺序排列,从中找出符合给定置信水平的盈亏值。例如:1天、置信水平95%的VaR,把历史盈亏由大到小排列,VaR为95%的位置对应盈亏值的绝对值,或者由小到大排列,VaR为5%位置对应盈亏值的绝对值。

    本文仍然使用上述案例数据进行说明,其Python程序如下:

    #各资产配置
    value_asset = value_port*weights
    #历史交易日投资组合的盈亏值
    Return_history = np.dot(R,value_asset)
    Return_history = pd.DataFrame(Return_history,index=R.index,columns=['投资组合模拟日收益'])
    
    #盈亏数据描述
    Return_history.describe()
    Return_history.plot()
    
    #盈亏数据分布直方图
    plt.hist(Return_history,bins=30)
    plt.grid('True')
    
    #投资组合盈亏值的正态性检验
    #KS检验,返回统计量及P值
    st.kstest(rvs=Return_history['投资组合模拟日收益'], cdf='norm')   
    #AD检验,返回统计量、显著性水平对应的临界值(统计量)、显著性水平
    st.anderson(x=Return_history['投资组合模拟日收益'], dist='norm')   
    #返回统计量及P值
    st.shapiro(Return_history['投资组合模拟日收益'])   
    #返回统计量及P值
    st.normaltest(Return_history['投资组合模拟日收益'])   
    

    在这里插入图片描述
    由频数分布直方图、正态性检验的P值(P<1%)结果可知,投资组合的日收益数据不服从正态分布,运用方差—协方差方法计算的投资组合VaR值会存在偏差。使用历史模拟法的计算程序如下:

    #计算历史模拟的VaR
    VaR99_1day_history = np.abs(np.percentile(a=Return_history['投资组合模拟日收益'],q=(1-X1)*100))
    VaR95_1day_history = np.abs(np.percentile(a=Return_history['投资组合模拟日收益'],q=(1-X2)*100))
    
    VaR99_10day_history = np.sqrt(10)*VaR99_1day_history
    VaR95_10day_history = np.sqrt(10)*VaR95_1day_history
    
    print('1天、99%的VaR:',VaR99_1day_history)
    print('10天、99%的VaR:',VaR99_10day_history)  
    print('1天、95%的VaR:',VaR95_1day_history)
    print('10天、99%的VaR:',VaR95_10day_history)  
    

    计算结果表明:持有期10天、置信水平99%的VaR=675.38万;持有期10天、置信水平95%的VaR=274.21万。

    2.3 蒙特卡洛模拟法

    蒙特卡洛模拟法又称随机抽样或统计试验方法,即从一个给定的分布中,随机抽取随机数并进行计算,该方法能较好地逼近实际分布情况。

    在投资组合的模拟抽样步骤如下:

    • 1 利用第 i i i 个资产的当前价值(最新价值) S i S_i Si 加总计算投资组合的当前价值 S p S_p Sp
    • 2 在第 i i i 个资产价值的日百分比变化 X i X_i Xi 所服从的分布中进行一次抽样得到 x i x_i xi
    • 3 利用抽样获取的 x i x_i xi 计算第 i i i 个资产下一个交易日的收益金额变动 x i S i x_iS_i xiSi
    • 4 计算本次抽样获取的下一交易日投资组合的盈亏 Δ S p = ∑ x i S i \Delta S_p = \sum x_iS_i ΔSp=xiSi
    • 5 重复上述第2-4步,并将获取的 Δ S p \Delta S_p ΔSp按大小顺序排列,从而构建投资组合在下一交易日的盈亏概率分布。
    • 6 计算持有期 1 天、置信水平 X 的 VaR 值,然后计算 N 天 的 V a R N天的VaR NVaR(公式: N 天 V a R = 1 天 V a R ∗ N N天VaR = 1天VaR*\sqrt{N} NVaR=1VaRN

    本文仍然使用上述案例数据进行说明,在模拟过程中,需要用到金融资产价格服从的随机过程公式,即

    S t = S t − Δ t e ( μ − 1 2 σ 2 ) Δ t + σ ε t Δ t S_t = S_{t-\Delta t}e^{(\mu-\frac{1}{2}\sigma^2)\Delta t + \sigma \varepsilon_t\sqrt{\Delta t}} St=StΔte(μ21σ2)Δt+σεtΔt

    上式中 ε t \varepsilon_t εt 的模拟过程中假定服从 t t t 分布或者正态分布。

    其服从 t t t 分布的 Python 程序如下:

    #蒙特卡洛模拟法
    import numpy.random as npr 
    I = 10000 #模拟次数
    #从学生t分布进行I次模拟
    epsilon = npr.standard_t(df=len(R),size=I)
    
    #获取最新收盘价
    S1 = data.iloc[-1,0]  #第一个资产的最新价格
    S2 = data.iloc[-1,1]  
    S3 = data.iloc[-1,2]  
    S4 = data.iloc[-1,3]  
    S5 = data.iloc[-1,4]  
    
    R_mean = R.mean()*252 #投资组合各资产的年化收益
    R_vol = R.std()*np.sqrt(252) #投资组合各资产的年化波动率
    dt = 1/252 #年化单个交易日
    
    #模拟投资组合下一个交易日各资产的收盘价
    S1_new = S1*np.exp((R_mean[0]-0.5*R_vol[0]**2)*dt + R_vol[0]*epsilon*np.sqrt(dt))
    S2_new = S2*np.exp((R_mean[1]-0.5*R_vol[1]**2)*dt + R_vol[1]*epsilon*np.sqrt(dt))
    S3_new = S3*np.exp((R_mean[2]-0.5*R_vol[2]**2)*dt + R_vol[2]*epsilon*np.sqrt(dt))
    S4_new = S4*np.exp((R_mean[3]-0.5*R_vol[3]**2)*dt + R_vol[3]*epsilon*np.sqrt(dt))
    S5_new = S5*np.exp((R_mean[4]-0.5*R_vol[4]**2)*dt + R_vol[4]*epsilon*np.sqrt(dt))
    
    #模拟投资组合下一个交易日各资产的盈亏
    S1_delta = (S1_new/S1 - 1)*value_port*weights[0]
    S2_delta = (S2_new/S2 - 1)*value_port*weights[1]
    S3_delta = (S3_new/S3 - 1)*value_port*weights[2]
    S4_delta = (S4_new/S4 - 1)*value_port*weights[3]
    S5_delta = (S5_new/S5 - 1)*value_port*weights[4]
    #计算投资组合下一个交易日的盈亏
    Sp_delta = S1_delta + S2_delta + S3_delta + S4_delta + S5_delta
    
    #下一交易日投资组合盈亏的可视化
    plt.figure(figsize=(10,8))
    plt.hist(Sp_delta,bins=30)
    plt.ylabel('频数')
    plt.grid(True)
    
    #蒙特卡洛模拟法计算VaR
    VaR99_1day_MS = np.abs(np.percentile(a=Sp_delta,q=(1-X1)*100))    
    VaR95_1day_MS = np.abs(np.percentile(a=Sp_delta,q=(1-X2)*100))
    
    VaR99_10day_MS = np.sqrt(10)*VaR99_1day_MS
    VaR95_10day_MS = np.sqrt(10)*VaR95_1day_MS
    
    #由于抽样随机数的原因,结果可能会有不同
    print('1天、99%的VaR:',VaR99_1day_MS)
    print('10天、99%的VaR:',VaR99_10day_MS)  
    print('1天、95%的VaR:',VaR95_1day_MS)
    print('10天、95%的VaR:',VaR95_10day_MS) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的VaR=640.81万;持有期10天、置信水平95%的VaR=436.52万。

    其服从正态分布的 Python 程序如下:

    #服从正态分布进行模拟
    epsilon_norm = npr.standard_normal(I)
    
    S_new = np.zeros(shape=(I,len(R_mean)))
    
    S1_new = S1*np.exp((R_mean[0]-0.5*R_vol[0]**2)*dt + R_vol[0]*epsilon*np.sqrt(dt))
    
    for i in range(len(R_mean)):
        S_new[:,i] = data.iloc[-1,i]*np.exp((R_mean[i]-0.5*R_vol[i]**2)*dt + R_vol[i]*epsilon_norm*np.sqrt(dt))
        
    S = np.array(data.iloc[-1])
    
    Sp_delta_norm = (np.dot(S_new/S-1,weights))*value_port
    
    
    plt.figure(figsize=(10,8))
    plt.hist(Sp_delta_norm,bins=30)
    plt.ylabel('频数')
    plt.grid(True)
    
    VaR99_1day_MSnorm = np.abs(np.percentile(a=Sp_delta_norm,q=(1-X1)*100))    
    VaR95_1day_MSnorm = np.abs(np.percentile(a=Sp_delta_norm,q=(1-X2)*100))
    
    VaR99_10day_MSnorm = np.sqrt(10)*VaR99_1day_MSnorm
    VaR95_10day_MSnorm = np.sqrt(10)*VaR95_1day_MSnorm
    
    print('1天、99%的VaR:',VaR99_1day_MSnorm)
    print('10天、99%的VaR:',VaR99_10day_MSnorm)  
    print('1天、95%的VaR:',VaR95_1day_MSnorm)
    print('10天、95%的VaR:',VaR95_10day_MSnorm) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的VaR=626.17万;持有期10天、置信水平95%的VaR=451.86万。

    3. 回溯检验

    回溯检验又称为后检验,即通过模型获取的VaR与实际发生的损益进行比较,以检验模型的准确性、可靠性,并据此对模型进行改进及优化。

    本文仍然使用上述案例进行说明,其Python程序如下:

    #回溯检测
    Return_2015 = Return_history.loc['2015-01-01':'2015-12-31']
    Return_2016 = Return_history.loc['2016-01-01':'2016-12-31']
    Return_2017 = Return_history.loc['2017-01-01':'2017-12-31']
    Return_2018 = Return_history.loc['2018-01-01':'2018-12-31']
    
    days_2015 = len(Return_2015)
    days_2016 = len(Return_2016)
    days_2017 = len(Return_2017)
    days_2018 = len(Return_2018)
    
    VaR_2015 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2015),index=Return_2015.index)
    VaR_2016 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2016),index=Return_2016.index)
    VaR_2017 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2017),index=Return_2017.index)
    VaR_2018 = pd.DataFrame(-VaR95_1day_VCM*np.ones_like(Return_2018),index=Return_2018.index)
    
    
    plt.figure(figsize=(9,15))
    plt.subplot(4,1,1)
    plt.plot(Return_2015)
    plt.plot(VaR_2015)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,2)
    plt.plot(Return_2016)
    plt.plot(VaR_2016)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,3)
    plt.plot(Return_2017)
    plt.plot(VaR_2017)
    plt.ylabel('频数')
    plt.grid(True)
    
    plt.subplot(4,1,4)
    plt.plot(Return_2018)
    plt.plot(VaR_2018)
    plt.ylabel('频数')
    plt.grid(True)
    
    #计算超出VaR的天数
    dayexcept_2015 = len(Return_2015[Return_2015['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2016 = len(Return_2016[Return_2016['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2017 = len(Return_2017[Return_2017['投资组合模拟日收益']<-VaR95_1day_VCM])
    dayexcept_2018 = len(Return_2018[Return_2018['投资组合模拟日收益']<-VaR95_1day_VCM])    
    
    print('2015年超出风险天数:',dayexcept_2015)
    print('2015年超出风险天数在全年的占比:',dayexcept_2015/days_2015)
    
    print('2016年超出风险天数:',dayexcept_2016)
    print('2016年超出风险天数在全年的占比:',dayexcept_2016/days_2016)
    
    print('2017年超出风险天数:',dayexcept_2017)
    print('2017年超出风险天数在全年的占比:',dayexcept_2017/days_2017)
    
    print('2018年超出风险天数:',dayexcept_2018)
    print('2018年超出风险天数在全年的占比:',dayexcept_2018/days_2018)
    

    在这里插入图片描述
    计算结果表明:2015年超出风险天数为22天,全年占比为9.05%,明显高于5%;2016年超出风险天数为9天,全年占比为3.69%;2017年超出风险天数为1天,全年占比为0.4%;2018年超出风险天数为6天,全年占比为2.47%。

    4. 压力VaR

    压力测试是一种以定量分析为主的风险分析方法,进而测算在小概率事件及极端情况下可能面临的损失。压力情景通常分为如下两种方法:头脑风暴和历史重现法。

    压力风险价值具体是指当市场变量在一定压力市场条件下通过历史模拟法计算得到的风险价值,其计算步骤与历史模拟法相同。

    本文仍然使用上述案例进行说明,2015年6月持续数月的股灾及2016年1月初的股市熔断可以看做案例数据中的极端情况。其Python程序如下:

    #压力测试
    return_stress = Return_history.loc['2015-06-15':'2016-01-07']
    
    return_stress.describe()
    
    return_zero = pd.DataFrame(np.zeros_like(return_stress),index = return_stress.index)
    
    #投资组合盈亏与0的可视化比较
    plt.figure(figsize=(8,6))
    plt.plot(return_stress)
    plt.plot(return_zero)
    plt.grid(True)
    
    
    SVaR99_1day = np.abs(np.percentile(a=return_stress,q=(1-X1)*100))    
    SVaR95_1day = np.abs(np.percentile(a=return_stress,q=(1-X2)*100)) 
    
    SVaR99_10day = np.sqrt(10)*SVaR99_1day
    SVaR95_10day = np.sqrt(10)*SVaR95_1day
    
    print('1天、99%的VaR:',SVaR99_1day)
    print('10天、99%的VaR:',SVaR99_10day)  
    print('1天、95%的VaR:',SVaR95_1day)
    print('10天、95%的VaR:',SVaR95_10day) 
    

    在这里插入图片描述
    计算结果表明:持有期10天、置信水平99%的压力VaR=1102.12万;持有期10天、置信水平95%的压力VaR=670.14万。

    展开全文
  • VAR模型

    千次阅读 2022-03-31 09:02:07
    文章目录一、VAR是什么?1.引入库2.读入数据3.执行程序总结 一、VAR是什么? 以金融价格为例,传统的时间序列模型比如ARIMA,ARIMA-GARCH等,只分析价格自身的变化,模型的形式为: 其中称为自身的滞后项。 但是VAR...


    一、VAR是什么?

    以金融价格为例,传统的时间序列模型比如ARIMA,ARIMA-GARCH等,只分析价格自身的变化,模型的形式为:

    其中在这里插入图片描述称为自身的滞后项。
    但是VAR模型除了分析自身滞后项的影响外,还分析其他相关因素的滞后项对未来值产生的影响,模型的形式为:
    在这里插入图片描述
    其中在这里插入图片描述就是其他因子的滞后项。

    总结一下,就是可以把VAR模型看做是集合多元线性回归的优点(可以加入多个因子)以及时间序列模型的优点(可以分析滞后项的影响)的综合模型。

    VAR其实是一类模型,以上是最基础的VAR模型形式,其他还有SVAR,CVAR,VECM,同统称为VAR类模型

    1.引入库

    代码如下(示例):

    # 模型相关包
    import statsmodels.api as sm
    import statsmodels.stats.diagnostic
    # 画图包
    import matplotlib.pyplot as plt
    # 其他包
    import pandas as pd
    import numpy as np
    from sklearn.metrics import precision_score, recall_score, f1_score
    import sklearn.metrics as mc 
    ##########################画图############################################
    # 在我的 notebook 里,要设置下面两行才能显示中文
    plt.rcParams['font.family'] = ['sans-serif']
    # 如果是在 PyCharm 里,只要下面一行,上面的一行可以删除
    plt.rcParams['font.sans-serif'] = ['SimHei']
    
    

    2.读入数据

    代码如下(示例):

    df = pd.read_excel(r'C:\Users\lidongming\Desktop\数据大赛数据\xgboost\宏观因子VAR.xlsx',index_col='指标名称')
    
    df.index = pd.to_datetime(df.index)  # 将字符串索引转换成时间索引
                           # 生成pd.Series对象
    df
    

    3.执行程序

    #建立对象,1就是你自己定的滞后阶数,这里的矩阵一定要是正定的,就线性无关的
    orgMod = sm.tsa.VARMAX(df,order=(1,0),exog=None)
    #估计:就是模型
    fitMod = orgMod.fit(maxiter=1000,disp=False)
    # 打印统计结果
    print(fitMod.summary())
    # 获得模型残差
    resid = fitMod.resid
    result = {'fitMod':fitMod,'resid':resid}
    YUCE=fitMod.predict()
    YUCE
    

    总结

    VAR的阶数要看下面这个文章怎么去定义,下面这个文章讲的比较详细,这个方法我初步用于数据创新大赛的VAR预测宏观指标,加XGBOOST预测国债收益率。
    这个是VAR模型的比较详细的文章

    展开全文
  • 【FinE】在险价值(VaR)计算

    千次阅读 2020-08-30 18:01:39
    VaR值计算

    VaR模型

    在险价值Value-at-risk的定义为,在一定时期 Δ t \Delta t Δt内,一定的置信水平 1 − α 1-\alpha 1α下某种资产组合面临的最大损失,公式为
    P ( Δ p ≤ V a R ) = 1 − α P(\Delta p\leq VaR)=1-\alpha P(ΔpVaR)=1α
    在持有组合时期 Δ t \Delta t Δt内,给定置信水平 1 − α 1-\alpha 1α下,该组合的最大损失不会超过VaR,使用VaR进行风险衡量时,需要给定持有期和置信水平,巴塞尔协会规定持有期标准为10天,置信水平为99%,商业银行可以确定各自的水平,J.P.Morgan公司在1994年年报中设置持有期为1天,置信水平为95%,VaR值为1500万元,即J.P.Morgan公司在一天内所持有的风险头寸损失小于1500万的概率为95%.

    VaR的主要性质:

    • 变换不变性: V a R ( X + a ) = V a R ( X ) + a , a ∈ R VaR(X+a)=VaR(X)+a, a\in\mathbb{R} VaR(X+a)=VaR(X)+a,aR
    • 正齐次性: V a R ( a X ) = a V a R ( X ) , a < 0 VaR(aX)=aVaR(X), a<0 VaR(aX)=aVaR(X),a<0,资产的风险与持有头寸呈反比关系
    • 协单调可加性: V a R ( X 1 + X 2 ) = V a R ( X 1 ) + V a R ( X 2 ) VaR(X_1+X_2)=VaR(X_1)+VaR(X_2) VaR(X1+X2)=VaR(X1)+VaR(X2)
    • 不满足次可加性和凸性:不满足次可加性表示资产组合的风险不一定小于各资产风险之和,这个性质导致VaR测度存在不合理性,因为组合VaR不可以通过求各个资产的VaR得出。不满足凸性表示以VaR为目标函数的规划问题一般不是凸规划,局部最优解不一定是全局最优解,由于多个局部极值的存在导致无法得到最优资产组合
    • 满足一阶随机占优
    • VaR关于概率水平 1 − α 1-\alpha 1α不是连续的

    VaR对风险的衡量具有前瞻性,将预期损失的规模和发生的概率结合,可以了解在不同置信水平上风险的大小.
    但是VaR模型是对正常市场环境中金融风险的衡量,如果整体环境出现了动荡或者发生极端情况时,VaR就会失去参考价值,一般加上压力测试(Stress Test)结合极值分析进行风险衡量,常用的极值分析方法有BMM和POT两种,极值分析就是当风险规模超过设定阈值时进行建模,处理风险尾部.
    由于金融数据的低信噪比特点,导致数据呈现尖峰后尾的分布,这种分布导致VaR模型无法产生一致性度量,针对风险度量的不一致性可以使用条件风险价值CVaR模型修正,即当资产组合损失超过给定的VaR值时,资产组合的损失期望,计算公式如下
    C V a R α = E ( − X ∣ − X ≤ V a R α ( x ) ) CVaR_\alpha=\mathbb{E}(-X\mid -X\leq VaR_\alpha(x)) CVaRα=E(XXVaRα(x))
    其中 X X X表示资产的损益,CVaR满足以下性质:

    • 一致连续性
    • 次可加性, ∀ X , Y \forall X, Y X,Y满足 ρ ( X + Y ) ≤ ρ ( X ) + ρ ( Y ) \rho(X+Y)\leq \rho(X)+\rho(Y) ρ(X+Y)ρ(X)+ρ(Y)
    • 满足二阶随机占优
    • 满足单调性, ∀ X ≤ Y \forall X\leq Y XY满足 ρ ( X ) ≤ ρ ( Y ) \rho(X)\leq \rho(Y) ρ(X)ρ(Y)

    案例:AAPL

    历史模拟法

    历史模拟法计算AAPL公司的VaR,历史模拟法使用市场历史因子的变化来估计市场因子未来的变化,对市场因子的估计采用权值估计方法,根据市场因子的未来价格水平对头寸进行重新估值,计算出头寸的价值变化,将组合损益从小到大排序,得到损益分布,通过计算给定置信度下的分位数求出VaR. 这里计算了置信水平分别为95%和99%的VaR.
    hm

    历史模拟法python代码

    import pandas_datareader.data as web
    import datetime as dt
    import pandas as pd
    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as plt
    
    start=dt.datetime(2012, 1, 1)
    end=dt.datetime(2018, 12, 31)
    df=web.DataReader('AAPL', 'yahoo', start, end)
    
    # 对数收益率
    df['return']=np.log(df['Adj Close']/df['Adj Close'].shift(1))
    # 计算收益率的分位数
    # 5%分位数
    VaR5=np.percentile(df['return'].dropna(), 5)
    # 1%分位数
    VaR1=np.percentile(df['return'].dropna(), 1)
    
    def hm_demo():
        grey = 0.75, 0.75, 0.75
        fig=plt.figure(figsize=(8, 6))
        plt.hist(df['return'], bins=50, alpha=0.5, color=grey)
        plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')
        plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')
        plt.xlim([-0.1, 0.1])
        plt.ylim([0, 250])
        plt.legend()
        # plt.savefig('hm_var.png')
        plt.show()
    
    hm_demo()
    

    参数模型分析法

    分析法利用证券组合的价值函数与市场因子之间的近似关系,推断市场因子的统计分布,简化VaR计算.
    使用参数模型分析法需要进行数据预处理工作,在Matlab(R 2012a)中常用数据预处理函数如下

    % 计算股票样本的均值,标准差,相关性与beta
    % 价格转收益率
    tick_ret=tick2Ret(stockPrices, [], 'continuous')
    mu=mean(tick_ret) % 计算均值
    std=std(tick_ret) % 计算标准差
    mdd=maxdrawdown(tick_ret) % 计算最大回撤
    coef=corrcoef(tick_ret) % 相关系数矩阵
    

    tick2ret函数说明

    [RetSeries, RetIntervals]=tick2ret(TickSeries, TickTimes, Method)
    INPUT
    TickSeries: 价格序列
    TickTimes: 时间序列
    Method: 计算方法,continuous表示对数收益率计算log(x)-log(y);simple表示简单收益率计算(x-y)/y
    OUTPUT
    RetSeries: 收益率序列
    RetIntervals: 收益率对应的时间间隔
    

    maxdrawdown函数说明

    T日组合最大回撤计算接口为
    [MaxDD, MaxDDIndex]=maxdrawdown(Data, Format)
    INPUT
    Data: 组合每日总收益序列
    Format: 类别有 return(默认,收益率序列),arithmetic(算术布朗运动),geometric(几何布朗运动)
    OUTPUT
    MaxDD:最大回撤值
    MaxDDIndex:最大回撤值位置
    

    参数模型法计算VaR使用接口portvrisk,函数说明如下

    ValueAtRisk=portvrisk(PortReturn, PortRisk, RiskThreshold, PortValue)
    INPUT
    PortReturn:组合收益率
    PortRisk: 组合标准差
    RiskThreshold:置信度阈值,默认为5%
    PortValue:组合资产价值,默认为1
    OUTPUT
    ValueAtRisk:风险价值
    

    参数模型法计算程序如下

    pVar=portvrisk(mean(ret), std(ret), [0.01, 0.05], port_value);
    confidence=pVar/port_value
    

    非参数bootstrap

    对历史数据进行有放回的采样,计算每次采样的VaR,然后对所有采样结果求期望,设置采样容量为300,进行200轮采样的结果如下
    bt

    python非参数bootstrap代码

    def bootstrap_demo():
        ret=df['return'].dropna()
        # 有放回采样
        def sample(data, size):
            sample=np.random.choice(data, size, replace=True)
            VaR5=np.percentile(sample, 5)
            VaR1=np.percentile(sample, 1)
            return (VaR5, VaR1)
    
        sz, n=300, 200
        samples=np.array([sample(ret, sz) for _ in range(n)])
        VaR5, VaR1=np.mean(samples, axis=0)
        
        grey = 0.75, 0.75, 0.75
        fig=plt.figure(figsize=(8, 6))
        plt.hist(df['return'], bins=50, alpha=0.5, color=grey)
        plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')
        plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')
        plt.xlim([-0.1, 0.1])
        plt.ylim([0, 250])
        plt.legend()
        plt.savefig('bootstrap_var.png')
        plt.show()
    
    bootstrap_demo()
    

    Monte-Carlo模拟计算

    Monte-Carlo计算欧式期权价格可以见这篇博客.
    Monte-Carlo模拟的基本步骤是:
    1.选择市场因子变化的随机过程和分布,估计该过程的参数的相关参数.
    2.模拟市场因子的变化路径,建立对市场因为未来的预测
    3.对市场因子每个情景,利用公式计算价值和变化
    4.根据组合价值变化分布模拟结果,计算给定置信度下的VaR.
    设置股票价格符合几何布朗运动,即
    S t + 1 = S t exp ⁡ ( ( μ − σ 2 2 ) Δ t + σ ε Δ t ) S_{t+1}=S_t\exp((\mu-\frac{\sigma^2}{2})\Delta t+\sigma\varepsilon\sqrt{\Delta t}) St+1=Stexp((μ2σ2)Δt+σεΔt )
    其中 μ \mu μ为收益率均值, σ 2 \sigma^2 σ2为收益率方差, ε \varepsilon ε为从Gaussian分布中抽样出的随机值.
    计算 Δ t = 1 \Delta t=1 Δt=1日的VaR值
    mc

    python蒙特卡洛模拟计算代码

    def monte_carlo_demo():
        ret = df['return'].dropna()
        mu, sig = np.mean(ret), np.std(ret)
        def gbm(s0, T, n):
            dt=T/n
            price=s0
            for _ in range(n):
                eps=np.random.normal()
                s=price*np.exp((mu-sig**2/2)*dt+sig*eps*np.sqrt(dt))
                price=s
            return price
    
        sp=[]
        s0=1
        for _ in range(10000):
            sp.append(gbm(s0, 1, 100))
        sret=np.array(sp)/s0-1
        VaR1=np.percentile(sret, 1)
        VaR5=np.percentile(sret, 5)
        print(VaR1, VaR5)
        grey = 0.75, 0.75, 0.75
        fig=plt.figure(figsize=(8, 6))
        plt.hist(df['return'], bins=50, alpha=0.5, color=grey)
        plt.plot([VaR5, VaR5], [0, 100], 'b:', linewidth=2, label='5% VaR')
        plt.plot([VaR1, VaR1], [0, 100], 'r:', linewidth=2, label='1% VaR')
        plt.xlim([-0.1, 0.1])
        plt.ylim([0, 250])
        plt.legend()
        plt.savefig('monte-carlo_var.png')
        plt.show()
    
    monte_carlo_demo()
    

    k k k天的VaR可以根据公式
    V a R k = V a R 1 ∗ k VaR_k=VaR_1*\sqrt{k} VaRk=VaR1k
    计算,或者令程序中gbm参数T=k进行模拟计算.

    参考资料

    DCC-Garch VaR 量化小白H
    Copula模型估计组合VaR 量化小白H
    python金融实战之计算VaR
    Risk Analysis in Python
    量化投资以Matlab为工具 中国工信出版集团 李洋 郑志勇

    展开全文
  • var、let、const的区别

    万次阅读 多人点赞 2021-10-29 16:21:31
    var 关键词 1. var声明作用域 var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问 function test() { var message = "hello world"; // 局部变量 } test(); console.log(message); // 报错 函数test()...
  • var 、let 和 const 的区别

    千次阅读 多人点赞 2022-03-26 04:50:36
    var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var 允许在同一个作用域中重复...
  • let和const与var的区别

    万次阅读 多人点赞 2022-02-12 09:16:36
    目录 一、定义 二、let 三、const 四、代码演示 ...四、循环中let和var声明的循环变量的区别 ...4.2.1 var声明的循环变量 ...4.2.1 var声明的循环变量 ...let和const是ES6新增的声明变量的... var定义的变量,变量名称...
  • VaR 与 CVaR

    万次阅读 2018-12-24 17:48:24
    VaR, value at risk, 风险价值,表示金融产品在给定置信水平 α\alphaα 下的最小损失。用 XXX 表示该随机波动的金融产品, FX(x)F_X(x)FX​(x) 为其累计概率分布,则 VAR 的数学表示式为: VaRα(X)=inf⁡{t∣FX(t)...
  • jquery变量var的使用

    万次阅读 2018-11-11 08:24:26
    变量var的使用 js的变量没有类型 var $li = $('#' + file.id), $percent = $li.find('.progress span'); //console.log("percentage:", percentage); ...
  • C#中的var理解

    千次阅读 2022-03-17 01:08:10
    从 C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var。隐式类型本地变量为强类型,就像用户已经自行声明该类型,但编译器决定类型一样。i 的以下两个声明在功能上是等效的:v...
  • VAR模型一般几个变量

    千次阅读 2020-12-19 07:50:40
    请问关于VAR模型的滞后阶数怎么确定?滞后阶数越大,自由度就越小.一般根据AIC和SC取值最小准则来确定阶数.如果AIC和SC并不是同时取值最小,采用LR检验进行取舍.如果时序数据样本容量小,这时AIC和SC准则可能需要谨慎,...
  • var和let的区别

    千次阅读 2022-06-13 11:36:35
    var和let都用于声明变量,不同的是:1.let声明的变量不能重复声明2.let声明的变量不能变量提升:当使用var声明一个var变量时,该变量会被提升到作用域的顶端,但是赋值的部分不会提升。 在声明a的语句之前就可以...
  • VaR如何计算?VaR计算方法

    万次阅读 2020-04-23 22:41:10
    VaR的计算方法通常有三大类:分析法、历史模拟法和蒙特卡罗模拟法,这3种方法从不同角度来分析资产的风险价值。后面的案例中将对股指期货交易中金的最大损失值进行计算,即对金的VaR值进行估计。 1、分析法 ...
  • /var/目录详解

    千次阅读 2018-11-20 15:16:59
    var目录 /var 包括系统运行时要改变的数据。其中包括每个系统是特定的,即不能够与其他计算机共享的目录,如/var/log,/var/lock,/var/run。有些目录还是可以与其他系统共享,如/var/mail, /var/cache/man, /var/...
  • JavaScript中let和var区别详解

    千次阅读 多人点赞 2020-07-06 15:10:05
    想要了解var(ES5)和let(ES6)区别,首先就要了解ES5下JS的变量提升 一、变量提升(声) 当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var/...
  • Python金融实战之计算VaR

    万次阅读 多人点赞 2020-02-24 10:37:05
    一、历史模拟法计算VaR 1.VaR 定义:Value at Risk,在一定概率水平(置信度)下,某一金融资产或证券组合价值在未来特定时期内的最大可能损失。一日 5% VaR 可以理解为一天发生损失超过VaR的概率小于等于5%。 2....
  • 看完结果之后觉得很神奇是不是,为什么和我学的其他语言不一样呢,我使用set分别为var1和var2赋了值,但是输出的时候居然不是数字而是变量名,其实这就引出了之后%var%这种用法,接着往下看。 %var% 在批处理中...
  • VAR模型及格兰杰因果检验——基于tushare平台的数据 数据来源 tushare平台的数据库,网站如下tushare大数据社区 该数据平台拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本...
  • 关于tkinter StringVar()

    千次阅读 2021-03-17 02:29:21
    这里是代码:-在from tkinter import * def x(): a1.set("") a.withdraw() b.deiconify() def y(): b1.set("") b.withdraw() a.deiconify() a=Tk() a.withdraw() a1=StringVar() b1=StringVar() Entry(a,...
  • Java中var是Java10版本新出的特性,用它来定义局部变量。 使用var 定义变量的语法: var 变量名 = 初始值; 如果代码: var a = 20; var a =8.9; 这样的代码会报错 显示int到double的转换; Java是强类型...
  • TVP-VAR:时变参数向量自回归模型

    千次阅读 2021-08-01 16:42:47
    1. VAR 模型的介绍 2. TVP-VAR 基本原理 3. matlab 命令 4. TVP-VAR 模型的应用 4.1 模型估计结果 4.2 等间距脉冲响应结果 4.3 分时点脉冲响应 5. 参考文献 1. VAR 模型的介绍 我们在利用计量经济模型做...
  • Eviews实现var模型

    万次阅读 2021-04-22 14:50:18
    首先打开数据,进入var: 或者 调整参数: 其中: lag表示滞后阶数,判断标准为AIC和SC最小时最合适。 单位元检验,查看表和图: 当var模型所有根模的倒数都小于1,即都在单位圆内,则该模型时稳定的。 由此确定...
  • python3函数里var是什么意思?

    千次阅读 2020-12-30 07:55:35
    相信绝大部分人看到这个标题,肯定内心和标题是一个感受吧,什么是varVar是什么意思?怎么用?等等等,大家先别急,var不是一个生僻的函数,甚至说,这是一个会经常见到的函数,它可以跟很多函数搭配使用,甚至在...
  • C# 数据类型(var

    千次阅读 热门讨论 2021-03-18 14:55:55
    前两天自己写了一下dynamic这个函数的作用,而那次通过了解dynamic这个函数还知道了var这个函数,所以今天就特地看了一下var这个函数的一些作用以及要注意的事项 首先是这个函数是它的作用,它可以代替任何类型的...
  • public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5); var1:要修改的对象起始地址 如:0x00000111 var2:需要修改的具体内存地址 如100 。0x0000011+100 = 0x0000111...
  • var模型eviews操作步骤

    万次阅读 多人点赞 2020-04-30 14:13:49
    VAR模型eviews操作步骤 一、平稳性检验 Ex的单位根检验平稳性,截距项、趋势项与两者都没有都要做完,三个均拒绝,则认为其不平稳,先截距与趋势项。如下图 做完后发现不平稳,做一阶差分,此时三项中只要有一项...
  • TK-StringVar

    万次阅读 2020-03-07 23:45:09
    1. StringVar属于Tkinter下的对象。 2、StringVar的作用 在使用界面编程的时候,有些时候是需要跟踪变量的值的变化,以保证值的变更随时可以显示在界面上。由于python无法做到这一点,所以使用了tcl的相应的对象,...
  • 窄范围优先于广范围 二、vars定义变量 1、playbook中的变量(vars和vars_files) 方式一 在playbook开头的vars块中: --- - host:all vars: user:student home:/home/student 也可以定义多个变量 vars: testvar1: ...
  • Linux 系统 /var/log/journal/ 垃圾日志清理

    万次阅读 多人点赞 2019-04-26 09:02:49
    命令查看,发现/var/log/journal日志文件占用了近3G空间,每个日志文件体积高达8-128M,这些日志文件记录了很长时间以来的systemd情况,毫无价值,用 journalctl --vacuum-size=10M 命令将其清理之后,腾出了2.7G的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,489,492
精华内容 2,195,796
关键字:

var