Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 913

 

Pour l'écriture dans un tableau, veuillez me conseiller.

Le hic. Il est nécessaire d'écrire les temps de ticks frais en quantité, par exemple, 5 pcs. de réception de ticks dans le tableau statique pour le calcul de la valeur moyenne de tick/sec, par exemple, pour 5 ticks.

C'est-à-dire, écrire les temps d'arrivée de cinq ticks dans le tableau. Calculez ensuite le taux moyen de tic/seconde.

Comment déplacer les données dans le tableau à chaque tick pour enregistrer l'heure du tick le plus récent entrant dans le terminal ? Comment remplir un tableau statique unidimensionnel avec les heures d'arrivée des ticks ? L'indexation dans le tableau est organisée comme dans le tableau des séries temporelles. Pouvez-vous suggérer en texte ou en code. Je comprends. Merci.

Ça ne marche pas comme ça. Le tableau n'est pas rempli comme il se doit avec les heures de ticks.

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); 
Dossiers :
 

La partie est réglée.

Pourquoi le logiciel imprime-t-il des zéros lorsqu'il écrit des bits dans un tableau dynamique ?

//---------------------
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);
  }

 

Le problème a été résolu. Quiconque a besoin de l'utiliser.

Comment écrire des données dans un tableau dynamique.

//---------------------
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);
  }
 

Bonjour, je trade sur le graphique Renko "RenkoLiveChart_v4.13.mq4".

Impossible d'exécuter ou d'ouvrir une transaction via l'EA sur un graphique hors ligne.

 
Top2n:

Bonjour, je trade sur le graphique Renko "RenkoLiveChart_v4.13.mq4".

Impossible d'exécuter ou d'ouvrir une transaction via l'EA sur un graphique hors ligne.

Je dois émuler des ticks sur des graphiques hors ligne, le terminal n'envoie pas de signal d'arrivée des ticks sur ceux-ci.

Par exemple, comme dans ce script :

#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);
}
 
Merci à tous - j'ai trouvé la solution.
 
_Roman:

Le problème a été résolu. Quiconque a besoin de l'utiliser.

Comment écrire des données dans un tableau dynamique.


Merci ! Pour moi, c'est une forêt sombre, un réseau de forêts, l'exploitation forestière, etc. ;)
 
evillive:

Dans les graphiques hors ligne, vous devez émuler les ticks, le terminal ne leur envoie pas de signal d'arrivée de tick.

Par exemple, comme dans ce script :

D'autres suggestions ?

Je connecte le script à un graphique hors ligne, le terminal se bloque. Il est peut-être possible de monter le code dans le robot, mais alors que faire avec#import "user32.dll"?

 

Bonjour. Aidez-moi, s'il vous plaît. Je veux écrire un EA : S'il n'y a pas de transactions ouvertes et que le prix d'ouverture de la première barre est inférieur au prix de clôture de la première barre et que le prix d'ouverture de la deuxième barre est inférieur au prix de clôture de la deuxième barre, alors ouvrir une transaction... Mais l'EA dans le testeur commence à ouvrir des transactions l'une après l'autre, je ne peux pas comprendre ce qui ne va pas. JE NE COMPRENDS PAS QUEL EST LE PROBLÈME.


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:

Bonjour. Aidez-moi, s'il vous plaît. Je veux écrire un EA : S'il n'y a pas de transactions ouvertes et que le prix d'ouverture de la première barre est inférieur au prix de clôture de la première barre et que le prix d'ouverture de la deuxième barre est inférieur au prix de clôture de la deuxième barre, alors ouvrir une transaction... Mais l'EA dans le testeur commence à ouvrir des transactions l'une après l'autre, je ne peux pas comprendre ce qui ne va pas. JE NE COMPRENDS PAS QUEL EST LE PROBLÈME.


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); 
}
Raison: