Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 328

 

Hallo, ich möchte ein Verfallsdatum für Futures erhalten

EXPIRATION=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_EXPIRATION_TIME);

Sie gibt 1970 01 01 00 00 aus

 

Hallo, kann mir jemand sagen, wie man einen EA dazu bringt, eine Order an einem bestimmten Punkt des Charts zu öffnen, wenn man auf einen bestimmten Punkt klickt? Wenn Sie ein Skript oder einen EA installieren, definiert die Funktion NormalizeDouble(WindowPriceOnDropped(),Digits); den Punkt, wenn Sie klicken. Die Frage ist jedoch, dass dies jederzeit von einem laufenden EA aus geschehen kann. Gibt es eine solche Möglichkeit.

Ich sehe eine Funktion ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Ich weiß noch nicht, wie man damit umgeht. Ist es möglich, festzustellen, wohin der Mauszeiger gelenkt wurde (zu welchem Punkt)?

 
Basicprof:

Hallo, kann mir jemand sagen, wie man einen EA dazu bringt, eine Order an einem bestimmten Punkt des Charts zu öffnen, wenn man auf einen bestimmten Punkt klickt? Wenn Sie ein Skript oder einen EA installieren, definiert die Funktion NormalizeDouble(WindowPriceOnDropped(),Digits); den Punkt, wenn Sie mit der Maus klicken. Die Frage ist jedoch, dass dies jederzeit von einem laufenden EA aus geschehen kann. Gibt es eine solche Möglichkeit.

Ich sehe eine Funktion ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Aber ich habe noch nicht herausgefunden, wie ich es verwenden kann. Ist es möglich, festzustellen, wohin der Mauszeiger gelenkt wurde (zu welchem Punkt)?

Verwenden Sie das Ereignis "CHARTEVENT_CLICK".

Sie können Teile des Codes hier ab rufen

 
Vitaly Muzichenko:

Verwenden Sie das Klick-Ereignis "CHARTEVENT_CLICK".

Sie können die Codeschnipsel hier ab rufen


Herzlichen Dank!!!

 

Eine weitere Frage: Ich habe die Funktionen aus dem EA in die Bibliothek verschoben, wenn ich den EA ausführe, stürzt er sofort ab und die Meldungen zeigen, dass das Terminal die Bibliothek nicht laden kann Cannot call 'ATP_funkcii.mq4::DrawLABEL', 'ATP_funkcii.mq4' is not loaded

Wie kann ich dieses Problem beheben?

Eines ist mir aufgefallen! Der Editor des EA und die Bibliothek sind zu sehen, aber auf dem Computer sehe ich sie aus irgendeinem Grund nicht in den Programmdateien. Nur die Expert Advisor-Datei.

 
Hallo, könnten Sie mir bitte sagen, wie man den Index des nächsten Elements eines Arrays kennt?
 
vikzip:
Hallo, Könnten Sie mir bitte sagen, wie man den Index eines Array-Elements kennt, um den Index des nächsten Elements des Arrays zu kennen?

Der Index eines Arrays beginnt immer mit Null. Das heißt, wenn die Größe des Feldes 1 ist, ist der Index dieser Zelle 0.

Woher kennen Sie die Zahl 5, um die Zahl 6 zu kennen?

Wenn ich die Ziffer 6 kenne, wie erkenne ich dann die Ziffer 7, da es nur 8 Ziffern gibt?

Wenn Sie den Index 7 kennen, woher wissen Sie dann den nächsten Index, wenn Sie wissen, dass die Array-Größe = 8 ist?

 

Hallo, ich brauche Hilfe. Der Indikator wird nicht aktualisiert, ich möchte, dass er bei jedem Tick aktualisiert wird.


//+------------------------------------------------------------------+
//|                                             alx_RSI_BANDS_MA.mq4 |
//|                                                       alx_Babon |
//+------------------------------------------------------------------+
#property copyright "alx_Babon"
#property link      "babon82@gmail.com"

#property indicator_separate_window
#property indicator_buffers 6
#property  indicator_color1 Yellow
#property  indicator_color2 DarkBlue
#property  indicator_color3 White
#property  indicator_color4 White
#property  indicator_color5 White
//---- input parameters
extern int       RSI_Per=8;
extern int       MA_Per=8;
extern int       Bands_Per=20;
extern int       SmoothType=0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double Sostoyanie;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string type;
   switch(SmoothType)
   {
   case MODE_EMA: type="EMA";break;
   case MODE_SMMA: type="SMMA";break;
   case MODE_LWMA: type="LWMA";break;
   default: type="LWMA";SmoothType=0;break; // если ни один вариант не подошел
   }

   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
   SetIndexLabel(0,"RSI("+RSI_Per+")");
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
   SetIndexLabel(1,"MA ("+MA_Per+"), "+type);
   SetIndexStyle(2,DRAW_LINE,2,1);
   SetIndexBuffer(2,ExtMapBuffer3);//Свойства Bands
   SetIndexLabel(2,"Bands ("+Bands_Per+")");
   SetIndexStyle(3,DRAW_LINE,2,1);
   SetIndexBuffer(3,ExtMapBuffer4);//Свойства Bands
   SetIndexLabel(3,"Bands ("+Bands_Per+")");
   SetIndexStyle(4,DRAW_LINE,2,1);
   SetIndexBuffer(4,ExtMapBuffer5);//Свойства Bands
   SetIndexLabel(4,"Bands ("+Bands_Per+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit,cnt;
   int cnt_rsi,cnt_bb,cnt_ma;
   if (counted_bars==0) 
      {
      limit=Bars-RSI_Per-1;
      for(cnt=limit;cnt>=0;cnt--)
         {
          ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
         }
      for(cnt=1;cnt<=Bars;cnt++)
         {
          ExtMapBuffer6[cnt]= iMA(NULL,0,MA_Per,0,SmoothType,PRICE_CLOSE,cnt);
                
         }
      for(cnt=limit-MA_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
         }          
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer3[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_LOWER,cnt);
         }
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer4[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_UPPER,cnt);
         }  
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer5[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_MAIN,cnt);
         } 
         
      }
      cnt_rsi=limit;
      cnt_bb=limit-Bands_Per;
      cnt_ma=limit-MA_Per;
      Comment(
               "RSI (",RSI_Per,")=",ExtMapBuffer1[1],"\n",
          "Bolinger (",Bands_Per,")=",ExtMapBuffer5[1],"\n",
                "MA (",MA_Per,")=",ExtMapBuffer2[1],"\n"
                //,"MA CNT (",MA_Per,")=",ExtMapBuffer6[8],"\n"
                //,"CNT_MA (",cnt_ma,")"
             );
//----
      //ObjectCreate("Arrow", OBJ_ARROW, 0, 0, 5);
      //ObjectSet("Arrow",OBJPROP_ARROWCODE,OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
      //ObjectSetText("PivotText", "Pivot Point (DJ)", fontsize, "Arial", 
                 //colorPivot);
//----
   return(0);
  }
//+---------------------------------------

 
Artyom Trishkin:

Der Index eines Arrays beginnt immer mit Null. Das heißt, wenn die Größe des Feldes 1 ist, dann ist der Index dieser Zelle 0.

Woher kennen Sie die Zahl 5, um die Zahl 6 zu kennen?

Wie kann man die Ziffer 6 kennen, um die Ziffer 7 zu kennen, wenn man weiß, dass es nur 8 Ziffern gibt?

Wie können wir, wenn wir den Index 7 kennen, den nächsten Index herausfinden, wenn wir wissen, dass die Array-Größe = 8 ist?


Danke für die ausführliche Erklärung)))) Es wäre also korrekt zu schreiben


double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 

Mas[Blizko1]= Blizko2+1;     Это верно??

                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене         PriceBlizko1=Mas[Blizko1];
Können Sie mir das bitte sagen?

 
vikzip:

Danke für die ausführliche Erklärung)))) Es wäre also korrekt zu schreiben


Können Sie mir das bitte sagen?

Es besteht keine Notwendigkeit, das Array nach jeder Hinzufügung eines Arrayelements zu sortieren. Es wäre besser, die Sortierung zu verschieben

double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 
        Mas[Blizko1]= Blizko2+1;     Это верно??
                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене
        PriceBlizko1=Mas[Blizko1];

Aus der Hilfe.

Rückgabewert

Gibt den Index des ersten gefundenen Elements zurück. Wird der gesuchte Wert nicht gefunden, wird der Index des nächstkleineren der Elemente zurückgegeben, zwischen denen sich der gesuchte Wert befindet.

Mas[Blizko2] ist der nächstkleinere Wert in der Matrix.

Grund der Beschwerde: