Ваши вопросы по языку MQL4

Diso

Прохожий
Подскажите добрые люди Как программно отключить использование прокси в mt4?
 

_SERG_

Активный участник
Подскажите добрые люди Как программно отключить использование прокси в mt4?

Это типа тонкий намёк всем, вместо тебя хэлп по терминалу почитать?
:D:D:D:D
Ф1 нажми выбери вкладку "Поиск" и напиши:"proxy", нажми [Enter].:facepalm:
Это как вариант.

Или в меню "сервис", выбери вкладку "Сервер", крыж поставь, что "Использовать прокси-сервет", и т.д.....:facepalm:

Провайдер у тебя правильный.
 
Последнее редактирование:

vladradon

Программист
Это типа тонкий намёк всем, вместо тебя хэлп по терминалу почитать?
Серж, привет! С прошедшими! И всех с прошедшими!))
Не сталкивался с такой проблемкой: сов (мой) нормально работает везде, кроме оптимизатора - вообще ордера не открывает, хотя в тестере без проблем и ошибок. В сова встроен индикатор, рисующий канал по фракталам и прекрасно работающий в тестере без режима визуализации, но в оптимизаторе - облом...
 

alexmagik

Прохожий
значения индикатора

Здравствуйте! Подскажите пожалуйста, как с помощью кода получить обведенные значения индикатора?
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    23,2 КБ · Просмотры: 46
  • Delta_excluzive_2.mq4
    5,1 КБ · Просмотры: 26

jek1380

Новичок форума
ребят - подскажите пожалуйста, знакомый помогает - но он не профессиональный программист.Задача такая - есть график например м15 - на нём рисуются индикатором ломаные линии.Как можно определить касание (либо там по условиям закрытие за ней,либо закрытие всей свечи) но свечи старшего ТФ например Н1 или Н4.Т.е. для горизонтальной линии он понимает как , а вот как прописать пробитие наклонной линии ? Что-то не разобрался как изображение вставить-вернее вставляю-но на предварительном просмотре не отображается тогда скрин.

7WXfJ3SH.jpg
 
Последнее редактирование модератором:

Elvis Burunduk

Элитный участник
ребят - подскажите пожалуйста, знакомый помогает - но он не профессиональный программист.Задача такая - есть график например м15 - на нём рисуются индикатором ломаные линии.Как можно определить касание (либо там по условиям закрытие за ней,либо закрытие всей свечи) но свечи старшего ТФ например Н1 или Н4.Т.е. для горизонтальной линии он понимает как , а вот как прописать пробитие наклонной линии ? Что-то не разобрался как изображение вставить-вернее вставляю-но на предварительном просмотре не отображается тогда скрин.

7WXfJ3SH.jpg

Если я правильно понял - то нужна вот эта функция... С ней сравнивать цену нужно...

double ObjectGetValueByShift( string name, int shift)
Функция вычисляет и возвращает значение цены для указанного бара (смещение относительно текущего бара). Значение цены вычисляется при помощи линейного уравнения по первой и второй координатам. Применяется для трендовых линий и аналогичных объектов.
 
Последнее редактирование модератором:

jek1380

Новичок форума
вопрос цену какого момента брать
Начала периода, середины или конца.
Если ТФ для пересечений Н4, а график чарта М15 я могу для сравнения (поиска пересечений) извлечь 16 разных цен.
А мне нужно одну.

это вот програмист спрашивает, а я не знаю как сказать, мне то нужно увидеть момент пересечения-а он же не обязательно будет в начале периода, середине или конце ? Т.е. он говорит какую из трёх точек выбрать - а мне нужно касание или пересечение в любой точке ?
 

Elvis Burunduk

Элитный участник
вопрос цену какого момента брать
Начала периода, середины или конца.
Если ТФ для пересечений Н4, а график чарта М15 я могу для сравнения (поиска пересечений) извлечь 16 разных цен.
А мне нужно одну.

это вот програмист спрашивает, а я не знаю как сказать, мне то нужно увидеть момент пересечения-а он же не обязательно будет в начале периода, середине или конце ? Т.е. он говорит какую из трёх точек выбрать - а мне нужно касание или пересечение в любой точке ?

