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

 
hoz:

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

Нет, лот не нормализовывал. В тестере никогда с этим не сталкивался.. И причём тут лот, к объекту (ошибка 4200)?

Как это при чём тут лот? Если лот неверный, то вызывается ф-ция обработки ошибок, которая и вызовет построение объектов.

Если лот будет неверным, то и в тестере ошибка будет. Вы говорите, что объекты не строите, но в функции

void pr (string txt)

объекты строятся-таки:

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

Скорей всего именно там собачка и порылась. Там ковыряйте. Закомментируйте в этой функции вывод графики. Если ошибка уйдёт - значит ищите причину её возникновения в функции

void pr (string txt)
 
vovak_85:

Добрый день! В программировании на mql новичек. Возникла след проблема-есть пользовательский индикатор, не мной написанный, он выдает сигналы на покупку и продажу в виде стрелок, для этого в индикаторе соответственно есть два буффера, проблема заключается в том что я не могу корректно считать данные сигналы из индикатора в советник, чтобы сделать покупку или продажу.

Код индикатора:

...

Чтобы коректно вставить код на форуме нажмите на SRC и потом скопируйте код.

 

Добрый день! В программировании на mql новичек. Возникла след проблема-есть пользовательский индикатор, не мной написанный, он выдает сигналы на покупку и продажу в виде стрелок, для этого в индикаторе соответственно есть два буффера, проблема заключается в том что я не могу корректно считать данные сигналы из индикатора в советник, чтобы сделать покупку или продажу.

Код индикатора:

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
буду знать, спасибо! исправить?
В своём предыдущем посте поправь.
 
vovak_85:
буду знать, спасибо! исправить?
Конечно! Удалив ненужную портянку!
 
hoz:

pr - функция печати. А ошибка, это уже стандартная константа. По логике вообще не приемлимо быть такому раскладу. Если всё-таки есть подозрение у Вас на функцию pr, то вот она:


Ну так замени на обычный print и смотри журнал.

там создается объект, имя объекта неуникально, вот и ошибка при создании объекта.

 
artmedia70:

Как это при чём тут лот? Если лот неверный, то вызывается ф-ция обработки ошибок, которая и вызовет построение объектов.

Если лот будет неверным, то и в тестере ошибка будет. Вы говорите, что объекты не строите, но в функции

объекты строятся-таки:

Скорей всего именно там собачка и порылась. Там ковыряйте. Закомментируйте в этой функции вывод графики. Если ошибка уйдёт - значит ищите причину её возникновения в функции



Я про это уже и сам подумал, и только что Ваш ответ ударил в ту же точку. Проблема исчезла с закомментированием мест с данной функцией. Видимо, при использовании её, на входе нужно все объекты удалять сразу, верно? Т.е. в самом начале функции pr, имею ввиду...
 
hoz:

Я про это уже и сам подумал, и только что Ваш ответ ударил в ту же точку. Проблема исчезла с закомментированием мест с данной функцией. Видимо, при использовании её, на входе нужно все объекты удалять сразу, верно? Т.е. в самом начале функции pr, имею ввиду...

Мне, честно говоря, неизвестна логика вашей функции. Должна она удалять объекты или должна их строить, мне неизвестно. Скажите, что хотите от неё и мы тут посмотрим, где заковыка в логике. Впрочем, раз ф-ция пытается построить граф. объект, но выдаёт ошибку, значит он уже есть. Вот что дальше по логике вашей программы? Можно построить новый объект с другим именем (например, к именам объектов добавляйте текущее время (TimeToStr(TimeCurrent()))), либо, если объект уже есть, но нужно изменить его свойства, то не стройте объект по-новой, а просто измените его свойства. Тогда ошибка не появится больше.

Всё просто. Главное - знать, чего хочется... :)

 
vovak_85:

Добрый день! В программировании на mql новичек. Возникла след проблема-есть пользовательский индикатор, не мной написанный, он выдает сигналы на покупку и продажу в виде стрелок, для этого в индикаторе соответственно есть два буффера, проблема заключается в том что я не могу корректно считать данные сигналы из индикатора в советник, чтобы сделать покупку или продажу.

Код индикатора:


Вы уверены что у Вас все фигурные скобки стоят. Местами их не хватает. Логика из-за этого хромает. И вернее всего результат получается не тот что Вы ожидали
Причина обращения: