cardon

 
Уровень 10

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


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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от cardon



дороботка сова Комментариев 68
2016-11-24 13:25:33Рейтинг 0

советник на 1 МА Комментариев 13
2016-07-29 13:57:46Рейтинг 0

просто индюк Комментариев 22
2016-09-17 11:18:53Рейтинг 0

доработка сова Комментариев 2
2017-01-09 19:57:28Рейтинг 0

сова просто сова Комментариев 19
2016-10-06 16:43:18Рейтинг 0

скрипт тралл не советник

скрипт тралл
нужен скрипт тральщик, именно скрипт, а не советник.
он должен уметь траллить от безубытка — например: (приведено два примера, принцип один и тот же.)
1. мы выставили БУ 400 пп. а расстояние (длину тралла)100 пп. при достижении цены 500 пп. БУ переносится на 400пп. и включается тралл держась на расстоянии 100пп.
2. мы выставили длину тралла 100 пп. и значение после какого включать тралл (допустим 500пп.) при достижении цены 500пп. включается тралл с расстоянием 100пп. и он начинает тралить с 400 пп. (500-100=400)
шаг тралла.
прикладываю подобный скрипт(не эксперт) но там нет этой функции
trall.rar (66 Kb)
  • 0
  • Просмотров: 4114
  • 3 ноября 2015, 13:47
  • cardon
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
прикладываю подобный скрипт(не эксперт) но там нет этой функции

Вы лучше приложите мне советник, где есть эта функция :D 
А зачем мне скрипт, где ее нет?
avatar

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

  • 3 ноября 2015, 17:12
+
0
Есть готовый вариант: www.opentraders.ru/downloads/918/
Трейлинг может осуществляться по фракталам, по экстремумам прошлых баров или по указанному количеству пунктов. Может запускаться как отдельный советник или скрипт, совместно с любым советником.
avatar

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

  • 3 ноября 2015, 17:34
+
0
это все не то, я видел такой — слишком много ненужного, автор пишет, но сам не пользуется, у него есть еще навороченее тралл, но без того, что я прошу.
он не работает как скрипт.
мне не нужен тралл по ATR я думаю не кому ненужен.
нужна простая функция, которою я описал выше, для комфортной торговли.Пусть это будет даже новый эксперт, но понятный всем и прост в работе.
вы сами попробуйте выставить на нем, то что я прошу
avatar

  10  cardon Автор Сообщений: 376

  • 3 ноября 2015, 18:36
+
0
просил автора добавить, но он игнорит и дает ссылки на другие траллы не скрипты с кучей ненужных настоек.


Значит нужно было заплатить! Элементарно :D 
avatar

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

  • 3 ноября 2015, 18:46
+
0
Собрал скрипт, посмотрите:


//+------------------------------------------------------------------+
//|                                                     StupTral.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int    TrailingDist  = 300; //дистанция для включения трала
extern int    TrailingStep  = 200; //шаг трала
//+------------------------------------------------------------------+
//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ                                |
//| Функции передаётся тикет позиции, расстояние от курса открытия,  |
//| на котором трейлинг запускается (пунктов) и "шаг", с которым он  |
//| переносится (пунктов)                                            |
//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д.        |
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance,int trlstep)
  {

   double nextstair; // ближайшее значение курса, при котором будем менять стоплосс

                     // проверяем переданные значения
   if((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
     {
      Print("Трейлинг функцией TrailingStairs() невозможен из-за некорректности значений переданных ей аргументов.");
      return;
     }

// если длинная позиция (OP_BUY)
   if(OrderType()==OP_BUY)
     {
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()))
         nextstair=OrderOpenPrice()+trldistance*Point;

      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
         nextstair=OrderStopLoss()+trldistance*Point;

      // если текущий курс (Bid) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if(Bid>=nextstair)
        {
         if(((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice())) && (OrderOpenPrice()+trlstep*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
           {
            if(!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice()+trlstep*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
           }
        }
      else
        {
         if(!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()+trlstep*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
        }
     }

// если короткая позиция (OP_SELL)
   if(OrderType()==OP_SELL)
     {
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()))
         nextstair=OrderOpenPrice() -(trldistance+MarketInfo(Symbol(),MODE_SPREAD))*Point;

      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
         nextstair=OrderStopLoss() -(trldistance+MarketInfo(Symbol(),MODE_SPREAD))*Point;

      // если текущий курс (Аск) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if(Ask<=nextstair)
        {
         if(((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice())) && (OrderOpenPrice() -(trlstep+MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
           {
            if(!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() -(trlstep+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
           }
        }
      else
        {
         if(!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()-(trlstep+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+
void Trailing()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            TrailingStairs(OrderTicket(),TrailingDist,TrailingStep);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   while(!IsStopped())
     {
      if(TrailingStep!=0) Trailing();
     }
  }
//+------------------------------------------------------------------+

avatar

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

  • 3 ноября 2015, 21:41
+
0
спасибо я обрадовался, но проверив его в работе он работает не верно, приложил видео.
Он начинает тралить с момента, как он появился на графике, а надо чтоб начинал работу при достижении выставленного например:
перевод в БУ при достижении «N» пунктов и после чего, включается тралл.
rghost.ru/private/8xXR2TxBQ/c5eeb5566394cc037acc822d303d3478
avatar

  10  cardon Автор Сообщений: 376

  • 4 ноября 2015, 09:53
+
0
Понадеялся на чужой код, ага все приходится делать самому. Вот набросал, сейчас вместе с вами поставлю на отладку.


//+------------------------------------------------------------------+
//|                                                     StupTral.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property show_inputs

extern int    TrailingDist  = 50; //дистанция для включения трала
extern int    TrailingStep  = 20; //шаг трала
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               // цена прошла дистанцию
               if(Bid-OrderOpenPrice()>TrailingDist*Point)
                 {
                  // стоп ордера меньше чем на расстоянии шага от цены
                  if(OrderStopLoss()<Bid-TrailingStep*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStep*Point,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               // цена прошла дистанцию
               if((OrderOpenPrice()-Ask)>TrailingDist*Point)
                 {
                  // стоп ордера меньше чем на расстоянии шага от цены
                  if((OrderStopLoss()>(Ask+TrailingStep*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStep*Point,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   while(!IsStopped())
     {
      if(TrailingDist>0) Trailing();
     }
  }
//+------------------------------------------------------------------+


Редактирован: 4 ноября 2015, 16:32
avatar

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

  • 4 ноября 2015, 16:08
+
0
В таком виде работает. Когда бросаешь на график, изменяет стоп согласно условиям. Но скрипт штука одноразовая, поэтому чтобы трал постоянно двигался за ценой нужен советник.
avatar

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

  • 4 ноября 2015, 17:42
+
0
блин давайте сделаем тогда эксперта, перепробовал кучу, но нет таких условий
эксперт тралл mt4 пятизнак
простой тралл по пунктам
должен уметь выставлять БУ (перевод в БУ при достижение количества пунктов)
размер БУ в пунктах
включать тралл от БУ
выстовить расстояние между ценой и траллом
шаг тралла
пример работы:
мы выставляем размер БУ в пп. допустим 300 пп. расстояние тралла 100, число в пп. при котором будет перевод в БУ(допустим 400) при достижении 400 пп. стоплосс переносится в БУ на 300, далее включается тралл с расстоянием от цены 100 пп.
avatar

  10  cardon Автор Сообщений: 376

  • 4 ноября 2015, 19:21
+
+1
Сделал. Можете прогнать в тестере. Советник сам может выставлять ордера и тралить.


//+------------------------------------------------------------------+
//|                                                         Tral.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots      = 0.1; // лот
extern int StopLoss     = 900; // лось
extern int TakeProfit   = 900; // язь
extern int Slip         = 30;  // реквот
extern int BuySell      = 1;   // 1-Buy 2-Sell 0-OFF
extern int TrailingDist = 500; // дистанция для включения трала
extern int TrailingStep = 200; // шаг трала
extern int Magic        = 0;   // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               // цена прошла дистанцию
               if(Bid-OrderOpenPrice()>TrailingDist*Point)
                 {
                  // стоп ордера меньше чем на расстоянии шага от цены
                  if(OrderStopLoss()<Bid-TrailingStep*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStep*Point,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               // цена прошла дистанцию
               if((OrderOpenPrice()-Ask)>TrailingDist*Point)
                 {
                  // стоп ордера меньше чем на расстоянии шага от цены
                  if((OrderStopLoss()>(Ask+TrailingStep*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStep*Point,OrderTakeProfit(),0,Yellow);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    r=0;
   double sl=0,tp=0;

//--- sell conditions
   if(BuySell==2)
     {
      if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(BuySell==1)
     {
      if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1) OpenPos();
   if(TrailingDist>0) Trailing();
  }
//+------------------------------------------------------------------+

avatar

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

  • 4 ноября 2015, 22:11
+
0
Хоть и не виртуальный трал, но очень достойный *drinks* 
Погонял, работает как часы!
avatar

  19  pacak Сообщений: 552 - варвар Andre

  • 5 ноября 2015, 18:49
+
0
спасибо, а можно узнать описание? что такое BuySell = 1; // 1-Buy 2-Sell 0-OFF
лось это стоп? а язь это тейк? реквот это что? БУ есть тут? или сразу тралл с позиции?
avatar

  10  cardon Автор Сообщений: 376

  • 4 ноября 2015, 23:15
+
0
а можно узнать описание? что такое BuySell = 1; // 1-Buy 2-Sell 0-OFF
лось это стоп? а язь это тейк? реквот это что? БУ есть тут? или сразу тралл с позиции?


А как насчет немного подумать и потестить?
avatar

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

  • 4 ноября 2015, 23:31
+
0
потестил спасибо, немного непривычно, но смело можно оставить ордер. Можно чтоб он отображал что нибудь, например % прибыли или убытка от депо в день или еще что нить в правом углу
Редактирован: 5 ноября 2015, 17:24
avatar

  10  cardon Автор Сообщений: 376

  • 5 ноября 2015, 17:18

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