Ajuda na codificação - página 62

 

...

Você tem que fazer 2 coisas
:- declarar a variável "período" como dupla (a MQL às vezes se comporta de forma estranha quando em divisão é usada uma variável do tipo inteiro)

- inicializar essa variável "período" (neste momento ela não é inicializada e é por isso que o último passo não funcionou)

Depois disso, você terá algo assim:

Tenha um bom fim de semana

chenairbin:
#janela_indicadora de propriedade_separarate_window

#property indicator_buffers 1

#indicador de propriedade_cores1 Vermelho

#indicador de propriedade_máximo 100

#indicador de propriedade_nível1 70

#indicador de propriedade_nível2 50

#indicador de propriedade_nível3 30

#indicador de propriedade_mínimo 0

//---- parâmetros de entrada

período de int. externo = 14 ;

int externo Período curto = 5 ;

Interior externo Período médio = 8;

int externo Longo período = 13;

int externo mamodio = 2 ;

//---- buffers

duplo RSI[];

duplo ShortRSI[];

duplo MiddleRSI[]; duplo MiddleRSI[];

duplo LongRSI[]; duplo LongRSI[];

duplo SMRSI[]; duplo SMRSI[];

período int ;

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

//| Função de inicialização do indicador personalizado |

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

int init()

{

//---- indicadores

IndicatorBuffers(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI); SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI); SetIndexBuffer(4,LongRSI);

//---- nome para DataWindow e subwindow label do indicador

IndicatorShortName("SMRSI("+rsiperiod+", "+Shortperiod+", "+Middleperiod+", "+Longperiod +", "+mamode+")");

SetIndexDrawBegin(0,rsiperiodo+Longperiodo);

período=Curtoperíodo+Médioperíodo+Longoperíodo;

return(0);

}

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

//| Função de iteração de indicador personalizada |

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

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

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

if(counted_bars>0) counted_bars--;

limite = Barras_contadas_barras;

for( i=limite; i>=0; i--) RSI=iRSI(NULL,0,rsiperiodo,0,i);

for( i=limite; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,curto-período,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Middleperiod,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

retorno(0);

}

//+------------------------------------------------------------------+
Arquivos anexados:
smrsi.gif  33 kb
_test0.mq4  3 kb
 

n_n

mladen:
Você tem que fazer 2 coisas
:- declarar a variável "período" como dupla (a MQL às vezes se comporta de forma estranha quando em divisão é usada uma variável do tipo inteiro)

- inicializar essa variável "período" (neste momento ela não está inicializada e é por isso que o último passo não funcionou)

Depois disso, você terá algo assim:

Tenha um bom fim de semana

Obrigado!

 

Hi,

eu baixei o indicador anexado no site mql4. Tento fazer um EA baseado neste indicador, mas quando começo o backtest após alguns segundos as plataformas caem e acho que é uma falha do indicador porque ele está usando muito cpu.

Portanto, estou perguntando se é possível aliviar o código para resolver este problema.

Obrigado por sua disponibilidade.

cronex_taichi.mq4

Arquivos anexados:
 

dasio

Testei-o com este trecho, e funciona bem. Eu não sei os parâmetros que você usou, então isto é apenas um indicador padrão, mas não há problema desta forma

int init()

{

return(0);

}

int start()

{

Comment(iCustom(NULL,0,"Cronex Taichi",0,0));

return(0);

}

dasio:
Hi,

eu baixei o indicador anexado no site mql4. Tento fazer um EA baseado neste indicador, mas quando começo o backtest após alguns segundos as plataformas caem e acho que é uma falha do indicador porque ele está usando muito cpu.

Portanto, estou perguntando se é possível aliviar o código para resolver este problema.

Obrigado por sua disponibilidade.

cronex_taichi.mq4
 
mladen:
dasio

Testei-o com este trecho, e funciona bem. Eu não sei os parâmetros que você usou, então isto é apenas um indicador padrão, mas não há problema desta forma

int init()

{

return(0);

}

int start()

{

Comment(iCustom(NULL,0,"Cronex Taichi",0,0));

return(0);

}

Obrigado, por sua resposta,

O que eu vejo é que na história o indicador foi carregado repetidamente, então eu movo o código de icustom apenas em um evento de vela nova, mas o problema ainda persiste.

Eu não sei por quê.

No entanto, obrigado por sua disponibilidade.

 

Hi,

encontrei o problema. Agora está tudo bem.

Eu tenho outro problema com outra ea.

Eu tenho este dois códigos e a função Lotti() seria me devolver o número do lote para um pedido.

Ao compilá-lo, recebo Posizioni Internal Error. O que está errado? Obrigado;

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[/PHP]

[PHP]int Lotti(){

int Lotti;

int Posizioni=OTBM(MagicNumber);

switch (Posizioni)

{

case 0 : Lotti=0.1; break;

case 1 : Lotti=0.2; break;

case 2 : Lotti=0.4; break;

case 3 : Lotti=0.8; break;

case 4 : Lotti=1.6; break;

case 5 : Lotti=3.2; break;

case 6 : Lotti=6.4; break;

case 7 : Lotti=12.8; break;

}

return(Lotti);

}
 

Tente substituir OTBM() por este :

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

for (int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

}

}

return(intCount);

}

[/PHP]

dasio:
Hi,

i found the problem. Now all its ok.

I have another problem with another ea.

I have this two code and the function Lotti() would be return me the number of lot for an ordersend.

When i compile it i receive Posizioni Internal Error. What's wrong? Thank you;

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[PHP]int Lotti(){

int Lotti;

int Posizioni=OTBM(MagicNumber);

switch (Posizioni)

{

case 0 : Lotti=0.1; break;

case 1 : Lotti=0.2; break;

case 2 : Lotti=0.4; break;

case 3 : Lotti=0.8; break;

case 4 : Lotti=1.6; break;

case 5 : Lotti=3.2; break;

case 6 : Lotti=6.4; break;

case 7 : Lotti=12.8; break;

}

return(Lotti);

}
 

Hi, -.-"

Eu não encontro paz com estes códigos eheheh.

Tenho um problema com uma função que tem que me resultar no lucro de toda ordem aberta, mas acho que não é trabalho porque a condição nunca foi respeitada. Abaixo do código:

.....

if(Profit()>=0.....[/PHP]

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}
 

dasio

Tente assim :

.....

if(Profit()>=0.....[/PHP]

double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total-1; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}[/PHP]

dasio:
Hi, -.-"

I do not find peace with these codes eheheh.

I have a problem with a function that have to result me the profit of all openorder but i think it's not work because the condition never been respected. Below the code:

[PHP].....

if(Profit()>=0.....

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}
 
mladen:
dasio

Tente assim :

.....

if(Profit()>=0.....[/PHP]

[PHP]double Profit()

{

int total=OrdersTotal();

double profit=0;

for(int i=0; i<total-1; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;

profit+=OrderProfit();

}

return(profit);

}

Desta forma eu verifico o pedido que não é aberto com um número mágico especificado, certo? Preciso verificar o pedido com um símbolo específico e um número mágico. Não sei se é importante, mas encontrei o erro no testador de estratégia.

Razão: