Переписываю стратегию с 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 парах
Очень жду ответа т.к. собираюсь купить данный продукт если удасться реализовать проект
Пара вопросов по коду
-
- Сообщения: 8
- Зарегистрирован: Ср сен 30, 2009 3:00 pm
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Пара вопросов по коду
В тестере доступны переменные аналоги: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
Mike
-
- Сообщения: 8
- Зарегистрирован: Ср сен 30, 2009 3:00 pm
Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
Asta la vista
Mike
Mike
-
- Сообщения: 8
- Зарегистрирован: Ср сен 30, 2009 3:00 pm
Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?Terranin писал(а):В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Выход может быть в том чтобы задать в параметрах стратегии список валют по которым она должна работать и использовать эти переменные.Dezil писал(а):Значит получается что если я использую индикатор и мне нужен именно мультивалютный тесть то всетаки мне надо генерить несколько dll каждая с привязкой к своей валюте. Я правильно понял? Каой еще может быть выход?Terranin писал(а):В этой процедуре еще недоступна функция Symbol(). Поскольку стратегия не привязана ни к какой валюте. Эта функция получает смысл только с приходом тика в процедуре ProcessSingleTick (так же как и другие функции Bid, Ask, Point, etc...). Поэтому непонятно к какой валюте привязать индикатор, или надо задавать явно.Dezil писал(а):Вобщем с первым вопросом разобрался, потом отпишу как правильно, а вот по мультивалютности недопонял.
Пишу конкретный пример.
Мне понятно что я могу не затачивать стратегию под конкретную пару, во всех процедурах использую функцию Symbol(). Но есть одна затычка. Стратегия использует индикатор и создаю я его как по правилав в процедуре ResetStrategy. Беда в том что в этой процедуре значение Symbol() возвращает пустую строку, т.е. строка типа f1:=CreateIndicator(Symbol(),60,'someindicator',''); возвращает ошибку - ниезвестный символ. Как быть? или я чего не понял?
Asta la vista
Mike
Mike