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

 
Konstantin Seredkin:

Я торговлю привел просто в пример, есть куча других алгоритмов которые бы не плохо завести на эту кнопку, расширился спред, отжали кнопку, на телефон пришла смс о том что робот остановлен или же торгуется на счете 4 робота, 5-й контролирует маржу счета, как маржа снижается до выставленного значения, мы обрубаем авто торговлю и все роботы сосут лапу, пока я не прийду и не посмотрю что и где лезет в просадку... а вот удаление робота с графика это и есть пушка по воробьям... кнопка это комплексное решение которое позволит вырубить всех роботов по заданному алгоритму.

Где то я видел решение для mql5 но не могу найти

А я так и сказал - это радикальное решение. Правильное решение - изменить код советника так, чтобы в случае возникновения определенных обстоятельств он не совершал торговые действия и все, что с ними связано. Например, контроль спреда - это элементарщина:

void OnTick()
{
    double fPoint = Point();
    if (fPoint <= 0.0)
      return;

    int nSpread = int(MathRound((Ask - Bid) / fPoint));
    if (nSpread > 50)
      return;

   ... Действия советника при нормальном спреде
}
 

Ну а нажать/отжать кнопку Автоторговля можно эмуляцией нажатия Ctrl+E. Но, как я и говорил, это уже при помощи WinAPI:

#include <WinUser32.mqh>

#define VK_CONTROL 0x11 
#define KEY_CODE   'E'


void PressOrReleaseAutotrade()
{
   keybd_event(VK_CONTROL, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 2, 0);
   keybd_event(VK_CONTROL, 0, 2, 0);   
}
 
Ihor Herasko:

Ну а нажать/отжать кнопку Автоторговля можно эмуляцией нажатия Ctrl+E. Но, как я и говорил, это уже при помощи WinAPI:

Спасибо!А смайлик как можно сделать грустным?)

 
Ihor Herasko:

Ну а нажать/отжать кнопку Автоторговля можно эмуляцией нажатия Ctrl+E. Но, как я и говорил, это уже при помощи WinAPI:

Точно, а я думаю блин до боли простой метод, а про эту библиотеку то совсем забыл. Спасибо, теперь замутим что хотим

 

Сделал скрипт MQL4 (код ниже), который рисует прямоугольники (рис. ниже), но вот не задача. Для пунктирной линии STYLE_DOT работает только ширина 1, а при 2 и более рисуется сплошная линия. Подскажите где моя ошибка или же от нас что-то скрывают?

#property strict
void OnStart()
  {
//---
   RectCreate("rect1",Time[1],Low[1],Time[10],High[10],clrYellow,STYLE_DOT,  1,  false);
   RectCreate("rect2",Time[11],Low[11],Time[20],High[20],clrRed, STYLE_DOT,  2,  false);
//---
   Sleep(20*1000);
   ObjectsDeleteAll(0);
  }
//--- Function creates rectangle
void RectCreate(const string           f_name,     // rectangle name
                datetime               f_time1,    // first point time
                double                 f_price1,   // first point price
                datetime               f_time2,    // second point time
                double                 f_price2,   // second point price
                const color            f_color,    // rectangle color
                const ENUM_LINE_STYLE  f_style,    // style of rectangle lines
                const int              f_width,    // width of rectangle lines
                const bool             f_fill)     // filling rectangle with color

  {
   if(ObjectCreate(0,f_name,OBJ_RECTANGLE,0,f_time1,f_price1,f_time2,f_price2))
     {
      ObjectSetInteger(0,f_name,OBJPROP_COLOR,f_color);
      ObjectSetInteger(0,f_name,OBJPROP_STYLE,f_style);
      ObjectSetInteger(0,f_name,OBJPROP_WIDTH,f_width);
      ObjectSetInteger(0,f_name,OBJPROP_FILL,f_fill);
      ObjectSetInteger(0,f_name,OBJPROP_BACK,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTED,false);
     }
  }

 
Maxim Khrolenko:

Сделал скрипт MQL4 (код ниже), который рисует прямоугольники (рис. ниже), но вот не задача. Для пунктирной линии STYLE_DOT работает только ширина 1, а при 2 и более рисуется сплошная линия. Подскажите где моя ошибка или же от нас что-то скрывают?

А вручную нарисовать и изменять стиль и толщину пробовали? И какой вывод можно из этих экспериментов сделать?
 
Artyom Trishkin:
А вручную нарисовать и изменять стиль и толщину пробовали? И какой вывод можно из этих экспериментов сделать?

По моему нашел ответ. Здесь написано, что "Стиль линии. Используется только при толщине линии 0 или 1". Тут то видимо и кроется причина, почему при толщине 2 и более другие линии кроме сплошной не работают.

 
Maxim Khrolenko:

По моему нашел ответ. Здесь написано, что "Стиль линии. Используется только при толщине линии 0 или 1". Тут то видимо и кроется причина, почему при толщине 2 и более другие линии кроме сплошной не работают.

Совершенно верно. Тоже наступал на эти грабли.

 

Господа, подскажите взял ф-цию от Кима которая возвращает номер бара открытия последней позиции или -1.

int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   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 || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(sym, tf, oot, True));
  }

вызвал эту функцию и написал условие 

if(Open[2]>Close[2] && Open[1]>Close[1] && Close[1]<Low[2])
     {

      Comment("цена входа = ",DoubleToStr(Low[2],Digits));
      if(NumberOfBarOpenLastPos("",0,-1,-1)!=0)//вызвал здесь

         ticket=OrderSend(Symbol(),OP_SELLLIMIT,0.1,Low[2],2,0,0,magic,0);
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

         TP=NormalizeDouble(OrderOpenPrice()-tp*Point,Digits);
      SL=NormalizeDouble(OrderOpenPrice()+sl*Point,Digits);
      modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
      }

в итоге открывается один ордер, но если на баре он выбивается по стопу и условие выше для входа в позу сохраняется всеравно на этом баре сделка открывается,через Print посмотрел что ф-ция возврящает -1, сначало подумал что так как нету ордеров вообще, но потом ордера появлялись и всеравно на одном и том же баре после стопа сделка открывается, помогите, что не так я сделал?

 
Добрый день. Подскажите, есть ли возможность в МТ4 и МТ5 накладывать друг на друга графики одного инструмента с разными ТФ, а также индикаторы к этим ТФ? Например, в одном окне я хочу вывести 3 графика пары EUR/USD c ТФ день, 4 часа и час, а также наложить туда же скользящие с данных ТФ. Такое возможно? Буду рад любой помощи.
Причина обращения: