Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1683

 
Sim, é claro. Primeiro: 0, último: OrdensTotal()-1
 
Aleksei Stepanenko #:
Sim, é claro. Primeiro: 0, último: OrdensTotal()-1

Ah, há uma matriz, realmente do zero...

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
                                                              
extern int RSIPERIOD=3;
extern double KOEFF1=2.5;
extern double KOEFF2=1.86; 
                                                                                                                                                                  
double mass0[],Buf1[],Buf2[];
double D10,D11,D12;
                                                                                                                                                                                                                                                                                                                                             
int init()
  {
   IndicatorDigits(0);
   string short_name="RSITEST";           
   IndicatorShortName("RSITEST");
   
   D10=RSIPERIOD;D11=D10*KOEFF1;D12=D11*KOEFF2;;
 
   SetIndexBuffer(0,mass0);
   SetIndexLabel (0,"Stoch "+Ds_0(D10)+")\n");
   SetIndexBuffer(1,Buf1);
   SetIndexLabel (1,"Stoch ("+Ds_0(D11)+")\n");
   SetIndexBuffer(2,Buf2);
   SetIndexLabel (2,"Stoch ("+Ds_0(D12)+")\n");
   return(0);
  }
                                                                                                               
int start()
  {
   if(Bars<=RSIPERIOD) return(0);
   int ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   for(int i=0;i<Bars-RSIPERIOD;i++)
      {
       mass0[i] = iRSI(NULL,0,D10,0,i);
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))
       Buf1[i] = Buf2[i];
       Buf1[i] = DRAW_LINE;
       Buf2[i] = EMPTY_VALUE;
      }
   return(0);
  }

string Ds_0(double DOUBLE) {return(DoubleToStr(DOUBLE,0));}
MakarFX #:
no seu caso, funcionou apenas 2 das 3 linhas, adaptei-a à tarefa em mãos e acontece que a primeira linha fica (como deveria) e o nível das outras duas (vermelho e azul) com as condições dadas (em vez da linha vermelha e azul era uma única linha - e era vermelha seRSI2>RSI3 e azul seRSI2<RSI3) se tornam retos e só vermelho como se não soubesse que é RSI
Eu anexei uma captura de tela.
Arquivos anexados:
 
Andrey Kipyatkov #:
no seu caso, acontece que apenas 2 das 3 linhas, eu adaptei ao problema, e acontece que a primeira linha fica (como deveria) e nivela as outras duas (vermelha e azul) com determinadas condições (em vez da linha vermelha e azul era uma única linha - e era vermelha seRSI2>RSI3 e azul seRSI2<RSI3) se tornam retas e apenas vermelhas como se não soubesse que é RSI
Eu anexei uma captura de tela.

Como se iguala Buf1 e Buf2?

No seu estado, eles são 0!

 
Andrey Kipyatkov #:
no seu caso, funcionou apenas 2 de 3 linhas, adaptei-o à tarefa em mãos e acontece que a primeira linha fica (como deveria) e o nível das outras duas (vermelho e azul) com as condições dadas (em vez da linha vermelha e azul era uma única linha - e era vermelha seRSI2>RSI3 e azul seRSI2<RSI3) se tornam retas e apenas vermelhas como se não soubesse que é RSI
Eu anexei uma captura de tela.


Arquivos anexados:
RSITEST-1.mq4  4 kb
 
Olá a todos, podem me dizer por favor qual é a diferença entre um robô comercial e um Expert Advisor?
 
Daniil Osipov #:
Olá a todos, vocês podem me dizer a diferença entre um robô comercial e um assessor comercial?
É a mesma coisa... um jogo de palavras
 
MakarFX #:

Obrigado por ajudar com o código, mas se não for difícil, eu gostaria de entender o ponto. Quando você escreve tudo em uma linha você:
Buf0[i] = iRSI(NULL,0,D10,0,i); - você especifica nesta string que a matriz zero é uma linha rsy com o parâmetro dado acima
se(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) então você está dizendo que msy com o parâmetro D11 >D12
Buf1[i] = Buf0[i]; e então você compara (sobreponha uma linha sobre a outra) psi com os parâmetros D11 e D10
senão
Buf1[i] = EMPTY_VALUE; e você diz para não renderizar xy com o parâmetro D11.
mas quando você trabalha com 3 linhas
Buf0[i] = iRSI(NULL,0,D10,0,i); você diz como desenhar 1
linha Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; em seguida você adiciona e divide por 2 2 e 3 - Esta ação não é muito clara para mim porque antes de você estar equacionando matrizes e sobrepondo uma linha sobre a outra porque esta sintaxe.
se(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) então você repete o exemplo você diz que Rsai com o parâmetroD11>D12
Buf2[i] = Buf1[i]; e você equaciona
a
3ª e 2ª
linhas
senão
Buf2[i] = EMPTY_VALUE; e você diz para não traçar a segunda linha

. Eu entendo corretamente como você "parametriza" a linguagem e porque você adicionou arrays e dividiu por 2 no segundo caso

 
MakarFX #:
É a mesma coisa... brincar com as palavras
Vitaly Muzichenko #:

Um jogo de palavras.

A partir do próximo ramo. Sem conluio...

 
Andrey Kipyatkov #:
Agradeço a sua ajuda com o código, mas se não for muito incômodo, gostaria de entender a essência do código. Quando você escreve tudo em uma linha você:

Andrew, vamos primeiro definir sua condição desde o primeiro posto

Eu queria esclarecer se existe uma maneira de prescrever no código em vez de uma linha vermelha e azul (RSI2 e RSI3 na figura (anexada também), respectivamente) era uma linha - e era vermelha se RSI2>RSI3 e azul se RSI2 < RSI3

Assim, em vez de vermelho e azul, obtemos a média destas linhas, ou seja

Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2;

e esta linha, por padrão, tem a cor vermelha.

Além disso, quando a condição for cumprida

if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))

não mudamos a cor da linha, pois isso não pode ser feito no MT4,

tomamos e sobrepomos outra linha com outra cor

Buf2[i] = Buf1[i];
Razão: