[Архив!] Напишу советника бесплатно - страница 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
[Deleted]  
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, появилось много сюрпризов(



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

[Deleted]  
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)

....

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

[Deleted]  
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