[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 403

 
ruslanchik:
Por favor, me diga como calcular o tamanho da pilha

Seja mais específico com sua pergunta.
 

É possível pular um passo desnecessário na otimização e ir para o próximo passo?

Exemplo: há parâmetros de entrada(tipo duplo) que precisam ser otimizados: x1, x2, x3, x4. Seus valores são de 1 a 5. Passo 0,1

É claro que neste caso haverá 41*41*41*41=2.825.761

Mas precisamos pesquisar na seguinte restrição: 10,5 < x1+x2+x3+x4 < 11,5. Já está claro aqui que haverá muito menos variantes de pesquisa. (esta é a própria restrição à soma necessária)

Portanto, se esta restrição for adicionada ao código do Consultor Especialista como este

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

então durante a otimização (quando cada novo tick chega), as variantes inadequadas também serão tomadas, por exemplo x1=4, x2=4, x3=4, x4=4; o que não vai acontecer exatamente - é a execução do código principal.

Ou seja, enquanto esta etapa de otimização não "passar" pelo intervalo histórico, não haverá transição para a etapa seguinte. Haverá uma "convicção" de que a condição 10,5 < x1+x2+x3+x4 < 11,5 não é cumprida e só interromperá a execução do código principal

O tempo será desperdiçado por variantes tão obviamente inadequadas

Como podemos excluir tais etapas de otimização com parâmetros obviamente inadequados?

Em outras palavras, quando outro conjunto de parâmetros se torna inadequado, por que esta etapa não deveria ser otimizada e passar imediatamente para a próxima?

 
fmql:

É possível pular um passo desnecessário na otimização e passar para o próximo passo?


é possível otimizar 3 parâmetros e ajustar o quarto para a quantidade desejada.

ou usar a terceira aba "Otimização" para gerar o evento desejado espontaneamente.

 
sergeev:

é possível otimizar 3 parâmetros e ajustar o quarto para a quantidade necessária.

ou usar a terceira aba "Otimização" para gerar o evento desejado de forma espontânea.

A questão é que é impossível otimizar 3 parâmetros sem o 4º parâmetro no meu caso.

Aqui é a seleção conjunta deles que é importante e sua soma é limitada no intervalo.

(é aproximadamente como procurar partes de todos os componentes de uma mistura e a massa total desta mistura é limitada a um intervalo rigoroso)

Você pode me dizer mais sobre a terceira aba, qual é esta geração espontânea do evento desejado?

 

Boa tarde.

Você pode me dizer como extrair valores de vela (Alto, Baixo, Aberto, Fechado) do último extremo do indicador ZigZag ?

 
O mesmo que para qualquer outra vela. As mesmas funções. ( Pense no diâmetro do seu planeta.(c) )
 
Se você quiser obter o número da barra do último extremo em si, use o nome do objeto do último raio para obter a hora da primeira coordenada, que corresponderá à hora da barra. Usando o tempo de barra, determinar o número da barra. Determinar as características da barra a partir do número da barra.
 
fmql:

Você poderia elaborar na terceira aba, qual é a geração espontânea do evento desejado?


Mais em detalhes na ajuda

Em resumo, você pode criar suas próprias condições para o ponto na terceira aba (por exemplo, abrir 10 pedidos perdidos em uma fila) e o testador saltará automaticamente esta corrida e passará para a próxima.

 
Stells:

Boa tarde.

Você pode me dizer como extrair valores de vela (Alto, Baixo, Aberto, Fechado) do último extremo do indicador ZigZag ?


Tal operação requer alguns cálculos.

Eu costumava fazer isso desta maneira:

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

Agora você sabe os números de barras nos últimos 2 extremos (min e max) e depois seus altos, baixos.... fácil de encontrar !

- Fechar[x1], Abrir[x2], .... etc.

Talvez alguém sugira uma opção mais simples.

 
Não é possível organizar um loop, X e Y são sempre 0.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+