[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 326
Não sou adepto de indicadores, mas decidi verificar uma coisa. O Expert Advisor deve comprar ao preço do indicador RSI superior e vender ao preço do indicador inferior, respectivamente. Somente se o preço já estiver acima do limite superior do indicador RSI, então a compra deve estar acima deste limite e abaixo do valor deste limite + algum valor de travessão do limite para cima (no código que especifiquei apenas um número 0,1), para vendas, ao contrário.
externdouble i_RSIToUpLimit = 55, // Верхняя граница RSI
i_RSIToDnLimit = 45; // Нижняя граница RSI
Código da função que recebe o sinal e o próprio valor RSI:(0,1 aqui é a tolerância de margem para a faixa de compra ou venda)
//+-------------------------------------------------------------------------------------+//| Получаем RSI с заданными параметрами |//+-------------------------------------------------------------------------------------+double GetRSI(int RSIIndex)
{
return (iRSI(NULL, i_RSITF, i_RSIPeriod, i_RSIApplied, RSIIndex));
}
//+-------------------------------------------------------------------------------------+//| Получаем общий торговый сигнал |//+-------------------------------------------------------------------------------------+int GetGeneralSignal()
{
if (FindOrders() > 0)
return (SIGNAL_NO);
// if (GetRSI(PRICE_CLOSE, 0) > GetRSI(PRICE_CLOSE, 1))if (GetRSI(0) > i_RSIToUpLimit)
if (GetRSI(0) < (i_RSIToUpLimit + 0.1))
return (SIGNAL_BUY); // Запускаем функцию открытия покупки
if (GetRSI(0) < i_RSIToDnLimit)
if (GetRSI(0) > (i_RSIToDnLimit - 0.1))
return (SIGNAL_SELL); // Запускаем функцию открытия продаж
return (SIGNAL_NO);
}
Às vezes a EA abre pedidos do mesmo nível, às vezes muito mais alto (para compra) e às vezes muito mais baixo (para venda). Por quê? O algoritmo é elementar.
Olá a todos. Eu tenho uma pergunta. Comprei uma copiadora /**/, coisa boa e útil quando se trabalha com várias contas. Mas o problema é que quando você executa qualquer outro programa (vídeo, jogo, apenas mapas) em paralelo, há um ruído crepitante constante saindo dos alto-falantes. É possível eliminar o problema (guizo)? Obrigado de antemão.
Estou tentando escrever um indicador simples baseado no RSI (o analógico é RandomIndicatorSignals mq4).
Estou tentando escrever um indicador simples baseado no RSI (para o análogo deste indicador RandomIndicatorSignals.mq4 do artigo MQL4 Language for Dummies). Indicadores personalizados (Parte 1)(https://www.mql5.com/ru/articles/1500).
A idéia é simples, se a RSI desenha uma tampa ou um canal, ela desenha uma seta no gráfico.
Parece estar tudo bem, mas na minha opinião, o buffer de valores RSI para cada vela não está cheio, por causa disso não funciona. Aqui está o código.
//+------------------------------------------------------------------+//| RSI+Arrow.mq4 |//| _______ |//| |//+------------------------------------------------------------------+#property copyright "_______"#property link "_________"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Crimson#property indicator_color2 RoyalBlue//---- input parametersexternint barsToProcess=500;
//---- buffersdouble ExtMapBuffer1[],
ExtMapBuffer2[],
RSIBuffer3[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicators
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,236);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,238);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexBuffer (2,RSIBuffer3);
// для информации о значениях буфера
SetIndexLabel (2,"RSIBuffer3");
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
//расчет индикатора на последних барах int limit,i;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(limit>barsToProcess)
limit=barsToProcess;
//заполняем буфер RSI значениями for(i=0; i<limit; i++)
if(i>=1)
{
RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,0);
}
//проводим сравнения for(i=0; i<limit; i++)
if(i>=1)
{
if(RSIBuffer3[i+2]-RSIBuffer3[i+1]>0 && RSIBuffer3[i+1]-RSIBuffer3[i]>0) // условия выставления стрелки /* так тоже не работает
if(RSIBuffer3[i+2]>=RSIBuffer3[i+1] && RSIBuffer3[i+1]<=RSIBuffer3[i])
*/
ExtMapBuffer2[i]=Low[i]-5*Point;
else
ExtMapBuffer2[i]=0.0;
if(RSIBuffer3[i+2]-RSIBuffer3[i+1]<0 && RSIBuffer3[i+1]-RSIBuffer3[i]<0) // условия выставления стрелки/* так тоже не работает
if(RSIBuffer3[i+2]<=RSIBuffer3[i+1] && RSIBuffer3[i+1]>=RSIBuffer3[i])
*/
ExtMapBuffer1[i]=High[i]+5*Point;
else
ExtMapBuffer1[i]=0.0;
}
return(0);
}
//+------------------------------------------------------------------+
Estou tentando escrever um indicador simples baseado no RSI (o analógico é RandomIndicatorSignals mq4).
Estou tentando escrever um indicador simples baseado no RSI (para o análogo deste indicador RandomIndicatorSignals.mq4 do artigo MQL4 Language for Dummies). Indicadores personalizados (Parte 1)(https://www.mql5.com/ru/articles/1500).
A idéia é simples, se a RSI desenha uma tampa ou um canal, ela desenha uma seta no gráfico.
Parece estar tudo bem, mas na minha opinião, o buffer de valores RSI para cada vela não está cheio, por causa disso não funciona. Aqui está o código.
Você está acessando valores indicadores não calculados em loop.
Você está voltando para os valores não calculados do indicador.
Mudança
para
E o que eu também pensei, de acordo com sua lógica a ferramenta deve calcular o RSI a partir do limite e até 0 barra, mas será que faz diferença qual lado deve calcular o RSI a partir do fim ou do início? Ela deve calcular o RSI para cada barra em um determinado intervalo e colocar o valor em um buffer (quero dizer em um array), e depois apenas comparar três valores consecutivos em um array entre si. Ou não é?
Não sou adepto de indicadores, mas decidi verificar uma coisa. O Expert Advisor deve comprar ao preço do indicador RSI superior e vender ao preço do indicador inferior, respectivamente. Somente se o preço já estiver acima do limite superior do indicador RSI, então a compra deve estar acima deste limite e abaixo do valor deste limite + algum valor de travessão do limite para cima (no código que especifiquei apenas um número 0,1), para vendas, ao contrário.
Eu o fiz assim:
Parâmetros externos:
Código da função que recebe o sinal e o próprio valor RSI:(0,1 aqui é a tolerância de margem para a faixa de compra ou venda)
Às vezes a EA abre pedidos do mesmo nível, às vezes muito mais alto (para compra) e às vezes muito mais baixo (para venda). Por quê? O algoritmo é elementar.
Estou tentando escrever um indicador simples baseado no RSI (o analógico é RandomIndicatorSignals mq4).
Estou tentando escrever um indicador simples baseado no RSI (para o análogo deste indicador RandomIndicatorSignals.mq4 do artigo MQL4 Language for Dummies). Indicadores personalizados (Parte 1)(https://www.mql5.com/ru/articles/1500).
A idéia é simples, se a RSI desenha uma tampa ou um canal, ela desenha uma seta no gráfico.
Parece estar tudo bem, mas na minha opinião, o buffer de valores RSI para cada vela não está cheio, por causa disso não funciona. Aqui está o código.
Estou tentando escrever um indicador simples baseado no RSI (o analógico é RandomIndicatorSignals mq4).
Estou tentando escrever um indicador simples baseado no RSI (para o análogo deste indicador RandomIndicatorSignals.mq4 do artigo MQL4 Language for Dummies). Indicadores personalizados (Parte 1)(https://www.mql5.com/ru/articles/1500).
A idéia é simples, se a RSI desenha uma tampa ou um canal, ela desenha uma seta no gráfico.
Parece estar tudo bem, mas na minha opinião, o buffer de valores RSI para cada vela não está cheio, por causa disso não funciona. Aqui está o código.
Você está acessando valores indicadores não calculados em loop.
Mudança
para
Você está voltando para os valores não calculados do indicador.
Mudança
para
Obrigado, isso me deu uma idéia! Entretanto, eu gostaria de entender o "significado físico " :) como nosso físico costumava dizer
Eu mesmo tenho um problema: 2 "ligeiramente" diferentes, mas essencialmente os mesmos códigos de ação: Eliminar TODAS as ordens pendentes
1) Não funciona corretamente - apenas um pedido é eliminado
2) Funciona bem - apaga todos eles
Explique: o significado de "neste laço, você acessa os valores não calculados do indicador".
Você está voltando para os valores não calculados do indicador.
Mudança
para
Por que isso? Para que eu não cometa mais erros no futuro
Você está voltando para os valores não calculados do indicador.
Mudança
para
ainda não funciona, RSIBuffer3 só mostra o valor RSI na última barra quando pairando sobre uma barra
E ainda não funciona, RSIBuffer3 só mostra o valor RSI na última barra quando pairando sobre a barra
Seu 5º parâmetro é 0 - ou seja, a última barra!
fazer assim:
Trecho do documento:
Você está voltando para os valores não calculados do indicador.
Mudança
para
E o que eu também pensei, de acordo com sua lógica a ferramenta deve calcular o RSI a partir do limite e até 0 barra, mas será que faz diferença qual lado deve calcular o RSI a partir do fim ou do início? Ela deve calcular o RSI para cada barra em um determinado intervalo e colocar o valor em um buffer (quero dizer em um array), e depois apenas comparar três valores consecutivos em um array entre si. Ou não é?
Seu 5º parâmetro é 0 - ou seja, a última barra!
fazer assim:
Trecho do documento:
Vou tentar, obrigado