[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 256

 
hoz:


Gestern hatte ich es eilig, ich musste los. Ich habe die Frage in diesem Moment geschrieben, nicht die, die ich wollte.

Eigentlich meinte ich Expert Advisors, die unter einer bestimmten Bedingung ein Bündel von Aufträgen (ein Raster) senden. Ich habe in solchen Expert Advisors nicht gesehen, dass weder Spread, noch Stop-Loss, noch Preisposition über (unter Asc oder Bid), noch irgendetwas anderes geprüft wird. Ich werde es selbst schreiben und es allen zeigen.


Warum sollte man einige Gore-Experten als Beispiel nehmen? Zumindest sind sie nur für den Prüfer, höchstens sind sie, wie oben erwähnt, mit krummen Händen geschrieben...
 
alsu:

Warum sollte man sich überhaupt an einigen Wehexperten ein Beispiel nehmen? Zumindest sind sie nur für den Prüfer, höchstens sind sie, wie oben erwähnt, mit krummen Händen geschrieben...

Nun, ich wusste, wie man es umsetzt, aber ich wollte sehen, wie andere es machen.
 

Leute, ich habe ein wirklich furchtbares Problem! Mein Diagramm verschiebt sich nicht nach links, wenn ich die Zeichnung speichere! Die Funktion "Diagramm verschieben" ist aktiviert! Wie kann ich es reparieren?


 

Hallo!

Ich möchte, dass mein Expert Advisor nicht mehr als einen Handel pro Tag eröffnet. Können Sie mir sagen, wie man das macht?

 

Hallo, ich beschäftige mich schon eine Weile mit mql4, vielleicht kann einer der erfahrenen Programmierer helfen. Ich möchte wissen, wie man es sperren kann, wenn die Bestellung -30 oder -40 erreicht. Ich muss einige Eigenschaften für dieses Skript hinzufügen, um die Bestellungen zu sperren, sobald sie ins Minus gehen.

void start()
{
double StopLoss;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continue;
if(OrderSymbol()!=Symbol())
continue;
if(OrderType()==OP_BUY)
Lots+=OrderLots();
if(OrderType()==OP_SELL)
Lots-=OrderLots();
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7:

Hallo!

Ich möchte, dass mein Expert Advisor nicht mehr als einen Handel pro Tag eröffnet. Können Sie mir sagen, wie man das macht?

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Leute, ich habe ein wirklich furchtbares Problem! Mein Diagramm verschiebt sich nicht nach links, wenn ich die Zeichnung speichere! Die Funktion "Diagramm verschieben" ist aktiviert! Wie kann ich es reparieren?

Hinweis: Auf dem Diagramm oben rechts befindet sich ein kleines Dreieck wie dieses. Wenn Sie mit dem Mauszeiger darüber fahren, erscheint ein Tooltipmit der Aufschrift "Diagrammverschiebung". Haken Sie es ein und schieben Sie es so weit nach links, wie Sie brauchen, um auf der rechten Seite Platz zu schaffen.
 
hoz:

Nun, ich wusste, wie man es umsetzt, aber ich wollte sehen, wie andere es machen.
Was ist, wenn andere anfangen, aus dem Fenster zu springen?
 
paladin80:


Danke für den Tipp!

Nur in der vorgeschlagenen Variante funktioniert der Experte nicht)))) Hier ist eine funktionierende Variante, die ich bekommen habe:

if (OrdersTotal()==0) // Wenn keine offenen Positionen vorhanden sind

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // Suche nach Aufträgen aus der Kontohistorienliste

{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // der Auftrag ist unter den geschlossenen Aufträgen ausgewählt

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Wenn der Zeitpunkt des Orderschlusses größer oder gleich dem Beginn der aktuellen Kerzenöffnung ist

// Der Expert Advisor funktioniert nicht. Anstelle von PERIOD_D1 kann ein beliebiger anderer Punkt eingefügt werden.

zurück(-1);

} } }

 
alsu:

Warum nehmen Sie sich überhaupt ein paar Wehexperten zum Vorbild? Zumindest sind sie ausschließlich für den Prüfer bestimmt, maximal werden sie mit krummen Händen geschrieben, wie oben gesagt wurde...


Ich habe es auf meine Art geschrieben. Ich habe den Code nicht besonders optimiert, sondern ihn nur geschrieben, damit er funktioniert und die Logik zeigt.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

Die Stufe ist die Stufe des Bestellrasters.

Meine Frage ist folgende. Ist meine Logik richtig? Gibt es eine Möglichkeit, den Code zu verbessern, damit er schneller funktioniert? Vom Standpunkt der Leistung aus gesehen...

Ich habe auch die Idee, dass wir nach jeder Nachricht Pausen machen sollten. Nun, alles in allem sind diese Punkte für mich sehr interessant.