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

 
missha689:
Wie kann ich das Datum und die Uhrzeit von gestern herausfinden?

Es steht alles drin, was Sie brauchen, lesen Sie es einfach. Wie dieses hier.

iTime("USDCHF",PERIOD_H1,0)
Ersetzen Sie einfach das angegebene Symbol durch _Symbol, PERIOD_H1 bis PERIOD_D1 und schon haben Sie die Öffnungszeit des Tages. Ersetzen Sie 0 durch 1, um die gestrige Öffnungszeit zu erhalten.
 
missha689:
Können Sie mir sagen, wie ich das gestrige Datum und die Uhrzeit programmgesteuert herausfinden kann?

Kalender gestern:

datetime tim=TimeCurrent()‌-24*60*60;

MqlDateTime ts;

TimeToStruct(tim,ts);

ts.hour=0;ts.min=0;ts.sec=0;

tim=StructToTime(ts);

jetzt im Tim - Beginn des gestrigen Kalendertages (!!! nicht Öffnungszeit der Vorbar D1)

Öffnungszeit des Vorlaufs D1 - iTime(0,PERIOD_D1,1); mit kleiner Korrektur - wenn es Samstag ist, dann 24 Stunden addieren, wenn Sonntag, dann 48 Stunden.

 
Alexey Viktorov:

Da steht alles drin, was Sie brauchen, lesen Sie es einfach. Wie dieses hier.

iTime("USDCHF",PERIOD_H1,0)
Ersetzen Sie einfach das angegebene Symbol durch _Symbol, PERIOD_H1 bis PERIOD_D1 und schon haben Sie die Öffnungszeit des Tages. Ersetzen Sie 0 durch 1, um die gestrige Öffnungszeit zu erhalten.

Ich versuche seit gestern herauszufinden, wie man das macht, aber ich kann es nicht, also bitte ich um Hilfe, denn ich bin neu in diesem Bereich.

Bitte helfen Sie mir, den Index des gestrigen Balkens um 15:00 Uhr und den Index des heutigen Balkens um 7:00 Uhr zu finden, ohne explizit das Datum anzugeben, wie im Beispiel gezeigt

 
Maxim Kuznetsov:

Kalender gestern:

datetime tim=TimeCurrent()‌-24*60*60;

MqlDateTime ts;

TimeToStruct(tim,ts);

ts.hour=0;ts.min=0;ts.sec=0;

tim=StructToTime(ts);

jetzt in tim - Beginn des gestrigen Kalendertages (!!! nicht die Öffnungszeit der D1-Vorleiste)

Öffnungszeit der Vorleiste D1 - iTime(0,PERIOD_D1,1); mit kleiner Korrektur - 24 Stunden hinzufügen, wenn es Samstag ist, 48 Stunden, wenn es Sonntag ist.

Dankeschön
 
Sergey Gritsay:


Funktion, um das Stopband auf verlustfrei zu stellen, werden das Orderticket und der Abstand in Pips an die Funktion

void zero_profit(int ticket, int distance)
  {
   double sl=0.0;

   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      if(OrderType()==OP_BUY)
        {
         if(Bid>=OrderOpenPrice() && Bid-OrderOpenPrice()>=distance*_Point) sl=OrderOpenPrice();
         if(OrderStopLoss()!=0 && OrderStopLoss()>=OrderOpenPrice())return;
        }
      if(OrderType()==OP_SELL)
        {
         if(Ask<=OrderOpenPrice() && OrderOpenPrice()-Ask>=distance*_Point) sl=OrderOpenPrice();
         if(OrderStopLoss()!=0 && OrderStopLoss()<=OrderOpenPrice())return;
        }
      ResetLastError();

      if(sl<=0)return;
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0))
        {
         int error=GetLastError();
         rezult=StringConcatenate(OrderSymbol(),": error modifying StopLoss order ",OrderTicket()," ",TypeToStr(OrderType())," №- ",error);
         Print(rezult);
        }

     }
  }


...danke sergey!!!!!

 
Vitaly Muzichenko:

Cool, ich werde versuchen, die Funktionen in den EA einzubauen. Ich werde das Ergebnis später veröffentlichen.

Danke!!!

Eine zweite Suchmethode wurde hinzugefügt.

//+------------------------------------------------------------------+
//|                                             iFreeNumFractals.mq4 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "3.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UpperFractal
#property indicator_label1  "Upper Fractal"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot LowerFractal
#property indicator_label2  "Lower Fractal"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrSteelBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//---
enum ENUM_TYPE_FRACTAL
  {
   TYPE_FRACTAL_ACCURATE   =  0,    // Accurate fractal
   TYPE_FRACTAL_INACCURATE =  1,    // Inaccurate fractal
  };
//--- input parameters
input ENUM_TYPE_FRACTAL TypeFractals   =  TYPE_FRACTAL_ACCURATE;  // Type of fractal
input int               LeftNumUp      =  2;                      // The number of bars on the left for upper fractals
int leftNumUp;    // Количество баров слева для верхнего фрактала
input int               RightNumUp     =  2;                      // The number of bars on the right for upper fractals
int rightNumUp;   // Количество баров справа для верхнего фрактала
input int               LeftNumDn      =  2;                      // The number of bars on the left for lower fractals
int leftNumDn;    // Количество баров слева для нижнего фрактала
input int               RightNumDn     =  2;                      // The number of bars on the right for lower fractals
int rightNumDn;   // Количество баров справа для нижнего фрактала
//--- indicator buffers
double         BufferUpperFractal[];
double         BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUpperFractal);
   SetIndexBuffer(1,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexEmptyValue(1,EMPTY_VALUE);
//---
   leftNumUp=(LeftNumUp<1?1:LeftNumUp);
   rightNumUp=(RightNumUp<1?1:RightNumUp);
   leftNumDn=(LeftNumDn<1?1:LeftNumDn);
   rightNumDn=(RightNumDn<1?1:RightNumDn);
   string short_name=MQLInfoString(MQL_PROGRAM_NAME)+"("+(string)leftNumUp+","+(string)rightNumUp+")("+(string)leftNumDn+","+(string)rightNumDn+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<fmax(leftNumUp+rightNumUp,leftNumDn+rightNumDn)) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>0) {
      ArrayInitialize(BufferUpperFractal,0.0);
      ArrayInitialize(BufferUpperFractal,0.0);
      limit=rates_total-fmax(leftNumUp,leftNumDn)-1;
      }
   //---
   for(int i=limit; i>fmin(rightNumUp,rightNumDn); i--) {
      if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNumUp,rightNumUp)>0) BufferUpperFractal[i]=high[i];
      if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNumDn,rightNumDn)>0) BufferLowerFractal[i]=low[i];
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
   int bars=Bars(symbol_name,timeframe);
   if(left_dimension<1)  left_dimension=1;
   if(right_dimension<1) right_dimension=1;
   if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
   if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i+1)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i-1)) return(-1);
      }
   else {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
      }
   return(GetPriceLow(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
   int bars=Bars(symbol_name,timeframe);
   if(left_dimension<1)  left_dimension=1;
   if(right_dimension<1) right_dimension=1;
   if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
   if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i+1)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i-1)) return(-1);
      }
   else {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
      }
   return(GetPriceHigh(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
   double array[1];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   return(-1);
}
//+----------------------------------------------------------------------------+
double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
   double array[1];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   return(-1);
}
//+----------------------------------------------------------------------------+
Dateien:
 
Artyom Trishkin:

Eine zweite Suchmethode wurde hinzugefügt.


Vielen Dank, es ist einfach großartig.

Überreste, die in kodobase hochgeladen werden müssen)

 
Vitaly Muzichenko:

Danke, einfach alles ist super.

Überreste, die in die kodobase hochgeladen werden müssen)

Schon erledigt :))) Ich habe es zum Testen eingeschickt.
 

Hallo.

Ich arbeite mit Linux. Ich habe mehrere Währungspaare in MT4 geöffnet - bis zu 10. Wie kann ich MQL4 verwenden, um Diagrammtabs in einer bestimmten Reihenfolge anzuordnen?

Die Arbeit mit Profilen, das Studium von 1_MQL4.pdf und das Internet haben zu keinem Ergebnis geführt.

Mit freundlichen Grüßen, Vladimir

 
DVlad:

Hallo.

Ich arbeite mit Linux. Ich habe mehrere Währungspaare in MT4 geöffnet - bis zu 10. Wie kann ich MQL4 verwenden, um Diagrammtabs in einer bestimmten Reihenfolge anzuordnen?

Die Arbeit mit Profilen, das Studium von 1_MQL4.pdf und das Internet haben zu keinem Ergebnis geführt.

Mit freundlichen Grüßen, Vladimir.

Auch unter Windows können die Registerkarten nicht mit mql4 sortiert werden.

Sie können nur Diagramme in der von Ihnen benötigten Reihenfolge öffnen und die erforderlichen Vorlagen für sie festlegen.