← К каталогу
Исходный код · ID 3618

ВРОДЕ НЕ ГЛЮЧЕННЫЙ СОВЕТНИК.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для MetaTrader 4, предназначенный для работы с пользовательскими индикаторами. Он считывает буферы до пяти указанных индикаторов и определяет сигналы на открытие и закрытие позиций, а также позволяет управлять позициями вручную через кнопки на графике.

Советник поддерживает фильтрацию по времени торговли, доливку позиций за счёт свободной маржи, а также набор средств управления рисками: безубыток, трейлинг-стоп, фиксация прибыли и ограничение убытков. Доступны уведомления-алерты при появлении торговых сигналов.

Торговые операции выполняются через стандартные средства MetaTrader 4. Работа советника зависит от корректности настройки индикаторов и параметров торговли, автор не гарантирует прибыльность.

Настройки программы

НастройкаОписание
INDICATOR1 Имя пользовательского индикатора, буферы которого используются для определения торговых сигналов (первый индикатор).
Buffer_1_BUY1 Номер буфера индикатора INDICATOR1, который используется для определения сигнала на покупку.
Buffer_1_SELL1 Номер буфера индикатора INDICATOR1, который используется для определения сигнала на продажу.
SignalBar_11 Номер бара, на котором ожидается сигнал от индикатора INDICATOR1 (0 — текущий бар, 1 — предыдущий).
____1 Разделитель (пустой параметр) между группами настроек индикаторов.
INDICATOR2 Имя пользовательского индикатора, буферы которого используются для определения торговых сигналов (второй индикатор).
Buffer_1_BUY2 Номер буфера индикатора INDICATOR2, который используется для определения сигнала на покупку.
Buffer_1_SELL2 Номер буфера индикатора INDICATOR2, который используется для определения сигнала на продажу.
SignalBar_12 Номер бара, на котором ожидается сигнал от индикатора INDICATOR2 (0 — текущий бар, 1 — предыдущий).
____2 Разделитель (пустой параметр) между группами настроек индикаторов.
INDICATOR3 Имя пользовательского индикатора, буферы которого используются для определения торговых сигналов (третий индикатор).
Buffer_1_BUY3 Номер буфера индикатора INDICATOR3, который используется для определения сигнала на покупку.
Buffer_1_SELL3 Номер буфера индикатора INDICATOR3, который используется для определения сигнала на продажу.
SignalBar_13 Номер бара, на котором ожидается сигнал от индикатора INDICATOR3 (0 — текущий бар, 1 — предыдущий).
____3 Разделитель (пустой параметр) между группами настроек индикаторов.
INDICATOR4 Имя пользовательского индикатора, буферы которого используются для определения торговых сигналов (четвёртый индикатор).
Buffer_1_BUY4 Номер буфера индикатора INDICATOR4, который используется для определения сигнала на покупку.
Buffer_1_SELL4 Номер буфера индикатора INDICATOR4, который используется для определения сигнала на продажу.
SignalBar_14 Номер бара, на котором ожидается сигнал от индикатора INDICATOR4 (0 — текущий бар, 1 — предыдущий).
____4 Разделитель (пустой параметр) между группами настроек индикаторов.
INDICATOR5 Имя пользовательского индикатора, буферы которого используются для определения торговых сигналов (пятый индикатор).
Buffer_1_BUY5 Номер буфера индикатора INDICATOR5, который используется для определения сигнала на покупку.
Buffer_1_SELL5 Номер буфера индикатора INDICATOR5, который используется для определения сигнала на продажу.
SignalBar_15 Номер бара, на котором ожидается сигнал от индикатора INDICATOR5 (0 — текущий бар, 1 — предыдущий).
____5 Разделитель (пустой параметр) между группами настроек индикаторов.
txt_3 Текстовый заголовок для раздела настроек фильтров времени.
time_type Режим работы фильтра времени: разрешить торговлю только в указанные периоды или запретить торговлю в указанные периоды.
hour_filtr Периоды суток для фильтрации торговли в формате ЧЧ:ММ-ЧЧ:ММ через запятую. Если пусто, фильтр времени отключён.
____6 Разделитель (пустой параметр) между группами настроек.
Adding Включает или отключает режим доливки позиций при наличии свободной маржи и положительного результата по текущей стороне.
Step Шаг доливки позиции в процентах от баланса, используемый при расчёте размера следующей доливки.
d_type Тип прогрессии при расчёте шага доливки: геометрическая или арифметическая.
_____ Разделитель (пустой параметр) между группами настроек.
lot_type Основа для расчёта размера лота: от баланса или от профита.
Lot Размер лота в процентах от баланса или профита в зависимости от настройки расчёта лота.
lot_doliv Метод расчёта лота доливки: умножение на коэффициент или использование фиксированного значения.
koef_lot Коэффициент или фиксированное значение, используемое при расчёте лота доливки в зависимости от выбранного типа.
______ Разделитель (пустой параметр) между группами настроек.
CloseRevers При включении советник автоматически закрывает позиции противоположного направления при получении встречного сигнала от индикатора.
NoLossStart Процент прибыли от баланса, при достижении которого включается режим безубытка. Если равно нулю, функция отключена.
MinProfitNoLoss Минимальная прибыль в валюте депозита, при достижении которой активируется режим безубытка после достижения заданного процента прибыли.
ProfitTral Процент прибыли от баланса, при достижении которого запускается трейлинг-стоп. Если равно нулю, функция отключена.
TralStop Откат прибыли в процентах от максимальной, при котором трейлинг-стоп закрывает позицию.
_______ Разделитель (пустой параметр) между группами настроек.
ProfClose Процент прибыли от баланса, при достижении которого все открытые позиции закрываются. Если равно нулю, функция отключена.
LossClose Процент убытка от баланса, при достижении которого все открытые позиции закрываются. Если равно нулю, функция отключена.
LossLastP Процент убытка от последнего зафиксированного профита, при достижении которого позиции закрываются. Если равно нулю, функция отключена.
LossCurrP Процент убытка от текущего профита, при достижении которого позиции закрываются. Если равно нулю, функция отключена.
MinCurrP Минимальный процент текущего профита, необходимый для расчёта убытка по позиции. Если равно нулю, функция отключена.
________ Разделитель (пустой параметр) между группами настроек.
slippage Допустимое проскальзывание цены при открытии и закрытии ордеров.
Magic Магический номер ордеров, используемый для идентификации позиций, открытых данным советником.
AlertON Включает или отключает всплывающие уведомления при появлении торговых сигналов и важных событий.
Получить полный код

Поиск по коду файла

#property version   "9.00"
#property strict
#property description "Советник для любого индикатора"
#property description "Советник работает бесплатно в тестере, на всех демо счетах и на реальных счетах с депозитом до 100 usd. На более крупные депозиты можно купить советник без ограничений."

/*1) при определенном % прибыли что бы он выставлял без убыток и тралил в % по нарастающему %?.
True/false
2) Доливал позицию на свободную освободившеюся маржу
True /false
3)Открывал по сигналу сделку и закрывал по сигналу сделку
True /false
.4)Фиксация прибыли в % ограничение потерь в %*/

enum TYPE_D
 { 
   MULT,     // геометрическая прогрессия
   SUMM      // арифмитическая прогрессия
 };

enum type_time
 { 
   en_time,       // разрешить торговлю
   dis_time       // запретить торговлю
 };

enum type_lot
 { 
   balance,     // баланса
   profit       // профита
 };

enum doliv_lot
 { 
   koef,     // умножать на коэффициент
   fix       // фиксированный лот
 };

extern string  INDICATOR1            = "FOREX FVG Indicator";          //индикатор буферов #1
extern int     Buffer_1_BUY1         = 0;           //номер буфера на покупку
extern int     Buffer_1_SELL1        = 3;           //номер буфера на продажу
extern int     SignalBar_11          = 0;           //бар на котором ждем сигнал (0- текущий  1 - прошлый)
extern string  ____1                 = "";//___
extern string  INDICATOR2            = "";          //индикатор буферов #2
extern int     Buffer_1_BUY2         = 0;           //номер буфера на покупку
extern int     Buffer_1_SELL2        = 1;           //номер буфера на продажу
extern int     SignalBar_12          = 1;           //бар на котором ждем сигнал (0- текущий  1 - прошлый)
extern string  ____2                 = "";//___
extern string  INDICATOR3            = "";          //индикатор буферов #3
extern int     Buffer_1_BUY3         = 0;           //номер буфера на покупку
extern int     Buffer_1_SELL3        = 1;           //номер буфера на продажу
extern int     SignalBar_13          = 1;           //бар на котором ждем сигнал (0- текущий  1 - прошлый)
extern string  ____3                 = "";//___
extern string  INDICATOR4            = "";          //индикатор буферов #4
extern int     Buffer_1_BUY4         = 0;           //номер буфера на покупку
extern int     Buffer_1_SELL4        = 1;           //номер буфера на продажу
extern int     SignalBar_14          = 1;           //бар на котором ждем сигнал (0- текущий  1 - прошлый)
extern string  ____4                 = "";//___
extern string  INDICATOR5            = "";          //индикатор буферов #5
extern int     Buffer_1_BUY5         = 0;           //номер буфера на покупку
extern int     Buffer_1_SELL5        = 1;           //номер буфера на продажу
extern int     SignalBar_15          = 1;           //бар на котором ждем сигнал (0- текущий  1 - прошлый)
extern string  ____5                 = "";//___
extern string  txt_3                 = "______ФИЛЬТРЫ ВРЕМЕНИ_______";//.
extern type_time time_type           = en_time;     // В указаные ниже периоды...
extern string hour_filtr             = "04:00-08:00,08:30-09:15,15:00-15:45,17:15-18:00";          // Периоды суток формата ЧЧ:ММ-ЧЧ:ММ (если пусто, то фильтр откл.)
extern string  ____6                 = "";//___
extern bool    Adding               = false;         //Доливал позицию на свободную освободившеюся маржу
extern int     Step                 = 2;           //шаг доливки (% от баланса)
extern TYPE_D  d_type               = SUMM;         //тип шага доливки

extern string  _____                = "";
extern type_lot lot_type            = balance;      //Расчет лота от ...
extern double  Lot                  = 7.0;         //лот в %
extern doliv_lot lot_doliv          = koef;         //Расчет лота доливки
extern double  koef_lot             = 1.0;          //Значение для расчета лота доливки (коэфф. или фикс.)

extern string  ______               = "";
extern bool    CloseRevers          = false ;       //закрывать ордера при встречном сигнале
extern double  NoLossStart          = 0;         //безубыток в % от Баланса (0- откл)
extern double  MinProfitNoLoss      = 0;         //минимальная прибыль безубытка в валюте депозита

extern double  ProfitTral           = 100;         //прибыль в % от Баланса при котором стартует трал (0- откл)
extern double  TralStop             = 50;        //откат прибыли в % от максимальной
extern string  _______              = "";
extern double  ProfClose            = 700;        //прибыль в % от Баланса при которой закрываем все сделки (0- откл)
extern double  LossClose            = 0;        //убыток в % от Баланса при котором закрываем все сделки (0- откл)
extern double  LossLastP            = 70;        //убыток в % от последнего зафикс. профита (0- откл)
extern double  LossCurrP            = 0;        //убыток в % от текущего профита (0- откл)
extern double  MinCurrP             = 0;        //% миним. текущего профита для расчета убытка
extern string  ________             = "";
extern int     slippage             = 20;          // проскальзывание
extern int     Magic                = 10;           
int     Orders               = 100000000;    //максимальное кол-во открытых позиций       
extern bool    AlertON              = true;       //алерт при появлении сигнала на открытие позиции

datetime TimeBar;
double lastP = 0;
double max_perc = 0;
double STOPLEVEL;
string val;
double ProfitTrallStart=0;
bool Trall=false;
bool NoLoss=false;
int step_dolivka = 0;
ushort u_sep;                  // код символа разделителя
string result[];
int k;
double _lot;

int OnInit()
{
      // код доступен только после оплаты
   }

void OnTick()
{
      // код доступен только после оплаты
   }
   Comment(txt,"\nProfit = ",DoubleToString(Profit,2)," (",DoubleToString(perc_profit,1),"%)",

               "\nBalance = ",DoubleToString(AB,2),
               "\nEquity = ",DoubleToString(AccountEquity(),2),
               "\nFreeMargin = ",DoubleToString(AccountFreeMargin(),2),
               "\n",IntegerToString(b)," buy  ",IntegerToString(s)," sell",
               "\n",DoubleToStr(lot_buy,2)," lots buy",
                "\n",DoubleToStr(lot_sell,2)," lots sell");
   if(!IsNewOrderAllowed()) return;

   if(S1!=0 && !timetrade()) {S1 = 0; TimeBar=Time[0];}

   if (S1>0 || (Adding && ProfitB>0 && b>0))
   {
      if (CloseRevers && s>0) 
      {
          if (AlertON) Alert("Закрытие SELL на обратном сигнале ");
          CLOSEORDER(OP_SELL);
          _lot = LOT();
          step_dolivka = 0;
      }
      if (b<Orders && (ProfitB+AB)>=calc_step(step_dolivka))
      {
         if (AlertON) Alert(Symbol()," Сигнал на доливку BUY");
         if (lot_doliv==koef) _lot*=koef_lot;
         else _lot=koef_lot;
         _lot = CheckVolumeValue(_lot);
         if(SendOrder(OP_BUY, _lot, NormalizeDouble(Ask,Digits))) {step_dolivka++; return;}
      }
      if (b<Orders && S1>0 && TimeBar!=Time[0])
      {
         if (AlertON) Alert(Symbol()," Сигнал от индикатора на открытие BUY");
         _lot = LOT();
         TimeBar=Time[0];
         if(SendOrder(OP_BUY, _lot, NormalizeDouble(Ask,Digits))) return;
      }
   }
   if (S1<0 || (Adding && ProfitS>0 && s>0))
   {
      if (CloseRevers && b>0) 
      {
          if (AlertON) Alert("Закрытие BUY на обратном сигнале ");
         CLOSEORDER(OP_BUY);
         _lot = LOT();
         step_dolivka = 0;
      }
      if (s<Orders && (ProfitS+AB)>=calc_step(step_dolivka))
      {
         if (AlertON) Alert(Symbol()," Сигнал на доливку SELL");
         if (lot_doliv==koef) _lot*=koef_lot;
         else _lot=koef_lot;
         _lot = CheckVolumeValue(_lot);
         if(SendOrder(OP_SELL, _lot, NormalizeDouble(Bid,Digits))) {step_dolivka++; return;} 
      }
      if (s<Orders && S1<0 && TimeBar!=Time[0])
      {
         if (AlertON) Alert(Symbol()," Сигнал от индикатора на открытие SELL");
         _lot = LOT();
         TimeBar=Time[0];
         if(SendOrder(OP_SELL, _lot, NormalizeDouble(Bid,Digits))) return; 
      }
   }
}

bool timetrade()
 { 
   if(k<1) return(true);
   int index_hour;
   datetime start_time, end_time;

   for(index_hour=0; index_hour<k; index_hour++)
       {
        start_time = StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+StringSubstr(result[index_hour],0,5));
        end_time   = StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+StringSubstr(result[index_hour],6,5));

        i

Показано первые 50% кода (символов: 24368)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 436,80₽ ≈ $29.78