[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 332

 
Stepan241 >> :

Estou tentando escrever um indicador. A idéia é simples: vamos para a média (força dos touros - força dos ursos). Naturalmente, por um certo período de tempo.



int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
Buf_0[i]=MA_Bulls[i];
i--;
}
retornar;
}

Eu exibo apenas touros alisados Buf_0[i]=MA_Bears[i]; é feito para controlar em um determinado estágio de plotagem de índice. Nem mesmo EXATAMENTE. Se eu os alisar com um período de 1, eles de fato devem repetir os touros embutidos. Assim, concluí que algo está errado na linha MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i); não entendo o que exatamente...AJUDA-ME!!!! Já se passaram 3 dias de consulta de manuais e documentação. OBRIGADO!


Você deve primeiro formar as matrizes de dados de touros e ursos e depois alisá-los com o próximo ciclo, porque você ainda não os formou e já está usando alisamento, não há dados para alisar?

 
Urain писал(а) >>

Primeiro forme as matrizes de dados de touros e ursos e depois use o ciclo seguinte para engomá-los, porque você ainda não os formou e já está usando suavização, e não há dados para suavizar?

Tradução de

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for ( i= limit; i>=0; i--){
    Bears_array[ i]=iBearsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
    Bulls_array[ i]=iBullsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
  }
  for ( i= limit; i>=0; i--){
    MA_Bears[ i]=iMAOnArray( Bears_array,0, MA_Period,0,MODE_EMA, i); 
    MA_Bulls[ i]=iMAOnArray( Bulls_array,100, MA_Period,0,MODE_SMA, i); 
  }
  return;
}
 

costy_ писал(а) >>

extern string xxxxxxxxxxxxx="x=0 сегодня х=1 вчера итд";
extern int х=0;
int середина=(iHigh(0,PERIOD_D1, х)-iLow(0,PERIOD_D1, х))/2;
if(Bid> середина)...;
if(Ask< середина)...;


extern datetime some_time=D'14:56';
int середина_some_time=(iHigh(0,0,iBarShift(0,0, some_time))-iLow(0,0,iBarShift(0,0, some_time)))/2;
if(Bid> середина_some_time)...;
if(Ask< середина_some_time)...;

Muito obrigado, estou me aproximando. Um ponto não está bem claro.

'14:56' - data em que a string literal está incompleta este é o aviso que recebi do computador.

Tanto quanto sei, ainda quer a data, mas eu não preciso de uma data específica. O que eu preciso é comparar o preço atual todos os dias com o preço a uma determinada hora no mesmo dia. Por favor, esclareça o ponto.

 
alsu >> :

Por que você precisa chamá-los através do iCast? É para a unificação? Escreva um indicador-embalador separado para cada um deles e chame-os através do iCustom...

O problema é que mudei estes dois indicadores (AO e AC) e agora quero que as barras sejam coloridas de acordo com os indicadores modificados. Ou existe outra forma de fazê-lo? Eu comecei a MQL recentemente...

 
Necron >> :

O problema é que eu refiz os dois indicadores (AO e AC), e agora quero que as barras sejam coloridas de acordo com os indicadores modificados. Ou existe outra forma de fazê-lo? Comecei a aprender MQL recentemente...

Então, o que você refez e chamou, qual é o problema? Por exemplo, se os indicadores modificados forem chamados de AO, AC, a chamada será

iCustom(0,0,"AO",0,shift);
iCustom(0,0,"AС",0,shift);

ou você pode adicionar seus próprios parâmetros

 
future >> :

Muito obrigado, estou me aproximando. Um ponto não está bem claro.

'14:56' - data em que a string literal está incompleta este é o aviso que recebi do computador.

Tanto quanto sei, ainda quer a data, mas eu não preciso de uma data específica. O que eu preciso é comparar o preço atual todos os dias com o preço a uma determinada hora no mesmo dia. Por favor, esclareça o ponto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара
 

costy_ писал(а) >>

futuro >>:

Muito obrigado, estou me aproximando

.

Um ponto não está bem claro.

14:56' - data literal string está incompleta - este é o aviso que recebi do computador.

Entendo que ele ainda quer a data, mas não preciso de uma data específica, preciso comparar o preço atual todos os dias com o preço de uma determinada hora do mesmo dia

.

Favor esclarecer o ponto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара

No entanto, quero saber se é possível manter a ligação até um certo tempo. Na MQL4, como se diz o preço de licitação às 14.00 de cada dia de negociação?

 

skifodessa 05.12.2009 14:07


Boa tarde a todos.

Por favor, me diga como calcular o número de cruzamentos de preço de um determinado nível. Quero que meu pedido abra após 3 (4,5...), mas não após a primeira travessia.

Obrigado.
------------------------------------------------------------

Você poderia tentar o algoritmo


Se (Preço da barra atual>nível e preço da barra anterior<nível)então {counter incrementado por um}

Se (contador>3) então {open order; reset counter to zero}

Agora vamos escrever o mesmo na língua usual (estou escrevendo apenas blocos. Você pode inseri-los nos lugares necessários)

Exterior int Chet=10; // após quantas travessias uma ordem deve ser aberta

Duplo Uroven externo=1,6566; // após o preço ter cruzado o nível para começar a contar.

Na função inicial, as condições serão aproximadamente as seguintes

int k;

if(Open[0]>Uroven && Open[1]<Uroven)k=k+1;// aqui consideramos uma travessia UP

if(k>Chet){OrderSend(.......);k=0};

Em geral, a questão não é muito difícil. O livro sobre MCL explica os princípios básicos da ALGORITHMICS

 

FOR Vinin escreveu >>.

Obrigado pela dica, mas isso não ajuda. Porque você acabou de substituir o loop While por um loop FOR.

FOR Urain escreveu(a) >>

As duas linhas seguintes estão formando o conjunto certo.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Você deve ter pensado que a função iMAOnArray deveria passar um array que já foi formado. Formá-lo com o loop FOR não ajudou. Porque não é a matriz que você passa para esta função (iMAOnArray), mas seu NOME. E a matriz é processada PESSOALMENTE.

mudando i na string MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Eu resolvi o problema. É muito mais profundo do que parece. Se você aplicar este processamento somente no Expert Advisor, não haverá problemas, mas se você construir um gráfico usando-o, você terá um problema de qualquer maneira. A questão é que as matrizes são indexadas de forma inversa. A função iMAOnArray tem indexação direta (da esquerda para a direita), enquanto o gráfico é indexado da direita para a esquerda. Obrigado a Garfich por esta explicação.



 
Stepan241 >> :

FOR Vinin escreveu >>.

Obrigado pela dica, mas isso não ajuda. Porque você acabou de substituir o loop While por um loop FOR.

FOR Urain escreveu(a) >>

As duas linhas seguintes estão formando o conjunto certo.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Você deve ter pensado que a função iMAOnArray deveria passar um array que já foi formado. Formá-lo com o loop FOR não ajudou. Isso porque não é a matriz passada para esta função (iMAOnArray), mas seu NOME. E a matriz é processada PESSOALMENTE.

mudando i na string MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Eu resolvi o problema. É muito mais profundo do que parece. Se você aplicar este processamento somente no Expert Advisor, não haverá problemas, mas se você usá-lo para construir um gráfico, você enfrentará problemas de qualquer maneira. A questão é que as matrizes são indexadas de forma inversa. A função iMAOnArray tem indexação direta (da esquerda para a direita), enquanto o gráfico é indexado da direita para a esquerda. Obrigado a Garfich por esta explicação.

Não sei qual era o problema, mas Vinin escreveu-o corretamente (não importa por ou enquanto), o principal é que primeiro o laço forma a matriz de dados e depois o próximo laço forma o iMA a partir dele,

e a string Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i); preenche apenas um i-ésimo valor da array

sem um loop, a matriz não será gerada.

Razão: