Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 95

 
hoz:

Sim. As variáveis com i_ são variáveis de entrada (da palavra intut, que pode ser alterada pelo usuário...), e pt também é uma variável global, que é visível em todos os lugares...

Não, o lote não foi normalizado. Nunca o encontrei no testador... E o que muito tem a ver com o objeto (erro 4200)?

O que muito tem a ver com isso? Se o lote for inválido, a função de tratamento de erros é chamada, o que causará a construção de objetos.

Se o lote estiver errado, haverá um erro no testador. Você diz que não constrói objetos, mas na função

void pr (string txt)

ainda constrói objetos:

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);}

É provavelmente lá que o bicho está enterrado. Talvez você tenha que fazer algo lá. Comente a saída do gráfico nesta função. Se o erro tiver desaparecido, você está procurando a razão por trás dele na função.

void pr (string txt)
 
vovak_85:

Olá, sou novo na programação da mql. Eu tenho um problema, tenho um indicador personalizado, não escrito por mim, ele gera sinais de compra e venda na forma de setas, para este fim existem dois buffers no indicador, o problema é que eu não consigo ler corretamente os sinais do indicador para o Expert Advisor para fazer uma compra ou venda.

O código para o indicador:

...

Para colar o código corretamente no fórum, clique no SRC e depois copie o código.

 

SRC para inserir código!!!

e não é um impedimento, é altamente recomendável!

Navegador do fórum e respostas às perguntas mais freqüentes. Leitura altamente recomendada! ( 1 2 3 4 5 6 ) 52 18.02.2011 FAQ

 

Olá, sou novo na programação da mql. Eu tenho um problema, tenho um indicador personalizado, não escrito por mim, ele gera sinais de compra e venda na forma de setas, para este fim existem dois buffers no indicador, o problema é que eu não consigo ler corretamente os sinais do indicador para o Expert Advisor para fazer uma compra ou venda.

Código indicador:

#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:
Eu vou saber, obrigado! Consertar?
Correto em seu posto anterior.
 
vovak_85:
Eu vou saber, obrigado! Consertar?
É claro! Removendo um desmancha-prazeres desnecessário!
 
hoz:

pr é uma função de impressão. E o erro, esta já é uma constante padrão. Logicamente, isto não é aceitável de forma alguma. Se você ainda suspeita da função pr, aqui está ela:


Bem, substitua-o com a impressão habitual e observe o diário de bordo.

existe um objeto criado, o nome do objeto não é único, é por isso que existe um erro ao criar um objeto.

 
artmedia70:

O que isso tem a ver com o lote? Se o lote estiver errado, então a função de tratamento de erros é chamada e isso causará objetos de construção.

Se o lote estiver errado, haverá também um erro no testador. Você diz que não constrói objetos, mas na função

objetos ainda estão sendo construídos:

Provavelmente é aí que reside o problema. Talvez você tenha que fazer algo lá. Comente a saída do gráfico nesta função. Se o erro se foi, você está procurando a causa do erro na função



Eu mesmo já havia pensado nisso, e a sua resposta simplesmente atingiu o mesmo ponto. O problema desapareceu com o comentário de lugares com esta função. Aparentemente, ao utilizá-lo, você tem que apagar todos os objetos na entrada de uma só vez, certo? Isto é, logo no início da função de pr.
 
hoz:

Eu mesmo já pensei sobre isso, e só agora sua resposta atingiu o mesmo ponto. O problema desapareceu com o comentário de lugares com esta função. Aparentemente, ao utilizá-lo, você tem que apagar todos os objetos na entrada de uma só vez, certo? Isto é, logo no início da função pr, quero dizer...

Sinceramente, não conheço a lógica de sua função. Se deve apagar objetos ou construí-los, não sei. Diga-me o que você quer que ele faça e veremos onde a lógica está errada. Entretanto, se a função tentar construir um objeto gráfico, mas falhar, significa que ele já existe. Então, o que segue de acordo com a lógica de seu programa? Você pode construir um novo objeto com um nome diferente (por exemplo, adicionar a hora atual ao nome do objeto (TimeToStr(TimeCurrent()))) ou, se você já tem um objeto mas precisa alterar suas propriedades, não construa-o novamente, mas simplesmente mude suas propriedades. Então o erro não aparecerá novamente.

É tão simples quanto isso. O principal é saber o que você quer. :)

 
vovak_85:

Olá, sou novo na programação da mql. Eu tenho um problema, tenho um indicador personalizado, não escrito por mim, ele gera sinais de compra e venda na forma de setas, para este fim existem dois buffers no indicador, o problema é que eu não consigo ler corretamente os sinais do indicador para o Expert Advisor para fazer uma compra ou venda.

Código indicador:


Você tem certeza de que tem todos os parênteses curvilíneos no lugar. Eles estão faltando em alguns lugares. É por isso que sua lógica é falsa. E muito provavelmente o resultado não é o que você esperava.
Razão: