Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 662

 
Bem, alguém já tem um RSI iMAOnArray pronto para usar?
 
berezhnuy:
Bem, alguém já tem um RSI iMAOnArray pronto para usar?

Posso ver porque ninguém respondeu com muita "ajuda".
 
berezhnuy:
Bem, alguém já tem um RSI iMAOnArray pronto para usar?

há um na kodobase, você só tem que procurá-lo
 
Camaradas. Decidi, em nome da prática, fazer uma simples exibição de absorção. Mas no final houve um problema que se eu mudar o cronograma no gráfico e voltar ao cronograma com a absorção, o alerta é acionado novamente. Encontrei uma opção para alertar apenas uma vez por barra, mas novamente tudo é reinicializado quando troco os intervalos de tempo.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Aqui está o próprio código, sem desenhos gráficos, apenas lógica. Como corrigi-lo?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. O indutor reinicia o "ThisBarTrade" condicional durante a desinicialização enquanto muda para outros períodos de tempo.
 

Você pode me dizer como separar o bilhete para comprar e vender separadamente?

ticket=OrderSend("EURUSD",OP_SELLL,SellLot,Bid,3,0,0,",MAGICMA,0,Red);


senão

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES);

OrderClose(ticket-3,SellLot,Ask,3,Red);


}

especialmente o ticket-3, TK trade é uma espécie de preço médio entre vários pedidos ) mas como separar a compra de tickets da venda de tickets ? para que eu possa atender a um pedido que foi aberto há 3 baías atrás ) Também para venda

 

Olá amigos!) Eu tenho um problema desses:

escrevi um programa que abre um modelo (com os indicadores e o objeto gráfico de que preciso) na inicialização, depois analisa os dados e as trocas. quando eu apenas o executo em um gráfico, tudo funciona bem. quando o executo em um testador, ele só funciona quando visualizado. entendo que o modelo só pode ser carregado em um gráfico visualmente aberto... por isso não funciona em modo de teste normal, pois só funciona na tabela sem carregar o modelo... E quanto à otimização? tenho alguns parâmetros, e de alguma forma é muito pouco razoável executar cada opção manualmente com a visualização.

ajuda plz)) como você pode resolver o problema com a otimização e o modelo?

 
evillive:

Pontuação ))))


Mas eu não escrevi em MQL, mas formalmente, esse é o problema (:

E como poderia ser determinado?

Como o número de valores é muito limitado, podemos verificá-lo com uma força bruta direta:

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Aqui nós conseguimos:

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

Acontece que eles são iguais. Se não houvesse 3, mas, digamos, 3 milhões de valores, você ainda poderia verificar na máquina - devolver os resultados das funções e compará-los. Se nenhuma diferença for encontrada para toda a gama, então eles são iguais.

Se for usada uma expressão em vez de uma variável, por exemplo, uma chamada de função, então a equivalência torna-se "equivalência com reservas" devido ao curto circuito de cálculo das expressões lógicas.

 

Olá a todos!

Fabricou um indicador baseado em outro indicador.

O primeiro tampão conta como deveria.

A segunda não: quero que comece a contar com cada barra depois de "linha1 > 0".

Isso é basicamente o que eu fiz em meu consultor especializado:

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

E depois de "turno >= shet", a condição de desenho é acionada.

Eu mudo os parâmetros externos da variável "shet", não há mudança no indicador.

Qual pode ser o problema?

Código indicador:

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Olá a todos!

Fabricou um indicador baseado em outro indicador.

O primeiro tampão conta como deveria.

A segunda não: quero que comece a contar com cada barra depois de "linha1 > 0".

Isso é basicamente o que eu fiz em meu consultor especializado:

E depois de "turno >= shet", a condição de desenho é acionada.

Eu mudo os parâmetros externos da variável "shet", não há mudança no indicador.

Qual pode ser o problema?

Código indicador:


Há alguma confusão em acrescentar 0, mas tente desta forma:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Boa tarde.

No terminal, se eu clicar duas vezes na linha de pedido, abre-se uma janela de modificação.

Mas se o preço de abertura de um pedido e o lucro de outro pedido estiverem em linha, o último pedido modificado se abre.

Por favor, informe se o mql4 tem uma função para abrir a janela de modificação do pedido, clicando na ordem necessária no indicador?