//Общие условия: //Советник для MT4, работает только на том символе и том таймфрейме на которых он устанавливается, сигналы формируются на 0 формирующемся баре в течении разрешённого для торговли интервала времени и при этом за время действия таймера в течении которого сигналы считаются действительными. Автоопределение 4х и 5и знак. В одном направлении в рынке одновременно может быть не более 1 ордера, также не более 1 открытой позиции в течении формирования одной свечи, анализируется глубина истории от 1 до 3 баров. //Перед открытием позиции должен производиться расчет лота исходя из настроек манименеджмента. //Сигнал на вход производится по сигнальному индикатору, а также на основании расчёта допустимого пути пройденного ценой в пунктах с последующем его сравнением, фильтров по допустимому времени в течении которого сигнал считается действительным, по разрешённому для работы советника временному диапазону, по разрешённому диапазону значений спредов и АТР. Допустимые АТР и спреды взаимосвязаны через коэффициенты. Используются с общими для бай и селл позиций фиксированные и альтернативные SL и TP, которые связаны с АТР через коэффициенты. Тэйк профит и стоп лосс устанавливается посредством модификации на следующем тике после открытия ордера. //Все позиции сопровождаются трейлинг стопом. Если получаемые значения во всех функциях где задействован стоп лосс меньше чем минимально разрешённое брокером то стоп лоссы устанавливается на минимально разрешённое брокером значение. //Закрытие позиций производится трейлинг стопом, по TP и SL. //Потребуются некоторые согласования по ТЗ и если обнаружатся ошибки, явная несуразица в формулах или логике нужно будет на них указать, предложить вариант как исправить или вообще убрать из ТЗ. extern string Общие_Функции = ""; extern bool AllowedWorkTime=true; //если true включает использование трёх настраиваемых входных временных независимых друг от друга интервалов работы в течение суток (гибкая часово/минутная настройка учитывающая и не вызывающая проблем с выходными днями, переходы на летнее/зимнее время, праздники, тех работы (ошибок, сбоев, смещения от задаваемых интервалов) extern bool UseTimeLocal=true; //если true включает привязку работы бота(в том числе расчёт таймера) ко времени системы компьютера, если false то ко времени брокера extern bool WorkPeriod=true; //Функция если включена то задаёт настраиваемый временной интервал в течении которого бот может использоваться и быть активным с гг.мм.дд по гг.мм.дд, если бота пробуют использовать за рамками разрешённого интервала то выводится сообщение "Fail" и бот не устанавливается на график терминала extern bool TradeAfterMaxDrawDown=true; // extern int Magic=555; //если не 0 то заданный магик ордеров, если 0 то любые ордера extern int Slippage=3; //если не 0 то включен и задаёт допустимое проскальзывание в пунктах extern int Attempts=3; //если не 0 то включен и задаёт число попыток открытия ордеров extern string МаниМенеджмент = ""; extern double Lot=0.01; //если не 0 то задаёт фиксированный лот, если 0 то лот рассчитывается как Risk. extern double Risk=0; //если не 0 то включен и задаёт процент риска на сделку. При этом если Lot>MaxLot то Lot=MaxLot и если Lot= TradeAllowPoint и для продаж (PRICE_High - Bid) >= TradeAllowPoint extern double FiltrATR1=0; //если не 0 то включен задаёт и сравнивает значение ATR текущего таймфрейма в пунктах за период 1бар должно быть >= FiltrATR1 extern double FiltrATR2=0; // если не 0 то включен задаёт и сравнивает значение в пунктах для покупок (ASK - PRICE_Low) <= значению ATR текущего таймфрейма в пунктах за период 1бар/FiltrATR2 и для продаж (PRICE_High - Bid) <= значению ATR текущего таймфрейма в пунктах за период 1бар/FiltrATR2 extern double RelationAtrToSpread=0; //если не 0 то включен расчитывает и сравнивает ATR за период 1бар в пунктах/(спред+1п) в пунктах >= RelationAtrToSpread extern double AllowedLangthTail=0; // если не 0 то включен рассчитывает и сравнивает на периоде 1 бар (общая длина свечи)в пунктах/(общая длина хвостов свечи в пунктах + 1п) >= AllowedLangthTail. Рассчитывается видимо так: (PRICE_High - PRICE_Low)в пунктах/(((PRICE_High - PRICE_Low) - |PRICE_OPEN - PRICE_CLOSE|)в пунктах + 1п) >= AllowedLangthTail. //Сопровождение позиций: обычный трал или альтернативная функция трал по процентам. extern string Обычный_Трал = ""; extern double TrailingStop=0; //если не 0 то включен и задаёт значение трэйлинг стопа в пунктах, дистанция на которой следует тралл (между текущей ценой и стоплоссом) extern double TrailingStart=0; //если не 0 то включен и задаёт значение профита в пунктах с которого стратует трэйлинг стоп extern double TrailingStep=0; //если не 0 то включен и задаёт значение шага трэйлинг стопа в пунктах extern string Трал_По_Процентам = ""; extern double PercentTrailingStart=0; //задаёт значение профита в пунктах по достижении которого стратует трэйлинг стоп по процентам extern double PercentTrailingStop=0; //задаёт значение профита в пунктах для расчёта стопа с учётом коэффициентов: extern double kPercentTrailingStopMin=0; //задаёт коэффициент extern double kPercentTrailingStopMax=0; //задаёт коэффициент //чтобы стоп лосс открытых ордеров мог сдвигаться только в сторону профита, держась на расстоянии в зависимости от пути пройденного ценой для покупок в сторону покупок, а для продаж в сторону продаж с момента открытия ордера до текущего значения цены(Ask для покупок, Bid для продаж), на каждом тике //Функция производит расчёт нового значения стоп лосса и последующее сравнение текущего значения стопа с новым значением //Считается так: для покупок: если значение профита в пунктах (|цена открытия ордера - Ask| - спред - комиссия) >= PercentTrailingStart в пунктах // и (|цена открытия ордера - Ask| - спред - комиссия) <= PercentTrailingStop в пунктах, то новое зачение для стоп лосса равно (|цена открытия ордера - Ask| - спред - комиссия) в пунктах*kPercentTrailingStopMin // а если значение профита в пунктах (|цена открытия ордера - Ask| - спред - комиссия) > PercentTrailingStop в пунктах, то новое зачение для стоп лосса равно (|цена открытия ордера - Ask| - спред - комиссия) в пунктах*kPercentTrailingStopMax // // для продаж: если значение профита в пунктах (|цена открытия ордера - Bid| - спред - комиссия) >= PercentTrailingStart в пунктах // и (|цена открытия ордера - Bid| - спред - комиссия) <= PercentTrailingStop в пунктах, то новое зачение для стоп лосса равно (|цена открытия ордера - Bid| - спред - комиссия) в пунктах*kPercentTrailingStopMin // а если значение профита в пунктах (|цена открытия ордера - Bid| - спред - комиссия) > PercentTrailingStop в пунктах, то новое зачение для стоп лосса равно (|цена открытия ордера - Bid| - спред - комиссия) в пунктах*kPercentTrailingStopMax //далее сравнение текущего значения стопа с новым, если новое больше то стоп передвигается на новое значение, при условии что это новое значение > Stoplevel и вне диапазона Freezlevel extern string Настройки_Индикатора = "MACDz"; extern int FastMA_Period=12;// Fast EMA Period extern int SlowMA_Period=26;// Slow EMA Period extern int SignalMA_Period=9;// Signal SMA Period /*Разное: Отключаемая инфопанель условная без лишних знаков, рамочек и символов с регулировкой расположения каждой строки по осям x, y с отступами, настройка размера и типа шрифта, цвета. Перечень строк и их содержание: -Если советник в режиме паузы (тот случай когда достигнута заданная по условиям макисмальная просадка или текущее время не соответствует по условим разрешённому для торговли временному интервалу) то выводится слово "Pause" -Значение текущего лота. Вид такой: "Lot 0.01" -Таймер по локальному времени ".." -Таймер по серверному времени ".." -Значение спреда "..." -Значение SLAtr. Вид такой: "SLAtr (k "..") = ".."" -Значение TPAtr. Вид такой: "TPAtr (k "..") = ".."" -Значение STOPLEVEL. Вид такой: "STOPLEVEL = .." Пользовательский сигнальный индикатор встроить в код бота с возможностью включать и отключать отображение его на графике Предоставить исходник советника в котором есть краткие описания где что кодируется по функционалу //Информация об открытии/закрытии позиций, о модификациях SL и TP, ошибки, важные события(например достижение заданной макс просадки, то как модифицируются стопы ордеров и т.п.) должна сохраняться в журнале; Вопросы: //??нужно прояснить в каких местах задействовать учёт Stoplevel и Freezlevel //??нужно прояснить корректность расчётов и формул в случае совпадения некоторых значений из OHLC(например когда мы в формуле при расчёте используем PRICE_Low и при этом значения PRICE_Low и PRICE_OPEN совпадают, тоесть свеча без нижнего хвоста) не возникнет ли в таких и других подобных случаях ошибок расчётов и сбоев //??в некоторых формулах числитель или в знаменателе может быть 0, нужно прояснить как корректно обрабатывать такие случаи (например спред может быть 0 и комиссия) //??нужна проверка перед открытием позиции (защита от плохой связи или рваных котировок) не было ли пропусков баров/котировок за (x) последних баров и имеются ли (y) последних баров