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

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

#376


Что Вы хотите сказать 99% людей платят услугу VPS сервера? или держат свои компьютера включёнными неделями? хаха! не понял я твой ответ дружище! ну до ладно!!!


Именно так и есть, 99% держат VPS и платят 5$ в месяц, чтобы советник всегда мог быть в рынке и приносил прибыль. Поверьте 5$ не такая уж огромная сумма, чтобы жить комфортнее.
#377



Что Вы хотите сказать 99% людей платят услугу VPS сервера? или держат свои компьютера включёнными неделями? хаха! не понял я твой ответ дружище! ну до ладно!!!


Именно так и есть, 99% держат VPS и платят 5$ в месяц, чтобы советник всегда мог быть в рынке и приносил прибыль. Поверьте 5$ не такая уж огромная сумма, чтобы жить комфортнее.


Оооо молодцы!!! Не знал! Ну да значит я исключение!!! То есть реальной проблемы нет да? То что я его вешаю и снимаю его функциональность не нарушит да? то есть он с ума не сойдёт, будет чётко продолжать работать при сбросе интернета допустим и его последующей перезагрузки нет проблем?
#378


Оооо молодцы!!! Не знал! Ну да значит я исключение!!! То есть реальной проблемы нет да? То что я его вешаю и снимаю его функциональность не нарушит да? то есть он с ума не сойдёт, будет чётко продолжать работать при сбросе интернета допустим и его последующей перезагрузки нет проблем?


Видимо это зависит от кода, если советник открывает ордера и тралит их, а интернета нет, то и трала нет, а если он держит виртуальный сл\тп то и ордер не закроется без интернета.

много ведь нюансов. а вообще простой советник, открыл\тп\сл\закрыл работают без проблем, опять же мартин неплохо соснёт если интернет пропадёт, или выключишь его(а он при включении не сможет подхватить свою же сетку ордеров). такие дела.
#379



Оооо молодцы!!! Не знал! Ну да значит я исключение!!! То есть реальной проблемы нет да? То что я его вешаю и снимаю его функциональность не нарушит да? то есть он с ума не сойдёт, будет чётко продолжать работать при сбросе интернета допустим и его последующей перезагрузки нет проблем?


Видимо это зависит от кода, если советник открывает ордера и тралит их, а интернета нет, то и трала нет, а если он держит виртуальный сл\тп то и ордер не закроется без интернета.

много ведь нюансов. а вообще простой советник, открыл\тп\сл\закрыл работают без проблем, опять же мартин неплохо соснёт если интернет пропадёт, или выключишь его(а он при включении не сможет подхватить свою же сетку ордеров). такие дела.


ok ясно спасибо!
#380

Помогите!!! Будьте добры, гляньте кто-то свежим взглядом, никак не найду одну ошибку.

Naglaya_001_1.mq418 скач.

#381


Помогите!!! Будьте добры, гляньте кто-то свежим взглядом, никак не найду одну ошибку.



А какой тип ошибки то? Что копилатор говорит чтоб знать боле менее в чём дело!
Ну а на первый взгляд для меня эта строчка странная

BlueLine ==0