Ну тут от тебя зависит (ты хозяин-барин), что ты хочешь в итоге получить ...
Можно использовать триггеры - типа есть первое касание, первый триггер взвёлся... А далее разветвление исполнения идет по твоей хотелке (второй триггер). Либо множество сигналов на М15, либо один по окончании H4.
 

Maxic

Интересующийся
Нужна помощь опытных программистов!

Привет всем!
Ребят, нужна ваша помощь! Пишу себе одного советника. В программировании не особо силен, поэтому и обращаюсь. В общем, делаю проверочную функцию на установку лока к рыночным ордерам. Все ордера заносятся в структурный двумерный массив. Первый индекс (ячейка) массива [0] - это базовые(рыночные) ордера, второй индекс(ячейка) [1] - это локи к базовым ордерам. Так вот, функция должна выполнять проверку, установлен ли лок к базовому ордеру и, если - ДА, то мы ничего не делаем и работаем дальше, а если -НЕТ, то даем сигнал на установку соответствующего лока. Функцию я написал, но она работает как-то криво. Т.е., например, открывается рыночный ордер Buy, терминал выдает, что это тип ордера не BUY, а SELL и поэтому к нему надо выставить лок. А с SELL ордерами все работает правильно. Я ничего не могу понять. Ордера правильно записываются в массивы. Делал соответствующую проверку - все идеально. Все критерии ордера в массиве отражаются верно. Помогите найти ошибку в коде или как-то переделать мою функцию. Функцию прилагаю.
PHP:
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool CheckOrders()                                                                              // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
  {                                                                                             // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
   int    TypeOrder;
   string Type          = "",
          OrderComm     = "";
   bool   OpenLockOrder = false;                                                                // Флаг на установку лок ордера       
   
   for(int i=OrdersTotal()-1;i>=0;i--)                                                          // Выполняем перебор по рыночн. и отлож. ордерам
     {
      if((OrderSelect(i,SELECT_BY_POS) == true)                                                 // Если есть следующ.
      && (OrderSymbol() == Symbol()))                                                           // .. и наша вал.пара
        {
         OrderComm = OrderComment();                                                            // Выбираем соответствующий комментарий ордера
         TypeOrder = OrderType();                                                               // Выбираем соответствующий тип ордера                                                           
         for(int n=0; n<=199; n++)                                                              // Выполняем прогон по массиву ордеров 
            {   
             if(StringFind(OrderComm,"BaseIndex #"+IntegerToString(n)+"_",0)>=0)                // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
               {
                if((TypeOrder == InfoOrderNew[0][n].TypeOrder) == OP_BUY)                       // Если находим и наш ордер в массиве является BUY
                  {
                   if(InfoOrderNew[1][n].TypeOrder == 1 || InfoOrderNew[1][n].TypeOrder == 5)   // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
                     {
                      if(InfoOrderNew[1][n].TypeOrder == 1) Type = "Sell";
                      if(InfoOrderNew[1][n].TypeOrder == 5) Type = "SellStop";
                      if(Debug) Print("Функция CheckOrders(): К ордеру Buy #",InfoOrderNew[0][n].TicketOrder," найден Lock-ордер ",Type," #",InfoOrderNew[1][n].TicketOrder,".");
                      break;                                                                    // Если лок выставлен, то выходим из функции
                     }
                   else                                                                         // Если нет, то
                     {
                      if(Debug) Print("Функция CheckOrders(): К ордеру Buy #",InfoOrderNew[0][n].TicketOrder," не найден Lock-ордер. Необходимо его установить!");
                      OpenLockOrder = true;                                                     // Даем сигнал на установку лока
                     }
                  }  
                if((TypeOrder == InfoOrderNew[0][n].TypeOrder) == OP_SELL)                      // Если наш ордер в массиве является SELL
                  {  
                   if(InfoOrderNew[1][n].TypeOrder == 0 || InfoOrderNew[1][n].TypeOrder == 4)   // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
                     {
                      if(InfoOrderNew[1][n].TypeOrder == 0) Type = "Buy";
                      if(InfoOrderNew[1][n].TypeOrder == 4) Type = "BuyStop";
                      if(Debug) Print("Функция CheckOrders(): К ордеру Sell #",InfoOrderNew[0][n].TicketOrder," найден Lock-ордер ",Type," #",InfoOrderNew[1][n].TicketOrder,".");
                      break;                                                                    // Если лок выставлен, то выходим из функции
                     }
                   else                                                                         // Если нет, то
                    {
                     if(Debug) Print("Функция CheckOrders(): К ордеру Sell #",InfoOrderNew[0][n].TicketOrder," не найден Lock-ордер. Необходимо его установить!");
                     OpenLockOrder = true;                                                      // Даем сигнал на установку лока
                    }
                  }    
               } 
            }
        }
     } 
   return(OpenLockOrder);                                                                       // Передаем нашей функции полученное значение  
  }
 

Elvis Burunduk

Элитный участник
Привет всем!
Ребят, нужна ваша помощь! Пишу себе одного советника. В программировании не особо силен, поэтому и обращаюсь. В общем, делаю проверочную функцию на установку лока к рыночным ордерам. Все ордера заносятся в структурный двумерный массив. Первый индекс (ячейка) массива [0] - это базовые(рыночные) ордера, второй индекс(ячейка) [1] - это локи к базовым ордерам. Так вот, функция должна выполнять проверку, установлен ли лок к базовому ордеру и, если - ДА, то мы ничего не делаем и работаем дальше, а если -НЕТ, то даем сигнал на установку соответствующего лока. Функцию я написал, но она работает как-то криво. Т.е., например, открывается рыночный ордер Buy, терминал выдает, что это тип ордера не BUY, а SELL и поэтому к нему надо выставить лок. А с SELL ордерами все работает правильно. Я ничего не могу понять. Ордера правильно записываются в массивы. Делал соответствующую проверку - все идеально. Все критерии ордера в массиве отражаются верно. Помогите найти ошибку в коде или как-то переделать мою функцию. Функцию прилагаю.

При беглом взгляде на код - вроде все нормально...
НО, при более пристальном - непонятно... например, после нахождения ордера, у которого уже есть лок(типа ничего не надо делать), у тебя стоит оператор "брейк" , а это = прервать цикл перебора и перейти к следующему оператору. А что делать с остальными оставшимися ордерами , а если там остались незалоченные ордера, а ты уже прервал цикл?
И еще... - твоя функция возвращает только "тру-фальш", не говоря с каким ордером нужно работать, возможно так и надо(я не знаю, не вижу весь код) , но смысл тогда в функции, только информативный?
 

Maxic

Интересующийся
При беглом взгляде на код - вроде все нормально...
НО, при более пристальном - непонятно... например, после нахождения ордера, у которого уже есть лок(типа ничего не надо делать), у тебя стоит оператор "брейк" , а это = прервать цикл перебора и перейти к следующему оператору. А что делать с остальными оставшимися ордерами , а если там остались незалоченные ордера, а ты уже прервал цикл?
И еще... - твоя функция возвращает только "тру-фальш", не говоря с каким ордером нужно работать, возможно так и надо(я не знаю, не вижу весь код) , но смысл тогда в функции, только информативный?

Break я уже потом поставил, думал, что поможет. Оказывается, что он есть, что его нет - это никак не влияет на ошибку. Про то, что данная ф-ция не говорит о конкретном ордере - это я тоже понимаю. Концовка еще не доделана. Дополнительные "навороты" уже поставлю потом, когда устраню ошибку. Меня интересует, как ордер Buy из ячейки массива заходит в функцию, где идет перебор по Sell ордерам?! Что тут не так?
 

st2050

Гуру форума
Здравствуйте, коллеги!

Подскажите пожалуйста как поймать событие активации окна с графиком.

Задача:
На один символ два "экрана", т.е. два окна с графиками. Приходится щелкать на одну, а потом на вторую вкладку чтобы активировать оба.
Хочу щелкнуть на вкладку одного окна, а активацию второго проведет мой советник-панелька.

