Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 913

 

Bitte geben Sie Hinweise zum Schreiben in ein Array.

Der Haken an der Sache. Es ist notwendig, frische Ticks mal in der Menge zu schreiben, zum Beispiel, 5 Stk. von Tick-Empfang in statische Array für die Berechnung der durchschnittlichen Tick/sec Wert, zum Beispiel für 5 Ticks.

D.h., schreiben Sie die Ankunftszeiten von fünf Ticks in das Array. Berechnen Sie dann die durchschnittliche Tick/Sekunde-Rate.

Wie kann man die Daten im Array bei jedem Tick verschieben, um die Zeit des letzten Ticks, der im Terminal ankommt, aufzuzeichnen? Wie füllt man ein eindimensionales statisches Array mit Tick-Ankunftszeiten? Die Indizierung im Array ist wie im Zeitreihen-Array angeordnet. Können Sie einen Vorschlag in Text oder Code machen. Das verstehe ich. Ich danke Ihnen.

So funktioniert das nicht. Das Array wird nicht wie erforderlich mit Tickzeiten gefüllt.

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

Das Teil ist aussortiert.

Warum werden Nullen gedruckt, wenn Bits in ein dynamisches Array geschrieben werden?

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

 

Das Problem wurde behoben. Wer auch immer sie benutzen muss.

Wie man Daten in ein dynamisches Array schreibt.

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

Hallo, ich handle mit dem Renko-Chart "RenkoLiveChart_v4.13.mq4".

Ich kann keinen Handel über EA auf einem Offline-Chart ausführen oder eröffnen.

 
Top2n:

Hallo, ich handle mit dem Renko-Chart "RenkoLiveChart_v4.13.mq4".

Ich kann keinen Handel über EA auf einem Offline-Chart ausführen oder eröffnen.

Ich muss Ticks auf Offline-Charts emulieren, das Terminal sendet kein Tick-Ankunftssignal auf ihnen.

Zum Beispiel wie in diesem Skript:

#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);
}
 
Danke an alle - ich habe es herausgefunden.
 
_Roman:

Das Problem wurde behoben. Wer auch immer sie benutzen muss.

Wie man Daten in ein dynamisches Array schreibt.


Ich danke Ihnen! Für mich ist es ein dunkler Wald, ein Waldgebiet, Holzeinschlag usw. ;)
 
evillive:

In Offline-Charts müssen Sie Ticks emulieren, da das Terminal kein Tick-Ankunftssignal an sie sendet.

Zum Beispiel wie in diesem Skript:

Haben Sie noch andere Vorschläge?

Wenn ich das Skript mit einer Offline-Karte verbinde, bleibt das Terminal hängen. Kann möglich sein, um Code in Roboter zu montieren, was dann mit#import "user32.dll" zu tun

 

Hallo. Bitte um Hilfe. Ich möchte einen EA schreiben: Wenn es keine offenen Geschäfte gibt und der offene Preis des ersten Balkens kleiner ist als der Schlusskurs des ersten Balkens und der offene Preis des zweiten Balkens kleiner ist als der Schlusskurs des zweiten Balkens, dann öffne ein Geschäft... Aber der EA im Tester beginnt, Geschäfte eines nach dem anderen zu öffnen, ich kann nicht verstehen, was falsch ist. ICH KANN NICHT VERSTEHEN, WAS DAS PROBLEM IST.


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:

Hallo. Bitte um Hilfe. Ich möchte einen EA schreiben: Wenn es keine offenen Geschäfte gibt und der offene Preis des ersten Balkens kleiner ist als der Schlusskurs des ersten Balkens und der offene Preis des zweiten Balkens kleiner ist als der Schlusskurs des zweiten Balkens, dann öffne ein Geschäft... Aber der EA im Tester beginnt, Geschäfte eines nach dem anderen zu öffnen, ich kann nicht verstehen, was falsch ist. ICH KANN NICHT VERSTEHEN, WAS DAS PROBLEM IST.


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); 
}
Grund der Beschwerde: