[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 118

 
Shixan:

Nachmittags.

Ich habe einen Code geschrieben, um zwei Pending Orders (BuyStop und SellStop) unter den Bedingungen a=true und b=true zu öffnen. Nach einiger Zeit schließt der EA beide Orders, bis ein neues Signal erscheint, aber manchmal öffnet der EA 2 Pending Orders in dieselbe Richtung. Warum passiert das und wie kann man diesen "Fehler" vermeiden?



if (a=true && b=true)
{
int OrderCount = OrdersTotal();
if (OrderCount>1) return(0);
ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, slippage, PriceOpen_Sell,0,0,Green);
Sleep(1000);

ticket2=OrderSend(Symbol(), OP_SELLSTOP, getLot(), PriceOpen_Sell, slippage, PriceOpen_Buy,0,0,Green);

Sleep(1000*59*TimeFrame);

for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, Slippage);
if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage);
}

zurück(0);

}


Können Sie mir einen Tipp geben?

Ich danke Ihnen im Voraus

Ich habe mir Ihren Code nicht angesehen, aber... um NICHT zwei oder mehr Aufträge auf EIN Signal zu platzieren, prüfen Sie VOR der Platzierung eines Auftrags: Gibt es bereits einen Auftrag auf dieses Signal? Wenn nicht - aufstellen, wenn doch - rauchen.
 
mario065:

Hallo,

Ist es möglich, in den Einstellungen einen Zeitplan mit einer festen Gewichtung 1:1 einzugeben?

Sagen Sie mir, wie man das macht, wenn es möglich ist.

Vielen Dank im Voraus.

Diese Bibliothek kann.

Abschnitt "3.3 Funktion zum Setzen von Diagrammeigenschaften" Funktion ServiceSetScaleFix1To1().

Die Bibliothek funktioniert nur mit den russischen und englischen Lokalisierungen. Das kann auch bei Ihnen funktionieren.

 
Hallo, können Sie mir sagen, warum im neuen Build 451 in MetaEditor beim Kompilieren die zweite ex 4-Datei nicht im Expertenordner neben der mq 4-Datei erscheint?
 

Hier ist die Funktion der Auftragseröffnung:

//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         if (!OrderModify(ticket, OrderOpenPrice(), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

Hier ist der Ausdruck der Parameter:

2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4499
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4519
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4513
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4515
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #1 sell stop 0.10 EURUSD at 1.45091 ok

Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?

 
hoz:

Hier ist die Funktion der Auftragseröffnung:

Hier ist der Ausdruck der Parameter:

Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?

Lesen Sie überhaupt, was gescholten wird?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Ungültiger Funktionsparameterwert

Wenn Sie etwas nicht verstehen, werden wir es mit dem Rest der Welt klären...

ZZY. Wenn Sie einen schwebenden Auftrag erteilen, wird die Zeichenfolge

if (price < Bid)

Wenn Sie einen schwebenden Auftrag erteilen, sollte die Zeichenkette nicht ganz relevant sein. Es sollte geprüft werden, ob es mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) festgelegten Mindestabstand übereinstimmt. Das erste, was mir sofort ins Auge fiel.

Die zweite Möglichkeit besteht darin, den Preis zu drucken, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid gesetzt werden, sondern in Bezug auf den Preis, zu dem die Order gesetzt wird.

 
Zhunko:

Diese Bibliothek kann.

Abschnitt "3.3 Funktionen zum Einstellen von Grafikeigenschaften" Funktion ServiceSetScaleFix1To1().

Die Bibliothek arbeitet nur mit russischen und englischen Lokalisierungen. Das kann auch bei Ihnen funktionieren.

Danke Zhunko.
 
artmedia70:

Lesen Sie überhaupt, was gescholten wird?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Ungültiger Wert eines Funktionsparameters

Schauen Sie sich die Parameter an, die an die aufgerufene Funktion übergeben werden. Wenn gar nichts mehr klar ist, werden wir das in Ruhe klären...


Natürlich lese ich es, deshalb bin ich ja neugierig. Ich habe alle Eingabeparameter entkoppelt.

Das habe ich bekommen:

bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         Print("ND(price) = ", DoubleToStr(ND(price),Digits));
         Print("ND(SL) = ", DoubleToStr(ND(SL),Digits));
         Print("ND(TP) = ", DoubleToStr(ND(TP),Digits));
         Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits));
         if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

Hier ist der Inhalt des Protokolls:

2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4485
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4505
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4496
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4497
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(OOP) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(TP) = -0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(SL) = 0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(price) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #4 sell stop 0.10 EURUSD at 1.44946 ok

Einige der Aufträge werden geändert, andere nicht. Die Werte von ND(TP), ND(SL) zu Beginn wurden auf den Zufallswert zurückgesetzt. Warum?

Die Normalisierungsfunktion stammt übrigens von mir:

//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
 
artmedia70:

Lesen Sie überhaupt, was gescholten wird?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Ungültiger Wert eines Funktionsparameters

Sehen Sie sich die Parameter an, die an die aufzurufende Funktion übergeben werden, und wenn nichts klar ist, werden wir es mit der Welt klären...

ZS. Wenn Sie einen schwebenden Auftrag erteilen, wird die Zeile

if (price < Bid)

Dies ist nicht ganz angemessen. Sie sollten prüfen, ob der zulässige Mindestabstand mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) angegebenen Wert übereinstimmt. Das erste, was mir sofort ins Auge fiel.



Normalerweise treffe ich auf solche Kontrollen bei der Änderung von Aufträgen, aber nicht bei der Eröffnung. Ich habe es bereits gesehen. Wenn ich den ausstehenden Preis auf bystop setze, ist das ein Fehler. Und wenn ich einen Stop von 10 Pips setze, wird er sicherlich höher sein als der StopLoss-Wert. Ich handle nicht auf Ticks :)
 
artmedia70:


Zweitens: Drucken Sie den Preis, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid platziert werden, sondern in Bezug auf den Kurs, zu dem die Order gesetzt wird



Ich gehe davon aus, dass es sich um eine Änderung handelt? Schließlich sind Bid und Ask für uns wichtig, wenn wir den Auftrag eröffnen. Ich habe mit dem obigen Beitrag alles in Ordnung gebracht.
 

Guten Tag,

Ich möchte einen EA auf mehreren Fenstern gleichzeitig arbeiten lassen. Für jedes Instrument kann jedoch nur ein Auftrag eröffnet werden. Deshalb gibt es jetzt eine Bedingung:

int total = OrdersTotal();

if (Summe<1) { Analyse und Positionsblock öffnen} sonst { Analyse und Positionsblock schließen }

Wenn ich nun zwei Symbole gleichzeitig öffne, wird die Arbeit an dem anderen Symbol blockiert, wenn ich eines der beiden öffne. Deshalb habe ich mir etwas Ähnliches ausgedacht:

int total = OrdersTotal();

int cnt;

if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = true;
}
}
}

if(total<1 || total>0 && Symbol_FLAG == false) { Analyse und Öffnen des ptposition-Blocks}

aber auf dem Testgerät funktioniert es nicht...

Vielleicht können Sie mir sagen, ob ich etwas Unrealistisches vorhabe?