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

 

Guten Tag,

Können Sie mir sagen, wie ich einen EAauf einem vps ohne Re-Synchronisation verwalten kann?

Ich meine: Auf dem Terminal kann ich Schaltflächen auf der Karte anbringen und den Modus ohne erneute Synchronisierung ändern. Kann ich den Bot verwenden, um dem EA auf dem PPC Befehle zu geben?

Oder sollte ich eine andere Alternative verwenden, um EA-Modus auf mql vps ohne Re-Sync zu ändern?


Danke für die Antwort!

 

Hallo, liebe Experten!

Bitte helfen Sie mir, dieses Problem zu lösen.

Wenn ich ein beliebiges Paar teste, funktioniert alles einwandfrei, aber wenn ich mit anderen Währungen arbeite, werden die schwebenden Aufträge nicht platziert (ich muss den schwebenden Auftrag offenlegen) und werden nach der Auslösung des Take-Profits nicht geschlossen.

Bitte teilen Sie mir mit, wie ich den Code ändern kann, falls möglich:

bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}
 

Guten Tag Liebe Forumsnutzer.

Bitte helfen Sie mir, den Indikator zu verbessern, der die Zonen auf dem Diagramm erstellt.

Im aktuellen Indikator sind die Zonen für alle Tage der Woche eingestellt.

Ich muss in der Lage sein, die Zonen für jeden Wochentag separat einzustellen.

//+------------------------------------------------------------------+
//|                                            2 ЗОНЫ.mq4            |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|  2017                                                            |
//+------------------------------------------------------------------+

#property indicator_chart_window

//------- Внешние параметры индикатора -------------------------------
extern int    NumberOfDays = 150;        // Количество дней
extern string Begin_1      = "03:00";
extern string End_1        = "08:00";
extern color  Color_1      = PowderBlue;
extern string Begin_2      = "09:00";
extern string End_2        = "16:30";
extern color  Color_2      = Yellow;
extern bool   HighRange    = true;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//| Создание объектов индикатора                                     |
//| Параметры:                                                       |
//|   no - наименование объекта                                      |
//|   cl - цвет объекта                                              |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Удаление объектов индикатора                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("PWT1"+i);
    ObjectDelete("PWT2"+i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Прорисовка объектов на графике                                   |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//|   no - наименование объекта                                      |
//|   tb - время начала сессии                                       |
//|   te - время окончания сессии                                    |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2, t3;
  double   p1, p2, p3;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  t3=StrToTime(TimeToStr(dt, TIME_DATE)+" ""23:00");
  b1=iBarShift(NULL, 0, t1);                            //Поиск бара по времени
  b2=iBarShift(NULL, 0, t2);
  p1=High[iHighest(NULL, PERIOD_M5, MODE_HIGH, b1-b2, b2)];  // 
  p2=Low [iLowest (NULL, PERIOD_M5, MODE_LOW , b1-b2, b2)]; // 
  p3=p2;
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  ObjectSet(no, OBJPROP_TIME2 , t3);
  ObjectSet(no, OBJPROP_PRICE2, p3);
}

//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день                            |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

Dateien:
2_aqi4.ex4  17 kb
2_mne7.mq4  11 kb
 
Maxim Kuznetsov:

Entfernen Sie die Bedingungen "if (OrdersTotal()==0)....". - Sie sagen nur: Suche nach Einträgen und eröffne neue Aufträge nur dann, wenn überhaupt keine Aufträge vorliegen.

Wenn Sie vermeiden wollen, dass ein großes Paket neuer Aufträge ohne eine solche Bedingung eröffnet wird, sollten Sie sie mit zusätzlichen Bedingungen versehen. Dies hängt von Ihrer Strategie ab: keine neue Order innerhalb der Zeit T nach der vorherigen zu eröffnen, oder Bars zu kontrollieren oder Abstände in Pips zwischen den Orders einzuhalten.

Verstanden, danke)

 
Ist es im MT5 möglich, die Ergebnisse des Handels auf einem realen Konto als Diagramm darzustellen, wie man es im Strategietester sehen kann?
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 

Leute, insbesondere die Entwickler, könnt ihr mir sagen, ob es möglich ist, dieses Problem zu lösen? Die Aufgabe im Bild


 

Guten Tag, die Warnung"möglicher Datenverlust durch Typumwandlung" erscheint bei der Variablen n an der markierten Stelle

// Переводим строку в верхний регистр
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}

Können Sie mir bitte sagen, wie ich das korrigieren kann?

 
Sergey:

Guten Tag, die Warnung"möglicher Datenverlust durch Typumwandlung" erscheint bei der Variablen n an der markierten Stelle

Können Sie mir bitte sagen, wie ich das korrigieren kann?

Entweder ushort n=0;

Oder StringSetChar(s, i, (ushort)n);

Aber es ist besser, StringSetCharacter() zu verwenden.

Документация по MQL5: Строковые функции / StringSetCharacter
Документация по MQL5: Строковые функции / StringSetCharacter
  • www.mql5.com
Если значение pos меньше длины строки и значение символьного кода = 0, то строка усекается (но размер буфера, распределенного под строку остается неизменным). Длина строки становится равной значению pos.
 
Gibt es auf dieser Website die Möglichkeit, Artikel zu den Favoriten hinzuzufügen?
Wie wird das bei Themen gemacht.
 

Nachmittags.

In einem Expert Advisor mit mehreren Währungen muss ich eine Pending Order schließen, die gegen einen Gewinn platziert wurde, wenn eine offene Position ausgelöst wird.

Wenn ich jetzt einen schwebenden Auftrag mit Gewinn schließe, werden alle schwebenden Aufträge für alle Währungen geschlossen.

Wie kann man den Code so ändern, dass nur der schwebende Auftrag, der sich auf ein Währungspaar bezieht, geschlossen wird und der Rest offen bleibt?

Was sollte ich an diesem Code ändern?

if(OrderMagicNumber()==Mn){operation=0;
 {for( int  i=OrdersTotal()-1;i>=0;i--)
       {OrderSelect(i, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break; 
          
          result = OrderDelete( OrderTicket() );//break;
          }}}}

Mn in diesem Code ist eine magische Zahl für einen schwebenden Auftrag BUY_STOP oder SELL_STOP.

Die Logik ist, dass wenn eine offene Position mit Take Profit geschlossen wird, diese magische Zahl übrig bleibt und der Befehl zum Löschen ausgeführt werden soll.

Dies funktioniert beim Testen jedes Paares. Wenn Sie jedoch mit anderen Währungen arbeiten, werden alle für alle Paare erteilten Aufträge gelöscht.

Bitte helfen Sie, wer kann es tun.

Ich verstehe, dass sich niemand mit diesem Problem herumschlagen muss, aber vielleicht hat jemand eine fertige Vorlage?

Dafür wäre ich sehr dankbar.

Grund der Beschwerde: