Пара вопросов по коду

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
Dezil
Сообщения: 8
Зарегистрирован: Ср сен 30, 2009 3:00 pm

Пара вопросов по коду

#1 Сообщение Dezil » Ср сен 30, 2009 3:11 pm

Переписываю стратегию с MQL4 на Delphi

Возинк вопрос по расчету размера лота исходя из заданного стоплосса и баланса.
В MT4 данный расчет выполняется вот таким кодом:
Lots=(AccountBalance()*Risk/100)/(MarketInfo(Symbol(),MODE_TICKVALUE)*((pr-sl)/Point+MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT))) ;

где
Risk величина риска на сделку в %
pr - цена установки ордера
sl - уровень цены стоплосса

на выходе получаем размер лота

Как в FT осуществить подобный расчет?

И еще вопрос. Во всех примерах в параметрах стратегих указывается пара по которой она работает. А как должен быть написан эксперт чтоб он работал с любой парой. Не писать же 5 одинаковых dll если я хочу прогнать одновременный тест стратегии на 5 парах

Очень жду ответа т.к. собираюсь купить данный продукт если удасться реализовать проект

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: Пара вопросов по коду

#2 Сообщение Terranin » Чт окт 01, 2009 4:23 pm

Dezil писал(а):Переписываю стратегию с MQL4 на Delphi

Возинк вопрос по расчету размера лота исходя из заданного стоплосса и баланса.
В MT4 данный расчет выполняется вот таким кодом:
Lots=(AccountBalance()*Risk/100)/(MarketInfo(Symbol(),MODE_TICKVALUE)*((pr-sl)/Point+MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT))) ;

где
Risk величина риска на сделку в %
pr - цена установки ордера
sl - уровень цены стоплосса

на выходе получаем размер лота

Как в FT осуществить подобный расчет?

И еще вопрос. Во всех примерах в параметрах стратегих указывается пара по которой она работает. А как должен быть написан эксперт чтоб он работал с любой парой. Не писать же 5 одинаковых dll если я хочу прогнать одновременный тест стратегии на 5 парах

Очень жду ответа т.к. собираюсь купить данный продукт если удасться реализовать проект
В тестере доступны переменные аналоги:
MarketInfo(Symbol(),MODE_POINT) - Point
спред соответственно будет Ask - Bid
MarketInfo(Symbol(),MODE_TICKVALUE) - это скорее всего заменится на Point

т.е. весь код запишется как:
Lots := (AccountBalance*Risk/100)/(Point*((pr-sl)/Point + (Ask - Bid))) ;

Стратегия не привязана к одной валюте и может работать по всем одновременно, т.е. стратегия получает тики от всех валют а потом уже если есть желание лишние отсортировываются по имени валюты. В параметрах можно указать список по каким валютам работать например, а можно просто сгенерировать тики по отдельным валютам а стратегия будет работать по всем.
Asta la vista
Mike

Dezil
Сообщения: 8
Зарегистрирован: Ср сен 30, 2009 3:00 pm

#3 Сообщение Dezil » Пт окт 02, 2009 1:28 pm

Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#4 Сообщение Terranin » Пт окт 02, 2009 5:31 pm

Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Asta la vista
Mike

Dezil
Сообщения: 8
Зарегистрирован: Ср сен 30, 2009 3:00 pm

#5 Сообщение Dezil » Пт окт 02, 2009 6:21 pm

Terranin писал(а):
Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#6 Сообщение Terranin » Пт окт 02, 2009 11:12 pm

Dezil писал(а):
Terranin писал(а):
Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?
Выход может быть в том чтобы задать в параметрах стратегии список валют по которым она должна работать и использовать эти переменные.
Asta la vista
Mike

Ответить