dmitry1966

 
Уровень 6

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от dmitry1966



О Чубайсе Комментариев 5
2019-01-25 08:30:24Рейтинг 0

Специально для lbv19 Комментариев 7
2015-03-13 10:38:21Рейтинг 0

День 19 декабря. Сумасшествие. Комментариев 10
2014-12-19 20:35:03Рейтинг 0

И чо Комментариев 12
2014-11-21 21:21:03Рейтинг 0

Еще раз для lbv19, хоть и напрасно Комментариев 2
2015-03-13 21:25:41Рейтинг 0

Немного переделать советник по стратегии Трэнд Ривер

Просьба, если возможно, переделать советник для МТ4 по стратегии Трэнд Ривер.
О советнике, коротко:
По ходу движения цены советник отрисовывает средние скользящие: одну по верхним значениям свечей, вторую — по нижним. А на заданном в параметрах расстоянии (MA_Level) отрисовываются уровни. По умолчанию установки: скользящая периодом 233, уровни 15 (пробойный), 89, 144 и 233. Все это регулируется в настройках. Если цена пересекает уровень 15 (для восходящего тренда) или -15 (для нисходящего) и закрывается над/под ним, то открываются 3 сделки с регулируемыми в установках лотами. Тейк-профиты выставляются по следующим уровням (т е 89, 144 и 233), а стоп-лосс на противоположном первом (-15 для восходящего тренда), и скользят они вместе с изменением уровней скользящих средних. При достижении ценой уровней тейк-профита каждая сделка закрывается, аналогично и при развороте цены и касании уровня стоп-лосса, ордер автоматически закрывается. Файл с более подробным описанием советника вместе с самим советником в архиве.
Что нужно сделать, — в советнике стоп лоссы для всех ордеров расположены на одном уровне (-15 для восходящего тренда), ползут за скользящей. Просьба переделать так, чтобы при закрытии 1 лота по тэйк профиту стоп лоссы двух оставшихся переносились в уровню открытия сделок (к уровню 15 при восходящем тренде), т е, по сути, ставились как можно ближе к безубытку. При закрытии по профиту 2 лота, стоп лосс 3-го переносился к уровню закрытия 1 лота (к уровню 89 при восходящем тренде). Перенесенные стопы должны так же следовать за скользящей.
И еще одно — пока изначально открытые 3 лота не закроются, больше никаких сделок открывать советник не должен. А то он какого то беса иногда (далеко не всегда) открывает сделки не на уровне 15, а на 89, 144 и 233 в ту же сторону с профитом в несколько пунктов и стопом как у всех ордеров. И вместо профита — лось. И еще какой.
Все

(файл удален по требованию правообладателя)
  • +3
  • Просмотров: 7112
  • 6 марта 2015, 08:42
  • dmitry1966
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Усреднитель части убыточного ордера
Следующая запись в группе  
индикатор Bid View2.0
05 марта 2015
06 марта 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (23)

+
+1
Советник интересный, с удовольствием покопаюсь в его коде. Но только после 12-го числа смогу это сделать. Если до этого дня кто-то другой вам поможет — напишите мне об этом, чтобы я знала.
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 6 марта 2015, 13:28
+
0
Если возможно. Что то типа ММ. Смысл в том, чтоб закинуть на ВПС советника и забыть о нем на полгода. Изначально общий лот ставится руками. Возможно ли, чтоб лот при совершенных сделках перевычислялся?
На пальцах: 1000 депо, 0,5 лот (общий, каждый разделен пропорционально). Проходит сделка. Депо 1200 (+20%) И лот тогда тоже общий +20%? 0,5+20% =0,6 с разумным округлением? А если депо упало на 20%, то и общий лот на эти же на 20% падает (не ниже минимума, конечно)?
Я не программист, не могу оценить сложность задачи. Кстати, с наступающим!
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 6 марта 2015, 19:06
+
+1
Как то задание становится объемнее *shock*  Давайте вначале постараюсь разобраться в чужом советнике, если получится, то сначала попробую подправить в нем то, что вы просили в топике.
Смысл в том, чтоб закинуть на ВПС советника и забыть о нем на полгода.
Мечта любого — советник-грааль в форексе :D 
Спасибо за поздравление
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 6 марта 2015, 19:17
+
0
Извините, действительно пербарщиваю. Не обижайтесь. Это как «мысли на лестнице» — Вот придумал, что еще, но увы — уже спускался по лестнице. А Грааль… То, что его не существует — вовсе не повод отказаться от поисков (Галахад (с))
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 6 марта 2015, 19:23
+
0
Не горит, после 12, так после 12. На тесте он результаты любопытные показывает. По поводу ненужных ордеров, которые он открывает, прилагаю картинку. По какому принципу он их открывает — непонятно. Ордера совершенно бессмысленные. Тэйк в 3 пунктах от цены, а стоп чуть не в сотне…
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 6 марта 2015, 13:42
+
+1
Про код. Сложилось впечатление, что его писал хороший, добротный программист, но который не использовал советники ни в торговле, ни в тестере ( 
Я могу его переписать, но он от этого прибыльным не станет. Видели, что мы здесь обсуждали его? zakaz.opentraders.ru/22748.html
Там комментарий beton2011: Я долго тестировал с разными настройками, результат один, баланс уменьшается
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 9 марта 2015, 20:13
+
0
Предыдущего обсуждения не видел, к сожалению. Не понятно, я его тестировал на разных парах с июля по 31 декабря, он завалил евру и швейцарца, в нуле остался на фунте, а по канадцу, йене, и австралийцу дал неплохой профит. Но, возможно, я что то делал не правильно при тесте, т к тестировал советник вообще впервые. Ставил его на центовом счете 4-го марта на йене, новозеландце, евро-фунте, австралии и канаде, общий итог — с 1100 центов получилось 1700 с копейками. Закрылся по стопам на канаде и австралии, все остальное — профит. Правда, я отключал советник и руками передвигал стоп-лоссы, на НЗеландии и еврофунте он по ним и закрылся (по передвинутым), потом открылся заново и тоже закрылся в профите. Но тут еще и нонфармы были, так что это, конечно, не показатель. Учитывал ли при тестировании бетон открытие ненужных ордеров, непонятно, и, если стоп лоссы не переносились (а в оригинале они не переносятся), то слив понятен. Он может в профите закрыть первый лот, а остальные два уйдут на стоп лосс — вот и убыток. 2 убыточные сделки одну прибыльную перебьют по-любому.
Если время будет, — все же попробуйте поковыряться с советником. Что то мне шепчет, не все тут однозначно…
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 10 марта 2015, 08:42
+
+1
хорошо, я его перепишу, и посмотрим, получится ли
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 10 марта 2015, 17:50
+
+1
Написала по стратегии Trend River и индикатор и советник:
opentraders.ru/downloads/629/
Тестируйте, и уже будем сюда вносить ваши пожелания.
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 12 марта 2015, 14:48
+
0
Спасибо!!! :) 
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 12 марта 2015, 15:03
+
0
Работает. Я так понял, стоп лоссы ордеров не переносятся сейчас? На всякий случай, выкладываю картинку, что нагляднее была идея. Смысл в том, чтоб минимизировать убытки в случае, если цена пойдет не туда, т е после закрытия 1-го лота в плюсе, стопы остальных переносятся. То же после закрытия 2-го лота, переносится третий стоп. Т е если если хоть один лот закрылся в плюсе, то то это уже почти наверняка плюс (или маленький минус, в крайнем случае), а если закрылись с прибылью 2 лота, то и третий закроется либо на своем уровне по тэйку, либо на уровне своего стопа (который перенесен на уровень тэйка 1-го лота)
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 12 марта 2015, 15:45
+
0
сделаю
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 12 марта 2015, 16:17
+
0
Заменила файл: opentraders.ru/downloads/629/
проверяйте
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 13 марта 2015, 14:24
+
0
Скачал, спасибо!
avatar

  6  dmitry1966 Автор Сообщений: 50

  • 13 марта 2015, 22:36
+
0
Ребята, спасибо Вам за советника!!! Дмитрию за идею, Окси за работу. Эта стратегия Владислава Гилка у меня есть, но так как сам я из новичков, естественно не всё получалось, а опыта не хватало додумать. В общем тестирую сейчас советника, похоже, что будут неплохие результаты. Удачи Вам!!!*good* 
avatar

  1  striker Сообщений: 1

  • 19 марта 2015, 11:18
+
0
Здравствуйте! Я по настройкам этой стратегии соединил 2 в этом советнике.
Вот результат на тесторе валюта ЕВРО ДОЛАР
avatar

  0  Dimon4ik31 Сообщений: 3

  • 13 апреля 2015, 13:23
+
0
avatar

  0  Dimon4ik31 Сообщений: 3

  • 13 апреля 2015, 13:24
+
0
Кого заинтересовали настройки пишите мне в скайп Dimon4ik311
avatar

  0  Dimon4ik31 Сообщений: 3

  • 13 апреля 2015, 13:25
+
+1
Качество моделирования на скринах выше плохое. Подходит «только для советников с явным контролем открытия баров»
avatar

  8  Miha Сообщений: 485 - Михаил

  • 13 апреля 2015, 13:30
+
0
добрый день. а есть возможность в данном советнике изменить, добавить функцию — не изменять (он изменяется за МА) именно ТР после открытия сделок, т.е. три сделки открылось и ТР выставились и все?
avatar

  13  Pesha Сообщений: 222 - ¯\_(ツ)_/¯

  • 10 ноября 2015, 13:54
+
0
Опишите все подробно в Столе Заказов MQL и буду смотреть.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 10 ноября 2015, 16:19
+
0
TP неизменен, SL переносится
//+------------------------------------------------------------------+
//|                                           Expert_Riverside_v.mq4 |
//|                                                              Oxy |
//|                                   http://oxy.opentraders.ru/bio/ |
//+------------------------------------------------------------------+
#property copyright "Oxy"
#property link      "http://oxy.opentraders.ru/bio/"
#property version   "1.00"
#property strict
//------- Внешние параметры советника -----------------------------------------+
extern int     Ma_Period         = 233;         // Значение МА
extern int     Ma_Level_1        = 150;         // Уровень 1 Ма
extern int     Ma_Level_2        = 890;         // Уровень 2 Ма
extern int     Ma_Level_3        = 1440;        // Уровень 3 Ма
extern int     Ma_Level_4        = 2330;        // Уровень 4 Ма
extern double  Lot_1             = 0.1;         // Лот 1
extern double  Lot_2             = 0.2;         // Лот 2
extern double  Lot_3             = 0.3;         // Лот 3
             
extern int     Slippage          = 30;          // Проскальзывание цены
extern int     MagicNumber       = 567562;      // Идентификатор ордера
//------- Глобальные переменные советника -------------------------------------+
string   Symb;
string   NameInd     = "Indicator_Riverside";
datetime timePrev    = -1;
string   LEVEL2 = "LEVEL2";
string   LEVEL3 = "LEVEL3";
string   LEVEL4 = "LEVEL4";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (!IsTradeAllowed())  { Print("Необходимо разрешить советнику торговать"); return(INIT_FAILED);}  
   if (Period()<PERIOD_M5) { Print("Советник работает не ниже таймфрейма M5!"); return(INIT_FAILED);}
   Symb = Symbol();
   if(Ma_Level_1<=0 || Ma_Level_2<Ma_Level_1 || Ma_Level_3<Ma_Level_2 || Ma_Level_4<Ma_Level_3) 
     { Print("Неправильно выставлены уровни!"); return(INIT_FAILED); } 
   if (Lot_1<MarketInfo(Symbol(), MODE_MINLOT) || Lot_1>MarketInfo(Symbol(), MODE_MAXLOT)) { Print("Неправильно выставлен лот 1!"); return(INIT_FAILED);}
   if (Lot_2<MarketInfo(Symbol(), MODE_MINLOT) || Lot_2>MarketInfo(Symbol(), MODE_MAXLOT)) { Print("Неправильно выставлен лот 2!"); return(INIT_FAILED);}
   if (Lot_3<MarketInfo(Symbol(), MODE_MINLOT) || Lot_3>MarketInfo(Symbol(), MODE_MAXLOT)) { Print("Неправильно выставлен лот 3!"); return(INIT_FAILED);}
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(timePrev!=Time[1]) {
     double _trRv_H_LV1_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 1, 0);
     double _trRv_H_LV1_1 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 1, 1);
     double _trRv_H_LV1_2 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 1, 2);
     
     double _trRv_H_LV2_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 2, 0);
     double _trRv_H_LV3_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 3, 0);
     double _trRv_H_LV4_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 4, 0);

     double _trRv_L_LV1_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 6, 0);
     double _trRv_L_LV1_1 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 6, 1);
     double _trRv_L_LV1_2 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 6, 2);
     
     double _trRv_L_LV2_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 7, 0);
     double _trRv_L_LV3_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 8, 0);
     double _trRv_L_LV4_0 = iCustom(Symb, 0, NameInd, Ma_Period, Ma_Level_1, Ma_Level_2, Ma_Level_3, Ma_Level_4, 9, 0);
     
     // переносим sl
     if(HaveOpenPos()) {
       int i, ot, k=OrdersTotal(), opP_b, opP_s;
       opP_b = AmountOpenPos(0);
       opP_s = AmountOpenPos(1);
       double sl, tp;
       for (i=k-1; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
           if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber) {
             ot=OrderType();
             sl=0; tp=0;
             if(ot==0) {               
               if(opP_b==3) sl = NormalizeDouble(_trRv_L_LV1_0, Digits);
               if(opP_b==2) sl = NormalizeDouble(_trRv_H_LV1_0, Digits);
               if(opP_b==1) sl = NormalizeDouble(_trRv_H_LV2_0, Digits);

               if(OrderStopLoss()!=sl && MathAbs(sl-OrderOpenPrice())>MarketInfo(Symb, MODE_STOPLEVEL)*Point)
                 if(!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))
                   Print("Не удалось изменить ордер ", OrderTicket());
             }
             if(ot==1) {
               if(opP_s==3) sl = NormalizeDouble(_trRv_H_LV1_0, Digits);
               if(opP_s==2) sl = NormalizeDouble(_trRv_L_LV1_0, Digits);
               if(opP_s==1) sl = NormalizeDouble(_trRv_L_LV2_0, Digits);

               if(OrderStopLoss()!=sl && MathAbs(sl-OrderOpenPrice())>MarketInfo(Symb, MODE_STOPLEVEL)*Point)
                 if(!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))
                   Print("Не удалось изменить ордер ", OrderTicket());
             }
           }
         }
       }
     }
     // открываем 
     if(HaveOpenPos()==false) {
       if(Close[1]>_trRv_H_LV1_1 && (Low[1] <=_trRv_H_LV1_1 || Low[2] <=_trRv_H_LV1_2) && Ask>_trRv_H_LV1_0) { // снизу вверх buy
         BuyPos(Lot_1, _trRv_L_LV1_0, _trRv_H_LV2_0, LEVEL2);
         BuyPos(Lot_2, _trRv_L_LV1_0, _trRv_H_LV3_0, LEVEL3);
         BuyPos(Lot_3, _trRv_L_LV1_0, _trRv_H_LV4_0, LEVEL4);
       } else 
       if(Close[1]<_trRv_L_LV1_1 && (High[1]>=_trRv_L_LV1_1 || High[2]>=_trRv_L_LV1_2) && Bid<_trRv_L_LV1_0) { // сверху вниз sell
         SellPos(Lot_1, _trRv_H_LV1_0, _trRv_L_LV2_0, LEVEL2);
         SellPos(Lot_2, _trRv_H_LV1_0, _trRv_L_LV3_0, LEVEL3);
         SellPos(Lot_3, _trRv_H_LV1_0, _trRv_L_LV4_0, LEVEL4);
       }
     }
   }
   timePrev = Time[1];
  }
//+------------------------------------------------------------------+
int AmountOpenPos(int ot=-1) {
  int i, k = OrdersTotal (), num=0;
  if(!(ot==0 || ot==1)) ot=-1;
  for (i=k-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber) {
        if(ot==-1) {
          if (OrderType()==0 || OrderType()==1) num++;
        } else {
          if(ot==OrderType()) num++;
        }
      }
    }
  }
  return (num);
}
//+------------------------------------------------------------------+
bool HaveOpenPos(int ot=-1) {
  int i, k = OrdersTotal ();
  if(ot<0 || ot>1) ot=-1;
  for (i=k-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber) {
        if(ot==-1) {
          if (OrderType()==0 || OrderType()==1) return (true);
        } else {
          if(ot==OrderType()) return (true);
        }
      }
    }
  }
  return (false);
}
//+------------------------------------------------------------------+
bool BuyPos(double _lot, double _sl=0, double _tp=0, string _comment=NULL) {
  RefreshRates();
  if (!OrderSend(Symb, OP_BUY, NormalizeDouble(_lot, 2), NormalizeDouble(Ask,Digits), Slippage, NormalizeDouble(_sl,Digits), NormalizeDouble(_tp,Digits), _comment, MagicNumber)) {
    Print("Не удалось OP_BUY!");
    return (false);
  }  
  return (true);
}
bool SellPos(double _lot, double _sl=0, double _tp=0, string _comment=NULL) {
  RefreshRates();
  if (!OrderSend(Symb, OP_SELL, NormalizeDouble(_lot, 2), NormalizeDouble(Bid,Digits), Slippage, NormalizeDouble(_sl,Digits), NormalizeDouble(_tp,Digits), _comment, MagicNumber)) {
    Print("Не удалось OP_SELL!");
    return (false); 
  }  
  return (true);
}
//+------------------------------------------------------------------+

Редактирован: 20 апреля 2017, 18:59
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 10 ноября 2015, 16:43
+
0
Спасибо!)*good* 
avatar

  13  Pesha Сообщений: 222 - ¯\_(ツ)_/¯

  • 10 ноября 2015, 20:15

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий