Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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


понял, благодарю! надо просто проверить if (priceliniaGREEN != EMPTY_VALUE && CountBuy() ==0 && Ask вроде работает. а с примера выше, который я нашел, так другие номера буферов открывают ордера по стрелке. как хорошо, когда мучаешься, но понимаешь суть процесса!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
Цитата


Найк у Вас сова работает по закрытию бара ибо Вы используете индюк на 1-баре, но каждый тик его проверяете. примените в самом начале след код и сова станет быстрее работать:

static datetime new_Bar = 0;
if (new_Bar == Time[0]) return; //Если бар не закрыт - выход
new_Bar = Time[0];



Спасибо. Эта штука, хотя я ее и переделал помогла мне разобраться в касяках кода.

Так смешно.
В одном индюке стояло условие, перебирать до 1>=0 вместо i>=0.
И он перебирал. А в другом другой косяк был.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Просьба помочь нубу в mql. Почему-то мои совы даже такого вида

//+------------------------------------------------------------------+
//| Drifter 1.00.mq4 |
//| Copyright 2016, SVS |
//| http://tlap.com/forum/profile/77648-SVS696 |
//+-----------------------------------------------------------------+
#property copyright "Copyright 2016, SVS"
#property link "http://tlap.com/forum/profile/77648-SVS696"
#property version "1.00"
#property strict
#property show_inputs
//--- input parameters
input bool FixedLot=false;
input bool DinamicSpread=false;
input float Lot=1.00;
input float Percentage=2.0;
input float Follow=0.5;
input int StopZerro=100;
input int FollowStop=170;
input int Distance=200;
input int MiddleSpread=20;

//+------------------------------------------------------------------+
//| Expert program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---

}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+


не открывают менюшку параметров, да и вообще не пашут. Хотя если копирую полностью чей-то пример, то все нормально.

Как скрипт все нормально работает.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Просьба помочь нубу в mql. Почему-то мои совы даже такого вида

Спойлер

//+------------------------------------------------------------------+
//| Drifter 1.00.mq4 |
//| Copyright 2016, SVS |
//| http://tlap.com/forum/profile/77648-SVS696 |
//+-----------------------------------------------------------------+
#property copyright "Copyright 2016, SVS"
#property link "http://tlap.com/forum/profile/77648-SVS696"
#property version "1.00"
#property strict
#property show_inputs
//--- input parameters
input bool FixedLot=false;
input bool DinamicSpread=false;
input float Lot=1.00;
input float Percentage=2.0;
input float Follow=0.5;
input int StopZerro=100;
input int FollowStop=170;
input int Distance=200;
input int MiddleSpread=20;

//+------------------------------------------------------------------+
//| Expert program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---

}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+


не открывают менюшку параметров, да и вообще не пашут. Хотя если копирую полностью чей-то пример, то все нормально.

Как скрипт все нормально работает.


Удали строку: #property show_inputs
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Удали строку: #property show_inputs


Если бы все так было просто... Вообщем я уже проверял и проверил ещё раз. Не работает, даже если убрать все #property. Изменено пользователем SVS696
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
SVS696, выстави в настройках разрешение торговать совам(в настройках терминала сервис-настройки-советники), если и при этом у тебя не будут показываться инпуты, и елис ты этот код действительно запускаешь из папки скриптов - то выход один - сноси на хрен терминал и ставь его с нуля, так как код у тебя абсолютно верно написан, все работает(я про инпуты), я проверил.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано


SVS696, и елис ты этот код действительно запускаешь из папки скриптов

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



1) Если я компилю в скрипт и кидаю в скрипты, то все нормально, а вот при компиляции совы (естественно потом кидаю в советники) уже окошко начинает отрисовываться и сразу пропадает. В другом терминале аналогично. Компилирую именно сову, код с нуля даже писал.

2)Про double спасибо Изменено пользователем SVS696
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



1) Если я компилю в скрипт и кидаю в скрипты, то все нормально, а вот при компиляции совы (естественно потом кидаю в советники) ужи окошко начинает отрисовываться и сразу пропадает.



тебе уже выше правильно написали. в сове не нужен show_inputs. это скриптовый параметр как и show_indicator_inputs(ну или как его там, точно не помню лексикон) - индикаторный.
тебе в любом случае в логах пишется ошибка при таких подходах что ты используешь скриптовые вещи в сове и наоборот. выводится критическая ошибка типа "this is not script" или наподобие.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




1) Если я компилю в скрипт и кидаю в скрипты, то все нормально, а вот при компиляции совы (естественно потом кидаю в советники) ужи окошко начинает отрисовываться и сразу пропадает.



тебе уже выше правильно написали. в сове не нужен show_inputs. это скриптовый параметр как и show_indicator_inputs(ну или как его там, точно не помню лексикон) - индикаторный.
тебе в любом случае в логах пишется ошибка при таких подходах что ты используешь скриптовые вещи в сове и наоборот. выводится критическая ошибка типа "this is not script" или наподобие.

Косяк тут какой-то

//+------------------------------------------------------------------+
//| Expert program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---

}
//+------------------------------------------------------------------+


Тогда где описывать основное тело советника?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Тогда где описывать основное тело советника?


OnStart используется только в скриптах и индикаторах(про последние - не точно).

в сова основное тело - это либо стандартно void OnTick() либо если ты хард-тру мультивалютник то void OnTimer()(его еще надо правильно объявлять в ините).
смотря как ты реализовываешь логику.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано

подтверждаю:
1. если МТ видит в коде #property show_inputs, то считает это скриптом без вариантов
2. OnStart() - это стартовая функция скрипта
3. OnCalculate() - индикатора
4. OnTick() - для эксперта. Эксперт без этой функции не запустится (если только через таймер)

Запустите этот код как эксперта (сейчас рынок закрыт - алерта не будет - тика нет, но параметры увидите):

input double ddd = 10;
void OnTick() { Alert("Hello World! ddd =",ddd); }

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Короче я изучал старый mql4 надо учить mql5) который работает и в новых терминалах.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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

Изменено пользователем serpent989
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

В продолжение темы вопросы от ламера ...=)Мне нужна помощь в функции подсчета ордеров. Считать ордера по позициям я научился благодаря урокам. Теперь мне нужно посчитать конкретные ордера на покупку и конкретные ордера на продажу, как быть? Выручайте!!! =)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


В продолжение темы вопросы от ламера ...=)Мне нужна помощь в функции подсчета ордеров. Считать ордера по позициям я научился благодаря урокам. Теперь мне нужно посчитать конкретные ордера на покупку и конкретные ордера на продажу, как быть? Выручайте!!! =)



параметры ордеров погулить не судьба,не? OrderType(), например.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Я не совсем ясно выразился. OrderType() это все понятно. Есть 2 ордера на покупку, с разной ценой открытия и разными тейками и стопами, как мне каждый из них отдельно посчитать?

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

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Универсальная функция подсчета ордеров в рынке любого типа (тип передается в функцию) спасет вас, и станет основой любого будущего советника. Почти любой эксперт должен всегда знать есть ли в рынке "его" ордера и в каком количестве.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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


Ну вообщем, чтоб ещё понятнее было, то нужна функция обратная этой -
bool ChartIndicatorDelete(
long chart_id, // идентификатор графика
int sub_window, // номер подокна
const string indicator_shortname // короткое имя индикатора
);
Что-то мне подсказывает, что такой функции нет в MQL4...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Универсальная функция подсчета ордеров в рынке любого типа (тип передается в функцию) спасет вас, и станет основой любого будущего советника. Почти любой эксперт должен всегда знать есть ли в рынке "его" ордера и в каком количестве.


если вы говорите о такой:

int BuyCount()

{
int count = 0;

for (int buy = OrdersTotal()-1; buy>=0; buy--)
{
if(OrderSelect(buy,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic &&
(OrderType() == OP_BUY ))
count++;
}
}
return(count);
}


То она не подойдет
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
serpent989, попробуй два цикла. один вложен в другой. главный перебирает окна открытых графиков, а второй перебирает подокна выбранного графика. и почитай про вот эту функцию

https://docs.mql4.com/ru/chart_operations/windowfind

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

Гриб, я, конечно, понимаю что не бывает глупых вопросов, бывают глупые ответы. но я десять раз перечитал твои посты и так и не понял собстно а что тебе надо и чего не устраивает в тобой же приведенном коде. тебе надо функцию для селл чтоли расписать код? :)) Изменено пользователем dermitay
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Да не надо мне функцию на селл))). Вопрос по другому задам. При появлении сигнала на покупку открывается один ордер на покупку и один на продажу. При появлении сигнала на продажу открывается один ордер на продажу и один на покупку, как это описать в коде? А вообще хотел сказать спасибо, что возитесь с такими как я. Респект вам всем парни

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Гриб я тоже не понял, но попробую - может Вам при открытии 2-ой пары ордеров проверять BuyCount()
serpent989 поддерживаю dermitay - смотри в сторону шаблонов.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Гриб, я имел ввиду универсальную функцию, подобную этой:

int CountTrades(int otype) //Считаем количество открытых ордеров нужного типа  
{
int Count = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic)
Count ++;
}
}
return (Count);
}


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

if (CountTrades(OP_BUY) == 0 && CountTrades(OP_SELL) == 0) //нету наших ордеров в рынке
{
if (Сигнал покупки)
{
Открываем покупки
Открываем продажи
}
else if (Сигнал продажи)
{
Открываем продажи
Открываем покупки
}
}


Дальше включай логику сам
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Гриб, я имел ввиду универсальную функцию, подобную этой:

int CountTrades(int otype) //Считаем количество открытых ордеров нужного типа  
{
int Count = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic)
Count ++;
}
}
return (Count);
}


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

if (CountTrades(OP_BUY) == 0 && CountTrades(OP_SELL) == 0) //нету наших ордеров в рынке
{
if (Сигнал покупки)
{
Открываем покупки
Открываем продажи
}
else if (Сигнал продажи)
{
Открываем продажи
Открываем покупки
}
}


Дальше включай логику сам

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...