Главная » Статьи » Мои программы » Программы для лото |
Подождите, идет переход на новый сайт...В предыдущей статье были кратко рассмотрены основные функции программы. Работа с архивом тиражей, расчетом статистики, и списком ставок обычно не создает проблем у большинства пользователей - ведь там в большинства случаев все интуитивно понятно и без справочных материалов. Но когда дело доходит до создания своего сценария - очень часто начинаются проблемы. А ведь сценарии, по сути - основная "фишка" наших программ, которая позволяет максимально облегчить ручной труд при выборе и отладке своего способа игры в лотереи. В этой статье я постараюсь продемонстрировать принципы создания своих сценариев на примере, сопровождая процесс соответствующими картинками, объяснениями и советами. Для примера возьмем программу для игры «Гослото «5 из 36». В качестве примера рассмотрим комбинацию фильтров "Суммы + Повторы + Числа". Этот сценарий есть в online-библиотеке сценариев, поэтому Вы всегда сможете скачать его для изучения. Оглавление
Немного теории...Сценарий - это текстовый файл, состоящий из одной или нескольких строк сценария. Каждая строка сценария, в свою очередь, представляет собой набор из от одного до семи фильтров, которые работают на основе расчета статистики сами разными способами. При выполнении каждой строки сценария список комбинаций генерируется заново, а по результатам применения всех фильтров создаются ставки (впрочем, из этого правила есть исключения, и их мы также рассмотрим позже). Таким образом, строка сценария - это "самостоятельная боевая единица". Некоторые пользователи считают отдельным "сценарием" каждую отдельную строку. В принципе, это не сильно критично, но может привести к путанице, так справочная система, да и сама программа разработаны в расчете на порядок "фильтры -> строка сценария -> сценарий (файл)". В нашем сценарии будет всего одна строка, и в данном конкретном случае эти понятия получаются тождественны. Но у меня есть масса сценариев (особенно "отладочных"), включающих по несколько десятков строк. Программа позволяет работать с множеством различных сценариев, сохраняя их в файлах. Таким образом Вы можете составлять свою библиотеку сценариев, с течением времени совершенствуя их или изобретая новые. При этом Вы можете сохранять их в online-библиотеке, чтобы иметь возможность работать с одним и тем же сценарием на нескольких разных компьютерах. Сохраняя сценарии в online-библиотеке совсем не обязательно публиковать их, делая их доступными остальным пользователям программы - Вы можете использовать в online-библиотеку лишь как свое личное "облачное хранилище", предназначенное исключительно для сценариев. Некоторые хитрости для продвинутых пользователейЭтот абзац предназначен для тех пользователей, кто знает, что такое файл, расширение файла, и как открыть текстовый файл с "левым" расширением в текстовом редакторе (например "Блокнот"). Остальным рекомендуется его пропустить и перейти к следующей части. Как я уже написал, сценарий представляет собой обычный текстовый файл в кодировке ANSI с кодовой страницей WIN-1251. Эти файлы расположены в каталоге с программой и имеют расширение .lss. Активный (то есть загруженный в данный момент в редактор программы) сценарий имеет то же самое имя, что и исполняемый файл программы (выделен красным): Содержимое внутри файла закодировано примерно таким образом: Одна строка в файле - одна строка сценария. Каждая строка разделена с помощью символа | на несколько "секций". Первая "секция" - параметры строки. Вторая и последующие, кроме последней - описатели фильтров. Последняя "секция" - комментарии к строке. Когда нужно быстро "размножить" одну из строк сценария в несколько похожих друг на друга, очень удобно открыть этот файл текстовым редактором, и сделать это "вручную". А потом загрузить обратно в программу. Только необходимо помнить, что сама программа в момент такого редактирования должна быть закрыта. Впрочем, Вам нет особой необходимости заглядывать в эти файлы - все необходимые инструменты для работы с ними есть в самой программе. А неумелыми правками Вы можете только его испортить. Поэтому если не понимаете что делаете - лучше не трогайте, и пользуйтесь инструментарием программы. Создание нового сценарияДля начала необходимо удалить из редактора сценария предыдущий сценарий, если он там был. Сделать это удобнее всего командой "Удалить все" - она полностью очистит рабочую зону редактора. Впрочем, можно воспользоваться и командой "Удалить", которая удаляет только одну выделенную строку, если строка в сценарии только одна (как у меня на рисунке). Примечание: практически любую команду в программе можно выполнить через главное меню (верхнее меню в программе); либо через меню, вызываемое по правой кнопке мыши на каком-либо списке или таблице (а некоторые команды еще и продублированы кнопками на панели инструментов). Очистив сценарий, можно добавлять свои строки. В программе предусмотрены два типа строк в сценарии: строки с "фильтрами" и "разделители". Строки с фильтрами - это и есть рабочие элементы любого сценария; а разделители служат всего лишь для визуального разделения строк на некие "блоки", то есть для удобства восприятия. Соответственно, поскольку нам необходимо добавить новую "рабочую" строку, выбираем команду "Добавить фильтры" (можно нажать Ctrl+Ins на клавиатуре). Откроется окно редактора строки сценария, которое в изначальном, "пустом" виде выглядит так: В самом верху окна расположено поле для ввода комментария (примечания) к данной строке сценария. Эти самые комментарии не влияют на работу программы, и служат только для Вашего удобства, чтобы не запутаться, если Ваш сценарий содержит множество строк. Это поле можно оставить пустым, а можно ввести что-то вроде этого:
Выбор опцийС комментариями разобрались, теперь необходимо определится с опциями. Опции - это указания программе, что делать перед применением фильтров; а также как именно делать ставки после того, как все фильтры будут применены. Для начала нужно выбрать, какой список комбинаций мы будем использовать в данной строке. Существуют три варианта:
Этот вариант подразумевает, что перед выполнением данной строки сценария программа заново создаст полный список комбинаций, которые возможны в выбранной Вами лотерее (то есть точно такой же список, какой создается при запуске программы или при выполнении команды "Генерировать".). Поле "количество тиражей" при этом не используется и ни на что не влияет. Данный вариант рекомендуется использовать, если Вы намерены тестировать сценарий по уже прошедшим тиражам (чуть ниже я объясню почему более подробно).
При выборе данного варианта, как и в предыдущем случае, программа создаст полный список комбинаций, но затем удалит из него указанное "количество тиражей"; то есть те комбинации, которые выпадали в N последних тиражах (по архиву тиражей). Здесь мы исходим из того, что вероятность полного повторения (то есть всех чисел (шаров)) какой либо комбинации относительно невелика для N идущих подряд тиражей, поэтому их можно сразу же удалить. А вот число N (то есть количество тиражей) Вы должны определить сами, исходя из опыта игры. Скажем для лотерей, где числа в тиражах часто повторяются (например "Рапидо") это число разумно выбирать поменьше, для других (например "5 из 36") - побольше. Этот вариант я не рекомендую использовать для тестирования сценариев. Почему? Да просто потому, что удалив из списка комбинаций уже выпавшие, программа никогда не сможет сделать на них ставки при тестировании. Предположим, что Вы создали идеальный сценарий, который определят вероятную комбинацию со 100% точностью (то есть всегда точно угадывает следующие числа). Тогда, при тестировании такого сценария по архиву тиражей программа просто не сможет сделать ставок, потому что предсказываемые строкой сценария комбинации уже удалены из списка этой опцией. А вот для создания ставок на следующий тираж (то есть для прогнозов) эта опция будет очень полезна.
Этот вариант предусмотрен для случая, когда не достаточно применения семи фильтров (которые предусмотрены в одной строке сценария) и нужно объединить несколько отдельных строк сценария в одну. В этом случае список комбинаций не пересоздается, а остается точно в том виде, каким он остался после выполнения предыдущей строки. В нашем случае, поскольку мы собираемся только тестировать сценарий, мы должны выбрать опцию "Исходный список (рекомендуется для тестов)".
Далее мы должны решить, как будут создаваться ставки после того, как заданные нами фильтры (об этом ниже) будут применены. В идеале, после применения выбранных нами фильтров, в списке комбинаций должна остаться ровно одна комбинация. На нее программа и сделает ставку. Но это в идеале, на практике такое достигнуть довольно сложно. Поэтому мы можем указать программе, как поступать в таком случае:
Ну и последняя опция: Она необходима для тестирования сценариев, в которых каждой строкой создается много тысяч ставок. В этом случае файл ставок очень быстро начнет переполняться, и программа начнет работать все медленнее и медленнее. В этом случае можно установить этот "флажок" и файл ставок будет автоматически очищаться перед каждой строкой сценария, однако рейтинг будет накапливаться как обычно. А по рейтингу можно будет оценить и эффективность ставок (в данном случае собственно сами ставки будут не важны, так как их очень много).
Перед тем, как добавлять в нашу строку сценария любые фильтры, я рекомендую просчитать выбранные методы "вручную" (то есть на вкладке "Статистика") и проанализировать результаты. И только потом добавлять выбранные фильтры в сценарий. Поэтому нажмем кнопку "ОК", сохранив выбранные нами опции строки; и временно перейдем во вкладку "Статистика". Первый фильтр - сумма всех номеров тиражаВ качестве первого фильтра выберем статистику по сумме тиража. Давайте посмотрим на график сумм для всех возможных комбинаций (сделать это можно через меню "Статистика" - "Распределение сумм тиражей и всех возможных комбинаций"): На графике темно-красной линией обозначены суммы всех возможных комбинаций, ярко-красными точками и линией - суммы всех тиражей, которые есть в архиве программы. По графику видно, что суммы на краях графика выпадают значительно реже тех, что расположены на графике ближе к центру. Соответственно - их можно удалить, сократив таким образом количество комбинаций. Примечание: строго говоря, это не совсем правильно. Точнее - совсем не правильно. Такие суммы выпадают реже потому, что их просто меньше, а относительная вероятность выпадения от их общего количества (темно-красная линия) может быть даже выше наиболее "популярных" сумм. Но... этим фильтром пользуются очень часто, нет, очень-очень часто, поэтому рассмотрим именно его. Допустим, мы хотим убрать комбинации с суммами ниже середины графика (например: для 5*36 это суммы до 72 и более 113) Убрать комбинации с маловероятными суммами можно несколькими способами. Для того, чтобы было более понятно, что и как работает, рассмотрим несколько различных способов.
Самый очевидный способ - использовать статистику "Сумма всех чисел в тираже". При использование этой статистики нужно иметь в виду, что чем больше глубина выборки - тем точнее будут результаты. Поэтому выберем 5000 тиражей (можно и больше - но чем больше, тем считает медленнее). По графику под статистикой видно, что на уровень в 50% приходится около 55 выпадений за 5000 последних тиражей, или 1,1% и ниже. Или по значениям (собственно суммам) это будет не более 71 и не менее 112. Вот на эти числа и будем ориентироваться. Удалять вручную (и в сценарии) можно также двумя методами. Что называется "в лоб" (ну или как еще в народе говорят - "что в лоб, что по лбу", кому как больше нравится). Можно отсортировать полученную статистику по столбцу "Значение", выделить все суммы от минимальной до 71 включительно (удерживая клавишу Shift), затем нажать кнопку "Удалить выделенные". Затем тоже самое проделать с суммами от 112 и более. Чем плох данный способ? Во-первых, нужно выполнить две отдельных операции для двух диапазонов сумм (до 71 и после 112 включительно). Во-вторых - рассчитанные суммы часто "скачут", особенно на небольших выборках (у нас 5000 тиражей, но и при такой большой выборке часто бывают флуктуации). Поэтому такое решение "в лоб" - не наш метод (хотя я немного позже все равно покажу, как реализовать его в сценарии, для информации). Более продвинутый способ - использовать значения столбцов "Количество" или "Количество в %". Для этого отсортируем нашу таблицу по столбцу "Количество": Затем нужно выделить значения с "количеством" 55 или менее, либо, ориентируясь по "количеству в %" - с значениями 1,1% и меньше. И нажать "Удалить выделенные". Что получилось? Во-первых удаление можно выполнить за одну команду (одно нажатие кнопки). Во-вторых - мы уже не так сильно зависим от самих значений - они могут от тиража к тиражу "прыгать" вверх - вниз, но мы удалим только те, которые действительно выпадают реже (за выбранный диапазон тиражей, разумеется).
Теперь попробуем реализовать тоже самое в фильтрах сценария. Вернемся на вкладку "Сценарий", и вновь откроем нашу строку в встроенном редакторе. Для этого нужно выбрать команду "Изменить" или щелкнуть на выбранной строке дважды. В списке фильтров необходимо нажать на кнопку справа от первого фильтра: Откроется еще один визуальный редактор - редактор фильтра. По умолчанию в него подставляется те же самые метод расчета и глубина выборки, что и на вкладке "Статистика", поэтому ничего дополнительно подставлять не нужно:
Итак, вначале попробуем реализовать вариант, который выше назван "в лоб", то есть просто удалив все значения до 71 и после 112 включительно. Для этого мы должны "указать" программе, какие именно значения мы хотим удалить. Делается это с помощью селектора "Режим выделения значений в списке статистики". Сами значения мы будем указывать в поле "Значения". Список значений можно задавать через запятую (15,16,17 и т.д.), но это долго и утомительно; или диапазоном - (10-71;1 , то есть от 10 до 71 с шагом 1, нижний предел берем сразу "с запасом"), но нельзя задать сразу два диапазона. Поэтому, как и в ручном варианте придется разбить наш фильтр на два похожих фильтра, но с разными диапазонами:
Эти записи для программы при выполнении сценария означают буквально следующее:
В результате вместо одного фильтра получим два: Думаю, многие согласятся, что это не очень эффективно - мало того, что "тратим" сразу два фильтра из семи возможных вместо одного. Так еще и статистика будет считаться два раза, то есть сценарий будет работать медленнее.
Теперь рассмотрим второй случай - удалим только строки с "количеством" 55 или менее. В этом случае фильтр будет выглядеть так: Эта запись означает следующее:
Получаем такую строку первого фильтра: Уже гораздо лучше... Сохраняем созданную "заготовку" сценария, нажав кнопку "ОК".
Проверка правильности работы фильтраДобавив первый фильтр в наш сценарий, я рекомендую его сразу же проверить на корректность. Особенно в начале освоения программы, когда еще не очень понятно, "что и как". Как это сделать? Для того, чтобы проконтролировать выполнение любого сценария, предусмотрен "Журнал выполнения сценария". Если включить эту опцию, то при выполнении сценария в текстовый файл будут подробно записываться все действия, выполняемые программой. Включить эту опцию можно с помощью меню "Сценарий" - "Журнал выполнения сценария": И запускаем наш сценарий (пока еще только с одним фильтром) на выполнение, нажав кнопку "Тест" (количество тестов можно выбрать любое - от 1 и более):
После того, как сценарий отработает указанное количество тестов, на экран будет выведено окно с результатами его (сценария) работы. Выглядит это примерно так: В этот файл подробно выводятся все действия - какой фильтр применяется, рассчитанные данные статистики, какие строки удаляются / оставляются и т.д.. Прокрутив журнал, мы увидим следующие строки: Как видно из текста, программа сделала 110 шагов (то есть удалила 110 значений сумм из списка комбинаций) и остановилась, как мы ей и "приказывали" на сумме, которая за последние 5000 тиражей встретилась ровно 55 раз, или 1,1%. Все правильно!
Совет: автоматическое создание журналов выполнения сценариев - это, конечно, очень удобно для отладки. Но, как и все в этом мире, это удобство оборачивается и своими недостатками: во-первых, эти файлы со временем начинают занимать кучу места на дисках; а во-вторых - заметно замедляют выполнение сценариев. Поэтому после того, как Вы создали и отладили свой сценарий - отключите эту опцию. Файлы журналов сохраняются в той же папке, куда Вы установили программу: Они всегда начинаются с строки "ScriptsLog_", далее проставлена дата и время создания файла. В любой момент Вы можете удалить их, чтобы не занимали лишнего места на диске с помощью команды "Удалить журналы выполнения сценария" или вручную.
Способ 2. С помощью диапазонов сумм В принципе, мы добились желаемого (в первом фильтре). Можно остановиться и на этом варианте и перейти ко второй части марлезонского балета. Но для отбора комбинаций по сумме номеров в программе предусмотрены и более эффективные фильтры: это три "диапазонных" фильтра "Сумма тиража: диапазон 1 (2, 3)". Давайте посмотрим, как они работает, и чем они "выгоднее". Для этого вернемся на вкладку "Статистика". Поскольку мы решили (условно, конечно) оставить только суммы выше средней линии графика по вертикали, мы построим статистику "по уровню 1/2": Эта статистика всегда "дает" только две строки - выше заданного "уровня", и все остальные суммы. Например, на рисунке выше видно, что за последние 100 тиражей комбинации с суммами от 66 до 119 включительно (это и есть максимально "точный" уровень 1/2, а не как мы в прошлый раз определили "на глазок" 56-112) встречались 83 раза, остальные - 17 раз. Для того, чтобы удалить "лишние" комбинации, нам достаточно "удалить последнюю строку" или "оставить первую строку". Быстро и эффективно! Но и это еще не все! Поскольку в фильтрации будет участвовать только одна строка, а границы диапазона заранее заданы в каждой программе - нам фактически не нужна точность расчетов и мы можем использовать любую небольшую выборку (лишь бы получилось так, что "остальные" присутствуют в списке), например в 100 или даже 50 тиражей. А такая небольшая выборка рассчитывается гораздо быстрее, чем в 5000 тиражей. Получаем тройной профит - размеры выборки не влияют на точность, скорость расчетов за счет небольшой выборки, скорость фильтрации за счет всего одной строки при обработке. Реализуем это в фильтре сценария: То есть считаем статистику, берем только 1 запись "снизу" (то есть делаем один шаг по списку статистики) и удаляем комбинации с такими значениями сумм. И все. Можно реализовать этот же самый фильтр несколько по другому, но результат будет абсолютно тот же самый: Я не буду подробно описывать отличия - внимательные читатели легко обнаружат их сами... А также и смогут проверить работу с помощью "Журнала выполнения сценария". На этом способе я и остановлюсь, выбрав его как окончательный вариант для нашего первого фильтра. Сохраним изменения и перейдем к следующему этапу.
Второй фильтр - количество "значений + 1"Для второго фильтра выберем статистику "Количество совпадений "значений + 1". Почему для я выбрал именно эту статистику? Да потому, что это "динамический" фильтр, результаты которого напрямую зависят от данных текущего тиража (то есть тиража, который предшествует тому, на который мы собираемся делать ставки). Он ничем не хуже и не лучше остальных, но позволяет продемонстрировать работу "динамических" фильтров. Здесь я не буду подробно описывать работу динамических фильтров, более подробно об этом Вы можете прочитать в справке в разделе "Архив тиражей" - "Текущий тираж". Посчитаем статистику в "ручном" режиме. Из полученных данных видно, что можно, например, оставить первые три значения, удалив все остальные (можно использовать и другие варианты, но мы остановимся на этом).
Хорошо, я фильтром мы определились. Но какой взять размер выборки??? Результаты расчета будут различаться в зависимости от того, сколько последних тиражей мы используем для расчета. И заранее определить, какой размер будет наиболее эффективен, зачастую невозможно. Что делать? Да очень просто - можно задать сразу много размеров выборки, а программа при выполнении нашего сценария сделает расчет для каждого из заданных нами вариантов отдельно. После этого мы легко (с помощью рейтинга) можем выделить наиболее эффективные размеры выборки. Делается это например так: Таким образом программа посчитает статистику для всех вариантов отдельно. И по каждому варианту будут сделаны соответствующие ставки. И они попадут в отдельные строки рейтинга. Ну а затем Вы сможете выбрать самый "удачный" размер выборки и оставить только его. Далее, переходим к остальным параметрам нашего фильтра. Мы решили для примера оставить три верхние строки в списке посчитанных значений. Делается, как Вы наверняка уже догадались, это так: Расшифрую эти значения:
Все. Можно сохранить фильтр и проверить его работу с помощью журнала выполнения сценария. Как это сделать, описано выше, повторяться не буду.
Третий фильтр - фильтр "по числам"."Погоняв" в режиме теста первые два фильтра, можно увидеть, что в результате их работы в списке комбинаций остается порядка ~288 тысяч комбинаций (для Гослото 5 из 36). То есть из всех возможных ~377 тысяч мы удалили чуть меньше ста тысяч. Осталось еще очень много. Что ж, будем исправлять это недоразумение. В качестве последнего фильтра в любом сценарии лично я чаще в сего использую самый простой фильтр - "Все числа в тираже". Почему? Да просто потому, что его применение позволяет легко довести количество комбинаций до максимально возможного минимума. Впрочем, это лично мой выбор, в своих сценариях Вы можете использовать другие способы. Как и прежде, вначале посчитаем статистику "вручную": Судя по скриншоту, за последние 50 тиражей самое "горячее" число - это 3, оно повторялось 11 раз; затем идут 23, 32, ну и так далее. Самое холодное - 34, оно выпало всего 2 раза за 50 последних тиражей.
Обратите внимание на столбец "Вес". В этом фильтре мы будем ориентироваться по нему. "Вес" - это интегрированный коэффициент, который вычисляется по формуле: ВЕС = a * "Количество" + b * "Отклонение" + c * "Глубина". Коэффициенты a, b и c задаются в настройках программы. Для чего это нужно? Ну например, если какое-либо число давно не выпадало ("глубина" большое), шанс его появления в следующем тираже растет. Или если оно выпадало намного ниже среднего, то есть значение "отклонение" отрицательное. Сложив эти коэффициенты, можно с большей долей вероятности прогнозировать вероятность его появления в следующем тираже. Ну и количество можно использовать, а можно и не использовать, указав коэффициент a=0. Коэффициенты можно задавать не только положительные, но и отрицательные, тем самым инвертируя значения по своему вкусу.
Конечно, Вы можете использовать столбцы "Отклонение" и "Глубина" по отдельности.
Итак, составим фильтр. У меня он получился такой: Что это означает:
Сохраняем. Можно запускать и проверять... Запускаем: У нас вместо одной строки сценария получилось 275 различных отдельных вариантов. Это произошло потому, что во втором фильтре мы использовали 5 размеров выборки, в третьем тоже 5 размеров выборки, а также 11 вариантов "веса". Посчитаем: 5 * 5 * 11 = 275 вариантов. Что и следовало ожидать. Ставки тоже получаются все "пронумерованы" по созданным вариантам (в поле "Комментарий"): Можно заметить, что скрипт не всегда "достигает" одной оставшейся комбинации - это видно по столбцу "Выборка", оно показывает сколько комбинаций оставалось в списке на момент создания ставки. Это не есть хорошо, и "плохие" значения, при которых создавались такие ставки, можно удалить из списков фильтров. На вкладке "Рейтинг" можно посмотреть эффективность созданных нашим сценарием ставок:
В заключение хотелось бы отметить, что для того, чтобы правильно оценить эффективность создаваемого сценария следует тестировать его на большом количестве тиражей. Сценарий, которые показывает отличные результаты на 10 последних тиражах, на 1000 тиражей может дать отрицательный результат. Поэтому, прежде чем делать реальные ставки на реальные деньги, советую прогнать Ваш сценарий на большом количестве тиражей. Да, это может занять много времени. Впрочем, что важнее - время или проигранные впустую деньги - решать конечно же Вам :-)
Вот в принципе и все. Спасибо за внимание. Если у Вас есть пожелания, что стоит еще рассмотреть в следующих статьях - Вы можете оставить в комментариях к любой из статей на этом сайте или прислать Ваши пожелания на почту. | |
Просмотров: 8773 | Комментарии: 11 | | |
Всего комментариев: 7 | |||||
| |||||