Obrigado, como escrever um laço para encontrar o número da barra que atravessa os dois MA quando os dois primeiros pontos do algoritmo são cumpridos e existem valores dos dois MA na primeira barra?
/
.
Aha, afinal não o resolveu através de matrizes.
Nota: A solução através de matrizes (cópia de ÚLTIMOS TRÊS valores dos indicadores em matrizes Primeiro[], Segundo[] e Terceiro[]) é ocruzamento de dois iMAs- OnTick():
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries(First,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Second,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Third,true); // index [0] - the most right bar on a chartsint buffer_num=0; // indicator buffer number int start_pos=0; // start position int count=3; // amount to copy if(!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return;
if(!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return;
if(InpFilterMA)
if(!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return;
//--- step 1: check in the arrays bars [0] and [1]if(First[0]>Second[0] && First[1]<Second[1]) // buy
{
if(InpFilterMA)
if(Third[0]>=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[0] && First[1]>Second[1]) // sell
{
if(InpFilterMA)
if(Third[0]<=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if(First[0]>Second[0] && First[2]<Second[2]) // buy
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[2] && First[1]>Second[2]) // sell
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
No seu caso (um valor de cada vez), o laço terá este aspecto:
int signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1,0); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2,0); // the value of the 1st MA on i barfor(int i=0;i<100;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+1); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+1); // the value of the 1st MA on i+1 th bar//---
signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif(MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal=1;
elseif(MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=-1;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
MA1_curr - o valor do indicador MA1 na barra #i, MA1_prev - o valor do indicador MA1 na barra #i+1 MA2_curr - o valor do indicador MA2 na barra #i, MA2_prev - o valor do indicador MA2 na barra #i+1
Quando se obtém uma travessia (o sinal variável ou é "-1" ou "1") - o valor de i será o número da barra onde a travessia ocorreu.
Este é o algoritmo mais simples para encontrar o crossover, mas não é o mais preciso.
Boa tarde. Poderia dizer-me em que formato transferir dados históricos do servidor Finam ou MFD.ru para importar o histórico de cotações? Não o posso fazer de forma alguma. Só posso salvá-lo do txt para o csv e é tudo.
Boa tarde. Poderia dizer-me em que formato transferir dados históricos do servidor Finam ou MFD.ru para importar o histórico de cotações? Não o posso fazer de todo. Só posso salvá-lo do txt para o csv e é tudo.
Não tem de descarregar nada no MetaTrader 5 :) - Assim que se ligar ao servidor de negociação, o histórico real do tick está à sua disposição. Olhar paraCopyTicks
No MetaTrader 5 não é necessário descarregar nada :) - Assim que se ligar ao servidor comercial, o histórico real do tick está à sua disposição. Olhar paraCopyTicks
Só preciso de acções russas no valor de 10 anos. O meu corretor não me dá assim tanto e é pouco provável que encontre um.
Boa noite, tenha uma pergunta sobre a MQL5 se puder ajudar.
Ainda não tenho nenhum livro didáctico sobre 5.
A questão é.
#property indicator_level1 30 - defini o parâmetro. Quando carrego o indicador no gráfico. Já percebi.
Mudo a linha por função ColorBuffer[], se a linha descer abaixo deste parâmetro.
Tenho aqui um problema. Se eu abrir o indicador e mudar o parâmetro para outro, mesmo depois de carregar o indicador a linha de nível é lá colocada, mas o indicador calcula-o usando o parâmetro que foi definido antes, ou seja, #property indicator_level1 30
Como devo abordar este nível a fim de o poder alterar em tempo de execução?
- Já se tentou verificar o parâmetro. E recalcular toda a cadeia de indicadores.
Mas mesmo assim não vai redesenhá-lo da maneira que eu quero!
Socorro!
:)
Sequência de operações
RSI.mqh
#indicador de propriedade_nível1 30
#indicador de propriedade_nível2 70
No código de descrição do Calculaite. No fim da linha por onde a linha passa For, adicionei a função de mudar a cor da linha se esta estiver abaixo deste nível. ExtColorsBuffer [i] =0; se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } se (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Resultado esperado
Vejo o mesmo que na imagem mas quando abro as definições e mudo o indicador de nível_nível1 / 2 no processo de utilização do indicador, recebo um redesenho. O indicador é redesenhado de modo que, se a linha atravessar um nível, muda de cor. Mas para mim está ao mesmo nível que antes :)
Boa noite, tenha uma pergunta sobre a MQL5 se puder ajudar.
Ainda não tenho nenhum livro didáctico sobre 5.
A questão é.
#property indicator_level1 30 - defini o parâmetro. Quando carrego o indicador no gráfico. Já percebi.
Mudo a linha por função ColorBuffer[], se a linha descer abaixo deste parâmetro.
Tenho aqui um problema. Se eu abrir o indicador e mudar o parâmetro para outro, mesmo depois de carregar o indicador a linha de nível é lá colocada, mas o indicador calcula-o usando o parâmetro que foi definido antes, ou seja, #property indicator_level1 30
Como devo abordar este nível a fim de o poder alterar em tempo de execução?
- Já se tentou verificar o parâmetro. E recalcular toda a cadeia de indicadores.
Mas mesmo assim não vai redesenhá-lo da maneira que eu quero!
Socorro!
:)
Sequência de operações
RSI.mqh
#indicador de propriedade_nível1 30
#indicador de propriedade_nível2 70
No código de descrição do Calculaite. No fim da linha por onde a linha passa For, adicionei a função de mudar a cor da linha se esta estiver abaixo deste nível. ExtColorsBuffer [i] =0; se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } se (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Resultado esperado
Vejo o mesmo que na imagem mas quando abro as definições e mudo o indicador de nível_nível1 / 2 no processo de utilização do indicador, recebo um redesenho. O indicador é redesenhado de modo que se a linha atravessar um nível - muda a sua cor. Mas para mim está ao mesmo nível que antes :)
Mais informação
...
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrCrimson); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrDeepSkyBlue); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
Igor, estamos ambos errados. Não compreendi imediatamente a tarefa...
Para além de # directiva de propriedade, pode definir o nível indicador com a função
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
Por conseguinte, este nível deve ser definido nos parâmetros indicadores de entrada. Neste caso, o nível será desenhado pelo valor especificado e deverá ser alterado por este valor.
Print("Баланс на счёте = ",AccountInfoDouble(ACCOUNT_BALANCE));
printf("ACCOUNT_BALANCE = %G",AccountInfoDouble(ACCOUNT_BALANCE));
Se remover %G em pintf então o valor não será exibido, mas em Impressão é exibido sem %G
Também na impressão é mostrado o valor do saldo 10000.0, mas na impressão apenas o número inteiro 10000
Estou mais interessado em saber qual é a diferença entre impressão e impressão e, mais importante ainda, porque é que não é mostrada sem %G. Não compreendi nada no livro de referência.
Olá colegas, tenho uma pergunta, estou a tentar inserir um widget do meu sinal na assinatura no fórum "forex money", mas eles desactivaram ou bloquearam o HTML, há alguma forma de o refazer no URL? porque eles são normalmente inseridos e exibidos.
Obrigado, como escrever um laço para encontrar o número da barra que atravessa os dois MA quando os dois primeiros pontos do algoritmo são cumpridos e existem valores dos dois MA na primeira barra?
/
.
Aha, afinal não o resolveu através de matrizes.
Nota: A solução através de matrizes (cópia de ÚLTIMOS TRÊS valores dos indicadores em matrizes Primeiro[], Segundo[] e Terceiro[]) é ocruzamento de dois iMAs- OnTick():
No seu caso (um valor de cada vez), o laço terá este aspecto:
MA1_curr - o valor do indicador MA1 na barra #i, MA1_prev - o valor do indicador MA1 na barra #i+1
MA2_curr - o valor do indicador MA2 na barra #i, MA2_prev - o valor do indicador MA2 na barra #i+1
Quando se obtém uma travessia (o sinal variável ou é "-1" ou "1") - o valor de i será o número da barra onde a travessia ocorreu.
Este é o algoritmo mais simples para encontrar o crossover, mas não é o mais preciso.
Sim, afinal decidiu não usar matrizes...
Obrigado, o seu outroMA Cross EA foi utilizado como exemplo
Quero entrar na terceira ou quinta ou...n barras após a travessia
No seu caso (obtendo um valor) o ciclo terá o seguinte aspecto
Porque é que não há saída do laço quando é encontrado um crossover?
Estas condições podem ser colocadas fora do laço?
.
Boa tarde. Poderia dizer-me em que formato transferir dados históricos do servidor Finam ou MFD.ru para importar o histórico de cotações? Não o posso fazer de forma alguma. Só posso salvá-lo do txt para o csv e é tudo.
Boa tarde. Poderia dizer-me em que formato transferir dados históricos do servidor Finam ou MFD.ru para importar o histórico de cotações? Não o posso fazer de todo. Só posso salvá-lo do txt para o csv e é tudo.
Não tem de descarregar nada no MetaTrader 5 :) - Assim que se ligar ao servidor de negociação, o histórico real do tick está à sua disposição. Olhar paraCopyTicks
No MetaTrader 5 não é necessário descarregar nada :) - Assim que se ligar ao servidor comercial, o histórico real do tick está à sua disposição. Olhar paraCopyTicks
Só preciso de acções russas no valor de 10 anos. O meu corretor não me dá assim tanto e é pouco provável que encontre um.
Descrição do problema
Sequência de operações
RSI.mqh
#indicador de propriedade_nível1 30
#indicador de propriedade_nível2 70
No código de descrição do Calculaite. No fim da linha por onde a linha passa For, adicionei a função de mudar a cor da linha se esta estiver abaixo deste nível.
ExtColorsBuffer [i] =0;
se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
se (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Resultado esperado
Vejo o mesmo que na imagem mas quando abro as definições e mudo o indicador de nível_nível1 / 2 no processo de utilização do indicador, recebo um redesenho. O indicador é redesenhado de modo que, se a linha atravessar um nível, muda de cor. Mas para mim está ao mesmo nível que antes :)
Mais informação
...
5.0 Construir 1755
Descrição do problema
Sequência de operações
RSI.mqh
#indicador de propriedade_nível1 30
#indicador de propriedade_nível2 70
No código de descrição do Calculaite. No fim da linha por onde a linha passa For, adicionei a função de mudar a cor da linha se esta estiver abaixo deste nível.
ExtColorsBuffer [i] =0;
se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
se (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Resultado esperado
Vejo o mesmo que na imagem mas quando abro as definições e mudo o indicador de nível_nível1 / 2 no processo de utilização do indicador, recebo um redesenho. O indicador é redesenhado de modo que se a linha atravessar um nível - muda a sua cor. Mas para mim está ao mesmo nível que antes :)
Mais informação
...
5.0 Construir 1755
Descrição do problema
Gostaria de saber porque não gosto da resposta num tópico à parte.
Este é o fórum para o comércio, sistemas automatizados de comércio e testes estratégicos.
Preciso de ajuda no nível do indicador de propriedade MQL5
Alexey Viktorov, 2018.01.31 09:06
Igor, estamos ambos errados. Não compreendi imediatamente a tarefa...
Para além de # directiva de propriedade, pode definir o nível indicador com a função
Por conseguinte, este nível deve ser definido nos parâmetros indicadores de entrada. Neste caso, o nível será desenhado pelo valor especificado e deverá ser alterado por este valor.
Caso teste
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
Aleksey Rodionov, 2018.02.06 16:31
Aqui está um interessante:
Se remover %G em pintf então o valor não será exibido, mas em Impressão é exibido sem %G
Também na impressão é mostrado o valor do saldo 10000.0, mas na impressão apenas o número inteiro 10000
Estou mais interessado em saber qual é a diferença entre impressão e impressão e, mais importante ainda, porque é que não é mostrada sem %G. Não compreendi nada no livro de referência.
Olá colegas, tenho uma pergunta, estou a tentar inserir um widget do meu sinal na assinatura no fórum "forex money", mas eles desactivaram ou bloquearam o HTML, há alguma forma de o refazer no URL? porque eles são normalmente inseridos e exibidos.
Aqui está o código <iframe frameeborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green"></iframe>