Игрушка для тестера

IgRU4ek

Новичок форума
Это не грааль!!!

Идея была:
во-первых, сделать полнофункциональный шаблон-машину по обслуживанию выставленных ордеров по нескольким не зависимым стратегиям;
во-вторых, несколько стратегий работая параллельно и управляемые одним "мозговым центром" могут компенсировать неправильные входы друг друга.
Наверно, выразился не совсем понятно... Тогда по-порядку.
Десяток (в данном случае 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-только доливка к первоначальному ордеру
Предлагаю эту игрушку для "любителей" поэкспериментировать в тестере (за "удачную" оптимизацию отблагодарю рабочей версией). Хочу оговориться, что стандартным методом через тестер терминала советник не оптимизируется (только тестовый проход), так как внешние переменные (большинство) имеют тип string.
Выслушаю интересные идеи и конструктивную критику.
Желающим посплетничать и поспорить ничего не доказываю и разговор не поддерживаю - нет времени на это.
Свой интерес Вы можете проявить через личку и, подтверив совсем не значительной суммой в 6$, получите на мыло Демо-версию этой "игрушки"!

P.S. Работа с пятью знаками предусматривалась, но не тестировалась!!!
P.P.S. Скрин советника во вложении.
 

Вложения

  • скрин3.jpg
    скрин3.jpg
    125,3 КБ · Просмотры: 85
Верх