Как это читается? Я думал это только для проверки условий if(....==....


Добавлено: 10-10-2013 21:04:08



Помогите!!! Будьте добры, гляньте кто-то свежим взглядом, никак не найду одну ошибку.



А какой тип ошибки то? Что компилятор говорит чтоб знать боле менее в чём дело!
Ну а на первый взгляд для меня эта строчка странная

BlueLine ==0


Как это читается? Я думал это только для проверки условий if(....==....
А иначе компилятор скажет '==' assignment expected

Изменено 11 октября, 2013 пользователем elruso

#382

'\end_of_program' - unbalanced left parenthesis D:\Forex4you\experts\Naglaya_001 (1).mq4 (131, 1). Насколько я поняла, вариантов масса. BlueLine ==0 - попытка сделать синюю линию нулевой осью, что ли, пересечение с которой дает сигнал ко входу или к выходу из позиции.

#383


'\end_of_program' - unbalanced left parenthesis D:\Forex4you\experts\Naglaya_001 (1).mq4 (131, 1). Насколько я поняла, вариантов масса. BlueLine ==0 - попытка сделать синюю линию нулевой осью, что ли, пересечение с которой дает сигнал ко входу или к выходу из позиции.



Первый раз вижу такую запись!!! I

А вообще очень странно написаны функции countbuy() y countsell() я там вижу точку с запятой сразу после цикла for(......); это для меня очень странно!!! И после if(); тоже первый раз вижу! Они там лишние!

Я думаю это всё не правильно посмотрите урок 2 на счёт функций CountBuy y CountSell они неправильно написаны у Вас! А на счёт BlueLine==0 не понятно вообще! Может BlueLine =0; тогда ясно!

Изменено 11 октября, 2013 пользователем elruso

Автор#384


Помогите!!! Будьте добры, гляньте кто-то свежим взглядом, никак не найду одну ошибку.





Во вложении исправлены синтаксические ошибки, логику Вам придётся проверить самостоятельно :)

Naglaya_001_1.mq423 скач.

Изменено 11 октября, 2013 пользователем xbms

#385

Добрый день или вечер.

Давно подумывал о советники, который будет заниматься моими ордерами, и вот результат.
Написал модуль, который выполняет некоторые функции(пока только для бая)
1. подхватывает созданный ордер для выбранного инструмента.
2. ставит ему стоп.
3. при достижении 1 уровня БУ, переводит в БУ и закрывает часть прибыли(в % от начального лота(0.5 = 50%))
4. при достижении 2 уровня БУ, подтягивает стоп(можно выбрать на какой уровень) и закрывает выбранный % от начального лота.
5. 3 уровень - финальный тейкпрофит, закрывает остаток позы.

хотелось бы услышать критику и комментарии от более образованных людей)(что добавить, где убрать, и всё в таком духе)

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

п.п.с для села исправить всего лишь пару знаков, для меня не составит труда:)

breakeven.mq425 скач.

#386



Помогите!!! Будьте добры, гляньте кто-то свежим взглядом, никак не найду одну ошибку.





Во вложении исправлены синтаксические ошибки, логику Вам придётся проверить самостоятельно :)


Спасибо Вам большое за помощь.
А по поводу
distance = (RedLine - BlueLine) > 0;
if (distance >= Diff)
я пыталась задать синюю линию за нулевую и, если красная поднимается над ней, открывается ордер buy, а если над ней поднимается зеленая, то sell. Видимо, мой способ неверен. Может быть как-то иначе задавать нужно?
#387

Ребята привет,я так понимаю господин XBMS выпустил урок 1,5. Просьба скиньте ссылку опоздавшему на поезд... :d :d :d


Добавлено: 11-10-2013 13:57:30

Спасибо,не беспакойтесь уже нашел на сайте,тупанул не много :)) :d :d :dв попыхах

Изменено 11 октября, 2013 пользователем denis77515

#388


Ребята привет,я так понимаю господин XBMS выпустил урок 1,5. Просьба скиньте ссылку опоздавшему на поезд... :d :d :d


http://tradelikeapro.ru/category/uroki-po-mql/



А по поводу
distance = (RedLine - BlueLine) > 0;
if (distance >= Diff)
я пыталась задать синюю линию за нулевую и, если красная поднимается над ней, открывается ордер buy, а если над ней поднимается зеленая, то sell. Видимо, мой способ неверен. Может быть как-то иначе задавать нужно?



Вы присваиваете переменной distance значение, нельзя при этом ещё и сравнивать.
Математика: x = (2+2)*3
Что получится, если написать x = (2+2)*3 > 0... ?

Условия должны идти отдельно: если красная выше (больше) синей, значит делаем то-то.
if (RedLine - BlueLine > 0) OrderSend... например.

#389




А по поводу
distance = (RedLine - BlueLine) > 0;
if (distance >= Diff)
я пыталась задать синюю линию за нулевую и, если красная поднимается над ней, открывается ордер buy, а если над ней поднимается зеленая, то sell. Видимо, мой способ неверен. Может быть как-то иначе задавать нужно?



Вы присваиваете переменной distance значение, нельзя при этом ещё и сравнивать.
Математика: x = (2+2)*3
Что получится, если написать x = (2+2)*3 > 0... ?

Условия должны идти отдельно: если красная выше (больше) синей, значит делаем то-то.
if (RedLine - BlueLine > 0) OrderSend... например.



Спасибо. Попробую исправить.

Добавлено: 11-10-2013 19:57:05





А по поводу
distance = (RedLine - BlueLine) > 0;
if (distance >= Diff)
я пыталась задать синюю линию за нулевую и, если красная поднимается над ней, открывается ордер buy, а если над ней поднимается зеленая, то sell. Видимо, мой способ неверен. Может быть как-то иначе задавать нужно?



Вы присваиваете переменной distance значение, нельзя при этом ещё и сравнивать.
Математика: x = (2+2)*3
Что получится, если написать x = (2+2)*3 > 0... ?

Условия должны идти отдельно: если красная выше (больше) синей, значит делаем то-то.
if (RedLine - BlueLine > 0) OrderSend... например.



Спасибо. Попробую исправить.

Вроде исправила, но не работает. Посмотрите?

Naglaya_001_1.mq413 скач.
KDJ.mq412 скач.

Изменено 11 октября, 2013 пользователем Naglaya

#390


Добрый день или вечер....

уже нашел пару ошибок, со стоп лосом:)
видимо никому это не интересно рако-код смотреть :">

#391


Добрый день или вечер....

уже нашел пару ошибок, со стоп лосом:)
видимо никому это не интересно рако-код смотреть :">



Привет!
Смотрел. Не понял зачем balance.
Здесь:
if(NormalizeDouble(Bid-OrderOpenPrice(), Digits)*balance*Point >= first_Take_Profit*Point)

Если обе части сравнения умножаются на Point, значит его можно вообще убрать...

Так же, после OrderSelect, лучше сначала проверить символ и тип, а потом уже считать и тикет присваивать (если ордер не наш, нечего процессор лишней работой нагружать :d)
#392


Привет!
Смотрел. Не понял зачем balance.



Чтобы найти кол-во пунктов между ценой и стопом(именно в пунктах), нужно домножить на эту переменную)
#393


Чтобы найти кол-во пунктов между ценой и стопом(именно в пунктах), нужно домножить на эту переменную)


(Bid - SL)/Point - получится цена в пунктах.
(1,3030 - 1,3000)/0,0001 = 30
(1,30300 - 1,30000)/0,00001 = 300
#394



Чтобы найти кол-во пунктов между ценой и стопом(именно в пунктах), нужно домножить на эту переменную)


(Bid - SL)/Point - получится цена в пунктах.
(1,3030 - 1,3000)/0,0001 = 30
(1,30300 - 1,30000)/0,00001 = 300

воу воу...а у меня получалось обратное число, и я на него умножал а не делил)))
спасибо за инфу.
#395




Чтобы найти кол-во пунктов между ценой и стопом(именно в пунктах), нужно домножить на эту переменную)


(Bid - SL)/Point - получится цена в пунктах.
(1,3030 - 1,3000)/0,0001 = 30
(1,30300 - 1,30000)/0,00001 = 300

воу воу...а у меня получалось обратное число, и я на него умножал а не делил)))
спасибо за инфу.


я вот так пишу всем привет!!!


int //spr=MarketInfo(Symbol(), MODE_SPREAD);
int Loss = MathAbs(Ask-SL)/Point;
//int distance = Loss+spr;
Comment(Loss);


MathAbs поможет обсолютное вывести для отрицательного!
double MathAbs( double value)
Returns the absolute value (modulus) of the specified numeric value.
Parameters:
value - Numeric value.
Sample:
double dx=-3.141593, dy;
// calc MathAbs
dy=MathAbs(dx);
Print("The absolute value of ",dx," is ",dy);
// Output: The absolute value of -3.141593 is 3.141593

Screen_Shot_2013-10-11_at_6.48.42_PM.png

Изменено 12 октября, 2013 пользователем elruso

#396


Спойлер




Чтобы найти кол-во пунктов между ценой и стопом(именно в пунктах), нужно домножить на эту переменную)


(Bid - SL)/Point - получится цена в пунктах.
(1,3030 - 1,3000)/0,0001 = 30
(1,30300 - 1,30000)/0,00001 = 300

воу воу...а у меня получалось обратное число, и я на него умножал а не делил)))
спасибо за инфу.


я вот так пишу всем привет!!!


int //spr=MarketInfo(Symbol(), MODE_SPREAD);
int Loss = MathAbs(Ask-SL)/Point;
//int distance = Loss+spr;
Comment(Loss);


MathAbs поможет обсолютное вывести для отрицательного!
double MathAbs( double value)
Returns the absolute value (modulus) of the specified numeric value.
Parameters:
value - Numeric value.
Sample:
double dx=-3.141593, dy;
// calc MathAbs
dy=MathAbs(dx);
Print("The absolute value of ",dx," is ",dy);
// Output: The absolute value of -3.141593 is 3.141593



Не хочу пока забивать голову ещё и расчетом спреда, если честно)))

Собрал итоговый вариант, выглядит как функция(в этот момент задумался, есть ли большая разница как передавать параметры - как у меня написано, или делать функции с параметрами, которые бы передавались уже непосредственно из самого советника?)
Наверное лучше всётаки второй вариант...эх.а хотел уже похвастаться...Добавлю, что есть сейчас. и займусь второй идеей)))

Критической разницы нет, хотя может это я её не вижу...
Всё ровно часть переменных надо прогонять через инит.

п.с. очень жажду комментариев.

new_BE.mq417 скач.
modify_BE.mq418 скач.

Изменено 12 октября, 2013 пользователем mzk_3om6u

#397

Всем привет!

mzk_3om6u, интересно написано :).
Снова о порядке условий... сначала OrderSymbol, потом OrderMagicNumber, потом OrderType, затем остальное.

В самом начале можно проверить на наличие ордеров, т.е., если ордеров нет, ничего и не делаем:

Спойлер

int start()
{
if(OrdersTotal() > 0) Result_BE_and_SL_and_TP();
return(0);
}

Изменено 13 октября, 2013 пользователем Vorchunozavr

#398


Всем привет!

mzk_3om6u, интересно написано :).

Спойлер

Снова о порядке условий... сначала OrderSymbol, потом OrderMagicNumber, потом OrderType, затем остальное.

В самом начале можно проверить на наличие ордеров, т.е., если ордеров нет, ничего и не делаем:

Спойлер

int start()
{
if(OrdersTotal() > 0) Result_BE_and_SL_and_TP();
return(0);
}



спасибо за коммент, я конечно понимаю в таких маленьких программках, не критична последовательность проверок(на 0.0000000000001) производительность замедлится, но правила хорошего тона, все дела)тоже самое в функции старт)))всё ровно понимаю, что надо рационализировать, если можно меньше ресурсов тратить, то зачем усложнять)))
исправлю эти недочеты:)
была опечатка с лотами, что вызывало ошибку 131, нашел и исправил:)
прикрутил эту штуку, к "советнику на ТМА" из обучения - работает)))

Добавлено: 13-10-2013 23:19:56

Доброе утро.

У меня возник вопрос, например:
Можно прикрепить в подвал RSI и на него по вешать уже MA, как в коде mql4 такой момент работает?
iMa не имеет нужной опции, значит единственный вариант в ручную пересчитывать нужную МА для RSI?
iMAOnArray() вот такая штука походу может доставать данные)))методом на коленке, получил данные, теперь осталось собрать в кучу...или есть альтернативы?)

Изменено 14 октября, 2013 пользователем mzk_3om6u

#399


Доброе утро.

У меня возник вопрос, например:
Можно прикрепить в подвал RSI и на него по вешать уже MA, как в коде mql4 такой момент работает?
iMa не имеет нужной опции, значит единственный вариант в ручную пересчитывать нужную МА для RSI?
iMAOnArray() вот такая штука походу может доставать данные)))методом на коленке, получил данные, теперь осталось собрать в кучу...или есть альтернативы?)



Тоже интересно!
Есть прикольный индикатор - RSI с наложенной машкой, + выводит на экран текущие значения обоих линий.
Можно вытаскивать значения из него.
(Попробую разобраться в коде :-b )



Добавлено: 14-10-2013 12:57:00

Ага, тоже дошло: iMAOnArray позволяет считать МА относительно буфера RSI. :d <:-p>RSI+MA+LABEL.mq420 скач.

Изменено 14 октября, 2013 пользователем Vorchunozavr

#400

у меня вопрос:

По каким причинам может быть проигнорирована функция OrderClose()?

{               
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + second_level_BE*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
Sleep(2000);

if(first_close_part_of_lot>0)
{
OrderClose(OrderTicket(), NormalizeDouble(OrderLots()/(1-first_close_part_of_lot/100),2)*second_close_part_of_lot/100, Bid, slippage, Black);
Sleep(2000);
}
else
{
OrderClose(OrderTicket(), NormalizeDouble(OrderLots()*second_close_part_of_lot/100,2), Bid, slippage, Black);
Sleep(2000);
}
}


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

И почему такие проблемы вообще возникают? Вроде всё по пунктам идёт...

Изменено 15 октября, 2013 пользователем mzk_3om6u

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

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