[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 331

 

Devo ter estragado algo com os amortecedores novamente. Por favor, dê uma olhada.

A tarefa é a seguinte:

1) O LSMA é calculado. Se [i]>[i+1] - a cor é verde, se [i]<[i+1] - a cor é vermelha. Tudo está claro com isto.

2) Eu preciso encontrar o comprimento da série de valores verdes e vermelhos e armazená-los em uma matriz. Este é o problema que eu ainda não consegui resolver sozinho.

//+------------------------------------------------------------------+
//|                                                   LSMA_Stat2.mq4 |
//|                                                       silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "silhouette"
#property link      "http://www.metaquotes.net"

#property copyright "silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
double BufferYellow[],BufferGreen[], BufferRed[];
int GreenSeries[], RedSeries[], g=0, r=0, gc=0, rc=0;
string Symb;

int init()
  {
   Symb=Symbol();
   
   SetIndexBuffer(0,BufferYellow);
   SetIndexBuffer(1,BufferGreen);
   SetIndexBuffer(2,BufferRed);
   
   SetIndexStyle(0,DRAW_LINE,EMPTY,2);
   SetIndexStyle(1,DRAW_LINE,EMPTY,2);
   SetIndexStyle(2,DRAW_LINE,EMPTY,2);  
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   double tmp1, tmp2, LSMA;
   
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
      
   for(int i=limit; i>0; i--)
    {
     tmp1=iMA(Symb,Period(),34,0,MODE_SMA,0,i);
     tmp2=iMA(Symb,Period(),34,0,MODE_LWMA,0,i);
     LSMA=3.0*tmp2-2.0*tmp1;
      
     BufferYellow[i]=LSMA;
     BufferGreen[i]=LSMA;
     BufferRed[i]=LSMA;

     if(BufferYellow[i]>BufferYellow[i+1])
      {
       BufferRed[i]=EMPTY_VALUE;
      }
     else if(BufferYellow[i]<BufferYellow[i+1])
      {
       BufferGreen[i]=EMPTY_VALUE;
      }
     else
      {
       BufferRed[i]=EMPTY_VALUE;
       BufferGreen[i]=EMPTY_VALUE;
      }                        
      
     if(BufferGreen[i]!=EMPTY_VALUE && BufferRed[i]==EMPTY_VALUE)
      {
       g++;
      }
     if(BufferGreen[i]==EMPTY_VALUE && BufferRed[i]!=EMPTY_VALUE)
      {
       r++;
      }
     if(BufferGreen[i]==EMPTY_VALUE && BufferRed[i]==EMPTY_VALUE)
      {
       if(BufferGreen[i+1]!=EMPTY_VALUE)
        {
         GreenSeries[gc]=g;
         gc++;
         g=0;
        }
       if(BufferRed[i+1]!=EMPTY_VALUE)
        {
         RedSeries[rc]=r;
         rc++;
         r=0;
        }
      }              
    }
   return(0);
  }
 
silhouette:

Deve ter estragado algo com os amortecedores novamente. Por favor, dê uma olhada.

A tarefa é a seguinte:

1) O LSMA é calculado. Se [i]>[i+1] - a cor é verde, se [i]<[i+1] - a cor é vermelha. Tudo está claro com isto.

2) Eu preciso encontrar o comprimento da série de valores verdes e vermelhos e armazená-los em uma matriz. Este é o problema que eu ainda não consegui resolver sozinho.


O que não deve ser gostado neste indicador
 
Vinin:

Por que você não gosta deste indicador?

Vinin, eu realmente o fiz de acordo com sua amostra, mas o ponto é diferente: não é o método de cálculo em si que é importante para mim (seja o MA mais simples), mas a solução para o problema no ponto 2.

Preciso obter uma matriz que armazene o comprimento das séries verde ou vermelha para análise posterior.

 
Por favor, informe. Existem 2 gráficos virtuais de balanço (para pedidos de compra e venda) na vida real, que podem divergir muito. Como posso traduzi-los em qualquer unidade relativa para poder cronometrar o momento de cruzamento destes gráficos.
 
silhouette:

Vinin, eu realmente o fiz de acordo com sua amostra, mas o ponto é diferente: não é o método de cálculo em si que importa para mim (seja o MA mais simples), mas a solução para o problema no ponto 2.

Preciso obter uma matriz, que armazena o comprimento das séries verdes ou vermelhas para análise posterior.


Por que você precisa de uma matriz?
 
Vinin:

Por que você precisa de uma matriz?
Para análise estatística posterior. No Excel, por exemplo.
 

Há uma biblioteca para comércio de ratos https://www.mql5.com/ru/code/9671

Não estou tendo absolutamente nenhuma sorte em conectá-lo, por favor, ajude-me.

Descarrego todos os arquivos que preciso para a pasta de especialistas e depois os compenso, mas ainda assim os indicadores têm janelas pretas sem dados.

Obviamente algum tipo de erro infantil, mas eu não consigo encontrá-lo por 24 horas.


 
TheXpert:

Não há necessidade de dobrar nada. O arquivo já contém todos os arquivos, tudo o que você precisa fazer é desembalar o arquivo na pasta do terminal e compilá-lo.

Somente arquivos indicadores são compilados, bibliotecas (mqh) não precisam ser compiladas. Tente colocar um novo terminal e praticar nele.

 

Você pode me dar uma dica? Há um botão "MQL4.community" no terminal e clicando nele abre o Word com a página correspondente, mas quando tento clicar em qualquer link, uma janela aparece dizendo que há uma restrição em meu computador! ???

Como você lida com isso? Obrigado.

 
void start()
  {
  double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
  double profitbuy, profitsell;
  
  for(int i = OrdersTotal()-1; i >= 0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol() || OrderType() >= 2) continue;
    if(OrderType() == 0)
      profitbuy +=((Bid - OrderOpenPrice())/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    if(OrderType() == 1)
      profitsell+=((OrderOpenPrice() - Ask)/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    }
  
  Comment(profitbuy+profitsell);
  }
В чем прикол, не могу правильно рассчитать суммарный профит для всех ордеров по одной паре, в терминале пишет одно, а у меня получается другое?

Итак, мои домыслы, своп в терминале нужно нормализовать обязательно, там точность больше двух бывает - это проверил, но как нормализовать - для каждого ордера или суммарно? Непонятно в общем...
Я уже всяко перепробовал, минимальная разница доходила до 0.02 центов, но это все равно не то, что нужно.

Вопрос, как мне мой код подогнать под работу функции - AccountProfit()?