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

tommy27

Гуру форума
Нормальный букварь у оф сайте _http://book.mql4.com/ru/
Сложновато там как то всё.. для программеров, а не для простых смертных:)
Мне раньше очень помогала в освоении стандартная справка в метаэдиторе - всё было удобно сгруппировано и с коротенькими примерами использования, сейчас упорядочили по алфавиту и примеры из справки убрали - очень неудобно, мне это серьёзно осложнило процесс освоения обновлённого мкла:not-good:
 

Bob5

Новичок форума
Если кто подскажет, буду признателен.
Бьюсь над задачей, как остановить счетчик на максимальном значении, которое показывает
Profit_Sell() - (показывает эквити открытых
ордеров Sell). Счетчик (вывел на экран в комент)
постоянно бегает в верх, низ. Начинал с этого,
беребрал многое, но неполучается.

double Equity_Sell()
{
double MaxEquity =0 ;

if ( Orders_Sell > 0 )
{
if (Profit_Sell() > MaxEquity) MaxEquity = Profit_Sell() ;
}
return(MaxEquity);
}

По идеи должно быть так - если есть открытые
ордера Sell - счетчик замирает на максимальном достигнутом эквити.
Если нет ордеров Sell - счетчик обнуляется.
 
Последнее редактирование:

Ugar

Гуру форума
Если кто подскажет, буду признателен.
Бьюсь над задачей, как остановить счетчик на максимальном значении, которое показывает
Profit_Sell() - (показывает эквити открытых
ордеров Sell). Счетчик (вывел на экран в комент)
постоянно бегает в верх, низ. Начинал с этого,
беребрал многое, но неполучается.

double Equity_Sell()
{
double MaxEquity =0 ;

if ( Orders_Sell > 0 )
{
if (Profit_Sell() > MaxEquity) MaxEquity = Profit_Sell() ;
}
return(MaxEquity);
}

По идеи должно быть так - если есть открытые
ордера Sell - счетчик замирает на максимальном достигнутом эквити.
Если нет ордеров Sell - счетчик обнуляется.
Не всё ясно что от куда берётся, но попробуй так:

double Equity_Sell()
{
static double MaxEquity ;

if ( Orders_Sell > 0 )
{
if (Profit_Sell() > MaxEquity) MaxEquity = Profit_Sell() ;
}
else MaxEquity=0 ;
return(MaxEquity);
}
 
  • Like
Реакции: Bob5

Bob5

Новичок форума
Еще если можно уточнение по предыдущему вопросу - как обозначить тик. Если с Open[0] и Open[1], все понятно, то как обозначить тик[0] и тик[1] . Типа если тик[1]>ma && тик[0]<ma то делаем тото и тото.
 

ansol

Местный знаток
Еще если можно уточнение по предыдущему вопросу - как обозначить тик. Если с Open[0] и Open[1], все понятно, то как обозначить тик[0] и тик[1] . Типа если тик[1]>ma && тик[0]<ma то делаем тото и тото.

Volume[0] и Volume[1] :D
Только это самое Volume слишком сильно зависит от ДЦ, у одного может быть 100, у другого - 1000 тиков в одной и той же свече.
 

Ugar

Гуру форума
Еще если можно уточнение по предыдущему вопросу - как обозначить тик. Если с Open[0] и Open[1], все понятно, то как обозначить тик[0] и тик[1] . Типа если тик[1]>ma && тик[0]<ma то делаем тото и тото.
Для начала уточню, тик это событие прихода новой цены.
По этому событию выполняется функция OnTick(), обычно основной код советника находится там. Значит код выполняется с приходом тика.
Значит:
OnTick()
{
bool Direction=false;
static bool LastDirection;
double ma=iMA(...);
if(Bid>ma)Direction=true;
//Вот условие если Bid>ma, а на прошлом тике это условие не соблюдалось
if(Direction && LastDirection!=Direction)
{
//Выполнить то то
}

//Запомнить направление для следующего тика
LastDirection=Direction;
}
Если нужно сравнивать значения на нескольких тиках, лучше использовать массивы.
 
  • Like
Реакции: Bob5

watasi

Интересующийся
Здравствуйте! В индикатор мной добавлено:

Код:
 input int      font_clr  = clrBlack;
 input int      font_size = 10;
 extern string  font_name = "Impact";

Но хотелось еще и выбор шрифта(не вписывать, а выбрать)
Через модификатор input ?А какой тип данных ?
 

Вовка_25

