Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Подскажите кто может пожалуйста прописал условие по пересечению МАСД всё нормально но не хватает функции контроля закрытия текущего бара нашол вот такую if (timepref == Time[0])return(0); но она не применима в старте может быть кто не будь знает как её изменить или как другую прописать
timepref = Time[0];
static datetime new_Bar;
if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход
new_Bar = Time[1];
и далее Ваш код. Он будет исполняться 1 раз на открытии текущего бара
Спасибо большое второй раз выручаете меня)))
Добавлено: 01-03-2015 06:16:43
И снова я с просьбой к Вам вдохновлённый тем что получилось прописать условия входов по масд прописать трал бу и даже процент от депо решил прикрутить фильтр в виде стохастика на более младшем тайм фрейме решил что возможно это сделать как масд вот таким способом
Snox1 = iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_MAIN,0);
Snox2 = iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
Snox3 = iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_MAIN,1);
Snox4 = iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);
и всё работает но вот вопрос как прописать зоны перекупленности 20 и 80 в справке не на шол на форуме мт 4 в учебнике подобное на шол моему а вот про зоны не слово нет помогите кто может до утра искал не как :-s
Изменено 1 марта, 2015 пользователем 77павел
Задайте внешние переменные типа: input int StohLevelH = 80;
Далее в коде проверяйте if (Snox1 >StohLevelH) ...
Логику понял сейчас попробую)))
постараюсь вкратце объяснить. придумал кое какой подход к торговле, который нужно автоматизировать.
Так как легких путей не бывает ,решил изучить mql.
Начал вот с этих ресурсов: _http://book.mql4.com/ru _/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034
Столкнулся с проблемой,я не могу выполнять задания и примеры описанные там. Как я понял ,описания в книгах и видеоуроках к mql4 подходящие к metaeditor старых билдов. После 600 билда что то изменилось, но не могу понять что . Даже готовые операторы и примеры с книг не компилируюца . Подскажите ,может есть где то информация подробная что изменилось, или учебники под новые билды.
Скачай старый билд 509, компилируй в нем пока.
_http://tradelikeapro.ru/metatrader-4-build-604/
Ссылки внизу
Изменено 2 марта, 2015 пользователем Virtikus
Спасибо большое . Скомпилированные программы будут же работать в новых билдах?
ps.я походу учебы буду всякие вопросы нубские задавать, можно ж тут ,или есть специальный раздел?
Да будут. Переноси ex4 или оба.
Скомпилированные программы будут же работать в новых билдах?
Не продолжительное время, на форуме mql4 уже писали, что в скором времени отключат поддержку всего ПО написанного до 600 билда.
На сколько помню первые даты озвученные модератами ресурса ~ 1 год после релиза 600 билда, это связано с тем, что бы юзеры смогли спокойно адаптировать старые наработки под новую версию.
Поэтому сразу пиши под новой версией, тем более что там ничего сложного нет.
Накидал себе простенький индикатор, который мне выводит на экран рабочий лот в зависимости от заданного стоплосса в пунктах. Расчет лота для последующего вывода произвожу так
workLot = DoubleToString(slInMoney/(slInPoints*pointValue), 2);
и проблема в том, что лот выводится не с точностью два знака, а 16
ну например 0,8100000000000001
причем при изменении денежного баланса, начинает выводить как положено, с точностью до двух знаков, потом баланс поменялся, опять выводит 16 знаков
Да, похоже, что была ошибка в типах при конвертации числа в строку, привел все переменные к нужному типу, стало нормально.
Доброго времени суток! помогите пожалуйста советом как можно передать структуру в функцию? и вообще возможно ли это в mql4
Добавлено: 04-03-2015 09:30:43
пробовал как на си
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
void myfunc (struct mystruct STRUCTURA)
{
тело функции
}
выдает ошибку: 'mystruct' - struct can't be defined in parameters list
Изменено 4 марта, 2015 пользователем koleber
Вам надо определить переменную с типом структуры и её передавать в функцию.
В описании функции слово struct писать не надо
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct MYS1;
myfunc (MYS1);
void myfunc (mystruct STRUCTURA)
{
тело функции
}
А если я уже определил структурой массив array[] как мне его передать в функцию ссылкой ?
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct array[];
...???
Добавлено: 04-03-2015 10:59:00
И еще в описании функции нам нужно указать тип, а если это структура то что за тип тогда?
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct MYS1;
void myfunc (MYS1)
{
}
выдает ошибку: 'MYS1' - declaration without type
Изменено 4 марта, 2015 пользователем koleber
Я-ж написал... Вы определяете пользовательский тип (структура) с названием типа - mystruct.
Ещё раз с поправкой на Вашу ситуацию: (может Вам с чего попроще начинать изучать мкл?)
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct array[]; // я-бы не использовал зарезервированные слова в виде названий переменных...
myfunc (array);
void myfunc (mystruct STRUCTURA[])
{
тело функции
STRUCTURA[1].first_arr[2] = ...
}
использовав то что вы написали:
struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct array[]; // я-бы не использовал зарезервированные слова в виде названий переменных...
myfunc (array);
void myfunc (mystruct STRUCTURA[])
{
тело функции
STRUCTURA[1].first_arr[2] = ...
}
получил такие ошибки:
'myfunc' - declaration without type
'mystruct' - objects are passed by reference only
что я делаю не так?
void myfunc (mystruct &STRUCTURA[])
Вот скрипт, который передаёт в функцию структуру, похожую на Вашу (только я её определил).
Спасибо за ответ! теперь понял
Вопрос есть по функции закрытия позиций по прасадке от депо в процентах ,риск скажем пять процентов берётся от текущего депо постоянно поэтому работая постоянным лотом и имея + по депо мой риск в пять процентов увеличивается по сумме я так понимаю так вот сам вопрос как изменить расчёт не от текущего а от первоначального хотя бы или пусть когда минус по депо он делает перерасчёт от уменьшенного депо надеюсь понятно суть изложил спасибо всем
Накидал себе простенький индикатор, который мне выводит на экран рабочий лот в зависимости от заданного стоплосса в пунктах.
с предыдущей проблемой разобрался, осталась такая:
Когда я первый раз накидываю индикатор на экран, потом провожу сделки, соответственно меняется баланс, то и лот на экране меняется. После того как я закрыл-открыл терминал по новой (с открытым окном с индикатором), то после изменения баланса лот уже не меняется. Код прикрепляю.
Доброго времени суток ув. программисты...возникла проблема...пытаюсь написать сеточник, но при тестировании выдает ошибку 4108 при закрытии всех ордеров...знаю что связано с тикетом, но как решить эту проблему не знаю...кусок кода:
bool Close_Orders(int mag, int otype)
{
bool error = false;
int _OR_err = GetLastError();
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mag && OrderType() == otype)
{
if(otype == OP_BUY || otype == OP_SELL)
{
if (otype == OP_BUY) RefreshRates();
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(),MODE_BID), Slippage, clrBlue)) error = true; else
Print("Ошибка закрытия ордера "+IntegerToString(_OR_err));
if (otype == OP_SELL) RefreshRates();
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(),MODE_ASK), Slippage, clrRed)) error = true; else
Print("Ошибка закрытия ордера "+IntegerToString(_OR_err));
}
}
Sleep(500);
}
}
return(false);
}
Привет всем, а подскажите плиз, как сделать, чтобы при выполнении заданных условий, свеча выделялась на графике (стрелочной, например)?
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем