[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 450

 
T-G:
Ja, aber der Punkt der Frage ist, dass die vorherige Order mit einem Minus geschlossen wurde. Die Funktion hat keine Zeit, dies anzuzeigen, zuerst wird die Order nach ein paar Ticks geöffnet und erst dann zeigt die Funktion den letzten Verlust an, aber die Order wurde bereits geöffnet.
Ich habe ein Codeskelett mit Check
 
Ich habe so noch einmal sagen, hat keine Zeit zu überprüfen, zuerst geht es, als ob es keine Elche öffnet ein Geschäft und dann kommt es zu ihm, dass es ein Elch war
 
artmedia70:

Warum verwenden Sie nicht den Parameter "Expiration pending order"?

Es besteht natürlich die Möglichkeit, dass dieser Parameter nicht verwendet werden kann.

Auf einigen Handelsservern kann die Verfallszeit von schwebenden Aufträgen verboten sein. In diesem Fall wird ein Fehler 147 (ERR_TRADE_EXPIRATION_DENIED) erzeugt, wenn versucht wird, einen Wert ungleich Null im Ablaufparameter zu setzen.

Das ist natürlich die einzige Möglichkeit...

Ich habe die Zeile wie von Ihnen vorgeschlagen geändert und der Expert Advisor funktioniert nicht mehr...

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PreisAbstand*Punkt,3,Ask+PreisAbstand*Punkt-StopLoss*Punkt,Ask+PreisAbstand*Punkt+TakeProfit*Punkt, "PD",1,TimeCurrent()+10*60,Green);

Gleichzeitig weiß ich mit Sicherheit, dass es kein Verbot gibt.

Bitte teilen Sie uns mit, wo der Fehler liegen könnte.

 
T-G:
Ich habe so noch einmal sagen, hat keine Zeit zu überprüfen, zuerst geht es, als ob es keine Elche öffnet ein Geschäft und dann kommt es zu ihm, dass es ein Elch war
Wunder gibt es nicht. Sie sollten einen Telepathen aufsuchen...
 
OlegArH:

Ich habe Änderungen an der Zeile vorgenommen, wie Sie vorgeschlagen haben, und der Expert Advisor funktioniert nicht mehr...

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PreisAbstand*Punkt,3,Ask+PreisAbstand*Punkt-StopLoss*Punkt,Ask+PreisAbstand*Punkt+TakeProfit*Punkt, "PD",1,TimeCurrent()+10*60,Green);

Gleichzeitig weiß ich mit Sicherheit, dass es kein Verbot gibt.

Bitte teilen Sie uns mit, wo der Fehler liegen könnte.

Es ist unwahrscheinlich, dass sie nicht mehr funktioniert, aber Ihre Kriterien sind wahrscheinlich fehlerhaft. Ohne den Code ist es schwer, einen Grund zu finden, warum der EA nicht funktioniert...
 
artmedia70:
Es ist unwahrscheinlich, dass es nicht mehr funktioniert, aber Ihre Kriterien sind wahrscheinlich lahm. Ohne den Code ist es schwer, einen Grund zu finden, warum der EA nicht funktioniert...

Hier ist alles, was ich bis jetzt gekritzelt habe:

extern double TakeProfit = 50;
extern double StopLoss=100;
extern double PriceDistance = 50;
extern double Lots = 1;
extern double TrailingStop = 50;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;

total=AuftragsSumme();
if(gesamt<1)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Preisabstand*Point,3,Ask+Preisabstand*Point-StopLoss*Point,Ask+Preisabstand*Point+TakeProfit*Point, "PD",1,0,Green);
Schlaf (10000);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,Bid-PriceDistance*Point-TakeProfit*Point, "PD",2,0,Red);
}

for(cnt=0;cnt<Gesamt;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // Prüfung auf offene Position
OrderSymbol()==Symbol()) // Prüfung auf Symbol
{
if(OrderType()==OP_BUY) // Long-Position wird eröffnet
{
// sollte sie geschlossen werden?
if(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // Position schließen
return(0); // exit
}
// Prüfung auf Nachlaufstopp
if(NachlaufenderStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
zurück(0);
}
}
}
}
sonst // Wechsel zur Short-Position
{
// sollte sie geschlossen werden?
if(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // Position schließen
return(0); // exit
}
// Prüfung auf Nachlaufstopp
if(NachlaufenderStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
zurück(0);
}
}
}
}
}
}
zurück(0);
}

// das Ende.

So funktioniert es.... Aber dementsprechend öffnet sich der Handel auf unbestimmte Zeit, die Schlingpflanze.

Vielen Dank im Voraus!

 
OlegArH:

Hier ist alles, was ich bis jetzt gekritzelt habe:

extern double TakeProfit = 50;
extern double StopLoss=100;
extern double PriceDistance = 50;
extern double Lots = 1;
extern double TrailingStop = 50;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;

total=AuftragsSumme();
if(gesamt<1)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Preisabstand*Point,3,Ask+Preisabstand*Point-StopLoss*Point,Ask+Preisabstand*Point+TakeProfit*Point, "PD",1,0,Green);
Schlaf (10000);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,Bid-PriceDistance*Point-TakeProfit*Point, "PD",2,0,Red);
}

for(cnt=0;cnt<Gesamt;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // Prüfung auf offene Position
OrderSymbol()==Symbol()) // Prüfung auf Symbol
{
if(OrderType()==OP_BUY) // Long-Position wird eröffnet
{
// sollte sie geschlossen werden?
if(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // Position schließen
return(0); // exit
}
// Prüfung auf Nachlaufstopp
if(NachlaufenderStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
zurück(0);
}
}
}
}
sonst // Wechsel zur Short-Position
{
// sollte sie geschlossen werden?
if(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // Position schließen
return(0); // exit
}
// Prüfung auf Nachlaufstopp
if(NachlaufenderStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
zurück(0);
}
}
}
}
}
}
zurück(0);
}

// das Ende.

So funktioniert es.... Aber dementsprechend öffnet sich der Handel auf unbestimmte Zeit, die Schlingpflanze.

Vielen Dank im Voraus!


Lernen Sie, wie man Code einfügt - lesen Sie alles.
 
Roman.:

Lernen Sie, wie man Code einfügt - lesen Sie alles.

Roman, vielen Dank für die Antwort!
Was ich tun muss, ist, den Roboter für die Zeit ab dem Moment, in dem sie automatisch geöffnet werden, zu öffnen.

Zum Beispiel eröffnet der Roboter einen TARGET-Handel, stellt automatisch die Ablaufzeit +600 Sekunden von der aktuellen ein und das war's....

In diesem Fall ist die Option, wenn er entfernt sie selbst nicht passen, da TC, auf dem ich "trainieren" gibt es Einschränkungen bei der Änderung der schwebenden Aufträge, wenn der Preis näher als 10 Punkte + Spread auf den Eröffnungskurs kam, einschließlich der noch nicht offen Ordnung.

Außerdem geht es darum, dass ein bereits offener Auftrag nicht gelöscht werden sollte, sondern dass er "durchgespielt" werden und scheitern darf. Und wenn wir orderdelite setzen, schließt die Funktion auch die Aufträge, die bereits ausgelöst wurden. (?)

Was das Lehrbuch angeht - nun, ich bin kein Programmierer von Natur aus, ich bin ein brillanter Menschenfreund - ich zeichne, modelliere, komponiere und spitze nicht für irgendetwas anderes).

Ich habe versucht, mich in gutem Glauben darauf einzulassen. Manches davon war sinnvoll, manches nicht.

Deshalb bin ich hier.....

 
OlegArH:

Roman, vielen Dank für die Antwort!
Es geht nur darum, den Roboter dazu zu bringen, den Handel pünktlich zu eröffnen, sobald er automatisch eröffnet wird.

Zum Beispiel eröffnet der Roboter einen TARGET-Handel, stellt automatisch die Ablaufzeit +600 Sekunden von der aktuellen ein und das war's....

In diesem Fall ist die Option, wenn er entfernt sie selbst nicht passen, da TC, auf dem ich "trainieren" gibt es Einschränkungen bei der Änderung der schwebenden Aufträge, wenn der Preis näher als 10 Punkte + Spread auf den Eröffnungskurs kam, einschließlich der noch nicht geöffnet, um.

Außerdem geht es darum, dass ein Auftrag, der bereits offen ist, nicht gelöscht werden sollte, sondern dass wir ihn "durchspielen" und bis zu seinem "Tod" sprudeln lassen sollten. Und wenn wir orderdelite setzen, schließt die Funktion auch die Aufträge, die bereits ausgelöst wurden. (?)

Was das Lehrbuch angeht - nun, ich bin kein Programmierer von Natur aus, ich bin ein brillanter Menschenfreund - ich zeichne, modelliere, komponiere, und spitze für nichts anderes).

Ich habe versucht, mich in gutem Glauben darauf einzulassen. Manches davon war sinnvoll, manches nicht.

Deshalb bin ich hier.....

Versuchen Sie, mit Worten zu beschreiben, was Sie hier geschrieben haben:

extern double TakeProfit = 50;
extern double StopLoss=100;
extern double PriceDistance = 50;
extern double Lots = 1;
extern double TrailingStop = 50;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
   int cnt, ticket, total;

   total=OrdersTotal();
   if(total<1) {
      ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,
                       Ask+PriceDistance*Point+TakeProfit*Point,"PD",1,0,Green);
      Sleep (10000);
      ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,
                       Bid-PriceDistance*Point-TakeProfit*Point,"PD",2,0,Red);
      }

   for(cnt=0;cnt<total;cnt++) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&                         // check for opened position
         OrderSymbol()==Symbol()) {                      // check for symbol
         if(OrderType()==OP_BUY) {                       // long position is opened
            if(1!=1) {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
               return(0);                                // exit
               }
                                                         // check for trailing stop
            if(TrailingStop>0) {
               if(Bid-OrderOpenPrice()>Point*TrailingStop) {
                  if(OrderStopLoss()<Bid-Point*TrailingStop) {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                     }
                  }
               }
            }
         else {                                          // go to short position
                                                         // should it be closed?
            if(1!=1) {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0);                                // exit
               }
                                                         // check for trailing stop
            if(TrailingStop>0) {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                     }
                  }
               }
            }
         }
      }
   return(0);
}

Für mich persönlich stellte sich Ihre Idee auf den ersten Blick als Rätsel heraus: Wenn eins nicht gleich eins ist, dann schließe die Bestellung...

Danach habe ich den Rest nicht mehr gesehen...

ZS und versuchen Sie es nicht, denken Sie nicht einmal, dass es möglich ist, einen normalen EA in einem Zyklus zu schreiben...

 
OlegArH:

...Und wenn Sie orderdelite eingeben, schließt die Funktion auch Aufträge, die bereits ausgelöst wurden. (?)

...


Nein. Schauen Sie genauer hin. Ein ausgelöster schwebender Auftrag wird zu einem Marktauftrag - diese Funktion hat damit nichts zu tun.

"Löscht einen zuvor eingestellten schwebenden Auftrag. Gibt TRUE zurück, wenn die Funktion erfolgreich abgeschlossen wurde. Rückgabe FALSE

wenn die Funktion nicht erfolgreich abgeschlossen wurde. Rufen Sie GetLastError() auf, um Fehlerinformationen zu erhalten."