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

Ugar

Гуру форума
Подскажите пожалуйста, как сделать, чтоб например цена пересекла МА вверх и после этого Macd открывал ордера при пересечении 0 пока цена находится выше МА?
Если на текущем баре, то примерно так. Вместо точек аргуметы, смотреть в справочнике.
if(iMACD(...,0)>0 && (iMACD(...,1)<0 && Bid>iMA(...,0))
{
//открытие ордера
}
 

SvNick

Прохожий
Если на текущем баре, то примерно так. Вместо точек аргуметы, смотреть в справочнике.
if(iMACD(...,0)>0 && (iMACD(...,1)<0 && Bid>iMA(...,0))
{
//открытие ордера
}
Если на текущем баре, то примерно так. Вместо точек аргуметы, смотреть в справочнике.
if(iMACD(...,0)>0 && (iMACD(...,1)<0 && Bid>iMA(...,0))
{
//открытие ордера
}
У меня стоит вот так:
if(Open[1] > MA && mainLine1 > 0 && mainLine2 < 0) permOpenBuy = true;
if(Open[1] < MA && mainLine1 < 0 && mainLine2 > 0) permOpenSell = true;
Но при таких условиях открывается только один ордер. А хотелось бы, чтобы при условии например Open[1] > MA потом Macd при своих условиях открывал позицию каждый раз при условии mainLine1 > 0 && mainLine2 < 0
 

MrGreen86

Гуру форума
У меня стоит вот так:
if(Open[1] > MA && mainLine1 > 0 && mainLine2 < 0) permOpenBuy = true;
if(Open[1] < MA && mainLine1 < 0 && mainLine2 > 0) permOpenSell = true;
Но при таких условиях открывается только один ордер. А хотелось бы, чтобы при условии например Open[1] > MA потом Macd при своих условиях открывал позицию каждый раз при условии mainLine1 > 0 && mainLine2 < 0
значит у вас ошибка в остальной части кода. с этими условиями все верно.
 

Ugar

Гуру форума
У меня стоит вот так:
if(Open[1] > MA && mainLine1 > 0 && mainLine2 < 0) permOpenBuy = true;
if(Open[1] < MA && mainLine1 < 0 && mainLine2 > 0) permOpenSell = true;
Но при таких условиях открывается только один ордер. А хотелось бы, чтобы при условии например Open[1] > MA потом Macd при своих условиях открывал позицию каждый раз при условии mainLine1 > 0 && mainLine2 < 0
Если МА это МА на 1 баре, mainLine1 это MACD на 1 баре, mainLine2 это MACD на 2 баре, то всё правильно для работы на сформированных барах. Здесь ничего нет запрещающего открывать повторно ордера по повторным условиям. Это где то в другом месте.
 

MERKABA

Прохожий
Доброго времени суток! Подскажите пожалуйста как исправить вот такую ошибку при компиляции:
"invalid array access ".
Вот в этой строчке выдает ошибку -
Код:
Expand Collapse Copy
 li_96 = listen_market(gda_212, gi_240, gda_216, gi_244, gda_220, gi_248, gda_224, gi_252, gda_228, gi_256, gda_232, gi_260, li_28, ChartLength, SearchLength, li_92,
         Forecast,Symbol());

Если нужен полный код, могу скинуть. За ранее благодарю за помощь!
 

Art-fx

Новичок форума
Добрый день.
Нужна помощь в определении валюты депозита (и учёте этого в блоке мани-менеджмента).

Допустим, мы определяем лот (как % от баланса):
------------
Lots=NormalizeDouble(AccountBalance()*MM/100000,2);
-----------
Методом тыка мы подберём оптимальное значение параметра "ММ" (при условии, что наш депозит в долларах).

Но если наш депозит в рублях....
То, по текущему курсу, объём лота должен быть в 60 раз меньше.

Это надо как-то учесть в формуле. Вопрос как?

Буду очень благодарен за готовую строку кода!
 

eevviill2

Местный знаток
Код:
Expand Collapse Copy
double needed_lot=MathFloor(AccountFreeMargin()*Percents/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);
 

Art-fx

Новичок форума
Код:
Expand Collapse Copy
double needed_lot=MathFloor(AccountFreeMargin()*Percents/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);

Кажется, это немного не то.

Пример №1:
Депозит 1000 долларов.
торгуем на паре евро-доллар.
Мы по этой формуле рассчитали лот.

Пример №2
Депозит 1000 (но уже рублей).
опять торгуем по евро-доллару

По формуле мы получим тот же лот (как и для долларового депозита). Но наш фактический депо (в пересчёте на доллары) более чем в 60 раз меньше (чем в пример №1).

Как учесть, что депозит может быть в рублях?
 

Ugar

Гуру форума
Кажется, это немного не то.

Пример №1:
Депозит 1000 долларов.
торгуем на паре евро-доллар.
Мы по этой формуле рассчитали лот.

Пример №2
Депозит 1000 (но уже рублей).
опять торгуем по евро-доллару

По формуле мы получим тот же лот (как и для долларового депозита). Но наш фактический депо (в пересчёте на доллары) более чем в 60 раз меньше (чем в пример №1).

Как учесть, что депозит может быть в рублях?
Если валюта в рублях то и залог будет в рублях, примерно в 60 раз больше. в той формуле есть
MarketInfo(Symbol(),MODE_MARGINREQUIRED), залог.
Я считаю процент залога от баланса так
temp=(balance*vol*0.01)/marginrequired
Здесь balance - баланс счёта, vol - заданный процент, marginrequired - залог в валюте депозита. Нормирование результата выполняется после.
lot=round(temp/lotstep)*lotstep;
lot=ceil(temp/lotstep)*lotstep;
lot=floor(temp/lotstep)*lotstep;
В зависимости от того в какую сторону округлять.
Потом сравниваю с минимальным и максимальным лотом, и подгоняю если он за пределами.

Есть вариант % потерь при закрытии по стоп лосс, но там подразумевается что у сделки будет стоп лосс. Там то же учтена валюта депозита.
 

vasiliii

Прохожий
Добрый день, уважаемые эксперты в MQL4)))
помогите пожалуйста с задачей :