Новичок форума
привет,подскажите в чем может быть причина,есть советник на обычных котировках работает в тестере а на 99.9 тиковых котировках не подает признаков жизни и не пишет не чего в журнале,посоветуйте что нибудь для решения проблемы:disappointed:
 

ansol

Местный знаток
привет,подскажите в чем может быть причина,есть советник на обычных котировках работает в тестере а на 99.9 тиковых котировках не подает признаков жизни и не пишет не чего в журнале,посоветуйте что нибудь для решения проблемы:disappointed:

Для этой темы http://forexsystemsru.com/poleznye-utility/74121-testirovanie-sovetnikov-s-kachestvom-99-9%25-v-mt4-programma-tickstory-lite-5.html вопрос. Возможно, сова использует инфу об объемах, а вы не экспортировали данные об объемах. Тогда функция Volume всегда возвращает "1" :not-bad: Как вариант, конечно, не факт.
 

Вложения

  • 1.jpg
    1.jpg
    168,9 КБ · Просмотры: 22

Bob5

Новичок форума
Как можно зафиксировать событие-

Пример, пока чо цена выше ма(Moving Average), никаких действий,
если новый бар открылся ниже ма - совершилось событие и только
с этого момента разрешено ТРАЛИТЬ и неважно, где откроется новый бар,
ниже ма или выше ма и пока, что есть открытые ордера Sell,будет разрешено ТРАЛИТЬ .


if (Number_of_Orders_Sell()>0 && Open[0] < ma) Trall(); // разрешено действовать - ТРАЛИМ


но если следующий новый бар открылся выше - ма // получается - ТРАЛ неразрешен, а нужно чтоб был разрешен,
до полного закрытия ордеров Sell.
Как можно решить эту задачку ?
 
Последнее редактирование:

mobidik

-----
Как можно зафиксировать событие-

Пример, пока чо цена выше ма(Moving Average), никаких действий,
если новый бар открылся ниже ма - совершилось событие и только
с этого момента разрешено ТРАЛИТЬ и неважно, где откроется новый бар,
ниже ма или выше ма и пока, что есть открытые ордера Sell,будет разрешено ТРАЛИТЬ .


if (Number_of_Orders_Sell()>0 && Open[0] < ma) Trall(); // разрешено действовать - ТРАЛИМ


но если следующий новый бар открылся выше - ма // получается - ТРАЛ неразрешен, а нужно чтоб был разрешен,
до полного закрытия ордеров Sell.
Как можно решить эту задачку ?


Как вариант, пробуй так:
bool разрешить трал = false;
if (Number_of_Orders_Sell()>0 && Open[0] < ma) разрешить трал = true;
if(разрешить трал) Trall(); // разрешено действовать - ТРАЛИМ

но потом нужно будет его выключить, например, когда ордер закроется по тралу.
 
Последнее редактирование:
  • Like
Реакции: Bob5

matro3

Почетный гражданин
Как прервать проход в оптимизации советника?
Например: если достигнут предел убытка во сколько-то процентов.
Нужно чтоб оптимизация перешла к следующей итерации.
 

Ugar

Гуру форума
Как прервать проход в оптимизации советника?
Например: если достигнут предел убытка во сколько-то процентов.
Нужно чтоб оптимизация перешла к следующей итерации.
А при чём тут mql?
В тестере кнопка "Свойства эксперта", там вкладка "Оптимизация", там поставить галку "максимальная просадка" и задать %.
 

matro3

Почетный гражданин
Да, видно голова уже не варит ))
Значит для каких-либо целей такого способа нет?
 

kipjatok001

Почетный гражданин
Добрый день. Есть советник, который выставляет ордера увеличенными в х раз. Нужно изменить лот на начальный лот или на лот, который будет записан в параметрах. Какая это строка. Заранее спасибо.
 

Ugar

Гуру форума
Да, видно голова уже не варит ))
Значит для каких-либо целей такого способа нет?
Сложно хвосту вилять собакой.
Советник при тестировании и оптимизации работает в среде тестера.
Сложно советнику рулить тестером, тем более когда уже процесс запущен.
 

Ugar

Гуру форума
Добрый день. Есть советник, который выставляет ордера увеличенными в х раз. Нужно изменить лот на начальный лот или на лот, который будет записан в параметрах. Какая это строка. Заранее спасибо.
Это не строка, а вот эта ветка, но и там экстрасенсы, вряд ли, обитают. Без предоставления кода никто не угадает и не переделает.
 
Верх