Доработка ботов (советников, индикаторов) vol. 2

olegkom

Активный участник
Уважаемый Alex Green поправьте плиз советник для проверки стрелочников. Видимо данные Индикатора не так вставил. Работает не правильно.
 

Вложения

  • EA-EasyTrend.mq4
    6,3 КБ · Просмотры: 56
  • EasyTrendVisualizer.mq4
    3,9 КБ · Просмотры: 64

mobidik

-----
mobidik,
Добрый день.Вы уже латали этот индикатор в 2014.Можно его подправить еще чуток.
Что бы сигнал на почту подавался:
при пересечении верхней линии канала с верху-вниз по закрытию свечи - Down
при пересечении нижней линии канала с низу в верх по закрытию свечи - Up
Средняя линия и остальные сигналы без надобности.Спасибо при любом исходе.

Проверяй:
 

Вложения

  • TriangularMA centered bands v1.mq4
    10,8 КБ · Просмотры: 77
  • TriangularMA centered bands v1.png
    TriangularMA centered bands v1.png
    80,2 КБ · Просмотры: 257

Alex Green

Прохожий
Уважаемый Alex Green поправьте плиз советник для проверки стрелочников. Видимо данные Индикатора не так вставил. Работает не правильно.


32 и 33 строки

double non1=iCustom(Symbol(),0,"EasyTrendVisualizer",ADXperiod1,ADXperiod2,ADXperiod3,2,1);//buy
double non2=iCustom(Symbol(),0,"EasyTrendVisualizer",ADXperiod1,ADXperiod2,ADXperiod3,3,1);//sell
 

MrGreen86

Гуру форума
Есть такое---СПАСИБО ОГРОМНОЕ---
Объясните пожалуйста ещё одну штуку--
На этой сове было замечено самостоятельное открытие ордера с установкой стопа профита и через 6 секунд самостоятельное закрытие...Как так ?
Вывод--глюк системы?--при подсаженой батарейке мыша подвисает-- Но этим можно допустить открытие --как быть с закрытием--
Вывод--глюк бота? где его самостоятельность в коде зарыта? если приказ при нажатии на кнопку то почему сам открывает?

так вы код покажите, там видно будет )
 

kok1981

Новичок форума
Alex Green, Уважаемый Alex Green посмотрите пожалуйста пост #8420 (permalink)
 

sergeysv

Активный участник
Моё почтение Мастерам своего дела---
Помогите пожалуйста поправить индюк если вас не затруднит конечно---
https://www.mql5.com/ru/code/8118
Хотел сам снять ограничения описанные автором и убрать особенности да видимо слабоват --
Если возможно убрать особенности и прикрутить в код чтоб показывал (максимально возможные технически) любые бары на любом периоде буду вам премного благодарен
 

Kamran9

Новичок форума
Доброго времени!
Ломаю голову уже долгое время. Может кто поможет..? Как организовать в советнике проверку на последний закрытый ордер в истории по символу, маджику и типу ордера перед отправкой запроса на открытие рыночного ордера. Условие такое : если последний закрытый ордер бай, то далее открываемся только селл, а иначе ждем противоположного сигнала. Спасибо заранее.
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int openOrder(int cmd,double lots,int _stop_loss,int _take_profit)
{
double sl = 0;
double tp = 0;
int t=0;
int error=0;
int ordersTotal=OrdersTotal();
RefreshRates();
ResetLastError();
if (ordersTotal < MAXorders)
{
while(true)
{
if(cmd==OP_SELL)
{

//-------------проверяем в истории последний закрытый ордер BUY---------+
int i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_SELL)
{
Print("Уже поторговали этот сигнал, ждем противоположный...");
break;
}

}
//-----------------------------------------------------------------------+
if(_stop_loss==0) sl=0;
else sl=NormalizeDouble(Ask+_stop_loss*gPoint,Digits);
if(_take_profit==0) tp=0;
else tp=NormalizeDouble(Ask-_take_profit*gPoint,Digits);
t=OrderSend(Symbol(),OP_SELL,calculate_lot(),NormalizeDouble(Bid,Digits),gSlippage,sl,tp,NULL,magic,0,Red);
}
if(cmd==OP_BUY)
{

//-------------проверяем в истории последний закрытый ордер SELL---------+
int i,accTotal=OrdersHistoryTotal();
for(i=0;i<accTotal;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
break;
}
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUY)
{
Print("Уже поторговали этот сигнал, ждем противоположный...");
break;
}

}
//-----------------------------------------------------------------------+
if(_stop_loss==0) sl=0;
else sl=NormalizeDouble(Bid-_stop_loss*gPoint,Digits);
if(_take_profit==0) tp=0;
else tp=NormalizeDouble(Bid+_take_profit*gPoint,Digits);
t=OrderSend(Symbol(),OP_BUY,calculate_lot(),NormalizeDouble(Ask,Digits),gSlippage,sl,tp,NULL,magic,0,Blue);
}
//---
if(t>0) break;

error=GetLastError();
switch(error)
{
case 135: Print("Цена изменилась. Пробую ещё ...");
RefreshRates();
continue;
case 136: Print("Нет цен. Жду новый тик ...");
while(RefreshRates()==false)
Sleep(1);
continue;
case 146: Print("Подсистема торговли занята. Пробую ещё ...");
Sleep(500);
RefreshRates();
continue;
case 138: Print("Цена устарела. Пробую ещё ...");
Sleep(500);
RefreshRates();
continue;
case 129: Print("Неправильная цена при попытке открыть ордер. Пробую ещё ...");
Sleep(5000);
RefreshRates();
continue;
}
switch(error) // Критические ошибки
{
case 2 : Print("Общая ошибка.");
break;
case 5 : Print("Старая версия клиентского терминала.");
break;
case 64: Print("Счет заблокирован.");
break;
case 133:print("Торговля запрещена");
break;
case 130:print("Слишком маленький СЛ или ТП");
break;
case 134:print("Не хватает средств");
break;
default: Print("Возникла ошибка: ",error);// Другие варианты
}
break; // Выход из цикла
}
}
return t;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

Пробовал сам что-то делать, но не работает. Поправьте пожалуйста.
 

well72

Активный участник
Привет спецам!
Можете приделать алерт к этому индикатору?
 

Вложения

  • Cycle_Point_KROUFR_version_MTF (1).mq4
    13 КБ · Просмотры: 72

Cemen4yk1

Местный житель
держите, используется массив Mas_KOL[4] на 4 элемента
PHP:
void Terminal2()
{
int oldticket=0;
double oldlot=0;
int Ticket=0;
int Type=-1;          
int KoL=OrdersHistoryTotal();
   ArrayInitialize(Mas_KOL,0);
   for(int i=Kol-1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
     {    
      if (OrderSymbol()== Symbol()&& OrderMagicNumber() == Magik)
     {

               oldticket = OrderTicket();
                 if (oldticket > Ticket)
                  {
                   oldlot = OrderLots();
                   Ticket = oldticket;
                   Type = OrderType();
                   }
       
     
      Mas_KOL[0]++;//количество орд в истории
      }
      }
      }
      Mas_KOL[1]=oldlot;//лот последнего орд в истории
      Mas_KOL[2]=Ticket;//тикет последнего орд в истории
      Mas_KOL[3]=Type;//тип последнего орд в истории
}
 

Mr Пронька

Заблокирован
Помогите с починкой индикатора, криво кажет или совсем не кажет в подвале:please:
 

Вложения

  • ifc.dll
    55,5 КБ · Просмотры: 46
  • ifc-sideways+eliminated+sep (1).ex4
    20 КБ · Просмотры: 36
  • ifc-sideways+eliminated+sep (1).mq4
    6,2 КБ · Просмотры: 50

Alex Green

Прохожий
держите, используется массив Mas_KOL[4] на 4 элемента
PHP:
void Terminal2()
{
int oldticket=0;
double oldlot=0;
int Ticket=0;
int Type=-1;          
int KoL=OrdersHistoryTotal();
   ArrayInitialize(Mas_KOL,0);
   for(int i=Kol-1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
     {    
      if (OrderSymbol()== Symbol()&& OrderMagicNumber() == Magik)
     {

               oldticket = OrderTicket();
                 if (oldticket > Ticket)
                  {
                   oldlot = OrderLots();
                   Ticket = oldticket;
                   Type = OrderType();
                   }
       
     
      Mas_KOL[0]++;//количество орд в истории
      }
      }
      }
      Mas_KOL[1]=oldlot;//лот последнего орд в истории
      Mas_KOL[2]=Ticket;//тикет последнего орд в истории
      Mas_KOL[3]=Type;//тип последнего орд в истории
}

Позволю не согласиться, т.к. проверка идет по тикету, а не по времени закрытия. Последний закрытый ордер не всегда имеет больший тикет. Логичнее производить проверку по OrderCloseTime().
Плюс, нет проверки на то, был ли этот ордер закрыт или просто удален.
 
Последнее редактирование:

Alex Green

Прохожий
Спасибо. как сделать вход не по закрытию бара а на текущей свече при появлении стрелки?



Опять же 32 и 33 строки. Последний параметр вместо 1 ставите 0.
Если количество открываемых ордеров на текущем баре необходимо ограничить, то потребуется дополнительный ограничитель открытых позиций.
 

djekiii-xxx

Активный участник
Здравствуйте mobidik.
Помогите пожалуйста добавить в советник функцию увеличения лота.То-есть, если сделка, лотом 1.0, закрылась по стопу или просто в минус , то следующая открывается с увеличением 1.5 или 2.0. Хорошо бы если это ещё можно было бы контролировать. То-есть , через сколько подряд закрытых ордеров в минус или по стопу, советник начинает добавлять лот.
 

Вложения

  • e_vadza_Expert_v2_Monachus_DeltaMA.mq4
    50,4 КБ · Просмотры: 54

Kamran9

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

Спасибо за уточнение! Тоже полезно! Но вопрос был по ордерам рыночным.
Но все-же очень нужное уточнение!
 

Kamran9

Новичок форума
держите, используется массив Mas_KOL[4] на 4 элемента
PHP:
void Terminal2()
{
int oldticket=0;
double oldlot=0;
int Ticket=0;
int Type=-1;          
int KoL=OrdersHistoryTotal();
   ArrayInitialize(Mas_KOL,0);
   for(int i=Kol-1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
     {    
      if (OrderSymbol()== Symbol()&& OrderMagicNumber() == Magik)
     {

               oldticket = OrderTicket();
                 if (oldticket > Ticket)
                  {
                   oldlot = OrderLots();
                   Ticket = oldticket;
                   Type = OrderType();
                   }
       
     
      Mas_KOL[0]++;//количество орд в истории
      }
      }
      }
      Mas_KOL[1]=oldlot;//лот последнего орд в истории
      Mas_KOL[2]=Ticket;//тикет последнего орд в истории
      Mas_KOL[3]=Type;//тип последнего орд в истории
}

Спасибо, пробую...
 
Верх