есть индикатор с парой глобальных переменных.
как считать значение такой переменной из другого окна другим индикатором?
(я пытаюсь сделать MTF но чтобы упростить работу хочу просто считать значение из индикатора открытого в другом TF)

попутно спрошу: может встречали примеры отображение крупной стрелки в одном из углов терминала ?
большое спасибо за ответы!
 

Ugar

Гуру форума
Добрый день, уважаемые эксперты в MQL4)))
помогите пожалуйста с задачей :

есть индикатор с парой глобальных переменных.
как считать значение такой переменной из другого окна другим индикатором?
(я пытаюсь сделать MTF но чтобы упростить работу хочу просто считать значение из индикатора открытого в другом TF)

попутно спрошу: может встречали примеры отображение крупной стрелки в одном из углов терминала ?
большое спасибо за ответы!
Так же как читать в том же индикаторе. Надо что бы индикатор знал имя переменной.
double GlobalVariableGet(
string name // имя
);
 

AlexeyVik

Программист mql4 mql5
попутно спрошу: может встречали примеры отображение крупной стрелки в одном из углов терминала ?
большое спасибо за ответы!
Один из вариантов поставить lable, с текстом 'й' и шрифтом Wingdbgs
333579
 

fs256

Местный знаток
Кажется, это немного не то.

Пример №1:
Депозит 1000 долларов.
торгуем на паре евро-доллар.
Мы по этой формуле рассчитали лот.

Пример №2
Депозит 1000 (но уже рублей).
опять торгуем по евро-доллару

По формуле мы получим тот же лот (как и для долларового депозита). Но наш фактический депо (в пересчёте на доллары) более чем в 60 раз меньше (чем в пример №1).

Как учесть, что депозит может быть в рублях?

)))
=NormalizeDouble(fmax(AccountBalance()*MM*Lots*iClose("USDRUB",0,0)/Delitel,MarketInfo(_Symbol,MODE_MINLOT)));
)))
 
Последнее редактирование:

Jagthai

Прохожий
День добрый. Извиняюсь, если глупый вопрос. В общем...
Есть ли альтернативные платформы для трейдинга, но чтобы работали с серверами (как мт4-5 терминалы) с демо и реальными счетами?
Есть ли компоненты для делфи для контакта с клиентом\сервером МТ4-5 ?
Или альтернативный интерфейс, чтобы сторонее (мое) приложение могло открывать ордера и запрашивать цену и прочие данные?
 

ИванМН

Местный знаток
Имеется МТ4 с несколькими открытыми графиками, на каждом работает свой советник, один и тот же, но с разными настройками. Можно ли средствами MQL4 заставить советника переключаться на вкладку того графика, где произошло некое событие, например, открылась новая позиция?
 

MrGreen86

Гуру форума
Имеется МТ4 с несколькими открытыми графиками, на каждом работает свой советник, один и тот же, но с разными настройками. Можно ли средствами MQL4 заставить советника переключаться на вкладку того графика, где произошло некое событие, например, открылась новая позиция?
да.
ChartSetInteger(0,CHART_BRING_TO_TOP,true);
 

ИванМН

Местный знаток
Как быстро ответили, здОрово. Тогда такой вопрос: все те же вводные. Можно ли:
1. по Magic-номеру советника найти № графика, на котором работает советник?
2. по имени некоего графического объекта, точно находящегося на одном из графиков, найти № этого графика. ObjectFind не катит, так как ей как раз надо задавать этот №; нужен аналог ObjectFind, который просматривает ВСЕ графики, разыскивая только лишь по названию объекта.
 

AlexeyVik

Программист mql4 mql5
Как быстро ответили, здОрово. Тогда такой вопрос: все те же вводные. Можно ли:
1. по Magic-номеру советника найти № графика, на котором работает советник?
2. по имени некоего графического объекта, точно находящегося на одном из графиков, найти № этого графика. ObjectFind не катит, так как ей как раз надо задавать этот №; нужен аналог ObjectFind, который просматривает ВСЕ графики, разыскивая только лишь по названию объекта.
Тогда перебор чартов с поиском. Если не найден, то следующий чарт.
 

MrGreen86

Гуру форума
Как быстро ответили, здОрово. Тогда такой вопрос: все те же вводные. Можно ли:
1. по Magic-номеру советника найти № графика, на котором работает советник?
2. по имени некоего графического объекта, точно находящегося на одном из графиков, найти № этого графика. ObjectFind не катит, так как ей как раз надо задавать этот №; нужен аналог ObjectFind, который просматривает ВСЕ графики, разыскивая только лишь по названию объекта.
1. на сколько я знаю, нельзя просматривать входные параметры установленных советников.
2. это не сложно. вбейте в коде ChartNext и откройте справку по этой функции, там пример как перебрать все графики терминала и получить их ID.
В этот перебор вставляете ObjectFind уже с известным ID и именем объекта.
 
Верх