[Архив!] Напишу советника бесплатно - страница 11

 
skylord писал(а) >>

Здраствуйте.

Недавно только начал изучать MQL, стараюсь написать советник...

Советник на основе индикатора sidus v.2, Нужно чтоб он откривал позицыю в указаном советником направлении только при рождении нового бара, тоисть на первому тику проверял есть ли сигнал на предидущем баре, и какой.Ордера - с фиксированым стопом и тейком. Файл индикатора прикрепляю...

У меня чтото никак не получается считать этот сигнал((

Помогите, иль хоть подскажите как это сделать...

Советник на индикаторе Sidus

мож это те поможет или поиск поможет!

или второе дыхание!

 

Спасибо vvavva. Ето конешно хорошо, но он в отличии от индикатора пропускает и делает много левых сигналов, а это уже не то чно нужно (

Подскажите кто нить,  как можно запросить состояния буфера индикатора на предыдущем баре из советника? если он заполняет буфер так:

if (sigCurrent==1 && sigPrevious==2)
  {
  ExtMapBuffer4[i-1] = High[i-1]-5*Point;
  //ExtMapBuffer3[i] = Ask;
  entry=true;
  entry_point=Ask;
  } 
  else if (sigCurrent==2 && sigPrevious==1)
  {
  ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
  //ExtMapBuffer4[i] = Bid;
  entry=true;
  entry_point=Bid;
   
  }
Советнику нужно совпадение условий, гдето таких:

  double Up;
  double Down;
  int res;

  Up=iCustom(NULL, 0,"sidus_v.2", 3, 1);
  Down=iCustom(NULL,0,"sidus_v.2",2,1);
//---- sell conditions
  if(Down==Low)  
  {
  res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
  return;
  }
//---- buy conditions
  if(Up==High)  
  {
  res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Blue);
  return;
  }

Но это неверно!!

Подскажите плиз как поступить в таком случае...

 

Здраствуйте.

по- тихонько торгую, пользуюсь 4 индюками, линии подержки сопротивления, тренды, бла, бла, бла... на экране глаза сломал, помогите вставить в индюк звуковой сигнал по стрелкам (бай, сел) и теже стрелки в истории пунктирной линией (перересованные им же)

Файлы:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Здраствуйте.

Недавно только начал изучать MQL, стараюсь написать советник...

Советник на основе индикатора sidus v.2, Нужно чтоб он откривал позицыю в указаном советником направлении только при рождении нового бара, тоисть на первому тику проверял есть ли сигнал на предидущем баре, и какой.Ордера - с фиксированым стопом и тейком. Файл индикатора прикрепляю...

У меня чтото никак не получается считать этот сигнал((

Помогите, иль хоть подскажите как это сделать...

Привет, просто пробежала код глазами, прости я ламер жуткий, могу ошибаться, конечно же, но индикатор не перерисовывает ли? Просто давай попробуем логически подумать

for(int i=0; i<limit; i++)
   {

считать с нулевого бара до всех баров в истории, счетчик увеличивать.

ExtMapBuffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);
     ExtMapBuffer2[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

ну тут все ясно

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

макдак пшел

if (pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if (pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Если макдак больше нуля и RSI больше 50 то сиг у нас равен 1, а если меньше то 2-м

Пока все верно

if (sigCurrent==1 && sigPrevious==2)
     {

так а вот тут я не поняла О_о, если одновременно выполняется условие, что макдак положительный и RSI больше 50 и макдак отрицательный и RSI меньше 50... так как ниже в коде прописано условие

sigPrevious=sigCurrent;

то мы можем их приравнять...

да и воровать будующее-дурной тон

ExtMapBuffer3[i-1]

Нет так не пойдет, давай заменим на вот так, точнее полностью переделаем, логику то мы уже знаем:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if(counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[i] = EMPTY_VALUE;
             SellBuffer[i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+1);
                 double s = iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+1);
                 
                
                
                 double a1 = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);
                 double s1 = iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if(a<s && a1>s1 &&d1>0)
               {
                    BuyBuffer[i] = Low[i] - iATR(NULL, 0, 14, i);
                    
               }
             if(a>s && a1<s1 &&d1<0)
               {
                    SellBuffer[i] = High[i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

А теперь смотри, печальная картинка выходит, сравни:

Хотя я могу конечно ошибаться и индикатор не перерисовывает, но тогда прости меня, и возможно тебе поможет использование цен открытия (особенно в РСИ), а не закрытия, для того, чтобы сигнал у тебя возникал ровно на том баре где и должен =(

 

Спасибо за заботу vtoroe_dyxanie ))) Индикатор писал конешно не я, по всем моим наблюдениям он показания свои не перерисовывает. Я его использую с первого тика следующего бара когда он уже закрепился. Поэтому мне и нужно на первом тике узнать в советнике что же было на предыдущем баре??? А почему же он будущее ворует?? Он же, вроде, на даном тике если такое совпадение есть sigCurrent присваивает единицу, и в конце переменной sigPrevious присваивает эту же sigCurrent:

sigPrevious=sigCurrent;

а потом на следующем тике если sigCurrent равно уже 2 и переменная sigPrevious естественно 1 заполняет буфер:

if (sigCurrent==1 && sigPrevious==2)
  {
  ExtMapBuffer4[i-1] = High[i-1]-5*Point;
  //ExtMapBuffer3[i] = Ask;
  entry=true;
  entry_point=Ask;
  } 

А на щет этого:

ExtMapBuffer3[i-1]

я и сам до конца не понимаю...

Но работает вроде нормально, стрелки рисует на баре на котором появляется сигнал!

А вот убрал -1, появилось много сюрпризов(



 
skylord >>:

Спасибо за заботу vtoroe_dyxanie ))) Индикатор писал конешно не я, по всем моим наблюдениям он показания свои не перерисовывает. Я его использую с первого тика следующего бара когда он уже закрепился. Поэтому мне и нужно на первом тике узнать в советнике что же было на предыдущем баре??? А почему же он будущее ворует?? Он же, вроде, на даном тике если такое совпадение есть sigCurrent присваивает единицу, и в конце переменной sigPrevious присваивает эту же sigCurrent:

sigPrevious=sigCurrent;

а потом на следующем тике если sigCurrent равно уже 2 и переменная sigPrevious естественно 1 заполняет буфер:

if (sigCurrent==1 && sigPrevious==2)
  {
  ExtMapBuffer4[i-1] = High[i-1]-5*Point;
  //ExtMapBuffer3[i] = Ask;
  entry=true;
  entry_point=Ask;
  } 

А на щет этого:

ExtMapBuffer3[i-1]

я и сам до конца не понимаю...

Но работает вроде нормально, стрелки рисует на баре на котором появляется сигнал!

А вот убрал -1, появилось много сюрпризов(



Но есть в нем еще один побочный ефект. Иногда, при выполнении условий, он сигнал подает а стрелки не рисует. Но когда я его кидаю наново на график все стрелки стают на свое место. Может както можна сделать чтоби он толи "компилился" на графике наново, или обновлял наново свои бефера???

 
skylord писал(а) >>

А почему же он будущее ворует?? Он же, вроде, на даном тике если такое совпадение есть sigCurrent присваивает единицу, и в конце переменной sigPrevious присваивает эту же sigCurrent:

sigPrevious=sigCurrent;

а потом на следующем тике если sigCurrent равно уже 2 и переменная sigPrevious естественно 1 заполняет буфер:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Ваша правда, невнимательная я...

Насчет: " Я его использую с первого тика следующего бара когда он уже закрепился. Поэтому мне и нужно на первом тике узнать в советнике что же было на предыдущем баре??? " И правда интересно, а нельзя ли использовать

double iCustom( .... int shift)

всезнающая справка говорит о том, что

shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

интересно, а так можно записать (интересно самой стало)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0,"sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0,"sidus_v.2", 3, i)>0)

....

так как оооочень ВумныЕ форумчане врядли снизойдут до двух нубов, ушла повышать квалификацию самостоятельно, ибо может пригодиться.

 
vtoroe_dyxanie писал(а) >>

Ваша правда, невнимательная я...

Насчет: " Я его использую с первого тика следующего бара когда он уже закрепился. Поэтому мне и нужно на первом тике узнать в советнике что же было на предыдущем баре??? " И правда интересно, а нельзя ли использовать

double iCustom( .... int shift)

всезнающая справка говорит о том, что

shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

интересно, а так можно записать (интересно самой стало)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0,"sidus_v.2", 3, 1)<0 && iCustom(NULL, 0,"sidus_v.2", 3, 0)>0)

....

так как оооочень ВумныЕ форумчане врядли снизойдут до двух нубов, ушла повышать квалификацию самостоятельно, ибо может пригодиться.

Нет не получится =(

Блин, а как тогда решить этот вопрос? Ну раз вы ветку уже подняли: https://www.mql5.com/ru/forum/117268 будем следить =)

 
vtoroe_dyxanie писал(а) >>

Нет не получится =(

Блин, а как тогда решить этот вопрос? Ну раз вы ветку уже подняли: 'Как из советника узнать направление' будем следить =)

можно за компанию в слежке поучавствовать!?)

 
vtoroe_dyxanie писал(а) >>

Нет не получится =(

Блин, а как тогда решить этот вопрос? Ну раз вы ветку уже подняли: 'Как из советника узнать направление' будем следить =)

привет! помнишь я у тебя просил помощи? если не трудно можешь еще подсказать? то что ты тогда для меня сделала это то что я сейчас написал (я хотел так что бы индикатор показывал ближайшие крайние таймфреймы отображалтсь в одном окне!) это то????

Файлы:
test1.mq4  6 kb
Причина обращения: