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: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 264
Gesamt: 264
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 20.08.16
Mitglied
 
Registriert seit: Mar 2016
Beiträge: 68
SusanneH befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RetepM Beitrag anzeigen
Hi,
Upps mit "Sorry, hast Du den Code mal angeschaut." hatte ich eigentlich nicht Dich gemeint :-) So sind die Buffer im Indikator dokumentiert:
0 - > double UpperLine[];
1 - > double LowerLine[];
2 - > double Target1[];
3 - > double Target2[];
4 - > double BuyArrow[];
5- > double SellArrow[];
6 - > double BullDot[];
7- > double BearDot[];
Wenn Du die aktuelle Kerze aufrufst, bekommst Du immer 0 bis 3 zurück. Für die anderen Buffer gibt es zunächst EMPTY_VALUE. Erst wenn ein Wert tatsächlich vorhanden ist (sprich: er malt einen Arrow oder einen Dot) bekommst Du auch den dazugehörigen Wert. In der nächsten Kerze hast Du dann aber schon wieder EMPTY_VALUE.
Für einen EA musst Du nur Ask/Bid >/< BuyArrow/SellArrow in der aktuellen Kerze hernehmen.

Nettes Teil, der Indikator!
Hast du das auch überprüft?
Das war gestern Abend auch mein Gedanke und ich hab darauf hin den Indikator in einen fertigen EA gehängt und durchgestept. Der BuyArrow wurde gezeichnet, ein dementsprechender Wert kam aber nicht bei der jeweiligen Kerze bei mir an

Anmerken möchte ich aber, dass man diese Buffer ohnehin nicht benötigt, da man das ganze auch schön z.B.: mit "Ask > UpperLine" im EA selbst auswerten kann.
  #12 (permalink)  
Alt 20.08.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hab ich, passt. Uperline und Lowerline als Ordertrigger, erinnern mich an Markttechnik (123). Das ist in dieser Konstellation relativ gefährlich. Die Kombination mit einem Non-Redraw-Zigzag erscheint mir überlegenswert.
  #13 (permalink)  
Alt 20.08.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

es ist doch ne weile vergangen seitdem ich den Thread eröffnet habe und hab da einiges vergessen was ich probiert habe um das Problem zu lösen, sorry leute für die verwirrung, hab da so einiges wohl nicht mitgeteilt weil es mittlerweise auch länger her ist und ich es vergessen hab, bin zwar noch am Anfang meines Programierdaseins aber das eine oder andere hab ich schon gelernt . Was ihr schreibt ist völlig korrekt , so bin ich auch vorgegangen, denk das ich nicht sämtliche schritte mitgeteilt habe , ist das für euch natürlich auch nicht ersichtlich.

Also was ich immer tuhe wenn ich etwas anfange mit nem Indikator zu proggen, ist erstmal schauen ob ich die Werte der Buffer korrekt zurück bekomme, idR. klappt das ganz einfach mit iCustom und dann beginnt man ja mit dem logischen Konstrukt/Aufbau des Codes. So hab ich es auch hier versucht. Von Empty Value hab ich davor noch nie was gelesen/gehört. Um zu sehen ob der Indikator auch nen anderen Wert zurück gibt als den Standartwert von Empty Value, hab ich dann eben auch ne Codezeile dazu geschrieben. Das Ergebnis ist, dass ich einmalig einen Wert zurück bekommen hatte und danach nix mehr passiert is. Kann natürlich sein das ich auch was falsch gemacht habe. Ich habs heut nochmal probiert mit dem selben ergebnis, hier ist der Code dazu mit nem Chartbeispiel....

Code:
int OnInit()
  {
//---
Anzeige();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
{

double A =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,0,1); //Buffer  0
double B =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,1,1); //Buffer  1
double C =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,2,1); //Buffer  2
double D =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,3,1); //Buffer  3
double E =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,4,1); //Buffer  4
double F =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,5,1); //Buffer  5
double G =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,6,1); //Buffer  6
double H =  iCustom(NULL,0,"Testindikator",5,0.4,1.0,true ,true,true,1.5,3.0,true,7,1); //Buffer  7


double EV = EMPTY_VALUE;// Empty Value Wert

Comment("Buffer 4: ",E,"\nBuffer 5: ",F,"\nEV       : ",EV);

if(E != EV && Close[1]> E)
  {
   Ausgabe ("Buffer 4",DoubleToString(E,5),clrWhite);
   Ausgabe ("Buffer 4 Time",TimeToStr (Time[1],TIME_MINUTES),clrWhite);
   Ausgabe ("Buffer 4 Date",TimeToStr (Time[1],TIME_DATE),clrWhite);
  }
if(F != EV && Close[1] < F)
  {
   Ausgabe ("Buffer 5",DoubleToString(F,5),clrWhite);
   Ausgabe ("Buffer 4 Time",TimeToStr (Time[1],TIME_MINUTES),clrWhite);
   Ausgabe ("Buffer 5 Date",TimeToStr (Time[1],TIME_DATE),clrWhite);
  }
return(0);
}

void Ausgabe (string name, string wert, color col   )
{
    ObjectSetText(name,wert,Size,Style,col);
}

void Anzeige()
{


   ObjectCreate   ("Buffer 4",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 4","",Size,Style,clrWhite);
   ObjectSet      ("Buffer 4",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 4",OBJPROP_XDISTANCE,400);
   ObjectSet      ("Buffer 4",OBJPROP_YDISTANCE,30);
   ObjectCreate   ("TextBuffer 4",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 4","Buffer 4: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 4",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 4",OBJPROP_XDISTANCE,500);
   ObjectSet      ("TextBuffer 4",OBJPROP_YDISTANCE,30);

   ObjectCreate   ("Buffer 4 Time",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 4 Time","" ,Size,Style,clrWhite);
   ObjectSet      ("Buffer 4 Time",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 4 Time",OBJPROP_XDISTANCE,400);
   ObjectSet      ("Buffer 4 Time",OBJPROP_YDISTANCE,50);
   ObjectCreate   ("TextBuffer 4 Time",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 4 Time","Buffer 4 Time: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 4 Time",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 4 Time",OBJPROP_XDISTANCE,500);
   ObjectSet      ("TextBuffer 4 Time",OBJPROP_YDISTANCE,50);   
   
   ObjectCreate   ("Buffer 4 Date",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 4 Date","" ,Size,Style,clrWhite);
   ObjectSet      ("Buffer 4 Date",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 4 Date",OBJPROP_XDISTANCE,400);
   ObjectSet      ("Buffer 4 Date",OBJPROP_YDISTANCE,70);
   ObjectCreate   ("TextBuffer 4 Date",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 4 Date","Buffer 4 Date: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 4 Date",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 4 Date",OBJPROP_XDISTANCE,500);
   ObjectSet      ("TextBuffer 4 Date",OBJPROP_YDISTANCE,70);   
 //-*-----------------------------------------------------------------------------------------  
   ObjectCreate   ("Buffer 5",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 5","",Size,Style,clrWhite);
   ObjectSet      ("Buffer 5",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 5",OBJPROP_XDISTANCE,100);
   ObjectSet      ("Buffer 5",OBJPROP_YDISTANCE,30);
   ObjectCreate   ("TextBuffer 5",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 5","Buffer 5: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 5",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 5",OBJPROP_XDISTANCE,200);
   ObjectSet      ("TextBuffer 5",OBJPROP_YDISTANCE,30);
 
   ObjectCreate   ("Buffer 5 Time",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 5 Time","",Size,Style,clrWhite);
   ObjectSet      ("Buffer 5 Time",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 5 Time",OBJPROP_XDISTANCE,100);
   ObjectSet      ("Buffer 5 Time",OBJPROP_YDISTANCE,50);
   ObjectCreate   ("TextBuffer 5 Time",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 5 Time","Buffer 5 Time: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 5 Time",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 5 Time",OBJPROP_XDISTANCE,200);
   ObjectSet      ("TextBuffer 5 Time",OBJPROP_YDISTANCE,50);

   ObjectCreate   ("Buffer 5 Date",OBJ_LABEL,0,0,0);
   ObjectSetText  ("Buffer 5 Date","",Size,Style,clrWhite);
   ObjectSet      ("Buffer 5 Date",OBJPROP_CORNER,1);
   ObjectSet      ("Buffer 5 Date",OBJPROP_XDISTANCE,100);
   ObjectSet      ("Buffer 5 Date",OBJPROP_YDISTANCE,70);
   ObjectCreate   ("TextBuffer 5 Date",OBJ_LABEL,0,0,0);
   ObjectSetText  ("TextBuffer 5 Date","Buffer 5 Date: ",Size,Style,clrYellow);
   ObjectSet      ("TextBuffer 5 Date",OBJPROP_CORNER,1);
   ObjectSet      ("TextBuffer 5 Date",OBJPROP_XDISTANCE,200);
   ObjectSet      ("TextBuffer 5 Date",OBJPROP_YDISTANCE,70);

}

habs auch so probiert
Code:
if(E != EV)
if(E < EV)
aber immer mit dem gleichen erbegnis. Nach dem ersten erhaltenen Wert kommt nix mehr. Im Chart hab ichs nochmal dargestellt , damit man es besser verstehen kann.

Wenn ich die Kerze des Arrows direkt anspreche (mit nem Custom Indikator wo ich den Indikator aufrufe und die Kerze des Arrows unter shift hinterlege), dann bekomm ich auch den korrekten wert zurück des Arrows , dass bedeutet ja das beide Arrows ja doch den korrekten wert zurück geben wenn Sie erkannt werden. Aber wenn ich das über nen EA mache , funktioniert das ned, vom logischen her ist das doch das gleiche prinzip , deswegen versteh ich es ned warum ich keine aktuellen werte bekomme.


Zitat:
Nettes Teil, der Indikator!
also er ist sehr hilfreich, wenn man nach Dow handeln möchte und nimmt einem Arbeit ab, aber nach dem Indikator alleine zu handeln würd ich doch abraten, da muss man noch ein wenig mitarbeiten

Zitat:
Anmerken möchte ich aber, dass man diese Buffer ohnehin nicht benötigt, da man das ganze auch schön z.B.: mit "Ask > UpperLine" im EA selbst auswerten kann.
das ist richtig Susanne, nur gehts hier um die Filterung, dafür brauch ich die Arrows

Danke schon mal vorab für die vielen antworten, hab ned gedacht das hier noch was kommen wird, tolles Forum echt

LG
Angehängte Grafiken
Dateityp: png BUffer.png (39,1 KB, 7x aufgerufen)
  #14 (permalink)  
Alt 22.08.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

so Mädels , also ich hab den "Fehler" gefunden.

Wenn von der ausgewählten Kerze keinen Wert zurück kommt, dann kann es ja nur daran liegen, das zu dem Abfragemoment einfach kein Rückgabewert da ist, eigentlich ist es ja logisch (wie immer im nachhinein) , hab die Shift Kerze im iCustom von 1 auf 4 verändert und siehe da, so klappt es, aber eben auch nicht bei jedem Arrow. Der Indikator hinterlegt den Arrow nicht immer sofort nach dem Bruch der Linien, weiß aktuell leider auch ned warum.....
  #15 (permalink)  
Alt 22.08.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Probier mal Shft 0 (für Buffer 0-3) und 1 (für die anderen)
  #16 (permalink)  
Alt 23.08.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RetepM Beitrag anzeigen
Probier mal Shft 0 (für Buffer 0-3) und 1 (für die anderen)
hatte ich doch probiert, darum hab ich den thread doch eröffnet
Bringt so leider nix, man kann das Arrow Problem auch "
manuell" lösen indem man den ZZ Indikator selber her nimmt und die Hoch/Tiefs + die Brüche ermittelt, geht wesentlich stressfreier , danke dennoch an alle für die Hilfestellung!!
  #17 (permalink)  
Alt 24.08.16
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht findest Du hier noch ein paar weitere Ideen :-)

//////////////////////////////////////////////////////////////
// http://www.forexmt4.com/_MT4_Systems...%20Trading.mq4

//+------------------------------------------------------------------+
//| Level Trading.mq4 |
//| by Accel |
//+------------------------------------------------------------------+

#property copyright "Accel"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

extern color TrendUpColor=Blue;
extern color TrendDownColor=Red;
extern bool SnapExtremumsToLevelOnChar=True;
extern int FractalBarsOnEachSide=5;
extern int ProceedMaxHistoryBars=1000;
extern int LevelActuality=160;
extern bool RestDefaultTimeframeValues=1;
extern int ExtremumToLevelMaxGap=100;
extern double PriceDeltaFor1Bar=20;

int LevelLength[];
int LevelWidth[];
int PriceCrossedLevel;
double gd_long[];
double gd_short[];

int init()
{
IndicatorBuffers(2);
SetIndexBuffer(0,gd_long);
SetIndexBuffer(1,gd_short);
return(0);
}

int deinit()
{
int i=0;

for (i=Bars-1;i>=0;i--)
if (ObjectFind("Level_"+i)!=-1)
ObjectDelete("Level_"+i);
for (i=Bars-1;i>=0;i--)
if (ObjectFind("Trend_"+i)!=-1)
ObjectDelete("Trend_"+i);
return(0);
}

int LastBarWasHighLow(int LELB, int LEHB)
{
if (LELB==-1 && LEHB!=-1)
return(1);
if (LELB!=-1 && LEHB==-1)
return(-1);
if (LELB!=-1 && LEHB!=-1 && LELB>LEHB)
return(1);
if (LELB!=-1 && LEHB!=-1 && LELB<LEHB)
return(-1);
return(0);
}

int start()
{
int i,j;
int BarsToCheck;
int Stop;
int CurrState; //CurrState=0 - íå íàøëè ïåðåñå÷åíèÿ, 1-ïåðåñå÷åíèå ââåðõ, -1-ïåðåñå÷åíèå âíèç
int LastExtremumHighBar=-1;
int LastExtremumLowBar=-1;
int LastExtremumBar=-1;
double iFractalValue=0,jFractalValue=0;

SetIndexStyle(0,DRAW_ARROW,0,3);
SetIndexArrow(0,159);
SetIndexStyle(1,DRAW_ARROW,0,3);
SetIndexArrow(1,159);
ArrayInitialize(gd_long,0);
ArrayInitialize(gd_short,0);

if (RestDefaultTimeframeValues==1)
{
switch (Period())
{
case 1:
{
ExtremumToLevelMaxGap=2;
PriceDeltaFor1Bar=0.2;
break;
}
case 5:
{
ExtremumToLevelMaxGap=5;
PriceDeltaFor1Bar=0.2;
break;
}
case 15:
{
ExtremumToLevelMaxGap=8;
PriceDeltaFor1Bar=0.2;
break;
}
case 30:
{
ExtremumToLevelMaxGap=10;
PriceDeltaFor1Bar=0.3;
break;
}
case 60:
{
ExtremumToLevelMaxGap=15;
PriceDeltaFor1Bar=0.4;
break;
}
case 240:
{
ExtremumToLevelMaxGap=25;
PriceDeltaFor1Bar=0.4;
break;
}
case 1440:
{
ExtremumToLevelMaxGap=75;
PriceDeltaFor1Bar=1.5;
break;
}
case 10080:
{
ExtremumToLevelMaxGap=150;
PriceDeltaFor1Bar=5;
break;
}
case 43200:
{
ExtremumToLevelMaxGap=300;
PriceDeltaFor1Bar=24;
break;
}
}
}

PriceCrossedLevel=ExtremumToLevelMaxGap*2;

ArrayResize(LevelLength,Bars);
ArrayInitialize(LevelLength,0);
ArrayResize(LevelWidth,Bars);
ArrayInitialize(LevelWidth,1);

if (FractalBarsOnEachSide<=0)
FractalBarsOnEachSide=1;

//Èùåì ôðàêòàëû
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
//Èùåì íèæíèé ôðàêòàë
if (i==Lowest(Symbol(),Period(),MODE_LOW,FractalBarsO nEachSide*2+1,i-FractalBarsOnEachSide))
{
switch (LastBarWasHighLow(LastExtremumLowBar,LastExtremum HighBar))
{
case -1:
{
if (Low[i]<Low[LastExtremumLowBar])
{
gd_long[i]=Low[i];
gd_long[LastExtremumLowBar]=0;
LastExtremumLowBar=i;
}
break;
}
case 1:
{
if (Low[i]<High[LastExtremumHighBar])
{
gd_long[i]=Low[i];
LastExtremumLowBar=i;
}
break;
}
case 0:
{
gd_long[i]=Low[i];
LastExtremumLowBar=i;
break;
}
}
}
//Èùåì âåðõíèé ôðàêòàë
if (i==Highest(Symbol(),Period(),MODE_HIGH,FractalBar sOnEachSide*2+1,i-FractalBarsOnEachSide) && gd_long[i]==0)
{
switch (LastBarWasHighLow(LastExtremumLowBar,LastExtremum HighBar))
{
case 1:
{
if (High[i]>High[LastExtremumHighBar])
{
gd_short[i]=High[i];
gd_short[LastExtremumHighBar]=0;
LastExtremumHighBar=i;
}
break;
}
case -1:
{
if (High[i]>Low[LastExtremumLowBar])
{
gd_short[i]=High[i];
LastExtremumHighBar=i;
}
break;
}
case 0:
{
gd_short[i]=High[i];
LastExtremumHighBar=i;
break;
}
}
}
}

//Èùåì, ãäå çàêàí÷èâàþòñÿ óðîâíè ôðàêòàëîâ (äâîéíîå ïåðåñå÷åíèå öåíîé óðîâíÿ)
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (gd_long[i]==Low[i])
{
Stop=-1;
CurrState=0;
for (j=i-1;j>=0 && Stop==-1;j--)
{
if (CurrState==-1)
if (High[j]>Low[i]+(i-j)*PriceDeltaFor1Bar*Point+PriceCrossedLevel*Point )
Stop=j;
if (CurrState==0)
if (Low[j]<Low[i]+(i-j)*PriceDeltaFor1Bar*Point-PriceCrossedLevel*Point)
CurrState=-1;
}
if (Stop!=-1)
LevelLength[i]=i-Stop;
else
LevelLength[i]=i;
}

if (gd_short[i]==High[i])
{
Stop=-1;
CurrState=0;
for (j=i-1;j>=0 && Stop==-1;j--)
{
if (CurrState==1)
if (Low[j]<High[i]+(i-j)*PriceDeltaFor1Bar*Point-PriceCrossedLevel*Point)
Stop=j;
if (CurrState==0)
if (High[j]>High[i]+(i-j)*PriceDeltaFor1Bar*Point+PriceCrossedLevel*Point )
CurrState=1;
}
if (Stop!=-1)
LevelLength[i]=i-Stop;
else
LevelLength[i]=i;
}
}

//Îáúåäèíÿåì áëèçêèå óðîâíè ðàçíûõ ôðàêòàëîâ
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (LevelLength[i]>0)
{
if (gd_long[i]!=0)
iFractalValue=gd_long[i];
if (gd_short[i]!=0)
iFractalValue=gd_short[i];
BarsToCheck=MathMin(LevelActuality,LevelLength[i]);
j=i-1;
LevelLength[i]=BarsToCheck;
while (BarsToCheck>0)
{
if (LevelLength[j]>0)
{
if (gd_long[j]!=0)
jFractalValue=gd_long[j];
if (gd_short[j]!=0)
jFractalValue=gd_short[j];

if (MathAbs(iFractalValue+(i-j)*PriceDeltaFor1Bar*Point-jFractalValue)<ExtremumToLevelMaxGap*Point)
{
BarsToCheck=MathMin(LevelActuality,LevelLength[j]);
LevelLength[i]=i-j+BarsToCheck;
LevelLength[j]=0;
LevelWidth[i]++;
if (SnapExtremumsToLevelOnChar==1)
{
if (gd_long[j]!=0)
{
gd_long[j]=iFractalValue+(i-j)*PriceDeltaFor1Bar*Point;
}
if (gd_short[j]!=0)
{
gd_short[j]=iFractalValue+(i-j)*PriceDeltaFor1Bar*Point;
}
}
}
}
BarsToCheck--;
j--;
}
}
}

//Ðèñóåì ëîìàííóþ
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (gd_long[i]!=0 || gd_short[i]!=0)
{
if (LastExtremumBar!=-1)
{
if (gd_long[i]!=0)
{
ObjectCreate(StringConcatenate("Trend_",i),OBJ_TRE ND,0,
Time[LastExtremumBar],gd_short[LastExtremumBar],Time[i],gd_long[i]);
ObjectSet(StringConcatenate("Trend_",i),OBJPROP_CO LOR,TrendDownColor);
}
if (gd_short[i]!=0)
{
ObjectCreate(StringConcatenate("Trend_",i),OBJ_TRE ND,0,
Time[LastExtremumBar],gd_long[LastExtremumBar],Time[i],gd_short[i]);
ObjectSet(StringConcatenate("Trend_",i),OBJPROP_CO LOR,TrendUpColor);
}
ObjectSet(StringConcatenate("Trend_",i),OBJPROP_RA Y,0);
ObjectSet(StringConcatenate("Trend_",i),OBJPROP_WI DTH,1);
}
LastExtremumBar=i;
}
}

//Ðèñóåì óðîâíè
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (LevelLength[i]!=0)
{
if (gd_long[i]!=0)
iFractalValue=gd_long[i];
if (gd_short[i]!=0)
iFractalValue=gd_short[i];

ObjectCreate(StringConcatenate("Level_",i),OBJ_TRE ND,0,
Time[i],iFractalValue,Time[i-LevelLength[i]],iFractalValue+LevelLength[i]*PriceDeltaFor1Bar*Point);
ObjectSet(StringConcatenate("Level_",i),OBJPROP_RA Y,0);
if (LevelWidth[i]>1)
{
ObjectSet(StringConcatenate("Level_",i),OBJPROP_WI DTH,MathMin(LevelWidth[i],5));
if (LevelWidth[i]==2)
ObjectSet(StringConcatenate("Level_",i),OBJPROP_CO LOR,LightGray);
if (LevelWidth[i]==3)
ObjectSet(StringConcatenate("Level_",i),OBJPROP_CO LOR,Silver);
if (LevelWidth[i]==4)
ObjectSet(StringConcatenate("Level_",i),OBJPROP_CO LOR,DarkGray);
if (LevelWidth[i]>=5)
ObjectSet(StringConcatenate("Level_",i),OBJPROP_CO LOR,Gray);
}
else
{
ObjectSet(StringConcatenate("Level_",i),OBJPROP_CO LOR,LightGray);
ObjectSet(StringConcatenate("Level_",i),OBJPROP_ST YLE,STYLE_DOT);
}
}
}

return(0);
}
//////////////////////////////////////////////////////////////
Thema geschlossen

Lesezeichen

Stichworte
buffer, bufferauswertung, indikator buffer, mql4, programmierung, programmierung metatrader

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 11:26 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.
-----------------------------------------------------------------------------------------------------------------------------