下次调用该函数时,如何使用该函数计算出的最小值和最大值?

问题描述

我是excel VBA的新手,请多多包涵。

我已经创建了一个函数

  1. 以(价格为货币,开始时间为字符串,止损为货币)作为输入值。
  2. 获取特定交易品种的价格并计算15分钟的最高价,最低价,开盘价,收盘价。
  3. 根据进入价格波动的计算值返回进入策略。
  4. 根据进入策略和追踪止损(根据计算得出的入场和止损计算)返回退出策略。

更新: 谢谢您的帮助。我发现该函数正在每次调用时重置最小-最大值。我该如何克服呢?我尝试使用do-while循环,但它使过程过载。

这是我使用的代码。请提出任何改进建议

Option Explicit
Function St(P As Currency,start As String,SL As Currency,Mclose As String) As String
On Error GoTo eh
Dim EntExt As String,op_15 As Currency,cl_15 As Currency,Tmax As Currency,Tmin As Currency,TSL As Currency
Dim Response As Variant

Application.Volatile

        If TimeValue(Now) <= TimeValue(start) Then
            min = P
            max = P
            op_15 = P
            Response = MsgBox("max=" & max & "-----min=" & min,vbOKCancel)
            If Response = vbCancel Then
                Exit Function
            End If
    
        ElseIf TimeValue(Now) <= TimeValue(start) + TimeValue("00:02:00") Then
            cl_15 = P
            If P > max Then
                max = P
            ElseIf P < min Then
                min = P
            End If
            Tmax = max
            Tmin = min
       
    
        ElseIf TimeValue(Now) <= TimeValue(start) + TimeValue("00:04:00") Then
            If P > Tmax Then
                Tmax = P
                Response = MsgBox("Tmax=" & Tmax,vbOKCancel)
                If Response = vbCancel Then
                    Exit Function
                End If
            ElseIf P < Tmin Then
                Tmin = P
                Response = MsgBox("Tmin=" & Tmin,vbOKCancel)
                If Response = vbCancel Then
                    Exit Function
                End If

            End If
            EntExt = EntF(P,start,max,min)

                    
        ElseIf TimeValue(Now) > TimeValue(start) + TimeValue("00:04:00") And TimeValue(Now) < TimeValue(Mclose) Then
            If EntExt = "LE" Then
                'If long exit then exits after price drops below stop loss
                    TSL = Tmax - SL
            ElseIf EntExt = "SE" Then
                'If short exit then exits after price rises above stop loss
                    TSL = Tmin + SL
            Else:
                ' if price does not go above or below intial high low,then no entry is done
                    TSL = 0
            End If
        
            EntExt = ExtF(P,Tmax,Tmin,EntExt,TSL)
           
            If EntExt = "LX" Or EntExt = "SX" Then
                Exit Function
            End If
        
        End If
    
    St = EntExt
    
    St = St(P,SL,Mclose)
    
    If TimeValue(Now) >= TimeValue(Mclose) Then
            Exit Function
        
Exit Function
eh:
On Error GoTo 0
   'MsgBox "Error # " & Str(Err.Number) & " was generated by " & Err.source & Chr(13) & Err.Description _,"Error",Err.HelpFile,Err.HelpContext
End Function

Function EntF(P As Currency,max As Currency,min As Currency) As String
On Error GoTo eh
Dim Response As Variant
    If TimeValue(Now) <= TimeValue(start) + TimeValue("00:04:00") Then
   'devising an entry strategy for the next 15 min
        If P > max Then
            EntF = "LE"
            Response = MsgBox("price = " & P & "  max = " & max)
            If Response = vbCancel Then
                Exit Function
            End If
        ElseIf P < min Then
            EntF = "SE"
            Response = MsgBox("price = " & P & "  min = " & min)
            If Response = vbCancel Then
                Exit Function
            End If
        Else:
            EntF = "dont"
        End If
        
    End If
    
Exit Function
eh:
On Error GoTo 0
   'MsgBox "Error # " & Str(Err.Number) & " was generated by " & Err.source & Chr(13) & Err.Description _,Err.HelpContext
   End Function
Function ExtF(P As Currency,Entry As String,TSL As Currency) As String
On Error GoTo eh
    'MsgBox "EXIT"
    'devising an exit strategy for the given entry
    '
        If Entry = "LE" Then
            'If long exit then exits after price drops below stop loss

                If P < TSL Then
                    ExtF = "SX"
                Else:
                ' else exit at the end of market,hence profit
                    ExtF = "Profit"
                End If
        ElseIf Entry = "SE" Then
            'If short exit then exits after price rises above stop loss

                If P > TSL Then
                    ExtF = "LX"
                Else:
                'else exit at the end of market adn gains profit
                'provided quantity of stocks sold at entry = quantity of stocks bought by the end of market
                    ExtF = "Profit"
                End If
        Else:
            ' if price does not go above or below intial high low,then no entry is done

            ExtF = "NO entry done"
        End If
Exit Function
eh:
On Error GoTo 0
   'MsgBox "Error # " & Str(Err.Number) & " was generated by " & Err.source & Chr(13) & Err.Description _,Err.HelpContext
   
End Function

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)