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

 
sibiriyak73:

Wo liegt der Fehler?

Wenn es viele Zeichen gibt, dann gibt es auch viele "Öffnungen".

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

Wenn es viele Zeichen gibt, dann gibt es auch viele "Öffnungen".

Danke, Kumpel. Wie kann ich es so einrichten, dass es eine Transaktion pro Tag auf dem aktuellen Instrument abreißen und andere Instrumente außer Acht lassen (EA steht auf mehreren Instrumenten)
 
sibiriyak73:
Danke, Kumpel. Wie man es macht ein Geschäft pro Tag am aktuellen Symbol abreißen und andere Instrumente außer Acht lassen (EA steht auf mehreren Symbolen)

- in der Auftragshistorie nach der magischen Nummer und dem Symbol suchen, wenn der Zeitpunkt des Öffnens (oder Schließens?) des Auftrags mit dem aktuellen Datum übereinstimmt, dann OnTick() beenden

- den "neuen Balken" auf TF D1 kontrollieren


der erste Weg - mehr Schreibarbeit, aber im Tester, MT4 wird es sehr schnell funktionieren; der zweite Weg - 3 Zeilen Code, aber im Tester wird es "fressen" die Festplatte und die Testzeit wird länger sein

 
sibiriyak73:
(EA steht auf mehreren Instrumenten)

Ah, ich glaube, ich verstehe es, wenn Sie einen EA haben, der auf mehreren Instrumenten steht, dann müssen Sie nur eine Prüfung hinzufügen, dass der Auftrag zum EA gehört.

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

Ah, ich glaube, ich verstehe es, wenn Sie einen EA auf mehreren Instrumenten haben, dann müssen Sie nur eine Prüfung hinzufügen, dass der Auftrag zu dem EA gehört.

Dieser Code eröffnet eine große Anzahl von Angeboten. Die Idee ist richtig, aber wie kann sie richtig umgesetzt werden?

 
sibiriyak73:

Dieser Code eröffnet eine große Anzahl von Geschäften. Die Idee ist richtig, aber wie kann sie richtig umgesetzt werden?

Sie brauchen dies

Funktion isTradeToDay().

Diese Funktion gibt die Handelsflagge für heute zurück

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Was können Sie aus einem Stück Code hier erraten?

Überprüfen Sie es höchstens einmal am Tag.

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

Guys Hilfe in der Berater müssen einen Handel pro Tag auf das Tool zu öffnen.

Versuchen Sie dies

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

Sie könnten dies versuchen.

Alles schon vor langer Zeit geschrieben ... vor einer sehr langen Zeit.

Dieser Code prüft, was bereits auf dem Markt ist und was in der Historie steht, für den Fall, dass der Markt heute bereits geschlossen ist.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

Was können Sie aus einem Stück Code hier erraten?

Kontrollieren Sie es höchstens einmal pro Tag.

Grüße. Das Problem ist, dass der EA, wenn er einen offenen Handel auf dem Konto sieht, keine weiteren Geschäfte eröffnet. Es ist wie "Sie haben offene Geschäfte in Ihrem Konto, warum wollen Sie, dass ich das mache". Ich muss ihm erklären, dass nicht mehr als ein Handel auf DIESEM WERKZEUG geöffnet werden sollte (EUR USD zum Beispiel), weil dieser EA auf wenige Symbole geöffnet ist. Ich denke, es wäre falsch, den gesamten Code zu zeigen (es ist ein großer Code mit deklarierten Variablen usw.).
Grund der Beschwerde: