Funktionsrückgabewerte im Strategietester - Seite 3

 
lindomatic:

Ja, habe mir gedacht, dass der vor der Anweisung anhält, daher habe ich immer den Wert auf den Durchlauf vorher bezogen.
Einen Breakpoint kann man weder bei ";" allein noch bei einer Print("xxx"); Anweisung setzen, das lässt der Debugger nicht zu.

Viele Dank und schön langes Wochenende!

Geht nicht?

Geht doch:


 

https://1drv.ms/v/s!AhkIAIpGAVqqhI9Eb59RJdlxdW24oA?e=KnjnQX


Schau es dir mal an.

Es macht es etwas deutlicher, da ich denke, es ist noch nicht verstanden.

Microsoft OneDrive – Greifen Sie überall auf Dateien zu. Erstellen Sie Dokumente mit der kostenlosen Office Online-Anwendung.
  • onedrive.live.com
Speichern Sie Fotos und Dokumente online. Greifen Sie darauf von jedem PC, Mac oder Telefon aus zu. Erstellen Sie Word-, Excel- oder PowerPoint-Dokumente, und bearbeiten Sie diese gemeinsam mit anderen.
 
Carl Schreiber:

Geht nicht?

Geht doch:


ok, das funktioniert

 
Christian:

https://1drv.ms/v/s!AhkIAIpGAVqqhI9Eb59RJdlxdW24oA?e=KnjnQX


Schau es dir mal an.

Es macht es etwas deutlicher, da ich denke, es ist noch nicht verstanden.

Ja, danke, der Umbau hilft beim Verstehen und ist, wie ich meine, sicherer in der Nachverfolgung. So wie zuvor müsste ich mich ja blind auf den Return-Value verlassen, obwohl das mit der Überprüfung via PrintFormat(signalnow) ja auch klapppt. 
 
Audio ist nicht dabei, war das so gewollt? 

Ich müsste sehen, wie Du signaltemp initialisiert, wo kommt da zu Beginn diese 1721248240 her? 

Ich werde mir das später nochmal intensiver ansehen.

1000 Dank & schönen SO!

PS: Woran mag es liegen, dass der Tester manchmal mit sichtbarem MA und manchmal ohne startet? 

 
lindomatic:

Ja, danke, der Umbau hilft beim Verstehen und ist, wie ich meine, sicherer in der Nachverfolgung. So wie zuvor müsste ich mich ja blind auf den Return-Value verlassen, obwohl das mit der Überprüfung via PrintFormat(signalnow) ja auch klapppt. 
 
Audio ist nicht dabei, war das so gewollt? 

War gewollt, hatte laute Musik, an die keiner hören will :-)


Ich müsste sehen, wie Du signaltemp initialisiert, wo kommt da zu Beginn diese 1721248240 her? 

Wird an Ort und Stelle in der Funktion Signal() LOKAL initialisiert. Jede Variable, die bei der Initialisierung keinen Wert bekommt, hat den Wert der Speicherstelle wo sie angelegt wird.

Wird Ihr kein Wert zugewiesen stehen da eben wirre Zahlen. Deshalb immer einen Wert zu weisen. Erspart blöde Fehlersuche.

Wenn der Debugger in der Zeile steht, ist sie noch nicht mit SIG_NONE gefüllt. Es soll verdeutlichen wie was zusammenhängt.

Diese ist nur zu sehen, wenn der Debugger innerhalb der Funktion Signal() ist.

Die signalnow wurde GLOBAL erstellt (ganz oben im Code). Die ist überall zu sehen.



Ich werde mir das später nochmal intensiver ansehen.

1000 Dank & schönen SO!

PS: Woran mag es liegen, dass der Tester manchmal mit sichtbarem MA und manchmal ohne startet? 

Keine ahnung , MQ Feature :-) ....gib die Suche danach auf. Der Tester wird komplett neu geschrieben.


.

 

Hier der Code zum Video,der Vollständigkeit halber.

Etwas angepasst noch um im Schema von Otto zu bleiben.

// global scope

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)
   SIGNAL            signalnow;            // Signal

int OnInit()
  {
    ArraySetAsSeries(PriceInfo,true);                     
    ArraySetAsSeries(bufferSMA,true);
    toCopy=3;
    handleSMA = iMA(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); // Handle für den iMA erzeugen
    signalow = SIG_NONE; 
    return(INIT_SUCCEEDED);
  }
  
void OnTick()
  {
    CopyRates(_Symbol,_Period,0,toCopy,PriceInfo);
    CopyBuffer(handleSMA,0,   0,toCopy,bufferSMA);
     
    signalnow = Signal();
    PrintFormat((string)signalnow);
  }

SIGNAL Signal(void)
  {
   SIGNAL signaltemp = SIG_NONE;                                                    // erstellen des temporären Signals als NONE
   
   if((PriceInfo[1].close < bufferSMA[1]) && (PriceInfo[0].close > bufferSMA[0]))
      signaltemp = SIG_BUY;                                                         // Ändern von NONE auf BUY
      
   if((PriceInfo[1].close > bufferSMA[1]) && (PriceInfo[0].close < bufferSMA[0]))
      signaltemp = SIG_SELL;                                                        // Ändern von NONE auf SELL


   return(signaltemp);                                
  }
 
Christian:

Hier der Code zum Video,der Vollständigkeit halber.

Etwas angepasst noch um im Schema von Otto zu bleiben.

Inline-Kommentare, die bekomme ich nicht hin.. aber soweit alles klar, soweit steige ich durch.

MegaDank =P

Grund der Beschwerde: