问题描述
我是excel VBA的新手,请多多包涵。
- 以(价格为货币,开始时间为字符串,止损为货币)作为输入值。
- 获取特定交易品种的价格并计算15分钟的最高价,最低价,开盘价,收盘价。
- 根据进入价格波动的计算值返回进入策略。
- 根据进入策略和追踪止损(根据计算得出的入场和止损计算)返回退出策略。
更新: 谢谢您的帮助。我发现该函数正在每次调用时重置最小-最大值。我该如何克服呢?我尝试使用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 (将#修改为@)