#1 OFFLINE
Добавлено 10 February 2012 - 00:37
#2 Гость_oOo_*
Добавлено 10 February 2012 - 10:26
forum.bdp.betfair.com/showthread.php?t=112
А все остальные вопросы по NET
forum.bdp.betfair.com/forumdisplay.php?f=4
Отредактировано oOo, 10 February 2012 - 10:27.
#3 OFFLINE
Добавлено 10 February 2012 - 12:01
oOo, on 10 February 2012 - 10:26, сказал:
forum.bdp.betfair.com/showthread.php?t=112
А все остальные вопросы по NET
forum.bdp.betfair.com/forumdisplay.php?f=4
#4 OFFLINE
Добавлено 10 February 2012 - 12:14
Поиск линейного графика на рынках скачки Betfair.
- Работа с Excel
- На первой странице открываем рынок и заносим id рынка, id лошади ,коф и суммы сматченные на каждую лошадь.
- По max сматченой сумме ищем лидера на этом рынке
- Проверяем на второй странице есть ли такой лидер
- Если есть то проверяем сматченую сумму
- Если она не совпадает с новой суммой (т.е. была новая ставка) то добавляем коф новые и новую сумму сматченую
- Если она совпадает с новой суммой то (т.е. новых ставок не было), тогда очищаем первую страницу и идем за следующим рынком.
- Если такого лидера на второй странице нет тогда переносим лидера и его коф и сматченую сумму на новую строку с указанием id рынка, id лошади
- В пределах указанного отклонения считаем сколько раз уже были эти значения и заносим их в ячейку по строке.
- После прохода всех рынков скачек сортируем по убыванию вторую страницу по столбцу, где записано количество раз близких значений.
- Получаем график по id рынка и id лошади.
#5 OFFLINE
Добавлено 10 February 2012 - 14:39
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler Application.Idle, AddressOf FlushMemory
End Sub
Private Sub FlushMemory()
If System.Environment.OSVersion.Platform = PlatformID.Win32NT Then
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1)
End If
End Sub
<DllImport("kernel32.dll")> _
Public Shared Function SetProcessWorkingSetSize(ByVal handle As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Boolean
End Function
При обьявлении Excel то же используется
Private Exl As Excel.Application
VS пишет ошибка
Application", импортированный из пространств имен или типов "Microsoft.Office.Interop.Excel, System.Windows.Forms", является неоднозначным.
Как исправить такую ошибку не нашел.
Кто нибудь сможет помочь?
Отредактировано vlad56, 10 February 2012 - 14:40.
#6 Гость_buk_*
Добавлено 10 February 2012 - 16:44
#7 OFFLINE
Добавлено 10 February 2012 - 17:04
buk, on 10 February 2012 - 16:44, сказал:
Всем привет!
Есть у меня такая функция в своем боте. В параметрах функции задается эталонный график(с которым сравнивать) и график для сравнения., а функция возвращает процент "схожести".Код функции скинуть не могу она уникальна, но подскажу алгоритм. Ничего сложного в нем нет.
Грузишь график (код в туториалах), тот который тебе нужен.(один или несколько) Берешь его за основу и сохраняешь изображение как эталон в папке с программой.
Далее функция, которая будет сравнивать:
- Загружаешь эталон в битовый массив #1
- График который нужно сравнить с биржи тоже загружаешь в битовый массив #2.
- Далее пробегаешься двумя циклами по х и y картинки по пикселям и получаешь цвет пикселя. Если цвет красный - сохраняешь его координаты в темповом (временном)двухмерном массиве ...
- Как циклы закончат работу у тебя будет массив с координатами точек графика. По ним ты можешь построить свой график идентичный биржи, сравнивать или даже транспонировать)..
- Далее получаешь такой же массив для второго графика, который требуется сравнить.
- Потом сравниваешь два массива одинаковой размерности и получаешь процент точности.
На скрине два одинаковых графика, но один по кэфу 2,75 и выше, а второй по кэфу 2,25 и выше:
Безымянный.png 30.93K 1 Количество загрузок
Поэтому тебе нужно сравнивать только "более заполненную" область.
Метод не быстрый, но самый простой и для таких изображений как график подходит идеально. На современных компах обработка будет занимать доли секунды. Все графические редакторы, в которых можно обрабатывать фото фильтрами, работают по такому же принципу. Например, получают изображение в массив пикселей, затем делают сдвиг и получается эффект blur (размытие).
Сама задача очень интересная для программиста и решаема.
#8 OFFLINE
Добавлено 10 February 2012 - 17:22
vlad56, on 10 February 2012 - 14:39, сказал:
Private Exl As Excel.Application
Как исправить такую ошибку не нашел.
Кто нибудь сможет помочь?
Для начала сделай ссылку на объектную библиотеку Microsoft Office Excel = Microsoft Office Excel X.X Object Library. Если офис не установлен или нужна совместимость с ранними офисами - сделай ссылку на соответствующую библиотеку PIA
Далее, в форме или в модуле импортируй пространства имен:
Imports Microsoft.Office.Interop
Далее код для чтения и записи в ячейку:
Dim exl As New Excel.Application Dim exlSheet As Excel.Worksheet exl.Workbooks.Open(Application.StartupPath & "\Шаблон11001.xlt") 'exl.Workbooks.Add() exl.Visible = true exlSheet = exl.Workbooks(1).Worksheets(1) 'Переходим к первому листу exlSheet.Range("F6").Value = "Записываем значение" Dim str as String str = exlSheet.Range("F6").Value 'Читаем значение
Зачем тебе excel? Храни все в памяти своей программы.
Здесь очень много примеров как по таблицам, так и по работе с изображениями
www.java2s.com/Tutorial/VB/CatalogVB.htm
#9 OFFLINE
Добавлено 10 February 2012 - 18:59
А Excel для хранения значений Lay(0) и Back(0) для долгого процесса сравнения их с друг другом по величине и по времени.
Ну это все сырое и не отработанное. Мысли вслух.
А вот:
Jericho, on 10 February 2012 - 17:04, сказал:
- Потом сравниваешь два массива одинаковой размерности и получаешь процент точности.
Еще раз спасибо.
А с Excel я уже сталкивался. Но только на VB 6.
Отредактировано vlad56, 10 February 2012 - 19:04.
#10 OFFLINE
Добавлено 10 February 2012 - 19:16
vlad56, on 10 February 2012 - 18:59, сказал:
По массивам примеры - java2s.com/Code/VB/Data-Structure/CatalogData-Structure.htm
На русском - codenet.ru/progr/vbasic/Dot-Net/Arrays.php
Отредактировано Jericho, 10 February 2012 - 19:18.
#11 OFFLINE
Добавлено 13 February 2012 - 06:21
vlad56, on 10 February 2012 - 12:14, сказал:
Поиск линейного графика на рынках скачки Betfair.
- Работа с Excel
- На первой странице открываем рынок и заносим id рынка, id лошади ,коф и суммы сматченные на каждую лошадь.
- По max сматченой сумме ищем лидера на этом рынке
- Проверяем на второй странице есть ли такой лидер
- Если есть то проверяем сматченую сумму
- Если она не совпадает с новой суммой (т.е. была новая ставка) то добавляем коф новые и новую сумму сматченую
- Если она совпадает с новой суммой то (т.е. новых ставок не было), тогда очищаем первую страницу и идем за следующим рынком.
- Если такого лидера на второй странице нет тогда переносим лидера и его коф и сматченую сумму на новую строку с указанием id рынка, id лошади
- В пределах указанного отклонения считаем сколько раз уже были эти значения и заносим их в ячейку по строке.
- После прохода всех рынков скачек сортируем по убыванию вторую страницу по столбцу, где записано количество раз близких значений.
- Получаем график по id рынка и id лошади.
Из математики. Линейная функция описывается формулой y = k*x + b;
Мы можем получать значения Lay(0) и Back(0).
Ттр.n =(Lay(0) +Back(0).)/2 это будет точка тренда, или же точка нашего графика.
(Ттр.n - Tтр.(n-1)) > 0 если больше 0 график подрос. Знак при коф k положителен.
(Ттр.n - Tтр.(n-1)) = 0 если равно 0 график горизонтальный. Знак при коф k положителен.
(Ттр.n - Tтр.(n-1)) < 0 если меньше 0 график пошел вниз. Знак при коф k отрицателен.
Ттр.n/Tтр.(n-1) это отношение показывает во сколько раз изменился график.
Теперь суммируем положительные и отрицательные значения (Ттр.n - Tтр.(n-1)) каждое в свой столбик. После, сравнивая по абсолютной величине, можно говорить график возрастающий, убывающий или топчется на месте.
Если складывать разы положительные, отрицательные и нулевые, то при значительном преобладании суммы нулевых разов, допустим при 90% и при равенстве сумм положительных и отрицательных значений, можно делать вывод что график ближе к горизонтальному. Что и требуется нам найти.
Теперь записать все это в виде программы, и программа по текущим коф найдет лошадь или же строчку с нужным нам графиком.
Жду критики и ваших предложений по улучшению алгоритма поиска нужного нам графика.
Отредактировано vlad56, 13 February 2012 - 06:22.
#12 OFFLINE
Добавлено 13 February 2012 - 12:06
#13 OFFLINE
Добавлено 13 February 2012 - 12:24
Jericho, on 13 February 2012 - 12:06, сказал:
Для игры до In Play мне нужен текущий на настоящий момент график.
#14 OFFLINE
Добавлено 13 February 2012 - 13:55
Dim Sheet As Worksheet = e.UserState.Param
Class UserState
Property Param As Object
Sub New(ByVal Value As Object)
Param = Value
End Sub
End Class
Получаю ошибку
Не удалось привести тип объекта "System.Windows.Forms.TabPage" к типу "Microsoft.Office.Interop.Excel.Worksheet".
Кто поможет как избавится от ошибки?
#15 OFFLINE
Добавлено 13 February 2012 - 18:37
vlad56, on 13 February 2012 - 13:55, сказал:
Dim Sheet As Worksheet = e.UserState.Param
Кто поможет как избавится от ошибки?
Ранее в 31 и 32 шагах автор использовал TabControl для отображения рынков... А в шаге 34 уже переделал под excel.
Dim Sheet As Worksheet - у тебя тип Microsoft.Office.Interop.Excel.Worksheet, а вот e.UserState.Param у тебя так и остался типа TabPage из TabControl. Соответственно приравнять два разных типа данных он и не может. Эта как в integer строку сувать...
Где-то ранее в коде ошибка... ищи место где определяется e.. должно быть что-то вроде ByVal e As BFUK.getMarketPricesCompressedCompletedEventArgs
#16 OFFLINE
Добавлено 14 February 2012 - 05:12
Jericho, on 13 February 2012 - 18:37, сказал:
Вот в имени процедуры Private Sub BetFairUK_getMarketPricesCompressedCompleted(ByVal sender As Object, ByVal e As BFUK.getMarketPricesCompressedCompletedEventArgs) Handles BetFairUK.getMarketPricesCompressedCompleted
идет определение е.
А где об этом е. да и про e.UserState.Param можно было бы прочитать?
#17 OFFLINE
Добавлено 14 February 2012 - 06:42
Private Sub PriceTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PriceTimer.Tick
Try
With Exl
If .ActiveSheet IsNot Nothing Then
Dim Req As New BFUK.GetMarketPricesCompressedReq
Req.header = oHeaderUK()
Req.marketId = .ActiveSheet.Range(rMarketId).Value 'The marketId on the current worksheet
BetFairUK.getMarketPricesCompressedAsync(Req, New UserState(.ActiveSheet)) 'Call the API to get prices
End If
End With
Catch
End Try
End Sub
это условие не пропускает дапьше If .ActiveSheet IsNot Nothing Then и нет передачи ActiveSheet в качестве параметра UserState.
BetFairUK.getMarketPricesCompressedAsync(Req, New UserState(.ActiveSheet)). Еще раз большое спасибо.
Но возникает следующий вопрос. Если Excel загружен, страничка загружена то почему тогда не True эта ActiveSheet IsNot Nothing? И как сделать ее true?
Отредактировано vlad56, 14 February 2012 - 06:51.
#18 OFFLINE
#19 OFFLINE
Добавлено 14 February 2012 - 10:36
#20 OFFLINE
Добавлено 15 February 2012 - 16:54
vlad56, on 14 February 2012 - 10:36, сказал:
Есть такая директива в студии как регион. Обозначается так:
#Region "произвольное название" ' здесь любой код End Region
Можешь разделить свой код благодаря этим регионам как угодно... Регионы всегда будут свернуты при сохранении...
А еще с помощью контекстного меню в редакторе кода ты можешь как свернуть все процедуры разом, так и развернуть:
01.png 22.11K 6 Количество загрузок