Помощь написание советника!

Тема в разделе "Автоматизированная торговля - советники Форекс", создана пользователем willrek, 7 янв 2017.

  1. Приглашаем принять участие в акции "Ты пишешь - мы платим" от нашего спонсора AMEGA
    Пиши сообщения и получай бонусы на торговый счёт каждый месяц.
    Выводи прибыль в любое время и без ограничений.
    Торгуй на лучших условиях рынка Forex!

Рекламные объявления MyForex
  1. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Здравствуйте уважаемые форумчане!
    Хочу написать советник, как и все начинающие пробую с простого для изучения взял стратегию основанную на индикаторе ВВ с добавлением различных фильтров таких как MACD, ATR, Stoch.

    Стратегию входов и выходов по индикаторам:
    Открытие позиции на продажу: Цена касается или пробивает верхнюю полосу Bollinger. Далее проверяет показания индикатора Stoch, если он находится в зоне перекупленности (80), когда линия нижней границы пересекает и входит в рынок на открытие следующей свечи. Остальные индикаторы MACD, ATR, реализовать их в стратегию.

    Хотелось бы реализовать его работу и добавлений модификаций его фильтров и для флейте, основать его для трендовой и контро-трендовой торговли, также можно дополнить функции для отработки откатов. Но в данном советнике происходит часто ложные сигналы для входа в рынок... Кому интересно заняться данным советником и его дальнейшей модификацией, буду очень благодарен Вам!

    Сам советник с исходным кодом:
     
  2. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 1.80 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.508
    Симпатии:
    4.705
    Лучше код закачивать на форум, потому-что переходить по странного вида ссылкам от только что зарегистрировавшегося форумчанина - не очень комильфо.. :Unknown:
     
  3. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Вот ту и проблема хотел приложить файл)
    Произошла ошибка
    Файл с этим расширением загружать нельзя.

    Origenal.mq4
     
  4. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Вот исходный код советника:
    Код:
    //+------------------------------------------------------------------+
    //|               МОДИФИКАЦИИ И ОБНОВЛЕНИЕ СОВЕТНИКА                 |
    //+------------------------------------------------------------------+
    //|07.01.17 Sergey Gritsay                                           |
    //|https://www.mql5.com/ru/users/sergey1294                          |
    //|1. Модификация скрипта советника, доп. параметры: SL, TP, CS, SP  |
    //|                                                                  |
    //|                                                                  |
    //|                                                                  |
    //|                                                                  |
    //+------------------------------------------------------------------+
    #property copyright "Origenal"
    #property link      ""
    #property version   "1.00"
    #property strict
    //===========================================================================
    sinput string s1                   = "Параметры TP / SL"; /* земенил тип переменной extern на sinput*/
    input int             StopLoss     = 300;        // Стоп Лосс (Пипс)
    input int             TakeProfit   = 500;        // Тейк Профит (Пипс)
    input int             Slippage     = 10;         // Проскальзование (Пипс)
    //===========================================================================
    sinput string s2                   = "Параметры объема лота"; /* земенил тип переменной extern на sinput*/
    input double          Lot          = 0.01;       // Объем лота
    //===========================================================================
    sinput string s3                   = "Параметры индикаторов"; /* земенил тип переменной extern на sinput*/
    input bool            CloseSignal  = false;     // закрытие по сигналу ( false - выкл, true - вкл)
    input int             BBPeriod     = 20;         // Период ВВ
    input double          BBDev        = 2.0;        // Отклонение ВВ
    input int             MAPeriod     = 20;         // Период МА
    input ENUM_TIMEFRAMES TimeFrameMA  = PERIOD_D1;  // Тайм Фрейм МА
    //===========================================================================
    sinput string s4                   = "Параметры Magic / Coment"; /* земенил тип переменной extern на sinput*/
    input int             MagicNumber  = 20110315;   // Номер копии
    input string          CommentOrder = "Origenal"; // Комментарий к ордеру
    //===========================================================================
    
    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---
    
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
    
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
       if(TotalOrder()==0)OrderOpen(GetSignalOpen());
       else
         {
          ModifySL(StopLoss);
          ModifyTP(TakeProfit);
          if(CloseSignal)OrderClose(GetSignalClose());
         }
      }
    //+------------------------------------------------------------------+
    int GetSignalOpen()
      {
       double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
       double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
       double ma=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
       double ma1=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
    
       if(Ask<bbl && ma>ma1) return(OP_BUY);
       if(Bid>bbh && ma<ma1) return(OP_SELL);
       return(WRONG_VALUE);
      }
    //+------------------------------------------------------------------+
    int GetSignalClose()
      {
       double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
       double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
    
       if(Bid>bbh)return(OP_BUY);
       if(Ask<bbl)return(OP_SELL);
       return(WRONG_VALUE);
      }
    //+------------------------------------------------------------------+
    void OrderOpen(int type)
      {
       double price_open=0.0;
       if(type==WRONG_VALUE)return;
       if(!IsTradeAllowed())return;
    
       if(type==OP_BUY)price_open = NormalizeDouble(Ask,_Digits);
       if(type==OP_SELL)price_open = NormalizeDouble(Bid,_Digits);
    
       int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
       if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void OrderClose(int type)
      {
       double price_close=0.0;
       if(type==WRONG_VALUE)return;
       if(!IsTradeAllowed())return;
       int total=OrdersTotal();
       for(int i=total-1; i>=0; i--)
         {
          if(!OrderSelect(i,SELECT_BY_POS))continue;
          if(OrderMagicNumber()!=MagicNumber)continue;
          if(OrderSymbol()!=_Symbol)continue;
          if(OrderType()!=type)continue;
          if(type==OP_BUY)price_close=NormalizeDouble(Bid,_Digits);
          if(type==OP_SELL)price_close=NormalizeDouble(Ask,_Digits);
          bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
          if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
         }
      }
    //+------------------------------------------------------------------+
    int TotalOrder()
      {
       int value=0;
       int total=OrdersTotal();
       for(int i=total-1; i>=0; i--)
         {
          if(!OrderSelect(i,SELECT_BY_POS))continue;
          if(OrderSymbol()!=Symbol())continue;
          if(OrderMagicNumber()!=MagicNumber)continue;
          if(OrderType()>1)continue;
          value++;
         }
       return(value);
      }
    //+------------------------------------------------------------------+
    void ModifySL(double sl)
      {
       if(sl<=0)return;
       double price_sl=0.0;
       int total=OrdersTotal();
       for(int i=total-1; i>=0; i--)
         {
          if(!OrderSelect(i,SELECT_BY_POS))continue;
          if(OrderMagicNumber()!=MagicNumber)continue;
          if(OrderSymbol()!=_Symbol)continue;
          if(OrderType()>1)continue;
          if(OrderStopLoss()==0)
            {
             if(OrderType()==OP_BUY)price_sl=NormalizeDouble(OrderOpenPrice()-sl*_Point,_Digits);
             if(OrderType()==OP_SELL)price_sl=NormalizeDouble(OrderOpenPrice()+sl*_Point,_Digits);
             if(price_sl<=0)continue;
             bool res=OrderModify(OrderTicket(),OrderOpenPrice(),price_sl,OrderTakeProfit(),0);
             if(!res)Print("Ошибка модификации стоп лосса ордера № - ",GetLastError());
            }
         }
      }
    //+------------------------------------------------------------------+
    void ModifyTP(double tp)
      {
       if(tp<=0)return;
       double price_tp=0.0;
       int total=OrdersTotal();
       for(int i=total-1; i>=0; i--)
         {
          if(!OrderSelect(i,SELECT_BY_POS))continue;
          if(OrderMagicNumber()!=MagicNumber)continue;
          if(OrderSymbol()!=_Symbol)continue;
          if(OrderType()>1)continue;
          if(OrderTakeProfit()==0)
            {
             if(OrderType()==OP_BUY)price_tp=NormalizeDouble(OrderOpenPrice()+tp*_Point,_Digits);
             if(OrderType()==OP_SELL)price_tp=NormalizeDouble(OrderOpenPrice()-tp*_Point,_Digits);
             if(price_tp<=0)continue;
             bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),price_tp,0);
             if(!res)Print("Ошибка модификации тейк профита ордера № - ",GetLastError());
            }
         }
      }
    //+------------------------------------------------------------------+
     
  5. Mihail

    Mihail
    Команда форума

    Баланс: 0.00 y.e.
    Регистрация:
    6 май 2010
    Сообщения:
    13
    Симпатии:
    9
    mq4 - добавлено, пробуйте снова
     
  6. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Обновление версии советника 1.01
    От: Sergey Gritsay
    Сделал кое какие изменения с блоком сигналов, так сказать для будущей манипуляции с сигналами индикаторов. Вынес определения сигналов в отдельные функции, так же убрал определение на нулевом баре, работаем только по закрытым барам. Добавил варианты сигналов для индикатора Bollinger Bands, для удобства выбора сигнала реализовал в виде енум перечисления. В настройки добавил выбор таймфрейма и варианты сигнала для индикатора Bollinger Bands.
     

    Вложения:

    • Origenal__1.mq4
      Размер файла:
      18,4 КБ
      Просмотров:
      82
  7. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Обновление версии советника 1.02
    От: Sergey Gritsay
    Исправил функции GetSignalBB() и GetSignalMA()
     

    Вложения:

    • Origenal__2.mq4
      Размер файла:
      18,4 КБ
      Просмотров:
      88
  8. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 1.80 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.508
    Симпатии:
    4.705
    так вы и сами неплохо справляетесь или автор советника справляется )

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

    Обычно советники пишутся под идею, за которой стоит предполагаемая рыночная закономерность.. Например повышение волатильности с открытием европейской или американской сессии. Как это можно использовать? какие индикаторы нам измерят и дадут сигнал - пляшут обычно от идеи. То есть индикаторы идут как измерители процессов, как и тот же Боллинджер. :Hi:


    Но процесс, не спорю - интересный и увлекательный (зависит от цели).. :)
     
  9. willrek

    willrek Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    7 янв 2017
    Сообщения:
    14
    Симпатии:
    8
    Здравствуйте! Мы в данный момент проводим стратегию прорыв волатильности и трендовой торговли но для этого нам нужно реализовать сам Bollinger для более точных входов в рынок и только после этого будем заниматься сигналами фильтров.
     
  10. san

    san Знаток

    Баланс: 0.80 y.e.
    Регистрация:
    2 дек 2015
    Сообщения:
    1.833
    Симпатии:
    1.021
    Я что-то запутался: сколько вас? И что в этой ветке предполагается- писАть советник или проводить стратегию?:)
     
  11. Nikol1986

    Nikol1986 Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    13 сен 2016
    Сообщения:
    21
    Симпатии:
    0
    кто мне поможет вскрыть советник???у меня только триал
     
  12. Assol

    Assol MyForex Team Admin
    Команда форума

    Баланс: 4.30 y.e.
    Регистрация:
    24 янв 2011
    Сообщения:
    4.519
    Симпатии:
    6.452
    @Nikol1986, а как же авторские права?:Acute:
     
  13. Nikol1986

    Nikol1986 Новичок

    Баланс: 0.00 y.e.
    Регистрация:
    13 сен 2016
    Сообщения:
    21
    Симпатии:
    0
    вы можете мне помочь??кто взломает его отдам...бот огонь...этот товарищь цену завысил!!!
     
  14. Assol

    Assol MyForex Team Admin
    Команда форума

    Баланс: 4.30 y.e.
    Регистрация:
    24 янв 2011
    Сообщения:
    4.519
    Симпатии:
    6.452
    Кто взломает, тот и сам возьмёт.
    А Вы знаете цену его труду? Знаете сколько он вложил в него своего времени и знаний?
    Это же откровенное воровство. У нас таким не занимаются на форуме.