- Code: Select all
If (List1.Cells(2, 6) = "Suspended" And List1.Cells(1, 28) > 100) Or (List1.Cells(2, 6) = "Closed") Then
List1.Cells(2, 17) = "-1"
End If
Any help appreciated!
Moderator: 2020vision
by josthkko » Tue Jun 08, 2010 8:20 pm
If (List1.Cells(2, 6) = "Suspended" And List1.Cells(1, 28) > 100) Or (List1.Cells(2, 6) = "Closed") Then
List1.Cells(2, 17) = "-1"
End If
by osknows » Tue Jun 08, 2010 9:57 pm
Option Explicit
Dim nextracetrigger As Integer
Dim lastrace As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count = 16 Then
Application.EnableEvents = False
With ThisWorkbook.Sheets(Target.Worksheet.Name)
'forward quick pick race on after race ended
If .Range("E2").Value = "In Play" And .Range("F2").Value = "Suspended" And _
UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 0 Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
'forward quick pick race when market closed
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And _
nextracetrigger = 0 Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
'update balance when market closed
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And _
nextracetrigger = 1 Then
nextracetrigger = 2
.Range("Q2").Value = -6
'reset refresh to 1 sec if market still closed (i.e. last item in pick list)
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And _
nextracetrigger = 2 Then
nextracetrigger = 2
.Range("Q2").Value = 1
End If
'refresh trigger on market change
If lastrace <> .Range("A1").Value Then
nextracetrigger = 0
End If
End With
Application.EnableEvents = True
End If
End Sub
by mak » Wed Jun 09, 2010 8:43 am
by osknows » Wed Jun 09, 2010 1:18 pm
Option Explicit
Dim dtStart As Long
Dim dtEnd As Long
Dim refreshTimes As Collection
Dim elapsedTime As Long
Dim totRefresh As Long
Dim refreshed, triggerQuickPickListReload, triggerFirstMarketSelect, quickpicklist_trigger As Boolean
Dim refreshCount As Long
Dim strArray, slicestrArray, rng As Range
Dim holdingarray(), BA_Changes() As Variant
Dim i, nextracetrigger, slicestrArray2 As Integer
Dim lastrace As String
Const avgCount As Integer = 10
Const inplayrefresh As Double = 0.2
Private Sub Worksheet_Change(ByVal Target As Range)
Dim start_window, end_window As Date
If Target.Columns.Count = 16 Then
If Not refreshed Then
refreshed = True
dtStart = GetTickCount
Set refreshTimes = New Collection
refreshCount = 0
Else
dtEnd = GetTickCount
refreshCount = refreshCount + 1
elapsedTime = dtEnd - dtStart
refreshTimes.Add Str(elapsedTime), Str(refreshCount)
totRefresh = totRefresh + elapsedTime
If refreshCount > avgCount Then
totRefresh = totRefresh - Val(refreshTimes(Str(refreshCount - avgCount)))
refreshTimes.Remove (Str(refreshCount - avgCount))
Application.EnableEvents = False
ThisWorkbook.Sheets(Target.Worksheet.Name).Cells(2, 21).Value = totRefresh / avgCount
Application.EnableEvents = True
End If
dtStart = dtEnd
End If
Application.EnableEvents = False
With ThisWorkbook.Sheets(Target.Worksheet.Name)
.Range("J2").Value = "U" 'updates balance and exposure
'''''Garys timer inPlay
'' http://www.gruss-software.co.uk/forum/viewtopic.php?t=2404&highlight=cells
If .Cells(2, 5) = "In Play" Then
If .Cells(1, 27) = "" Then .Cells(1, 27) = .Cells(2, 3)
If .Cells(1, 27) <> "" Then .Cells(1, 28) = DateDiff("s", .Cells(1, 27), .Cells(2, 3))
End If
If .Cells(2, 5) <> "In Play" And .Cells(2, 6) <> "Suspended" Then
.Cells(1, 27) = ""
.Cells(1, 28) = ""
End If
'update quickpicklist once between set time;
'set start_window with TimeValue("08:00:00")
'and end_window TimeValue("08:01:00")
'gives a window to update if the refresh rate is slower than 1 second. Will only update once during window
start_window = TimeValue("21:20:00")
end_window = TimeValue("21:23:00")
If TimeValue(Now()) >= start_window And TimeValue(Now()) <= end_window And quickpicklist_trigger = False Then
quickpicklist_trigger = True
triggerQuickPickListReload = True
ElseIf TimeValue(Now()) < start_window Or TimeValue(Now()) > end_window Then
quickpicklist_trigger = False
End If
If triggerQuickPickListReload Then
triggerQuickPickListReload = False
.Range("Q2").Value = -3
triggerFirstMarketSelect = True
Else
If triggerFirstMarketSelect Then
triggerFirstMarketSelect = False
.Range("Q2").Value = -5
End If
End If
'forward quick pick race on after race ended
If .Range("E2").Value = "In Play" And .Range("F2").Value = "Suspended" And UCase(.Range("Q1").Value) = "Y" And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect And nextracetrigger = 0 Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 0 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 1 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 2
.Range("Q2").Value = -6
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 2 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 2
.Range("Q2").Value = 1
End If
If lastrace <> .Range("A1").Value And Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 0
.Range("Q2").FormulaR1C1 = "=IF(OR(RC[-11]=""Suspended"",RC[-11]=""Closed""),1,IF(ISERROR(IF(AND(HOUR(RC[-13])=0,MINUTE(RC[-13])<=1)," & inplayrefresh & ",1))," & inplayrefresh & ",IF(AND(HOUR(RC[-13])=0,MINUTE(RC[-13])<=1)," & inplayrefresh & ",1)))"
End If
Set rng = .Range("BA5:BF55")
strArray = rng
BA_Changes = Target
If .Range("E2") = "In Play" And .Range("F2") <> "Suspended" Then
For i = 5 To UBound(BA_Changes)
'track lowest lay odds
strArray(i - 4, 6) = BA_Changes(i, 8) - strArray(i - 4, 5)
strArray(i - 4, 5) = BA_Changes(i, 8)
Select Case strArray(i - 4, 4)
Case "", Is > BA_Changes(i, 8)
If BA_Changes(i, 8) <> 0 Then
strArray(i - 4, 4) = BA_Changes(i, 8)
Else
strArray(i - 4, 4) = 1001
End If
End Select
'track lowest back odds
strArray(i - 4, 3) = BA_Changes(i, 6) - strArray(i - 4, 2)
strArray(i - 4, 2) = BA_Changes(i, 6)
Select Case strArray(i - 4, 1)
Case "", Is > BA_Changes(i, 6)
If BA_Changes(i, 6) <> 0 Then
strArray(i - 4, 1) = BA_Changes(i, 6)
Else
strArray(i - 4, 1) = 1001
End If
End Select
Next i
Else
For i = 1 To UBound(strArray)
strArray(i, 1) = 1001
strArray(i, 2) = ""
strArray(i, 3) = ""
strArray(i, 4) = 1001
strArray(i, 5) = ""
strArray(i, 6) = ""
Next i
End If
.Range("BA5:BF55").Value = strArray
End With
Application.EnableEvents = True
End If
End Sub
Public Declare Function GetTickCount Lib "kernel32" () As Long
by mak » Wed Jun 09, 2010 1:44 pm
by mak » Wed Jun 23, 2010 1:40 pm
osknows wrote:Hi Mak,
Some of that code looks familiarHope your well.
Something like this should do what you need. It's untested with BA but should be close
- Code: Select all
Option Explicit
Dim dtStart As Long
Dim dtEnd As Long
Dim refreshTimes As Collection
Dim elapsedTime As Long
Dim totRefresh As Long
Dim refreshed, triggerQuickPickListReload, triggerFirstMarketSelect, quickpicklist_trigger As Boolean
Dim refreshCount As Long
Dim strArray, slicestrArray, rng As Range
Dim holdingarray(), BA_Changes() As Variant
Dim i, nextracetrigger, slicestrArray2 As Integer
Dim lastrace As String
Const avgCount As Integer = 10
Const inplayrefresh As Double = 0.2
Private Sub Worksheet_Change(ByVal Target As Range)
Dim start_window, end_window As Date
If Target.Columns.Count = 16 Then
If Not refreshed Then
refreshed = True
dtStart = GetTickCount
Set refreshTimes = New Collection
refreshCount = 0
Else
dtEnd = GetTickCount
refreshCount = refreshCount + 1
elapsedTime = dtEnd - dtStart
refreshTimes.Add Str(elapsedTime), Str(refreshCount)
totRefresh = totRefresh + elapsedTime
If refreshCount > avgCount Then
totRefresh = totRefresh - Val(refreshTimes(Str(refreshCount - avgCount)))
refreshTimes.Remove (Str(refreshCount - avgCount))
Application.EnableEvents = False
ThisWorkbook.Sheets(Target.Worksheet.Name).Cells(2, 21).Value = totRefresh / avgCount
Application.EnableEvents = True
End If
dtStart = dtEnd
End If
Application.EnableEvents = False
With ThisWorkbook.Sheets(Target.Worksheet.Name)
.Range("J2").Value = "U" 'updates balance and exposure
'''''Garys timer inPlay
'' http://www.gruss-software.co.uk/forum/viewtopic.php?t=2404&highlight=cells
If .Cells(2, 5) = "In Play" Then
If .Cells(1, 27) = "" Then .Cells(1, 27) = .Cells(2, 3)
If .Cells(1, 27) <> "" Then .Cells(1, 28) = DateDiff("s", .Cells(1, 27), .Cells(2, 3))
End If
If .Cells(2, 5) <> "In Play" And .Cells(2, 6) <> "Suspended" Then
.Cells(1, 27) = ""
.Cells(1, 28) = ""
End If
'update quickpicklist once between set time;
'set start_window with TimeValue("08:00:00")
'and end_window TimeValue("08:01:00")
'gives a window to update if the refresh rate is slower than 1 second. Will only update once during window
start_window = TimeValue("21:20:00")
end_window = TimeValue("21:23:00")
If TimeValue(Now()) >= start_window And TimeValue(Now()) <= end_window And quickpicklist_trigger = False Then
quickpicklist_trigger = True
triggerQuickPickListReload = True
ElseIf TimeValue(Now()) < start_window Or TimeValue(Now()) > end_window Then
quickpicklist_trigger = False
End If
If triggerQuickPickListReload Then
triggerQuickPickListReload = False
.Range("Q2").Value = -3
triggerFirstMarketSelect = True
Else
If triggerFirstMarketSelect Then
triggerFirstMarketSelect = False
.Range("Q2").Value = -5
End If
End If
'forward quick pick race on after race ended
If .Range("E2").Value = "In Play" And .Range("F2").Value = "Suspended" And UCase(.Range("Q1").Value) = "Y" And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect And nextracetrigger = 0 Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 0 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 1
lastrace = .Range("A1").Value
.Range("Q2").Value = -1
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 1 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 2
.Range("Q2").Value = -6
ElseIf .Range("F2").Value = "Closed" And UCase(.Range("Q1").Value) = "Y" And nextracetrigger = 2 And _
Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 2
.Range("Q2").Value = 1
End If
If lastrace <> .Range("A1").Value And Not triggerQuickPickListReload And Not triggerFirstMarketSelect Then
nextracetrigger = 0
.Range("Q2").FormulaR1C1 = "=IF(OR(RC[-11]=""Suspended"",RC[-11]=""Closed""),1,IF(ISERROR(IF(AND(HOUR(RC[-13])=0,MINUTE(RC[-13])<=1)," & inplayrefresh & ",1))," & inplayrefresh & ",IF(AND(HOUR(RC[-13])=0,MINUTE(RC[-13])<=1)," & inplayrefresh & ",1)))"
End If
Set rng = .Range("BA5:BF55")
strArray = rng
BA_Changes = Target
If .Range("E2") = "In Play" And .Range("F2") <> "Suspended" Then
For i = 5 To UBound(BA_Changes)
'track lowest lay odds
strArray(i - 4, 6) = BA_Changes(i, 8) - strArray(i - 4, 5)
strArray(i - 4, 5) = BA_Changes(i, 8)
Select Case strArray(i - 4, 4)
Case "", Is > BA_Changes(i, 8)
If BA_Changes(i, 8) <> 0 Then
strArray(i - 4, 4) = BA_Changes(i, 8)
Else
strArray(i - 4, 4) = 1001
End If
End Select
'track lowest back odds
strArray(i - 4, 3) = BA_Changes(i, 6) - strArray(i - 4, 2)
strArray(i - 4, 2) = BA_Changes(i, 6)
Select Case strArray(i - 4, 1)
Case "", Is > BA_Changes(i, 6)
If BA_Changes(i, 6) <> 0 Then
strArray(i - 4, 1) = BA_Changes(i, 6)
Else
strArray(i - 4, 1) = 1001
End If
End Select
Next i
Else
For i = 1 To UBound(strArray)
strArray(i, 1) = 1001
strArray(i, 2) = ""
strArray(i, 3) = ""
strArray(i, 4) = 1001
strArray(i, 5) = ""
strArray(i, 6) = ""
Next i
End If
.Range("BA5:BF55").Value = strArray
End With
Application.EnableEvents = True
End If
End Sub
And this goes in a MODULE
- Code: Select all
Public Declare Function GetTickCount Lib "kernel32" () As Long
few notes
Inplay refresh rate is set using Const inplayrefresh As Double = 0.2
The quickpicklist will update once only between whatever is put into
start_window = TimeValue("08:00:00")
end_window = TimeValue("08:01:00")
I've created a 'window' as this is run from the worksheet_change event where a slow refresh rate could miss a single time. The whole thing could be fired using Application.Ontime but this gives an alternative method
I've also amended the track lowest lay odds which now include track lowestback odds. These are output to columns BA5:BF55, change if required
by osknows » Wed Jun 23, 2010 2:17 pm
by josthkko » Sun Jul 04, 2010 3:15 pm
by milfor » Sun Jul 04, 2010 3:30 pm
by josthkko » Sun Jul 04, 2010 5:35 pm
The strength of Gruss Software is that it’s been designed by one of you, a frustrated sports punter, and then developed by listening to dozens of like-minded enthusiasts.
Gruss is owned and run by brothers Gary and Mark Russell. Gary discovered Betfair in 2004 and soon realised that using bespoke software to place bets was much more efficient than merely placing them through the website.
Gary built his own software and then enhanced its features after trialling it through other Betfair users and reacting to their improvement ideas, something that still happens today.
He started making a small monthly charge so he could work on it full-time and then recruited Mark to help develop the products and Gruss Software was born.
We think it’s the best of its kind and so do a lot of our customers. But you can never stand still in this game and we’ll continue to improve the software if any more great ideas emerge.