помогите пож. исправить советник

 
Здравствуйте, помогите исправить совет! Нужно сделать так чтоб он работал внутырь канала но действия делал один в один как и сейчас, сейчас он рабатает на ружу канала, мне просто нужно вместо стоп ордероп чтоб он ставил лимиты и чтоб трейлин работал в обратку вобщем схема работы такая же как и в этом только зеркалом или на выворот, ну обьяснил как смог выручайте очень нужно!
Файлы:
indexexpg.rar  3 kb
 

декомпил вне закона

 
выручайте очень нужно!

Помогать разбираться с декомпилированными советниками вроде как нарушение этики.

Получается - подкладываешь свинью такому же как и ты

Скорее всего тут тебе не помогут

 

Здраствуйте. Написал код для советника. Не пойму почему не работает. 

Тут просто алгоритм, пока не доработан, хотел сначала проверить его, правильно ли он работает, но при работе не выдаёт никаких сообщений, хотя по коду должен.

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

//+------------------------------------------------------------------+
//|                                                        Дивер.mq4 |
//|                                              FOReignEXchange2008 |
//|                                    http://www.forexsignal.sk6.ru |
//+------------------------------------------------------------------+
#property copyright "FOReignEXchange2008"
#property link      "http://www.forexsignal.sk6.ru"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern double X = 0.02;
double AOmax1,    //первый максимум индикатора
       AOmax2,    //второй максимум индикатора
       max1,      //первый максимум цены
       max2,      //второй максимум цены
       AOmin1,    //первый минимум индикатора
       AOmin2,    //второй минимум индикатора
       min1,      //первый минимум цены
       min2;      //второй минимум цены

int start()
  {



//+----------------------------------------------------------------------------------------------+
//|             Поиск максимумов индикатора и цены, нахождение медвежьей дивергенции                                   |
//+----------------------------------------------------------------------------------------------+
  
  if (iAO(0,0,0)>X) //если индикатор выше нулевой линии, то выполняются два цикла
  {
//+----------------------------------------------------------------------------------------------+  
          while (iAO(0,0,0) > X/4)    //первый цикл-выполняется до тех пор пока индикатор 
          {                           //не приблизился к нулевой линии
             if (iAO(0,0,0)>AOmax1)
             AOmax1=iAO(0,0,0);
             return;    
             if (Bid>max1)
             max1=Bid;
             return;
          return;
          }
          Alert("AO=",AOmax1, "    максимум1=", max1);  //выводим на печать значения максимумов
//+----------------------------------------------------------------------------------------------+                          
          while (AOmax1>AOmax2 && (max1+5*Point)>max2 && iAO(0,0,0) > -X/2)
                                                        //второй цикл-выполняется до тех пор, пока   
          {                                            //первые максимумы выше второго и индикатор 
                                                       //не на много опускается ниже нулевой линии
             if (iAO(0,0,0)>AOmax2)
             AOmax2=iAO(0,0,0);
             return;   
             if (Bid>max2)
             max2=Bid;
             return;          
          return;
          }   
          Alert("AO=",AOmax2, "    максимум2=", max2);    //выводим на печать значения максимумов 
//+----------------------------------------------------------------------------------------------+     
          if (AOmax1>AOmax2 && max2>max1)             //выводим на печать сообщение о дивергенции
          {
          Alert("Внимание, дивергенция!", "Максимум1=", max1, "Максимум2=", max2);
          OrderSend(Symbol(),OP_SELLLIMIT,0.1,max2+10*Point,3,max2+20*Point,max2-40*Point);
          return;   
          }                  
  return;
  }   
  
  
  
//+----------------------------------------------------------------------------------------------+
//|              Поиск минимумов индикатора и цены, нахождение бычьей дивергенции                                 |
//+----------------------------------------------------------------------------------------------+

  if (iAO(0,0,0)< -X)  //если индикатор ниже нулевой линии, то аналогично выполняются два цикла
  {
//+----------------------------------------------------------------------------------------------+  
            while (iAO(0,0,0) < -X/4)
          {
             if (iAO(0,0,0)<AOmin1)
             AOmin1=iAO(0,0,0);
             return; 
             if (Bid<min1)
             min1=Bid;
             return;                
          return;
          }          
          Alert("AO=",AOmin1, "    минимум1=", min1);
//+----------------------------------------------------------------------------------------------+                            
          while (AOmin1<AOmin2 && (min1-5*Point)<min2 && iAO(0,0,0) < X/2)
          {
             if (iAO(0,0,0)<AOmin2)
             AOmin2=iAO(0,0,0);
             return;    
             if (Bid<min2)
             min2=Bid;
             return;             
          return;
          }   
          Alert("AO=",AOmin2, "    минимум2=", min2);
//+----------------------------------------------------------------------------------------------+     
          if (AOmin1<AOmin2 && min2<min1)
          {
          Alert("Внимание, дивергенция!", "Минимум1=", min1, "Минимум2=", min2);
          OrderSend(Symbol(),OP_BUYLIMIT,0.1,min2-10*Point,3,min2-20*Point,min2+40*Point);
          return;   
          }                 
  return;
  } 
//+----------------------------------------------------------------------------------------------+
      
}
 
Глобальную переменную Х ставил соответсвующие индикатору.
 

Придется видно все-таки Вам учебник читать)

          while (iAO(0,0,0) < -X/4)
          {
             if (iAO(0,0,0)<AOmin1)
             AOmin1=iAO(0,0,0);
             return; 
             if (Bid<min1)
             min1=Bid;
             return;                
             return;
          }      

Блин, я даже не могу показать, что тут ошибка.... Вы представляете как вообще работает советник? Знаете что советник запускается каждый тик? Соответственно при каждом запуске советника, iAO(0,0,0) будет просто константой, а Вы тут такие циклы лепите. И вообще циклы while это не для новичка. Далее смысл двух return; подряд? Короче, тут все не в дугу, просто выкинуть, даже исправлять нечего.

Хотите добрый совет? Дивергенции и их поиск не самая простая задача. Для новичка может оказаться вообще неподъемной, просто бесцельно потратите время, и полностью разочаруетесь... Начните с написания самого простого эксперта, типа цена закрытия больше цены открытия бара покупаем, меньше продаем. Немечтайте о профите ближайшее время, не все "зубры" этого достигют. Посмотрите пример типичной программы в учебнике. Возьмите простенький эксперт и досконально разбирите его, что бы понять до последней запятой. Нахрапом написать, а уж тем более получить профит у Вас тут не получится. Ссылку на учебник я у Вам кажется уже давал (она вверху странице форума), есть еще очень хорошее чтиво написаное весьма просто 'Обзор статей Rosh'а: эксперты в MetaTrader 4' сам с него начинал.

 
Figar0 >>:

Придется видно все-таки Вам учебник читать)

Блин, я даже не могу показать, что тут ошибка.... Вы представляете как вообще работает советник? Знаете что советник запускается каждый тик? Соответственно при каждом запуске советника, iAO(0,0,0) будет просто константой, а Вы тут такие циклы лепите. И вообще циклы while это не для новичка. Далее смысл двух return; подряд? Короче, тут все не в дугу, просто выкинуть, даже исправлять нечего.

Хотите добрый совет? Дивергенции и их поиск не самая простая задача. Для новичка может оказаться вообще неподъемной, просто бесцельно потратите время, и полностью разочаруетесь... Начните с написания самого простого эксперта, типа цена закрытия больше цены открытия бара покупаем, меньше продаем. Немечтайте о профите ближайшее время, не все "зубры" этого достигют. Посмотрите пример типичной программы в учебнике. Возьмите простенький эксперт и досконально разбирите его, что бы понять до последней запятой. Нахрапом написать, а уж тем более получить профит у Вас тут не получится. Ссылку на учебник я у Вам кажется уже давал (она вверху странице форума), есть еще очень хорошее чтиво написаное весьма просто 'Обзор статей Rosh'а: эксперты в MetaTrader 4' сам с него начинал.

Почему iAO(0,0,0) будет просто константой? Очень даже меняется...

А два return; подряд это конечно серьезнык косяк, в данном случае, радикально влияющий на профит.

 
Agurets писал(а) >>

А два return; подряд это конечно серьезнык косяк

А у вас там ещё их и 3.

В Вашем случаи легче сделать так:

int start()
{
   return (0);

   /* Здесь код программы */

}
 

Да, чё-та я понаставил   return.    Я думал он после каждого оператора ставится. Все убрал, оставил один в конце кода. 

Попробую так

            while (iAO(0,0,0) < -X/4)
          {
             if (iAO(0,0,0)<AOmin1)
             AOmin1=iAO(0,0,0);
             if (Bid<min1)
             min1=Bid;
           }          
          Alert("AO=",AOmin1, "    минимум1=", min1);

Подожду когда цикл кончится. Должно появится сообщение. Если появится, то поставлю на тест по всем парам на 5-ти минутках. К вечеру, думаю, будут первые результаты.

Спасибо за помощь!

 

Думаю, ещё счётчик поставить надо        i ++;     внутри цикла

 
FOReignEXchange писал(а) >>

Подожду когда цикл кончится. Должно появится сообщение. Если появится, то поставлю на тест по всем парам на 5-ти минутках. К вечеру, думаю, будут первые результаты.

Это пора в перлы заносить) Зачем что-то ждать? в iAO(0,0,0) последний параметр что??? Вписываете вместо него переменную и в цикле пробегаете по значениям индикатора.. Зачем спрашивать какой-то помощи если Вы ее полностью игнорируете? Ну да дело Ваше, кто-то из великих сказал "Если все будут умными, на их фоне легко самому показаться неучем...", наверно в чем-то он был прав...

В данном случае, это моя последняя попытка, перепечатаю Вам кусок справки по вызову этого индикатора, который помимо всего прочего говорит об ошибке в указании первого параметра вызоова индикатора:

double iAO( string symbol, int timeframe, int shift)
Расчет Awesome oscillator.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Пример:
  double val=iAO(NULL, 0, 2);

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