Ajuda na codificação - página 246

 
macerina:
Obrigado Mladen pelo código ... Isto tem a dupla comparação macd e 50 crossover como você explicou na lógica anterior.

macerina

A diferença é que na versão gráfica aspen o sinal secundário de entrada é uma cruz de rsi e sua linha de sinal, enquanto na versão metatrader o sinal secundário é uma cruz de rsi de uma linha de 50. A parte Macd é a mesma (você deve pegar o sinal de barra fechada - é assim que é feito na versão gráfica do aspen)

 

obrigado pela informação mladen ... é possível definir a opção no mesmo indicador para selecionar 50 linhas cruzadas e sinal de linha cruzada ...

Agradecimentos em Advance

 
mladen:
sulaimoney Tudo está bem com esses procedimentos. Anexar um indicador simples que mostra que tudo está bem quando as chamadas para esses procedimentos tworld são executadas uma após a outra. Verificar o resto do código, já que o erro não está nesses dois procedimentos.

Olá Mladen

Eu verifiquei através do código e encontrei alguns erros que eu substituí.

Agora estou tentando usar o valor de

duplo preço de última ordem = 0;

E

int bscount = 0;

Como variáveis em um escopo global wirhin the ea tal que elas podem ser chamadas, por exemplo, de NewOrder nulo()

// OnEveryTick

void LastBuySellOrder() // Anula todos os pedidos abertos para selecionar o último pedido (compra/venda) OnEveryTick

{

duplo preço de última ordem = 0;

data/hora últimaTempo = 0;

data/hora de fechamentoTempo = 0;

últimoTicket = -1; // Nenhum aberto.

para (int i=OrdensTotal()-1; i >= 0; i--)

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId

&&( OrderType() == OP_BUY || OrderType() == OP_SELL )

&& OrderOpenTime() >= lastTime && OrderCloseTime() == closeTime

&& OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastorderprice = OrderOpenPrice();

closeTime = OrderCloseTime();

lastTicket = OrderTicket();

}

retorno(lastTicket);

}

senão

Print("OrderSelect() error - ", ErrorDescription(GetLastError()));

}

contagem de ordens pendentes()

{

int bscount = 0;

para (int i=OrdensTotal()-1; i >= 0; i--)

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se (OrderSymbol() == Symbol())

se (OrderMagicNumber() == OrderId)

se (OrderType() == OP_BUYSTOP )

{

bscount++;

}

}

senão

{

Print("OrderSend() error - ", ErrorDescription(GetLastError()));

}

}

// Se existe OpBuy ou OpSell

nulo NewOrder()

{

se (bscount==0)

{

BuyStopPending();

}

}

 

HI

Este indicador é um repintor? Em caso afirmativo, quanto barras de volta??

xps_v8_oscillator.ex4xps_v8_oscillator.mq4

Arquivos anexados:
 
toldmikl:
HI

Este indicador é um repintor? Em caso afirmativo, quanto barras de volta??

xps_v8_oscillator.ex4xps_v8_oscillator.mq4
Sim. É um indicador de vento solar com períodos definidos automaticamente, dependendo do período de tempo:

1 minuto : período = 2880

5 minutos : período = 576

15 minutos : período = 192

30 minutos : período = 96

1 hora e acima: período = 48

 

OK, mas eu uso isso no gráfico off-line M2 :S Então não é normal Prazo

 
toldmikl:
OK, mas eu uso isso no gráfico off-line M2 :S Então não é normal Prazo

Experimente e você mesmo verá (use algo como autorefresh para forçar o indicador a atualizar todas as barras ou simplesmente, quando forem construídas barras novas suficientes, vá para os parâmetros, não altere nada e clique OK). Preste atenção aos períodos em que a tendência muda o que ela fará.

Melhor do que eu tentando explicar o que está errado no código de ventos solares e para convencer qualquer pessoa

 

Eu não posso mudar de período, apenas posso ver o código fonte aqui é ele:

#janela_do_indicador de propriedade_separate_window

#indicador de propriedade_mínimo 0

#indicador de propriedade_máximo 1

#property indicator_buffers 3

#indicador de propriedade_color2 C'72,49,255'

#indicador de propriedade_cor3 C'255,49,72'

#largura_do_indicador de propriedade2 6

#largura_do_indicador de propriedade3 6

período int;

alarme de bool externo=falso;

duplo ExtBuffer0[];

duplo ExtBuffer1[];

duplo ExtBuffer2[];

dupla barra de alerta;

duplo último;

int init() {

//-----------------------------

interruptor ( Período() )

{

caso 1: período = 2880; pausa;

caso 5: período = 576;pausa;

caso 15: período = 192;pausa;

caso 30: período = 96; pausa;

caso 60: período = 48; pausa;

caso 240: período = 48; pausa;

caso 1440: período = 48; pausa;

caso 10080: período = 48; pausa;

padrão: período = 48; pausa;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Dígitos+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2); SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

retorno(0);

}

int start() {

limite int;

int counted_bars=IndicatorCounted();

duplo prev,atual,antigo;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

dobro do preço;

duplo MinL=0;

duplo MáxH=0;

if(counted_bars>0) counted_bars--;

limite=barras_contadas_às_barras;

for(int i=0; i<limit; i++)

{ MaxH = Alto;

MinL = Baixo[Baixo(NULL,0,MODE_LOW,período,i)];

preço = (Máximo+Baixo)/2;

Valor = 0,33*2*((preço-MínL)/(MáxH-MínL)-0,5) + 0,67*Valor1;

Valor=MathMin(MathMax(Valor,-0,999),0,999);

ExtBuffer0=0,5*MathLog((1+Valor)/(1-Valor))+0,5*Fish1;

Valor1=Valor;

Peixe1=ExtBuffer0;

}

bool up = VERDADEIRO;

for(i=limit-2; i>=0; i--)

{

atual=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))|||(current<0)) up= falso;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarme && i==0 && último != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alerta("OSC... Possível Tendência descendo em ",Período()", ",Símbolo());

barra de alerta = Barras; último = 2;

}

}

senão {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarme && i==0 && último != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alerta("OSC... Possível Tendência de subir em ",Período()", ",Símbolo());

barra de alerta = Barras;

última = 1;

}

}

}//End Loop

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

Então?

 
toldmikl:
Eu não posso mudar de período, apenas posso ver o código fonte aqui é ele:

#janela_indicadora de propriedade_separarate_window

#indicador de propriedade_mínimo 0

#indicador de propriedade_máximo 1

#property indicator_buffers 3

#indicador de propriedade_color2 C'72,49,255'

#indicador de propriedade_cor3 C'255,49,72'

#largura_do_indicador de propriedade2 6

#largura_do_indicador de propriedade3 6

período int;

alarme de bool externo=falso;

duplo ExtBuffer0[];

duplo ExtBuffer1[];

duplo ExtBuffer2[];

dupla barra de alerta;

duplo último;

int init() {

//-----------------------------

interruptor ( Período() )

{

caso 1: período = 2880; pausa;

caso 5: período = 576;pausa;

caso 15: período = 192;pausa;

caso 30: período = 96; pausa;

caso 60: período = 48; pausa;

caso 240: período = 48; pausa;

caso 1440: período = 48; pausa;

caso 10080: período = 48; pausa;

padrão: período = 48; pausa;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Dígitos+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2); SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

retorno(0);

}

int start() {

limite int;

int counted_bars=IndicatorCounted();

duplo prev,atual,antigo;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

dobro do preço;

duplo MinL=0;

duplo MáxH=0;

if(counted_bars>0) counted_bars--;

limite=barras_contadas_às_barras;

for(int i=0; i<limit; i++)

{ MaxH = Alto;

MinL = Baixo[Baixo(NULL,0,MODE_LOW,período,i)];

preço = (Máximo+Baixo)/2;

Valor = 0,33*2*((preço-MínL)/(MáxH-MínL)-0,5) + 0,67*Valor1;

Valor=MathMin(MathMax(Valor,-0,999),0,999);

ExtBuffer0=0,5*MathLog((1+Valor)/(1-Valor))+0,5*Fish1;

Valor1=Valor;

Peixe1=ExtBuffer0;

}

bool up = VERDADEIRO;

for(i=limit-2; i>=0; i--)

{

atual=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))|||(current<0)) up= falso;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarme && i==0 && último != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alerta("OSC... Possível Tendência descendo em ",Período()", ",Símbolo());

barra de alerta = Barras; último = 2;

}

}

senão {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarme && i==0 && último != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alerta("OSC... Possível Tendência de subir em ",Período()", ",Símbolo());

barra de alerta = Barras;

última = 1;

}

}

}//End Loop

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

Então?

É aplicado o período 48 para qualquer período de tempo que não seja um período de tempo padrão (como "2 minutos" de gráficos off-line)

Para versões de ventos solares para as quais você pode alterar o período de cálculo, veja este tópico : https://www.mql5.com/en/forum/179650

 

Saudações a vocês gurus, por favor me ajudem a editar este roteiro e deixar SOMENTE pedido, tamanho do lote, compra/venda. Eu já sou proprietário de um EA que os lugares têm lucro/parada perda automaticamente, entrando assim em conflito com aquele indy.

Este script abre automaticamente qualquer número de ordem de mercado que você especificou no MENU de uma vez, mas atualmente ele abre apenas uma ordem, mesmo que você insira 5 ordens. Por favor, ajude-me a corrigir este ERROR e DELETE a tirar lucro/parada de perdas do SCRIPT.

Abençoados sejam

Arquivos anexados: