[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 528

 

Всем привет!

Попытался написать свой первый советник:-), но возникли некоторые трудности.

Логика советника следующая, имеется индикатор который отображает максимум и минимум за последние  n баров, при пробое максимума или минимума должен открываться ордер.

Когда  присоединяю советник к графику сразу открывается открывается позиция SELL. Не могу понять почему так происходит.

Мне кажется что ошибка в функции iCustom() которая передает параметры индикатора.

Советник и индикатор прикрепил. 

Файлы:
xox.mq4  10 kb
 
А вот и индикатор.
Файлы:
go_go_1.mq4  2 kb
 
Pacman:

Всем привет!

Попытался написать свой первый советник:-), но возникли некоторые трудности.

Логика советника следующая, имеется индикатор который отображает максимум и минимум за последние  n баров, при пробое максимума или минимума должен открываться ордер.

Когда  присоединяю советник к графику сразу открывается открывается позиция SELL. Не могу понять почему так происходит.

Мне кажется что ошибка в функции iCustom() которая передает параметры индикатора.

Советник и индикатор прикрепил. 

Вы 0-вой индекс индикаторных массивов не заполняете, 

   for(k=1; k<=Quant_Bars; k++)
      {
       Line_1[k]= Minimum;
       Line_2[k]= Maximum;
      }

  а к нему обращаетесь: 

   double L_1= iCustom(NULL,0,"Go_go",K,0,0);  //Линия минимума
   double L_2= iCustom(NULL,0,"Go_go",K,1,0);  //Линия максимума 

 Немножко (структурно) кривовато, НО для первого раза сойдёт. Мой совет: "Сразу привыкайте к правильным подходам написания кода. Например, использование в коде этого условия: 

       if(Total==0 && Opn_B==true)              //Открытых ордеров нет + 
малограмотно, потому, что рано или поздно Вы из тестера перейдёте на on-line торговлю, а там бывает работают параллельно несколько советников и такой код работать не будет.
 
Pacman:
А вот и индикатор.

Чем Вам не нравятся функции iHighest() и iLowest()?
 
 
0x как раз и обозначает 16-ричное.
 
Доброго утра! Не работает условие
 
bool CCInapravlenie=false;
if( CCI_50S>100&&CCI_50<100 ||CCI_50S>0&&CCI_50<0|| CCI_50S>-100&&CCI_50<-100 )CCInapravlenie=true;

if(CCInapravlenie){ imja = DoubleToStr(Time[0], 0); 
ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iLow(NULL,0,0)-0.0001);ObjectSet(imja, OBJPROP_ARROWCODE, 241);
ObjectSet(imja, OBJPROP_COLOR , Yellow); // стрелка жолтая 
}//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Я уже строку с ифом рассматривал-рассматривал, рассматривал-рассматривал.... Есть же ведь какая-то причина, я может зашорился и чего-то простое и элементарное не вижу, бывает ведь.

Утром смотрел. Выходил. Пришол, вновь смотрю Вроде куда уже проще, иф, больше, меньше.. Совсем не пойму.



А это у меня под стартом
double EMA_10 = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double EMA_20 = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double LMA_100 =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 0);
double МА_30 = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 0);
double CCI_50 = iCCI( NULL, 0, 50, PRICE_CLOSE, 0);

double EMA_10S = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 1);
double EMA_20S = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
double LMA_100S =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 1);
double МА_30S = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1);
double CCI_50S = iCCI( NULL, 0, 50, PRICE_CLOSE, 1);


п.с. Это всё часть такого условия стратегии

EMA – период 10 пересекает с верху в низ EMA – период 200 , CCI пересекает уровень 0,100 или-100 с вверху в низ; Свеча закрывается или находится ниже LMA – период 100
 
TheXpert:
0x как раз и обозначает 16-ричное.

Спасибо.
 

Нет жолтых стрелок вообще. Чёрт его знает. И притом, что зиркальное условие то работает!!!!

Зиркальное условие

bool napravlenieCCI=false;
 if( CCI_50S<100&&CCI_50>100 ||CCI_50S<0&&CCI_50>0|| CCI_50S<-100&&CCI_50>-100  )napravlenieCCI=true;
  if(napravlenieCCI){  string imja = DoubleToStr(Time[0], 0);
  ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iHigh(NULL,0,0)+0.0004); 
  ObjectSet(imja, OBJPROP_ARROWCODE, 242);
  Print(" ObjectSet242  ", GetLastError());
  ObjectSet(imja, OBJPROP_COLOR , Red);Print(" сOBJPROP_COLO  ", GetLastError());}

Скрин 

 

 
TarasBY:

Вы 0-вой индекс индикаторных массивов не заполняете, 

  а к нему обращаетесь: 

 Немножко (структурно) кривовато, НО для первого раза сойдёт. Мой совет: "Сразу привыкайте к правильным подходам написания кода. Например, использование в коде этого условия: 

малограмотно, потому, что рано или поздно Вы из тестера перейдёте на on-line торговлю, а там бывает работают параллельно несколько советников и такой код работать не будет.


Спасибо за ответ! 

Буду знать. Необходимо больше изучать массивы.

А условие "Total==0" я написал чтоб побыстрее проверить свою идею на практике. Сейчас пороюсь в Code Base, попробую найти что-то похожее чтоб исправить это условие.

Я абсолютно с Вами согласен, необходимо учиться писать код правильно. Буду исправляться.

Большое спасибо за помощь. 

 



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