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 971

 
korobok777:
Você não pode dizer sem o código
 

Boa tarde. Eu escrevi um indicador simples para a saída do RSI das zonas sobre-comprado/sobre-vendido.

à direita, desenha setas onde deve ser. Mas somente em tempo real.

Pergunta: como fazer com que se recorra à história para n número de barras?

#janela_do_cartão_indicador de propriedade
#property indicator_buffers 2
#indicador de propriedade_color1 LimeGreen
#indicador de propriedade_color2 LimeGreen

duplo rsi,rsi1,rsi2;
duplo CrossUp[];
duplo CrossDown[];
int FLAG = 0;
int FLAG1 = 2;
bool New_Bar=false;
int init()
{
//---- indicadores
SetIndexStyle(0, DRAW_ARROW,5,1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW,5,1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retorno(0);
}
int start()
{

rsi = iRSI(NULL,0,4,PRICE_CLOSE,0);
rsi1 = iRSI(NULL,0,4,PRICE_CLOSE,1);
rsi2 = iRSI(NULL,0,4,PRICE_CLOSE,2);



Fun_New_Bar();
int limit, i, counter;
faixa dupla, AvgRange;
for(i = 0; i <= limite; i++) {
counter=i;
Faixa = 0;
AvgRange=0;
para (contador=i ;contador<=i+9;contador+++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Alcance=AvgRange/10;
if (FLAG<1 && rsi<rsi2 && rsi2>70 && rsi1<70)
{Alerta ("RSI DOWN!!! em ", Symbol());
CrossDown[i] = Alto[i]+ Alcance*1,8;
FLAG = 1;}
if(FLAG1>1 && rsi>rsi2 && rsi2<30 && rsi1>30)
{Alerta ("RSI UP!!! em ", Symbol());
CrossUp[i] = Baixa[i]- Alcance*1,8;
FLAG1 = 1; }
if( Nova_Bar==verdadeiro)
{FLAG=0;}
if( Nova_Bar==verdadeiro)
{FLAG1=2;}
}
retorno(0);
}
vazio Fun_New_Bar()
{
data/hora estática New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
 
Vinin:
Não se pode dizer nada sem o código.
//==================================================================+
extern ENUM_TIMEFRAMES PERIOD_=PERIOD_H1;//Периоды графиков
//==================================================================+

string _ChartSymbol;
long   _ChartID,
       _ChartFirst,
       _ChartPeriod;
int start()
{//---идентификатор графика начиная с первого 
    _ChartFirst=ChartFirst();
if(_ChartFirst>0)//если идентификатор больше ноля
{
 _ChartSymbol=ChartSymbol(_ChartFirst);//символ графика
 _ChartPeriod=ChartPeriod(_ChartFirst);//Периоды графика
 //---выполним функцию конвертации периода если не совпадает
if( _ChartPeriod!=PERIOD_)
 {
  bool  ch=ChartSetSymbolPeriod(_ChartFirst,_ChartSymbol,PERIOD_);
 } 
}
return(0);
}
int  deinit()
{
Alert("скрипт закончил работу");
return(0);
}
Isto é apenas para o primeiro gráfico, eu não fiz mais nada, a janela pop-up está no caminho.
 
Red_Manticore:

Boa tarde. Escrevi um indicador simples para a saída do RSI das zonas sobre-comprado/sobre-vendido.

à direita, desenha setas onde deve ser. Mas somente em tempo real.

Pergunta: como fazer com que se recorra à história para n número de barras?


Insira o código de acordo com as regras, conheça-o mais cedo! Clique no SRC à esquerda do botão de vídeo, e apague a "folha"!

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 LimeGreen
#property  indicator_color2 LimeGreen

double rsi,rsi1,rsi2;
double CrossUp[];
double CrossDown[];
int FLAG = 0;
int FLAG1 = 2;
bool New_Bar=false; 
 
int init()
  {
//---- indicators
  SetIndexStyle(0, DRAW_ARROW,5,1);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW,5,1);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
int start()
{  

rsi = iRSI(NULL,0,4,PRICE_CLOSE,0);
rsi1 = iRSI(NULL,0,4,PRICE_CLOSE,1);
rsi2 = iRSI(NULL,0,4,PRICE_CLOSE,2);



Fun_New_Bar(); 
  
   int limit, i, counter;
   double Range, AvgRange;
    for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      if (FLAG<1 && rsi<rsi2 && rsi2>70 && rsi1<70)
      {Alert ("RSI DOWN!!! on ", Symbol());
      CrossDown[i] = High[i]+ Range*1.8;
          FLAG = 1;} 
      if(FLAG1>1 && rsi>rsi2 && rsi2<30 && rsi1>30)
      {Alert ("RSI UP!!! on ", Symbol());
      CrossUp[i] = Low[i]- Range*1.8;
         FLAG1 = 1; } 
   
       if( New_Bar==true)
       {FLAG=0;}
       if( New_Bar==true)
       {FLAG1=2;} 
   
   }
  return(0);
  } 
  
  void Fun_New_Bar()                              
  {                                             
   static datetime New_Time=0;                  
   New_Bar=false;                               
   if(New_Time!=Time[0])                        
     { 
      New_Time=Time[0];                         
      New_Bar=true;                            
     } 
  }     
ответить
 
korobok777:
Isto é apenas para o primeiro gráfico, eu não interferi mais na janela pop-up.

O roteiro processa todos os gráficos abertos. O atual é processado por último. Como os scripts terminam seu trabalho ao alterar o prazo, o aviso de janela de término do script será exibido apenas uma vez. Em todos os gráficos, o cronograma será alterado para o especificado

//+------------------------------------------------------------------+
//|                                             ReplaceTimeFrame.mq4 |
//|                                            Copyright 2015, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict

#property  show_inputs

input ENUM_TIMEFRAMES PERIOD_=PERIOD_H1;//Периоды графиков

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   long id=ChartFirst();
   long id_current=ChartID();
   int i=0;
   while(i<100)
     {
      ENUM_TIMEFRAMES _ChartPeriod=ChartPeriod(id);//Периоды графика
      if(_ChartPeriod!=PERIOD_ && id!=id_current)
        {
         bool  ch=ChartSetSymbolPeriod(id,ChartSymbol(id),PERIOD_);
        }

      id=ChartNext(id);
      if(id<0){break;}
      i++;
     }
   ENUM_TIMEFRAMES _ChartPeriod=ChartPeriod(id_current);//Периоды графика
   if(_ChartPeriod!=PERIOD_)
     {
      bool  ch=ChartSetSymbolPeriod(id_current,ChartSymbol(id_current),PERIOD_);
     }
  }
 
Vinin:

O roteiro processa todos os gráficos abertos. O atual é processado por último. Como os scripts terminam seu trabalho ao alterar o prazo, o aviso de janela de término do script será exibido apenas uma vez. Em todos os gráficos, o cronograma será alterado para o especificado


Ai)))bem feito!!!! Obrigado!!!!
 

Boa tarde,

Eu declaro uma matriz

double gdClose_array[];

ArrayResize(gdClose_array, 1);

Copiar os dados para a matriz com a última barra fechada, a partir do gráfico atual

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array) ;

Valor de saída da matriz

double dX=NormalizeDouble(gdClose_array[0],Digits);

Impressão ("NormalizeDouble(dX,Digits) ", dX);

Eu recebo um número, mas é obviamente incorreto:

NormalizeDuplo(dX,Dígitos) 1.0644.

Embora não exista tal valor no gráfico (de acordo com a visualização)

E este valor não muda no decorrer dos testes.

Eu acrescentei

ArraySetAsSeries(gdClose_array,true);

A situação não mudou.

Onde está o erro?

 
n0name:

Boa tarde,

...

Copiar dados em uma matriz com um fechamento na última barra fechada, a partir do gráfico atual

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array) ;

Aqui você escreveu apenas o nome da matriz sem especificar o índice do elemento da matriz. Uma vez que você já tem o ArrayResize(gdClose_array, 1); você definiu o número de elementos do array como 1, seu índice é 0. É por isso que deve ser feito desta maneira:

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array[0]);


E mais algumas perguntas/tipicos.

1) Se você precisar armazenar apenas 1 valor, você pode usar uma variável ao invés de uma matriz. Então em vez de:

double gdClose_array[];
ArrayResize(gdClose_array, 1); 

fazer

double gdClose_array;

e depois faça o resto como seu código original.

2) Se você precisa de uma matriz, mas sabe imediatamente que ela terá apenas 1 elemento, então declare uma matriz estática com 1 elemento em vez de declarar uma dinâmica e depois redimensione-a. Não há necessidade de operações extras.

Em vez de

double gdClose_array[];
ArrayResize(gdClose_array, 1);

escreva

double gdClose_array[1];

então

iX=CopyClose(Symbol(),PERIOD_CURRENT,1,1,gdClose_array[0]);

e depois como seu código original.

 

Olá, pergunta aos programadores.

Tenho um consultor especializado que é acionado quando uma ordem é aberta e coloca um Stop Loss e Take Profit sobre ela de acordo com uma quantidade específica de pontos.

Minha pergunta.

Podemos alterar o código para que, em vez do Stop Loss, o EA exponha uma ordem de parada reversa pendente do mesmo tamanho.

O que devo mudar no código para isso?

Obrigado.

 

Boa tarde!

Novamente não posso sair do que parece ser uma coisa elementar - porque tudo parece estar de acordo com a ajuda, mas o resultado imprime 0,0 ?

  double FractalDown_1 = iFractals(NULL,0,MODE_LOWER,1); Print("FractalDown_1=",FractalDown_1);

Por que o valor fractal não está sendo extraído?

Razão: