Можно ли такое реализовать в советнике? - страница 2

 
wolfreign:

Добрый вечер, форумчане.

Возникла идея, но мне технарь сообщил, что это нереально. Хочу узнать мнение нескольких спецов пишущих сов.

Суть идеи: можно ли сделать такой трал, чтобы он работал по принципу SL в % от прибыли.

Приведу пример.

Трал открывается на 100 пунктах прибыли с настройках в сове 50%, это значит что SL открывается на 50 пунктах от цены открытия, предположим цена прошла еще 100 пунктов и согласно настройке в 50%, SL сдвинется на 100 пунктов и т.д.

Т.е. суть в том, что при росте прибыли в открытой позиции SL двигается не в строгом, установленном в настройках, расстоянии от цены в пунктах, а в процентном соотношении от прибыльных пунктов. Получается что чем больше прибыль, тем фиксированная прибыль SL меньше. Взято 300 пунктов, прибыль 150, взято 400, прибыль соответственно 200.

Надеюсь смог донести правильно свою идею))

Буду благодарен за любой ответ по сути вопроса.

такой советник уже существует: e-TLE_v.1.6.mq4, Ким Игорь В. aka KimIV

работает в три этапа все настраивается как ты хочеш........пользуйся....

 
Konstantin Nikitin:

Не совсем стандартный. И это заметно когда профит позиции увеличивается, то стоп от цены начинает отставать на большее расстояние. Подтягиваясь под выставленный процент фиксации прибыли.
Вполне можно реализовать. Правда как выше сказано, желательно указать с какой суммы фиксирования он начинает ставиться.

Так я же и написал - "почти" ))) У меня вообще ощущение, что я то ли сам когда то писал что то подобное, то ли видел где то чье то решение. Де жа вю какое то.

 
wolfreign:

***

Вопрос - технически мою идею в сове реально осуществить?

Нет, встраивать чип в живую птицу никто не будет :)

 
Vladimir Karputov:

Нет, встраивать чип в живую птицу никто не будет :)

Может он профессионального дрессировщика ищет

 
У меня похоже так работает виртуальный трал. Срабатывает при 38% от максимума прибыли сделки.
 
Konstantin Nikitin:

Не совсем стандартный. И это заметно когда профит позиции увеличивается, то стоп от цены начинает отставать на большее расстояние. Подтягиваясь под выставленный процент фиксации прибыли.
Вполне можно реализовать. Правда как выше сказано, желательно указать с какой суммы фиксирования он начинает ставиться.

Да, именно такой и нужен) Само собой в настройках будет указана точка "старта" "Размер трала в %" и "шаг трала". Меня смутил момент именно размера трала в %, везде встречал только жесткое значение в пунктах или валюте

 
Alexandr Gomzyakov:

такой советник уже существует: e-TLE_v.1.6.mq4, Ким Игорь В. aka KimIV

работает в три этапа все настраивается как ты хочеш........пользуйся....

Благодарю, опробую)

 
Alexandr Gomzyakov:

такой советник уже существует: e-TLE_v.1.6.mq4, Ким Игорь В. aka KimIV

работает в три этапа все настраивается как ты хочеш........пользуйся....

Ссылки на сторонние ресурсы запрещены. Я поправил ваше сообщение - так будет достаточно для идентификации советника для самостоятельного поиска.

 
Alexandr Gomzyakov:

такой советник уже существует: e-TLE_v.1.6.mq4, Ким Игорь В. aka KimIV

работает в три этапа все настраивается как ты хочеш........пользуйся....

Если честно, что то не нашел такой совы)) Если не затруднит можете прямую ссылку дать?

Модератор ругается на ссыли))


По названию не нашел советника такого, может у него уже иное название?

 
wolfreign:

Если честно, что то не нашел такой совы)) Если не затруднит можете прямую ссылку дать?

Модератор ругается на ссыли))


По названию не нашел советника такого, может у него уже иное название?

2005 год


//+------------------------------------------------------------------+
//|                                                  e-TLE_v.1.6.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//| 20.09.2005 Трёхуровневая система выходов (Three Level Exit).     |
//|            Отрабатывает все открытые позиции.                    |
//|            Вешать только на один любой график.                   |
//| 22.09.2005 v.1.0  Ввёл внешний параметр для управления зоной     |
//|            влияния советника.                                    |
//| 22.09.2005 v.1.1  Ввёл параметры для ограничений по счёту        |
//| 22.09.2005 v.1.2  Исправил ошибку с определением валюты          |
//| 22.09.2005 v.1.3  Реализовал механизм отсечки снижения цены      |
//| 22.09.2005 v.1.4  Поправил механизм отсечки снижения цены        |
//| 23.09.2005 v.1.5  Реализовал фактическую установку стопов        |
//| 14.10.2005 v.1.6  Три уровня переноса стопа                      |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Внешние параметры советника --------------------------------
extern bool   UseOneAccount = True;         // Торговать только на одном счёте
extern int    NumberAccount = 37166;        // Номер торгового счёта
extern bool   AllPositions  = False;        // Управлять всеми позициями
extern int    LevelProfit1  = 20;           // Первый уровень профита
extern int    LevelMoving1  = 1;            // Первый уровень переноса
extern int    LevelProfit2  = 35;           // Второй уровень профита
extern int    LevelMoving2  = 20;           // Второй уровень переноса
extern int    LevelProfit3  = 55;           // Третий уровень профита
extern int    LevelMoving3  = 30;           // Третий уровень переноса
extern int    TrailingStop  = 40;           // Размер трала
extern int    TrailingStep  = 5;            // Шаг трала
extern bool   ShowComment   = True;         // Показывать комментарии
extern bool   UseSound      = True;         // Использовать звуковой сигнал
extern string NameFileSound = "expert.wav"; // Наименование звукового файла

//------- Глобальные переменные советника ----------------------------

//+------------------------------------------------------------------+
//| Custor expert deinitialization function                          |
//+------------------------------------------------------------------+
void deinit() {
  Comment("");
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  double pp;
  int    nd;
  string comm="";

  if (UseOneAccount && AccountNumber()!=NumberAccount) {
    Comment("Работа на счёте: "+AccountNumber()+" ЗАПРЕЩЕНА!");
    return;
  }
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllPositions || OrderSymbol()==Symbol()) {
        ThreeLevelSystemOfOutput();
        nd=MarketInfo(OrderSymbol(), MODE_DIGITS);
        pp=MarketInfo(OrderSymbol(), MODE_POINT);
        comm=comm+OrderSymbol()+"  Цена: "+DoubleToStr(OrderOpenPrice(),nd)+
             "  SL = " + DoubleToStr(OrderStopLoss(),nd)+
             " ("+StopLossInPoint()+")\n";
      }
    }
  }
  if (ShowComment) Comment(comm);
}

//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput() {
  int pr=ProfitPosition(), sl=StopLossInPoint();
  int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);

  if (pr>LevelProfit1 && pr<=LevelProfit2 && sl<LevelMoving1) ModifyStopLossInPoint(LevelMoving1);
  if (pr>LevelProfit2 && pr<=LevelProfit3 && sl<LevelMoving2) ModifyStopLossInPoint(LevelMoving2);
  if (pr>LevelProfit3 && sl<LevelMoving3) ModifyStopLossInPoint(LevelMoving3);
  if (pr>LevelMoving3+TrailingStop+TrailingStep) {
    TrailingPositions();
  }
}

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);

  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    if (pBid-OrderOpenPrice()>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;         // Флаг модификации позиции

  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
  bool   fm;         // Флаг модификации позиции
  double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);

  if (OrderType()==OP_BUY)  ldSL=OrderOpenPrice()+pp*mp;
  if (OrderType()==OP_SELL) ldSL=OrderOpenPrice()-pp*mp;
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;

  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}

//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;

  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

Причина обращения: