Техническое задание на разработку советника КОНТАКТНАЯ ИНФОРМАЦИЯ ЗАКАЗЧИКА: ИМЯ, ФАМИЛИЯ: КУРАПОВ ИВАН ЭЛ. ПОЧТА: NICE-TRADER@YA.RU ICQ: - 263489033 SKYPE: ДАТА: 21.01.2012 Основные положения Необходимо написать код советника для MetaTrader4, который будет торговать на основании значений индикаторов RSI и ценовых колебаний Тестирование и дальнейшая работа советника предполагается на различных валютных парах и различных тайм фреймах. Первичное тестирование необходимо произвести на EURUSD 60MIN, в терминале Дц Nord FX, Fibo group, Alpari Для наглядности работы советника приведены рисунки(ниже) Требования к работе советника 1. Советник должен работать на клиентских терминалах с двумя/четырьмя и тремя/пятью знаками в дробной части значений котировок. Также советник должен корректно отрабатывать реквоты и проскальзывания при выставлении ордеров. Так же правильно считать лот и ценность пункта для подсчета ММ на всех парах в том числе кроссах 2. Советник должен адекватно вести себя на тестировании в тестере MT4(при визуализации), на котировках закаченных с базы metaquotes, полноценно работать с контролем открытия и закрытия баров при тестах в визуализаторе. 3. Формирование сигнала начинается с цикла синхронного анализа цены и значения индикатора на момент закрытия нулевого бара А)цикл начинается с выявления ключевых точек значений РСИ с глубиной истории на N баров (настраивается в свойствах historydeep) допустим 14 баров. Ключевая точка – это своеобразный экстремум на графике РСИ она является либо наивысшей либо наименьшей точкой относительно предыдущей и следующей точки(в зависимости от значения barspoint в данном случае по 3 барам, средний выше остальных), она находится по середине между ними, по аналогии с индикатором фракталов Билла Вильямса. Все эти точки отмечаются и помечаются как UP точки и DUWN точки. UP точка при которой предшествующее и следующее после нее значение РСИ меньше этой точки, DOWN значения предшествующее и следующее за средней точкой больше, чем средняя точка(учитывая barspoint). Б) На всей заданной глубине истории в барах (historydeep) отмечаются точки UP по РСИ, и на соответствующем этой точке баре отмечается наивысшее значение цены (ХАЙ – только для UP, для DOWN отмечается ЛОУ) бара. Как только выявлены все точки UP и соответствующие им цены хай на барах, идет сравнение значения РСИ каждого бара справа на графике (только после закрытия далее именуемого как «первый бар») со значением РСИ в во всех точках UP, в пределах диапазона глубины истории N (который настраивается в свойствах как historydeep) Как только выявлено значение РСИ по закрытию первого бара ВЫШЕ(БОЛЬШЕ) значения РСИ точки UP, анализируется цена ХАЙ на первом баре и сравнивается с ценой ХАЙ на баре, которому соответствует точка UP, а так же с ценой ХАЙ на баре предшествующим точке UP и последующим от нее (в случае barspoint=5 два бара до и два бара после) из этих 3-х значений ХАЙ выбирается самое высокое - это значение цены далее будет обозначаться как «цель точки». -Если хай цены первого бара выше или равен цели UP точки, то цикл сбрасывается, то есть конкретная точка UP не рассматривается -Если цена на хае первого бара ниже на значение Nп и более (в свойствах pricestep) цели на точке UP, то выставляется ордер следующим образом: 1) сначала выясняется значение цены для стоплосса будущего ордера: берется участок графика от пересеченной точки UP до первого бара и выявляется самая низкая цена (лоу) на этом участке, от самой низкой цены на участке отнимается N пунктов (в свойствах как stoppips - если у stoppips цифра со знаком “+“ то вычитается от лоу N, если со знаком (-), то прибавляется к лоу. В случае с down точкой соответственно стоп будет считаться от хая и если там стоит знак “+“ в свойстве stoppips то к хаю прибавляется тоже значение N, если знак «-» то хая отнимается N). 2) дальше выясняется значение цены для тейкпрофита будущего ордера: берется цель точки UP (см.выше цель) и к ней прибавляется значение Nп (свойство take-pips) если в значении стоит «+», если же в значении стоит «-», то от нее отнимается Nп. При ситуации по сигналу с down точкой если стоит в значении знак «+» то от цели down точки отнимается значение Nп, если стоит в значении знак «-», то к цели down точки прибавляется 3) Получаем стоп и тейк, ставим БАЙ ЛИМИТ ордер таким образом, что бы расстояние от ордера до тейка было в N раза (коэффициент с десятыми долями riskfaktor) больше, чем расстояние от ордера до стопа, при появлении дробных чисел от пунктов округлять в сторону тейка (то есть ближе к тейку лимит ставить) -выставляется бай лимит ордер на полученной цене, стоп и тейк - те что получены выше. После выставления ордера стрелочкой (символы MT4) показать на графике бар точки UP , по которой выставлен ордер и бар, и первый бар от которого возник сигнал. В) При возникновении ситуации когда первым баром произошло сильное смещение значение РСИ вверх, и значение РСИ становится выше чем несколько UP точек одновременно, то выставляются ордера по каждой конкретной точке отдельно (учитывая pointdeep – значение, указывающее по какому количеству точек одновременно можно открывать ордера, считая справа на лево, по более старым уже не открываются, например если стоит 2, то только по 2 точкам). Все с учетом ММ Запреты: -Нельзя анализировать АП или ДАУН точку и первый бар, если между ними имеется значение РСИ выше N% (RSIHighLevel), или ниже N% (RSILowLevel) - если в пределах истории Nбаров от нулевого бара (filterbars) есть значения РСИ выше N% (функция RSIHighLevel), то запрет на селл лимиты и селлстопы (продажи), байлимиты разрешены. -если в пределах истории Nбаров от нулевого бара (filerbars) есть значения РСИ ниже N% (функция RSILowLevel), то запрет на все покупки, продажи разрешены -нельзя входить в сигнал, при котором между значением RSI на первом баром и UP точкой имеются другие значения РСИ выше(больше) значения RSI на UP точке -нельзя входить в сигнал, при котором между хаем первого бара и целью UP точки проходила цена ВЫШЕ или же меньше на значение Nп ( pricestep) -при возникновении в текущем времени гэпов более Nп(GAP), запрет на открытия ордеров по любым сигналам в течение N баров, где N= RSIPeriod 4. Для ордеров селллимит все зеркально наоборот, только используется down-точка. Описывать заново не буду, просто приведу в виде примера рисунок для расчета селл лимита для down точки. 5. ФИЛЬТРЫ –Если ордер не зацеплен и цена пересекает область установленного на ордер тейк профита, то ордер снимается и эта точка считается отработанной. (не учитывается в дальнейшем анализе) -Если ордер не зацеплен, и РСИ в процессе движения цены заходит либо выше N% (RSIHighLevel) либо ниже N%(RSILowlevel) cнимаются все ордера (вне зависимости бай или селл) и начинается отсчет filterbars N, для разрешения торговли -Если ордер не зацеплен и точка на которой возник сигнал (первый бар) уходит за глубину истории historydeep, то есть становится N по счету, то ордер снимается. 6. Открытая позиция а)По ведению открытой позиции в бай: установить функцию обязательного перевода в +Nп (функция trallingpips) после достижения плавающего профита в на величину первоначального стопа в пунктах Сделать эту функцию отключаемой в виде (BU=тру/фальс) б)По ведению открытой позиции в бай: как только цена подходит к тейку на значение Nп (например 10п losslowpips) то выставляется стоп под лоу последнего закрытого бара. Сделать эту функцию отключаемой в виде (Losslow =тру/фальс) (для селл зеркально наоборот то есть стоп над хаем последнего закрытого бара) в)По ведению открытой позиции в бай: как только цена подходит к тейку на значение Nп (устанавливается например 20п - flatlosspips) ведется отсчет количества баров, если цена находится в этом диапазоне более N баров (настраиваемое значение fletlossbars ) допустим больше 4 закрывшихся баров цена ходит в диапазоне 20п около тейкпрофита позиция принудительно закрывается.(для селл зеркально наоборот) (функция Flatloss = тру/фальс) Г) Если сработал стоплосс (убыток в пределах БЕЗУБЫТКА или небольшой прибыли), а условия для выставления сохраняются, 1.то выставляем стоп-ордер (фукция twoorder=1) , его уровень рассчитывается следующим образом: берется бар пересекший наш стоплосс по предыдущей позиции (случай с бай) после его закрытия, и на его хае выставляется стоп-ордер (если близко к цене сигнал на выставление посылается каждую минуту, пока сохраняются условия) -Стоп на этот стоп ордер выставляется так: от бара который выбил нас по стопу берется ЛОУ, для случая с покупкой, от этого лоу отнимается stoppips2= -N если значение “-“, то от лоу бара отнимается это значение, если значение “+” то значение N прибавляется к лоу, если ноль, то ровно на ЛОУ) -тейк профит выставляется точно такой же, как и тейк предыдущей позиции, по которой у нас сработал стоплосс. Далее проверяется соотношение риска к прибыли по правилу риска (по аналогии со свойством riskfaktor) то есть расстояние от ордера до тейка в N раз больше расстояния от ордера до стопа (берутся данные из дополнительного свойства с десятыми долями riskfaktor2), то ордер выставляется. Здесь по принципу больше или равно. Если стопордер не сработал на следующем баре + не пересечен ЛОУ второго + условия сохраняются (запреты и фильтры те же), то ордер остается висесть. Если следующим баром пересечен ЛОУ бара от которого мы отмеряли наш стопордер, и условия для входа сохраняются, то выставляется НОВЫЙ стоп ордер по тому же механизму, при этом старый снимается. То есть устанавливается на ХАЙ первого бара 2.Если функция twoorder=2, тогда после выбитого стопа по позиции выставляется еще один бай лимит ордер, рассчитывается следующим образом: -берется первый бар, который пересек наш предыдущий стоп, отмечается его ЛОУ, от лоу отнимается значение Nп (stoppips2 аналогичная ситуация со знаками – и +) выставляется значение стоп для будущего ордера, тейк берется такой же как у старого ордера. Далее по правилу риска (по аналогии со свойством riskfaktor) то есть расстояние от ордера до тейка должно быть в N раз больше расстояния от ордера до стопа (только дополнительное свойство как riskfaktor2), здесь не по принципу разрешения, а по принципу расчета уровня для установки дополнительно бай лимит ордера Дальше если второй стопордер (бай лимит ордер) сработал, применяются те же правила ведения позиции. 3.Если функция twoоrder=3, то выставлятся и стопордера и лимит ордера одновременно 4.Если функция twoorder=0, то вторые ордера после выбитого стопа не выставляются 7. Сделок должно открываться столько сколько нужно по сигналам и на неограниченном количестве инструметов, с общим расчетом ММ для всех 8. Важно что бы советник был с явным контролем открытия и закрытия баров, для быстрой оптимизации Требования к настройкам советника Настройки советника должны выглядеть так значения по умолчанию: 1. Параметры РСИ RSIPeriod=14 RSIHighLevel=70 RSILowLevel=30 2. Параметры для настройки советника Pricestep=20 Stoppips=30 Stoppips2=30 Filterbars=40 Takepips=5 Riskfaktor=1.5 Riskfaktor2=2 Historydeep=20 GAP=20п Barspoint=3 (количество баров, значений РСИ для формирования UP или down точки, по примеру фракталов била вильямса. Может быть только НЕЧЕТНЫМ, то есть если 5, то ищем 5 значений РСИ подряд в которых среднее значение выше двух предыдущих и двух следующих) Pointdeep=2 (по какому количеству точек одновременно открывать ордера. Бывает так что мы пересекаем сначала одну точку UP, свежую, потом следующую более глубокую в историю, или обе сразу. То при значении более 2, можем открывать независимые ордера ) 3. Параметры для ордеров Lots=0.1 (объем каждого ордера при выключенном ММ) MM1=5 (возможность десятых долей) процент от депозита для риска в 1 ордере, при установке ордера считается возможный риск потерь в долларах (известен стоп) при срабатывании стопа, и эта сумма должна быть меньше или равна значению ММ в % от депозит, округлять в меньшую сторону, включать в расчет спред Важно что бы это учитывалось на любых парах включая кроссы, и правильно рассчитывалась ценность пункта на различных парах. Для выставления каждого нового ордера, должен учитываться уже текущий риск в деньгах (если открыта позиция или стоит отложенный ордер ведь известен стоп и возможные потери), этот риск должен вычитаться из текущего зафиксированного баланса и уже от этого остатка должен считаться риск (проценты от депозита) для следующего ордера который советник собирается выставить в данный момент. 4. Отключаемые функции: ММ=false BU=false (без убыток смотри пункт 4 подпункт «а») Trallingpips=5 Losslow=false (без убыток под лоу последнего бара при подходе к тейку см. пункт 4 подпункт «б») Losslowpips=15 (количество пунктов до тейка, при котором стоп переноситься под лоу последнего бара, устанавливается при включенной функции losslow) Flatloss=false(закрытие позиции при длительном нахождении цены в диапазоне см. пункт) Flatlosspips=30 (расстояние от тейка, достигнув которое цена не снимает тейк в течение N баров, устанавливается при включенной функции flatloss) Flatlossbars=3 (количество баров в течение которых не происходит взятие тейка после достижения диапазона flatlosspips, устанавливается при включенной функции flatloss) twoorder=1 +допускаю возможность подключения дополнительных настроек на усмотрение программиста если будет техническая необходимость, например настройка размера проскальзывания при закрытии позиции принудительно, либо настройка времени ожидания для повторного запроса при «отсутсвии связи» Главное что бы все выставлялось в течение недели на демо счету по алгоритму без ошибок.