Это не грааль!!!
Идея была:
во-первых, сделать полнофункциональный шаблон-машину по обслуживанию выставленных ордеров по нескольким не зависимым стратегиям;
во-вторых, несколько стратегий работая параллельно и управляемые одним "мозговым центром" могут компенсировать неправильные входы друг друга.
Наверно, выразился не совсем понятно... Тогда по-порядку.
Десяток (в данном случае 8, но добавить любую стратегию не проблема) внутри одного советника выставляют свои ордера каждый на своём периоде (TF) (по "своим правилам") со своими Magic-ами.
Процесс выставления можно контролировать различными фильтрами, как краткосрочной тенденции, так и долгосрочной. Внутри присоединён блок расчёта тенденции (тренда) по шести разным индикаторам по шести TF.
Можно контролировать количество выставляемых в рынок ордеров по каждой стратегии. Можно контролировать минимальное расстояние между рыночными ордерами, как одной стратегии, так и всех соседних. Можно установить контроль нового бара. Можно задать размерность (лот) и принцип формирования величины лота следующего выставляемого очередного ордера. Для любителей Мартина есть возможность установить коэффициент. Всё это, как отдельно для каждой стратегии, так и совместно.
Стопы можно формировать пятью разными вариантами на выбор.
Это что касается процесса входа в рынок.
Что касается выхода:
Работу выхода можно пропускать через "трендовые" фильтры.
Ну, и напоследок, работа выхода может контролироваться без модификации стопов ордеров - виртуально. Если не включены виртуальные стопы, а ДЦ раздвигает стандартный STOPLEVEL, то советник автоматически переходит (настройка отключаемая) на виртуальные стопы.
"В бою" не боится реквот и организована совместная работа нескольких советников на одном счету.
Ведёт отключаемый детализированный лог.
Выводит сводную индикаторную таблицу.
Показывает на чарте статистику работы по каждой стратегии.
Это из реализованного.
НАСТРОЙКИ:
Предлагаю эту игрушку для "любителей" поэкспериментировать в тестере (за "удачную" оптимизацию отблагодарю рабочей версией). Хочу оговориться, что стандартным методом через тестер терминала советник не оптимизируется (только тестовый проход), так как внешние переменные (большинство) имеют тип string.
Выслушаю интересные идеи и конструктивную критику.
Желающим посплетничать и поспорить ничего не доказываю и разговор не поддерживаю - нет времени на это.
Свой интерес Вы можете проявить через личку и, подтверив совсем не значительной суммой в 6$, получите на мыло Демо-версию этой "игрушки"!
P.S. Работа с пятью знаками предусматривалась, но не тестировалась!!!
P.P.S. Скрин советника во вложении.
Идея была:
во-первых, сделать полнофункциональный шаблон-машину по обслуживанию выставленных ордеров по нескольким не зависимым стратегиям;
во-вторых, несколько стратегий работая параллельно и управляемые одним "мозговым центром" могут компенсировать неправильные входы друг друга.
Наверно, выразился не совсем понятно... Тогда по-порядку.
Десяток (в данном случае 8, но добавить любую стратегию не проблема) внутри одного советника выставляют свои ордера каждый на своём периоде (TF) (по "своим правилам") со своими Magic-ами.
Процесс выставления можно контролировать различными фильтрами, как краткосрочной тенденции, так и долгосрочной. Внутри присоединён блок расчёта тенденции (тренда) по шести разным индикаторам по шести TF.
Можно контролировать количество выставляемых в рынок ордеров по каждой стратегии. Можно контролировать минимальное расстояние между рыночными ордерами, как одной стратегии, так и всех соседних. Можно установить контроль нового бара. Можно задать размерность (лот) и принцип формирования величины лота следующего выставляемого очередного ордера. Для любителей Мартина есть возможность установить коэффициент. Всё это, как отдельно для каждой стратегии, так и совместно.
Стопы можно формировать пятью разными вариантами на выбор.
Это что касается процесса входа в рынок.
Что касается выхода:
- на выбор несколько вариантов трейлинга;
- БУ;
- на выбор несколько вариантов частичного закрытия (по частям), как по определённым пропорциям, так и по времени;
- динамические стопы;
- трейлинг профита.
Работу выхода можно пропускать через "трендовые" фильтры.
Ну, и напоследок, работа выхода может контролироваться без модификации стопов ордеров - виртуально. Если не включены виртуальные стопы, а ДЦ раздвигает стандартный STOPLEVEL, то советник автоматически переходит (настройка отключаемая) на виртуальные стопы.
"В бою" не боится реквот и организована совместная работа нескольких советников на одном счету.
Ведёт отключаемый детализированный лог.
Выводит сводную индикаторную таблицу.
Показывает на чарте статистику работы по каждой стратегии.
Это из реализованного.
НАСТРОЙКИ:
Код:
extern string _________TX0________ = "========Общие настройки советника=========";
extern int MAGIC = 555;
extern string ExpComment = "IgRU4ka";
extern string Lots = "0.1;0.1;0.1;0.1;0.1;0.1;0.1;0.1;0.1";
extern double MaxLots = 2.0; // Максимальный размер лота
extern bool ShowCommentInChart = True; // Показывать комментарии на графике.
//extern bool ShowAllStatistic = True; // Показывать комментарии на графике.
extern int ProfitMin = 50; // Уровень минимальной прибыли на MINLOT
extern int Popravka = 15;
extern string StopLoss = "0,0,0,0,0,0,0,0,0";
extern string TakeProfit = "0,0,0,0,0,0,0,0,0";
extern string VirtualSL = "0,0,0,0,0,0,0,0,0"; // Если StopLoss = 0, а VirtualSL != 0, VariantSTOPS_SL работает для VirtualSL, а если StopLoss != 0, обыкновенный SL выставляется по этому значению
extern string VirtualTP = "0,0,0,0,0,0,0,0,0";
extern string MaxYbutok_MinLot = "0,0,0,0,0,0,0,0,0"; // На MINLOT в пп.
extern string _________TX1________ = "================STRATEGY================"; // Разные стратегии выставления ордеров
extern string TM_Strategy = "0,0,0,30,0,0,0,0,0";
extern string Use_Strategy = "0,0,0,0,0,0,0,0,0";
extern string DisableStopTrade = "0,0,0,0,0,0,0,0,0"; // Возможность остановить выставление ордеров в отдельно взятой стратегии
extern string Use_CheckNewBars = "0,0,0,0,0,0,0,0,0"; // На одном баре выставляется только один ордер
extern string Use_CheckArea = "0,0,0,0,0,0,0,0,0"; // Контроль зоны выставления следующего ордера
extern int Area = 20; // Расстояние в пп. до следующего ордера
extern string MaxOrders = "10,1,1,1,1,1,1,1,1"; // Макс. кол-во ордеров по в одной стратегии
extern string _____Fortrader______ = "=========Стратегия(1)=========";
extern int Otstup = 10;
extern int CountUPBars = 3; // Настройка паттерна, кол-во баров
extern int CountDWBars = 3; // Настройка паттерна, кол-во баров
extern string ____ProfitGarant____ = "======Стратегия(3)=====";
extern bool CloseSwingSygnal = true; // Закрывать ордер по обратному сигналу
extern string _____PatternMTF_____ = "=========Стратегия(4)========";
extern int Cena_PMTF = 1; // Цена: 1 - открытия; 2 - закрытия; 3 - максимум; 4 - минимум;
// 5 - (H+L)/2; 6 - (H+L+C)/3; 0 - (H+L+C+O)/4;
extern int CountBars = 7;
extern int MinCandle = 15; // Минимальная величина свечи в пп.
extern double Koef = 2.0;
extern int Otkat = 10;
extern bool ReversSygnal = false; // Открывать ордер по обратному сигналу
extern bool SendSwingSygnal = false; // Открывать ордер по обратному сигналу
extern string ______Pipsator______ = "=========Стратегия(5)=========";
extern int ShiftBars_PiP = 5; // Сдвиг баров
extern string ____CandlesStar_____ = "=======Стратегия(6)========";
extern int Porog_CS = 30; // Подтверждение тенденции свечной комбинации
extern bool flat = false;
extern bool Bear = true;
extern bool Bull = true;
extern bool TMc = true;
extern bool TMhl = false;
extern string _______Star3________ = "==========Стратегия(7)===========";
extern int Porog_S3 = 10; // Подтверждение тенденции свечной комбинации
extern string _______3_sve4i______ = "=========Стратегия(8)==========";
extern int NCandles = 3; // Количество просчитываемых свечей
extern string _________TX2________ = "***Настройки контроля тренда***";
extern string ControlTrend_Short = "0,0,0,0,0,0,0,0,1"; // 0-без контроля, 1-с контролем VariantCTRL_Short
extern string ControlTrend_Long = "0,0,0,0,0,0,0,0,0";
extern string VariantCTRL_Short = "1,1,1,1,1,1,1,1,8"; // 0-без контроля, до 8
// 0: регулируемый контроль отсутствует
// 1: по 2 MA
// 2: по 3 MA
// 3: по тенденции open\close последних ExCountPeriod свечей
// 4: по показаниям библиотеки индикаторов b-IndTrend Trend Short
// 5: по показаниям библиотеки индикаторов b-IndTrend ACC_short
// 6: по показаниям библиотеки индикаторов b-IndTrend Trend Short && ACC_short
// 7: по свечным уровням
// 8: по CCI
extern string ________TX21________ = "Настройки MA для 1/2-го вариантов:";
extern int MA1TF = 1440;
extern int MA1Period = 20;
extern int MA2TF = 1440;
extern int MA2Period = 80;
extern string ________TX23________ = "Настройки для 3-го варианта:";
extern string ExCountPeriod = "5,5,5,5,5,5,5,5,5"; // Для варианта 3. Количество просчитываемых баров
extern string ________TX27________ = "Настройки для 7-го варианта:";
extern int HighBar = 50; // сколько баров будет просматриваться, для поиска наибольшего значения Хая фильтр
extern int LowBar = 50; // сколько баров будет просматриваться, для поиска наименьшего значения Лоу фильтр
extern int Zone = 20; // зона расстояние в пунктах от хая и лоу фильтр
extern string ________TX28________ = "Настройки для 8-го варианта:";
extern int CCIper = 10; // Period усреднения для вычисления индикатора CCI
extern int CCIlev = 50; //
extern string ________EXIT________ = "**********ВЫХОД с рынка**********"; // Ступенчатое закрытие ордеров
extern string VariantExit = "0,0,0,0,0,0,0,0,0";
// 0: регулируемый выход отсутствует
// 1: ActivePosManagerCloser() - 1/2 закрытия на LevelOne, и окончательное закрытие на LevelTwo
// 2: ActivePosManagerCloserDP() - ступенчатое закрытие на каждом 1\4 промежутке до TP
// 3: ActivePosManagerDP2() - ступенчатое закрытие по MA
// 4: fTimeOpenedProtection() - закрытие ордеров по времени жизни и маленькому профиту для пипсовки
// 5: PartClose() - ступенчатое закрытие по заданным параметрам
extern string ______1вариант______ = "Настройки для 1-го варианта:";
extern int LevelOne = 30;
extern int LevelTwo = 100;
extern string ______2вариант______ = "Настройки MA для 3-го варианта:";
extern int perema1 = 7;
extern int perema2 = 21;
extern int persma3 = 98;
extern int perema4 = 365;
extern string ______4вариант______ = "Настройки для 4-го варианта:";
extern int LimitTime_1 = 60;
extern int LimitTime_2 = 140;
extern int LimitTime_3 = 170;
extern int LimitTime_4 = 200;
extern int LimitTime_5 = 240;
extern int pips_1 = 50;
extern int pips_2 = 40;
extern int pips_3 = 30;
extern int pips_4 = 20; // Размер убытка до LimitTime_5
extern int pips_5 = 40; // Размер убытка после LimitTime_5
extern string ______5вариант______ = "Настройки для 5-го варианта:";
extern string LevelClose = "10/20/5"; // Уровни закрытия. Например, при параметрах 10/20/5 первое закрытие выполняется при достижении ордером прибыли в 10 пунктов, затем еще через 20 пунктов и еще через 5 пунктов.
extern string PercentClose = "50/25/25"; // Процент закрытия (через разделитель "/") для соответствующего уровня. Здесь отсчет идет от лота первого ордера. Если исходный ордер открыт с лотом 1.0 лот, закрывается 50% - 0.5, затем 25% от 1.0 - 0.3 и наконец 0.2
extern string ________JUMP________ = "Настройки для JUMP:"; // Резкое движение цены в противоположную сторону
extern string Use_JumpExit = "0,0,0,0,0,0,0,0,0";
extern int Jump = 20; // Резкое изменение цены в пп.\мин.
extern string _________TX3________ = "******Управление профитом******";
extern string BULevel = "0,0,0,0,0,0,0,0,0"; // Уровень срабатывания БУ (с перемещением SL)
extern string BUSize = "0,0,0,0,0,0,0,0,0"; // Величина перемещения SL
extern string VBU_Start = "0,0,0,0,0,0,0,0,0"; // Виртуальный БезУбыток
extern string VBU_Value = "5,5,5,5,5,5,5,5,5";
extern string _______TRAILING_____ = "***********TRAILING************"; // Чтобы работал Trailing до OrderProfit() < 0 - SL и TP обязательно != 0
extern string MethodTraillingStop = "0,0,0,0,0,0,0,0,0"; // Метод трейлинга 0-4
// 0: Трейлинг не используется
// 1: Простой (Simple) трейлинг
// 2: SarTrailingStop по Parabolic
// 3: ATRTrailingStop по ATR
// 4: DinamicTrailing от ширины экстремумов на TF
// 5: по Price Channel (индикатор)
extern bool TSOnlySL = True; // Тралить только SL
extern bool AllowLossSL = True; // Тралить SL на LOSS-участке
extern bool AllowLossTP = False; // Тралить TP на LOSS-участке
extern string _______SIMPLE_______ = "Настройки Simple Trailing";
extern string TrailingStop = "0,0,0,0,0,0,0,0,0";
extern string TrailingShag = "5,5,5,5,5,5,5,5,5";
extern string UseVirtualTrailing = "0,0,0,0,0,0,0,0,0"; // Trailing будет работать без модификации стопов у ордеров
extern string ______KillLoss______ = "Настройки KillLoss";
extern string Use_KillLoss = "0,0,0,0,0,0,0,0,0"; // Использование антилоссового трала
extern string SpeedCoeff = "0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5";
extern string ________SAR_________ = "Настройки SAR";
extern int SAR_TF = 1; // Таймфрейм: 0-текущий на графике; 1-TF стратегии
extern double SARstep = 0.005;
extern double SARmax = 0.02;
extern string ________ATR_________ = "Настройки ATR";
extern int ATR_TF = 1; // Таймфрейм: 0-текущий на графике; 1-TF стратегии
extern int ATR_Period = 9; // Период усреднения
extern double Fast_ATR_Trailing = 1.0;
extern double ATR_Trailing = 2.0;
extern string _______Pr_Ch________ = "Настройки Price Channel";
extern int PrCh_ChannelPeriod = 240;
extern int PrCh_Shift = 0;
extern string ___TrailingProfit___ = "Настройки TrailingProfit";
extern string Use_TrailingProfit = "0,0,0,0,0,0,0,0,0";
extern int TP_Start = 150; // Размер профита при котором начинает работать TrailingProfit
extern int TP_Value = 100; // Размер откатного движения при котором закроются все ордера
extern string _________TX4________ = "******Управление СТОПАМИ*******";
extern string VariantSTOPS_SL = "0,0,0,0,0,0,0,0,0";
extern string VariantSTOPS_TP = "0,0,0,0,0,0,0,0,0";
extern bool ControlMINStops = False; // Если ДЦ раздвигает (увеличивает) стопы, советник переходит на виртуальные стопы
// 0: согласно заданному значению в пипсах, или по минимально разрешённому STOPLEVEL
// 1: по max\min предыдущего или текущего дня плюс поправка, или по минимально разрешённому STOPLEVEL
// 2: по max\min предыдущего часа плюс поправка, или по минимально разрешённому STOPLEVEL
// 3: вычисляется динамически по max\min последних StopLossBars\TakeProfitBars баров плюс поправка, или по минимально разрешённому STOPLEVEL
// 4: вычисляется динамически по среднему размеру последних StopLossBars\TakeProfitBars баров плюс поправка
// для 3-4 вариантов StopLossBars\TakeProfitBars != 0 !!!
// 5: вычисляется динамически по индикатору Waddah_Attar_Hidden_Level
// 6: вычисляется динамически по индикатору AvalsLevels
extern string StopLossBars = "0,0,0,0,0,0,0,0,0";
extern string TakeProfitBars = "0,0,0,0,0,0,0,0,0";
extern string UseDinamicVirtualSL = "0,0,0,0,0,0,0,0,0"; // Чтобы работал DinamicVirtualSL, нужно чтобы VirtualSL > 0
extern string UseDinamicVirtualTP = "0,0,0,0,0,0,0,0,0";
extern int DinVirtSTOPS_Period = 0; // Period обновления стопов: 0-текущий на графике; 1-TF стратегии
extern string SpecialConditions = "0,0,0,0,0,0,0,0,0"; // Специальные условия для срабатывания виртуальных стопов и MaxUbutok
// 0: без условий
// 1: слежение за состоянием Trend_Long
// 2: слежение за состоянием Trend_Short
// 3: слежение за состоянием Trend_Long и свечного индикатора
extern string SpecCondFOR = "0,0,0,0,0,0,0,0,0"; // Специальные условия срабатывания для:
// 0: для виртуальных стопов, MaxUbutok и PartitionExit (ступенчатое закрытие ордеров)
// 1: для MaxUbutok и PartitionExit (ступенчатое закрытие ордеров)
// 2: для виртуальных стопов и MaxUbutok
// 3: PartitionExit (ступенчатое закрытие ордеров)
extern string ____SetupVirtLine___ = "*******Setup Virtual Line********";
extern bool CreatVirtualObject = False; // Показывать на графике линии виртуальных стопов
extern bool ShowTextForObject = False; // Показывать на графике подписи для линий виртуальных стопов
extern int VertSdvigText = 5; // Вертикальный сдвиг текста
extern color ColorLineBU = Gold; // Цвет линий БУ
extern color ColorLineSL = Magenta; // Цвет линий SL
extern color ColorLineTP = RoyalBlue; // Цвет линий TP
extern color ColorLineMaxUbutok = Chartreuse; // Цвет линий MaxUbutok
extern string ________TX5_________ = "********Money Management*********";
extern int StopMarginPercent = 50; // Процент свободной маржи от Баланса при котором новые ордера не выставляются
extern int RiskDepoPercent = 50; // При каком лоссе от Depo закрываются все ордера
extern string VariantFormationLot = "0,0,0,0,0,0,0,0,0"; // Вариант формирования размера лота
// 0: с приростом прибыли по стратегии на PipsDeltaDepo увеличивается лот на MINLOT
// 1: Martingale
// 2: с приращением к каждому последующему открываемому ордеру MINLOT
// default: MINLOT
extern string ________0вар________ = "Настройки для 0-го варианта:";
extern double PipsDeltaDepo = 1000.0; // Прирост прибыли по стратегии для увеличения лота на MINLOT
extern string ________1вар________ = "Настройки для 1-го варианта:";
extern double KoefM = 1.67; // Коэффициент Martin'a
extern string OnlyWay = "0,0,0,0,0,0,0,0,0"; // 0-выставлять ордера в обоих направлениях; 1-только доливка к первоначальному ордеру
Выслушаю интересные идеи и конструктивную критику.
Желающим посплетничать и поспорить ничего не доказываю и разговор не поддерживаю - нет времени на это.
Свой интерес Вы можете проявить через личку и, подтверив совсем не значительной суммой в 6$, получите на мыло Демо-версию этой "игрушки"!
P.S. Работа с пятью знаками предусматривалась, но не тестировалась!!!
P.P.S. Скрин советника во вложении.