Pergunte! - página 135

 
Kalenzo:
Bem, eu acho que você está complicando demais as coisas. Tente usar poucas partes mais curtas de código em vez de uma grande função. Isto deve lhe dar alguma dica:

Obrigado por sua ajuda. Tentei acrescentar o código que você disse, mas para lhe dizer honestamente que estou perdido. Depois que adicionei o código, a EA está mostrando uma lasca de problemas. Eu tenho passado pela sintaxe, mas estou perdido.

Também tive uma pergunta sobre o uso de funções dentro da função int start(). Isso é permitido? Os vairables inicializados dentro de uma função não são capazes de ser vistos por outras funções?

Então

int start()

{

função( int x)

{

// Faça algo

retorno(x)

}

// Fazer alguma coisa ... "Pode x ser chamado na função start()?

return0;

}

Eu anexei minha fonte EA. Sua ajuda é muito apreciada.

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

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

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

//| expert start function |

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

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

Sua ajuda é muito apreciada.

 
Limstylz:
Olá a todos,

Originalmente coloquei isto como um novo tópico, mas ele foi movido para outro tópico de programação (não tenho objeções à sua mudança BTW) e agora parece ter se perdido devido à quantidade de cartazes naquele tópico.

Talvez alguém aqui possa me ajudar?

Limstylz, dê uma olhada neste tópico da Ask! página 39. Acho que talvez haja algumas informações que possam ajudá-lo. Boa sorte.

 

Abraço, amigo...

cutzpr:
Limstylz, dê uma olhada neste tópico Ask! página 39. Acho que talvez haja alguma informação que possa ajudá-lo. Boa sorte.

Obrigado cutzpr, mas eu já consegui resolver isso... a conexão sangrenta com a internet estava em baixo o dia todo e eu tive que usar minhas próprias células cerebrais por uma vez

De qualquer forma, para responder à sua pergunta sobre o int start ()... Este é seu corpo principal da EA e é atualizado continuamente, a cada tique (acho que está certo).

Seu código é um pouco discutível... você pode explicar onde você está passando por um problema? Talvez eu possa ajudar se você puder quebrar os problemas, embora na verdade eu mesmo só esteja aprendendo MQL4.

 

o que há de errado com isso?

Alguém aqui poderia me ajudar, se eu copiar este indicador para minha meta, eu preciso de mais de 5 minutos apenas para abrir minha meta. Mas quando eu a apaguei e reabri minha meta, ela se tornou normal novamente.

Arquivos anexados:
 

Obrigado!!! é ótimo!

 

Voltar para a prancheta de desenho

 

Incorporar o indicador personalizado no consultor especializado

Olá pessoal, alguém sabe como adicionar o indicador personalizado abaixo em um consultor especializado? Para que não precisemos usar o icustom para chamá-lo a partir do arquivo ?

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

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

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

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
Olá pessoal, alguém sabe como adicionar o indicador personalizado abaixo em um consultor especializado? Para que não precisemos usar o icustom para chamá-lo a partir do arquivo ?
//+------------------------------------------------------------------+

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

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

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

Você deve usar a função iCustom em sua EA para chamar este indicador:

iCustom(Símbolo(),0, "ARSI",ARSIPeriod,0, 0);

O número em vermelho é a barra que você quer ver. Mude-a conforme necessário.

FerruFx

 
FerruFx:
Você deve usar a função iCustom em sua EA para chamar este indicador:

iCustom(Símbolo(),0, "ARSI",ARSIPeriod,0, 0);

O número em vermelho é a barra que você quer ver. Mude-a conforme necessário.

FerruFx

Obrigado por sua resposta. Ya, eu sei que podemos usar a função icustom, mas como eu sei, podemos incorporar a função de indicador inserindo a codificação do indicador, o seguinte website Indicadores incorporados em Expert Advisors (alternativa iCustom) | www.metatrader.info que explicado por codersguru descreve sobre isso, mas para o indicador ARSI, eu não tenho certeza de como incorporá-lo em um expert advisor. Obrigado por qualquer recomendação!!

 

melhoria de 10 pontos3

Olá a todos.

Estamos tentando melhorar 10 pontos3. Precisamos mudar o código para fechar o último terceiro comércio. Por favor, consulte os últimos posts aqui:

https://www.mql5.com/en/forum/174975/page259.

Estamos obtendo bons resultados aqui.