Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 276
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ZeroMemory (...) проинициализирует массив типа стринг значением NULL
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
//+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 100; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0])return; timeprev = Time [0]; PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); SL = NormalizeDouble(Bid + StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLoss*Point, Digits); TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 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 + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //-----------------------------------------------------------------------------------------------Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Точнее трейлинг работает, а профит ранее прописанный не работает, в чём причина?
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
if (timeprev == Time [0]) { timeprev = Time [0]; return;}
тайкпрофит всё равно не выставляет.... Гляньте ещё раз пожалуйста.
тайкпрофит всё равно не выставляет.... Гляньте ещё раз пожалуйста.
Вы в функции трейлинга всем ордерам ставите тейк 0, а при открытии ставите правильный
Прочтите логику по строкам,
открыли ордер поставили стоп и тейк
начали тралить стоп тейк поставили 0
замените в трейлинге 0 на OrderTakeProfit()
Теперь он стоплос не ставит
Теперь он стоплос не ставит
Покажите новый код
Покажите новый код
Я же Вам четко написал в трейлинге Вы ставите вместо тейка 0
Проверьте этот вариант
Помогите, пожалуйста, сравнить цену МА на первом баре с ценами МА на предыдущих четырёх барах. Если цена выросла и разница больше N заполнить буфер. Пытаюсь так