[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 662

 
drknn:


Correto, porque o primeiro parâmetro retorna um número e o segundo parâmetro é um valor inteiro dentro de limites aceitáveis. A questão inteira é o que exatamente irá entrar na variável. Tente imprimi-lo como está e tente esta construção:

É interessante... Fez com que fosse assim:

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8),
   AC2   =NormalizeDouble(iAC(sy,tf,2),8),
   AC3   =NormalizeDouble(iAC(sy,tf,3),8);
   
   Comment("\n","AC1 = ",AC1," AC2=",AC2);
   string str1=AC1;
   Print("str1 = ",str1);
   string str2=AC2;
   Print("str2 = ",str2);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}
Mostradores de comentários

AS1 = 0,001 AS2 = 0,001,

Na janela de dados, AC1 = 0,001008, AC2 = 0,001020,

e no registro diz (os dois últimos valores):

0,00100029
0,00100771

 
IgorM:

Não consigo descobrir como encontrar os extremos de uma função

Eu tenho uma matriz de dados que armazena valores:

Como encontrar fraturas - extrema usando uma matriz de dados de 250 elementos e armazenar apenas os números dos elementos onde esses extremos estão localizados


Rapazes, é um pouco complicado :)
Você poderia esboçar um método simples:

//+------------------------------------------------------------------+
void searchExtremums(double base[], double &find[]){
   int step = 1;
   for(int loop = 0; loop < ArraySize(base)-2; loop++){
      if((base[loop] > base[loop+1] && base[loop+1] < base[loop+2]) || (base[loop] < base[loop+1] && base[loop+1] > base[loop+2])){
         ArrayResize(find, step);
         find[step - 1] = base[loop+1];
         step++;
      }
   }   
}
//+------------------------------------------------------------------+

Você passa a matriz onde quer encontrar extrema (base) e a matriz para escrevê-los (encontrar), um exemplo de chamada para a matriz Vladimir:

double res[];
searchExtremum(my_array, res);

E nós lhe mostramos o resultado:

for(int s = 0; s < ArraySize(res); s++)Alert(res[s])
Parece mais fácil assim :)
 
ToLik_SRGV:


Parece ser mais simples :)


OK, vou tentar verificar hoje, pode ser mais simples, mas não consigo colocar a combinação bem na minha cabeça.

pesquisa vaziaExtremums(double base[], double & find[]){

Agora eu preciso verificar funções como estas

 
IgorM:

OK, vou tentar verificar hoje, pode ser mais simples, mas não consigo colocar a combinação bem na minha cabeça.

pesquisa vaziaExtremums(double base[], double & find[]){

agora eu preciso verificar tais funções

Igor, eu já escrevi sobre isso neste tópico :)))

Quando você passa uma variável para uma função, através de seu parâmetro, a variável é passada por valor, isto significa que a mudança da variável na própria função não fará com que ela seja sobregravada.
Tente passá-lo por referência, insira um "&" na frente do nome do parâmetro

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
Mathemat:

O posto da Volfram foi excluído para propagação em vários fios.

Volfram, você criou seu próprio fio especificamente para este fim. Você já foi respondido; isso não é suficiente?

P.S. Deixe-me contar-lhe um segredo, Volfram: a ausência de interesse evidente em sua idéia sugere implicitamente que a idéia não merece nenhuma atenção. Por conseguinte, ninguém estava disposto a implementá-la "por uma taxa".

Você cancelou a opção de notificação por e-mail...

Como você sabe sequer se alguém respondeu ou não sem ela? Quando você o terá de volta?

 
artmedia70:

É interessante... Fez com que fosse assim:

O comentário é exibido ao mesmo tempo

AS1 = 0,001 AS2 = 0,001,

Na janela de dados AC1 = 0,001008, AC2 = 0,001020,

e no registro diz (os dois últimos valores):

0.00100029
0.00100771


Isso provavelmente é com os desenvolvedores ;)
 
artmedia70:

É interessante... Fez com que fosse assim:

O comentário é exibido ao mesmo tempo

AS1 = 0,001 AS2 = 0,001,

Na janela de dados AC1 = 0,001008, AC2 = 0,001020,

e no registro diz (os dois últimos valores):

0.00100029
0.00100771

Eu também tentei, tudo parece estar bem, no comentário:
AC = -0.0004, na revista -0.00035586
AC2 = -0,0007, periódicos -0,00068589
 
ToLik_SRGV:
Eu também tentei, tudo parece bem, no comentário:
AC = -0.0004, na revista -0.00035586
AC2 = -0.0007, no júri -0.00068589

Comentário() parece arredondar valores internamente... E como às vezes é conveniente vê-los ali mesmo na tela durante os testes visuais... No entanto, não exatamente... :)

Sim, e, a propósito, aqui em um fórum sobre normalização lido assim de algumas horas a 7.30 da manhã ...
A normalização deve ser feita o mais próximo possível da operação de comparação. Portanto, acho que devo mudar algumas coisas em algumas funções e códigos... E então o teste mostrará a diferença...

 
artmedia70:

Comentário() parece arredondar valores internamente... E como às vezes é conveniente vê-los ali mesmo na tela durante os testes visuais... No entanto, não exatamente... :)

Quando eu estava escrevendo uma função de gerenciamento de lotes, tive que fazer uma dll-library em Delphi, porque a tarefa que eu precisava usar MQL4 era impossível de resolver...
 

Olá! Você pode me explicar, por favor, quem é um super boneco na MQL4, qual é a coisa certa a fazer? Estou escrevendo minha primeira EA. Eu faço um pedido SellStop e depois que ele é acionado, o pedido BuyStop é feito. Acho que preciso usar OrdeCloseTime. Eu tentei muitas variantes, mas o EA só vê a ordem quando OrdeCloseTime==0. Depois que SellStop é fechado, SellStop é aberto novamente. Estou lhes fornecendo o código. Nesta variante, SellStop e BuyStop são abertos simultaneamente. Por favor, me ajude. Agradecemos antecipadamente.

int I = 0;

int start()

{

se (I < 1)

{

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OP_SS,Slippage,SL,CP_SS);

se (bilhete>0)

{Alerta("OrderSend"," ",bilhete); } senão {Alerta("!OrderSend","",GetLastError()); }

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

se (OrderSelect(ticket,SELECT_BY_TICKET)==verdadeiro)

{Alerta("OrderSelect", ",bilhete); } senão {Alerta("!OrderSelect"," ",GetLastError()); }

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

OrderSend(Symbol(),OP_BUYSTOP,Lot,OP_BS,Slippage,SL,CP_BS);

}

I=1;

}

retorno (0);

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