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 913

 

Ao escrever para uma matriz, por favor, informe.

O engate. É necessário escrever tempos de carrapatos frescos em quantidade, por exemplo, 5 pcs. de recebimento de carrapatos na matriz estática para cálculo do valor médio de carrapatos/segundo, por exemplo, para 5 carrapatos.

Ou seja, escreva os tempos de chegada de cinco tiquetaques na matriz. Em seguida, calcular a taxa média de tique/segundo.

Como deslocar os dados da matriz a cada tick para registrar a hora do tick mais recente a entrar no terminal? Como preencher uma matriz estática unidimensional com horários de chegada de carrapatos? A indexação na matriz é organizada como na matriz de séries temporais. Você pode sugerir em texto ou código. Eu entendo. Obrigado.

Não funciona dessa forma. A matriz não é preenchida conforme necessário com os tempos de carrapato.

int limit; //pBars;  
   int counted_bars=IndicatorCounted(); 
    //ArraySetAsSeries
 //---- последний посчитанный бар будет пересчитан
   if(counted_bars>0) counted_bars--;  
   limit=counted_bars;  
   for(int i=limit; i>=0; i--) { xBuffer[i+1] = xBuffer[i]; xBuffer_Time[i+1] = xBuffer_Time[i];}

   xBuffer[0] = iClose(symbol,1,0);
   xBuffer_Time[tickCounter_Current] = NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
   tickCounter_Current ++;  
   tickCounter=tickCounter+1;
   
   if (tickCounter_Current == Num_Aver_of_Ticks)    
       tickCounter_Current = 0;   
       
   for ( i = 0; i < Num_Aver_of_Ticks; i ++) Summ_Time = Summ_Time + xBuffer_Time[i];
       
   if (Num_Aver_of_Ticks != 0)
   avgSpd = NormalizeDouble(Summ_Time / Num_Aver_of_Ticks, 2); 
Arquivos anexados:
 

A parte está resolvida.

Por que ele imprime zeros quando escreve bits em um array que é dinâmico?

//---------------------
extern int MaxDrawTicks=100;
extern int Num_Aver_of_Ticks=5;  
double     xBuffer_Time []; // Массив значений  
                         // В котором индекс - номер тика, значение - это бид 
int SIZE=0;               // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if(ArrayResize(xBuffer_Time,SIZE)<0) {Print(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   SIZE=ArraySize(xBuffer_Time);
   if (SIZE>=0) Print("Размер массива: ",SIZE);
   else Print("Ошибка. Массив не создан ",SIZE);        
   ArrayInitialize(xBuffer_Time, 0);
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize(xBuffer_Time,SIZE);
   xBuffer_Time[SIZE-1] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
   SIZE ++;
   Print (" Значение xBuffer_Time[SIZE-1] = ", DoubleToStr(xBuffer_Time[SIZE-1],Digits) );
   Print (" Значение SIZE = ", DoubleToStr(SIZE,2) );  
 //---------------------------------------      
//------------
   return(0);
  }

 

A questão foi resolvida. Quem precisar usá-lo.

Como escrever dados em uma matriz dinâmica.

//---------------------
extern int MaxDrawTicks=100;
extern int Num_Aver_of_Ticks=5;  
double     xBuffer_Time []; // Массив значений   динамический
                            // В котором индекс - номер тика, значение - это бид 
int SIZE=0;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if(ArrayResize(xBuffer_Time,2000000)<0) {Alert(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S=ArraySize(xBuffer_Time);
   if (S>=0) Alert("Размер массива: ",S);
   else Print("Ошибка. Массив не создан ",S);        
   ArrayInitialize(xBuffer_Time, 0);
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize(xBuffer_Time,SIZE);
   xBuffer_Time[SIZE-1] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize(xBuffer_Time) < 2147483647)
      {
      Alert (" Значение xBuffer_Time[SIZE-1] = ", DoubleToStr(xBuffer_Time[SIZE-1],Digits) );
      Alert (" Значение SIZE = ", DoubleToStr(SIZE,2) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return(0);
  }
 

Olá, eu negocio no gráfico Renko "RenkoLiveChart_v4.13.mq4".

Não é possível executar ou abrir um comércio via EA em gráfico off-line.

 
Top2n:

Olá, eu negocio no gráfico Renko "RenkoLiveChart_v4.13.mq4".

Não é possível executar ou abrir um comércio via EA em gráfico off-line.

Tenho que emular carrapatos nas cartas off-line, o terminal não envia o sinal de chegada de carrapatos nelas.

Por exemplo, como neste roteiro:

#include <WinUser32.mqh>

#import "user32.dll"


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
    int whdl=WindowHandle (Symbol(), Period());    
        while(!IsStopped())
         {
                PostMessageW (whdl, WM_COMMAND, 33324, 0);
                Sleep(100);
         }
        return(0);
}
 
Obrigado a todos vocês - já descobri.
 
_Roman:

A questão foi resolvida. Quem precisar usá-lo.

Como escrever dados em uma matriz dinâmica.


Obrigado! Para mim, é uma floresta escura, uma matriz florestal, exploração madeireira, etc. ;)
 
evillive:

Nas cartas off-line você precisa emular carrapatos, o terminal não envia um sinal de chegada de carrapatos a eles.

Por exemplo, como neste roteiro:

Alguma outra sugestão?

Eu conecto o roteiro a um gráfico offline, o terminal fica pendurado. Pode ser possível montar código em robô, então o que fazer com#importar "user32.dll"

 

Olá. Por favor, ajude. Eu quero escrever um EA: Se não houver negociações abertas e o preço aberto da primeira barra for inferior ao preço fechado da primeira e o preço aberto da segunda barra for inferior ao preço fechado da segunda barra, então abra um acordo... Mas o EA no testador começa a abrir negócios um após o outro, eu não consigo entender o que está errado. NÃO CONSIGO ENTENDER QUAL É O PROBLEMA.


int init;

int start()
{

int bar1;
int bar2;
int   stoploss=100; 
int   takeprofit=100;
int       slipage=2;
int total;
//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bar1]>Close[bar1] && Open[bar2]>Close[bar2])
    
     {OrderSend("EURUSD",OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);}
     
    //-------------------------------------------------------------------+  
     
                   
 
 return;}
 
rylay:

Olá. Por favor, ajude. Eu quero escrever um EA: Se não houver negociações abertas e o preço aberto da primeira barra for inferior ao preço fechado da primeira e o preço aberto da segunda barra for inferior ao preço fechado da segunda barra, então abra um acordo... Mas o EA no testador começa a abrir negócios um após o outro, eu não consigo entender o que está errado. NÃO CONSIGO ENTENDER QUAL É O PROBLEMA.


int init;

int start()
{

int bar1;
int bar2;
int   stoploss=100; 
int   takeprofit=100;
int       slipage=2;
int total,ticket;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bar1]>Close[bar1] && Open[bar2]>Close[bar2])
      if(V1()==true) 
     {
       ticket = OrderSend("EURUSD",OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
      }
     
    //-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1(){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2(){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}
Razão: