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

 
Konstantin Seredkin:

Ich habe nur ein Beispiel gegeben, es gibt eine Menge anderer Algorithmen, die gut wären, um auf diese Schaltfläche zu setzen, der Spread weitet sich aus, die Schaltfläche wird gedrückt, eine Textnachricht kommt auf mein Telefon, die besagt, dass der Roboter gestoppt ist oder 4 Roboter auf dem Konto handeln, der 5. kontrolliert die Kontomarge, wenn die Marge auf den eingestellten Wert fällt, unterbrechen wir den automatischen Handel und alle Roboter saugen, bis ich komme und sehe, was und wo in einen Drawdown geht.Aber die Entfernung von Robotern aus der Tabelle ist eine Kanone gegen ein Kaninchen... Der Button ist eine komplexe Lösung, die es Ihnen ermöglicht, alle Roboter durch einen vorgegebenen Algorithmus zu töten.

Ich habe irgendwo eine Lösung für mql5 gesehen, aber ich kann sie nicht finden.

Genau das habe ich gesagt - es ist eine radikale Lösung. Die richtige Lösung besteht darin, den Code des Expert Advisors so zu ändern, dass er unter bestimmten Umständen keine Handelsaktionen und alles, was damit zusammenhängt, durchführt. Zum Beispiel ist die Kontrolle der Ausbreitung elementar:

void OnTick()
{
    double fPoint = Point();
    if (fPoint <= 0.0)
      return;

    int nSpread = int(MathRound((Ask - Bid) / fPoint));
    if (nSpread > 50)
      return;

   ... Действия советника при нормальном спреде
}
 

Nun, die Schaltfläche AutoTrade kann durch die Emulation von Strg+E gedrückt bzw. nicht gedrückt werden. Aber wie gesagt, dies geschieht mit Hilfe der WinAPI:

#include <WinUser32.mqh>

#define  VK_CONTROL 0x11 
#define  KEY_CODE   'E'


void PressOrReleaseAutotrade()
{
   keybd_event(VK_CONTROL, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 2, 0);
   keybd_event(VK_CONTROL, 0, 2, 0);   
}
 
Ihor Herasko:

Nun, die Schaltfläche AutoTrade kann durch die Emulation von Strg+E gedrückt bzw. nicht gedrückt werden. Aber, wie ich schon sagte, wird hier bereits WinAPI verwendet:

Danke! Und wie kann man ein Smiley-Gesicht traurig machen?)

 
Ihor Herasko:

Nun, die Schaltfläche AutoTrade kann durch die Emulation von Strg+E gedrückt bzw. nicht gedrückt werden. Aber, wie gesagt, das ist mit WinAPI:

Genau, und ich dachte, dass es eine schmerzhaft einfache Methode ist und ich diese Bibliothek vergessen hatte. Danke, jetzt können wir tun, was wir wollen

 

Made MQL4 Skript (Code unten), die Rechtecke (Bild unten) zeichnet, aber hier ist das Problem. Bei der gestrichelten Linie STYLE_DOT funktioniert nur die Breite 1, und bei 2 oder mehr wird eine durchgezogene Linie gezeichnet. Können Sie mir sagen, wo mein Fehler liegt, oder wird etwas vor uns verborgen?

#property strict
void OnStart()
  {
//---
   RectCreate("rect1",Time[1],Low[1],Time[10],High[10],clrYellow,STYLE_DOT,  1,  false);
   RectCreate("rect2",Time[11],Low[11],Time[20],High[20],clrRed, STYLE_DOT,  2,  false);
//---
   Sleep(20*1000);
   ObjectsDeleteAll(0);
  }
//--- Function creates rectangle
void RectCreate(const string           f_name,     // rectangle name
                datetime               f_time1,    // first point time
                double                 f_price1,   // first point price
                datetime               f_time2,    // second point time
                double                 f_price2,   // second point price
                const color            f_color,    // rectangle color
                const ENUM_LINE_STYLE  f_style,    // style of rectangle lines
                const int              f_width,    // width of rectangle lines
                const bool             f_fill)     // filling rectangle with color

  {
   if(ObjectCreate(0,f_name,OBJ_RECTANGLE,0,f_time1,f_price1,f_time2,f_price2))
     {
      ObjectSetInteger(0,f_name,OBJPROP_COLOR,f_color);
      ObjectSetInteger(0,f_name,OBJPROP_STYLE,f_style);
      ObjectSetInteger(0,f_name,OBJPROP_WIDTH,f_width);
      ObjectSetInteger(0,f_name,OBJPROP_FILL,f_fill);
      ObjectSetInteger(0,f_name,OBJPROP_BACK,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTED,false);
     }
  }

 
Maxim Khrolenko:

Made MQL4 Skript (Code unten), die Rechtecke (Bild unten) zeichnet, aber hier ist das Problem. Bei der gestrichelten Linie STYLE_DOT funktioniert nur die Breite 1, und bei 2 oder mehr wird eine durchgezogene Linie gezeichnet. Können Sie mir sagen, wo mein Fehler liegt, oder wird etwas vor uns verborgen?

Und manuell zeichnen und ändern Sie den Stil und die Dicke versucht? Und welche Schlussfolgerungen können aus diesen Experimenten gezogen werden?
 
Artyom Trishkin:
Haben Sie versucht, manuell zu zeichnen und den Stil und die Dicke zu ändern? Und welche Schlussfolgerungen können aus diesen Experimenten gezogen werden?

Ich glaube, ich habe die Antwort gefunden. Hier heißt es: "Linienstil. Sie wird nur verwendet, wenn die Linienstärke 0 oder 1" beträgt. Das muss der Grund sein, warum Linien der Breite 2 und mehr nicht mit anderen als durchgezogenen Linien funktionieren.

 
Maxim Khrolenko:

Ich glaube, ich habe die Antwort gefunden. Hier heißt es: "Linienstil. Wird nur verwendet, wenn die Linienstärke 0 oder 1" beträgt. Das muss der Grund sein, warum Linien, die keine durchgezogenen Linien sind, mit einer Dicke von 2 oder dicker nicht funktionieren.

Das ist richtig. Das habe ich auch schon erlebt.

 

Meine Herren, bitte beraten Sie mich, ich habe eine Funktion von Kim übernommen, die die Bar-Nummer der letzten geöffneten Position oder -1 zurückgibt.

int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(sym, tf, oot, True));
  }

Ich rufe diese Funktion auf und schreibe eine Bedingung

if(Open[2]>Close[2] && Open[1]>Close[1] && Close[1]<Low[2])
     {

      Comment("цена входа = ",DoubleToStr(Low[2],Digits));
      if(NumberOfBarOpenLastPos("",0,-1,-1)!=0)//вызвал здесь

         ticket=OrderSend(Symbol(),OP_SELLLIMIT,0.1,Low[2],2,0,0,magic,0);
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

         TP=NormalizeDouble(OrderOpenPrice()-tp*Point,Digits);
      SL=NormalizeDouble(OrderOpenPrice()+sl*Point,Digits);
      modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
      }

Ich habe mir Print angesehen und sehe, dass diese Funktion -1 zurückgibt. Zuerst dachte ich, es gäbe keinen Auftrag, aber nach einer Weile tauchte der Auftrag wieder auf und auf demselben Balken wurde nach dem Stop ein Geschäft eröffnet.

 
Guten Tag. Wissen Sie, ob es in MT4 und MT5 möglich ist, Charts eines Instruments mit verschiedenen TFs sowie Indikatoren für diese TFs zu überlagern? Zum Beispiel möchte ich in einem Fenster 3 Charts des Paares EUR/USD mit TFs anzeigen: Tag, 4-Stunden und Stunde, und auch die gleitenden Indikatoren dieser TFs überlagern. Ist das möglich? Ich bin für jede Hilfe dankbar.
Grund der Beschwerde: