[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 395

 
KostelloArtua:

Vielen Dank für die Tipps!!! Ich habe mein Problem gelöst. Es hat sich herausgestellt, dass der Broker, den ich gesucht habe, bei der Platzierung einer Market-Order, d.h. gemäß den Bedingungen, mir nicht erlaubt, gleichzeitig Stop-Levels zu platzieren. Jetzt werden die Aufträge ohne Stopp-Levels platziert, und ich setze die Stopp-Levels unmittelbar nach jedem Auftrag. Ich habe dabei ein Problem: Nur ein sehr kleiner Teil der Aufträge wird geändert, während die meisten Aufträge in der Sektion "Expert Advisors" die folgenden Ergebnisse anzeigen:

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: open #30906670 sell 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: ungültiges Ticket für OrderModify Funktion
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: open #30906787 buy 0.01 ESM1 at 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: ungültiges Ticket für OrderModify-Funktion

Hier ist der Text des Codes:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
return(0);

}

Außerdem ist es der erste Auftrag, der nach dem Start des Expert Advisors geändert wird!

Offensichtlich habe ich im Code die falsche Reihenfolgeänderung eingestellt... Bitte, helfen Sie mir!

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Digits),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red);
 
ilunga:
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);

OrderSelect(res, SELECT_BY_TICKET);
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red);
Danke für den Tipp!!!
 
Sancho77:
Liebe Programmierer, ich bitte um Hilfe bei der Modifizierung des Expert Advisors: Ich habe eine offene Position und nach einiger Zeit gibt es ein zweites Signal, um die Position in die gleiche Richtung zu öffnen. Ich möchte, dass der neue Auftrag nur dann durch das zweite Signal erfüllt wird, wenn der erste Auftrag bereits im Plus ist. Ich habe dies durch den Vergleich von Kontostand und Eigenkapital umgesetzt (wenn das Eigenkapital höher ist als der Kontostand, ist der eröffnete Auftrag im Plus).
Können Sie einen Code vorschlagen, um den Gewinn/Verlust des letzten offenen Auftrags zu ermitteln?

Wenn seine Ticketnummer gespeichert ist, dann einfach

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

Wenn seine Ticketnummer gespeichert ist, genügt es


Ich danke Ihnen! Können Sie mir sagen, wie ich das Ticket der letzten Bestellung speichern kann?
 
Sancho77:
Ich danke Ihnen! Können Sie mir sagen, wie ich das Ticket der letzten Bestellung speichern kann?

Nun, die einfachste Möglichkeit ist, eine globale Variable int ticket zu deklarieren

und ersetzen Sie ticket = OrderSend(...) überall durch ticket = OrderSend(...)

es wird immer die Nummer des zuletzt geöffneten Auftrags gespeichert

Oder siehe nur Thema "Nützliche Funktionen von KimIV"!

 
ilunga:

Nun, die einfachste Möglichkeit ist, eine globale Variable int ticket zu deklarieren

und ersetzen Sie ticket = OrderSend(...) überall durch ticket = OrderSend(...)

es wird immer die Nummer des zuletzt geöffneten Auftrags gespeichert

oder siehe Thema "Nützliche Funktionen von KimIV" nur

Vielen Dank für Ihre Hilfe!
 
rustein:

Helfen Sie mir, einen Fehler zu finden,

Dankeschön


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

Ich danke Ihnen,

Ich weiß es nicht... Dachte, es würde funktionieren, es funktioniert auch nicht ohne, habe es so gemacht und es funktioniert....

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
PRICE_OPEN !!!! - Sie können diesen Preis nicht verwenden! Sie funktioniert nur bei Indikatoren. Verwenden Sie Bid oder Ask.

Ich danke Ihnen!!! Ja, das ist auf jeden Fall eine Möglichkeit.
 

Jungs eine kompliziertere Frage......

Wie man einen EA dazu bringt, alle Aufträge zu schließen, wenn ein bestimmter Gewinn erreicht ist .... Nur Aufträge für ein Symbol schließen ...

Beispiel: EA arbeitet auf 3 Paare Betrag zu schließen alle Aufträge auf ein Symbol 100p ...

Wenn der EUR mehr als 100 Pence hat, werden nur EUR-Aufträge geschlossen, während andere 200 Pence haben können ...

Wenn ich accountbalanse() nehme, dann schließt der Advisor nur, wenn die Summe der drei Paare mehr als 100p beträgt. Diese Option passt mir nicht !!!!

Hilfe bitte.........

Grund der Beschwerde: