Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1814

 
Maksim Efimov Standard-MACD aus einer Signallinie und einem Histogramm zu berechnen. Die Idee ist folgende: Bei jedem neuen Balken nehmen wir die beiden vorherigen Kerzen und ermitteln die Indikatorwerte für jede von ihnen. Wenn der MACD-Wert an der zweiten Kerze größer als der Signalwert ist und der MACD-Wert an der ersten Kerze bereits unter dem Signalwert liegt und alle Werte über Null sind, bedeutet dies, dass es einen Crossover an der Spitze gibt und umgekehrt.

Aber in dem Moment, in dem man den Wert erhält, wird er irgendwie riesig. Und nur eine - die Signallinie der zweiten Kerze. Es kann 8 sein, wie viel, 4,5, 7 usw. Wenn der nächste Balken erscheint, kann der Wert der Signallinie des zweiten Balkens ab dem neuen Balken bereits normal sein. Alle anderen haben sich als richtig erwiesen. Und im Datenfenster ist der Wert auch korrekt. Ich kann nicht verstehen, warum. Was mache ich falsch?

Ich habe das Gefühl, dass es sich um einen variablen Doppelgänger handelt. Weil der Wert im Datenfenster 0,000081 ist, aber es stellt sich heraus, 8,1....., bemerkte ich das gleiche mit einem anderen Wert - im Datenfenster 0,000071, aber in der Variable 7,1..... Sie sind jedoch alle als Doppelvariablen definiert.

Es gibt keine 8 in dem Kommentar, sondern eine Fortsetzung.

Сomment(DoubleToString(CtrlMACD)+" "+DoubleToString(CtrlSignalMACD)+" "+DoubleToString(PrevMACD)+" "+DoubleToString(PrevSignalMACD));
 
Vitaly Muzichenko #:

Es gibt keine 8 in den Kommentaren, aber es gibt eine Fortsetzung.

Ich danke Ihnen. Das zeigt es richtig. Ein dummer Fehler, natürlich. Aber ich frage mich trotzdem, warum alle anderen Werte normal angezeigt werden und nur einer schief ist.

 
Maksim Efimov #:

Ich danke Ihnen. Das ist der richtige Weg, um es zu tun. Ein dummer Fehler, natürlich. Aber ich frage mich immer noch, warum alle anderen Werte normal angezeigt werden und nur einer schief ist.

Er ist nicht krumm, sondern auf Maschinenebene korrekt, wie Sie sehen, steht am Ende "e-08".

Zum Beispiel ist die Zahl 1e-05 kein Fehler, sondern0,00001.

Sie müssen DoubleToString verwenden, um das zu sehen, was wir gewohnt sind, und das Programm wird trotzdem korrekt funktionieren

Lesen Sie

Все калькуляторы
  • allcalc.ru
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
 
Vitaly Muzichenko #:

Er ist nicht krumm, sondern auf Maschinenebene korrekt, siehe das "e-08" am Ende.

Zum Beispiel ist die Zahl 1e-05 kein Fehler, sondern0,00001.

Um zu sehen, was wir gewohnt sind, müssen Sie DoubleToString verwenden und das Programm wird trotzdem korrekt funktionieren

Lesen Sie

Ich danke Ihnen nochmals. Ich werde es lesen.

 
In mql4 lieferte OrderSend() sofort das Ergebnis der Auftragsabwicklung durch den Handelsserver.
In mql5 muss eine solche Funktion von Ihnen selbst geschrieben werden?

 
Tretyakov Rostyslav #:

Das Problem wurde behoben, jetzt funktioniert es. Natürlich ist das nicht richtig, aber es funktioniert.

{
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
                {
                 if(((NormalizeDouble((Bid - OrderOpenPrice()*Point),Digits) >= NormalizeDouble(((Bid - NormalizeDouble((iTrailStart * Point),_Digits))),_Digits) > OrderStopLoss() || OrderStopLoss()==0)));//true
                   {
                    if((OrderStopLoss() == 0.0 && NormalizeDouble(Bid - OrderStopLoss()* Point,Digits) < NormalizeDouble((Bid - NormalizeDouble((iTrailDist * Point),_Digits)),_Digits)));//true
                      {
                      if(iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble(((Bid - OrderStopLoss() - iTrailDist * Point)),Digits) >= iTrailStep);//true
                        {
                         sl_lev = NormalizeDouble((Bid - iTrailDist * Point()),_Digits);
                         if(NormalizeDouble(Bid - sl_lev * Point,_Digits) < MarketInfo(Symbol(),MODE_STOPLEVEL));//false
                           {
                            if(!OrderModify(Forder,OrderOpenPrice(),NormalizeDouble(Bid - NormalizeDouble((iTrailStart * Point),_Digits),_Digits),tp,OrderExpiration()));
                            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
                           }
                        }
                      }
                   }
                }
             }

Die Stopps werden nicht richtig gesetzt, wie kann ich das beheben?

 
Valeriy Yastremskiy #:

Und schauen Sie in die Zeitschrift, um zu sehen, was daraus wird)

Zuerst habe ich gar nichts geschrieben, dann habe ich angefangen, nacheinander zu suchen, und es wurde eine Menge daraus.

Ich danke Ihnen.

 
Alexander Avksentyev #:

Das Problem wurde behoben, jetzt funktioniert es. Natürlich ist das nicht richtig, aber es funktioniert.

Die Haltestellen werden nicht richtig eingestellt, wie kann man das beheben?

Woher beziehen Sie diese Daten?

OrderTakeProfit()
OrderProfit() + OrderSwap() + OrderCommission()
OrderOpenPrice()
OrderStopLoss()
 
Tretyakov Rostyslav #:

Woher beziehen Sie diese Daten?

Aus dem Haftbefehl.

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
       {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
           if(OrderType() == OP_BUY) 
             {
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
 
secret der Auftragsverarbeitung durch den Handelsserver.
In mql5 muss eine solche Funktion von Ihnen selbst geschrieben werden?

Arten von Handelsgeschäften

MQL5 wird auch sofort zurückgeben

BestellungSenden

Wenn der Auftrag erfolgreich vom Handelsserver angenommen wurde, gibt die Funktion OrderSend() true zurück.

Grund der Beschwerde: