Como posso recuperar dados de um indicador? - página 6

 
Retabs:


Estarei me corrigindo. Já inserimoso código através do botão SRC.

Por que então você apagaria meu código se ele está, como você escreveu, inserido de acordo com as regras?


Porque você tem que oferecer seu código colado de acordo com as regras, não eu o seu! Agora mesmo a apaguei quando cheguei em casa!
 
borilunad:

Porque você tem que oferecer seu código colado de acordo com as regras, não eu o seu! Agora mesmo a apaguei quando cheguei em casa!


Por favor, informe. Como permitir a abertura de um novo comércio somente quando as linhas indicadoras se cruzam novamente, ou seja, após val1 não é igual a val2? (código acima). Por loop?

 
Retabs:


Por favor, informe. Como limitar a abertura de um comércio até que outro seja fechado? (código acima).


Antes de abrir, coloque a condição de que se não houver posição, então você pode abrir!

Existem muitas funções diferentes, mas enquanto você as explora, sugiro uma de espera que é para todas as ocasiões!

if(OrderTotal() == 0)
{
  // потом остальные условия, чтобы зря не производить расчёты,
  // если пока ещё есть открытая позиция. 
  // Если понадобится открывать больше позиций, тогда проставите
  // допустимый максимум, например, 3 позиции:
if(OrderTotal() < 3)
{
  // Всё это не ленитесь находить в Документации! Замечено, что 
  // если находите сами и сами делаете, тогда ваши знания и навыки
  // будут крепкими!
  
 
<br / translate="no">
Borilunad:

Porque você tem que oferecer seu código colado de acordo com as regras, não eu o seu! Agora mesmo a apaguei quando cheguei em casa!

Obrigado. Revisitei minhas condições e percebi que não consegui bem o que queria. Sinto muito.

Por favor, pode me dizer. Como permito a abertura de umnovo comércio somente quando as linhas indicadoras são cruzadas de novo, ou seja, após val1 não é igual a val2? (código acima). Permitir apenas uma troca entre 2 trocas, independentemente do número de trocas abertas naquele momento, e, é claro, sem tocá-las.

Tentei adicionar uma nova variável como um marcador que muda seu valor durante a travessia, mas nada funcionou.

Acho que a única saída é pegar o momento em que o negócio é feito e mudar o marcador de volta ao seu valor original.

 
Retabs:


Por favor, informe. Como permitir a abertura de um novo comércio somente quando as linhas indicadoras são cruzadas de novo, ou seja, após val1 não é igual a val2? (código acima). É um loop?


Enquanto eu escrevia para você, você acrescentou condições que você quer ver escritas por mim! Aqui é onde você tem que encontrar e escrever o que você mesmo precisa, procurando na Documentação e olhando para seu gráfico de séries cronológicas, barras-velas, e ir fundo no estudo do Tutorial de Sergei Kovalev, que explica tudo de uma maneira acessível!

Portanto, não perca seu tempo, tome o estudo, e o resultado será! E se você usar dicas você mesmo prestará um mau serviço, porque mesmo uma EA profissional sempre precisa de uma babá, sem a qual ela ficará rabugenta a qualquer momento e deixará de ganhar por causa das frequentes mudanças de hábitos do mercado! É por isso que você deve sempre procurar novas soluções, experimentar e mudar a estratégia um pouco ou muito, e saber o que você fez é muito mais fácil do que entender a de outra pessoa! Boa sorte para você!

 
borilunad:


Enquanto eu escrevia para você, você acrescentou condições que você quer ver escritas por mim! Aqui é onde você tem que encontrar e escrever o que você mesmo precisa, procurando na Documentação e olhando para seu gráfico de séries cronológicas, barras-velas, e ir mais fundo no estudo do Tutorial de Sergey Kovalev, que explica tudo de uma maneira fácil de entender!

Portanto, não perca seu tempo, dedique seu tempo ao ensino e você terá resultados! E nas dicas você mesmo prestará um mau serviço, porque mesmo uma EA profissional sempre precisa de uma babá, sem a qual ela ficará rabugenta a qualquer momento e deixará de ganhar por causa das frequentes mudanças nos hábitos do mercado! É por isso que você deve sempre procurar novas soluções, experimentar e mudar a estratégia um pouco ou muito, e saber o que você fez é muito mais fácil do que entender a de outra pessoa! Boa sorte para você!


OK. Não vou desistir da referência. Por favor, diga-me qual direção tomar para "pegar o momento em que a transação ocorreu e mudar o marcador de volta ao seu valor original".
 
Retabs:

Muito bem. Eu não vou desistir do certificado. Diga-me qual a direção a tomar para "pegar o momento em que o comércio ocorreu, e mudar o marcador de volta ao seu valor original".


série cronológica na Documentação, barras-deslizantes nográfico! E você aprenderá muitas coisas muito úteis e úteis ao longo do caminho! E o Tutorial!

E não é por um dia ou dois de aprendizado, meses e anos, pela vida, se você realmente quiser saber e saber como! Boa sorte!

 
_new-rena:

Finalmente.

O erro 130 é devido às paradas e tomadas de controle. Deve haver um nível de preço que deve ser acionado. (certamente não esperando por um preço de -100 ou 60, deve ser como Preço -100*Ponto ou Preço+60*Ponto, por exemplo)


Por favor, informe. Como permitir a abertura de umnovo comércio somente quando as linhas indicadoras serão cruzadas de novo, ou seja, após val1 não será igual a val2? Permitir apenas um comércio entre duas travessias, não dependendo do número de aberturas naquele momento de travessias anteriores, e claro, não tocando nelas.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=60;
input int   TakeProfit=100;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   
   if(val1>val2)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val1<val2)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
//+------------------------------------------------------------------+
 
Retabs:


Por favor, informe. Como permitir a abertura de umnovo negócio somente quando as linhas indicadoras se cruzarem novamente, ou seja, após val1 não será igual a val2? Para que entre 2 travessias seja permitido apenas um acordo, independentemente do número de acordos abertos naquele momento, e, claro, sem tocá-los.

Assim
void OnTick()
  {
//---
   double val10=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val20=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);

   double val11=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,1);
   double val21=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,1);
   
   if(val11 < val21 && val10>=val20)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val11 > val21 && val10<=val20)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
 

Obrigado por sua resposta. Há pouco e eu mesmo acabei de encontrar soluções, mas com base em um princípio diferente. O meu e o seu, parece estar correto.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=100;
input int   TakeProfit=160;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
int    X=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   

   if (X>0 && val1==val2)
   Ctrl=0;
   
   
    if (X==0  )
      {
      if(val1>val2)
      OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
      Ctrl=Ctrl+1;
      }
      
    if (X==0 ) 
    
      {if(val1<val2)
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
      X=X+1;
      }
   
  }
//+------------------------------------------------------------------+

Mas é o seguinte: no ponto de cruzamento visual, as linhas são realmente cruzadas mais de uma vez, portanto o sinal é recebido várias vezes e o Expert Advisor tem tempo para fazer 4-30 pedidos.

Temos que nos livrar deste inconveniente. A única coisa que inventei foi fazer a média das leituras anteriores e compará-las com as atuais. Logicamente, sim. Mas como posso fazer isso de forma programática? Socorro!

Razão: