Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 5

 
Leute, bitte ratet mal, was mit dem Tester nicht stimmt. Statt Candlesticks zeigt er nur Eröffnungskurse im Modus "Alle Ticks, die genaueste Methode" und in anderen Modi auch.
Das MT4-Batterievolumen ist auch im Testgerät unzureichend
Dateien:
 

Können Sie mir sagen, warum es sich bei jedem Ticken öffnet?

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
 
Ibragim Dzhanaev:

Können Sie mir sagen, warum es sich bei jedem Ticken öffnet?

Weil ich immer in diesem Modus teste

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
Dateien:
 
Ibragim Dzhanaev:

Können Sie mir sagen, warum sie sich bei jedem Ticken öffnet?

Denn so ist der Code nun einmal geschrieben.

Einfach ausgedrückt, sieht Ihr Algorithmus folgendermaßen aus: Wenn keine Aufträge vorliegen, öffnen Sie Kaufen, und bei jedem Tick öffnen Sie Verkaufen.

 
Vitalie Postolache:

Denn so ist der Code nun einmal geschrieben.

Einfach ausgedrückt sieht Ihr Algorithmus folgendermaßen aus: Wenn keine Aufträge vorliegen, eröffnen Sie einen Kaufauftrag, und bei jedem Tick eröffnen Sie einen Verkauf.

Wie können Sie den Code ändern, damit er ohne zusätzliche Bedingungen funktioniert?
Alert(Sborinfo(Magic));
  // Closse(Magic);
   if(Sborinfo(Magic)==0)
     {
     Print("количество ордеров ",Sborinfo(Magic));
      MassivPrice(step);
      if(OrdersTotal()<2)// без таких условий
         tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,0,0,Green);
      if(tiket>=0)
         LastPrice=Ask;  
     }

   MassivPrice(step);
   if(OrdersTotal()<2)// без таких условий
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
  
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
  kol=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
     Print(" чему ровно кол " , kol );
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic)
      {
      Print(" ордера после " , kol );
      
        // kol++;
         }
     }
   return(kol);
  }
 
Ibragim Dzhanaev:
Wie kann man den Code so ändern, dass er ohne zusätzliche Bedingungen funktioniert?

Aber das geht nicht, wenn man sowohl kaufen als auch verkaufen und ihre Zahl begrenzen muss. Nur würde ich nicht aufOrdersTotal() schauen, sondern zählen, wie viel gekauft und wie viel verkauft wurde.

Und noch einmal, warum brauchen Sie dieses "if(Sborinfo(Magic)==0)", wenn Sie dannOrdersTotal() verwenden?

 
Vitalie Postolache:

Aber das geht nicht, wenn man sowohl kaufen als auch verkaufen und ihre Zahl begrenzen muss. Nur würde ich nicht aufOrdersTotal() schauen, sondern zählen, wie viel gekauft und wie viel verkauft wurde.

Und noch einmal, warum brauchen Sie dieses "if(Sborinfo(Magic)==0)", wenn Sie dannOrdersTotal() verwenden?

Du meinst so? Gibt es andere - einfachere - Möglichkeiten?
{
  CloseFirst(Magic);
   int b=0;
   int s=0;
   for(int i=0; i<=OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol )
        {
         if(OrderType()==OP_BUY)
            b++;
         if(OrderType()==OP_SELL)
            s++;
        }
   if(b==0)
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,Magic,0,Green);
  if(s==0)
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,Magic,0,Red);
      }
 

Genossinnen und Genossen! Ich habe eine Frage.
Der Expert Advisor eröffnet die ausstehenden Aufträge um 00:00 Uhr ab Tagesbeginn auf der Grundlage der Extremwerte des Vortages.

An Wochentagen funktioniert alles einwandfrei, aber bei der Eröffnung am Montagwerden die ausstehenden Aufträge aus irgendeinem Grund nicht zu den Extremwerten des Freitags, sondern zu den Werten des Donnerstags platziert. Wie kommt das?

OpenTime="00:00";
currtime=TimeToStr(TimeCurrent(),TIME_MINUTES);
Format=Digits();
DH=NormalizeDouble(iHigh(NULL,PERIOD_D1,1),Format) ;
DL=NormalizeDouble(iLow(NULL,PERIOD_D1,1),Format);
if (currtime==OpenTime)
{
отложки
}
 
Ibragim Dzhanaev:
Sie meinen so? Gibt es noch andere - einfachere - Möglichkeiten?

Ja, das stimmt in etwa. Wie viel einfacher ist das?

 
Vitalie Postolache:

Ja, das stimmt in etwa. Wie viel einfacher könnte es sein?

Kennen Sie zufällig irgendwelche Lektionen über Arrays? Wenn ja, schicken Sie mir bitte den Link.