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

 
Tenimagalon #:
Народ Ни кто не встречал бота, чтоб торговал в 0.?

попробуйте сделать..кстати хорошая зарядка для ума, чтобы разобраться что здесь и как - посчитать и реализовать MM у которого график около горизонтали "0"

 
Tenimagalon #:
Народ Ни кто не встречал бота, чтоб торговал в 0.?

Важным являются характеристики ТС, которым должен соответствовать такой советник - как минимум просадка и время выхода из просадки - срелнее и максимальное, максимальная загрузка депозита (актуально для советников с увеличением объемов сделки).

 

здравствуйте всем!

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

вот такой у меня код:

//+------------------------------------------------------------------+
//|                                       Сетка по High-Low.mq4      |
//|                      Copyright © 2023, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2023, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double  lot          = 0.01;  // стартовый лот
extern int     SL           = 200;   // стоп лосс 
extern int     TP           = 10;    // тейк профит
extern int     MAX_Lines    = 5;     // максимальное колличество отложенных ордеров каждого направления
extern int     DN           = 1;     // кол-во дней жизни лимиток  
extern double  Delta1       = 200;   // отступ от цены для выставения первой лимитки
extern int     Delta        = 100;   // расстояние между отложенными ордерами 
extern int     Step         = 200;   // превышение вчерашнего High/Low                
extern int     magic        = 12345; // магик
input int      slippage     = 3;     // проскальзывание 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init() 
  {

   return (0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() 
  {

   return (0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick()
  {
   int     x,total=OrdersTotal();
   double step=NormalizeDouble(Step*Point,Digits);  
//+------------------------------------------------------------------+
//|  Установка лимиток по обновлению High/Low вчерашнего дня         |
//+------------------------------------------------------------------+
   if(CountOrders()==0)
   {
    if(Bid > iHigh(NULL,PERIOD_D1,1))  //условие для покупки 
    {
     for(x=1;x<=MAX_Lines;x++)  // считает сколько открыто линий сетки отложенными ордерами, чтобы не превышало указанное в исходных параметрах MAX_Lines
     {                                                                                                                                                                
      if (OrderSend(Symbol(),OP_BUYLIMIT,lot*x,
      Ask-((Delta1-Delta)+Delta*x)*Point,slippage,
      Ask-(((Delta1-Delta)+Delta*x)+SL)*Point,
      Ask+TP*Point,"",magic,TimeCurrent()+60*60*24*DN,Blue))
      {Print("Open BuyLimit: ",_Symbol);}
      else {Print("Error Open BuyLimit: ",_Symbol," / ",GetLastError());}
                   
     }
    }
           
    if(Ask < iLow(NULL,PERIOD_D1,1))//условие для продажи 
    {
     for(x=1;x<=MAX_Lines;x++)
     {
                                                                                                                                                                           
      if (OrderSend(Symbol(),OP_SELLLIMIT,lot*x,
      Bid+((Delta1-Delta)+Delta*x)*Point,slippage,
      Bid+(((Delta1-Delta)+Delta*x)+SL)*Point,
      Bid-TP*Point,"",magic,TimeCurrent()+60*60*24*DN,Red))
      {Print("Open SellLimit: ",_Symbol);}
      else {Print("Error Open SellLimit: ",_Symbol," / ",GetLastError());}  
     }
    }
   }
//+------------------------------------------------------------------+
//|        Удаление лимитного ордера, при условии|
//+------------------------------------------------------------------+
   for(int lim_del=total-1; lim_del>=0; lim_del--)
      if(OrderSelect(lim_del,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==magic)
               if((OrderType()==OP_BUYLIMIT && Bid>iHigh(NULL,PERIOD_D1,1)+step)
                                            ||
                 (OrderType()==OP_SELLLIMIT && Ask<iLow(NULL,PERIOD_D1,1)-step))                             //если тип ордера НЕ 0(OP_BUY) и НЕ 1(OP_SELL), а больше (т.е. 2,3,4,5)
                 
                   {int cl=OrderDelete(OrderTicket());} // удаляем отложку при появлении рыночного ордера
                 
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                        |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0, i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==magic) 
           {
            if(OrderType()>=0) cnt++;
           }
        }
     }
   return(cnt);
  } 

хочу сделать так:

есть сигнал - открылась сетка

цена прошла определенное расстояние (step) -старая сетка закрылась и в этом месте(по текущей цене) открылась новая сетка, и так только один раз.

Срок жизни сетки задан. Дальнейшее закрытие "новой" сетки либо по сроку жизни либо sl/tp.

У меня же пока получается множественное открытие /закрытие  "новой" сетки - и нужно какое то доп. условие, но придумать сам не могу пока.



 
законопослушный гражданин #:

здравствуйте всем!

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

вот такой у меня код:


хочу сделать так:

есть сигнал - открылась сетка

цена прошла определенное расстояние (step) -старая сетка закрылась и в этом месте(по текущей цене) открылась новая сетка, и так только один раз.

Срок жизни сетки задан. Дальнейшее закрытие "новой" сетки либо по сроку жизни либо sl/tp.

У меня же пока получается множественное открытие /закрытие  "новой" сетки - и нужно какое то доп. условие, но придумать сам не могу пока.



Не полные условия. С какого по какой момент работы советника. Советник может работать неделю. Сигналов может быть 5 в день и ночью. Или советник может выключают в 14 дня и включают в 6 часов утра вручную. Здесь допишите. А так, флаг наличия сетки до сигнала ложь, флаг новой сетки ложь. после сигнала если оба флага ложь открываем сетку, флаг наличия сетки тру, после закрытия старой сетки и если флаг наличия сетки тру И флаг новой сетки ложь, открываем новую сетку и делаем флаг новой сетки тру. Больше открывать ничего не будет. 

 
Valeriy Yastremskiy #:

Не полные условия. С какого по какой момент работы советника. Советник может работать неделю. Сигналов может быть 5 в день и ночью. Или советник может выключают в 14 дня и включают в 6 часов утра вручную. Здесь допишите. А так, флаг наличия сетки до сигнала ложь, флаг новой сетки ложь. после сигнала если оба флага ложь открываем сетку, флаг наличия сетки тру, после закрытия старой сетки и если флаг наличия сетки тру И флаг новой сетки ложь, открываем новую сетку и делаем флаг новой сетки тру. Больше открывать ничего не будет. 

то есть нужно добавить два флага, я правильно понял?

 
законопослушный гражданин #:

то есть нужно добавить два флага, я правильно понял?

Да, это самый дешево и сердито) Можно по разному сделать. Можно счетчик сеток например, если 0 сеток, то , если 1я, то, если 2я, то останавливаем и ждем смены даты.

 
Valeriy Yastremskiy #:

Да, это самый дешево и сердито) Можно по разному сделать. Можно счетчик сеток например, если 0 сеток, то , если 1я, то, если 2я, то останавливаем и ждем смены даты.

мне как раз нужно "дёшево и  сердито" спасибо

 
законопослушный гражданин #:

здравствуйте всем!

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

вот такой у меня код:


хочу сделать так:

есть сигнал - открылась сетка

цена прошла определенное расстояние (step) -старая сетка закрылась и в этом месте(по текущей цене) открылась новая сетка, и так только один раз.

Срок жизни сетки задан. Дальнейшее закрытие "новой" сетки либо по сроку жизни либо sl/tp.

У меня же пока получается множественное открытие /закрытие  "новой" сетки - и нужно какое то доп. условие, но придумать сам не могу пока.



Я в свое время баловался сетками. Мне человечек такие функции прописывал. Что вообразить сложно. И подтягиваний сетки. И стопы для всех ордеров. И закрытие частично по шагу каждого ордера открытого в сетке. Что я только мог вообразить. Бесполезно. 
 
Maxim Kuznetsov #:

попробуйте сделать..кстати хорошая зарядка для ума, чтобы разобраться что здесь и как - посчитать и реализовать MM у которого график около горизонтали "0"

Долгое время пытался но у меня закончились мысли и идеи.Нужен математик.:) 
 
Tenimagalon #:
Долгое время пытался но у меня закончились мысли и идеи.Нужен математик.:) 

на самом деле нужен бухгалтер. Сделайте советник на пресечении MA и распишите откуда чего когда пришло и куда чего девалось.

Причина обращения: