Перейти к содержимому

Theme© by Fisana
 

Фотография
* * * * * 68 Голосов

Написание экспертов и индикаторов - бесплатно!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18761

#316 saw

saw

    Начинающий

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 416 сообщений

Отправлено 01 June 2010 - 11:31

День добрый

Посоветовали обратиться сюда для написания советника.

Есть ТС, создана буквально на той неделе. Алгоритм входов и выходов есть. Все внутри. Вобще никогда не пробовал автоматизировать ТС, всегда торгую руками, но интересно возможно ли будущий советник использовать как подсказчик. Возможно ли этот советник реализовать или сколько это будет стоить? Возможно даже не советник, а сделать такой мощный индикатор. Чтобы давал сигнал и показывал стрелкой вход. Выход можно и не реализовывать.

С уважением
Алексей

Сигналы тс---на основе МАКД, фильтр RSI, без общей фильтрации, будет простой трендовой тс с ее последствиями
ИзображениеИзображение

 
 

#317 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 01 June 2010 - 12:08

День добрый

Посоветовали обратиться сюда для написания советника.

Есть ТС, создана буквально на той неделе. Алгоритм входов и выходов есть. Все внутри. Вобще никогда не пробовал автоматизировать ТС, всегда торгую руками, но интересно возможно ли будущий советник использовать как подсказчик. Возможно ли этот советник реализовать или сколько это будет стоить? Возможно даже не советник, а сделать такой мощный индикатор. Чтобы давал сигнал и показывал стрелкой вход. Выход можно и не реализовывать.

С уважением
Алексей

Здравствуйте. Это под заказ только. Условия в этой ветке.
Каждый сам кузнец своей судьбы.

#318 Hunter_GB

Hunter_GB

    Первый выстрел

  • Пользователи
  • PipPip
  • 3 сообщений

Отправлено 01 June 2010 - 14:02

Уважаемые программисты! Ответьте пжлт на пост http://fxgeneral.com...findpost&p=3662
Возможно ли это сделать?

#319 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 01 June 2010 - 14:07

Уважаемые программисты! Ответьте пжлт на пост http://fxgeneral.com...findpost&p=3662
Возможно ли это сделать?


Мой ответ вы уже знаете (на другом форуме писал, что только под заказ).
Каждый сам кузнец своей судьбы.

#320 Wizard

Wizard

    Пользователи

  • Свой человек
  • PipPipPipPipPipPipPipPipPip
  • 337 сообщений

Отправлено 01 June 2010 - 17:15

Здравствуйте... Можно ли у этого эксперта убрать ограничение по времени и привязку к конкретному счету? Заранее благодарен...


Пробуйте, таблетка от жадности была удачно скормлена пациенту. Привычка контролировать время и проверять номер счета была удалена.
Если все равно не получится, значит проверка данных осуществляется на сервере. Тут уж ничего не поделать.

Скачать
  • Necron это нравится

#321 droba

droba

    Не жалеет патронов

  • Свой человек
  • PipPipPipPipPipPipPipPipPip
  • 309 сообщений

Отправлено 01 June 2010 - 20:39

 Necron, доброго времени суток. Вот есть такая стратегия проверял на истории приносит не плохие дивиденды.


Сущность стратегии:

В 10:30 утра по Москве (т.е. открытие европейской сессии +30 минут) выставляем 2 отложенных ордера: 

1) BuyStop - на большое значение цены (+1 пункт) текущего дня.

Stop-Loss ставим на минимальное значение цены (-1 пункт) за текущий день. 

Take-Profit определяется следующим образом: строим линии Фибоначчи от большого значения цены текущего торгового дня к минимуму цены текущего торгового дня (по состоянию на 10.30 утра) и берем в качестве цели Take-Profit-а ценовое значение линии Фибоначчи 161.8% по текущим построениям.

 

2) SellStop устанавливаем на минимальное значение цены (-1 пункт) текущего торгового дня.

StopLoss устанавливаем на большое значение цены (+1 пункт) текущего торгового дня. 

Take Profit определяем следующим образом: натягиваем линии Фибоначчи от минимального значения цены текущего торгового дня к большому значению цены текущего торгового дня (по состоянию на 10:30 утра) и берем в качестве Take-Profit-а ценовое значение линии Фибоначчи 161.8% по текущим построениям. 

В случае если позиция не закрыта до 00:00 по Москве -закрываем ее. 

Все отложенные ордера (не открытые) удаляем. 

В случае если на миг установки торгового ордера в 10:30 большое значение цены равняется текущему значении цены или минимуму цены текущего торгового дня, то ставим отложенный ордер на минимально вероятном расстоянии от текущей цены на рынке (зависит от выбранного ДЦ - в большинстве случаев это 3-10 пунктов) или ожидаем отката, а лишь потом устанавливаем ордер,либо же сходу открываем торговую позицию “с руки” по текущей рыночной цене. 

В случае если же на миг расстановки отложенных ордеров в 10:30 разница между ценами от минимального значения до большого значения цены намного больше 50 - 70 пунктов (т.е. перемещение найдено, как “сильное”), то в этот день не торгуем вообще или торгуем лишь по тренду с Take Profit-ом 20 - 30 пунктов. 

Вот и вся стратегия:

Можно её реализовать  в советнике, желательно чтобы StopLoss переводился в безубыток.

С уважением Droba.

#322 sneg

sneg

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 10 сообщений

Отправлено 01 June 2010 - 20:55

Вот такая ситуация, есть проект-советник, торгующий по значениям индикатора ADX, и треллит по томуже индикатору. Только, всю голову сломал, трал на выходе не запускается. Т.е. вход был, а ордера не модифицируются. Прошу помощь. Может, что не так.


//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

extern int MagicNumber=5345; //магическое число ордеров
extern double TakeProfit = 0;
extern double Lots =0.1;
extern double StopLoss = 90;
extern int TimeFrame=60;
extern   int      iAtr_timeframe = 60;      // период графика, на котором считается ATR (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern   int      iAtr1_period = 5;    // период первого ATR
extern   int      iAtr1_shift = 1;     // сдвиг первого ATR
extern   int      iAtr2_period = 36;   // период второго ATR
extern   int      iAtr2_shift = 1;     // сдвиг второго ATR
extern   double   dCoeff = 1;          // коэффициент, на который множим ATR, чтобы получить стоплосс (при coeff=1 стоп будер размещен на расстоянии в 1 ATR, при coeff=1.5 - на расстоянии в полтора ATR и т.д.)
extern   bool     bTrlinloss = false;  // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
    double ADXP, ADXC, ADXDIPP;
    double ADXDIPC, ADXDIMP, ADXDIMC;
    int cnt, ticket, total;
    if(Bars < 100)
      {
        Print("bars less than 100");
        return(0);  
      }
//    if(TakeProfit < 10)
//      {
//       Print("TakeProfit less than 10");
//        return(0);  // check TakeProfit
//      }
    ADXP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MAIN, 2);
    ADXC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MAIN, 1);
    ADXDIPP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_PLUSDI, 2);
    ADXDIPC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_PLUSDI, 1);  
    ADXDIMP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MINUSDI, 2);
    ADXDIMC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MINUSDI, 1);  
    total = OrdersTotal();
    if(total < 1) 
      {
        // no opened orders identified
        if(AccountFreeMargin() < (1000*Lots))
          {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);  
          }
        // check for long position (BUY) possibility
        if((ADXP < ADXC) && (ADXDIPP < ADXP) && (ADXDIPC > ADXC))
          {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid - StopLoss*Point, 
                               Ask + TakeProfit*Point, "adx sample", MagicNumber, 0, Green);
            if(ticket > 0)
              {
                if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                    Print("BUY order opened : ", OrderOpenPrice());
              }
            else 
                Print("Error opening BUY order : ",GetLastError()); 
            return(0); 
          }
        // check for short position (SELL) possibility
        if((ADXP < ADXC) && (ADXDIMP < ADXP) && (ADXDIMC > ADXC))
          {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask + StopLoss*Point, 
                               Bid - TakeProfit*Point, "adx sample", MagicNumber, 0, Red);
            if(ticket > 0)
             {
                if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                    Print("SELL order opened : ", OrderOpenPrice());
              }
            else 
                Print("Error opening SELL order : ",GetLastError()); 
          }
          //+-----------------------------------------------------------------------------------------------------------+
int i,k=OrdersTotal();
 for (i=0; i<k; i++) 
    {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      {
       if (OrderSymbol()==Symbol()) 
           {           
            TrailingByATR(OrderTicket(),iAtr_timeframe,iAtr1_period,iAtr1_shift,iAtr2_period,iAtr2_shift,dCoeff,bTrlinloss);
           }
      }
      }
    }           
    return(0);
  }
  //+------------------------------------------------------------------+
void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss)
   {
   // проверяем переданные значения   
   if ((ticket==0) || (atr1_period<1) || (atr2_period<1) || (coeff<=0) || (!OrderSelect(ticket,SELECT_BY_TICKET)) || 
   ((atr_timeframe!=1) && (atr_timeframe!=5) && (atr_timeframe!=15) && (atr_timeframe!=30) && (atr_timeframe!=60) && 
   (atr_timeframe!=240) && (atr_timeframe!=1440) && (atr_timeframe!=10080) && (atr_timeframe!=43200)) || (atr1_shift<0) || (atr2_shift<0))
      {
      Print("Трейлинг функцией TrailingByATR() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      }
   
   double curr_atr1; // текущее значение ATR - 1
   double curr_atr2; // текущее значение ATR - 2
   double best_atr; // большее из значений ATR
   double atrXcoeff; // результат умножения большего из ATR на коэффициент
   double newstop; // новый стоплосс
   
   // текущее значение ATR-1, ATR-2
   curr_atr1 = iATR(Symbol(),atr_timeframe,atr1_period,atr1_shift);
   curr_atr2 = iATR(Symbol(),atr_timeframe,atr2_period,atr2_shift);
   
   // большее из значений
   best_atr = MathMax(curr_atr1,curr_atr2);
   
   // после умножения на коэффициент
   atrXcoeff = best_atr * coeff;
              
   // если длинная позиция (OP_BUY)
   if (OrderType()==OP_BUY)
      {
      // откладываем от текущего курса (новый стоплосс)
      newstop = Bid - atrXcoeff;           
      
      // если trlinloss==true (т.е. следует тралить в зоне лоссов), то
      if (trlinloss==true)      
         {
         // если стоплосс неопределен, то тралим в любом случае
         if ((OrderStopLoss()==0) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // иначе тралим только если новый стоп лучше старого
         else
            {
            if ((newstop>OrderStopLoss()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         // если стоплосс неопределен, то тралим, если стоп лучше открытия
         if ((OrderStopLoss()==0) && (newstop>OrderOpenPrice()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // если стоп не равен 0, то меняем его, если он лучше предыдущего и курса открытия
         else
            {
            if ((newstop>OrderStopLoss()) && (newstop>OrderOpenPrice()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      }
      
   // если короткая позиция (OP_SELL)
   if (OrderType()==OP_SELL)
      {
      // откладываем от текущего курса (новый стоплосс)
      newstop = Ask + atrXcoeff;
      
      // если trlinloss==true (т.е. следует тралить в зоне лоссов), то
      if (trlinloss==true)      
         {
         // если стоплосс неопределен, то тралим в любом случае
         if ((OrderStopLoss()==0) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // иначе тралим только если новый стоп лучше старого
         else
            {
            if ((newstop<OrderStopLoss()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         // если стоплосс неопределен, то тралим, если стоп лучше открытия
         if ((OrderStopLoss()==0) && (newstop<OrderOpenPrice()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // если стоп не равен 0, то меняем его, если он лучше предыдущего и курса открытия
         else
            {
            if ((newstop<OrderStopLoss()) && (newstop<OrderOpenPrice()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      }      
   }
//+------------------------------------------------------------------+




#323 Wizard

Wizard

    Пользователи

  • Свой человек
  • PipPipPipPipPipPipPipPipPip
  • 337 сообщений

Отправлено 02 June 2010 - 09:58

Вот такая ситуация, есть проект-советник, торгующий по значениям индикатора ADX, и треллит по томуже индикатору. Только, всю голову сломал, трал на выходе не запускается. Т.е. вход был, а ордера не модифицируются. Прошу помощь. Может, что не так.


//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

extern int MagicNumber=5345; //магическое число ордеров
extern double TakeProfit = 0;
extern double Lots =0.1;
extern double StopLoss = 90;
extern int TimeFrame=60;
extern   int      iAtr_timeframe = 60;      // период графика, на котором считается ATR (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern   int      iAtr1_period = 5;    // период первого ATR
extern   int      iAtr1_shift = 1;     // сдвиг первого ATR
extern   int      iAtr2_period = 36;   // период второго ATR
extern   int      iAtr2_shift = 1;     // сдвиг второго ATR
extern   double   dCoeff = 1;          // коэффициент, на который множим ATR, чтобы получить стоплосс (при coeff=1 стоп будер размещен на расстоянии в 1 ATR, при coeff=1.5 - на расстоянии в полтора ATR и т.д.)
extern   bool     bTrlinloss = false;  // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
    double ADXP, ADXC, ADXDIPP;
    double ADXDIPC, ADXDIMP, ADXDIMC;
    int cnt, ticket, total;
    if(Bars < 100)
      {
        Print("bars less than 100");
        return(0);  
      }
//    if(TakeProfit < 10)
//      {
//       Print("TakeProfit less than 10");
//        return(0);  // check TakeProfit
//      }
    ADXP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MAIN, 2);
    ADXC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MAIN, 1);
    ADXDIPP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_PLUSDI, 2);
    ADXDIPC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_PLUSDI, 1);  
    ADXDIMP = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MINUSDI, 2);
    ADXDIMC = iADX(NULL, TimeFrame, 14, PRICE_CLOSE, MODE_MINUSDI, 1);  
    total = OrdersTotal();
    if(total < 1) 
      {
        // no opened orders identified
        if(AccountFreeMargin() < (1000*Lots))
          {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);  
          }
        // check for long position (BUY) possibility
        if((ADXP < ADXC) && (ADXDIPP < ADXP) && (ADXDIPC > ADXC))
          {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid - StopLoss*Point, 
                               Ask + TakeProfit*Point, "adx sample", MagicNumber, 0, Green);
            if(ticket > 0)
              {
                if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                    Print("BUY order opened : ", OrderOpenPrice());
              }
            else 
                Print("Error opening BUY order : ",GetLastError()); 
            return(0); 
          }
        // check for short position (SELL) possibility
        if((ADXP < ADXC) && (ADXDIMP < ADXP) && (ADXDIMC > ADXC))
          {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask + StopLoss*Point, 
                               Bid - TakeProfit*Point, "adx sample", MagicNumber, 0, Red);
            if(ticket > 0)
             {
                if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                    Print("SELL order opened : ", OrderOpenPrice());
              }
            else 
                Print("Error opening SELL order : ",GetLastError()); 
          }
          //+-----------------------------------------------------------------------------------------------------------+
int i,k=OrdersTotal();
 for (i=0; i<k; i++) 
    {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      {
       if (OrderSymbol()==Symbol()) 
           {           
            TrailingByATR(OrderTicket(),iAtr_timeframe,iAtr1_period,iAtr1_shift,iAtr2_period,iAtr2_shift,dCoeff,bTrlinloss);
           }
      }
      }
    }           
    return(0);
  }
  //+------------------------------------------------------------------+
void TrailingByATR(int ticket,int atr_timeframe,int atr1_period,int atr1_shift,int atr2_period,int atr2_shift,double coeff,bool trlinloss)
   {
   // проверяем переданные значения   
   if ((ticket==0) || (atr1_period<1) || (atr2_period<1) || (coeff<=0) || (!OrderSelect(ticket,SELECT_BY_TICKET)) || 
   ((atr_timeframe!=1) && (atr_timeframe!=5) && (atr_timeframe!=15) && (atr_timeframe!=30) && (atr_timeframe!=60) && 
   (atr_timeframe!=240) && (atr_timeframe!=1440) && (atr_timeframe!=10080) && (atr_timeframe!=43200)) || (atr1_shift<0) || (atr2_shift<0))
      {
      Print("Трейлинг функцией TrailingByATR() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      }
   
   double curr_atr1; // текущее значение ATR - 1
   double curr_atr2; // текущее значение ATR - 2
   double best_atr; // большее из значений ATR
   double atrXcoeff; // результат умножения большего из ATR на коэффициент
   double newstop; // новый стоплосс
   
   // текущее значение ATR-1, ATR-2
   curr_atr1 = iATR(Symbol(),atr_timeframe,atr1_period,atr1_shift);
   curr_atr2 = iATR(Symbol(),atr_timeframe,atr2_period,atr2_shift);
   
   // большее из значений
   best_atr = MathMax(curr_atr1,curr_atr2);
   
   // после умножения на коэффициент
   atrXcoeff = best_atr * coeff;
              
   // если длинная позиция (OP_BUY)
   if (OrderType()==OP_BUY)
      {
      // откладываем от текущего курса (новый стоплосс)
      newstop = Bid - atrXcoeff;           
      
      // если trlinloss==true (т.е. следует тралить в зоне лоссов), то
      if (trlinloss==true)      
         {
         // если стоплосс неопределен, то тралим в любом случае
         if ((OrderStopLoss()==0) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // иначе тралим только если новый стоп лучше старого
         else
            {
            if ((newstop>OrderStopLoss()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         // если стоплосс неопределен, то тралим, если стоп лучше открытия
         if ((OrderStopLoss()==0) && (newstop>OrderOpenPrice()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // если стоп не равен 0, то меняем его, если он лучше предыдущего и курса открытия
         else
            {
            if ((newstop>OrderStopLoss()) && (newstop>OrderOpenPrice()) && (newstop<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      }
      
   // если короткая позиция (OP_SELL)
   if (OrderType()==OP_SELL)
      {
      // откладываем от текущего курса (новый стоплосс)
      newstop = Ask + atrXcoeff;
      
      // если trlinloss==true (т.е. следует тралить в зоне лоссов), то
      if (trlinloss==true)      
         {
         // если стоплосс неопределен, то тралим в любом случае
         if ((OrderStopLoss()==0) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // иначе тралим только если новый стоп лучше старого
         else
            {
            if ((newstop<OrderStopLoss()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         // если стоплосс неопределен, то тралим, если стоп лучше открытия
         if ((OrderStopLoss()==0) && (newstop<OrderOpenPrice()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         // если стоп не равен 0, то меняем его, если он лучше предыдущего и курса открытия
         else
            {
            if ((newstop<OrderStopLoss()) && (newstop<OrderOpenPrice()) && (newstop>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if (!OrderModify(ticket,OrderOpenPrice(),newstop,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      }      
   }
//+------------------------------------------------------------------+


У этого советника и кроме трала не мало проблем. Если Тейк оставить по умолчанию - торговать отказывается вообще. Еще и ругается на некорректное значение цены при открытии ордера.
27.png
Проблема эта вызвана тем что нет функции нормализации цены.
В отношении трала, проблема скорее всего в некорректный значениях.

Описание: ATR - (Average True Range, Средний Истинный Диапазон) - один из индикаторов волатильности; чем больше значение, тем, соответсвенно, выше средняя волатильность за заданный период (индикатора) времени; измерятеся в пунктах. Трейлинг по ATR в большинстве случаев позволяет изменять стоплосс соответственно к характеру поведения курса - при высокой волатильности (выраженных рывках) курс "отпускаем", при "топтании на месте" поджимаем более "плотно". В трейлинге используется 2 ATR, которым предлагается задавать отличные периоды - один короткий (напр., 5), другой - длинный (напр., 20). Какому из них - atr1_period или atr2_period - без разницы. Для расчета стоплосса используется всегда большее из значений 2 ATR - это сделано для того, чтобы несколько низковолатильных дней подряд (например, перед выходом новостей) не сделали наш стоплосс слишком близким к текущему курсу (т.е. обычно большим будет более "короткий" ATR, но если имеем несколько баров с низкой волатильностью, то "переходим" на более длиннопериодный ATR). atr_timeframe - период графика, минут (5, 15, 30, 60, 240, 1440 и т.д.), на котором рассчитываются ATR (одинаков для обоих ATR). atr1_shift и atr2_shift - на каком баре (текущем, 0, предыдущем - 1 или дальше "в прошлое") считать соответственно первый и второй ATR. coeff - коэффициент, на который множим ATR, чтобы получить стоплосс (при coeff=1 стоп будер размещен на расстоянии в 1 ATR, при coeff=1.5 - на расстоянии в полтора ATR и т.д.). trlinloss - указатель того, следует ли тралить на участке лоссов (от исходного стоплосса, при наличии такового, до курса открытия).

Пример: TrailingByATR(OrderTicket(),1440,5,1,36,1,1,false), где OrderTicket() - номер ордера, 1440 - (минут, 1 сутки) таймфрейм, на котоором рассчитываются значения ATR, 5 - период "короткого" ATR, 1 - ATR с периодом 5 считаем на предыдущем баре (№1), 36 - период "длинного" ATR, 1 - второй ATR также рассчитываем на предыдущем баре, 1 - коэффициент, на который множим ATR - в данном случае стоплосс будет размещаться на расстоянии в один ATR, false - на "лоссовом" участке не тралим.
  • Necron это нравится

#324 johnyforever

johnyforever

    Первый выстрел

  • Пользователи
  • PipPip
  • 3 сообщений

Отправлено 02 June 2010 - 14:46

Здравствуйте!


Есть относительно Прикрепленный файл  ТЗ.rar   249.99К   438 скачиванийпростенькая (на основе 3-х индикаторов) системка. Требуется автоматизация. Все в папке. Заранее спасибо!

#325 sneg

sneg

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 10 сообщений

Отправлено 02 June 2010 - 21:20

У этого советника и кроме трала не мало проблем. Если Тейк оставить по умолчанию - торговать отказывается вообще. Еще и ругается на некорректное значение цены при открытии ордера.
27.png
Проблема эта вызвана тем что нет функции нормализации цены.
В отношении трала, проблема скорее всего в некорректный значениях.

Описание: ATR - (Average True Range, Средний Истинный Диапазон) - один из индикаторов волатильности; чем больше значение, тем, соответсвенно, выше средняя волатильность за заданный период (индикатора) времени; измерятеся в пунктах. Трейлинг по ATR в большинстве случаев позволяет изменять стоплосс соответственно к характеру поведения курса - при высокой волатильности (выраженных рывках) курс "отпускаем", при "топтании на месте" поджимаем более "плотно". В трейлинге используется 2 ATR, которым предлагается задавать отличные периоды - один короткий (напр., 5), другой - длинный (напр., 20). Какому из них - atr1_period или atr2_period - без разницы. Для расчета стоплосса используется всегда большее из значений 2 ATR - это сделано для того, чтобы несколько низковолатильных дней подряд (например, перед выходом новостей) не сделали наш стоплосс слишком близким к текущему курсу (т.е. обычно большим будет более "короткий" ATR, но если имеем несколько баров с низкой волатильностью, то "переходим" на более длиннопериодный ATR). atr_timeframe - период графика, минут (5, 15, 30, 60, 240, 1440 и т.д.), на котором рассчитываются ATR (одинаков для обоих ATR). atr1_shift и atr2_shift - на каком баре (текущем, 0, предыдущем - 1 или дальше "в прошлое") считать соответственно первый и второй ATR. coeff - коэффициент, на который множим ATR, чтобы получить стоплосс (при coeff=1 стоп будер размещен на расстоянии в 1 ATR, при coeff=1.5 - на расстоянии в полтора ATR и т.д.). trlinloss - указатель того, следует ли тралить на участке лоссов (от исходного стоплосса, при наличии такового, до курса открытия).

Пример: TrailingByATR(OrderTicket(),1440,5,1,36,1,1,false), где OrderTicket() - номер ордера, 1440 - (минут, 1 сутки) таймфрейм, на котоором рассчитываются значения ATR, 5 - период "короткого" ATR, 1 - ATR с периодом 5 считаем на предыдущем баре (№1), 36 - период "длинного" ATR, 1 - второй ATR также рассчитываем на предыдущем баре, 1 - коэффициент, на который множим ATR - в данном случае стоплосс будет размещаться на расстоянии в один ATR, false - на "лоссовом" участке не тралим.

Трал поправил, действительно нет нормализации цены. На тесте результаты не утешительные, вообщем - сливает.

#326 kupecnn

kupecnn

    Первый выстрел

  • Пользователи
  • PipPip
  • 3 сообщений

Отправлено 03 June 2010 - 11:56

Доброго времени, добрые люди!

Можно ли написать помощника на основе данного индикатора? Автоматическое открытие ордера при появлении сигнала индикатора (только с цифрой 3) и с регулируемыми параметрами ордера StoppLoss & TakeProfit.

Заранее благодарю.

С уважением, Сергей

Прикрепленные файлы



#327 Kevabk

Kevabk

    Первый выстрел

  • Пользователи
  • PipPip
  • 2 сообщений

Отправлено 04 June 2010 - 01:19

Доброго времени суток!

Просьба написать советника который бы открывал позицию по индикатору и закрывал по нему. В советники требуется сделать так что бы он ориентировался на 2 варианта с разными настройками одного индикатора (пример показан на скрине который в архиве) когда оба (если только один сделка не открывается/закрывается) показателя сигнализируют покупать (продавать) - советник покупает (продает) - ситуация изменилась сделка закрывается и открывается другая куда указывает индикатор. И на всякий случай - стоп.

Надеюсь на Вашу помощь :)

Прикрепленные файлы



#328 Daytrader

Daytrader

    Первый выстрел

  • Пользователи
  • PipPip
  • 9 сообщений

Отправлено 04 June 2010 - 05:18

Здравствуйте уважаемые трейдеры!!! Пользуюсь стратегией наподобие той, про которую писал выше droba, только на америке и на EURUSD. Хочу попросить вас сделать советник который бы тралил позиции и отключался после достижений +1. Подробнее в ТЗ.

Заранее благодарен!!!

Прикрепленные файлы

  • Прикрепленный файл  ТЗ.rar   7.89К   146 скачиваний


#329 saw

saw

    Начинающий

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 416 сообщений

Отправлено 04 June 2010 - 16:03

Добрый день. Возможно переделать индикатор с такими условиями:
1) Отображение пересечений зеленой и красной линий на графике. (если можно кружками)
2) Отображение желтой линии:
а) если она выше зеленой---отображение зелеными столбиками
б) если она ниже красной линии---отображение красными столбиками
в) если она находится между зеленой и красными линиями--отображение желтыми столбиками.

P.S. индикатор должен быть такого вида как на скрине №2, и возможность менять настройки.

Прикрепленные изображения

  • 1111111111111111.gif
  • 2222.gif

Прикрепленные файлы


ИзображениеИзображение

#330 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 04 June 2010 - 17:13

Я здесь :)
vnh, я помню. Простите за задержку. Будет ближайшие три дня.

Добрый день подскажите можно ли переделать индикатор написанный под Rumus2 под MT4?

Увы, здесь мне не совсем понятна задача.

У меня такой вопрос. Возможно-ли написать советник с явным контролем открытия баров?

Конечно. Есть ведь советники, которые проверяют сигналы только на открытии бара. Вот Вам и контроль открытия баров :)

ВСЕМ ПРИВЕТ :ВОПРОС К NECRON 1) НЕСЕРьЕЗДНЫЙ НАВЕРНО МОЖНО ЛИ ТАКУЮ ПРОГРАМУ НАПИСАТь ЧТОБ УЧАСТОК НА МТ4 ЕВРО ДОЛ ОБВЕЛ В КВАДРАТИК ТАМ У МЕНА БОЛЕНДЖЕРЫ; СРЕДНИЕ МА; ВЫСТРОИЛИСь В СВОЙ БОЕВОЙ ПОРЯДОК ПО РЯДУ ВОЗРАСТАЮШИХ :А СОВЕТНИК ЗАПОМНИТ СИТУАЦИЮ И УКАЗАТь ТОКА В ПОКУПКУ:СИТУАЦИИ ЧАСТО ПОВТОРЯЮТСЯ ;И КОГДА В СЛЕДУЮШИЙ РАЗ СОВЕТНИК РАСПОЗНАЕТ ЧТО ТАКОЕ УЖЕ БЫЛО НА 65% ВСЕ ПОВТОРЯЕТСЯ ТУТ НАШ ЧУДО СОВЕТНИК СРАБАТЫВАЕТ: И МЫ КОСИМ БАБЛО И ВСПОМИНАЕМ МАСТЕРА ВОТ ;) НУ ЕСЛИ ЕТО ТЕХНИЧЕСКИ НЕ ВОЗМОЖНО ТО ЛАДНО) :) 2) ДУМАЮ ИЗ РАЗРЯДА НЕ ОЧЕНь СЛОЖНЫХ МОЖНО CCI периуд 34 ,по местить ма 55 чтоб я ее мог менять на simple, exponential и при пересечении ордер срабатывал.ЗАРАНИЯ БЛАГОДАРСТВУЮ :)


По первому - можно скорее всего, но это думаю уже будет нейросеть, а я такими "изделиями" не занимаюсь.
По-второму-не совсем понятна задача: хотите на CCI наложить машку? и потом советника на этом индикаторе? Уточняйте, думаю можно и здесь написать.

Можно ли написать такой советник (все в архиве).

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

Necron, доброго времени суток. Вот есть такая стратегия проверял на истории приносит не плохие дивиденды.

Думаю это в ветку заказы все-таки.

Есть относительно простенькая (на основе 3-х индикаторов) системка. Требуется автоматизация. Все в папке. Заранее спасибо!

Будет советник.
Каждый сам кузнец своей судьбы.



Copyright © 2024 Your Company Name