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

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

Автор#726


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



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


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

Цитата


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


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

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


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



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



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


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

Цитата


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


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

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


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


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


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



Старик? А почему мой пост исчез который я тебе написал?
#730

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

#731


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



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


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



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

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

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

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


Цитата


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



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

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

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

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


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

if(OrderProfit() == Profit){


}

Изменено 8 февраля, 2014 пользователем elruso

#734

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

#735


if(OrderProfit() == Profit){


}


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


Господа не подскажете как написать функцию,если сделка ушла в минус на 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!!!

Изменено 8 февраля, 2014 пользователем elruso

#737

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

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);
}
}
}
}

Спасибо! :)

#738

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

#739


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



Спасибо большое, помогло!!! =d>
#740

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

'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 );
}

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

#741

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


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

Изменено 10 февраля, 2014 пользователем Ромашка

#742

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

Спойлер

[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()


#743

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

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

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

if (Volume[0]>1) return;



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

#744

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

Изменено 11 февраля, 2014 пользователем Sharovik

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

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

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

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

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

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




Исходя из моей, пока ещё, нубологики 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() ?
#746


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

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

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

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

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

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




Исходя из моей, пока ещё, нубологики 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 трал его будет подтягивать!
#747


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


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




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

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

















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

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


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


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

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

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

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

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

Изменено 12 февраля, 2014 пользователем Teo

#748



Обычный СтопЛос через 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!
#749

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

Изменено 14 февраля, 2014 пользователем AndreyP

Автор#750


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



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

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

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

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

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