Но для этого нужно поймать событие активации окна с советником. Как же это сделать?
В документации по OnChartEvent такого не нашёл (
 

Elvis Burunduk

Элитный участник
Break я уже потом поставил, думал, что поможет. Оказывается, что он есть, что его нет - это никак не влияет на ошибку. Про то, что данная ф-ция не говорит о конкретном ордере - это я тоже понимаю. Концовка еще не доделана. Дополнительные "навороты" уже поставлю потом, когда устраню ошибку. Меня интересует, как ордер Buy из ячейки массива заходит в функцию, где идет перебор по Sell ордерам?! Что тут не так?

Тогда мое предложение - меняй брейк на континуе и заремируй весь кусок про селл ордера, пока забудь о них, работай только с баями, каждое действие обложи принтами...
И смотри что и когда выдает в принты, ставь рыночные ордера без лока - смотри что пишет, потом их залокируй и смотри что пишет...
В общем ищи, иначе никак ...

Я бы не так писал, но у каждого свой путь, стиль...
 
Последнее редактирование:

Maxic

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

Я бы не так писал, но у каждого свой путь, стиль...

Спасибо Вам за участие в поиске проблемы! Я вроде бы разобрался. Пришлось немного переделать код и все сразу заработало.
 

Maxic

Интересующийся
Еще возник такой вопрос:

Как обнулять или удалять информацию в какой-либо из ячеек структурного неоднородного массива? Дело в том, что у меня изменился комментарий к ордеру и мне надо этот ордер удалить из ячейки структурного массива и определить этот ордер в другой массив. С обычным массивом все более менее понятно, а вот со структурными, я не знаю, какие операторы или функции работают или как это все надо оформлять? И как копировать один структурный массив в другой, чтобы сохранить информацию о предыдущем заполнении и потом ее сравнивать с новым заполнением? Подскажите, кто что знает по этому поводу. Буду очень благодарен!
 

Ugar

Гуру форума
Еще возник такой вопрос:

Как обнулять или удалять информацию в какой-либо из ячеек структурного неоднородного массива? Дело в том, что у меня изменился комментарий к ордеру и мне надо этот ордер удалить из ячейки структурного массива и определить этот ордер в другой массив. С обычным массивом все более менее понятно, а вот со структурными, я не знаю, какие операторы или функции работают или как это все надо оформлять? И как копировать один структурный массив в другой, чтобы сохранить информацию о предыдущем заполнении и потом ее сравнивать с новым заполнением? Подскажите, кто что знает по этому поводу. Буду очень благодарен!
Почти всё то же самое, присвой ячейке новое значение
InfoOrderNew[1][n].TypeOrder="";
Копирование так же через ArrayCopy. Только предварительно размер приёмного массива сделай под размер копируемого через ArrayResize.
 

ggman

Новичок форума
Можно ли создать советник, который бы открывал сделки по сигналам приходящим из вне. Например с мобильного телефона, емейла, Telegram и т.д.? Нужно чтобы сделки открывались по сигналам с другого метатрейдера, но при этом чтобы в самом "сигнальном" метатрейдере никаких сделок не открывалось.
 

gis63

Прохожий
Нужно прописать следующее условие

Если в торговом терминале МТ4 отсутствуют сделки с магиком №33 то...
 

Ugar

Гуру форума
Если в торговом терминале МТ4 отсутствуют сделки с магиком №33 то...
Код:
int orders=0;
int Magic=33;
//Счётчик ордеров с маджиком
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderMagicNumber()==Magic)orders++;
         }
//Если ордеров не найдено
if(orders==0)
{

}
 

Ugar

Гуру форума
Можно ли создать советник, который бы открывал сделки по сигналам приходящим из вне. Например с мобильного телефона, емейла, Telegram и т.д.? Нужно чтобы сделки открывались по сигналам с другого метатрейдера, но при этом чтобы в самом "сигнальном" метатрейдере никаких сделок не открывалось.
Вполне возможно обмениваться данными между терминалами через файл в общей папке, для этого она и существует.
Другие виды обмена потребуют выхода за пределы языка mql, например с помощью импортирования функций из библиотек.
 
Верх