Сделал я как-то такую штуку ... - страница 14

 

Привал оказывается забанен, и вообще как-то замолчал, поэтому начну с мессиджа для него: Сергей, если ты это читаешь, дай как-нибудь знать, получил ли ты мой ответ на твоё письмо.


Сделал тем временем скрипт, размечающий уровни по ещё одной идее - и эти уровни замечательно выглядят. К сожалению он тяжеловат для сбора хорошей статистики. Но начинает закрадываться подозрение, что на ценовом графике замечательно будет выглядеть практически любая система уровней :)


Кроме того выбрал время и написал тестерного советника по описанному выше алгоритму, он, повторюсь, в моём понимании почти точно соответствует описанному Привалом. Толком правда не испытывал поскольку только закончил, да и не люблю я советников. Но вроде работает. Вот для наглядности его start(), полный код в аттаче.

int start() {
  if (Start) {
    Start = false;
    HalfPoint = 0.5*Point;
    DLvl = 1000*Point;
    RecDLvl = 1.0/DLvl;
    dStopLevel = StopLevel*Point;
  }

// Блок сопровождения ордеров
  double Price;
  bool IsBuyStop = false;
  bool IsSellStop = false;
  for(int ord=OrdersTotal();ord>=0;ord--) {
    if(OrderSelect(ord,SELECT_BY_POS,MODE_TRADES)==false) continue;
    switch(OrderType()) {
      case OP_BUY: 
        if (TimeCurrent()-OrderOpenTime() > LT) OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);
        break;
      case OP_SELL: 
        if (TimeCurrent()-OrderOpenTime() > LT) OrderClose(OrderTicket(),OrderLots(),Ask,5,Yellow);
        break;
      case OP_BUYSTOP: 
        IsBuyStop = true;
        Price = GetBuyStopLevel(dStopLevel);
        if (OrderOpenPrice()-Price > HalfPoint) OrderModify(OrderTicket(),NormalizeDouble(Price,Digits),0,0,0,Blue);
        break;
      case OP_SELLSTOP: 
        IsSellStop = true;
        Price = GetSellStopLevel(dStopLevel);
        if (Price-OrderOpenPrice() > HalfPoint) OrderModify(OrderTicket(),NormalizeDouble(Price,Digits),0,0,0,Yellow);
        break;
    }  //  switch(OrderType())
  }  //  for(int ord=OrdersTotal();ord>=0;ord--)
  
//  Блок установки орлеров  
  static int Mnt;
  static int PreMnt;
  Mnt = TimeMinute(TimeCurrent());
  if (Mnt != PreMnt) {
    PreMnt = Mnt;
    if (!IsBuyStop) OrderSend(Symbol(),OP_BUYSTOP,Lots(),NormalizeDouble(GetBuyStopLevel(dStopLevel),Digits),5,0,0,NULL,0,0,Blue);
    if (!IsSellStop) OrderSend(Symbol(),OP_SELLSTOP,Lots(),NormalizeDouble(GetSellStopLevel(dStopLevel),Digits),5,0,0,NULL,0,0,Yellow);
  }
  return(0);
}

Дальше без Привала хода нет, он должен сказать, его это тест или не его.


P.S. Эксперт только для пятизнака.

Файлы:
 

Изменил эксперта, если мы ориентируемся на разворот у уровня, то при первом подходе к уровню стоп-ордер ставиться не должен. Грубо говоря предыдущий эксперт должен давать одинаковое количество баев и селлов у каждого уровня, а этот на один бай больше при подходе сверху и уходе наверх и на один селл больше если наоборот.

Наклон слива для уровня 00 и стоплевела 20 пп (пятизнак) у него несколько поменьше спреда на сделку, это евродоллар с лета 2004

Зависимость баланса от уровня (то есть оптимизация по параметру Delta с шагом 50 п (пятизнак)) вполне соответствует полученным ранее данным по пересечениям минутных баров


По логике вещей как раз теперь и пришло время потолковать о многих вещах; о башмаках, о кораблях, о сургучных печатях, о капусте и о королях, и о других контекстах и фильтрах. :)

 

попробовать ввести стопы и разнести стратегии на пробой и отскок по времени/волатильности.

 

