Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 313

 
Нужна критика по поводу хелпа к советнику https://docs.google.com/document/d/1Bkqu7NzSj8mrNsa5iO8lB6UmKNCJ4YiaY-wKXzbF3Wo/pub
 
Burger:
Нужна критика по поводу хелпа к советнику https://docs.google.com/document/d/1Bkqu7NzSj8mrNsa5iO8lB6UmKNCJ4YiaY-wKXzbF3Wo/pub


Люблю критиковать, но там много - чуть прошелся по первому абзацу

что-то архив не крепится (( щас на файлообменник кину

 
VladislavVG:

Если это всегда ближайший, то можно и совсем просто и учет магиков, естественно, не нужен. Но об этом ничего от PGM5 не слышно, а в общем случае это может оказаться и не ближайший по цене, а отстоящий от текущей цены на какое-угодно расстояние и между ними могут оказаться ордера выставленные из других соображений: мы же ничего об алгоритме принятия решений не знаем. Речь шла только о связанных ордерах.
У меня почему-то в памяти отложилось, что нужно удалять ближайший. Что остальные все дальше и открыты по другим каким-то условиям. А раз ближайший отложенный, противонаправленный рыночному, то все данные для его безошибочного нахождения у нас имеются.
 
PGM5:
Благодарю за поддержку. А не подскажете, где искать ответ на этот вопрос. Да, еще: ордера должны устанавливаться при срабатывании ордера и при срабатывании takeprofit и перед этим должен удалиться ближайший. Заранее благодарен.

Вы тут уже начинаете ТЗ писать. А сами-то хоть что-то начали делать? Или ждёте рыбку? В этой ветке бесплатно помогают страждущим научиться программировать на mql4. а не тем, кто хочет бесплатно получить готовое решение.
 
43
alexey1979621 29.11.2013 11:52 #

Приветствую всех! Прошу помощи в решении одной интересной задачи. Есть советник, особенностью которого является то, что после получения профита следующие сделки от 1 до 4 закрываются по стоп лоссу, затем опять профит. Советник открывает сделки по сигналу индикатора. Чтобы исключить следующие после профита убыточные сделки, необходимо пропускать возникающие сигналы от индикатора, т.е. не заключать сделку (1,2,3,4) после получения профита. Для этого имеется функция Sig. Однако, сдается мне, что я неверно написал эту функцию, т.к. с ней советник вообще не открывает ордера, а без нее - работает все очень четко. Также возможно ошибка в условии. А в общем .... хрен его знает - вторую неделю не могу сдвинуться с этого "затыка". Подскажите умные люди, где ошибка?

Да, signal - это количество сигналов после получения профита, а pynkt - это размер профита в пунктах.

Буду благодарен за помощь.

void CheckForOpen()
{
   int ticket, STOPLEVEL;
   double Price, SL, TP; 
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);


   double MA1Low = NormalizeDouble (iMA(NULL,0,MA_Period_2,MA_Shift_2,MA_Method_2,0,1), Digits); 
   double MA2High = NormalizeDouble (iMA(NULL,0,MA_Period_2,MA_Shift_2,MA_Method_2,1,1), Digits);
   
 
  
   if(Volume[0]>1) return;

    // продажа
   if (Open[1]>Close[1] && Open[1] > MA1Low && Close[1] < MA1Low)
   
{
      if(Pro(1,100))

   {
       ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",1000,0,Red);
      return;
    }
   
  }  
//---- buy conditions
   // покупка
  if (Open[1]<Close[1] && Open[1] < MA2High && Close[1] > MA2High)
 
 { 
   if(Pro(1,100))
   {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,"Pattern_1",1000,0,Blue);
      return;
   }       
   }
}
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Sig(int signal,int pynkt)
 {
  static int cnt = 0;
  static datetime tm;
  if(Time[0] == tm) return(false);
  tm = Time[0];
  if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) == true)
   {
    cnt = cnt + 1;
    if(OrderType() == OP_BUY && OrderClosePrice() - OrderOpenPrice() < pynkt*Point) cnt = 0;
    if(OrderType() == OP_SELL && OrderOpenPrice() - OrderClosePrice() < pynkt*Point) cnt = 0;
    if(cnt >= signal) return(true);
   }
  return(false);
 }
//+------------------------------------------------------------------+
 
artmedia70:
Вы тут уже начинаете ТЗ писать. А сами-то хоть что-то начали делать? Или ждёте рыбку? В этой ветке бесплатно помогают страждущим научиться программировать на mql4. а не тем, кто хочет бесплатно получить готовое решение.



Здравствуйте. По поводу программирования: я только начинающий. Из информации и источников для обучения - форум и учебник. Поначалу все понимал, но как дошел до общих функций, так что-то начал недопонимать, кстати во время переписки я кое-во что вник.. Взял скрипт оттуда, скрипт оттуда, кое-что подчеркнул из форума- в итоге получился простенький советник. Прогнал его на тестере- выдал прибыль, небольшую - 10% за 2 месяца, но стабильную (прямая баланса под углом идет вверх).Попробовал на демке - приносит прибыль, но скрипты простые :ордера не всегда выставляются, а из-за одного невыставленного ордера ломается все. Попробовал на реале - ордера выставляются все ( но это еще не было ГЭПов), приносит прибыль, но очень много открывается ненужных позиций. Я понял, что простыми скриптами и функциями это не решить, вот и обратился за помощью. Прибыль советник приносит, но кое- где ему надо "помогать" руками. Со временем думаю эту "помощь" автоматизировать.
 
alexey1979621:
43
alexey1979621 29.11.2013 11:52 #

Приветствую всех! Прошу помощи в решении одной интересной задачи. Есть советник, особенностью которого является то, что после получения профита следующие сделки от 1 до 4 закрываются по стоп лоссу, затем опять профит. Советник открывает сделки по сигналу индикатора. Чтобы исключить следующие после профита убыточные сделки, необходимо пропускать возникающие сигналы от индикатора, т.е. не заключать сделку (1,2,3,4) после получения профита. Для этого имеется функция Sig. Однако, сдается мне, что я неверно написал эту функцию, т.к. с ней советник вообще не открывает ордера, а без нее - работает все очень четко. Также возможно ошибка в условии. А в общем .... хрен его знает - вторую неделю не могу сдвинуться с этого "затыка". Подскажите умные люди, где ошибка?

Да, signal - это количество сигналов после получения профита, а pynkt - это размер профита в пунктах.

Буду благодарен за помощь.


Функция Sig() при отсутствии истории ордеров запрещает открывать сделки (возвращает false)
 
Vinin:

Функция Sig() при отсутствии истории ордеров запрещает открывать сделки (возвращает false)
Я полагал, что история в тестере моделируется (значит ошибался). Получается, что необходимо делать функцию поиска последнего ордера, по симолу, меджику и отбрасывать отложеные. Умом я это пониманию (если мыслю в правильном направлении), только вот ручками исполнить код не могу. Можно ли подбросить подсказку? Спасибо за помощь.
 
alexey1979621:
Я полагал, что история в тестере моделируется (значит ошибался). Получается, что необходимо делать функцию поиска последнего ордера, по симолу, меджику и отбрасывать отложеные. Умом я это пониманию (если мыслю в правильном направлении), только вот ручками исполнить код не могу. Можно ли подбросить подсказку? Спасибо за помощь.
Все подсказки Ваши!
Документация Учебник

И функции:

GetIndexLastPos - Возвращает индекс последней открытой позиции или -1
GetLotLastPos - Возвращает размер лота последней открытой позиции или -1

и много других очень полезных!

Причина обращения: