***
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
- [АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3.
Советник хороший НО не ставит стопы и профиты!!!! Почему не ставятся не могу понять!
Сергей Дыбленко:
Советник хороший НО не ставит стопы и профиты!!!! Почему не ставятся не могу понять!
Советник хороший НО не ставит стопы и профиты!!!! Почему не ставятся не могу понять!
Пожалуйста вставьте код правильно - при помощи кнопки
или
можно прикрепит файл к сообщения при помощи кнопки
.
//+-------------------------------------------------------------------------------------------------------------------+ //| Разработчик: Андрей Минаев | //| Советник: MACD | //| Почта: minaev.work@mail.ru | //| Скайп: live:minaev.work | //+-------------------------------------------------------------------------------------------------------------------+ #property copyright "Safe-Forex.ru" #property link "http://safe-forex.ru" #property version "1.0" #property strict input string expSettings = ""; // Настройки советника input int expMagic = 123; // Магик input double posVolume = 0.01; // Объем input int posProfit = 23; // Прибыль input int posLoss = 0; // Убыток input string indSettings = ""; // Настройки индикатора MACD input int fastPeriod = 12; // Быстрое EMA input int slowPeriod = 26; // Медленное EMA input int signalPeriod = 9; // MACD SMA input ENUM_APPLIED_PRICE priceType = PRICE_CLOSE; // Тип цены datetime newCandle; // новая свеча int posTicket; // тикет позиции bool permOpenBuy; // true - разрешено открыть позицию на покупку bool permOpenSell; // true - разрешено открыть позицию на продажу bool permSetOrdersStop; // true - разрешено установить стоп ордера //+-------------------------------------------------------------------------------------------------------------------+ void OnTick(void) { //--- проверим наличие сигнала на новой свече if(newCandle != Time[0]) CheckSignalExist(); newCandle = Time[0]; //--- откроем позицию if(permOpenBuy) OpenPosition(OP_BUY, posVolume, Ask); if(permOpenSell) OpenPosition(OP_SELL, posVolume, Bid); //--- установим стоп ордера if(permSetOrdersStop) SetOrdersStop(); } //+-------------------------------------------------------------------------------------------------------------------+ //| Функция устанавливает стоп ордера | //+-------------------------------------------------------------------------------------------------------------------+ void SetOrdersStop(void) { double oop = 0; double sl = 0; double tp = 0; //--- выберем позицию по тикету if(OrderSelect(posTicket, SELECT_BY_TICKET)) { oop = OrderOpenPrice(); //--- расчитаем цены установки стоп ордеров if(OrderType() == OP_BUY) { tp = oop + posProfit * _Point; sl = oop - posLoss * _Point; } if(OrderType() == OP_SELL) { tp = oop + posProfit * _Point; sl = oop - posLoss * _Point; } //--- модифицируем позицию if(OrderModify(posTicket, oop, sl, tp, 0)) permSetOrdersStop = false; // запретим устанавливать стоп ордера else PrintFormat("Стоп ордера не установлены, тикет: %i, ошибка: %i", posTicket, GetLastError()); } else PrintFormat("Позиция не выбрана, тикет: %i, ошибка: %i", posTicket, GetLastError()); } //+-------------------------------------------------------------------------------------------------------------------+ //| Функция открывает позицию | //+-------------------------------------------------------------------------------------------------------------------+ void OpenPosition(int type, double volume, double price) { posTicket = OrderSend(_Symbol, type, volume, price, 0, 0, 0, "", expMagic, 0); if(posTicket > 0) { permSetOrdersStop = true; // разрешим устанавливать стоп ордера if(type == OP_BUY) permOpenBuy = false; // запретим открывать позицию на покупку if(type == OP_SELL) permOpenSell = false; // запретим открывать позицию на продажу } if(posTicket < 0) PrintFormat("Позиция не открылась, ошибка: %i", GetLastError()); } //+-------------------------------------------------------------------------------------------------------------------+ //| Функция проверяет наличие сигнала | //+-------------------------------------------------------------------------------------------------------------------+ void CheckSignalExist(void) { //--- получим значения индикатора double mainLine1 = iMACD(_Symbol, PERIOD_CURRENT, fastPeriod, slowPeriod, signalPeriod, priceType, MODE_MAIN, 1); double mainLine2 = iMACD(_Symbol, PERIOD_CURRENT, fastPeriod, slowPeriod, signalPeriod, priceType, MODE_MAIN, 2); if(mainLine1 > 0 && mainLine2 < 0) permOpenBuy = true; // разрешим открывать позицию на покупку if(mainLine1 < 0 && mainLine2 > 0) permOpenSell = true; // разрешим открывать позицию на продажу } //+-------=============================================================================================
вот советник который мне оч нравиться НО он не ставит стопы и профиты!
Сергей Дыбленко:
вот советник который мне оч нравиться НО он не ставит стопы и профиты!
вот советник который мне оч нравиться НО он не ставит стопы и профиты!
Знаки надо поменять и всё заработает
//+-------------------------------------------------------------------------------------------------------------------+ //| Функция устанавливает стоп ордера | //+-------------------------------------------------------------------------------------------------------------------+ void SetOrdersStop(void) { double oop = 0.0; double sl = 0.0; double tp = 0.0; //--- выберем позицию по тикету if(OrderSelect(posTicket, SELECT_BY_TICKET)) { oop = OrderOpenPrice(); //--- расчитаем цены установки стоп ордеров if(OrderType() == OP_BUY) { if(posProfit>0) tp = NormalizeDouble(oop + posProfit * _Point, Digits); if(posLoss>0) sl = NormalizeDouble(oop - posLoss * _Point, Digits); } if(OrderType() == OP_SELL) { if(posProfit>0) tp = NormalizeDouble(oop - posProfit * _Point, Digits); if(posLoss>0) sl = NormalizeDouble(oop + posLoss * _Point, Digits); } //--- модифицируем позицию if(OrderModify(posTicket, oop, sl, tp, 0)) permSetOrdersStop = false; // запретим устанавливать стоп ордера else PrintFormat("Стоп ордера не установлены, тикет: %i, ошибка: %i", posTicket, GetLastError()); } else PrintFormat("Позиция не выбрана, тикет: %i, ошибка: %i", posTicket, GetLastError()); }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь