Shu Опубликовано 27 декабря, 2008 Жалоба Поделиться Опубликовано 27 декабря, 2008 Здравствуйте! Сегодня написал свой первый советник. Прогоняю его на тестере стратегий и вижу, что он открывает по несколько одинаковых сделок (по одной и той же цене) в один и тот же момент времени. Если я правильно понимаю, то происходит это из-за того, что код советника выполняется при получении каждого нового тика, которых на одном баре приходит множество (советник тестирую на пятиминутном графике). Подскажите пожалуйста как избежать этого эффекта. Видимо надо сделать как-то так, чтобы алгоритм выполнялся по одному разу на каждый бар? И как это реализовать технически? Попробуйте использовать такую мою функцию: //+------------------------------------------------------------------+ bool NewBar() { bool r; static datetime bar = 0; if (bar == 0) bar = TimeCurrent(); if (bar == Time[0]) r = false; else { bar = Time[0]; r = true; } return(r); } //+------------------------------------------------------------------+ Ссылка на комментарий Поделиться на другие сайты Поделиться
selenat Опубликовано 27 декабря, 2008 Жалоба Поделиться Опубликовано 27 декабря, 2008 Здравствуйте! Сегодня написал свой первый советник. Прогоняю его на тестере стратегий и вижу, что он открывает по несколько одинаковых сделок (по одной и той же цене) в один и тот же момент времени. Если я правильно понимаю, то происходит это из-за того, что код советника выполняется при получении каждого нового тика, которых на одном баре приходит множество (советник тестирую на пятиминутном графике). Подскажите пожалуйста как избежать этого эффекта. Видимо надо сделать как-то так, чтобы алгоритм выполнялся по одному разу на каждый бар? И как это реализовать технически? Попробуйте использовать такую мою функцию: //+------------------------------------------------------------------+ bool NewBar() { bool r; static datetime bar = 0; if (bar == 0) bar = TimeCurrent(); if (bar == Time[0]) r = false; else { bar = Time[0]; r = true; } return(r); } //+------------------------------------------------------------------+ Спасибо большое! Буду пробовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
djday Опубликовано 3 января, 2009 Жалоба Поделиться Опубликовано 3 января, 2009 Здравствуйте! Сегодня написал свой первый советник. Прогоняю его на тестере стратегий и вижу, что он открывает по несколько одинаковых сделок (по одной и той же цене) в один и тот же момент времени. Если я правильно понимаю, то происходит это из-за того, что код советника выполняется при получении каждого нового тика, которых на одном баре приходит множество (советник тестирую на пятиминутном графике). Подскажите пожалуйста как избежать этого эффекта. Видимо надо сделать как-то так, чтобы алгоритм выполнялся по одному разу на каждый бар? И как это реализовать технически? Добрый день.На одном из форумов помогли. Да, на каждом тике выставлялся ордер.Выставил такое условие - if(OrdersTotal() == 0) и перстали выставлятся беспрерывно ордера, только один. Может и подойдёт такая конструкция. Ссылка на комментарий Поделиться на другие сайты Поделиться
selenat Опубликовано 4 января, 2009 Жалоба Поделиться Опубликовано 4 января, 2009 Здравствуйте! Сегодня написал свой первый советник. Прогоняю его на тестере стратегий и вижу, что он открывает по несколько одинаковых сделок (по одной и той же цене) в один и тот же момент времени. Если я правильно понимаю, то происходит это из-за того, что код советника выполняется при получении каждого нового тика, которых на одном баре приходит множество (советник тестирую на пятиминутном графике). Подскажите пожалуйста как избежать этого эффекта. Видимо надо сделать как-то так, чтобы алгоритм выполнялся по одному разу на каждый бар? И как это реализовать технически? Добрый день.На одном из форумов помогли. Да, на каждом тике выставлялся ордер.Выставил такое условие - if(OrdersTotal() == 0) и перстали выставлятся беспрерывно ордера, только один. Может и подойдёт такая конструкция. А если используешь его сразу на нескольких валютных парах? Впрочем, идея понятна, спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
CuTTer1991 Опубликовано 11 февраля, 2009 Жалоба Поделиться Опубликовано 11 февраля, 2009 Доброго времени суток всем! Обращаюсь за помощью к людям, умеющим писать советники.Есть собственная ТС, есть техническое задание к ней, но я Очень далека от программирования.Может кто-нибудь откликнется на мою просьбу? С уважением. Ссылка на комментарий Поделиться на другие сайты Поделиться
idolzhenko Опубликовано 12 февраля, 2009 Жалоба Поделиться Опубликовано 12 февраля, 2009 Есть собственная ТС, есть техническое задание к ней, но я Очень далека от программирования. "Чего хочет Женщина, того хочет Бог". Мэм, можно попробовать, если от программы не требуется "кофе в постель". Единственное условие, ТС и советник становятся достоянием общественности этого форума. Ссылка на комментарий Поделиться на другие сайты Поделиться
CuTTer1991 Опубликовано 13 февраля, 2009 Жалоба Поделиться Опубликовано 13 февраля, 2009 Доброго времени суток! Благодарю за отклик!Приятно, что мужчина протягивает руку помощи!"Кофе в постель" мы оставим для другой программы -)) , а с Вашим условием я согласна. Подробности напишу в личку. С уважением. Ссылка на комментарий Поделиться на другие сайты Поделиться
паша111 Опубликовано 20 февраля, 2009 Жалоба Поделиться Опубликовано 20 февраля, 2009 Всем доброго дня. Кто может посоветовать или сделать или помочь сделать. советник.Описание такое. Выставляется время (часы\минуты) там находится цена сейчас и от этой цены выставляются ордера с верху селллимиты с низу байлимиты. ( со стопами и профитами) выставляются значения -----время (например 14:00) -----цена этого времени (например 1.3000 )----- от этой цены 100 п (или несколько лимитников 100п. 150п. 200п от цены в 14:00) в верху селлимит (с фиксированным стопом и профитом) с низу 100 п байлимит .установка:времяценасколько пунктов от ценыбайлимиты и селлимиты с профитом и стопом Буду очень благодарен за помощь так как не разбираюсь в программировании. а на сайте mql4 нету так бы скачал. Или ктото знает о готовом таком советнике . он ведь не сложный . В любом случае благодарю. Ссылка на комментарий Поделиться на другие сайты Поделиться
dim3535dim Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Доброго времени суток. У меня небольшая проблема, языком начал заниматься совсем недавно, поэтому опыта нету. А хотелось бы мне использовать один индикатор в советнике, посредством функции icustom. Но то что я пишу не открывает сделок либо открывает их в огромном количестве и только по buy. Отсюда вопрос, может я неправильно пишу параметры icustom или что то еще. В идеале надо чтобы советник реагировал на каждый сигнал (сигнал вверх покупка, вниз продажа). Облазил кучу сайтов в поисках подсказки, но безрезультатно. Помогите пожалуйста. Файлы индикатора и моих советников прилагаются_____________________.rarindicator_and_experts.rar Ссылка на комментарий Поделиться на другие сайты Поделиться
idolzhenko Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Посмотрел на индикатор PRM_v3, на основе которого Ваш советник написан. ИМХО не заморачивайтесь с ним, у него стрелки вверх и вниз на одном и том же баре стоят. Куда в этом случае будете открываться? Ссылка на комментарий Поделиться на другие сайты Поделиться
ЛЮТЫЙ Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Есть советник который открывает и закрывает сделки по индикатору (не важно по какому), то есть индикатор красный значит селл, индикатор синий значит бай. допустим после открытия на селл, случайно вырубают электричество, потом врубают опять, при этом советник после установки соединения с инетом закрывает селл и опять открывает селл так как индикатор еще красный. Вопрос: что нужно прописать или изменит в коде советника чтоб после включения терминала если индикатор допустим красный еще то советник не закрывает открытый селл ждет пока цвет индикатора не изменится и как только станет синим то открывает сделку на бай и закрывает селл.то есть не тупо открывал сделки сразу после включения терминала, а после смены сигнала на сделку. если где то эту проблему описывали просто скажите что " уже писали " я найду. int start() { //---- //if(CountBars<Bars) return(0); if (tTime != Time[0]) { tTime = Time[0]; //Print("Время открытия бара ", Time[0]); } else return(0); int itTrand = iCustom(NULL,0,"trend",Range,FastMA,SlowMA,CountBars,filter,2,0); if (iTrand != itTrand) { int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; if (OrderType()==OP_SELL) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); Sleep(10000); } if (OrderType()==OP_BUY) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); Sleep(10000); } } if (itTrand > 0) { OrderSend(Symbol(),OP_BUY,mLots,Ask,3,0,0,"",16384,0,Green); } else { OrderSend(Symbol(),OP_SELL,mLots,Bid,3,0,0,"",16384,0,Green); } iTrand = itTrand; } //---- return(0); } //+------------------------------------------------------------------+ Если это решаемо и очень легко то не могил бы сюда еще прописать код для того чтоб открытая сделка переводилась в без убыток в +10 по прошествии 150 пунктов. Ссылка на комментарий Поделиться на другие сайты Поделиться
dim3535dim Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Посмотрел на индикатор PRM_v3, на основе которого Ваш советник написан. ИМХО не заморачивайтесь с ним, у него стрелки вверх и вниз на одном и том же баре стоят. Куда в этом случае будете открываться? Там немного не так, если в реальном времени тестировать, то видно что сигнал подается в одну сторону, а уже потом в другую(как я понял в начале и в конце свечи). Но даже это не главное, черт с ним с индикатором, мне интересно почему не получается написать эксперт на основе него, вроде все делаю как в учебниках описано а эффекта ноль, подскажите пожалуста в чем ошибка. Заранее спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
idolzhenko Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Есть советник который открывает и закрывает сделки по индикатору (не важно по какому), то есть индикатор красный значит селл, индикатор синий значит бай. допустим после открытия на селл, случайно вырубают электричество, потом врубают опять, при этом советник после установки соединения с инетом закрывает селл и опять открывает селл так как индикатор еще красный. Вопрос: что нужно прописать или изменит в коде советника чтоб после включения терминала если индикатор допустим красный еще то советник не закрывает открытый селл ждет пока цвет индикатора не изменится и как только станет синим то открывает сделку на бай и закрывает селл.то есть не тупо открывал сделки сразу после включения терминала, а после смены сигнала на сделку. если где то эту проблему описывали просто скажите что " уже писали " я найду. Если это решаемо и очень легко то не могил бы сюда еще прописать код для того чтоб открытая сделка переводилась в без убыток в +10 по прошествии 150 пунктов. А Вы не закрывайте ордера при запуске советника, а закрывайте противоположные ордера если поступил сигнал на открытие.Выложил куски кода из своих советников (все они в теме про МТС) if (InvestorTrend==LONG && main_ha_trend==LONG && ha_trend==LONG && vo_trend==TREND && adx_trend==LONG) // получили сигнал на покупку { while (CloseAllOpenOrders(1)!=true) // Закрываем все продажм { Print("Пока все не закроем - спать не пойдем!"); } can_sell=true; if (OrdersTotal()==0 && can_buy==true) // Если ничего не открыто и можем баить { if (ExtTakeProfit!=0) tp_price=Ask+ExtTakeProfit*Point; else tp_price=0; // Стоп-лосс вычисляем только 1 раз, у доливки стоп равен первому открытому ордеру if (ExtStopLoss!=0) sl_price=Bid-ExtStopLoss*Point; else sl_price=0; Print("sl = ", DoubleToStr(sl_price,4)); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,ExtSlippage,sl_price,tp_price,"EA_HA_MA",Magic,0,CLR_NONE); if (ticket<0) { error=GetLastError(); Print("Ошибка открытия ордера BUY #", error, " ", ErrorDescription(error)); } else can_buy=false; // Выставляем флаг совершения сделки, чтобы не открывать ордера на каждом новом баре } код трала if (ExtTrailing==true) { for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) { if (!ExtProfitTrailing || (Bid-OrderOpenPrice())>ExtTrailingStop*Point) { if (OrderStopLoss()<Bid-(ExtTrailingStop+ExtTrailingStep-1)*Point) { open_price=OrderOpenPrice(); tp_price=OrderTakeProfit(); if (IsTradeAllowed()) { if (!OrderModify(OrderTicket(), open_price, Bid-ExtTrailingStop*Point, tp_price, 0, clModifyBuy)) { Print("Ошибка изменения ордера BUY #",GetLastError()); } } } } } if (OrderType()==OP_SELL) { if (!ExtProfitTrailing || OrderOpenPrice()-Ask>ExtTrailingStop*Point) { if (OrderStopLoss()>Ask+(ExtTrailingStop+ExtTrailingStep-1)*Point || OrderStopLoss()==0) { open_price=OrderOpenPrice(); tp_price=OrderTakeProfit(); if (IsTradeAllowed()) { if (!OrderModify(OrderTicket(), open_price, Ask+ExtTrailingStop*Point, tp_price, 0, clModifySell)) { Print("Ошибка изменения ордера SELL #",GetLastError()); } } } } } } } } Ссылка на комментарий Поделиться на другие сайты Поделиться
ЛЮТЫЙ Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Благодарю!Попробую разобраться, дело в том что я еще не сильен в мускуле думал мне пальцем ткнут куда все это вставить в моем советнике)))))))Ну да ладно разберёмся. Ссылка на комментарий Поделиться на другие сайты Поделиться
idolzhenko Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Благодарю!Попробую разобраться, дело в том что я еще не сильен в мускуле думал мне пальцем ткнут куда все это вставить в моем советнике)))))))Ну да ладно разберёмся. Кидайте Вашего советника на почту мой_ник_на _мастерфорекс@yahoo.com, я исправлю Вашего советника. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения