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

Рейтинг 2081



РЕКОМЕНДУЮ




Лучшее от YARICH



Советник по свечам Комментариев 11
2021-10-20 08:33:05Рейтинг 0

Советник по свечам

Привет!
Прошу сделать советник для незатейливого советника для сбора прибыли.

Суть — ищем свечу на недельном(дневном(переключаемый параметр)) графике в условно 1000п и на новой свече открываемся в обратку в надежде на откат.

Если отката нет, добрубаем сетку. Новые ордера должны открываться с такими же установками, то есть если за неделю не прошли эти же 1000п, то ордер не открываем, а ждем ТП или когда все же пройдем 1000п и на новой свече доливаемся(см скрин)


И нужен ТП в пунктах(отключаемый), в деньгах(отключаемый) и на обратном сигнале(отключаемый, тут закрываем тоже на новой свече)

итого нужен размер лота, размер свечи, настройки ТП, magic

Потом добавим список валют*friends* 
candle_body_size1_V1.ex4 (9 Kb)
  • +1
  • Просмотров: 2774
  • 20 октября 2021, 08:33
  • YARICH
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник на 2-х индикаторах
Следующая запись в группе  
Доработать советник "Коробка" МТ5
20 октября 2021
20 октября 2021

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

+
0
на 25-е
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 20 октября 2021, 22:31
+
+1
avatar

  13  verta81 Сообщений: 354

  • 22 октября 2021, 23:23
+
0
этот вариант не тот что надо. Доп ордера открывает не по условию, цена не прошла 1000п, а иногда даже почти на одной цене ставит несколько сделок
Подождем 25ое*friends* 
Редактирован: 23 октября 2021, 08:50
avatar

  13  YARICH Автор Сообщений: 34

  • 23 октября 2021, 08:49
+
0
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {     
    if(AllProfit()>Profit && Profit>0 && CountTrades()>0)
     {
      CloseAll();
     }
//-------------------------------------------------------------
   if(t!=Time[0])
     {
     if(CountTrades()<1)
       {
        if(Sig()==0)
          {
           PutOrder(0,Ask);
          } 
         if(Sig()==1)
           {     
            PutOrder(1,Bid);
           }
         }
     if(CountTrades()>0)
       {
         if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=SizeCanle/**_Point*/)
           {
            PutOrder(0,Ask);
           }        
         if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=SizeCanle/**_Point*/)
           {   
            PutOrder(1,Bid);
           }
        }   
     t=Time[0];
     }
   Comment("\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

avatar

  16  ssg Сообщений: 817

  • 23 октября 2021, 05:43
+
+1
мой вариант за 20 лет постоянным лотом: www.opentraders.ru/downloads/3159/

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 23 октября 2021, 09:33
+
0
Вот это другое дело! Поставил на демо на 24 пары*neo* 
Через 20 лет скину результаты:D 
Спасибо за работу, Андрей!!!
Редактирован: 23 октября 2021, 19:44
avatar

  13  YARICH Автор Сообщений: 34

  • 23 октября 2021, 19:43
+
+1
Вспомнил о своем старинном мультивалютном советнике с очень схожей стратегией. советника.
Суть стратегии ясна из названия
Немного подчистил код.
Советник почти полностью написан с использованием функция Игоря Кима. Правда функции упращёном варианте.
Пары торгуются независимо друг от друга.
Направление торговли определяется минимальным размером тела свечи (переменная Razmah) и бычья или медвежья свеча.
Переменная Razmah подбирается для каждой пары индивидуально и прописывается в функции
<code>//+------------------------------------------------------------------+
//| Expert InitParameters function                                   |
//+------------------------------------------------------------------+   
  bool InitParameters() {
  if (Symbol()=="EURUSD") {
    bTradeBuy=False;
    switch (DayOfWeek()) {
      case 1:
        Razmah=1000;</code>

Внимательно прочитайте действия с переменной Razmah в настройках.
Там все прописано, разжёвывать не буду.
Кол-во пар не ограниченно.Записывается в
<code>string Symbol_array[] = {"EURUSD","GBPUSD","USDJPY","USDCHF"};</code>

Если увеличиваете кол-во пар — дополняйте эти пары в bool InitParameters() {
Аналогично там же можно прописать тейки и стопы для каждой пары отдельно.
Закрытие либо по тейку, либо по стопу.
Если на начало новой недели закрытия не произошло, то при смене сигнала по паре произойдет закрытие позиции.
Так же есть трал и безубыток для каждой пары отдельно.
Открытия раз в неделю в понедельник.
Есть проверка на максимальный спред.
В свое время советник торговал на реальном счете успешно, но я выставлял минимальный лот и прибыль была не большая.
Выкладываю код не файлом, что бы каждый мог посмотреть код не скачивая «кота в мешке».
Редактирован: 25 октября 2021, 19:13
avatar

  16  ssg Сообщений: 817

  • 25 октября 2021, 19:10
+
+1
<code>
//+------------------------------------------------------------------+
//|                                              Недельный откат.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict

//------- Внешние параметры советника ------------------------------------------
extern string _P_Trade = "---------- Параметры торговли";
extern ENUM_TIMEFRAMES Tf = PERIOD_W1; 
extern double Lots        = 0.1;       // Лот
extern bool   revers      = false;     // Использовать опцию реверс
extern int    HourOpenPos = 0;         // Час открытия позиции
extern int    MinuteOpenPos  = 15;     // Минуты открытия позиции
extern int    StopLoss    = 0;         // Стоп
extern int    TakeProfit  = 0;         // Тейк
extern int    Razmah      = 1000;      // Диапазон свечи 
                                        //после тестирования и подбора величены Razmah для каждой пары отдельно 
                                        //записать это значение в функцию bool InitParameters() для соответсвующей пары
                                       // и эту переменную за комментировать вот так: //extern int    Razmah      = 1000;      // Диапазон свечи 

//int Razmah; //после тестирования и подбора величены Razmah для каждой пары отдельно эту переменную раскомментировать вот так: int Razmah;
extern int    MaxSpread   = 30;        // Максимально допустимый спред пары
extern int    MAGIC       = 1000;      // Идентификатор позиций
extern string _P_BU = "---------- Параметры функции безубытка";
extern bool   UseBU       = True;      // Использовать безубыток
extern int    LevelProfit = 25;        // Уровень профита в пунктах
extern int    LevelWLoss  = 1;         // Уровень безубытка в пунктах
extern bool   ShowComment = True;      // Показывать комментарий
extern string _P_Trailing = "---------- Параметры функции трала";
extern bool   UseTrailing     = True;   // Использовать трал
extern bool   ProfitTrailing  = True;   // Тралить только профит
extern int    TrailingStop    = 60;     // Фиксированный размер трала
extern int    TrailingStep    = 5;      // Шаг трала
//------- Глобальные переменные советника --------------------------------------
extern bool   UseSound      = True;         // Использовать звуковой сигнал
extern string NameFileSound = "expert.wav"; // Наименование звукового файла
int    Slippage     = 30;                   // Проскальзывание
color  clOpenBuy    = LightBlue;            // Цвет открытия покупки
color  clOpenSell   = LightCoral;           // Цвет открытия продажи
color  clModifyBuy  = Aqua;                 // Цвет модификации покупки
color  clModifySell = Tomato;               // Цвет модификации продажи
color  clCloseBuy   = Blue;                 // Цвет закрытия покупки
color  clCloseSell  = Red;                  // Цвет закрытия продажи
string Symbol_array[] = {"EURUSD","GBPUSD","USDJPY","USDCHF"};
int countSymbol;       //=== количество торгуемых инструментов (массив Symbol_array[])
bool  bTradeBuy;
//------- Подключение внешних модулей ------------------------------------------

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

//+------------------------------------------------------------------+
//| Expert InitParameters function                                   |
//+------------------------------------------------------------------+   
  bool InitParameters() {
  if (Symbol()=="EURUSD") {
    bTradeBuy=False;
    switch (DayOfWeek()) {
      case 1:
        Razmah=1000;
        return(True);
    }
  } else if (Symbol()=="GBPUSD") {
    bTradeBuy=False;
    switch (DayOfWeek()) {
      case 1:
        Razmah=1200;
        return(True);
    }
  } else if (Symbol()=="USDCHF") {
    bTradeBuy=True;
    switch (DayOfWeek()) {
      case 1:
        Razmah=950;
        return(True);
    }
  } else if (Symbol()=="USDJPY") {
    bTradeBuy=True;
    switch (DayOfWeek()) {
      case 1:
        Razmah=1300;
        return(True);
    }
  } else {
    Comment("Советник НЕ поддерживает работу с "+Symbol());
    return(False);
  }
//---
    return(0);
  }  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
     int i;
     for(i=0; i<ArraySize(Symbol_array); i++)//=== перебор инструментов
       { 
        string symbols = Symbol_array[i];
        ManagePositions (symbols);
       } 
//---
  }
//+----------------------------------------------------------------------------+
//|  Закрытие позиций по рыночной цене                                         |
//|  Параметры:                                                                |
//|    sym - наименование инструмента ("" - текущий символ)                    |
//|    op  - операция                 (-1 - любая позиция)                     |
//|    mn  - MagicNumber              (-1 - любой магик)                       |
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  int rez;
  if (sym=="") sym=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            rez=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
          }
          if (OrderType()==OP_SELL) {
            rez=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
          }
        }
      }
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Возвращает флаг существования позиций                                     |
//|  Параметры:                                                                |
//|    sym - наименование инструмента ("" - текущий символ)                    |
//|    op  - операция                 (-1 - любая позиция)                     |
//|    mn  - MagicNumber              (-1 - любой магик)                       |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sym="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  if (sym=="") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sym) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) return(True);
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Возвращает торговый сигнал:                                               |
//|     1 - покупай                                                            |
//|     0 - сиди, кури бамбук                                                  |
//|    -1 - продавай                                                           |
//|  Параметры:                                                                |
//|    sym - наименование инструмента ("" - текущий символ)                    |
//|    tf  - таймфрейм                ( 0 - текущий таймфрейм)                 |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sym="", int tf=0) {
  int bs=0;
  int  pp=MarketInfo(sym, MODE_POINT);
  double op1=iOpen(sym,Tf,1);         
  double cl1=iClose(sym,Tf,1);        
  double l1=iLow(sym,Tf,1);             
  double h1=iHigh(sym,Tf,1);           

  // Блок анализа с присвоением значения переменной bs
  if (InitParameters()) {
  if(!revers){
        if(op1-cl1>=Razmah*pp)bs=1;
        if(cl1-op1>=Razmah*pp)bs=-1;
      }
  else{
      if(op1-cl1>=Razmah*pp)bs=-1;
      if(cl1-op1>=Razmah*pp)bs=1;
      }
  }
  return(bs);
}
</code>

Редактирован: 25 октября 2021, 19:21
avatar

  16  ssg Сообщений: 817

  • 25 октября 2021, 19:14
+
+1


//+----------------------------------------------------------------------------+
//|  Управление позициями                                                      |
//+----------------------------------------------------------------------------+
void ManagePositions(string sym="") {
  double sl=0, tp=0;
  int    bs=GetTradeSignal(sym);
  double  pa=MarketInfo(sym, MODE_ASK);
  double  pb=MarketInfo(sym, MODE_BID);
  int spread = MarketInfo(sym, MODE_SPREAD);
  int  ticket;
  
  if(UseBU) MovingInWL(sym);
  if (UseTrailing) TrailingPositions(sym);
  
 if(DayOfWeek()==1 && Hour()==HourOpenPos && Minute()>=MinuteOpenPos && Minute()<=MinuteOpenPos+5){
  if (bs>0 && spread < MaxSpread) {
    if (ExistPositions(sym, OP_SELL,MAGIC)) ClosePositions(sym, OP_SELL,MAGIC);
    if (!ExistPositions(sym, OP_BUY,MAGIC)) {
      if (StopLoss!=0) sl=pb-StopLoss*Point;
      if (TakeProfit!=0) tp=pa+TakeProfit*Point;
      ticket=OrderSend(sym, OP_BUY, Lots, pa, Slippage, sl, tp, "", MAGIC, 0, clrBlue);
      }
    }
  if (bs<0 && spread < MaxSpread) {
    if (ExistPositions(sym, OP_BUY,MAGIC)) ClosePositions(sym, OP_BUY,MAGIC);
    if (!ExistPositions(sym, OP_SELL,MAGIC)) {
      if (StopLoss!=0) sl=pa+StopLoss*Point;
      if (TakeProfit!=0) tp=pb-TakeProfit*Point;
      ticket=OrderSend(sym, OP_SELL, Lots, pb, Slippage, sl, tp, "", MAGIC, 0, clrRed);
      }
    }
 }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.04.2009                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void MovingInWL(string sym="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();
  bool   fm;
  if (sym=="0") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sym || sym=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (OrderType()==OP_BUY) {
            if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_BID);
              if (pp-OrderOpenPrice()>LevelProfit*po) {
               // ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
                fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*pp,OrderTakeProfit(),CLR_NONE);        
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_ASK);
              if (OrderOpenPrice()-pp>LevelProfit*po) {
               // ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
                fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*pp,OrderTakeProfit(),CLR_NONE);
         
              }
            }
          }
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions(string sym="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();
  if (sym=="0") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if ((OrderSymbol()==sym || sym=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
        po=MarketInfo(OrderSymbol(), MODE_POINT);
         if (OrderType()==OP_BUY) {
         pp=MarketInfo(OrderSymbol(), MODE_BID);
          if (!ProfitTrailing || (pp-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<pp-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(pp-TrailingStop*Point, clModifyBuy);
             }
           }
         }
        if (OrderType()==OP_SELL) {
        pp=MarketInfo(OrderSymbol(), MODE_ASK);
          if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
            if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
              ModifyStopLoss(Ask+TrailingStop*Point, clModifySell);
              }
            }
          }
        }
      }
    }
  }
}
//+---------------------------------------------------------------------------+
//| Перенос уровня StopLoss                                                   |
//| Параметры:                                                                |
//|   ldStopLoss - уровень StopLoss                                           |
//|   clModify   - цвет модификации                                           |
//+---------------------------------------------------------------------------+
void ModifyStopLoss(double ldStop, color clModify) {
  bool   fm;
  double ldOpen=OrderOpenPrice();
  double ldTake=OrderTakeProfit();

  fm=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
  if (fm && UseSound) PlaySound(NameFileSound);
}
//+----------------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 25 октября 2021, 19:14
+
0
Нам, простым смертным, сия наука как сапожнику юриспруденция:D 
А по коду(по комментариям) весьма обдуманный аппарат у вас!
avatar

  13  YARICH Автор Сообщений: 34

  • 29 октября 2021, 21:06
+
0
Так пользуйтесь.*hi* 
avatar

  16  ssg Сообщений: 817

  • 29 октября 2021, 21:50

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