Привет!
Прошу сделать советник для незатейливого советника для сбора прибыли.
Суть — ищем свечу на недельном(дневном(переключаемый параметр)) графике в условно 1000п и на новой свече открываемся в обратку в надежде на откат.
Если отката нет, добрубаем сетку. Новые ордера должны открываться с такими же установками, то есть если за неделю не прошли эти же 1000п, то ордер не открываем, а ждем ТП или когда все же пройдем 1000п и на новой свече доливаемся(см скрин)
И нужен ТП в пунктах(отключаемый), в деньгах(отключаемый) и на обратном сигнале(отключаемый, тут закрываем тоже на новой свече)
итого нужен размер лота, размер свечи, настройки ТП, magic
Потом добавим список валют
candle_body_size1_V1.ex4 (9 Kb)
Комментарии (11)
35 AM2 Сообщений: 16665 - Андрей
15 verta81 Сообщений: 489
Подождем 25ое
14 YARICH Автор Сообщений: 37
16 ssg Сообщений: 817
35 AM2 Сообщений: 16665 - Андрей
Через 20 лет скину результаты
Спасибо за работу, Андрей!!! Редактирован: 23 октября 2021, 19:44
14 YARICH Автор Сообщений: 37
Суть стратегии ясна из названия
Немного подчистил код.
Советник почти полностью написан с использованием функция Игоря Кима. Правда функции упращёном варианте.
Пары торгуются независимо друг от друга.
Направление торговли определяется минимальным размером тела свечи (переменная 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
16 ssg Сообщений: 817
<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:2116 ssg Сообщений: 817
16 ssg Сообщений: 817
А по коду(по комментариям) весьма обдуманный аппарат у вас!
14 YARICH Автор Сообщений: 37
16 ssg Сообщений: 817
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий