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

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


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

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


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



ждите, за выходные попробую сделать видео... :)


Добавлено: 07-02-2014 16:19:25

Цитата


То есть даты не хватает? Обязательно надо вставлять?


Добавлено: 07-02-2014 08:24:37

xbms а можете про блоки рассказать? как они используются для скрытия лоса и профита от брокера чёто не понятно вообще как блок на это влияет? А может это я вообще затеил зря? Опытные люди подскажите стоит ли в это лесть? Чтоб я больше никому здесь голову не морочил плиз!!!


какие блоки?
о чём ты?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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



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



ждите, за выходные попробую сделать видео... :)


Добавлено: 07-02-2014 16:19:25

Цитата


То есть даты не хватает? Обязательно надо вставлять?


Добавлено: 07-02-2014 08:24:37

xbms а можете про блоки рассказать? как они используются для скрытия лоса и профита от брокера чёто не понятно вообще как блок на это влияет? А может это я вообще затеил зря? Опытные люди подскажите стоит ли в это лесть? Чтоб я больше никому здесь голову не морочил плиз!!!


какие блоки?
о чём ты?


Я спрашивал скрыть лос и профит от брокера mzk_3 чёто про блок написал я не понял о чём речь!
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
elruso, не мучали бы вы себя и других попытками обучиться программированию.
Это намного шире и сложней, чем показывает наш многотерпеливый подвижник xbms.
Просто выкиньте из головы слово программирование и живите долго и счастливо, как 99% нормальных людей.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


elruso, не мучали бы вы себя и других попытками обучиться программированию.
Это намного шире и сложней, чем показывает наш многотерпеливый подвижник xbms.
Просто выкиньте из головы слово программирование и живите долго и счастливо, как 99% нормальных людей.



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

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

Старик но почему же выкинуть из головы программирование.Я не говорю о сложных каких то программах или советниках.А научиться хотя бы основному, что бы было можно в автоматическом режиме протестировать свои идеи.Кому уж сильно надо,сложную программу то милости просим к профи за бабки.Так большое спасибо XBMS за его начинания и поддержку.вообще этой теме и блогу.У нас в городе не кто даже не слышал про MQL, хотя общался с многими программистами.С++,легко много таких.в остольном напряг.Где еще как не на таких ресурсах что узнать.Спасибо еще раз вам за ваше начинание XBMS !

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

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


Старик но почему же выкинуть из головы программирование.Я не говорю о сложных каких то программах или советниках.А научиться хотя бы основному, что бы было можно в автоматическом режиме протестировать свои идеи.Кому уж сильно надо,сложную программу то милости просим к профи за бабки.Так большое спасибо XBMS за его начинания и поддержку.вообще этой теме и блогу.У нас в городе не кто даже не слышал про MQL, хотя общался с многими программистами.С++,легко много таких.в остольном напряг.Где еще как не на таких ресурсах что узнать.Спасибо еще раз вам за ваше начинание XBMS !



Да!!! Я думаю что никто здесь программистом крутым становиться не собирается просто трэйдеры хотят автоматизировать собственные системы и всего лишь, ну может какието трюки выучить, ничего сложного в этом нет, для этого в полне достаточно уроков xbms только желание надо, а Старик как ответит так и желание отпадёт!!! Я мистеру Старику написал но мой пост вдруг испарился :-?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Я спрашивал скрыть лос и профит от брокера mzk_3 чёто про блок написал я не понял о чём речь!



ну так а что тут сложного?
Вы не ставите у открытого ордера ТП и СЛ, а просто на каждом тике проверяете достигла-ли цена Вашего виртуального ТП или СЛ.

Проверяется просто, например Profit:

if (MathAbs(Ask-OrderOpenPrice())/Point >= TakeProfit)
{
CloseOrder();
}

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

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


Цитата


Я спрашивал скрыть лос и профит от брокера mzk_3 чёто про блок написал я не понял о чём речь!



ну так а что тут сложного?
Вы не ставите у открытого ордера ТП и СЛ, а просто на каждом тике проверяете достигла-ли цена Вашего виртуального ТП или СЛ.

Проверяется просто, например Profit:

if (MathAbs(Ask-OrderOpenPrice())/Point >= TakeProfit)
{
CloseOrder();
}

ну как-то так... :)


Да xbms спасибо Вам за ответ!!! Я немного по другому делал я писал:

if(OrderProfit() == Profit){


}

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

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

Господа не подскажете как написать функцию,если сделка ушла в минус на 2% от депозита,то закрыть ее автоматически ? В документации читал всякие операторы,но так пока не придумал как это сделать.я понимаю что нужно первой написать цикл перебора ордеров.2 выбрать ордер с помощью Order Select(), 3 Проверит на пренадлежность к магику,потом какой это ордер Buy или Sell, а вот как условие на на закрытие ордера написать не придумаю,какие для этого нужны операторы. И последний OrderClose(.......)

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

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


Господа не подскажете как написать функцию,если сделка ушла в минус на 2% от депозита,то закрыть ее автоматически ? В документации читал всякие операторы,но так пока не придумал как это сделать.я понимаю что нужно первой написать цикл перебора ордеров.2 выбрать ордер с помощью Order Select(), 3 Проверит на пренадлежность к магику,потом какой это ордер Buy или Sell, а вот как условие на на закрытие ордера написать не придумаю,какие для этого нужны операторы. И последний OrderClose(.......)



Тебе надо наверное OrderProfit() использовать он профит в деньгах показывает!!! Как достигнит 2% закрывай! Найди 2% double AccountBalance()/100*2 что-то в таком роде и сравнивай с OrderProfit()!


Добавлено: 08-02-2014 18:23:31



if(OrderProfit() == Profit){


}


Плохое решение. Подумайте почему.


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

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

Добрый вечер.
Написал функцию закрытия всех ордеров, а она закрывает не все ордера. Где закралась ошибка?

void CloseOrders()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), 0.01, Bid, 5, Green);
}

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), 0.01, Ask, 5, Green);
}
}
}
}

Спасибо! :)

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

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

Первое что бросилось в глаза это цены закрытия. Так как селл открывается по Бид то закрываться должен по Аск. Для бай все наоборот. Лот желательно жестко не указывать а указать просто OrderLots()

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

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


Первое что бросилось в глаза это цены закрытия. Так как селл открывается по Бид то закрываться должен по Аск. Для бай все наоборот. Лот желательно жестко не указывать а указать просто OrderLots()



Спасибо большое, помогло!!! =d>
Ссылка на сообщение
Поделиться на другие сайты

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

Здрасти, пытаюсь исправить ошибки:

'ada_16' - invalid array access
'ada_56' - invalid array access
'aia_68' - invalid array access

В блоке:

void f0_0 (string as_0, int aia_8[], double ada_12[], double ada_16[][6], double &a_ihigh_20, double &a_ilow_28, double &ad_36, double &ad_44, int &ai_52, double ada_56[][4], int aia_60[7], double ada_64[2], int aia_68[][512]) {
double lda_112[5];
int lia_116[5];
int li_72 = aia_8[0];
int li_76 = aia_8[1];
int li_80 = aia_8[2];
int li_84 = aia_8[3];
double ld_88 = ada_12[0];
double ld_96 = ada_12[1];
double ld_104 = ada_12[2];
int li_120 = ArraySize(ada_16) / 6;
f0_2(as_0, li_72, li_76, li_80, a_ihigh_20, a_ilow_28);
ad_36 = MathCeil(a_ihigh_20 / ld_96) * ld_96;
ad_44 = MathCeil(a_ilow_28 / ld_96) * ld_96;
if (ad_36 if (ad_44 > a_ilow_28) ad_44 -= ld_96;
ai_52 = MathRound((ad_36 - ad_44) / ld_96);
lda_112[0] = ld_88;
lda_112[1] = ld_96;
lda_112[2] = ad_36;
lda_112[3] = ad_44;
lda_112[4] = ld_104;
lia_116[0] = li_76;
lia_116[1] = li_80;
lia_116[2] = li_84;
lia_116[3] = ai_52;
lia_116[4] = li_120;
ArrayResize(ada_56, ai_52);
ArrayResize(aia_68, ai_52);
ArrayInitialize(ada_56, 0.0);
ArrayInitialize(aia_68, -1);
mt4MpGet(lda_112, lia_116, ada_16, ada_56, aia_60, ada_64, aia_68 );
}

Прочтя документация, что проблема вроде бы с массивами?!

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

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

Добрый день, подскажите кто то уже кодил систему управления капиталом по Райану Джонсу?
В отличие от простого увеличения лота в зависимости от роста депозита она стабильнее :-b


Пысы Уже можно не отвечать, открыл глаза и нашел в соседней ветке !

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

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

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

Спойлер

[extern double MaximumRisk = 0.03;
extern double DecreaseFactor = 3.0;
extern string ___ = " Шаг Баланса";
extern double balans = 1000;

double LotsOptimized() {
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot = Lots;
int orders = OrdersHistoryTotal();
int losses = 0;
lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 2);
if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print("Error in history!");
break;
}
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() }
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if(lot if(lot > maxlot) lot = maxlot;
return (lot);}]

В OrderSend() там где лот впишешь LotsOptimized()


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

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

В уроках было показано условие:

if (timeprev == Time[0]) return;
timeprev = Time[0];

Подскажите равносильно ли оно этому условию:

if (Volume[0]>1) return;



Принцип вроде разный, а результат одинаков... :)

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

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

Подскажите пожалуйста, в чем мб. проблема, у меня по коду должны открываться два ордера, но иногда 1 из них почему то не открывается, функция открытия ордера взята из урока" Качественное открытие и модификация ордеров" + добавлено условие перед открытием на свободность торгового потока, в журнале нету никаких записей об ошибках. кто что подскажет?
открытие двух ордеров по разным парам.
на этом же впс стоит еще 4 терминала, не может это быть тормоза сервера ?

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

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

Как правильно совмещать классический СтопЛосс и ТрейлингСтоп?

Пример: Открылась сделка, через время - сделка в плюсе, начинает работать трал... Всё ок.

А если сделка после открытия сразу уходит в минус... И продолжает уходить до МаржинКолла...

И приходится надеяться, что через несколько лет цена всё таки вернётся в место открытия...

Чтоб такого избежать нужно использовать обычный СтопЛосс...




Исходя из моей, пока ещё, нубологики 8-} по примеру урока про "Трейлинг Стоп" могу предположить, что в открытии ордера в пункте СтопЛосс указать вместо нуля - свой желаемый СЛ:

OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 0, 0, "", Magik, 0, Blue);


OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 32, 0, "", Magik, 0, Blue);


(32 - сугубо абстрактное значение, которое я использовал исключительно для наглядности.)



Так ли это? Или нужно вносить изменения в саму функцию TralingStop() ?
Ссылка на сообщение
Поделиться на другие сайты

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


Такой вопрос возник.

Как правильно совмещать классический СтопЛосс и ТрейлингСтоп?

Пример: Открылась сделка, через время - сделка в плюсе, начинает работать трал... Всё ок.

А если сделка после открытия сразу уходит в минус... И продолжает уходить до МаржинКолла...

И приходится надеяться, что через несколько лет цена всё таки вернётся в место открытия...

Чтоб такого избежать нужно использовать обычный СтопЛосс...




Исходя из моей, пока ещё, нубологики 8-} по примеру урока про "Трейлинг Стоп" могу предположить, что в открытии ордера в пункте СтопЛосс указать вместо нуля - свой желаемый СЛ:

OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 0, 0, "", Magik, 0, Blue);


OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 32, 0, "", Magik, 0, Blue);


(32 - сугубо абстрактное значение, которое я использовал исключительно для наглядности.)



Так ли это? Или нужно вносить изменения в саму функцию TralingStop() ?


Обычный СторЛос через NormalizeDouble трал его будет подтягивать!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Обычный СтопЛос через NormalizeDouble трал его будет подтягивать!


Действительно, так и есть. ;)




В первую очередь я так и сделал, но была ошибка в коде из которого все стоплосы не работали...
Поэтому думал что данный метод неправильный, и решил спросить на форуме :)

(Сейчас всё норм. 8-> )

















И сразу встал перед новой проблемой.

Как использовать фнкцию OrderClose() ?


К примеру
У меня условие, если одна машка выше другой - открывается покупка.


if (SMA2>SMA1) OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, SL_Buy, 0, "", Magic, 0, Blue);

Закрытие сделки хочу в момент пересечения машек.

Я так понимаю условие будет if (SMA2 == SMA1) OrderClose()

Но как правильно записать эту функцию не могу понять.

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

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



Обычный СтопЛос через NormalizeDouble трал его будет подтягивать!


Действительно, так и есть. ;)




В первую очередь я так и сделал, но была ошибка в коде из которого все стоплосы не работали...
Поэтому думал что данный метод неправильный, и решил спросить на форуме :)

(Сейчас всё норм. 8-> )

















И сразу встал перед новой проблемой.

Как использовать фнкцию OrderClose() ?


К примеру
У меня условие, если одна машка выше другой - открывается покупка.


if (SMA2>SMA1) OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, SL_Buy, 0, "", Magic, 0, Blue);

Закрытие сделки хочу в момент пересечения машек.

Я так понимаю условие будет if (SMA2 == SMA1) OrderClose()

Но как правильно записать эту функцию не могу понять.

Или может сначала ордер нужно выбрать (OrderSelect()), перед тем как закрывать его?


Да! Сначала напиши цикл, выбери ордер, там проверишь на символ и на магик! Потом проверь на тип ордера то есть бай или сэл! Потом пиши условия при котором будет orderclose! А вообще рекомендую посмотреть уроки Xbms он там всё великолепно про это рассказывает! Зайди на сайт а потом Уроки по MQL!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

xbms,подскажите пожалуйста как вынести содержимое функции comment() в правый верхний угол и шрифт малость увеличить?

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

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


xbms,подскажите пожалуйста как вынести содержимое функции comment() в правый верхний угол?



Смотрим стандартную справку по F1:

Comment
Выводит комментарий, определенный пользователем, в левый верхний угол графика.

Отсюда вывод: Никак!

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

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

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

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

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

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

Войти

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

Войти

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


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

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