Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 143

 
barabashkakvn:
Concordo sobre a int(round). Obrigado. Uma conversão de tipo explícito não faria mal. Embora tenha funcionado sem conversão de tipo explícita.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
Concordo sobre a int(round). Obrigado. Uma conversão de tipo explícito não faria mal. Mas funcionou bem sem conversão de tipo explícita.
Funcionou, mas as observações do compilador... São irritantes.
 
barabashkakvn:

Não tenho quaisquer erros. A construção é a mais recente.

Obrigado, a actualização MT5 ajudou. O erro desapareceu. a construção era de 23 de Julho de 2013. na antiga construção, a propósito, não havia mandados de conversão de tipo, por isso não reparei neles.

Quem teria esperado erros tão graves do compilador.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

Obrigado, a actualização MT5 ajudou. O bicho desapareceu. A construção era de 23 de Julho de 2013. Na antiga construção, a propósito, não havia mandados de conversão de tipo, pelo que não reparei neles.

Quem teria esperado erros tão graves do compilador.

O principal é que funcionou :).
 

Necessidade de encontrar o mínimo no intervalo de tempo. Fiz o seguinte código para encontrar o mínimo no intervalo de tempo:

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

Para encontrar mínimos neste intervalo, utilizo a função CopyLow:

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

Depois, se bem entendi, recebo uma matriz unidimensionalLow[],

Procuro o mínimo nele com o ArrayMinimum:

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

Tentei definir hoje uma hora de início de 1 hora, uma hora de paragem de 2 horas e chamar Alerta para verificar min=-1.

Pergunta: para este problema, são as funções escolhidas correctamente para resolver este problema, ou existe um erro algures? Preciso de obter o preço mínimo.

 
Olá. Caros comerciantes, por favor ajudem-me com a concepção correcta da peça do programa para 3 diapositivos numa EA multi-divisas.

Tentei procurá-lo no Manual, mas é um exemplo baseado na classe, e ainda não estou preparado para isso.

Quero escrever um EA sem utilizar aulas. Excluí todas as coisas estranhas da consideração e por ter recebido 3 deslizes para cada

Escrevi o seguinte fragmento do programa:

input int Kurtz_Period=5; // período Kurtz

input int Mittel_Period=8 ;

input int Long_Period=13;

int maHandle; //handle of Moving Average indicator

double ma_buf[]; // esta é uma matriz tampão para as leituras médias móveis da função MA

// e depois será copiado para as matrizes correspondentes

datatime Time_buf[]; // este é um conjunto de barras de tempo aberto

data/hora Hora_[6][150]; // matriz de tempo de abertura do bar

duplo Kurtz[6][70]; //isto é uma matriz para o Kurtz de movimento rápido, os números das filas correspondem aos números das moedas utilizadas, enquanto as colunas são as contagens do movimento

duplo Mittel[6][70]; // esta é a matriz para a média móvel Mittel

duplo Longo[6][70]; // este é um conjunto para um longo período de deslizamento Longo

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // este é um conjunto de nomes de moedas:

int nomer_instr; // este é um número de instrumento (moeda), apenas para organizar ciclos por moedas

int OnInit()

{

//-----

//-------

}

nulo OnDeinit(const int razão)

{

//---

ArrayFree(Time_buf);

ArrayFree( ma_buf); // zerar a matriz libertada

//-------

}

nulo OnTick()

{

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

ArraySetAsSeries(time_buf, true); //set indexing for the time_array array as in timeseries

ArraySetAsSeries(ma_buf, true); //set indexing for array ma_buf as in timeseries

for( nomer_instr=0; nomer_instr<==5; nomer_instr++ ) // isto é um loop em todas as moedas utilizadas

{

int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // este é o número de dígitos na cotação da moeda

CopyTime( Nome_símbolo[nomer_instr], PERÍODO_M1,0,160,Time_buf); // copiar dados históricos de tempo para cada barra para o buffer

for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // hora do bar aberto

//#############################################################################################

//Bloqueio geradores das 3 primeiras barras deslizantes:Kurtz, Mittel, Long

manHandle = iMA( Nome_símbolo[nomer_instr],PERÍODO_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alerta("Erro na cópia de buffers indicadores ---PERIOD_M1,Kurtz_Period--- Média móvel - número de erro:",GetLastError()));

regressar;

}

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], dígito);

/*

//===============================================================

// BLOQUEIO de verificação da compensação de barras como em séries temporais e precisão da normalização numérica

// MA-5 de movimento rápido

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // esta é uma chave para seleccionar o modo do Expert Advisor, agora está no modo de depuração

{

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

{

if(i==1) Alert("====================");

if(i===1) Alerta(" hora de abertura do 1º bar: Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alerta(" número de barras: i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

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

maHandle = iMA( Nome_símbolo[nomer_instr],PERÍODO_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alerta("Erro na cópia de buffers indicadores ====PERIOD_M1, Mittel_Period,==== Média móvel - número de erro:",GetLastError()));

regressar;

}

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], dígito);

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

maHandle = iMA( Nome_símbolo[nomer_instr],PERÍODO_M1, Período_Longo, 0, MODE_SMMA, PREÇO_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alerta("Erro na cópia de buffers indicadores ====PERIOD_M1, Long_Period,====Moving Average - número de erro:",GetLastError()));

regressar;

}

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], dígito);

// fim do bloco formando as contas dos 3 primeiros diapositivos: Kurtz, Mittel,Long

//#############################################################################################

} // fim do laço por moedas em uso

//============================================================

Outros operadores do programa

//============================================================

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

}// Fim de OnTick()

//+------------------------------------------------------------------+

Nenhum erro é detectado neste programa em tempo de compilação, mas quando testado no Diário de Bordo para cada deslize, um

mensagem de erro: 4806 é " dados solicitados não encontrados".

Por favor, digam-me onde tenho o erro.

Obrigado.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008:

Não compreende o princípio da dactilografia? É tão simples:

Parece claro agora) Acontece que o int st operand é de um tipo menor do que tp[] datetime.

É por isso que não há conversão para segundos na operação:

int st=tp[0];

Tentei encontrar o mínimo no intervalo de tempo. Não tenho a certeza se o estou a fazer bem. Consegue ver o post anterior?

Como se pode chamar Alerta ou Comentário sem novas carraças para fazer verificações ao fim-de-semana?

 
forexman77:

Necessidade de encontrar o mínimo no intervalo de tempo. Fiz o seguinte código para encontrar o mínimo no intervalo de tempo:

Para encontrar mínimos neste intervalo, utilizo a função CopyLow:

Depois, se bem entendi, recebo uma matriz unidimensionalLow[],

Procuro o mínimo nele com o ArrayMinimum:

Tentei definir hoje uma hora de início de 1 hora, uma hora de paragem de 2 horas e chamar Alerta para verificar min=-1.

Pergunta: para este problema, são as funções escolhidas correctamente para resolver este problema, ou existe um erro algures? É necessário obter o preço mínimo.

Por favor, leia com atenção:

Valor de retorno.

A função devolve o índice do item encontrado, tendo em conta a seriedade da matriz. Sefalhar, a função regressa -1.

Por conseguinte, deveria ser assim:

Alert("min=",Low[ArrayMinimum(Low)]);
 

Verificar e testar aos fins-de-semana e mais além, tem de escrever.

 
DC2008:

Verificar e testar aos fins-de-semana e mais além, tem de escrever.

Obrigado!