Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1668

 
artem artem #:

SanAlex, да, посмотрел на тестере за этот год текущий, всё ок) Результаты хорошие, в ближайшее время на реальном счёте попробую запустить

как называется Эксперт? Вы его с кодобазы скачивали ? Мне нужно посмотреть как автор это реализовал в функции 

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Не хватает чего то - что бы в онтик добавить условие

 
SanAlex #:

как называется Эксперт? Вы его с кодобазы скачивали ? Мне нужно посмотреть как автор это реализовал в функции 

Не хватает чего то - что бы в онтик добавить условие

Саша, работа по времени не была включена. Просто добавлены какие-то функции для подключения в процессе разработки)
 
MakarFX #:
Саша, работа по времени не была включена. Просто добавлены какие-то функции для подключения в процессе разработки)

сейчас переделаю по своему 

 
artem artem #:

SanAlex, да, посмотрел на тестере за этот год текущий, всё ок) Результаты хорошие, в ближайшее время на реальном счёте попробую запустить

Вот этот и по времени будет работать - я изменил функцию 

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Функция по Времени в мт4 и в мт5 работает 

Файлы:
 
MakarFX #:
А ты не хочешь избавиться от классов?

Недавно только узнал про них. Не знаю, это мега удобная штука. Что предлагаешь? Всё по функциям распихать? Если бы это решило проблему.

У меня два глобальных обекта (bar, db_last) одного класса Bar, первый инициализируются параметрами каждого нового бара (обычный бар что на графике), а во второй сохраняется бар соответствующий всем условиям. Собственно в другом уже локальном объекте order класса Order производятся все вычисления из параметров db_last для открытия ордера. Параметры db_last и bar используются много где, но только для чтения, инициализация и присваивание происходят в одном месте, в OnTick(), поэтому непредвиденных изменений в объектах вроде бы не должно быть.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Недавно только узнал про них. Не знаю, это мега удобная штука. Что предлагаешь? Всё по функциям распихать? Если бы это решило проблему.

У меня два глобальных обекта (bar, db_last) одного класса Bar, первый инициализируются параметрами каждого нового бара (обычный бар что на графике), а во второй сохраняется бар соответствующий всем условиям. Собственно в другом уже локальном объекте order класса Order производятся все вычисления из параметров db_last для открытия ордера. Параметры db_last и bar используются много где, но только для чтения, инициализация и присваивание происходят в одном месте, в OnTick(), поэтому непредвиденных изменений в объектах вроде бы не должно быть.

Я бы попробовал - за это денег не берут)

Но ошибки есть, тем более что ошибки с простой нормализацией

Можешь кинуть файл в личку? Я посмотрю.
 
SanAlex #:

как называется Эксперт? Вы его с кодобазы скачивали ? Мне нужно посмотреть как автор это реализовал в функции 

Не хватает чего то - что бы в онтик добавить условие

SanAlex, прикреил в этом сообщении версию которую скачал - там Пуриа + трейлинг стоп + уровень безубытка + торговля по часам. По часам торговлю я бы протестировал, пока до этого руки просто не дошли)

 
MakarFX #:

Отсутствие истории влияет на показания индикатора в начале теста

MakarFX, я также об этом подумал, так что всё должно работать как надо

 
artem artem #:

SanAlex, прикреил в этом сообщении версию которую скачал - там Пуриа + трейлинг стоп + уровень безубытка + торговля по часам. По часам торговлю я бы протестировал, пока до этого руки просто не дошли)

Вот нашёл в кодобазе https://www.mql5.com/ru/code/12654

- я пропустил вашу цель, что вы хотели в нём изменить? 

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Вот нашёл в кодобазе https://www.mql5.com/ru/code/12654

- я пропустил вашу цель, что вы хотели в нём изменить? 

Какие дополнения я хотел внести внести:

     1. Сделать так, что-бы   открытие сделки и   проверка на соотвествие всех условий индикаторов (пересечение быстрой (5) двух медленных (75) (85) и открытие бара MACD в ту же сторону с  быстрой (5) ) осуществлялось   только по цене открытия новой свечи   (самый первый тик 30 минуной свечи каждой);
  1. Создать условия «обнуления» индикаторов. К примеру,   для быстрой скользящей (5): если она выше медленных — то это сигнал на buy. Если после этого, она уходит вниз, и   либо касается одного из, либо находится между медленными скользящими (75) и (85) — то тогда сигнал от быстрой скользящей как-бы   «обнуляется», и будет оставаться в таком   «нулевом» положении, пока будет касаться или оставаться между медленными. Если после этого,   быстрая пересекает обе медленных в одну из сторон (в том числе, если она вернулась в ту сторону, из которой пришла до касание медленных) —   то тогда это будет сигналом от этого индикатора.   C MACD ситуация аналогичная — только   «обнулением» будет являтся значение MACD=0 (если на свече 1. MACD открылся, к примеру, с значением   0,0043, а на свече 2. с значением   -0,0010, значит было   «обнуление» и MACD на свече 2. выдал новый сигнал). При этом, есть один момент:   быстрая (5) и  MACD должны быть как-бы «на равных правах» — если (5) не меняет своё положение относительно медленных, а в это время MACD открылся на прошлой свече в противоположной зоне (нет входа), а на следующей — в той же зоне что и быстрая — тогда все условия сошлись, и должен быть вход в ордер.   Обращаю внимание, что всё это должно быть только по ценам открытия свеч — только по этому одному тику;
  1. Ну и собственно последнее. Сделать так, что-бы после совпадения всех условий по индикаторам (по ценам открытия свеч),   советник выжидал 4 цены открытия свеч подряд

    1. Цена открытия 1ой свечи — (5) над (75) и (85) + бар MACD открылся выше 0 —   1 из 4 подтверждений есть;
    2. Цена открытия 2ой свечи — (5) над (75) и (85) + бар MACD открылся выше 0 —   2 из 4 подтверждений есть
    3. Цена открытия 3ей свечи — (5) над (75) и (85) + бар MACD открылся выше 0 —   3 из 4 подтверждений есть;
    4. Цена открытия 4ой свечи — (5) над (75) и (85) + бар MACD открылся выше 0 —   4 из 4 подтверждений есть    Открытие сделки на buy на этой же свече (4ой). 
            Аналогичная ситуация с ордерами на   sell, только в другом направлении индикаторы должны открываться. И есть важный момент —   если на, скажем, любом этапе от 1ой свечи до 4ой,   индикаторы изменят своё положение (к примеру, на 3ей свече открытия, бар MACD откроется либо ниже 0, либо =0) —   тогда всё сбрасывается, т.к. сигналы не прошли проверку по открытию 4ых свеч-подряд