Crik1978 Опубликовано 8 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 октября, 2014 так если Orderswap будет с минусом, он уменьшит общий профит? Чтобы компенсировать отрицательный СВОП можно ли его сделать MathAbs(OrderSwap())???Да, отрицательный своп уменьшает профит.Компенсируют обычно так: хотим заработать 15$ и закрыться - считаем профит с комис и свопом и когда получили 15 - закрываем (чистая прибыль в этот момент была больше, но она компенсировала своп и комиссию) Если Вы придумали другую логику - вперёд - ограничений нет... и, конечно, MathAbs(OrderSwap()) будет работать - куда ему деваться. Спасибо за коммент.Добавлено: 09-10-2014 09:12:49Всем привет!Нужна помощь в определении максимальной цены ордеров (ордера на покупку ) и минимальной цены (для ордеров на продажу).прошу помощь, т.к. не хватает ... ~x( :(( Изменено 9 октября, 2014 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 Нужна помощь в определении максимальной цены ордеров (ордера на покупку ) и минимальной цены (для ордеров на продажу).Там где у Вас есть цикл по всем ордерам делаете:double MaxPrc = 0, MinPrc = 9999999; - глобальные переменныеMaxPrc = 0; MinPrc = 9999999; // задаём начальные значенияfor(int i = 0 ....){ .... if (OrderOpenPrice() > MaxPrc ) MaxPrc = OrderOpenPrice(); if (OrderOpenPrice() } Изменено 9 октября, 2014 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 Нужна помощь в определении максимальной цены ордеров (ордера на покупку ) и минимальной цены (для ордеров на продажу).Там где у Вас есть цикл по всем ордерам делаете:double MaxPrc = 0, MinPrc = 9999999; - глобальные переменныеMaxPrc = 0; MinPrc = 9999999; // задаём начальные значенияfor(int i = 0 ....){ .... if (OrderOpenPrice() > MaxPrc ) MaxPrc = OrderOpenPrice(); if (OrderOpenPrice() } Спасибо. Добавлено: 09-10-2014 13:30:34 :( Вопрос следующего плана:Открыть ордер на покупку с объемом 0.1; цена ушла вниз на определенное количество пунктов; открываем ордер на продажу с расчетом, что ордер на продажу за минимальное количество пунктов (допустим 3 п) закроет оба ордера в плюс. Вопрос: каким "макаром" рассчитать объемом ордера на продажу, для того чтобы вышеописанное условие выполнилось??? :-? Изменено 9 октября, 2014 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 Crik1978Полный! отрицательный профит первого ордера это будет предполагаемый профит второго, но получить он его должен за 3 пп.Почитай это там есть ответ и его код...Обрати внимание на это: MarketInfo(_Symbol, MODE_TICKVALUE); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 Crik1978Полный! отрицательный профит первого ордера это будет предполагаемый профит второго, но получить он его должен за 3 пп.Почитай это там есть ответ и его код...Обрати внимание на это: MarketInfo(_Symbol, MODE_TICKVALUE); Да, минимальное значение пунктов - соответствует MarketInfo(_Symbol, MODE_TICKVALUE);Добавлено: 09-10-2014 15:34:44 Crik1978Полный! отрицательный профит первого ордера это будет предполагаемый профит второго, но получить он его должен за 3 пп.Почитай это там есть ответ и его код...Обрати внимание на это: MarketInfo(_Symbol, MODE_TICKVALUE); Да, минимальное значение пунктов - соответствует MarketInfo(_Symbol, MODE_TICKVALUE); По данной ссылке, представлены информаторы, которые показывают на графике уровень ТП и СЛ с суммой прибыли или убытка.Я имел ввиду совсем другое..... Изменено 9 октября, 2014 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 По данной ссылке, представлены информаторы, которые показывают на графике уровень ТП и СЛ с суммой прибыли или убытка.Я имел ввиду совсем другое.....Информаторы показывают: лот Х пункты = прибыльВаша задача: лот = прибыль / пункты.Справитесь? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 9 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 октября, 2014 По данной ссылке, представлены информаторы, которые показывают на графике уровень ТП и СЛ с суммой прибыли или убытка.Я имел ввиду совсем другое.....Информаторы показывают: лот Х пункты = прибыльВаша задача: лот = прибыль / пункты.Справитесь? Теоретически я представляю как это сделать, но как это в практику преобразить - пока затрудняюсь даже.....Если не затруднит, то помогите. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Шурик Опубликовано 10 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2014 Пожалуйста, помогите. Как написать функцию выбора ближайшего стоп ордера? Обязательно нужно отдельно для байстопа и селлстопа. В уроках MQL я нашел только как выбрать ближайший ордер из всех, а мне надо конкретно байстоп и селлстоп. Заранее благодарен!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 10 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2014 Уважаемые програмисты помогите в написаний простого скрипта или индикатора! в мета трейдер 5 есть на панели инструметов стрелка: рисование линий со стрелкой, хотелось бы в родной мета трейдер 4 такой иметь, ничего не трогая особо в функционале. спасибо нашел. он уже есть в мт4 в виде трендовой линий, просто нужно убрать луч))))))))))))))) 5445.jpg Изменено 11 октября, 2014 пользователем vitek01 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 10 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2014 Всем привет!Если открыты несколько ордеров на покупку, как в советнике найти ордер с максимальной ценой? :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 10 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2014 Crik1978, нужно просто провести сортировку по ценам открытия. Например вот так: Спойлер double UpPriceSell() // цена верхнего ордера на продажу{ double upprice; double nextprice; price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_SELL) { nextprice = OrderOpenPrice(); if(nextprice > price) { upprice = OrderOpenPrice(); price = nextprice; } } } } } return(upprice);} Тут правда ордера на продажу, но это не важно, просто подставляешь нужные данные и всё. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 10 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 октября, 2014 Crik1978, нужно просто провести сортировку по ценам открытия. Например вот так: Спойлер double UpPriceSell() // цена верхнего ордера на продажу{ double upprice; double nextprice; price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_SELL) { nextprice = OrderOpenPrice(); if(nextprice > price) { upprice = OrderOpenPrice(); price = nextprice; } } } } } return(upprice);} Тут правда ордера на продажу, но это не важно, просто подставляешь нужные данные и всё. спасибо за ответ. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Романыч Опубликовано 11 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 октября, 2014 Здравствуйте,Сергей.Начал изучать ваш курс по программированию.Понравилось,доступно.Я ранее пытался программировать по учебнику,но многие вещи только из вашего курса и понял.Спасибо.У меня такой вопрос,я не нашел в курсе функции GetLastError();Не могли бы вы записать урок именно по этой теме?С разборами типичных ошибок,действиями на их устранение и т.д.Еще раз спасибо за курс.Благодарен вам за труд. Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 13 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 октября, 2014 Добрый день!Такая задача: в условии на покупку/продажу проверять наличие круглого уровня (1.29 1.30 1.31 итд)Набросал такой цикл: Спойлер extern double begin_level = 1; // уровень, с которого начинаем отсчетextern double end_level = 1.6; // уровень, которым заканчиваемextern double step_level = 0.01; // шаг (каждые 100 пунктов) for(double i =0; i { string objekt = i; level = begin_level + i; ObjectCreate(objekt,OBJ_HLINE,0,0,level); ObjectSet(objekt,OBJPROP_COLOR,Green); ObjectSet(objekt,OBJPROP_WIDTH,1); } Print("level = " + level); Линии отображаются на графике как надо, но в журнале level = 2.590000000000001 - почему - понять не могу, перебор идет же вроде до 1.6 толькоИ вопросы отсюда: 1) Можно ли создать такую переменную, которую можно бы было сравнить с ценой в условии открытия ордера?2) Или нужно записать значения уровней в массив? Но я правда с массивами не работал почти, не знаю, как вытащить из массива потом уровень, который будет рядом с ценой и проверить в условии открытия ордера3) Или в условии на открытие ордера написать цикл, в котором перебрать все уровни, и выбрать нужный? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 октября, 2014 Линии отображаются на графике как надо, но в журнале level = 2.590000000000001 - почему - понять не могу, перебор идет же вроде до 1.6 только У Вас цикл от 0 до 1,6, в теле цикла Вы прибавляете 1 (бегин лэвел) итого получается 2,5 - попробуйте цикл сделать от 1 до 1,6. Цитата 1) Можно ли создать такую переменную, которую можно бы было сравнить с ценой в условии открытия ордера? double LevelH = NormalizeDouble(Bid + 0.01,2); Цитата 2) Или нужно записать значения уровней в массив? Но я правда с массивами не работал почти, не знаю, как вытащить из массива потом уровень, который будет рядом с ценой и проверить в условии открытия ордера3) Или в условии на открытие ордера написать цикл, в котором перебрать все уровни, и выбрать нужный? С массивами придётся в цикле... Если уровни круглые не парьтесь: сделайте как я выше написал. Будет у Вас два ближайших уровня - если цена пробила - пересчитываем... Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 13 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 октября, 2014 Цитата double LevelH = NormalizeDouble(Bid + 0.01,2); А если каждые 150 пунктов нужны, например? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2014 А если каждые 150 пунктов нужны, например?Всё будет охренеть как сложнее:double LevelH = NormalizeDouble(Bid + 0.01,2)+0.005; Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 14 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2014 Ну это да)Но я логику не совсем понимаю... Bid и Ask постоянно же меняютсято есть вот у нас сейчас цена 1.03789double LevelH = NormalizeDouble(Bid + 0.01,2)+0.005;LevelH равно 1.045но ведь когда цена достигнет значения 1.04001LevelH приобретет значение 1.055И цена таким образом никогда до уровня не дойдет Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2014 но ведь когда цена достигнет значения 1.04001LevelH приобретет значение 1.055И цена таким образом никогда до уровня не дойдетЕсли на каждом тике считать, то не дойдёт.oleguitar, ну Вы чего? Уровни считаются например в начале суток и потом только в случае пробития уровня. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kist11122111 Опубликовано 14 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2014 Приветствую! Я не силен в программировании, поэтому вопрос в следующем- как в советнике ProTrader(прикреплен внизу) сделать открытие buy stop от цены ask, т.е. с учетом спреда. Функция установки стоповых ордеров на расстоянии от цены в этом советнике уже имеется, нужно лишь подправить для buy. Для примера - как это следано в скрипте, представленном ниже. ProTrader.rarOpenStopOrderNet_v3.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2014 как в советнике ProTrader(прикреплен внизу) сделать открытие buy stop от цены ask, т.е. с учетом спреда. Функция установки стоповых ордеров на расстоянии от цены в этом советнике уже имеется, нужно лишь подправить для buy.А как Вы узнали алгоритм расчёта уровня БайСтоп если исходного кода нет? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Шурик Опубликовано 15 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2014 Господа знающие, подскажите, как написать функцию закрытия всех рыночных ордеров при достижении определенного профита?? Я сломал мозг, пересмотрел уроки, но, толи я дурак, толи лыжи не идут. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2014 Господа знающие, подскажите, как написать функцию закрытия всех рыночных ордеров при достижении определенного профита?? Я сломал мозг, пересмотрел уроки, но, толи я дурак, толи лыжи не идут.А как считать "определённый профит" знаете? Если да, то копируете этот цикл (по всем нужным ордерам) и вместо той строки, что профит считает пишите: OrderClose(OrderTicket(), OrderLots(), price, slippage);только останется цену поставить... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Шурик Опубликовано 15 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2014 Я имею в виду заданный профит во внешних параметрах, например 10 долларов. Я посчитал средний профит разнонаправленных ордеров, а потом сравниваю это значение с заданной величиной и при >= закрытие ордеров, НО, видимо где-то ошибка. Подскажите где???Средний профит--------------------------------------------double AverageProfit(){ double avg = 0; int count = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY && OrderType() == OP_SELL) { avg += OrderProfit(); count++; } } } } return(count); avg = NormalizeDouble(avg / count, 2);}Закрытие ордеров------------------------ if (AverageProfit() >= Profit) { switch(OrderType()) { case OP_BUY: if (OrderClose(ticketbuystop, OrderLots(), OrderClosePrice(), Slipage, Yellow)) break; case OP_SELL: if (OrderClose(ticketsellstop, OrderLots(), OrderClosePrice(), Slipage, Yellow)) break; } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2014 Ошибка здесь:return(count); avg = NormalizeDouble(avg / count, 2);нужно:return(NormalizeDouble(avg / count, 2));и странности в функции закрытия ордеров:- где Вы берете тикет (ticketbuystop)?- где Вы выбираете ордер, чтобы использовать OrderLots()?- OrderClosePrice() использовать нельзя - там пусто! ордер ещё не закрыт. Справку читаете?Вы мой пост выше читали? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти