Vorchunozavr Опубликовано 18 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2013 Проверь ещё раз глазом я сразу увидел ошибку в функции ModifyOrders(int otype) double avgprice = 0, Логику не смотрел!!! Сразу - не обязательно правильно.RenjeniВ фукции CountTrades, эта строчка:for(int i=OrdersTotal()-1; 1>=0; i--) И историю котировок в тестер нужно подгрузить. Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 18 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2013 Проверь ещё раз глазом я сразу увидел ошибку в функции ModifyOrders(int otype) double avgprice = 0, Логику не смотрел!!! Сразу - не обязательно правильно.RenjeniВ фукции CountTrades, эта строчка:for(int i=OrdersTotal()-1; 1>=0; i--) И историю котировок в тестер нужно подгрузить. for(int i=OrdersTotal()-1; i>=0; i--) ;)Добавлено: 18-10-2013 21:02:59 Проверь ещё раз глазом я сразу увидел ошибку в функции ModifyOrders(int otype) double avgprice = 0, Логику не смотрел!!! Сразу - не обязательно правильно.RenjeniВ фукции CountTrades, эта строчка:for(int i=OrdersTotal()-1; 1>=0; i--) И историю котировок в тестер нужно подгрузить. Цитата Сразу - не обязательно правильно. :-? :-? :-? не понял!!! :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Renjeni Опубликовано 18 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2013 спасибо большое, а то я все проверяю скобки, запятые,логику.. только другая проблема выявилась - открывает только один ордер , то есть при уходе цены в обратную сторону не открывает 2 ордер и т.д. - это ведь martin Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Уважаемый Vorchunozavr,в том то все и дело что в памяти остается виртуалка, в данный момент по коду,вот я хочу сделать так что бы виртуальные ордера удолялись из памяти вместе с отложенными ордерами вечером,если же отложники сработали,то все равно виртуалки обнулялись.Господин xbms мне посоветовал вчера написать функции типа CountTrade().Я написал не помогло пока, пишет при компиляции что функции не используются.Пока не знаю как их обнулить.если интересно посмотри код на 26 строничке test21 что б не загружать по сотню раз одно и тоже. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 19 октября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Уважаемый Vorchunozavr,в том то все и дело что в памяти остается виртуалка, в данный момент по коду,вот я хочу сделать так что бы виртуальные ордера удолялись из памяти вместе с отложенными ордерами вечером,если же отложники сработали,то все равно виртуалки обнулялись.Господин xbms мне посоветовал вчера написать функции типа CountTrade().Я написал не помогло пока, пишет при компиляции что функции не используются.Пока не знаю как их обнулить.если интересно посмотри код на 26 строничке test21 что б не загружать по сотню раз одно и тоже. Денис, CountTrades() - это функция, которую нужно добавить в код... и которую ты должен был написать:int CountTrades() { int count = 0; for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++; } } return (count);} разбери и прокомментируй каждую строчку этого кода! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 спасибо большое, а то я все проверяю скобки, запятые,логику.. только другая проблема выявилась - открывает только один ордер , то есть при уходе цены в обратную сторону не открывает 2 ордер и т.д. - это ведь martin Для BUY должно тянуть сетку. А вот для SELL, две ошибки есть: else if (order_type ==OP_SELL) { price=FindLastPrice(OP_BUY); if( Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot*Multiplier,2); ticket = OrderSend(Symbol(),OP_SELL,lastlot,Bid,Slippage,0,0,"",Magic,0,Red); if ( ticket > 0) ModifyOrders( OP_SELL); } } :-? :-? :-? не понял!!! :d Я просто посоветовал не спешить с неверным ответом. Ведь здесь ошибок нет: double avgprice = 0, order_lots = 0; Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Извините Vorchunozavr!!! l-) Цитата Я просто посоветовал не спешить с неверным ответом. Ведь здесь ошибок нет:Код: [Выделить] double avgprice = 0, order_lots = 0; Для меня это ошибка а для Вас нет или как объясните :-?? я думал так:double avgprice = 0; Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 elrusodouble avgprice = 0, order_lots = 0; Объявлены две локальные переменные типа double, сразу присвоены значения. Так, чрез запятую и пишется. Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 А как в коде обозначить предыдущий бар? Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 А как в коде обозначить предыдущий бар? рискну предположить, что Open[1] это и есть предыдущий бар. А всё что точнее из вопроса не понятно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Цитата А всё что точнее из вопроса не понятно. Например:if(предыдущий бар == BuyPinBar) OrderSend(.......);(текст не в коде потому что у меня высвечивается ошибка) Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Цитата А всё что точнее из вопроса не понятно. Например:if(предыдущий бар == BuyPinBar) OrderSend(.......);(текст не в коде потому что у меня высвечивается ошибка) а пинбар ты как определяешь? :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Цитата а пинбар ты как определяешь Из индикатора определения пин-баров. Их в интернете полно. Так как определить предыдущий бар, кто знает? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Цитата а пинбар ты как определяешь Из индикатора определения пин-баров. Их в интернете полно. Так как определить предыдущий бар, кто знает? Дык, это всем известно :)Пишете функцию, используя Open[1], Close[1], High[1], Low[1]. В ней проверяете, процентное отношение, размеров хвостов свечи и тела (т.е., является-ли она, пинбаром вообще и пин-бай это, или пин-селл). Именно единичка в скобочках обозначает предыдущий бар, что mzk_3om6u и написал. Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 я не понимаю, если есть индикатор по пин барам, то почему бы не использовать его сигнал?зачем так сказать делать велосипед? Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Дык, это всем известно :)Пишете функцию, используя Open[1], Close[1], High[1], Low[1]. В ней проверяете, процентное отношение, размеров хвостов свечи и тела (т.е., является-ли она, пинбаром вообще и пин-бай это, или пин-селл). Именно единичка в скобочках обозначает предыдущий бар, что mzk_3om6u и написал.Вот у меня такая функция пин-бара:bool IsBuyPinbar(double& dayRange, int pos){ double actOp,actCl,actHi,actLo,preHi,preLo,preCl,preOp,actRange,preRange,actHigherPart,actHigherPart1; actOp=Open[pos+1]; actCl=Close[pos+1]; actHi=High[pos+1]; actLo=Low[pos+1]; preOp=Open[pos+2]; preCl=Close[pos+2]; preHi=High[pos+2]; preLo=Low[pos+2]; actRange=actHi-actLo; preRange=preHi-preLo; actHigherPart=actHi-actRange*0.4; actHigherPart1=actHi-actRange*0.4; dayRange=AveRange4(pos); if((actCl>actHigherPart1&&actOp>actHigherPart)&& (actRange>dayRange*0.5)&& (actLo+actRange*0.25 { if(Low[ArrayMinimum(Low,3,pos+3)]>Low[pos+1]) return (true); } return(false);}Для медвежьего почти так само.Если я пишу что-то типа:if(IsBuyPinbar(dayRange,pos)) OrderSend(.........)То проверяя в тестере стратегий советник ордера не открываются.Я поняла как обозначить предыдущий бар. double dlow = Low [1]; // Минимум предыдущего бара double dhigh = High [1]; // Максимум предыдущего бара double dopen = Open [1]; // Открытие предыдущего бара double dclose = Close[1]; // Закрытие предыдущего бара double UpBar = dclose >= dopen, DownBar = dclose Теперь у меня написано:if(UpBar || DownBar == IsBuyPinbar(dayRange,pos)) OrderSend(.........)а ордер все равно не открывается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 elruso double avgprice = 0, order_lots = 0; Объявлены две локальные переменные типа double, сразу присвоены значения. Так, чрез запятую и пишется. x_x кароткая запись ясно! будем привыкать ;) Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Ага, я поняла, у меня неправильная функция пин-бара. Кто может, помогите пожалуйста написать функцию определения пин-баров и чтобы она была рабочей. Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Народ я смотрю Вы про прайс акшен заговорили это интересно! Я вот сидел, сидел и высидел!Код смотрит на все бары в чарте у меня на М5, и выбирает только "Пейролы"!! Замеряет их и выводит на экран потентиальные профиты и лосы для медведей и отдельно для быков! по истории на М5 получается за последний год! 12"Пейролов"! Я вывел внешние параметры где можно менять условия, то есть поставить допустим день 4-четверг и кол-во дней в месяц Как распечатать массив на экран нашёл способ через стринг, я думаю наверно другого и нету :-? Только вот сейчас пытаюсь соответственно вывести среднии значения, но не могу додуматься как сложить профиты а потом их разделить ни их общее колличество и тоже вывести на экран??? Если у когото есть идеи подтолкните плиз!!! int init() {//---- string array[],str; for(int i=0; i if (TimeHour(Time) == 15 && TimeMinute(Time) == 30 && TimeDayOfWeek(Time) == HistoryNewsDay && TimeDay(Time) if (Close>Open) { int BullProfit = MathAbs(High-Open)/Point; int BullStopLoss = MathAbs(Open-Low)/Point; array=TimeToStr(Time) + "\n" + "Bull " + BullProfit + "pips " + BullStopLoss + " Stop " + "\n" ; str=StringConcatenate(array,str) ; Comment(str); } if (Close) { int BearProfit = MathAbs(Open-Low)/Point; int BearStopLoss = MathAbs(High-Open)/Point; array=TimeToStr(Time) + "\n" + "Sell " + BearProfit + "pips " + BearStopLoss + " Stop " + "\n"; str=StringConcatenate(array,str) ; Comment(str); } }} //---- return(0); } Screen_Shot_2013-10-19_at_11.57.01_AM.png Изменено 20 октября, 2013 пользователем elruso Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Ага, я поняла, у меня неправильная функция пин-бара. Кто может, помогите пожалуйста написать функцию определения пин-баров и чтобы она была рабочей. Сегодня я велосипед не напишу..., попробуем покататься на чужом :dЕсть индикатор PinBar ND, используем его и функцию iCustom (shift ставим 1 - нам нужен предыдущий бар). bool pinbuy, pinsell;pinbuy = iCustom(Symbol(), 0, "PinBar ND", 0, 1);pinsell = iCustom(Symbol(), 0, "PinBar ND", 1, 1); Дальше: if (pinbuy == true) - делаем одно, if (pinsell == true) - другое. Потом, обкладываем всё условиями...Да, кстати, Ваше условие (if(UpBar || DownBar == IsBuyPinbar(dayRange,pos)), некорректно.(индикатор должен быть в папке indicators)PinBar_ND.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 19 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2013 Vorchunozavr, так это же тот же индикатор по которому я писала советник. Теперь я поняла свои ошибки, сейчас исправлю.Добавлено: 20-10-2013 06:32:03Ура! Заработало!Только есть одна проблемка. :dУ меня стоит if (pinbuy == true && CountBuy() == 0) то ...., так же само и с пин-баром на селл if (pinsell == true && CountSell() == 0).Так вот в чем проблемка. Со временем могут появляться и другие пин-бары, а если же будет постоянно выполнятся этот код, то по другому пин-бару я просто не войду. Можно ли написать if (pinbuy == true && CountSell() == 0 до появления нового пин-бара) то .....Или как-то подругому нужно решить эту проблемку? Изменено 20 октября, 2013 пользователем TANZA Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 20 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 октября, 2013 Vorchunozavr, так это же тот же индикатор по которому я писала советник. Теперь я поняла свои ошибки, сейчас исправлю. Добавлено: 20-10-2013 06:32:03Ура! Заработало!Только есть одна проблемка. :dУ меня стоит if (pinbuy == true && CountBuy() == 0) то ...., так же само и с пин-баром на селл if (pinsell == true && CountSell() == 0).Так вот в чем проблемка. Со временем могут появляться и другие пин-бары, а если же будет постоянно выполнятся этот код, то по другому пин-бару я просто не войду. Можно ли написать if (pinbuy == true && CountSell() == 0 до появления нового пин-бара) то .....Или как-то подругому нужно решить эту проблемку? Наверное надо закрыть открытую сделку при появлении нового пинбара! Ссылка на сообщение Поделиться на другие сайты More sharing options...
TANZA Опубликовано 20 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 октября, 2013 Наверное надо закрыть открытую сделку при появлении нового пинбара! Неа, мне нужно на каждом пин-баре входить в позицию. А кто-то вообще видел в интернете бесплатный советник пин-баров? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 20 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 октября, 2013 Всем привет! Vorchunozavr, так это же тот же индикатор по которому я писала советник. Теперь я поняла свои ошибки, сейчас исправлю. Добавлено: 20-10-2013 06:32:03Ура! Заработало!Только есть одна проблемка. :dУ меня стоит if (pinbuy == true && CountBuy() == 0) то ...., так же само и с пин-баром на селл if (pinsell == true && CountSell() == 0).Так вот в чем проблемка. Со временем могут появляться и другие пин-бары, а если же будет постоянно выполнятся этот код, то по другому пин-бару я просто не войду. Можно ли написать if (pinbuy == true && CountSell() == 0 до появления нового пин-бара) то .....Или как-то подругому нужно решить эту проблемку? Если не заморачиваться, можно отправить советник спать, после открытия ордера. Измерять будем свечками:ticket = OrderSend(.................)if (ticket > 0){ if (OrderModify(.............)) { int sleep = timefr*60*1000; Sleep(sleep); }} timefr - во внешние переменные. Это период графика в минутах (если H1, пишем 60, если H4 - 240).Если нужно пропустить два бара, пишем sleep = 2*timefr*60*1000;Теперь, можно ограничить общее количество ордеров: if (CountSell() (например)Конечно, если во время спячки перезапустить терминал или советник, может установиться ещё один ордер... Ссылка на сообщение Поделиться на другие сайты More sharing options...
wmode7 Опубликовано 20 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 октября, 2013 Добрый день ув. Трейдеры,Помогите пожалуста создать советник по следущим параметрам. Индикаторы:MA с периодом 85, low, linear weightMA с периодом 75, low, linear weightMA с периодом 5, close, exponentialMACD с параметрами 15, 26, 1Сделки:когда МА(5) пересекает сверху вниз МА(85) и МА(75) и у МАCD1 бар закрылся ниже нуля то продаем. Для покупок все наобарот.Я пытался создать в конструкторе, но он у меня открывает по одной сделке после каждого бара.Заранее благодарен. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти