Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 03.03.19
gpi gpi ist offline
Neues Mitglied
 
Registriert seit: Nov 2017
Beiträge: 8
gpi befindet sich auf einem aufstrebenden Ast
Standard Abfrage der Werte der letzten Kerze bei neuer Kerze

Hallo liebe User,

habe folgendes Problem, das mir beim Backtest im MT4 nach einer neuen Kerze die Werte der letzten Kerze nicht zurückgegeben werden.

weder mit High[1] noch mit iHigh()

hier mein Code

Code:
 void OnTick(){
      
      //myComment = myCandleTrail(buySL,sellSL);
      if(isNewBar()){
         CheckForNewTrade();      //Eröffnet neue Trades
         mySignal = SignalLage(); //Prüft ob ein Gegensignal vorliegt

         //CandleTrail Stopp nachziehen
         myComment = myCandleTrail(buySL,sellSL); //buySLPrice u. sellSLPrice aus Funktion wird übergeben
         Comment(myComment);
         Print(myComment);
      }
     
     
     
     //Comment(myComment);
     if (SpeedControl == true)
         f_BackTestSpeed(mySpeed,myComment);
     
     
 }

isNewBar Funktion Methode 1:


Code:
bool isNewBar(){
   static datetime lastTime= 0;
   if(lastTime == 0) 
      lastTime = Time[0];    // Initialisierung beim ersten Tick
         if(Time[0] == lastTime)
            return(false);
         else {
            lastTime= Time[0];
            return(true);
         }
}

Funktion isNewBar Methode 2:


Code:
bool IsNewBar()
{
   static int BarsOnChart=0;
	if (Bars == BarsOnChart)
	return (false);
	BarsOnChart = Bars;
	return(true);
}

Ich bekomme immer die Werte der vorletzten Kerze!
bei i = 2 bei i = 1 und bei i=0
Diesen kommischen Fehler bekomme ich beim Tester.
Funktion TrailingStopp:

Code:
//+------------------------------------------------------------------+
//| Funktion myCandleStop!                                           |
//+------------------------------------------------------------------+
// Funktion myCandleStop gibt folgende Werte zurück
// buySLPrice = Stoppkurs für Kauforder, sellSLPrice =  Stoppkurx für Sellorder
// cBuySL = Kerze des Stopps für Kauforder, cSellSL = Kerze des Stopps für SellOrder
// cB = ist der Wert
void myCandleStop(int cB,int cBRW, string mySig, double & buySLPrice, double & sellSLPrice, int & cBuySL, int & cSellSL){
      int i = 1;
      if (mySig=="Long"){
         //int i = 1;  //Shiftwert von der alktuellen Kerze
         // gibt die Stoppkurse zurück
         buySLPrice=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,cB,i));
         sellSLPrice=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,cBRW,i));
        
         // gibt die Kerze von der der Stoppkurs berechnet wurde zurück
         cBuySL = iLowest(_Symbol,_Period,MODE_LOW,cB,i);
         cSellSL = iHighest(_Symbol,_Period,MODE_HIGH,cBRW,i);
         if (High[i]<sellSLPrice) sellSLPrice=High[i];
      }
      
      if (mySig=="Short"){
         //int i = 1;  //Shiftwert von der alktuellen Kerze
         // gibt die Stoppkurse zurück
         buySLPrice=iLow(_Symbol,_Period,iLowest(_Symbol,_Period,MODE_LOW,cBRW,i));
         sellSLPrice=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,cB,i));
         
         // gibt die Kerze von der der Stoppkurs berechnet wurde zurück
         cBuySL = iLowest(_Symbol,_Period,MODE_LOW,cBRW,i);
         cSellSL = iHighest(_Symbol,_Period,MODE_HIGH,cB,i);
         if (High[i]<sellSLPrice) sellSLPrice=High[i];
      } 

//return (0);  
      
 }

Ich hab diesen zusätztlichen Unsinn:
"if (High[i]<sellSLPrice) sellSLPrice=High[i];"

mal testweise in die Funktion zusätzlich eingesetzt.

Da nicht die Werte der letzten Kerze zurückgegeben werden, entstehen unnötige Fehltrades, wenn die letzte Kerze höher, bzw. tiefer als die vorletzte Kerze war.

Siehe Nr. 1 und 2 auf angehängter Grafik "NewBar".


Für Infos wäre ich dankbar.

Gruß
Günter
Angehängte Grafiken
Dateityp: jpg NewBar.JPG (58,5 KB, 3x aufgerufen)