Como codificar? - página 321

 
mladen:
dasio

Tente algo como isto :

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

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

//

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

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

if (countedBars<0) return(-1);

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

for(i=limit; i>=0; i--)

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Mladen, eu tentei, mas não tive sucesso.

Anexe aqui um exemplo do meu indicador. As únicas diferenças estão nos cálculos, mas a outra é a mesma coisa.

Você pode se integrar com sua fórmula? para que eu também possa estudá-la.

Obrigado.

teste1.mq4

Arquivos anexados:
test1.mq4  3 kb
 

Olá a todos. Procurando por ajuda rápida para escrever uma linha de código para um sinal.

Estou usando Step_Indy e uma cruz EMA para sinal. O que eu quero fazer é que o EA entre no comércio somente quando ambos dão um sinal a 10 barras um do outro.

Então digamos que o Passo dá um sinal, quero que o EA olhe para trás 10 barras para ver se havia uma cruz de MA, se sim, entre. (Nota: não quero que ele apenas verifique e veja se o sinal de corrente cruzada MA é longo, quero que ele tenha sido recente como dentro de 10 barras).

TIA para qualquer ajuda, acho que não vi isso ser feito no passado em nenhuma EA que eu tenha analisado.

 

dasio

Pelo código, não consigo ver qual é a intenção do código. De qualquer forma, aqui está um código no qual você pode escolher se deseja usar a faixa verdadeira como o valor "básico" do código (é a primeira parte de seu código) ou se deseja usar a segunda parte de seu código como o valor "básico".

dasio:
Mladen eu tentei, mas não tive sucesso.

Anexe aí um exemplo do meu indicador. As únicas diferenças estão nos cálculos, mas a outra é a mesma.

Você pode integrar com sua fórmula? para que eu também possa estudá-la.

Obrigado.

teste1.mq4
Arquivos anexados:
_test1.mq4  2 kb
 

Problemas de sinal

Mladen, obrigado mais uma vez, o alerta não se repete mais, funcionando bem.....mas eu quero colocar um stop sgnal..... e escrevi o seguinte código, o sinal de compra e venda funciona, mas o stop de compra e venda não está funcionando, veja o código abaixo:

//-----Assigning Alarts----

if(Period()==240){

data estática última horaAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0); duplo RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

duplo b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0); double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

duplo b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

duplo nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// Alertas comerciais

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alerta("Buy","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((adx_h4>==20)&&(di_m_h4>=20)&&(di_m_h4>di_p_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alerta("Sell","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

// Parar alertas

if((adx_h4>==20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alerta("Stop Buy","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((adx_h4>==20)&&(di_m_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Tempo[0]))

{

lastAlerted=Time[0];

Alert(" Stop Sell","\n", "Current time is ",TimeToStr(CurTime()),"\n", Symbol());

}

mladen:
Tente assim :
if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 
mladen:
dasioDo código eu não consigo ver qual é a intenção do código. De qualquer forma, aqui está um código no qual você pode escolher se deseja usar a faixa verdadeira como o valor "básico" do código (é a primeira parte de seu código) ou se deseja usar a segunda parte de seu código como o valor "básico".

Obrigado mladen.

Eu sei que calculado desta forma não faz sentido. Mas estou tentando codificar uma análise que faço todos os dias. ^^

É apenas 1/3 do trabalho.

Obrigado

 
mladen:
dasioDo código eu não consigo ver qual é a intenção do código. De qualquer forma, aqui está um código no qual você pode escolher se deseja usar a faixa verdadeira como o valor "básico" do código (é a primeira parte de seu código) ou se deseja usar a segunda parte de seu código como o valor "básico".

Obrigado, é perfeito.

É possível acrescentar a correção de sexta-feira?

Obrigado.

Cumprimentos

 

Volume

quero consultar o volume de cada barra, mas não faço a menor idéia de como fazer isso, sou novo na programação mql4, mas tento aprender que tentei este programa simples, mas pode ser uma bobagem completa, por favor me avise e quaisquer sugestões serão apreciadas. abaixo está o início do script para consultar o volume de uma barra e depois imprimir o resultado, por favor me avise onde estou indo errado!!!! continuar tentando compilar há um erro que diz (fim do programa fim do parêntese } esperado.

//--- parâmetros de entrada

TakeProfit duplo externo = 4;

StopLoss duplo externo = 20;

Duplo Externo Lots = 0,1;

Duplo TrailingStop externo = 30;

duplo volume externo = 600;

duplo volume externo sem volume = 150;

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

//| função de iniciação de especialista |

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

int start()

{

se (Volume=>volumemore)

{

Imprimir ("volume mais");

{

se (Volume=< sem volume)

{

Imprimir ("volume menos");

if(Bars<20)

{

Imprimir ("barras com menos de 20");

{

//----

//----

retorno (0);

}

 

Use Volume onde "índice" é o número se a barra para a qual você quer ver o volume. Basta lembrar que no metatrader 4 o "Volume" é sempre o volume do tick

Tim Latham:
quero consultar o volume de cada barra, mas não faço a menor idéia de como fazer isso, sou novo na programação mql4, mas tento aprender que tentei este programa simples, mas pode ser uma bobagem completa, por favor me avise, e qualquer sugestão seria apreciada. abaixo está o início do script para consultar o volume de uma barra e depois imprimir o resultado, por favor me avise onde estou indo errado!!!! continuar tentando compilar há um erro que diz (fim do programa fim do parêntese } esperado.

//--- parâmetros de entrada

TakeProfit duplo externo = 4;

StopLoss duplo externo = 20;

Duplo Externo Lots = 0,1;

Duplo TrailingStop externo = 30;

duplo volume externo = 600;

duplo volume externo sem volume = 150;

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

//| função de iniciação de especialista |

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

int start()

{

se (Volume=>volumemore)

{

Imprimir ("volume mais");

{

se (Volume=< sem volume)

{

Imprimir ("volume menos");

if(Bars<20)

{

Imprimir ("barras com menos de 20");

{

//----

//----

retorno (0);

}
 
jayjonbeach:
Olá a todos. Procurando por ajuda rápida para escrever uma linha de código para um sinal.

Estou usando Step_Indy e uma cruz EMA para sinal. O que eu quero fazer é que a EA entre no comércio somente quando ambos dão um sinal a 10 barras um do outro.

Então digamos que o Step dá um sinal, eu quero que o EA olhe para trás 10 barras para ver se havia uma cruz MA, se sim entre. (Nota: não quero que ele apenas verifique e veja se o sinal de corrente cruzada MA é longo, quero que ele tenha sido recente como dentro de 10 barras).

TIA para qualquer ajuda, acho que não vi isso ser feito no passado em nenhuma EA que eu tenha analisado.

Bem, eu tentei algumas coisas, mas até agora nada funcionou.

Aqui está uma das maneiras que tentei fazer isso:

lookback int externo = 10;

EMA1 = 21;

EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest );

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

duplo Cinquenta e cincoEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

se (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

se (trendCurrent<0)

retorno(LONG);

senão retorno(NENHUM);

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

se (trendCurrent<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

se (trendCurr>0)

retorno(CURTO);

caso contrário, retornar(NENHUM);

}

}

}

retorno(NENHUM);

}

Quaisquer idéias apreciadas, eu também tentei (int i=1; i<=lookback; i++)

 

...

jayjonbeach,

Você está testando o valor da moeda de tendência repetidamente no loop sem mudá-la (assim, ela sempre retornará NENHUM)

Tente colocar o iCustom() no laço e depois teste esse valor. Algo como isto :

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
Bem, eu tentei algumas coisas, mas até agora nada funcionou.

Aqui está uma das maneiras que eu tentei isto:

lookback int externo = 10;

EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest);

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

duplo Cinquenta e cincoEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

se (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

se (trendCurrent<0)

retorno(LONG);

senão retorno(NENHUM);

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

se (trendCurrent<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

se (trendCurr>0)

retorno(CURTO);

caso contrário, retornar(NENHUM);

}

}

}

retorno(NENHUM);

}

Quaisquer idéias apreciadas