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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от axe44



Крутые памм-счета Комментариев 6
2017-10-24 11:58:58Рейтинг 0

БКС Комментариев 8
2017-08-11 02:57:12Рейтинг 0

торги
2017-01-26 00:01:37Рейтинг 0

HelloDual v3.0 Комментариев 3
2017-11-19 02:21:03Рейтинг 0

Создание советников бесплатно Комментариев 2
2017-07-16 22:54:20Рейтинг 0

Безиндикаторная сова для терминала Мт5

Приветствую.

У меня как всегда ерунда полчилось на mql5.
Не понимаю как вынести фунцию и потом чтобы робот обращался к ней. Я так понимаю, что по-другому в Мт5 не программируется?

Теперь пришёл за помощью.

Требуется очередная 'неволяшка'.
За основу берётся среднее движение из максимумов м5 за 20 или 'Х' дней и переменную называем 'трал' =^.^=.
Теперь фокус:
— при установку на график берём отмечаем от цены размер трала вверх и вниз.
— при пробое верха или низа входим по направлению движения.
— и тралим позицию на размер трала.
— при развороте закрываем открытую позицию.
— если позиция была убыточной, то пьём мартини, а при положительной закусываем и начинаем с начала.
— закрываем и не торгуем в 23.
— начинаем торговать с 0 при условии что спред маленький.
— желательно присутствие автолота.

Как всегда, если лень или слишком сложно, как бы 'ну и ладно'.

Спасибо за помощь.

П.С. картинки закончились, но думаю и так всё понятно.
  • 0
  • Просмотров: 1698
  • 12 января 2022, 02:24
  • axe44
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
советник по одному индикатору
Следующая запись в группе  
Не затейливый советник (продолжение.)
11 января 2022
13 января 2022

Брокер для ваших роботов, 15 лет на рынке

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

+
0
скрины надо или ссылку где идею взяли
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 12 января 2022, 17:43
комментарий был удален 2022-01-13 04:38:12 axe44

+
0
Просьба сделать всё же под мт4. У меня на мт4 разворот лагает.

Картинка:



Спасибо *friends* 
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 13 января 2022, 04:38
+
0
Может для исходника это посмотреть?
www.mql5.com/ru/code/18645
avatar

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

  • 12 января 2022, 20:10
+
0
За основу берётся среднее движение из максимумов м5 за 20 или 'Х' дней и переменную называем 'трал' =^.^=.

это как?
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 13 января 2022, 18:58
+
0
х = 0, у = 0, средняя_свеча = 0, мах = 0
фор(пока х не больше20){
фор(пока у не больше или равно 24){
у += 1
з = х*24 + у
если (махимум(з)-минимум(з) больше мах) {
мах = махимум(з)-минимум(з)
}
}
у=0
если (средняя_свеча !=0) средняя_свеча = (средняя_свеча + мах)/2
иначе средняя_свеча = мах
мах = 0
x += 1
}
тралл = средняя_свеча
Редактирован: 13 января 2022, 19:32
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 13 января 2022, 19:28
+
0
давай отменим. слишком сложно получается
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 13 января 2022, 23:48
+
0
Просто выложи фнкцию увеличения лота, если закрытый ордер был убыточным и будем считать, что заказ выполнен.
У меня увеличение ордера лагает, если первоначально был лот 0.01


//+------------------------------------------------------------------+
//| Смотрим последний ордер                                          |
//+------------------------------------------------------------------+
double GetLastLot()
  {
   int i;
   for(i=OrdersHistoryTotal()-1; i>=0; i-=1)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()!=Symbol())
           {
            continue;
           }
        }
      if(OrderMagicNumber()!=Magic)
        {
         continue;
        }
      if(OrderType()>1)
        {
         continue;
        }
      return(OrderLots());
     }
   return(0);
  }


void OnTick()
  {

//------------------------------------------------------
         //- проверяем последний ордер
         double lot = GetLastLot();
         if(lot==0)
           {
            lot=Lot;
           }
         else
           {
            lot=NormalizeDouble(lot*Klot,Digits);
           }
  }

Спасибо

Редактирован: 14 января 2022, 03:40
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 января 2022, 02:38
+
+1
Из одного из советников Андрея:
<code>
//--- Inputs
input double Lots         = 0.1;  // лот
input double KLot         = 1;    // увеличение лота
input double PLot         = 0;    // прибавление лота
input double Risk         = 3;    // риск в % от баланса
input double MaxLot       = 10;   // максимальный лот
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(Risk>0)
      lot=NormalizeDouble(AccountBalance()*Risk/100000,2); // 10000*5/100000=0.5

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0)
               break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               if(PLot>0)
                  lot+=PLot;
               break;
              }
           }
        }
     }

   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
</code>

Редактирован: 14 января 2022, 03:51
avatar

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

  • 14 января 2022, 03:49
комментарий был удален 2022-01-14 03:54:29 axe44

+
0
Робот получился с высоким риском неправильного входа.
Небольшой отчёт (свечи убрал для лучшего отображения сделок):





По сути нужно увеличение лота, если есть убыток в течении дня суммарно с предыдущим.

Помочь сможете?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 января 2022, 13:45
+
0
Белая картинка для лучшего просмотра:

avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 января 2022, 13:48
+
0
Не совсем понял о чем речь.
Есть такой вариант:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество убыточных позиций, закрытых сегодня.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              t=OrderCloseTime();
              if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
                if (OrderProfit()<0) kp++;
              }
            }
          }
        }
      }
    }
  }
  return(kp);
}

//+----------------------------------------------------------------------------+

Затем можно сравнить в Онтик это значение с допустимым

extern int MaxSl=2;


 if (NumberOfLossPosToday() > MaxSl) {тогда....
avatar

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

  • 14 января 2022, 15:02
+
+1
Можно посмотреть здесь:
zakaz.opentraders.ru/53311.html
avatar

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

  • 14 января 2022, 15:18
+
+1

//+------------------------------------------------------------------+
//| Сколько убытков было подряд                                      |
//+------------------------------------------------------------------+
int DayLosses(){
   int losses=0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderProfit()>0)break;// был профит дальше не считаем
         if(OrderProfit()<0 && TimeDay(OrderCloseTime())==Day())
            losses++;//сколько убытков было подряд
        }
     }
   return(losses);
  }  
avatar

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

  • 14 января 2022, 15:24
+
0
Как ни странно, но стратегия на всех графиках приблизительно одинаково показывает себя.


Как говориться «плохой результат — то же результат».
Теперь понятно, что стратегия по определению VSA объёма за эталон в качестве стратегии «крестики/нолики» не работает по стандартному шаблону «неваляшка». Конечно, можно сказать что не всё пробовал, но эта стратегия самая не убиваемая на рынке, так как если вы будете стоят по движению, вы будите всегда в плюсе.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 января 2022, 16:29
+
0
если вы будете стоят по движению

если стоять по движению — всегда будешь в плюсе!<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 
«Неваляшка», в классическом понимании (по моему), предполагает переворотную постоянную торговлю.
А
VSA (расшифровывается как Volume Spread Analysis – анализ объема и спреда) – метод торговли, при работе с которым используются объемы, проторгованные на определенном временнóм промежутке, а также спред свечи (разница между хай/лоу бара).

(если речь о этом)
имеет четыре фазы движения цены:
накопление, рост рынка, распределение и падение рынка. (accumulation, markup, distribution, and markdown)

Уже видны разные ритмы: «неваляшка» — вверх/вниз, а VSA — вверх/вниз и еще два неустойчивых состояния.
Но это мое личное мнение. С предметом совершенно не знаком. Не моё.
Немного здесь smart-lab.ru/blog/470042.php
Редактирован: 14 января 2022, 17:10
avatar

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

  • 14 января 2022, 17:07
+
0
В VSA есть понимание «Спред» как движение за определённый промежуток времени.
Его (Спред) за основу брать не стоит в качестве определения закончилось ли движение или нет.
«Неваляшку» именно так и использовал.
Диапазон движения брал от 2 до 40 пунктов по 4-х знаку. Советник получал убытки в простое и уже не выходил из него.
«Крестики/нолики» есть на ТрайдингВью.

Хочу попробовать чистую «неваляшку», но наверно не сегодня.
Если есть желание, можно создать такого робота по ценам закрытия.
Андрей скорей всего уже не возьмётся за такую работу и потребует создать новую тему.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 января 2022, 17:19
+
0
Тема не моя — «я умываю руки».
Единственное что могу предложить — вот такой индикатор (чудом нашёл).
Давным-давно писал по нему советник, но итоги не помню.
Может пригодится.

//+------------------------------------------------------------------+
//|                                                VininI_Impuls.mq4 |
//|                                                  Victor Nicolaev |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
/*
Надо написать советник (может переворотный) на этом индикаторе. 
Можно использовать один буфер или поиграться с двумя (тремя) буферами.

*/
#property copyright "Copyright 2008.  Victor Nicolaev"
#property link      "vinin@mail.ru"


#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_level1 0


extern int Bar0   =  60;
extern int Bar1   = 240;
extern int Bar2   =1440;
extern int MAPeriod =   5;
//extern int Limit     =1440;
//---- buffers
double Buffer0[];
double Buffer1[];
double Buffer2[];
double Ma0[];
double MA1[];
double MA2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- drawing settings
   IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(0,Ma0);
   SetIndexBuffer(1,MA1);
   SetIndexBuffer(2,MA2);
   SetIndexBuffer(3,Buffer0);
   SetIndexBuffer(4,Buffer1);
   SetIndexBuffer(5,Buffer2);
   SetIndexDrawBegin(0,Bar2+MAPeriod);
   SetIndexDrawBegin(1,Bar2+MAPeriod);
   SetIndexDrawBegin(2,Bar2+MAPeriod);
   

   return(0); }//int init() 
   
//+------------------------------------------------------------------+
int start() {
   int limit;
   int counted_bars=IndicatorCounted();
   int i,j;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
//   if (Limit>0) limit=MathMin(Limit,limit); 
   for (i = limit;i>=0;i--){
      Buffer0[i] = (Close[i] - Open[i+Bar0]) / Bar0;
      Buffer1[i] = (Close[i] - Open[i+Bar1]) / Bar1;
      Buffer2[i] = (Close[i] - Open[i+Bar2]) / Bar2;
   }
   for (i = limit;i>=0;i--){
      Ma0[i] = iMAOnArray(Buffer0, 0, MAPeriod, 0, MODE_SMA, i);
      MA1[i] = iMAOnArray(Buffer1, 0, MAPeriod, 0, MODE_SMA, i);
      MA2[i] = iMAOnArray(Buffer2, 0, MAPeriod, 0, MODE_SMA, i);
   }


   return(0); 
}

   

Сейчас обратил внимание, что даже моя памятка осталась когда первый раз его увидел!!!
avatar

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

  • 14 января 2022, 18:23

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