Гладиoлус Опубликовано 31 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 декабря, 2021 Спасибо большое, я сейчас отрегулировал и настроил под себя, все супер только вот есть одно НО, надо сделать так что бы на графике можно было регулировать. Что бы индикатор или советник построил уровень а дальше я уже сам мог менять на графике. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 31 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 декабря, 2021 12 минут назад, Гладиoлус сказал: Спасибо большое, я сейчас отрегулировал и настроил под себя, все супер только вот есть одно НО, надо сделать так что бы на графике можно было регулировать. Что бы индикатор или советник построил уровень а дальше я уже сам мог менять на графике. Спасибо на форуме делается вот так: Что касается всего остального - ну вы в ветке обучения языку, да? То есть вы хотите научиться делать самостоятельно. Я вам показал, куда можно копнуть - дальше дорогу осилит идущий 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 31 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 декабря, 2021 42 минуты назад, Rigal сказал: Спасибо на форуме делается вот так: Что касается всего остального - ну вы в ветке обучения языку, да? То есть вы хотите научиться делать самостоятельно. Я вам показал, куда можно копнуть - дальше дорогу осилит идущий Очень удобная в редакторе контекстная подсказка: Но просто включить не спасет, конечно: советник будет на каждом тике перетаскивать туда, где ему эта линия нужна - вам, конечно, нужна какая-то ваша логика, когда эти линии рисовать и что с ними делать. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 3 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2022 В 31.12.2021 в 17:38, Rigal сказал: Очень удобная в редакторе контекстная подсказка: Но просто включить не спасет, конечно: советник будет на каждом тике перетаскивать туда, где ему эта линия нужна - вам, конечно, нужна какая-то ваша логика, когда эти линии рисовать и что с ними делать. Я вот с одним не могу разобраться, я устанавливаю значения для трендовой линии ObjectCreate(...), линия не выводится на экран. Помогите пожалуйста, как вывести на экран объект? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 4 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2022 15 часов назад, Гладиoлус сказал: Я вот с одним не могу разобраться, я устанавливаю значения для трендовой линии ObjectCreate(...), линия не выводится на экран. Помогите пожалуйста, как вывести на экран объект? Мы, вроде, разобрались с этим вопросом? Вот тут: Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 4 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2022 Здраствуйте! Что нужно добавить траллу, чтобы пошагово не по времени переводил стоп? Чтобы не зависел от тайм фрейма void Trailing() { for(int i=OrdersTotal() -1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber()==MagicID || MagicID==-1) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicID) { if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid-(TrailingStop + TrailingStep) * Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop * Point, Digits),0,0)) Print("Ошибка модификации ордера на покупку"); } } } if(OrderType() == OP_SELL) { if(OrderOpenPrice() - Ask > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() > Ask + (TrailingStep + TrailingStop) * Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStop * Point, Digits),0,0)) Print("Ошибка модификации ордера на продажу"); } } } } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 4 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2022 14 минут назад, Lexa000 сказал: Что нужно добавить траллу, чтобы пошагово не по времени переводил стоп? Чтобы не зависел от тайм фрейма приведенный фрагмент делает как раз это: тащит трал за ценой на расстоянии TrailingStop пунктов с шагом TrailingStep Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 7 часов назад, Rigal сказал: приведенный фрагмент делает как раз это: тащит трал за ценой на расстоянии TrailingStop пунктов с шагом TrailingStep Но строго по м5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 Модификация трала Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 1 час назад, Lexa000 сказал: Но строго по м5 Значит вызывается функция трала не каждый тик, а раз в свечу Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 4 часа назад, Lexa000 сказал: Но строго по м5 ну вы привели фрагмент, который тащит трал. Если он делает это раз в пять минут - он у вас вызывается на пятиминутном баре просто. Поставьте вызов функции первой операцией в onTick и все Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 4 часа назад, Rigal сказал: ну вы привели фрагмент, который тащит трал. Если он делает это раз в пять минут - он у вас вызывается на пятиминутном баре просто. Поставьте вызов функции первой операцией в onTick и все Так и сделал, все тоже самое void OnTick() { for(int i=OrdersTotal() -1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderMagicNumber()==MagicID || MagicID==-1) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicID) { if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid-(TrailingStop + TrailingStep) * Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop * Point, Digits),0,0)) Print("Ошибка модификации ордера на покупку"); //if(Trailing && TrailingStop>0 && TrailingStep<TrailingStop) } } } if(OrderType() == OP_SELL) { if(OrderOpenPrice() - Ask > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() > Ask + (TrailingStep + TrailingStop) * Point || OrderStopLoss() == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStop * Point, Digits),0,0)) Print("Ошибка модификации ордера на продажу"); } } } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 Вроде что-то получилось, буду проверять как на графике будет работать Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 4 часа назад, Lexa000 сказал: if(OrderMagicNumber()==MagicID || MagicID==-1) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicID) вот тут нужно либо первый if убрать совсем, либо из вторго убрать проверку мэджика. Вместе они не имеют смысла Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 5 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2022 4 часа назад, Lexa000 сказал: if(Bid - OrderOpenPrice() > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid-(TrailingStop + TrailingStep) * Point || OrderStopLoss() == 0) Вот тут от внешнего if тоже можно избавиться, он перекрывается вторым Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 6 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2022 15 часов назад, Rigal сказал: Вот тут от внешнего if тоже можно избавиться, он перекрывается вторым Спасибо за совет, но пока я не умею проводить такие манипуляции, только на чужих примерах Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 6 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2022 7 часов назад, Lexa000 сказал: Спасибо за совет, но пока я не умею проводить такие манипуляции, только на чужих примерах ну "манипуляция" в данном случае ограничивается удалением строки с if() и открывающих-закрывающих фигурных скобок, тут многолетнего опыта не требуется. Но можно все оставить, как есть, эти условия просто дублируют друг друга Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 6 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2022 2 часа назад, Rigal сказал: ну "манипуляция" в данном случае ограничивается удалением строки с if() и открывающих-закрывающих фигурных скобок, тут многолетнего опыта не требуется. Но можно все оставить, как есть, эти условия просто дублируют друг друга Я про это знаю, после компиляции предупреждения выходят result of expression not used. В этом плане нужно что то дописывать Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 7 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2022 Поэкспериментировал по вашему совету, советник торговать стал хуже, сделки чаще закрывать в минус. Переделал все по своему Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 7 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2022 29 минут назад, Lexa000 сказал: Поэкспериментировал по вашему совету, советник торговать стал хуже, сделки чаще закрывать в минус. Переделал все по своему я не уверен, про мой ли совет вы говорите - но если про мой, то я позволю себе перефразировать, чтобы стал понятен контекст: "вы посоветовали мне, что Х+2-2 в моих расчетах можно заменить на просто Х, я вам сказал, что я не знаю, как делать такие сложные манипуляции, но, когда попробовал, у мне стало дуть из форточки прямо в левое ухо холодным воздухом, поэтому я переделал все по-своему и не нужны мне ваши дурацкие советы" В такой формулировке вы совершенно правы, мои советы вам ни к чему. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 7 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2022 14 минут назад, Rigal сказал: я не уверен, про мой ли совет вы говорите - но если про мой, то я позволю себе перефразировать, чтобы стал понятен контекст: "вы посоветовали мне, что Х+2-2 в моих расчетах можно заменить на просто Х, я вам сказал, что я не знаю, как делать такие сложные манипуляции, но, когда попробовал, у мне стало дуть из форточки прямо в левое ухо холодным воздухом, поэтому я переделал все по-своему и не нужны мне ваши дурацкие советы" В такой формулировке вы совершенно правы, мои советы вам ни к чему. Не правильно перефразировали. Экспериментировал ведь я. а не вы. Вы могли бы все сделать по своему, и результат возможно был другой. У меня опыта почти нет, и возможно где то что-то пропустил Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 30 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 января, 2022 Здраствуйте! Можете подсказать, если советник написан без множителя и дистанции, как можно добаваить ту и другую функцию? Заранее спасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 30 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 января, 2022 void CheckMartingale() { //функция анализа ордеров мартингейла ZeroMemory(env); //обнуляем данные структуры int _OrdersTotal = OrdersTotal(); for(int pos = _OrdersTotal - 1; pos >= 0; pos--) { if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { Print(__FUNCTION__ + ": не удалось выделить ордер! " + ErrorDescription(GetLastError())); continue; } if(OrderType() <= 2 && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { env.count_buy++; if(env.firstlotB == 0 || OrderLots() < env.firstlotB) env.firstlotB = OrderLots(); if(OrderOpenTime() > env.lasttimeB) { env.lasttimeB = OrderOpenTime(); env.last_distanceB = OrderOpenPrice()-Ask; env.lastlotB = OrderLots(); } } else if(OrderType() == OP_SELL) { env.count_sell++; if(env.firstlotS == 0 || OrderLots() < env.firstlotS) env.firstlotS = OrderLots(); if(OrderOpenTime() > env.lasttimeS) { env.lasttimeS = OrderOpenTime(); env.last_distanceS = Bid-OrderOpenPrice(); env.lastlotS = OrderLots(); } } } } if(env.last_distanceB != 0 || env.last_distanceS != 0) { //если есть открытые ордера if(env.lasttimeB > 0 && env.last_distanceB >= GridDistance*Point) { if(OpenTrade(OP_BUY,Multiplier)) { //Открытие следующего ордера сетки на покупку env.count_buy++; //прибавление ордера к счетчику Modify_grid(OP_BUY); //модификация целей ордера после открытия } } if(env.lasttimeS > 0 && env.last_distanceS >= GridDistance*Point) { if(OpenTrade(OP_SELL,Multiplier)) { //Открытие следующего ордера сетки на продажу env.count_sell++; //прибавление ордера к счетчику Modify_grid(OP_SELL); //модификация целей ордера после открытия } } } } //================================================================ double GetLots() { double lot; double minlot=MarketInfo(Symbol(),MODE_MINLOT); double maxlot=MarketInfo(Symbol(),MODE_MAXLOT); if(risk!=0) { lot=NormalizeDouble(AccountBalance()*risk/100/10000,2); if(lot<minlot) lot=minlot; if(lot>maxlot) lot=maxlot; } else lot=LOTS; return(lot); Вот такой код как можно переделать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Lexa000 Опубликовано 30 января, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 января, 2022 4 часа назад, Lexa000 сказал: void CheckMartingale() { //функция анализа ордеров мартингейла ZeroMemory(env); //обнуляем данные структуры int _OrdersTotal = OrdersTotal(); for(int pos = _OrdersTotal - 1; pos >= 0; pos--) { if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { Print(__FUNCTION__ + ": не удалось выделить ордер! " + ErrorDescription(GetLastError())); continue; } if(OrderType() <= 2 && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { env.count_buy++; if(env.firstlotB == 0 || OrderLots() < env.firstlotB) env.firstlotB = OrderLots(); if(OrderOpenTime() > env.lasttimeB) { env.lasttimeB = OrderOpenTime(); env.last_distanceB = OrderOpenPrice()-Ask; env.lastlotB = OrderLots(); } } else if(OrderType() == OP_SELL) { env.count_sell++; if(env.firstlotS == 0 || OrderLots() < env.firstlotS) env.firstlotS = OrderLots(); if(OrderOpenTime() > env.lasttimeS) { env.lasttimeS = OrderOpenTime(); env.last_distanceS = Bid-OrderOpenPrice(); env.lastlotS = OrderLots(); } } } } if(env.last_distanceB != 0 || env.last_distanceS != 0) { //если есть открытые ордера if(env.lasttimeB > 0 && env.last_distanceB >= GridDistance*Point) { if(OpenTrade(OP_BUY,Multiplier)) { //Открытие следующего ордера сетки на покупку env.count_buy++; //прибавление ордера к счетчику Modify_grid(OP_BUY); //модификация целей ордера после открытия } } if(env.lasttimeS > 0 && env.last_distanceS >= GridDistance*Point) { if(OpenTrade(OP_SELL,Multiplier)) { //Открытие следующего ордера сетки на продажу env.count_sell++; //прибавление ордера к счетчику Modify_grid(OP_SELL); //модификация целей ордера после открытия } } } } //================================================================ double GetLots() { double lot; double minlot=MarketInfo(Symbol(),MODE_MINLOT); double maxlot=MarketInfo(Symbol(),MODE_MAXLOT); if(risk!=0) { lot=NormalizeDouble(AccountBalance()*risk/100/10000,2); if(lot<minlot) lot=minlot; if(lot>maxlot) lot=maxlot; } else lot=LOTS; return(lot); Вот такой код как можно переделать? Спасибо, уже не надо Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mar@der Опубликовано 2 февраля, 2022 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2022 Добрый день уважаемые форумчане. Я с такой просьбой к Вам, собрал сову (первую в жизни, немного даже стал код понимать) а она гадина миллионы не приносит, даже в тестере ( не понимает она что боковике надо торговать в канале, а на тренде по тренду), но это так лирика. А просьба у меня к Вам вот какая. Нужна функция которая посчитает убытки и когда их сума станет например 120п (или больше на случай если спасательный ордер перейдет на сторону лосей), посчитала бы сумму убытка увеличила лот и выставила тейк отличный от обычного ну и открыла сделку по условиям совы. К примеру накопились убытки на 120п лот 0.1, функция увеличивает лот до 0.4 и ставит тп 30п. лот, тейк и сумму убытков во внешние хочу вынести чтоб оптимизировать можно было, если 5 сделка минусанет например 20п, то счетчик увеличивается до 20*4+120=200п а лот в 2 раза и дальше в случае минусов в 2раза. Взять последний убыток и увеличить лот я могу, но убытков бывает несколько, пусть и не больших, а если каждый убыток увеличивать лот, приходит слив. Интересно такой подход быстро сольет счет. Пытался решить проблему сам, никак, не дорос до уровня! Заранее спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти