Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43252
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 9 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 454
Gesamt: 455
Team: 0
Team:  
Benutzer:  murkel
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 14.09.16
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

traderdoc - vielen dank für die antwort soweit habe ich es dann auch verstanden - man sollte das halt nicht nachts machen -.-

die funktion an sich funktioniert auch - nur habe ich bei paaren mit 3 nachkommastellen das problem, dass er mir die falsche kerze ausgibt und ich komme nicht dahinter warum - da die funktionen sich ja eigentlich anpassen sollten weil sie einen fest hinterlegten wert wiedergeben sollen

Code:
//---shortsignale
//---zurückverfolgen wo die psar umgeschwenkt haben von oben nach unten und bis zu dem punkt zurück mit ilowest den wert ermitteln

if (psar_direction>Close[1])
{
for(int i=0;psar_rot<Close[i];i++)
{
s_index=i;
}

int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0);
Print("Short "+(High[s_high]+Spread));
Print("Enthaltender Spread "+Spread);
}

//--longsignale
//---zurückverfolgen wo die psar umgeschwenkt haben von unten nach oben und bis zu dem punkt zurück mit ihighes den wert ermitteln
if (psar_direction<Close[1])
{
for (int i=0;psar_rot>Close[i];i++)
{
l_index=i;
}

int l_low=iLowest(NULL,TimeFrame,MODE_LOW,l_index,0);
Print("Long "+(Low[l_low]-Spread));
Print ("Enthaltender Spread "+Spread);
}
  #12 (permalink)  
Alt 14.09.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

Der Code sieht für mich richtig aus. Wie berechnest Du die Variable Spread ?
Kann es sein das da was nicht stimmt ?
  #13 (permalink)  
Alt 14.09.16
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

Hallo

den Spread ermittel ich wie folgt:

Code:
//---Abfrage Spread      

   if(digits==5){
      Spread = MarketInfo(Symbol(), MODE_SPREAD)/10000;
   }
   if(digits==3){
      if(Symbol()=="XAUUSD"||Symbol()=="XAGUSD"){
         Spread = MarketInfo(Symbol(), MODE_SPREAD)/10;
      }else{
         Spread = MarketInfo(Symbol(), MODE_SPREAD)/100;
      }
   }
  #14 (permalink)  
Alt 15.09.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

An der Spreadberechnung ist nichst außergewöhnliches. Bist du dir sicher dass die Schleife nur bei 3 Digit-Symbolen nicht funktioniert. Vielleicht hab ich jetzt nen Logikhänger:
den Wert von psar_direction kenne ich nicht aber den berechnest du wahrscheinlich aus dem iSAR von Bar[1].

if (psar_direction>Close[1])

psar_direction soll also bei Shortsignalen über dem Close[1] liegen. psar_direction kann aber auch schon mehrere Bars lang über dem jeweiligen Close liegen. D.h. der folgende Code:

for(int i=0;psar_rot<Close[i];i++)
{
s_index=i;
}

würde ja auch aufgerufen nachdem psar_direction schon drei oder mehr Bars über dem Close liegt.

hätte das so geschrieben:
double psar_direction1=iSAR(.,.,.,1);
double psar_direction2=iSAR(.,.,.,2);
if (psar_direction1>Close[1] &&psar_direction2<Close[2])
{
//und hier jetzt die for-Schleife einfügen
}
Damit wird die Routine nur aufgerufen wenn der SAR von unter auf über dem Kurs umschaltet.

Die folgende for-Schleife müsste auch geändert werden.
for(int i=0;psar_rot<Close[i];i++)

Hier sollte die Schleife dann von int=2 beginnen sonst zählst du ja den aktuellen Bar[0] mit.
for(int i=2;psar_rot<Close[i];i++)

Close[1] ist ja schon über dem Kurs und wir wollen nur den PSAR unter dem Kurs zählen.

int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0 );

Der Parameter Shift muss dann bei iHighest auch auf 2 geändert werden sonst zählst Du ja den aktuelle Bar[0] mit.

So wäre es glaube ich dann richtig:

int s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,2 );
  #15 (permalink)  
Alt 15.09.16
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

ach das habe ich vergessen dazu zu schreiben

der psar_direction ist der parabolic des übergeordneten timeframes - handelt man beispielsweise im h4 chart, ist das der d1 parabolic

dass dieser zur zeit der abfrage dort liegen muss ist schon korrekt weil ich sicherstellen will/muss dass der übergeordnete trend nach wie vor die richtige richtung hat

zählen möchte ich nun, die bars die psar_rot schon (also der vom aktuellen timeframe) unter dem kurs ist

dementsprechend finde ich deinen ansatz aber gut

also frage ich ab

Code:
if (psar_direction>Close[0])
{
 for(int i=0;psar_rot<Close[i]&&psar_rot<psar_rot2;i++)
  {
  s_index=i;
  }
}
damit müsste ich dann auch den wechsel im aktuellen timeframe erschlagen haben während ich zeitgleich permanent überprüfe ob der übergeordnete psar noch an der richtigen stelle ist
  #16 (permalink)  
Alt 15.09.16
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

so ich hatte einen geistesblitz und habe es hinbekommen - um mir variablen zu sparen lasse ich die parabolics die ich vergleichen will einfach in der for schleife generieren

Code:
 if(psar_direction>Close[0])
        {                                      //psar_gruen                               psar_gruen2
         for(int i=0;psar_gruen<Low[i]&&iSAR(NULL,TimeFrame,Gruen_Step,Gruen_Max,i)>iSAR(NULL,TimeFrame,Gruen_Step,Gruen_Max,i+1);i++)
           {
            s_index=i;
           }

         s_high=iHighest(NULL,TimeFrame,MODE_HIGH,s_index,0);
         Print("Gezählte Kerzen "+s_index);
         Print("Shortsignal "+(High[s_high]+Spread));
         Print("Enthaltender Spread "+Spread);
        }
so funktioniert es jetzt und macht auch keine mucken

der fehler mit den instrumenten die nur drei nachkommastellen haben lag in der spreadberechnung (das komma musste eine stelle rücken)

zu der frage ob ich mir sicher bin dass es nur bei den paaren nicht funktioniert (gold etc) - andere instrumente handele ich eh nicht

vielen Dank für die unterstützung
Thema geschlossen

Lesezeichen

Stichworte
mql4, parabolic sar, parabolic sar punkte, programmierung, programmierung metatrader, schleife

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------