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

 
artmedia70:
Wo in dieser Funktion lesen Sie den StopLoss der letzten Schließung? Da ist nichts zu sehen.

Es ist genau hier. Direkt gerichtet.
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
Geht alle schlafen! Morgens ist es immer besser! Es ist 1:00 Uhr nachts! Gute Nacht! Und Artem hat schon ausgeschlafen!

Ich mache das, was Sie tun, jetzt seit fünf Tagen, und ich habe schon angefangen, nachts zu denken. Gute Nacht.
 
Im Logbuch erscheint der Fehler 130. Das sind doch die falschen Haltestellen, oder? ABER der neue Stop-Loss liegt bei 1,3282. Der Stop-Loss liegt im Moment bei 1,3275 (dies ist auch der Eröffnungskurs des Auftrags) und der aktuelle Kurs bei 1,3297. Wo liegt der Fehler?
 

Hallo. Warum werden in der vordefinierten Variable "Punkt" im Protokoll des Strategietesters keine Nullen definiert, sondern nur runde Zahlen?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
Ich bin ein Sibirer, ja. In der Nähe von Krasnojarsk.


Sibiryak, also, fast, zamlYak)).
 
webip:

Aber ich tue das, was Sie tun, seit fünf Tagen, und ich habe schon angefangen, nachts zu denken.

Es ist einfacher zu sagen, wer nachts nicht denkt, wenn es andersherum ist. Ich habe die gleiche Situation. Außerdem stört mich nachts überhaupt niemand. Übrigens habe ich einmal gelesen, dass das Gehirn nachts besser denkt. Es ist, als hätten Wissenschaftler herausgefunden...
 
semiromid:

Hallo. Warum sind in der vordefinierten Variable "Punkt" im Protokoll des Strategietesters keine Nullen definiert, sondern nur runde Zahlen?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



Und was gibt Alert eigentlich aus?
 
artmedia70:
DoubleToStr(Zahl,Ziffer) ist für Sie


Herzlichen Dank! Ich brauchte es, um die Eigenschaften von Kerzen zu vergleichen (mehr, weniger, usw.) Ich habe es aufgeschraubt - es funktioniert. Nur kann nicht verstehen, wie es den Datentyp String vergleicht? Oder double to string nicht übersetzen Zahl zu String? :-D


PS. Es funktioniert nicht im Indikator - nur im Skript... Wenn ich High[i] aufrufe, erhalte ich nur 4 Dezimalstellen.

Ich schreibe:

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5))
{
Alert ("Mehr");
}
if (DoubleToStr(Hoch[2],5)<(DoubleToStr(Hoch[3],5))
{
Alert ("Kleiner");

}

Funktioniert, schreibt das Ergebnis mit fünf Ziffern, Über-/Unterzählungen. Das Problem ist, dass das String-Array im Indikator nicht im Diagramm angezeigt wird. Deshalb...

...schreiben:

Alert ("Normalized Double High = ", NormalizeDouble(High[1],5));

Funktioniert nicht - das Ergebnis ist > 1,1234

Ich verstehe die Entwickler nicht - warum mussten sie die Dinge so sehr verkomplizieren? Warum wird die aufgerufene Funktion mit fünf Ziffern nicht gekratzt, wenn so viele Ziffern in der Tabelle angezeigt werden? Vielleicht gibt es eine einfache Lösung?

 

Ich kämpfe mit einer Funktion, die True zurückgeben soll, wenn die letzte Marktposition mit Gewinn geschlossen wurde, und False, wenn sie nicht mit Verlust geschlossen wurde. Wenn diese Funktion True zurückgibt, werden alle Positionen (sowohl schwebende als auch Marktpositionen) geschlossen.

Hier ist das Ergebnis:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            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();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

Artyom hat oben vorgeschlagen, wo ich einen Fehler hatte. Ich habe es für mich umgeschrieben. Es ist noch nicht die endgültige Variante, aber... es ist schon ziemlich klar. Nachdem ich den Expert Advisor ausgeführt hatte, bemerkte ich sofort, dass die verbleibenden Positionen nicht geschlossen wurden und auch nicht geschlossen werden. Ich begann, den Grund dafür herauszufinden. Ich habe eine Reihe von Funktionen empfohlen und festgestellt, dass sie in diesem Block enthalten sind:

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

Der Kommentar wird die ganze Zeit über genau so ausgelöst:

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

Ich kommentierte es aus und fuhr weiter. Bemerkte, dass dieser Kommentar:

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

Er löst überhaupt nicht aus, auch nicht, wenn die letzte Position geschlossen ist. Was könnte falsch sein?

Meine Gedanken, auch wenn ich vielleicht falsch liege... Vielleicht müssen Sie diesen Block setzen

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

es auch in die for-Schleife einbauen? Andernfalls weiß man nicht, wohin der Überschuss fließen wird. Die Variable j enthält die Indexnummer der Position, und es wird nicht explizit angegeben, in welche Richtung die Suche gehen soll.

 
hoz:

Ich kämpfe mit einer Funktion, die True zurückgeben soll, wenn die letzte Marktposition mit Gewinn geschlossen wurde, und False, wenn sie nicht mit Verlust geschlossen wurde. Wenn diese Funktion True zurückgibt, werden alle Positionen (sowohl schwebende als auch Marktpositionen) geschlossen.

Hier ist das Ergebnis:

Artyom hat oben vorgeschlagen, wo ich einen Fehler hatte. Ich habe es für mich umgeschrieben. Es ist noch nicht die endgültige Variante, aber... es ist schon ziemlich klar. Nachdem ich den Expert Advisor ausgeführt hatte, bemerkte ich sofort, dass die verbleibenden Positionen nicht geschlossen wurden und auch nicht geschlossen werden. Ich begann, den Grund dafür herauszufinden. Ich habe eine Reihe von Funktionen empfohlen und festgestellt, dass der Grund dafür in diesem Block liegt:

Der Kommentar wird die ganze Zeit über genau so ausgelöst:

Ich kommentierte es aus und fuhr weiter. Bemerkte, dass dieser Kommentar:

Er löst nie aus, auch nicht, wenn die letzte Position geschlossen ist. Was könnte falsch sein?

Meine Gedanken, auch wenn ich vielleicht falsch liege... Vielleicht müssen Sie diesen Block setzen

es auch in die for-Schleife einbauen? Andernfalls weiß man nicht, wohin der Überschuss fließen wird. Die Variable j enthält die Indexnummer der Position, und es wird nicht explizit angegeben, in welche Richtung die Suche gehen soll.

Die Variable j muss zu Beginn der Funktion ausdrücklich mit einem negativen Wert initialisiert werden. Versuchen Sie es. Ich habe noch nicht weiter nachgeschaut.