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

 
Trendy:

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?


Es wird sogar noch interessanter:

übersetzen

Alert ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

Schreibvorgänge: 1,32169 - OK.

Mit StrToDouble zurück in einen numerischen Wert konvertieren:

Alert ("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

Ergebnis: 1,3217

Es sollte ein Meme mit Jackie Chan geben, in dem er den Chip nicht versteht).

 
hoz:

Und was gibt Alert eigentlich aus?

Es steht 0,01, aber eigentlich ist es 0...0100.
 
Trendy:

Es wird sogar noch interessanter:

übersetzen

Alert ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

Schreibvorgänge: 1,32169 - OK.

Mit StrToDouble wieder in einen numerischen Wert umwandeln:

Alert ("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

Ergebnis: 1,3217

Es sollte ein Meme mit Jackie Chan geben, in dem er den Chip missversteht).


DoubleToStr() wird verwendet, um Meldungen mit der von Ihnen gewünschten Genauigkeit auszugeben. Standard Print(), Alert(), usw., drucken in 4 Ziffern.

Wenn Sie eine Zahl mit der gewünschten Genauigkeit sehen wollen, dann verwenden Sie DoubleToStr(), nicht in Berechnungen.

Sie brauchen nichts hin und her zu übersetzen ... ;)

 
semiromid:

Es wird 0,01 angezeigt , aber der tatsächliche Wert ist 0...0100.


Ausgabe dann 100 * Punkt = 100 * 0,00001 = 0,001pp (wenn für fünf Ziffern)

Der Wert von lBUY wurde oben geändert. Das ist meiner Meinung nach die Bedingung:

if(lBUY==0.01)

Wird nicht erfüllt. Daher bleibt der Wert von lBUY gleich.

 
artmedia70:
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.


Hmm. Bis jetzt ist es dasselbe. Hier haben wir:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -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();   // ..последней закрытой позиции в истории
         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);
}
 
artmedia70:

DoubleToStr() wird verwendet, um Meldungen mit der von Ihnen gewünschten Genauigkeit auszugeben. Standard Print(), Alert(), etc. drucken 4 Ziffern.

Wenn Sie eine Zahl mit der gewünschten Genauigkeit sehen wollen, sollten Sie DoubleToStr() verwenden, nicht bei Berechnungen.

Sie brauchen nichts hin und her zu übersetzen ... ;)


Das ist verständlich... jetzt...) Aber der springende Punkt ist, dass ich irgendwie eine fünfte Stelle für Berechnungen herausholen muss(

Wenn DoubleToStr() ist nicht gut für sie, dann diese Sprache hat keine solche Funktion? Haben die Entwickler das nicht vorausgesehen?

 
hoz:


Hmm. So weit, so gut. Hier sind wir:

Sollte es nicht dasselbe sein? ;)
 
Trendy:

Das ist verständlich... jetzt...) Aber der springende Punkt ist, dass ich irgendwie eine fünfte Stelle für Berechnungen herausholen muss(

Wenn DoubleToStr() ist nicht gut für sie, dann diese Sprache hat keine solche Funktion? Haben die Entwickler das nicht vorausgesehen?


Für die Berechnungen werden sogar mehr Ziffern benötigt, als Sie denken. Wenn Sie mit der gewünschten Genauigkeit sehen wollen, verwenden Sie DoubleToStr(). Sie werden es nicht anders sehen.
 

Meine Herren Programmierer! Bitte beraten Sie, wie man einen EA mit einem Indikator kombinieren kann?

Ich habe zum Beispiel einen einfachen Bot mo_bidir.mq4 genommen, der mit seinem eigenen Algorithmus handelt, und ich möchte, dass er weiterhin Geschäfte mit seinem eigenen Algorithmus eröffnet, aber nach dem Signal von 3 МА.

Zum Beispiel bei einem Signal - Drei gleitende Durchschnitte:

FastEMA>MediumEMA>SlowEMA (Trend nach oben) - bot kauft

FastEMA<MediumEMA<SlowEMA (Trend abwärts) - bot verkauft

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

Was ich brauche, ist für den Expert Advisor, um den Handel auf 5 Minuten fortzusetzen und der Indikator, um Signale aus dem täglichen oder 4-Stunden-Zeitrahmen zu geben, und ich möchte in der Lage sein, Zeitrahmen in den Bot-Einstellungen zu ändern.

 
Guten Tag an alle Händler. Vielleicht wurde diese Frage bereits diskutiert, aber einige EAs aus der Codebase lassen sich in neuen Builds nicht kompilieren, der Compiler schwört, dass es sich um eine dekompilierte Version handelt. Aber das klingt nach Unsinn, die Versionen wurden nie dekompiliert.