0ll Опубликовано 23 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 23 июня, 2015 у меня так:input int StartHour = 4; // Время начала работыinput int EndHour = 22; // Время окончания работы (открытия ордеров)...bool workTime = StartHour = StartHour && Hour() Hour() >= StartHour || Hour() if (workTime) Торгуем... 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 29 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2015 Написал обычный сеточный советник с мартином, хочу его подредактировать, но не как не могу написать функцию которая возвращала бы ЛОТ ПРЕДПОСЛЕДНЕГО открытого ордера. Мне надо сравнить лот последнего ордера с предпоследним. Функция для поиска последнего ордера есть, как её переделать, чтоб ещё предпоследний был. :-?double FindLastLots (int otype){ double oldlots = 0; int oldticket; ticket = 0; for (int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES )) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype ) { oldticket = OrderTicket(); if (oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2015 Алексей7779000 Вам нужно найти ордер по текущей паре и магику, тикет которого меньше тикета последнего, но больше всех остальных.Делается это за один проход цикла, там, где у Вас сохраняется лот и тикет добавьте: oldlots2 = oldlots; ticket2 = ticket; oldlots = OrderLots(); ticket = oldticket; 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 29 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2015 Получается так?double FindLastLots (int otype){ double oldlots = 0, oldlots2 = 0 ; int oldticket; ticket = 0; ticket2 = 0; for (int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES )) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype ) { oldticket = OrderTicket(); if (oldticket > ticket) { oldlots2 = oldlots; ticket2 = ticket; oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots2); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2015 Ну да, всё правильно. А что возвращать - сами решайте... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 29 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июня, 2015 Блин, что то не то, сделал принт и соммент, чтобы посмотреть какой лот функция возвращает там 0.0 . Что то не так ((( Добавлено: 29-06-2015 22:23:03ticket2 Я кстати вынес в глобальные или внешние переменные, не помню как правильно сказать ) Изменено 29 июня, 2015 пользователем Алексей7779000 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 июня, 2015 Поделиться Доработка советников: общая тема Опубликовано 30 июня, 2015 Измените направление пересчёта в цикле:вместо for (int i = OrdersTotal()-1; i>=0; i--)сделайте for (int i = 0; i 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 2 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 2 июля, 2015 Есть вроде простая функция трала://+------------------------------------------------------------------+void Trailing(){ for(int 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) { if(OrderStopLoss() { SL =NormalizeDouble(Bid - TrailingStop * Point, Digits); if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } } if(OrderType() == OP_SELL) { if(OrderOpenPrice() - Ask > TrailingStop * Point) { if(OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point) { SL =NormalizeDouble(Ask + TrailingStop * Point, Digits); if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } } } } }}//+------------------------------------------------------------------+Мне её надо прикрутить к сеточному советнику, я немного переделал её, чтобы трал срабатывал от последнего ордера, и стоп устанавливался сразу на ВСЕ открытые ордера, но ни хрена не работает.://+------------------------------------------------------------------+void Trailing(){ double asl = 0; double asl1 = 0; asl =NormalizeDouble(Bid - TrailingStop * Point, Digits); asl1 =NormalizeDouble(Ask + TrailingStop * Point, Digits); 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 - FindLastBuyPrice() > TrailingStop * Point) { if(OrderStopLoss() { SL = asl; if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } } if(OrderType() == OP_SELL) { if(FindLastSellPrice() - Ask > TrailingStop * Point) { if((OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point) || OrderStopLoss() == 0) { SL = asl1; if (OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); } } } } } }}//+------------------------------------------------------------------+Саму функцию разместил в самом начале кода OnTick(). Получаеться она работает так, Открываеться сетка ордеров, Допустим Селл, и цена пошла вниз куда нам и надо, сработывает трал для самого последнего ордера, а все остальные не модифицируються, как только этот последний ордер закрываеться по стопу, начинаеться трал теперь ПРЕдпоследнего ордера, и т.д. А надо чтобы трал модифицировал сразу все ордера, и после срабатывания стопа закрывалась вся сетка. Очень надеюсь на вашу помощь. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Aza Опубликовано 2 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 2 июля, 2015 void Trailing(){ double asl = 0; double asl1 = 0; asl =NormalizeDouble(Bid - TrailingStop * Point, Digits); asl1 =NormalizeDouble(Ask + TrailingStop * Point, Digits); for(int i = OrdersTotal()-1; i>=0; i--) { int j; if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if( OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if(Bid - FindLastBuyPrice() > TrailingStop * Point) { if(OrderStopLoss() { SL = asl; for(j=i; j>=0; j--) if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY && OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); break; } } } if(OrderType() == OP_SELL) { if(FindLastSellPrice() - Ask > TrailingStop * Point) { if((OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point) || OrderStopLoss() == 0) { SL = asl1; for(j=i; j>=0; j--) if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL && OrderStopLoss() != SL) OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0); break; } } } } } }} Ссылка на сообщение Поделиться на другие сайты More sharing options...
big13 Опубликовано 7 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 7 июля, 2015 Заранее извиняюсь, может не туда и не то!Добрый день или вечер, нужна помощь, допилить советник,т.е. добавить туда еще несколько функций, пробовал сам не получается! Не хватает навыков((Добавить необходимо количество открываемых ордеров желательно переменное число, или на худой конец 2 ордера, одинаковый СЛ и изменяемый ТП, возможность менять м.номер без танцев с бубнами, заранее спасибо, советник прилагаю! Adjustable_MA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voffka85 Опубликовано 12 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 12 июля, 2015 Заранее извиняюсь, может не туда и не то!Добрый день или вечер, нужна помощь, допилить советник,т.е. добавить туда еще несколько функций, пробовал сам не получается! Не хватает навыков((Добавить необходимо количество открываемых ордеров желательно переменное число, или на худой конец 2 ордера, одинаковый СЛ и изменяемый ТП, возможность менять м.номер без танцев с бубнами, заранее спасибо, советник прилагаю! добавил количество ордеров и вынес мэджик, но не проверялAdjustable_MA.ex4Adjustable_MA.mq4 Изменено 6 декабря, 2017 пользователем Pavel888 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gradalis_Seeker Опубликовано 16 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 16 июля, 2015 При компиляции выдает предупреждения ( скрин в приложениях). :-ssextern double Lots = 0.1;extern double StopLoss = 50;extern double Takeprofit = 100;extern int MovingPeriod1 = 8;extern int MovingPeriod2 = 21;extern int Slippage = 3;extern int Magic = 123;extern string comment = "Robot";int ticket;double Indicator1, Indicator2, SL, TP;//----------------------------------//----------------------------------int OnInit() {if (Digits == 3 || Digits == 5);{Takeprofit *= 10;StopLoss *= 10;Slippage *= 10;} return(INIT_SUCCEEDED); }//---------------------------------------------------//---------------------------------------------------void OnDeinit(const int reason) { }//------------------------------------------------------//----------------------------------------------------void OnTick(){Indicator1 = iCustom (Symbol(), 0, "Moving Averenges", MovingPeriod1, 0,1);Indicator2 = iCustom (Symbol(), 0, "Moving Averenges", MovingPeriod2, 0,1); if(Indicator1 > Indicator2 && CountBuy() == 0) SL = NormalizeDouble(Ask - StopLoss * Point, Digits); TP = NormalizeDouble(Ask + Takeprofit * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, 0); if(ticket > 0) if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); if(Indicator1 SL = NormalizeDouble(Bid - StopLoss * Point, Digits); TP = NormalizeDouble(Bid + Takeprofit * Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, 0); bool modify1 = OrderModify(ticket, OrderOpenPrice(),SL, TP, 0); if(ticket > 0) if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);}//+------------------------------------------------------------------+//---Проверка ордеровint CountBuy(){int Count = 0;for( int trade = OrdersTotal()-1; trade >=0; trade--)OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) Count++; } return(Count);}int CountSell(){int Count = 0;for( int trade = OrdersTotal()-1; trade >=0; trade--)OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_SELL) Count++; } return(Count);} Предупреждения..png Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 16 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 16 июля, 2015 Два нюанса, как я понимаю: 1) OrderSelect и OrderModify это функции, которые возвращают значения для дальнейшей проверки.Соответственно программа видит что Вы не "выцепляете" эти значения в строках типа (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);)и подсказывает что Вы этот момент опустили. Но так как у Вас сделано тоже работать будет. 2) empty controlled statement foundЭто у Вас If не корректно используется в строке: if(Indicator1 > Indicator2 && CountBuy() == 0) (для этого условия нет дальнейших действий)После If там наверное Вы фигурные скобки пропустили 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
QkariqN Опубликовано 16 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 16 июля, 2015 Спасибо!Подскажите куда конкретно нужно копировать данные настройки и именно в таком виде? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 16 июля, 2015 Подскажите куда конкретно нужно копировать данные настройки и именно в таком виде?Копируй input в заголовки (к внешним переменным extern)вычисление workTime перед проверкой условий на вход 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
big13 Опубликовано 20 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 20 июля, 2015 Доброго времени суток!!!Смысл такой, если есть у кого советник, который работает на 3-х ма не коряво написанный, алгоритм: 3ма быстрый, средний и медленный;на покупку быстрая ма пробивает среднюю, при этом обе выше медленной продажа наоборот.количество сделок по желанию, чтоб долго не расписывать выложу 1 сову, но алгоритм работы ее я не могу догнать,т.е. количество сделок подходит, есть трал и бу, но по сделкам зевает или открывает при касании быстрой ма -среднейУ меня 3 или 4 штуки все написаны руками скотчем приклеенными, если есть у кого норм версии просьба поделиться!!! p_s_3MA_Trall_NoLoss.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
QkariqN Опубликовано 25 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 25 июля, 2015 Вставил так:input int StartHour = 17; // Время начала работыinput int EndHour = 9; // Время окончания работы (открытия ордеров)extern string Version = "1.00";extern string _1 = "System Parameters";extern bool Stealth = TRUE;extern bool Agressive = TRUE;extern double GmtOffset = 0.0;extern bool AutoGmtOffset = TRUE;extern int S1_Reference = 337733;extern int S2_Reference = 773377;extern string ReceiptCode = "";extern string _2 = "Strategy Parameters";extern int Slippage = 3;extern bool SendEmails = FALSE;extern string _3 = "Order Management";extern double LotSize = 0.1;extern string _4 = "Ratio Order Management";extern double RiskLevel = 0.0;extern bool RecoveryMode = TRUE;extern string _5 = "Fixed Ratio Order Management";extern bool UseFixedRatio = FALSE;extern double BaseDeposit = 1000.0;extern double StepRatio = 0.2;extern bool ReduceLots = FALSE;bool workTime = StartHour = StartHour && Hour() Hour() >= StartHour || Hour() Ошибки нет но на работу советника не повлияло.Может проще выложить советника и на примере покажете? спасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 26 июля, 2015 Там где открывает ордера не забыли вставить: if (workTime) Торгуем... ?Если не получится - вставляй свою сову я допишу. Ссылка на сообщение Поделиться на другие сайты More sharing options...
QkariqN Опубликовано 26 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 26 июля, 2015 Большое спасибо за помощь. :) Сова.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 26 июля, 2015 Да-уж, сова у Вас не простая...Пробуйте. Т.к. у меня нет библиотек, то сову не компилировал и не проверял, но должно работать... Сова.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дима Александрович Опубликовано 29 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июля, 2015 Коллеги, на нашем сайте была тема TradeManagement, которая содержала ряд простейших советников упрощающих торговлю. Первый советник e-CloseByLossOrProfit выполняет закрытие всех позиций при достижении общего по счёту заданного уровня убытка или прибыли в валюте депозита. Кроме того, этот советник может ещё и удалить отложенные ордера. Второй e-CloseByProfit выполняет закрытие всех позиций при достижении общего по счёту заданного уровня убытка или прибыли в пунктах. ЗАДАЧА : скопировать функцию удаления отложенных ордеров уз первого советника во второй, т.е. e-CloseByProfit должен удалять отложенные ордера. Ниже исходники.Спасибо. e-CloseByLossOrProfit.mq4e-CloseByProfit.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 июля, 2015 Поделиться Доработка советников: общая тема Опубликовано 29 июля, 2015 Скрестил. пробуй. e-CloseByProfit.mq4 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
QkariqN Опубликовано 3 августа, 2015 Поделиться Доработка советников: общая тема Опубликовано 3 августа, 2015 К сожалению советник живет своей жизнью и открывает сделки в любое время... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сергей С Опубликовано 13 августа, 2015 Поделиться Доработка советников: общая тема Опубликовано 13 августа, 2015 Доброго времени суток!!!Смысл такой, если есть у кого советник, который работает на 3-х ма не коряво написанный, алгоритм: 3ма быстрый, средний и медленный;на покупку быстрая ма пробивает среднюю, при этом обе выше медленной продажа наоборот.количество сделок по желанию, чтоб долго не расписывать выложу 1 сову, но алгоритм работы ее я не могу догнать,т.е. количество сделок подходит, есть трал и бу, но по сделкам зевает или открывает при касании быстрой ма -среднейУ меня 3 или 4 штуки все написаны руками скотчем приклеенными, если есть у кого норм версии просьба поделиться!!! Посмотри теперь должна открывать только когда средняя и быстрая МА выше или ниже медленной, если еще актуально.p_s_3MA_Trall_NoLoss2.mq4 Изменено 6 декабря, 2017 пользователем Pavel888 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey5 Опубликовано 16 августа, 2015 Поделиться Доработка советников: общая тема Опубликовано 16 августа, 2015 День добрый.Хотелось бы позаниматься с этим: http://tlap.com/forum/sovetniki-foreks/11/sovetnik-quotkalmarquot/7312/?do=findComment&comment=225903Убрал многолотность и прогнал с настройками "на глазок" Спойлер Но для дальнейшей работы желательно добавить тайм-фильтр.Поэтому просьба:пожалуйста вставьте вот этот тайм-фильтр: Спойлер extern string S1 = " DayOfWeek Filter";extern bool monday = true;extern string monday_open = "20:00";extern string monday_pause_start = "0";extern string monday_pause_stop = "0";extern string monday_close = "23:50";extern bool tuesday = false;extern string tuesday_open = "20:00";extern string tuesday_pause_start = "0";extern string tuesday_pause_stop = "0";extern string tuesday_close = "23:50";extern bool wednesday = true;extern string wednesday_open = "20:00";extern string wednesday_pause_start = "0";extern string wednesday_pause_stop = "0";extern string wednesday_close = "23:50";extern bool thursday = true;extern string thursday_open = "20:00";extern string thursday_pause_start = "0";extern string thursday_pause_stop = "0";extern string thursday_close = "23:50";extern bool friday = false;extern string friday_open = "08:30";extern string friday_pause_start = "15:30";extern string friday_pause_stop = "17:55";extern string friday_close = "21:35";extern bool sunday = false; extern string sunday_open = "08:30";extern string sunday_pause_start = "15:30";extern string sunday_pause_stop = "17:55";extern string sunday_close = "21:35"; +++++++++++++++++++++++++++++++++++bool IsTime(){ switch(DayOfWeek()) { case 0: { return(sunday && IsNow(sunday_open,sunday_pause_start,sunday_pause_stop,sunday_close)); break; } case 1: { return(monday && IsNow(monday_open,monday_pause_start,monday_pause_stop,monday_close)); break; } case 2: { return(tuesday && IsNow(tuesday_open,tuesday_pause_start,tuesday_pause_stop,tuesday_close)); break; } case 3: { return(wednesday && IsNow(wednesday_open,wednesday_pause_start,wednesday_pause_stop,wednesday_close)); break; } case 4: { return(thursday && IsNow(thursday_open,thursday_pause_start,thursday_pause_stop,thursday_close)); break; } case 5: { return(friday && IsNow(friday_open,friday_pause_start,friday_pause_stop,friday_close)); break; } default:{ return(false); } }}bool IsNow(string open,string pause_start,string pause_stop,string close){ if((pause_start == "0")||((pause_start == open)&&(pause_stop == close))) { //no pause return((TimeCurrent() >= StrToTime(open)) && (TimeCurrent() } else // pause { return(((TimeCurrent() >= StrToTime(open)) && (TimeCurrent() ((TimeCurrent() >= StrToTime(pause_stop)) && (TimeCurrent() } return(false);}+++++++++++++++++++++++++++++++++++++++++++++++++++++ KalmarSource_1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти