Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 102

 
Dozol:


Roger, ich kann es nicht verstehen!

Ziehen Sie eine horizontale Linie auf dem Diagramm, legen Sie den Preis fest, löschen Sie die Linie - sie wird nicht mehr benötigt. Wir haben sofort einen Auftrag zu diesem Preis erteilt.

Worin liegt der Fehler? Und warum lässt sich ein Verkaufsstopp nicht öffnen?

Warum soll ich den Preis verfolgen, wenn ich nur den Preiswert der horizontalen Linie brauche?

Erklären Sie!!! Hilfe! Mehr Details, bitte!

Sellstop hat sich geirrt, es wird sich öffnen.

Nun zu den Zeilen. Wenn ich live handle, schaue ich mir das Diagramm an und platziere eine horizontale Linie, die Bedingungen sind angemessen, die Linie wird gelöscht und der Auftrag wird eröffnet. Was ist daran besser als ein einfaches Hotkey-Skript? Um die Linie zu zeichnen, müssen Sie im Tester die Visualisierung aktivieren und das Diagramm beobachten. Ich verstehe nicht einmal, warum wir sie in das Prüfgerät aufnehmen sollten.

 
borilunad:
Entschuldigung! Dann geh aufs Töpfchen und schlaf ein! Schönen guten Morgen! ;)
Ja. Ich werde es selbst herausfinden, so unlösbar ist das Rätsel nicht. Aber bis jetzt kann ich nur an Krücken denken. Die Krückenmethode ist keine gute Methode...
 
Liebe Leute, könnt ihr mir sagen, was los ist? Bei einem Verkaufsgeschäft, das mit dem ersten Tick des 0-Balkens eröffnet wird, sollte der Stop-Loss 30 Pips (5 Stellen) über dem Hoch der ersten Kerze gesetzt werden. Ich habe es so geschrieben, aber der Stop-Loss wird gar nicht gesetzt.
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

Und an Ihren Fingern? Wie können Ihnen Zeit und Preis sagen, dass Sie die Übernahme abschließen sollten? Ich kann es mir zwar denken, aber es ist 7.43 Uhr und ich bin noch nicht ins Bett gegangen.


Wenn es 7.43 Uhr ist und ich noch nicht im Bett bin... Ich gehe also davon aus, dass es Gral ist!
 
alexey1979621:
Liebe Leute, sagt mir, was los ist. Bei einem Verkaufsgeschäft, das mit dem ersten Tick des 0-Balkens eröffnet wird, sollte der Stop-Loss 30 Pips (5 Stellen) über dem Hoch der ersten Kerze gesetzt werden. Wurde so geschrieben, aber der Stop-Loss wird überhaupt nicht gesetzt.

StopLoss = iHigh(Symbol(),0,1)+30*Point;

Dies ist das gewünschte Stop-Loss-Niveau, zum Beispiel 1,5000+30*0,00001 = 1,5003.


SL= Price + StopLoss*Point; 
Warum sonst sollten Sie StopLoss*Point zum Preis hinzufügen(1,5003*0,00001=0,000015). SL wird fast gleich dem Preis, deshalb wird kein StopLoss gesetzt.
 
Der Stop-Loss ist immer noch nicht gesetzt, aber der Take-Profit funktioniert. Stop-Loss- und Take-Profit-Code im Anhang
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1. Suchen Sie nach der letzten geschlossenen Position (MODE_HISTORY).
2. Wenn es am (oder in der Nähe des) Takeaway geschlossen hat --> Erinnern Sie sich an die Öffnungszeit -->
3. Durchsuchen Sie alle offenen Positionen (MODE_TRADES) und vergleichen Sie deren Öffnungszeit mit der gespeicherten (aus Punkt 2) --> Wenn die gespeicherte Öffnungszeit der Position, die von der aktuellen Position geschlossen wurde (aus Punkt 2), am längsten von der Öffnungszeit der anderen offenen Positionen entfernt ist --> Das bedeutet, dass die letzte offene Position von der aktuellen Position geschlossen wurde -->
4. Den Rest ausschneiden/löschen.


Hm. Es scheint geschrieben zu sein. Aber das Ergebnis ist nicht das gleiche.

Für mich hat sich folgendes ergeben:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
Liebe Leute, könnt ihr mir sagen, was los ist? Bei einem Verkaufsgeschäft, das mit dem ersten Tick des 0-Balkens eröffnet wird, sollte der Stop-Loss 30 Pips (5 Stellen) über dem Hoch der ersten Kerze gesetzt werden. Ich habe es so geschrieben, aber der Stop-Loss ist gar nicht gesetzt.

Was Sie hier haben, ist überhaupt nichts. Beginnen wir mit der Tatsache, dass kurze Abschlüsse immer über den ASC und nicht über die BID erfolgen.
 
alexey1979621:
Der Stop-Loss ist immer noch nicht gesetzt, aber der Take-Profit funktioniert. Stop-Loss- und Take-Profit-Code im Anhang

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


Hm. Es scheint geschrieben worden zu sein. Aber die Ausgabe ist falsch...

Das habe ich bekommen:

Bei der Suche nach dem letzten abgeschlossenen Auftrag sollte der jüngste Auftrag zuerst gefunden werden, aber die Prüfung, ob er zum Zeitpunkt "Take" abgeschlossen wurde, sollte aus der Schleife herausgenommen werden. Andernfalls wird jeder abgeschlossene Auftrag daraufhin geprüft, ob er zum Zeitpunkt "Take" abgeschlossen wurde, und wenn dies der Fall ist, wird der Zeitpunkt des ersten zum Zeitpunkt "Take" abgeschlossenen Auftrags in der Schleife gespeichert, nicht der jüngste.