Техническое задание для написания советника работающего в MetaTrader 4. Название советника: Echelon-6.02 Торговая платформа: MetaTrader 4 (советник должен работать с четырех и пятизначными котировками). Обязательные условия: • должен работать на любых инструментах доступных в МТ4 • на временных периодах доступных в МТ4 • учитывать спред (плавающий или фиксированный) • советник должен работать только со своими ордерами • советник должен нормально работать с разными дилинговыми центрами • советник должен восстанавливать нормальное функционирование после временного разрыва связи, переподключения к счету или перезапуска терминала • при невозможности установить отложенные ордера или «stop loss», они должны отслеживаться и при достижении ценой их уровней исполняться по рынку • ордера с рынка должны исполнятся несмотря на реквоты, для выполнения данного требования допускается введение величины допустимого проскальзывания • функция, отвечающая за расчет лота, должна нормально воспринимать неторговые операции со средствами (внесение или списание средств) • в журнале должны быть отображены причины бездействия (не открытия/закрытия/модификации ордеров) советника в режиме «enabled», на пример: К, D, n и т.д. • необходимо будет предоставить исходный код советника. Термины и определения: N1 – это целое положительное число обозначающее расстояние в пунктах между парами ордеров из первой сетки ордеров. N2 – это целое положительное число обозначающее расстояние в пунктах между парами ордеров из второй сетки ордеров. N3 – это целое положительное число обозначающее расстояние в пунктах между парами ордеров из третьей сетки ордеров. Р1 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N1) для первой сетки ордеров. Р2 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N2) для второй сетки ордеров. Р3 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N3) для третьей сетки ордеров. Р11 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N1) для первой сетки ордеров. Сравнение Р11 с текущим значением прибыли по паре ордеров осуществляется только в ситуации описанной в пункте 4а. Р22 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N2) для второй сетки ордеров. Сравнение Р22 с текущим значением прибыли по паре ордеров осуществляется только в ситуации описанной в пункте 4а. Р33 – значение прибыли, задаваемое в целых числах, означающее количество произведений (цена_за_пункт*N3) для третьей сетки ордеров. Сравнение Р33 с текущим значением прибыли по паре ордеров осуществляется только в ситуации описанной в пункте 4а. Х1 – используется для определения размера лота ордеров первой сетки, рассчитывается в процентах от средств. Минимальное значение 0,01, шаг изменения 0,01. Размер лота, рассчитывается советником перед выставлением каждой пары ордеров, исходя из условия (цена_за_пункт*N1)=Х1%_средств. При невозможности выдержать данное требование, размер лота принимается минимально возможным объемом. При задании значения Х1, обеспечить невозможность задания значения Х11. Х2 – используется для определения размера лота ордеров второй сетки, рассчитывается в процентах от средств. Минимальное значение 0,01, шаг изменения 0,01. Размер лота, рассчитывается советником перед выставлением каждой пары ордеров, исходя из условия (цена_за_пункт*N2)=Х2%_средств. При невозможности выдержать данное требование, размер лота принимается минимально возможным объемом. При задании значения Х2, обеспечить невозможность задания значения Х22. Х3 – используется для определения размера лота ордеров третьей сетки, рассчитывается в процентах от средств. Минимальное значение 0,01, шаг изменения 0,01. Размер лота, рассчитывается советником перед выставлением каждой пары ордеров, исходя из условия (цена_за_пункт*N3)=Х3%_средств. При невозможности выдержать данное требование, размер лота принимается минимально возможным объемом. При задании значения Х3, обеспечить невозможность задания значения Х33. Х11 – количество средств, для определения стоимости одного пункта, в процентах. Минимальное значение 0,01, шаг изменения 0,01. Стоимость одного пункта рассчитывается по формуле: (средства*Х11%)/100. Соответственно, размер лота рассчитывается советником исходя из стоимости пункта, перед выставлением каждой пары ордеров первой сетки (примеры расчета лота приведены ниже). При невозможности выдержать данное требование, размер лота принимается минимально возможным. При задании значения Х11, обеспечить невозможность задания значения Х1. Х22 – количество средств, для определения стоимости одного пункта, в процентах. Минимальное значение 0,01, шаг изменения 0,01. Стоимость одного пункта рассчитывается по формуле: (средства*Х22%)/100. Соответственно, размер лота рассчитывается советником исходя из стоимости пункта, перед выставлением каждой пары ордеров второй сетки (примеры расчета лота приведены ниже). При невозможности выдержать данное требование, размер лота принимается минимально возможным. При задании значения Х22, обеспечить невозможность задания значения Х2. Х33 – количество средств, для определения стоимости одного пункта, в процентах. Минимальное значение 0,01, шаг изменения 0,01. Стоимость одного пункта рассчитывается по формуле: (средства*Х33%)/100. Соответственно, размер лота рассчитывается советником исходя из стоимости пункта, перед выставлением каждой пары ордеров третьей сетки (примеры расчета лота приведены ниже). При невозможности выдержать данное требование, размер лота принимается минимально возможным. При задании значения Х33, обеспечить невозможность задания значения Х3. Пара ордеров – это два открытых ордера (buy всегда выше sell) выставленные, в начальном положении, друг от друга на расстоянии равном спреду. Первые пары ордеров всех сеток открываются с рынка. Последующие пары ордеров, в зависимости от сеток, открываются, соответственно через расстояния N1, N2 и N3. Каждому ордеру из пары ордеров должен быть присвоен идентификационный номер состоящий из порядкового номера пары ордеров, обозначения buy или sell и номера сетки ордеров. На пример: 125.b.1 – сто двадцать пятая пара ордеров, ордер buy, сетка первая или 12.s.3 – двенадцатая пара ордеров, ордер sell, сетка третья. При закрытии начального ордера из пары ордеров и открытии последующего ордера равного по объему и направлению закрытому, идентификационный номер начального ордера присваивается последующему ордеру. Идентификационные номера ордеров должны быть отображены в комментариях. Первая сетка ордеров – это пары ордеров, открывающиеся через N1 пунктов, лотами соответствующих условиям Х1 или Х11, со значениями прибыли Р1 и/или Р11. Вторая сетка ордеров – это пары ордеров, открывающиеся через N2 пунктов, лотами соответствующих условиям Х2 или Х22, со значениями прибыли Р2 и/или Р22. Третья сетка ордеров – это пары ордеров, открывающиеся через N3 пунктов, лотами соответствующих условиям Х3 или Х33, со значениями прибыли Р3 и/или Р33. К – увеличение значения средств. Рассчитывается по формуле: Средства=начальное_значение_средств*К. Минимальное значение 1,1, шаг изменения 0,1. При увеличении средств до заданной величины, советник закрывает все открытые ордера, отменяет все возможности открытия ордеров, выставления stop loss и прекращает работу. D – размер просадки, в процентах от средств. Рассчитывается по формуле: D=(маржа (или залог)*100%)/средства. По умолчанию оно равно 30%. При достижении или превышении заданного значения D советник перестает открывать новые пары ордеров, во всех сетках. С открытыми парами, работа по алгоритму продолжается. При снижении просадки до значения D-5%, запрет на открытие новых пар ордеров отменяется. n – количество открытых ордеров. Это целое, четное положительное число. При достижении заданного значения, советник перестает открывать новые пары ордеров во всех сетках. С открытыми парами, работа по алгоритму продолжается. При снижении количества открытых ордеров до значения n-2, запрет на открытие новых пар ордеров отменяется. По умолчанию значение n равно 1000. Алгоритм работы: Пользователь задает значения параметров N1, N2, N3, P1, P2, P3, P11, P22, P33, Х1 или Х11, Х2 или Х22, Х3 или Х33, К, D, n. Советник открывает с рынка первую пару ордеров во всех сетках, лотами соответствующих условиям Х1 или Х11, Х2 или Х22, Х3 или Х33, далее при движении цены в любую сторону на N1, N2, N3 пунктов открывает следующие пары ордеров, лотами соответствующих условиям Х1 или Х11, Х2 или Х22, Х3 или Х33. При повторном достижении ценой уровня, на котором находится минимум один ордер, открытый в качестве начального (то есть не последующий), советник пару ордеров не выставляет. В процессе работы, при освобождении уровня цены от первоначальных ордеров пары (на нем могут находится последующие ордера), советник выставляет на нем новую пару ордеров. Описание цикла. 1. В каждой паре ордеров, для каждой сетки ордеров, при прохождении ценой расстояния равного 2N, от уровня открытия пары ордеров (или от уровня открытого последующего ордера в паре ордеров с расстоянием больше спреда, см. пункт №5), на расстоянии 2N-N выставляется stop loss у ордера имеющего прибыль. При дальнейшем движении цены (без срабатывания stop loss) на расстояния кратные параметру N (3N, 4N, 5N и т.д.) stop loss каждый раз соответственно переносится на уровни: 3N-N, 4N-N, 5N-N и т.д. 2. При изменении направления движения цены и срабатывании stop loss, предусматривается открытие ордера равного по объему и направлению закрытому. Уровень открытия для ордера buy stop равен (stop loss+N). Уровень открытия для ордера sell stop равен (stop loss-N). При каждом закрытии открытого ордера в соответствующей сетке ордеров, советник осуществляет сравнение текущего значения прибыли по паре ордеров с заданным значением P1, P2, P3 по алгоритму определения и сравнения прибыли (приведен ниже). В случае задания значений P11, P22, P33 сравнение текущего значения прибыли по ним не осуществляется. При достижении равенства или превышении значения P1, P2, P3 закрывается открытый ордер (из пары ордеров) и удаляется возможность открытия ордера. Цикл работы по паре ордеров закончен. 3. При движении цены к оставшемуся открытому ордеру от пары ордеров 5N, 4N, 3N и т.д. уровень открытия ордера каждый раз соответственно переносится 6N, 5N, 4N и т.д. Советник, каждый раз при переносе уровня открытия ордера, в соответствующей сетке ордеров осуществляет сравнение текущего значения прибыли с заданным значением P1, P2, P3. В случае задания значений P11, P22, P33 сравнение текущего значения прибыли по ним не осуществляется. При достижении равенства или превышении значения P1, P2, P3 закрывается открытый ордер и удаляется возможность открытия ордера. Цикл работы по паре ордеров закончен. 4. При изменении направления движения цены и открытии последующего ордера равного по объему и направлению закрытого возникают следующие ситуации: a. buy выше sell. В соответствующих сетках ордеров, советник осуществляет сравнение текущего значения прибыли с заданным значением P1, P2, P3 и P11, P22, P33. При прибыли равной или превышающей значения P1, P2, P3 и/или P11, P22, P33 закрываются оба открытых ордера. Цикл работы по паре ордеров закончен. b. sell выше buy. Советник даже при не достижении значения P1, P2, P3 и P11, P22, P33 закрывает оба ордера с общей прибылью. Цикл работы по паре ордеров закончен. 5. При не достижении значения P1, P2, P3 и P11, P22, P33 алгоритм работы продолжается с начала цикла, с той разницей, что расстояние между парой ордеров увеличилось кратно N (стало больше спреда). При нахождении цены между открытыми ордерами пары (buy выше sell) советник никаких действий с ними не производит. В процессе работы, советник постоянно осуществляет контроль параметров К, D и n. При достижении или превышении заданных значений D и n советник перестает открывать новые пары ордеров во всех сетках. При снижении значений D и n до допустимых, запрет на открытие новых пар ордеров отменяется. Алгоритм определения и сравнения прибыли. 1. Определяется величина зафиксированной прибыли (после закрытия открытого ордера) по паре ордеров. Учету подлежат все случаи фиксации прибыли, возникшие в предыдущих циклах по данной паре ордеров. 2. Вычитается текущий убыток по данной паре ордеров из величины зафиксированной прибыли. 3. Сравнивается полученное значение прибыли с заданным значением P1, P2, P3 и/или P11, P22, P33.