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

От xbms, 13 апреля, 2013 в Уголок Программиста

#1976
AndreyGold ааа, я понял к чему Вы вопросы задаёте... Да к сожалению статистика портится, в утешение могу сказать, что если "чисто гипотетически" закрывать ровно в 0, то стата останется кривой - МТ "0" считает за +.
#1977

Подскажите кто может пожалуйста прописал условие по пересечению МАСД всё нормально но не хватает функции контроля закрытия текущего бара нашол вот такую if (timepref == Time[0])return(0); но она не применима в старте может быть кто не будь знает как её изменить или как другую прописать
timepref = Time[0];

#1978
77павел пробуй так:
static datetime new_Bar;
if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход
new_Bar = Time[1];
и далее Ваш код. Он будет исполняться 1 раз на открытии текущего бара
#1979

Спасибо большое второй раз выручаете меня)))


Добавлено: 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павел

#1980
77павел, Вы пытаетесь найти сложности там, где их нет...
Задайте внешние переменные типа: input int StohLevelH = 80;
Далее в коде проверяйте if (Snox1 >StohLevelH) ...
#1981

Логику понял сейчас попробую)))

#1982

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

Так как легких путей не бывает ,решил изучить mql.
Начал вот с этих ресурсов: _http://book.mql4.com/ru _/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034

Столкнулся с проблемой,я не могу выполнять задания и примеры описанные там. Как я понял ,описания в книгах и видеоуроках к mql4 подходящие к metaeditor старых билдов. После 600 билда что то изменилось, но не могу понять что . Даже готовые операторы и примеры с книг не компилируюца . Подскажите ,может есть где то информация подробная что изменилось, или учебники под новые билды.

#1983

Скачай старый билд 509, компилируй в нем пока.

_http://tradelikeapro.ru/metatrader-4-build-604/

Ссылки внизу

Изменено 2 марта, 2015 пользователем Virtikus

#1984

Спасибо большое . Скомпилированные программы будут же работать в новых билдах?

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

#1985

Да будут. Переноси ex4 или оба.

#1986


Скомпилированные программы будут же работать в новых билдах?


Не продолжительное время, на форуме mql4 уже писали, что в скором времени отключат поддержку всего ПО написанного до 600 билда.

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

Поэтому сразу пиши под новой версией, тем более что там ничего сложного нет.
#1987

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

workLot = DoubleToString(slInMoney/(slInPoints*pointValue), 2);

и проблема в том, что лот выводится не с точностью два знака, а 16
ну например 0,8100000000000001
причем при изменении денежного баланса, начинает выводить как положено, с точностью до двух знаков, потом баланс поменялся, опять выводит 16 знаков

#1988
dslone где-то в коде ошибка. ищите или код давайте.
#1989

Да, похоже, что была ошибка в типах при конвертации числа в строку, привел все переменные к нужному типу, стало нормально.

#1990

Доброго времени суток! помогите пожалуйста советом как можно передать структуру в функцию? и вообще возможно ли это в 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

#1991

Вам надо определить переменную с типом структуры и её передавать в функцию.
В описании функции слово struct писать не надо

struct mystruct
{
double first_arr[10];
int second_arr[10];
};
mystruct MYS1;

myfunc (MYS1);

void myfunc (mystruct STRUCTURA)
{
тело функции
}

#1992

А если я уже определил структурой массив 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

#1993
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] = ...
}
#1994

использовав то что вы написали:
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

что я делаю не так?

#1995
koleber надо передавать по ссылке и определять длину Ваших массивов.
void myfunc (mystruct &STRUCTURA[])
Вот скрипт, который передаёт в функцию структуру, похожую на Вашу (только я её определил).

Prob_struct.mq413 скач.

#1996

Спасибо за ответ! теперь понял

#1997

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

#1998


Накидал себе простенький индикатор, который мне выводит на экран рабочий лот в зависимости от заданного стоплосса в пунктах.



с предыдущей проблемой разобрался, осталась такая:
Когда я первый раз накидываю индикатор на экран, потом провожу сделки, соответственно меняется баланс, то и лот на экране меняется. После того как я закрыл-открыл терминал по новой (с открытым окном с индикатором), то после изменения баланса лот уже не меняется. Код прикрепляю.

LotCalc.mq411 скач.

#1999

Доброго времени суток ув. программисты...возникла проблема...пытаюсь написать сеточник, но при тестировании выдает ошибку 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);
}

#2000

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

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

Перейти к списку тем
Форум · 2.0.20260627.0025