Библиотека Support Vector Machine Learning Tool

Купить приложение Support Vector Machine Learning Tool в магазине систем алготрейдинга

Утилита Support Vector Machine Learning проста для использования в ваших советниках, индикаторах и других программах для MetaTrader 5.

До нынешнего времени классификация при помощи метода опорных векторов была доступна только ограниченному кругу лиц – продвинутым программистам при использовании внешних библиотек java и c++. Данная утилита была написана при помощи только стандартных средств MetaTrader 5. Она предоставляет доступ к использованию метода опорных векторов при помощи простого интерфейса.

Обратите внимание: данный продукт не является советником или индикатором. Это библиотека, позволяющая пользователям встроить классификацию по методу опорных векторов в их собственные советники и индикаторы.

Что такое метод опорных векторов?

Метод опорных векторов (support vector machines, SVM) является формой машинного обучения, использующего алгоритм анализа информации и распознавание паттернов, которые будут использоваться при классификации. Он используется в основном в биоинформтике и математике. Однако данная библиотека была разработана специально для использования SVM для анализа исторических ценовых данных и получения паттернов, которые в последующем можно использовать для генерации сигналов.

Если вы хотите узнать больше о том как работает SVM, рекомендую начать с Википедии. Данная статья содержит хороший обзор и ссылки для дальнейшего изучения, если вам будет интересно.

Как работает библиотека:

Работа любого метода опорных векторов заключается в следующем:

  • Сбор исторических ценовых данных и данных индикаторов;
  • Использование исторических данных для генерации набора входных и выходных данных для обучения;
  • Использование входных и выходных данных для обучения SVM;
  • Использование обученной системы SVM для анализа текущих рыночных цен и значений индикаторов для генерации торговых сигналов.

Система на основе метода опорных векторов по сути является механизмом ввода/вывода. Пользователь передает входные данные системе, а она производит выходные данные типа true или false. Если система SVM еще не обучена, она, как правило, выдает случайные выходные данные для любых входных данных. Чтобы система SVM начала производить полезные данные, ее необходимо обучить.

Обучение SVM происходит путем передачи набора входные данных с выходными данными, которые требуется по ним получить. Алгоритм SVM будет использовать эти данные для поиска паттернов. В случае с данной утилитой, в качестве входных данных используются индикаторы (входными данными может быть любая комбинация стандартных или пользовательских индикаторов, выбранных пользователем), а в качестве входных данных используются значения true или false (что соответствует присутствию или отсутствию торгового сигнала).

После выбора индикаторов (для использования в качестве входных данных) и параметров определения выходных данных, утилита сгенерирует набора входных и выходных данных для обучения SVM. После этого можно начать обучение. Как только обучение будет завершено, вы сможете анализировать значения текущего индикатора и передавать советнику сигналы на совершение торговых операций.

Для продвинутых пользователей доступны дополнительные функции, позволяющие пользователю вручную создавать наборы входных и выходных данных для обучения. Их можно использовать для более сложных приложений, для реализации механизмов выхода из позиции или управления капиталом. Для получения более подробной информации, посмотрите описание функций setInputs() и setOutputs() ниже.

Для обычных и продвинутых пользователей предусмотрен ряд функций. Они приведены ниже:

Функция Описание
#import “svMachineTool.ex5″<function signatures>

#import

Данное выражение необходимо указывать в самом начале вашего советника/индикатора, чтобы импортировать функции svMachineTool. Если вы не укажете его, вы не сможете использовать ни одну из функций svMachineTool.
int initSVMachine(void); Данная функция инициализирует новый экземпляр SVM и возвращает хэндл, который можно использовать в дальнейшем.
bool setParameters(int handle, ENUM_OPTION option,double value) Данный метода передает ваши параметры во вновь созданный SVM. Все параметры необходимо передавать сразу в данном методе. Если объекту не передается ни один параметр, будут использоваться параметры по умолчанию (описанные в таблице параметров).
bool setIndicatorHandles(int handle, int& indicatorHandles[],int offset, int N) Данная функция позволяет передавать в SVM хэндлы инициализированных индикаторов. Осуществляет путем передачи int-массива с хэндлами. Значение сдвига соответствует последней свече (на текущем таймфрейме графика), которую вы хотите использовать для обучения. Значение N задает количество точек для обучения.
bool genInputs(int handle, int N) Данная функция генерирует входные данные для обучения SVM. Для генерации входных параметров используются хэндлы индикаторов, переданные в предыдущей функции setIndicatorHandles. N точек обучения будут сгенерированы от текущего времени, будут сгенерированы значения инидкаторов на текущем таймфрейме графика. Данная функция вернет true или false в зависимости от того, успешно ли были сгенерированы входные данные. Любые возникающие ошибки выводятся в лог.
bool setInputs(int handle, double& Inputs[], int nInputs) Данная функция может быть использована для ручного задания входных данных, применяемых для обучения вашей SVM. Входные данные необходимо передавать массивом значений типа double в следующем формате.Inputs[] = | A1 | B1 | C1 | A2 | B2 | C2 | A2 | B3 | C3 |

nInputs определяется количество входных данных на одну точку обучения. В примере, приведенном выше, одна точка обучения состоит из значений A B & C, таким образом, значением nInputs будет 3.Функция возвращает true или false в зависимости от того, успешно ли заданы входные данные.

bool genOutputs(int handle, ENUM_TRADE trade, int StopLoss, int TakeProfit, double duration) Данную функцию можно использовать для автоматической генерации ваших выходных данных в виде массива для обучения SVM. Массив выходных данных генерируется по минутным историческим данным, где совершаются “гипотетические” сделки на основе переданных переменных, также происходит определение, была ли сделка удачной.ENUM_TRADE = Данная переменная задает тип ‘гипотетической’ торговой операции, которому вы хотите обучить SVM. Может быть BUY или SELL

StopLoss = задает Стоп Лосс для “гипотетической” торговой операции в пипсах

TakeProfit  = задает Тейк Профит для “гипотетической” торговой операции в пипсах

Duration = задает максимальное время “гипотетической” торговой операции [в часах], которую следует считать удачной (т.е. если выставлено значение 2, то только те операции, которые закрывались в течение 2 часов после открытия будут считаться успешными в выходных данных).

Данная функция вернет true или false в зависимости от того, успешно ли были сгенерированы входные данные. Любые возникающие ошибки выводятся в лог.

bool setOutputs(int handle, bool& Outputs) Данную функцию можно использовать для ручного задания выходных значений для обучения SVM. Выходные данные необходимо передавать как массив значений типа boolean. Функция возвращает true или false в зависимости от того, успешно ли заданы входные данные. Любые возникающие ошибки выводятся в лог.
bool training(int handle) Данная функция используется для инициализации обучения SVM при помощи инициализированных входных и выходных данных. Как правило, эта функция выполняется дольше всего. Система SVM должна быть обучена перед классификацией новых входных данных.
bool classify(void)bool classify(int offset)

bool classify(double& Input)

Функция классификации использует обученную систему SVM для обработки новых входных данных и возврата значений true или false.Void = Если методу классификации не переданы переменные, в качестве входные данных будут использоваться текущие значения индикатора.

Offset = используется для генерации входные данных из старых данных. Параметр offset определяет, на сколько баров необходимо сдвинуться от текущего (на текущем таймфрейме).

Input = используется для ручного указания входных данных для классификации (внимание: данный метод классификации должен быть использован, если входные данные были заданы вручную при помощи метода setInputs())

void  deinitSVMachine(void) Данная функцию следует вызывать в конце кода вашего советника/индикатора. Она удаляет все неиспользуемые переменные для освобождения памяти.
void setIndicatorHandles(int handle,int& indicatorHandles[],int& Offsets[], int startBar,int N) Данная функция работает аналогично исходной функции setIndicatorHandles(), но в ней есть возможность передавать определенные отступы для каждого из переданных хэндлов индикаторов. Как и в предыдущей версии массив indicatorHandles[] хранит хэндлы индикаторов для выбранных вами входных данных, в то время как массив Offsets[] хранит смещения соответствующих индикаторов (т.е. 0-е значение отступа означает использование текущего бара для генерации входных данных, значение 1 означает использование предыдущего бара и т.д.). Для примера рассмотрим следующую ситуацию:indicatorHandles[5] = [ 1 | 2 | 3 | 3 | 3 ] = {1,2,3,3,3};
Offsets[5]             = [ 0 | 0 | 0 | 1 | 2 ] = {0,0,0,1,2};

В данном случае, входные данные 1 и 2 рассчитываются с использованием текущего бара двух отдельных индикаторов. Входные данные 3, 4 и 5 рассчитываются по 3 прошлых барах одного и того же индикатора. Данная функция может быть использована для передачи снэпшота индикатора в систему SVM (т.е. несколько баров).

Оставшиеся переменные данной функции – это значение startBar и значение N. startBar соответствует последней свече (текущего таймфрейма), которую вы хотите использовать в качестве данные для обучения. Значение N задает количество точек обучения. Например, значение startBar 4 и N равное 6 означает, что SVM использоваться бары с 4 по 9 при генерации входных и выходных данных.

bool getTrainingData(int handle, double& Inputs[], bool& Outputs[]) Данная функция позволяет пользователям получить доступ к обучающим данных, генерируемым при вызове функций genInputs() и genOutputs(). Первая параметр данной функции – это хэндл SVM. Следующие два параметра – это int и double массивы. При вызове, данные массивы будут заполнены данными для обучения, сгенерированными для SMV. Обратите внимание, что при вызове данной функции перед genInputs() или genOutputs(), будут возвращены массивы нулевого размера.

Для SVM могут быть заданы определенные параметры при помощи функции setParameters(). Описание этих параметров приведено ниже:

Параметр Значение по умолчанию Описание
OP_MEMORY 1000 При обучении SVM может использоваться значительная часть памяти. Данная опция устанавливает максимальное количество памяти, которое может быть использовано SVM. Значение задается в МБ. Если задано значение 1000 МБ, алгоритм обучения будет ограничиваться использованием именно этого объема памяти. На этот параметр следует обратить особое внимание, если вы собираетесь проводит мультивалютное тестирование. Например, у меня 4-хъядерный компьютер (и 4 локальных агентов тестирования) с 8 ГБ RAM. Обычно я устанавливаю лимит в 1250 МБ. Это означает, что при обучении параллельно на всех агентах будет использовано максимум 5000 МБ (4 x 1250МБ), а 3000 МБ будут свободны для операционной системы и приложений.
OP_MAXCYCLES 1000000 Данный параметр ограничивает количество циклов обучения. Он предусмотрен для того, чтобы избежать бесконечного обучения. Это может произойти случайно при попытке найти невозможное решение. Рекомендуется не изменять это значение без особой необходимости.
OP_ TOLERANCE 0.1 Данный параметр задает максимально ошибку, которую вы можете допустить от SVM. Указывается как процент (т.е. 0.1 соответствует 10% ошибке, 0.15 – 15%). Если вы обнаружили, что после обучения решение не сходится, рекомендуется увеличить данное значение.

Пример: Как использовать Support Vector Machine Tool для получения сигналов

Советник “svmTrader” был написан специально, чтобы показать типичный пример использования утилиты Support Vector Machine Learning. Вы можете скачать его бесплатно в Code Base.

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Time limit is exhausted. Please reload the CAPTCHA.