lindomatic:
Aber wie kann ich das Signal sehen? Signal, Signal(), SIGNAL Signal() usw. tun es nicht.
Hallo, Otto, ich beiß mich weiter durch.. erstmal einen Ausschnitt von letztens..
ich möchte während des Testens/Debuggens den Rückgabewert einer Funktion testen, hier bspw:
ob SIG_SELL, SIG_BUY oder SIG_NONE returniert wird.
Sobald ich den Test starte, bekommt man im Metaeditor unten rechts das Fenster, um die Werte der Ausdrücke prüfen zu können. Hier kann ich bspw. sehen, dass/wenn
= true ist. Aber wie kann ich das Signal sehen? Signal, Signal(), SIGNAL Signal() usw. tun es nicht.
Vielen Dank & Gruß,
Christian
bin mir jetzt nicht sicher, aber das sollte doch so dastehen
int Signal() { if((PriceInfo[1].close < bufferSMA[1]) && (PriceInfo[0].close > bufferSMA[0])) return(SIG_BUY); if((PriceInfo[1].close > bufferSMA[1]) && (PriceInfo[0].close < bufferSMA[0])) return(SIG_SELL); return(SIG_NONE); }
bin mir jetzt nicht sicher, aber das sollte doch so dastehen
nöö....SIGNAL ist ein enum
passt schon
bin mir jetzt nicht sicher, aber das sollte doch so dastehen
Du musst wenn du die Funktion Signal() aufrufst den Rückgabewert auch speichern.
So geht er verloren.
SIGNAL Signalnow = Signal(); // Signalnow ist ein ENUM vom Typ SIGNAL
Etwas viel Signal in dem Getümmel auf den ersten Blick.
Ich hätte die Funktion nicht Signal() genannt, sondern CreateSignal();
Geschmacksache
Du musst wenn du die Funktion Signal() aufrufst den Rückgabewert auch speichern.
So geht er verloren.
Etwas viel Signal in dem Getümmel auf den ersten Blick.
Ich hätte die Funktion nicht Signal() genannt, sondern CreateSignal();
Geschmacksache
so sehe ich mehr, wenn ich den Rückgabewert in einer Variablen speichere =)
super, jetzt komme ich erstmal weiter.. sicherlich nicht sehr viel, aber etwas.
Danke Euch!
Du musst den Funktionswert einer Variablen zuweisen!
=)
danke!
Ihr seht, dass jeweils die Bedingungen zum SIG_SELL und SIG_BUY true sind, wieso liefert die Funktion stets SIG_NONE?
1000 Dank
PS: Der Tester erkennt auch den Typ mit "int" nicht richtig, mag aber egal sein.
Update Std. später: das war wohl das (void) in SIGNAL signal(void).. habe das rausgenommen zu signal(), jetzt scheint es zu funktionieren.
Das Signal wird nicht sauber und zuverlässig geliefert, zwischendurch mal, aber dann direkt wieder "SIG_NONE".
Die Bedingungen stehen auf true, aber es wird nicht das entsprechende Signal geliefert, wie kann das?
Hier ist der Code:
#include <Tester\StopAtDate.mqh> // enum SIGNAL { SIG_NONE, SIG_BUY, SIG_SELL, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ MqlRates PriceInfo[]; // Kerzendaten(bars) int handleSMA; // Handle für den SMA double bufferSMA[]; // Buffer für den SMA int toCopy; // Anzahl der zu kopierenden Kerzen(bars) //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ArraySetAsSeries(PriceInfo,true); // Zugriffsart einstellen. Hier wird nix sortiert wie Herr R.B. behauptet ArraySetAsSeries(bufferSMA,true); toCopy=3; handleSMA = iMA(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); // Handle für den iMA erzeugen if(HandleError(handleSMA,"iMA")) // Handle überprüfen 1 return(false); return(INIT_SUCCEEDED); //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(StopAtDate.Check("2020.04.01", "00:42")) // prüfen der Zeit DebugBreak(); // hier hält das Programm an CopyRates(_Symbol,_Period,0,toCopy,PriceInfo); CopyBuffer(handleSMA,0, 0,toCopy,bufferSMA); SIGNAL signalnow = Signal(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ SIGNAL Signal() { if((PriceInfo[1].close < bufferSMA[1]) && (PriceInfo[0].close > bufferSMA[0])) return(SIG_BUY); if((PriceInfo[1].close > bufferSMA[1]) && (PriceInfo[0].close < bufferSMA[0])) return(SIG_SELL); return(SIG_NONE); } //+------------------------------------------------------------------+ //| Hilfsfunktionen | //+------------------------------------------------------------------+ bool HandleError(int aHandle, string aName) { if(aHandle==INVALID_HANDLE) { Alert("*ERROR* creating ",aName," handle."); return(true); } return(false); } //+------------------------------------------------------------------+
Das Signal wird nicht sauber und zuverlässig geliefert, zwischendurch mal, aber dann direkt wieder "SIG_NONE".
Die Bedingungen stehen auf true, aber es wird nicht das entsprechende Signal geliefert, wie kann das?
Hier ist der Code:
Bei einer solchen Situation starte ich immer das Debuggen mit historischen Daten.
Dabei fällt es mir ja auf; hierbei sehe ich ja, dass die Bedingung korrekt auf true springt, wenn die Kerze den MA durchbricht, aber das entsprechende Signal nicht returned wird. Da müsste ich eine Haube aufschrauben, wo ich nichtmal weiß, wo die Schrauben sind.

- 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, Otto, ich beiß mich weiter durch.. erstmal einen Ausschnitt von letztens..
ich möchte während des Testens/Debuggens den Rückgabewert einer Funktion testen, hier bspw:
ob SIG_SELL, SIG_BUY oder SIG_NONE returniert wird.
Sobald ich den Test starte, bekommt man im Metaeditor unten rechts das Fenster, um die Werte der Ausdrücke prüfen zu können. Hier kann ich bspw. sehen, dass/wenn
= true ist. Aber wie kann ich das Signal sehen? Signal, Signal(), SIGNAL Signal() usw. tun es nicht.
Vielen Dank & Gruß,
Christian