![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Foi o que fiz ao tentar aplicar um MA diretamente ao SSA, como o exemplo na minha foto.
É claro, sou um completo noob na codificação ...
Portanto, se alguém pudesse me dizer o que eu tenho que mudar, eu ficaria muito grato.
Eu gosto de resolver as coisas, mesmo que eu seja um noob neste assunto, mas se alguém não tentar resolver seus problemas, ele permanecerá um noob para sempre ...![](https://c.mql5.com/forextsd/smiles/embaressed_smile.png)
//+------------------------------------------------------------------+
//| FullSSA.mq4 |
//| Copyright © 2007,klot |
//| klot@mail.ru |
//+------------------------------------------------------------------+
#direitos de propriedade intelectual "Copyright © 2007, klot"
#link da propriedade "klot@mail.ru"
#importar "libSSA.dll"
void fastSingular(double& a[],int n,int lag ,int s,double&b[]);
#importar
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 2
#Indicador de propriedade_color1 Branco
#indicador de propriedade_color2 DeepPink
#largura_do_indicador de propriedade1 3
# indicador de propriedade_nível1 0.0
#indicador de propriedade_levelstyle STYLE_DASH
#indicador de propriedades_levelcolor Magenta
Nota de cordas externas_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
tempoFrame de corda externa = "TimeFrame de tempo atual";
Exterior int Lag = 10;
NumComps int externo = 2;
Extern int PeriodNorm = 10;
Exterior int N = 1000;
Exterior int SSAMa_Mode = 3;
int externo MaPeriod = 5;
int externo Ma_Modo_Ma = 3;
externo bool Interpolar = verdadeiro;
SSA duplo[];
double ssaWork[];
duplo SSAma[];
duplo arryTimeSeries[];
string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
int init()
{
SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma); SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);
indicatorFileName = WindowExpertName();
calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA normalize correct");
return(0);
}
int deinit(){return(0);}
int start()
{
duplo dev,ma;
int nmax, nmin;
int tamanho = N;
se (tamanho > Barras) tamanho = Barras;
if (ArraySize(arryTimeSeries) != tamanho)
{
ArrayResize(arryTimeSeries,tamanho);
ArrayResize(ssaWork,tamanho);
}
int limit, i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { SSA[0] = limite+1; return(0); }
if (calculateValue ||| timeFrame==Periodo())
{
for( i=size-1; i>=0; i--)
{
ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);
dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);
if(dev==0) dev=0,1;
arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);
ObjectDelete("Sell "+Time);
ObjectDelete("Comprar "+Tempo);
}
fastSingular(arryTimeSeries,tamanho,Lag,NumComps,ssaWork);
ArrayCopy(SSA,ssaWork);
nmax=ArrayMaximum(SSA,3,1);
nmin=ArrayMinimum(SSA,3,1);
if(nmax===2) {
ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);
ObjectSet("Vender "+Tempo[0],OBJPROP_ARROWCODE,226);
}
if(nmin===2) {
ObjectCreate("Buy "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);
ObjectSet("Comprar "+Time[0],OBJPROP_ARROWCODE,225);
}
//----
retorno(0);
}
limite =MáximoMatemática(limite,MathMin(Bars-1,iCustom(NULL,timeFrame,indicadorNome do Arquivo,"", "returnBars",0,0)*timeFrame/Período()));
for(i=limite; i>=0; i--)
para (i=limite; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);
{
int y = iBarShift(NULL,TimeFrame,Time);
SSA =iCustom(NULL,timeFrame,indicadorNome do Arquivo", "calculateValue", Lag,NumComps,PeriodNorm,N,0,y);
se (timeFrame <= Period() ||y===iBarShift(NULL,timeFrame,TimeFrame,Time)) continuar;
se (!Interpolar) continuar;
data/hora = iTime(NULL,timeFrame,y);
for(int n = 1; i+n = hora; n+++) continuar;
fator duplo = 1,0 / n;
for(int x = 1; x < n; x+++)
{
SSA= x*factor*SSA + (1,0-x*factor)*SSA;
}
}
retorno(0);
}
//+------------------------------------------------------------------+
string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = StringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs===""+iTfTable)return(MathMax(iTfTable,Period()));
return(Period());
}
tempo de fioFrameToString(int tf)
{
para (int i=ArraySize(iTfTable)-1; i>=0; i--)
se (tf===iTfTable) retornar(sTfTable);
return("");
}
//
//
//
//
//
StringUpperCase(string string)
{
string s = str;
para (comprimento int = StringLen(str)-1; comprimento>=0; comprimento--)
{
int tchar = StringGetChar(s, comprimento);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, comprimento, tchar - 32);
caso contrário se(tchar > -33 && tchar < 0)
s = StringSetChar(s, comprimento, tchar + 224);
}
devolução(ões);
}
Para mudança de inclinação tente algo como isto :[PHP]corrente dupla = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0);double previous1 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1);double previous2 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,2);if (current>previous1 && previous1
Obrigado Mladen!!, agora percebo que esqueci de adicionar o Extmapbuffer, número 2 às condições.
Como seria a condição para "enquanto é Uptrend" comprar ou "enquanto é Dntrend" depois vender, pois já tenho condições de execução para os pedidos, não para mudanças de declive?
Mais uma vez, obrigado.
Daniel
Prezado Mladen,
eu preciso que a condição seja "enquanto estiver em tendência", não na mudança exata da inclinação, então eu escrevi isto, mas tenho problemas com a tendência para baixo, SÃO estas condições corretas?? Pois a tendência de alta parece funcionar bem... o mesmo para a tendência de baixa estou tendo problemas... Espero que você possa me ajudar, obrigado.
se (atual>anterior1)
{
// tendência de alta
}
se(atual<anterior1)
{
// tendência de baixa NÃO TRABALHAR NÃO TRIGUE NENHUM PEDIDO VENDER A TODOS...
}
Foi o que eu fiz ao tentar aplicar um MA diretamente ao SSA, como o exemplo na minha foto.
Claro, sou um completo noob na codificação ...
Portanto, se alguém pudesse me dizer o que eu tenho que mudar, eu ficaria muito grato.
Eu gosto de resolver as coisas, mesmo que eu seja um noob neste assunto, mas se alguém não tentar resolver seus problemas, ele permanecerá um noob para sempre ...![](https://c.mql5.com/forextsd/smiles/embaressed_smile.png)
//+------------------------------------------------------------------+
//| FullSSA.mq4 |
//| Copyright © 2007,klot |
//| klot@mail.ru |
//+------------------------------------------------------------------+
#direitos de propriedade intelectual "Copyright © 2007, klot"
#link da propriedade "klot@mail.ru"
#importar "libSSA.dll"
void fastSingular(double& a[],int n,int lag ,int s,double&b[]);
#importar
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 2
#Indicador de propriedade_color1 Branco
#indicador de propriedade_color2 DeepPink
#largura_do_indicador de propriedade1 3
# indicador de propriedade_nível1 0.0
#indicador de propriedade_levelstyle STYLE_DASH
#indicador de propriedades_levelcolor Magenta
Nota de corda externa_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
tempoFrame de corda externa = "TimeFrame de tempo atual";
Exterior int Lag = 10;
NumComps int externo = 2;
Extern int PeriodNorm = 10;
Exterior int N = 1000;
Exterior int SSAMa_Mode = 3;
int externo MaPeriod = 5;
int externo Ma_Modo_Ma = 3;
externo bool Interpolar = verdadeiro;
SSA duplo[];
double ssaWork[];
duplo SSAma[];
duplo arryTimeSeries[];
string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
int init()
{
SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma); SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);
indicatorFileName = WindowExpertName();
calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA normalize correct");
return(0);
}
int deinit(){return(0);}
int start()
{
duplo dev,ma;
int nmax, nmin;
int tamanho = N;
se (tamanho > Barras) tamanho = Barras;
if (ArraySize(arryTimeSeries) != tamanho)
{
ArrayResize(arryTimeSeries,tamanho);
ArrayResize(ssaWork,tamanho);
}
int limit, i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { SSA[0] = limite+1; return(0); }
if (calculateValue ||| timeFrame==Periodo())
{
for( i=size-1; i>=0; i--)
{
ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);
dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);
if(dev==0) dev=0,1;
arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);
ObjectDelete("Sell "+Time);
ObjectDelete("Comprar "+Tempo);
}
fastSingular(arryTimeSeries,tamanho,Lag,NumComps,ssaWork);
ArrayCopy(SSA,ssaWork);
nmax=ArrayMaximum(SSA,3,1);
nmin=ArrayMinimum(SSA,3,1);
if(nmax===2) {
ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);
ObjectSet("Vender "+Tempo[0],OBJPROP_ARROWCODE,226);
}
if(nmin===2) {
ObjectCreate("Buy "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);
ObjectSet("Comprar "+Time[0],OBJPROP_ARROWCODE,225);
}
//----
retorno(0);
}
limite =MáximoMatemática(limite,MathMin(Bars-1,iCustom(NULL,timeFrame,indicadorNome do Arquivo,"", "returnBars",0,0)*timeFrame/Período()));
for(i=limite; i>=0; i--)
para (i=limite; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);
{
int y = iBarShift(NULL,TimeFrame,Time);
SSA =iCustom(NULL,timeFrame,indicadorNome do Arquivo", "calculateValue", Lag,NumComps,PeriodNorm,N,0,y);
se (timeFrame <= Period() ||y===iBarShift(NULL,timeFrame,TimeFrame,Time)) continuar;
se (!Interpolar) continuar;
data/hora = iTime(NULL,timeFrame,y);
for(int n = 1; i+n = hora; n+++) continuar;
fator duplo = 1,0 / n;
for(int x = 1; x < n; x+++)
{
SSA= x*factor*SSA + (1,0-x*factor)*SSA;
}
}
retorno(0);
}
//+------------------------------------------------------------------+
string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = StringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs===""+iTfTable)return(MathMax(iTfTable,Period()));
return(Period());
}
tempo de fioFrameToString(int tf)
{
para (int i=ArraySize(iTfTable)-1; i>=0; i--)
se (tf===iTfTable) retornar(sTfTable);
return("");
}
//
//
//
//
//
StringUpperCase(string string)
{
string s = str;
para (comprimento int = StringLen(str)-1; comprimento>=0; comprimento--)
{
int tchar = StringGetChar(s, comprimento);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, comprimento, tchar - 32);
caso contrário se(tchar > -33 && tchar < 0)
s = StringSetChar(s, comprimento, tchar + 224);
}
devolução(ões);
}Wulong10
Eu não vejo a imagem
Você poderia, por favor, anexá-lo?
Eu já havia postado a foto, mas aqui está novamente.
Então, quando eu pego um MA do MT4 e o aplico ao SSA (aplique aos dados do primeiro ind.), o MA parece bem, quando abro o MT4, mas quando ele corre em tempo real, ele não segue mais o SSA.
Isto só acontece na M1, na M5 ela funciona sem problemas.
A imagem deve explicá-lo visualmente.
Obrigado.
Eu já havia postado a foto, mas aqui está novamente.
Assim, quando eu pego um MA do MT4 e o aplico ao SSA (aplicar aos dados do primeiro ind.), o MA fica bem, quando abro o MT4, mas quando funciona em tempo real, ele não segue mais o SSA.
Isto só acontece na M1, na M5 ela funciona sem problemas.
A imagem deve explicá-lo visualmente.
Obrigado.Não esqueça que o SSA recalcula. Se você não calcular o MA de todas as barras do SSA que são recalculadas, então ele vai parar de seguir o SSA
Ok, agora eu entendo, porque funciona no M5, é porque eu defini o período do MA lá para 1 e no M1 defini para 2 .... Isso deve resolver o problema. Eu o testei no meu simulador de negociação, não é perfeito, mas muito melhor!
Com o período 1, o MA deve seguir o SSA.
Mas como eu posso incorporar um MA diretamente no código do SSA ? E também deveria recalcular todas as barras do SSA.... ou isso não é possível ?
Ok, agora eu entendo, porque funciona no M5, é porque eu defini o período do MA lá para 1 e no M1 defini para 2 .... Isso deve resolver o problema. Eu o testei no meu simulador de negociação, não é perfeito, mas muito melhor!
Com o período 1, o MA deve seguir o SSA.
Mas como eu posso incorporar um MA diretamente no código do SSA ? E também deveria recalcular todas as barras do SSA....ou isso não é possível ?Wulong10
Você também pode publicar seu arquivo mq4 (copiar o texto para mql quase sempre causa alguns problemas)?
Não importa a última solicitação
Aqui está uma versão com uma média móvel adicional : ssa__ma.mq4
Ok, obrigado Mladen, você é o maior!
Não tenho tempo para testá-lo agora, é pé esta noite, eu lhe informarei o resultado ...quando o tempo estiver maduro.
Agora eu também posso ver como eu deveria ter feito isso, então eu estarei 0,5% menos noobish depois de tê-lo estudado.![](https://c.mql5.com/forextsd/smiles/rolleyes2.png)