Wenn es dir um die Darstellung der double-Werte geht dann guck dir das hier mal an.
//| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int alle = SymbolsTotal(true); // Alle Symbole durchlaufen for ( int k = 0 ; k < alle ; k++ ) { // Symbol ist eine Aktie // if ( StringFind(SymbolName(k,true),".",0) > 0 ) // { double vola = 0; MqlRates Daten[]; ArraySetAsSeries(Daten,true); CopyRates(SymbolName(k,true),PERIOD_D1,0,5,Daten); double A = NormalizeDouble(Daten[1].close,4); double B = NormalizeDouble(Daten[2].close,4); if ( A > B ) { vola = A - B; } else { vola = B - A; } Alert(" Symbol = " + SymbolName(k,true) + " close[1] = " + A + " close[2] = " + B + " vola = " + vola + " Aktie = " + (B * 0.02)); Print("Aktie pur = "+ (B * 0.02)); Print("A pur = " + A); Print("B pur = " + B); Print("Vola pur = "+ vola); printf("Aktie optisch verbessert = %.2f",(B * 0.02)); printf("A optisch verbessert = %.5f",A); printf("B optisch verbessert = %.5f",B); printf("Vola optisch verbessert = %.5f",vola); if ( vola < B * 0.02 ) { SymbolSelect(SymbolName(k,true),false); } // } } } //+------------------------------------------------------------------+
KR 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) Aktie pur = 2.265e-002 PF 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) A pur = 1.1311 PM 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) B pur = 1.1325 FG 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) Vola pur = 1.400000000000068e-003 PR 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) Aktie optisch verbessert = 0.02 PO 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) A optisch verbessert = 1.13110 PJ 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) B optisch verbessert = 1.13250 IO 0 12:24:49.598 Forum_button_vola_2perc (EURUSD,H1) Vola optisch verbessert = 0.00140
Besser ?
Sonst die Frage genauer stellen.
Gruß
Hallo,
Danke für deine Antwort.
Die Darstellung ist nur die Kontrolle der Daten, das nehme ich später wieder raus. Die errechneten Werte Stimmen nicht!
Schauen wir uns BCP.PO an, Schlusskurs der Vortageskerze ist 3,292 €, gestern war er 3,258 €, ergo die Aktie ist im Handelsverlauf um 0,034 € gefallen, nicht 3,39...... und 2% vom Aktienpreis sind 0,065 € und nicht 6,58...?!
Entweder habe ich verlernt zu Subtrahieren, oder hier spielt mir jemand einen Streich..... :-(
Das Normalisieren der Double werte ist eigentlich unnötig, da der abgespeicherte Preis ja schon eine gewisse Anzahl an Kommastellen hat. lediglich bei der Multiplizierung ist eine Begrenzung sinnvoll, zur Darstellung, mehr aber auch nicht...Hallo,
Danke für deine Antwort.
Die Darstellung ist nur die Kontrolle der Daten, das nehme ich später wieder raus. Die errechneten Werte Stimmen nicht!
Schauen wir uns BCP.PO an, Schlusskurs der Vortageskerze ist 3,292 €, gestern war er 3,258 €, ergo die Aktie ist im Handelsverlauf um 0,034 € gefallen, nicht 3,39...... und 2% vom Aktienpreis sind 0,065 € und nicht 6,58...?!
Entweder habe ich verlernt zu Subtrahieren, oder hier spielt mir jemand einen Streich..... :-(
Das Normalisieren der Double werte ist eigentlich unnötig, da der abgespeicherte Preis ja schon eine gewisse Anzahl an Kommastellen hat. lediglich bei der Multiplizierung ist eine Begrenzung sinnvoll, zur Darstellung, mehr aber auch nicht...Die aktuelle Kerze hat auch den Index 0 und der Vortag demzufolge Index 1
des weiteren musst du bei CopyRates noch ArraySetAsSeries verwenden, sonst kopierst Du die werte vom anderen Ende des Charts
Hallo,
jetzt funktionierts, hatte noch andere Fehler mit drinne... Danke! Das mit dem Print ist besser als Alert zur Kontrolle!!! Danke!
if ( sparam == "big_win_loss" ) { Print(SymbolsTotal(true) + " Symbole gesamt!"); // Alle Symbole durchlaufen for ( int k = 0 ; k < SymbolsTotal(true) ; k++ ) { //Print(k + " " + SymbolName(k,true)); // Symbol ist eine Aktie if ( StringFind(SymbolName(k,true),".",0) > 0 ) { //Print(SymbolName(k,true) + " is ne Aktie"); // bin nicht investiert if ( !PositionSelect(SymbolName(k,true)) ) { //Print(SymbolName(k,true) + " nicht investiert"); double vola = 0; MqlRates Daten[]; ArraySetAsSeries(Daten,true); while( CopyRates(SymbolName(k,true),PERIOD_D1,0,3,Daten) < 0 ) { SeriesInfoInteger(SymbolName(k,true),PERIOD_D1,SERIES_SYNCHRONIZED); } double A = Daten[1].close; double B = Daten[2].close; if ( A > B ) { vola = NormalizeDouble(A - B,4); } else { vola = NormalizeDouble(B - A,4); } Print(" Symbol = " + SymbolName(k,true) + " close[1] = " + A + " close[2] = " + B + " vola = " + vola + " Aktie = " + (B * 0.02)); if ( vola < NormalizeDouble(B * 0.02,4) ) { //Print(SymbolName(k,true) + " fliegt raus!"); SymbolSelect(SymbolName(k,true),false); //Print("Jetzt " + SymbolsTotal(true) + " Symbole übrig!"); k--; } else { Print(SymbolName(k,true) + " Mehr als 2%!"); } } else { //Print(SymbolName(k,true) + " bin investiert!"); } } else { //Print(SymbolName(k,true) + " ist keine Aktie!"); } } }
also subtrahieren kann MQL5 :-)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
ich habe gerade ein eher schräges Problem und komme nicht wirklich weiter.
In meiner MarketWatch sind Symbole von Aktien, ich habe einen Button, wenn man diesen drückt sollen nur noch die Symbole übrig bleiben die sich mehr als 2 Prozent bewegt haben im Verlauf des letzten Handelstages.
Wenn ich mir dann anschaue was dabei rum kommt, siehe Anhang, bin ich baff....
Wo seht ihr den Fehler?
Danke!
Gruß Sven