[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 280

 
Não consigo encontrar o comando que redireciona o indicador personalizado. Se alguém souber, por favor, me diga. Obrigado antecipadamente =)
 
tesla-pip:
Não consigo encontrar o comando que redireciona o indicador personalizado. Se alguém souber, por favor, me diga. Obrigado antecipadamente =)

Eu já o encontrei. Obrigado a todos =)
 

Boa tarde.

Você pode me ajudar a chegar a uma fórmula?

Eu tenho um passo de recarga SD=100;

se o preço for 25, então para ele o nível de cobertura será DE=100

se o preço for 102, sua taxa de unidades será UD=200

se o preço é 215, então a taxa de recarga é BP=300

o preço caiu para 135 novamente, o nível de cobertura será UD=200

 
TarasBY:

E esta ordem de coisas é normal (estes são os princípios do terminal).

Se você quiser que o indicador B altere suas indicações quando os parâmetros do indicador A mudarem, faça uma troca de informações entre os indicadores (pode ser um arquivo, variáveis globais do terminal, RAM do computador): o indicador A passa seus parâmetros inicializáveis durante a inicialização e o indicador B verifica periodicamente possíveis mudanças de parâmetros do indicador A. Quando detectar mudanças, o indicador B também deve perinicializar-se com novos parâmetros (forced init()).

Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou muito bom em programação, poderia fazer as mudanças necessárias nos meus códigos indicadores?



O primeiro código é o indicador A.

Segundo código indicador B.

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod =5;
extern int LowPeriod  =34;
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
   SetIndexDrawBegin(2,34);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("My_AO");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
      
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd
   for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
        
       
     }
//---- done
   return(0);
  }
#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
    double UP,DN;     
  
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        UP=iCustom(NULL,0,"My_AO",1,i+1);               
        DN=iCustom(NULL,0,"My_AO",2,i+1);    
             
        
       if(UP>0)       
         {ExtMapBuffer1[i+1]=1;
          ExtMapBuffer2[i+1]=0;
         }
         
       if(UP<0)       
         {ExtMapBuffer1[i+1]=-1;
          ExtMapBuffer2[i+1]=0;
         }  
         
                              
       if(DN>0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=1;
         }
              
       if(DN<0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=-1;
         }
               
                       
    
    }
//----
   return(0);
 
   }
   
//+------------------------------------------------------------------+    
   

 

A última questão foi resolvida, a nova questão é

Eu tenho o nível de recarga recalculado em cada barra.

Como me lembro do nível na última barra

e usá-la para abrir um comércio

 
MK07:
Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou muito bom em programação.

Você está sugerindo que eu deveria fazer por você aquilo com que você "brinca". Desculpe, não estou interessado.

E, se você está aprendendo a programar, é uma tarefa interessante para você.

 
Bom dia a todos. Tenho um problema com o indicador "CurrencyPowerMeter" e não consigo movê-lo para outra posição na janela do terminal. Se você puder ajudar, eu ficaria muito feliz em fazê-lo.
 
Decidi fazer-lhe uma pergunta, talvez você possa me dizer. Estou escrevendo um indicador, no indicador eu processo ticks no tempo do tick (que se abre independentemente,este). Minha matriz tampão NÃO processa TUDO, mas seletivamente (por exemplo, a cada 60 segundos, mas não é necessário). Em vez de
int    counted_bars=IndicatorCounted();

Eu entendo a seguinte construção:

extern int sec=60;//объявляем количество секунд
int i;//будет индексом текущей "свечи" (тика)
int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назад
double MyBuffer[];//этот будет на чарте
double MyTemp[];//этот только для подсчётов

int init(){
   IndicatorBuffers(2);
   SetIndexBuffer(0,MyBuffer)
   SetIndexBuffer(1,MyTemp)
   SetIndexDrawBegin(0,14);
   i=Bars-1;
   while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
   i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()
   return(0);
}

int start(){
   double deltaHigh,deltaLow;
   int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)
   if(counted_bars>=i) i=Bars-counted_bars-1;//аналогично
   while(i>=0){//цикл обработчика
      deltaHigh=High[i]-High[i_prev];//к примеру
      deltaLow=Low[i_prev]-Low[i];
      //и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
      i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тика
      while(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
         i--;
      }
   }
...

Agora a pergunta. Na versão M1 pura, o próximo passo é o padrão.

   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2
   for(i=0; i<=limit; i++){
      MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);

Com o que substituir as barras_limite e contadas? Meu entendimento é o seguinte,

int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while

(porque o número de ticks em 60 segundos não é constante, ou seja, basta escrever int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_não vai funcionar).

Ou eu estou errado sobre tudo?

p.s. antes de uma possível pergunta, vou responder: sei que em forex sec!=60 não é aplicável, e sec=60 não tem sentido, mas eu também não negocio em forex.

 
MK07:
Obrigado por sua resposta, mas não posso usá-la porque não entendo tudo e não sou bom em programação, poderia fazer as mudanças necessárias nos meus códigos indicadores?
Desculpe-me, você tem um carro? Se você tem um, você não o considera um luxo, apenas uma necessidade, não é mesmo? Se não, você não vai deixar isso assim para o resto de sua vida, vai? Esta é a idade, você tem que saber como dirigir um carro. Sou apenas um fazendeiro, mas faço o que faço, para mim a programação não é diferente do trabalho no pátio, como o trabalho de serralheiro, o mesmo trabalho com minhas mãos (vivo no campo). Um carrinho de mão, um carrinho de mão ou MQL4 são apenas ferramentas para mim. Talvez seja percebido de forma diferente para os habitantes da cidade, não sei. Variáveis globais em manual aqui, funções de arquivo padrão aqui, mais rápido estas, mas através do WinAPI. Eu queria responder ontem, mas não o fiz.
 

Boa tarde a todos!

Estou aprendendo a usar arrays.

Tenho uma matriz. Inicializei-a com cordas, ou seja, massa dupla [3567]={0,85374 , 0,85694 , 0,85974 , .... };

E o programa leu a matriz e a executou.

Agora inicializei a mesma matriz em uma coluna

duplo massi[3567]

{

massa [ 0] = 0,85374;
massa [ 1] = 0.85694;
massa [ 2] = 0. 85974;
massa [ 3] = 0.86174;
massa [ 4] = 0,86474;
massa [ 5] = 0,86494;
massa [ 6] = 0,86504;

massa [ 7] = 0,86524;

}

O compilador não gera nenhum erro, mas gera um aviso.

C:Arquivos de programa Alpari NZ MT4(2)- expressão em escopo global não permitida C:Arquivos de programa Alpari NZ MT4(2) - especialistas incluem MASSIV.mqh (4, 2)

A matriz é declarada globalmente como antes (quando foi inicializada com cordas e funcionou bem).

 #include <MASSIV.mqh> 


 
int start()
{
 double Price=iOpen (Symbol (),0,0);         
 double SL=NormalizeDouble (Price+3000*Point, Digits);         
 double TP=NormalizeDouble (Price-100*Point, Digits);   

 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика
 double ld_Delta = 0.0010;
 int S = ArrayBsearch(  mass,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 

 int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он  не изменился)

Há apenas 2 entradas no diário de bordo.

2013.04.12 16:14:44 XXX teste iniciado

2013.04.12 16:14:36 XXX EURUSD,H1: carregado com sucesso


PERGUNTA.POR QUE O PROGRAMA NÃO ESTÁ LENDO UM ARRAY INICIALIZADO EM UMA COLUNA.

Obrigado.

Razão: