;(
das soll die Formel dafür sein, kann das jemand in Investox übersetzen ? :-)
Meta:
Legend ("ZigZag-V02 %p"),
Author ("NEU1234"),
Subchart (false),
ShortCode("ZZ");
//
// Funktionalität der Basisfunktion (V02 vom 29.12.2003):
// - berechnet und zeichnet einen ZigZag Indikator
// - Reversal-Punkte werden anhand eines %-Satzes ermittelt (Input-Parameter)
// - ZigZag-Indikator wird in von Close- to Close-Kurs berechnet
// - markiert die Reversalpunkte im Chart (wahlweise)
// - zeichnet Verbindungslinie zwischen den Reversalpunkten (wahlweise)
// - Print-Ausgabe der ZigZag- und Trigger-Daten (wahlweise)
// - Startpunkt für den ersten Zig oder Zag ist nicht der erste bar,
// sondern jener bar, an dem erstmals eine Abweichung um x-% festgestellt wurde;
// - letzter (noch nicht abgeschlossener) ZigZag wird bis zum letzten Close weitergezeichnet
//
Inputs:
ReversalPzt (5.00, 0.01, 100.00),
Lines (ZigZag,Trigger,both) = ZigZag,
TriggerMark (yes,no) = no,
PrintValues (Print_on, Print_off) = Print_off;
Variables:
ZigZagRichtung, // unbestimmt, up , down
lfdHighBar, lfdHighValue, // Bar-Nr/Value des laufenden neuen High während eines ZigZag
lfdLowBar, lfdLowValue, // Bar-Nr/Value des laufenden neuen Low während eines ZigZag
lastWendeBar, lastWendeValue, // Bar-Nr/Value des letzten festgestellten Wendepunktes
aktTriggerBar, aktTriggerValue, // Bar-Nr/Value, wo letzter Trigger ausgelöst wurde
lasttriggervalue,
triggerUpValue, triggerDownValue, // Wert für aktuelle Trigger der die nächste Wende auslöst
counter (0), // Schleifenzähler
neueRichtung;
///////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Behandlung beim ersten bar (Initialisierungen und einen Abfangspunkt für ZigZag festlegen)
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
If CurrentBar = 1 then
begin
ClearOutput;
lfdHighValue = close;
lfdLowValue = close;
lfdHighBar = 1;
lfdLowBar = 1;
lastWendeBar = 0;
lasttriggervalue = 0;
ZigZagRichtung = "unbestimmt";
// erste Triggermarken berechnen
triggerUpValue = (close+(close/100*ReversalPzt));
triggerDownValue = (close-(close/100*ReversalPzt));
counter = 0;
//
// erste ZigZag-Richtung bestimmen (Schleife, bis eine Richtung festgestellt wird)
//
while counter <= lastbar-1 and ZigZagRichtung = "unbestimmt" do
begin
//
// nur neues laufendes high im noch unbestimmten Zig, nur Trigger nachziehen
//
if close[-counter] > lfdHighValue and close[-counter] > triggerDownValue then
begin
lfdHighValue = close[-counter];
triggerDownValue = (lfdHighValue-(lfdHighValue/100*ReversalPzt));
lfdHighBar = counter+1;
end;
//
// nur neues laufendes low im noch unbestimmten Zig, nur Trigger nachziehen
//
if close[-counter] < lfdLowValue and close[-counter] < triggerUpValue then
begin
lfdLowValue = close[-counter];
triggerUpValue = (lfdLowValue+(lfdlowValue/100*ReversalPzt));
lfdLowBar = counter+1;
end;
//
// erste Richtungsfestlegung = UP bearbeiten
//
if close[-counter] > triggerUpValue then
begin
ZigZagRichtung = "up";
lastWendeValue = lfdLowValue;
lastWendeBar= lfdLowBar;
lasttriggervalue = akttriggervalue;
akttriggerValue = triggerUpValue;
akttriggerBar = counter+1;
if PrintValues = Print_on then Print ("Startpunkt - ZigZag_UP (bar,value): ",
lfdlowbar,CStr(lfdlowvalue,2)," "," Trigger (bar,date,time,value,%)= ",
akttriggerbar,date[-counter],time[-counter], Cstr(akttriggervalue,2),
CStr((((akttriggervalue-lfdlowvalue)/lfdlowvalue)*100),2));
lfdHighValue = close[-counter];
triggerDownValue = (lfdHighValue-(lfdHighValue/100*ReversalPzt));
lfdHighBar = counter+1;
end;
//
// erste Richtungsfestlegung = DOWN bearbeiten
//
if close[-counter] < triggerDownValue then
begin
ZigZagRichtung = "down";
lastWendeValue = lfdHighValue;
lastWendeBar = lfdHighBar;
lasttriggervalue = akttriggervalue;
akttriggerValue = triggerDownValue;
akttriggerBar = counter+1;
if PrintValues = Print_on then Print ("Startpunkt - ZigZag_DOWN (bar,value): ",
lfdhighbar,CStr(lfdhighvalue,2)," "," Trigger (bar,date,time,value,%)= ",
akttriggerbar,date[-counter],time[-counter], Cstr(akttriggervalue,2),
CStr((((akttriggervalue-lfdhighvalue)/lfdhighvalue)*100),2));
lfdLowValue = close[-counter];
triggerUpValue = (lfdLowValue+(lfdlowValue/100*ReversalPzt));
lfdLowBar = counter+1;
end;
//
//falls ZigZagRichtung noch unbestimmt, weiterermitteln (Schleife wird fortgesetzt)
//
counter = counter +1;
end;
end;
/////////////ende first bar behandlung///////////////////////////////////////////////////////////////////
if (Lines = Trigger or Lines = both) and lasttriggervalue > 0 and currentbar <> akttriggerbar and neueRichtung = 1 then
drawline (lastTriggerValue, "Trigger-Line",stylesolid, 2, magenta);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Beim nächsten ZigZag Wendepunkt die ZigZag Linie zeichnen
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
If (currentbar = lastWendeBar) and (Lines = ZigZag or Lines = both) then
drawline (lastWendeValue, "ZigZag-Line",stylesolid, 3, blue);
///////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Beim nächsten Trigger-Bar den Auslösetrigger einzeichnen
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
If currentbar = aktTriggerBar then
begin
if TriggerMark = yes and ZigZagRichtung = "down" then
drawsymbol (aktTriggerValue, "Trigger-Down", symboldonut,10, red,red);
if TriggerMark = yes and ZigZagRichtung = "up"
then drawsymbol (aktTriggerValue, "Trigger-Up", symboldonut,10, green,green);
if (Lines = Trigger or Lines = both) and (lasttriggervalue > 0) then
drawline (aktTriggerValue, "Trigger-Line",stylesolid, 2, magenta);
//
// nächste Wendemarke ermitteln, nächsten Richtungswechsel bestimmen
// (Schleife, bis Gegen-Richtung festgestellt wird)
//
neueRichtung = 0;
counter = 1;
while counter <= ((lastbar-1)-currentbar) and neueRichtung = 0 do
begin
//
// nur neues laufendes high im noch unbestimmten ZigZag, nur Trigger nachziehen
//
if ZigZagRichtung = "up" and close[-counter] > lfdHighValue then
begin
lfdHighValue = close[-counter];
triggerDownValue = (lfdHighValue-(lfdHighValue/100*ReversalPzt));
lfdHighBar = currentbar + counter;
end;
//
// nur neues laufendes low im noch unbestimmten ZigZag, nur Trigger nachziehen
//
if ZigZagRichtung = "down" and close[-counter] < lfdLowValue then
begin
lfdLowValue = close[-counter];
triggerUpValue = (lfdLowValue+(lfdlowValue/100*ReversalPzt));
lfdLowBar = currentbar + counter;
end;
//
// Bearbeitung Richtungswechsel from DOWN to UP
//
// Richtungswechsel wird ausgelöst/getriggert
if ZigZagRichtung = "down" and close[-counter] > triggerUpValue then
begin
ZigZagRichtung = "up";
neueRichtung = 1;
lastWendeValue = lfdLowValue;
lastWendeBar= lfdLowBar;
lasttriggervalue = akttriggerValue;
akttriggerValue = triggerUpValue;
akttriggerBar = currentbar + counter;
if PrintValues = Print_on then Print ("Start Folge - ZigZag_UP (bar,value): ",
lfdlowbar,CStr(lfdlowvalue,2)," "," Trigger (bar,date,time,value,%)= ",
akttriggerbar,date[-counter],time[-counter], Cstr(akttriggervalue,2),
CStr((((akttriggervalue-lfdlowvalue)/lfdlowvalue)*100),2));
lfdHighValue = close[-counter];
triggerDownValue = (lfdHighValue-(lfdHighValue/100*ReversalPzt));
lfdHighBar = currentbar + counter;
end;
//
// Bearbeitung Richtungswechsel from UP to DOWN
//
// Richtungswechsel wird ausgelöst/getriggert
if ZigZagRichtung = "up" and close[-counter] < triggerDownValue then
begin
ZigZagRichtung = "down";
neueRichtung = 1;
lastWendeValue = lfdHighValue;
lastWendeBar = lfdHighBar;
lasttriggervalue = akttriggerValue;
akttriggerValue = triggerDownValue;
akttriggerBar = currentbar + counter;
if PrintValues = Print_on then Print ("Start Folge - ZigZag_DOWN (bar,value): ",
lfdhighbar,CStr(lfdhighvalue,2)," "," Trigger (bar,date,time,value,%)= ",
akttriggerbar,date[-counter],time[-counter], Cstr(akttriggervalue,2),
CStr((((akttriggervalue-lfdhighvalue)/lfdhighvalue)*100),2));
lfdLowValue = close[-counter];
triggerUpValue = (lfdLowValue+(lfdlowValue/100*ReversalPzt));
lfdLowBar = currentbar + counter;
end;
counter = counter +1;
end;
If (currentbar = lastWendeBar) and (Lines = ZigZag or Lines = both) then
drawline (lastWendeValue, "ZigZag-Line",stylesolid, 3, blue);
end;
If (currentbar = lastBar) and (Lines = ZigZag or Lines = both) then
drawline (close, "ZigZag-Line",styledash, 2, blue);
// END - See more at: http://www.tradesignalonline.com/lexicon/view.aspx?id=ZigZag+(ZIG)#sthash.Wz6aezIk.dpuf
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »klexer« (16. Mai 2014, 17:30)