Количество возможных вариантов весьма велико, именно поэтому имеет смысл коллективное исследование. Понятно что нужно варьировать код, то есть без неких начальных навыков в mql обойтись будет трудно. Главное - польза будет только если результаты и способ их получения будут публиковаться. Ну ладно, грааль человек может зажать :), но уж отрицательные результаты народ точно должен знать.


Стопы ввести - это уж совсем стандартная вставка в код. Но, по моему мнению, если это не далёкие "страховые" стопы то ничего кроме ещё одного способа подгонки это не даст.


Сделать статегию пробойной как будто очень легко - достаточно запретить установку ордеров если есть любой ордер того же направления (а не только отложенный) и установить достаточно большой стоплевел (сравнимый с расстоянием между уровнями). А вот сделать корректную только отбойную из той простой и красивой схемы у меня так просто не получилось. По идее нам нужно засекать факт пересечения уровня и ставить ордер только после этого. Тонкость в том, что этот факт именно для ближайшего уровня стандарным способом не засекается - ведь ближайший уровень именно в момент пересечения и отскакивает. И длиться пересечение может целых три тика, если средний попадает точно на уровень. Поэтому результаты из предыдущего поста получены на заметно изменённом советнике, я не выложил его здесь потому что предложил для кодобазы ( а как ещё понять уровень реального интереса к теме :) ).


Фильтры по времени считаются одними из самых эффективных и обычно достаточно просты в реализации, было бы интересно взглянуть на результаты. Можно в личку :)


Фильтры по волатильности, естественно, тоже представляют большой интерес, но тут вариантов построения ещё больше, нужны конкретные варианты и результаты по ним.

 
Эксперта можно взять здесь.
 

В эксперте LevelsTrade_1.mq4 обнаружилась неточность, приводящая к асимметрии бай-селл. Вот в этой функции нужно заменить одну строку:

double GetSellStopLevel(double StopLvl) {
  int ILvl = (Bid+HalfPoint)*RecDLvl;
  double DownLvl = DLvl*ILvl;
//  if (DownLvl > Bid-StopLvl-HalfPoint) DownLvl -= DLvl ;
  if (Bid-StopLvl < DownLvl-HalfPoint) DownLvl -= DLvl ;
  return (DownLvl);
}

Здесь неправильная строка закомментирована. Правильный вариант приложен к посту.

Файлы:
 
Balbesik06:



Candid!

Я Вас увидел и обращаюсь.

Вопрос не по теме.

Не хотели бы Вы вернуться к Зиг-Загу?

Я писал Вам в "личку" ответа не последовало.

А по советнику (хотите спорьте, хотите нет), у меня статистика (на своем) 7(+) - 1(-), но советник другого автора.

 И очень много вопросов.

Давайте так, если Вы проверяете (в личке) и статистика подтверждается, Вы по своей схеме корректируети мне Зиг-Заг.

А алгоритм (по советнику) имеете право потом выложить.

Устраивает?

С Уважением. 

 
Balbesik06:

...

Я писал Вам в "личку" ответа не последовало.

В личке ничего не было, попробуйте ещё раз. В крайнем случае можно по мейлу, в профиле есть адрес странички, там легко найти мой мейл
 
Balbesik06:

"... В крайнем случае можно по мейлу,,,"

Да пробовап - мимо темы.

Суть простая - демонстрировал на ONIX все "слетают" кроме Вашего.

Не вижу смысла в любом севетнике, если он "НЕ ДЕРЖИТ" котировки.

С Уважением. 


P.S. А попробуйтие (есле не трудно) Вы написать - Здравствуйте.
 

Хм, проверил личку на Ониксе(а я редко туда заглядываю), там пусто. И уж совсем загадочны проблемы с почтой.

Евгений, давайте так: Проверьте свою личку на этом форуме, там с позавчера должно лежать сообщение от меня. Просто ответьте на него, опишите проблему или дайте ссылку на её описание, напишите что конкретно Вам нужно.

Насколько я понял, есть проблема с подвисанием вершин разных Зигзагов. А у моего этой проблемы нет. Я помню, что когда я писал тот зигзаг (а речь скорее всего идёт о CZZ) проблема подвисания вершин была едва ли не всеобщей. Я пытался понять её причину и, как мне кажется, понял. Но с тех пор утекло много воды и, думаю, сейчас масса зигзагов также больше не подвисают.

В любом случае, непонятно что именно Вам нужно? Чтобы я переделал все зигзаги, входящие в комплект ZUP?