Страница 1 из 1
Пара вопросов по коду
Добавлено: Ср сен 30, 2009 3:11 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 парах
Очень жду ответа т.к. собираюсь купить данный продукт если удасться реализовать проект
Re: Пара вопросов по коду
Добавлено: Чт окт 01, 2009 4:23 pm
Terranin
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))) ;
Стратегия не привязана к одной валюте и может работать по всем одновременно, т.е. стратегия получает тики от всех валют а потом уже если есть желание лишние отсортировываются по имени валюты. В параметрах можно указать список по каким валютам работать например, а можно просто сгенерировать тики по отдельным валютам а стратегия будет работать по всем.
Добавлено: Пт окт 02, 2009 1:28 pm
Dezil
Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
Добавлено: Пт окт 02, 2009 5:31 pm
Terranin
Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Добавлено: Пт окт 02, 2009 6:21 pm
Dezil
Terranin писал(а):Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?
Добавлено: Пт окт 02, 2009 11:12 pm
Terranin
Dezil писал(а):Terranin писал(а):Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.
Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?
Выход может быть в том чтобы задать в параметрах стратегии список валют по которым она должна работать и использовать эти переменные.