ProRealCode - Trading & Coding with ProRealTime™
Bonjour
Je cherche à transcrire ce code Harmonic Trading.lua de la plateforme de fxcm marketscope2.0 pour pouvoir l’utiliser sur PRT, est ce possible ?
Merci
Plus d’information sur cet indicateur :
http://fxcodebase.com/code/viewtopic.php?f=17&t=4994
cordialement
bonjour
merci pour l’info
je l’avais bien vu car avant de poster ma demande j’avais chercher sur le site pendant une bonne partie du week end
mais c’est un des Harmonic Patterns – Bullish AB=CD
avec ce fichier coder en lua on peux détecter les figurer en “Bat”, “Gartley “, “Crab”, “Butterfly “, et aussi les Bullish AB=CD
voilà exemple ci joint.
cordialement
un coup de main personne ?
-- More information about this indicator can be found at:
--+------------------------------------------------------------------+
--| Copyright © 2018, Gehtsoft USA LLC |
--| http://fxcodebase.com |
--+------------------------------------------------------------------+
--| Developed by : Mario Jemic |
--| mario.jemic@gmail.com |
--+------------------------------------------------------------------+
--| Support our efforts by donating |
--| Paypal: https://goo.gl/9Rj74e |
--+------------------------------------------------------------------+
--| Patreon : https://goo.gl/GdXWeN |
--| BitCoin : 15VCJTLaz12Amr7adHSBtL9v8XomURo9RF |
--| BitCoin Cash: 1BEtS465S3Su438Kc58h2sqvVvHK9Mijtg |
--| Ethereum : 0x8C110cD61538fb6d7A2B47858F0c0AaBd663068D |
--| LiteCoin : LLU8PSY2vsq7B9kRELLZQcKf5nJQrdeqwD |
--+------------------------------------------------------------------+
-- Indicator profile initialization routine
function Init()
indicator:name("Harmonic Pattern");
indicator:description("");
indicator:requiredSource(core.Bar);
indicator:type(core.Indicator);
indicator:setTag("group", "Swing");
indicator.parameters:addGroup("Pattern Selector");
indicator.parameters:addBoolean("Bat", "Bat", "", true);
indicator.parameters:addBoolean("Gartley", "Gartley", "", true);
indicator.parameters:addBoolean("Crab", "Crab", "", true);
indicator.parameters:addBoolean("Butterfly", "Butterfly", "", true);
indicator.parameters:addBoolean("ABCD", "AB=CD", "", true);
indicator.parameters:addBoolean("Three Drives", "Drives", "", true);
indicator.parameters:addDouble("Correction", "correction", "", 25,0,33);
indicator.parameters:addGroup("Zig Zag Calculation");
indicator.parameters:addInteger("Depth", "Depth", "", 12, 1, 10000);
indicator.parameters:addInteger("Deviation", "Deviation", "", 5, 1, 1000);
indicator.parameters:addInteger("Backstep", "Backstep", "", 3, 1, 10000);
indicator.parameters:addGroup("Zig Zag Style");
indicator.parameters:addColor("Zig_color","Zig Color", "", core.rgb(0, 255, 0));
indicator.parameters:addColor("Zag_color", "Zag Color", "", core.rgb(255, 0, 0));
indicator.parameters:addInteger("widthZigZag", "Line Width", "", 1, 1, 5);
indicator.parameters:addInteger("styleZigZag", "Line Style", "", core.LINE_SOLID);
indicator.parameters:setFlag("styleZigZag", core.FLAG_LEVEL_STYLE);
indicator.parameters:addGroup("Price Target Lines Style");
indicator.parameters:addColor("Ratio_color","Line Color", "", core.rgb(0, 0, 255));
indicator.parameters:addInteger("style", "style", "style", core.LINE_DOT);
indicator.parameters:setFlag("style", core.FLAG_LEVEL_STYLE);
indicator.parameters:addInteger("width", "Line Width", "", 3, 1, 5);
indicator.parameters:addInteger("Transparency", "Transparency", "", 40,0,100);
indicator.parameters:addColor("Bull", "Color of Bull", "", core.rgb( 0, 255, 0));
indicator.parameters:addColor("Bear", "Color of Bear", "", core.rgb( 255, 0, 0));
indicator.parameters:addGroup("Line Selector");
indicator.parameters:addBoolean("Show", "Show Price Targets", "", false);
indicator.parameters:addBoolean("ShowZigZag", "Show Zig Zag Line", "", true);
end
-- Indicator instance initialization routine
-- Processes indicator parameters and creates output streams
-- Parameters block
local Depth;
local Deviation;
local Backstep;
local Correction;
local Selector={};
--local correctionA,correctionB;
local Bull, Bear;
local first;
local source = nil;
-- Streams block
local ZigC;
local ZagC;
local out;
local line_id=1;
local label_id=1;
local LAST={};
local Show;
local ShowZigZag;
local A,B,C,D,X;
local XA;
local AB;
local BC;
local CD;
local XB;
local XD;
local AC;
local BD;
local AD;
local Transparency;
local Up={};
local Down={};
local One={};
local Two={};
-- Routine
function Prepare(nameOnly)
Correction= instance.parameters.Correction;
Correction= Correction/100;
Selector["Bat"]= instance.parameters.Bat;
Selector["Gartley"]= instance.parameters.Gartley;
Selector["Crab"]= instance.parameters.Crab;
Selector["Butterfly"]= instance.parameters.Butterfly;
Selector["AB=CD"]= instance.parameters.ABCD;
Selector["Drives"]= instance.parameters.Drives;
Bull= instance.parameters.Bull;
Bear= instance.parameters.Bear;
Transparency= instance.parameters.Transparency;
ShowZigZag= instance.parameters.ShowZigZag;
Depth = instance.parameters.Depth;
Deviation = instance.parameters.Deviation;
Backstep = instance.parameters.Backstep;
source = instance.source;
Show = instance.parameters.Show;
Transparency= 100-Transparency;
local name = profile:id() .. "(" .. source:name() .. ", " .. Depth .. ", " .. Deviation .. ", " .. Backstep .. ")";
instance:name(name);
if (nameOnly) then
return;
end
ZIGZAG = core.indicators:create("ZIGZAG", source, Depth, Deviation, Backstep );
first = ZIGZAG.DATA:first();
if ShowZigZag then
out = instance:addStream("out", core.Line, name, "Up", instance.parameters.Ratio_color, first);
out:setWidth(instance.parameters.widthZigZag);
out:setStyle(instance.parameters.styleZigZag);
else
out = instance:addInternalStream (0, 0);
end
ZigC = instance.parameters.Zig_color;
ZagC = instance.parameters.Zag_color;
Up["Bat"]=instance:addStream("UpBat", core.Line, name, "", instance.parameters.Zig_color, first);
Down["Bat"] =instance:addStream("DownBat", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , Up["Bat"], Down["Bat"], Bull, Transparency);
Up["Gartley"]=instance:addStream("UpGartley", core.Line, name, "", instance.parameters.Zig_color, first);
Down["Gartley"] =instance:addStream("DownGartley", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , Up["Gartley"], Down["Gartley"], Bull, Transparency);
Up["Crab"]=instance:addStream("UpCrab", core.Line, name, "", instance.parameters.Zig_color, first);
Down["Crab"] =instance:addStream("DownCrab", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , Up["Crab"], Down["Crab"], Bull, Transparency);
Up["Butterfly"]=instance:addStream("UpButterfly", core.Line, name, "", instance.parameters.Zig_color, first);
Down["Butterfly"] =instance:addStream("DownButterfly", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , Up["Butterfly"], Down["Butterfly"], Bull, Transparency);
One["AB=CD"]=instance:addStream("One", core.Line, name, "", instance.parameters.Zig_color, first);
Two["AB=CD"]=instance:addStream("Two", core.Line, name, "", instance.parameters.Zig_color, first);
Down["AB=CD"] =instance:addStream("DownABCD", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , One["AB=CD"], Down["AB=CD"], Bull, Transparency);
instance:createChannelGroup("Group","Group" , Two["AB=CD"], out, Bull, Transparency);
Up["Drives"]=instance:addStream("UpDrives", core.Line, name, "", instance.parameters.Zig_color, first);
Down["Drives"] =instance:addStream("DownDrives", core.Line, name, "", instance.parameters.Zig_color, first);
instance:createChannelGroup("Group","Group" , Up["Drives"], Down["Drives"], Bull, Transparency);
line_id=1;
label_id=1
end
function Update(period, mode)
if period < first+5 then
return;
end
local i;
ZIGZAG:update(mode);
if ZIGZAG.DATA[period-3] ~= 0 then
out[period-3]= ZIGZAG.DATA[period-3];
end
if period < source:size()-1 then
return;
end
line_id=1;
label_id=1;
for i = 1 , period, 1 do
Up[i]=nil;
Down[i]=nil;
if ShowZigZag then
if out[i] ~= nil then
if out[i] > out[i-1] then
out:setColor(i, ZigC);
else
out:setColor(i, ZagC);
end
end
end
if i == 1 then
LAST["HighFour"] = nil;
LAST["HighThree"] = nil;
LAST["HighTwo"] = nil;
LAST["HighOne"] = nil;
LAST["LowFour"] = nil;
LAST["LowThree"] = nil;
LAST["LowTwo"] = nil;
LAST["LowOne"] = nil;
end
if out[i] > source.high[i] - source:pipSize() *0.001 and out[i] < source.high[i] + source:pipSize() *0.001 then
--if out[i] == source.high[i] then
LAST["HighFour"]=LAST["HighThree"];
LAST["HighThree"]=LAST["HighTwo"];
LAST["HighTwo"]=LAST["HighOne"];
LAST["HighOne"]=i;
if LAST["HighFour"] ~= nil then
Lengt(false);
end
end
if out[i] > source.low[i] - source:pipSize() *0.001 and out[i] < source.low[i] + source:pipSize() *0.001 then
LAST["LowFour"]=LAST["LowThree"];
LAST["LowThree"]=LAST["LowTwo"];
LAST["LowTwo"]=LAST["LowOne"];
LAST["LowOne"]=i;
if LAST["LowFour"] ~= nil then
Lengt(true);
end
end
end
end
function Lengt(FLAG)
if LAST["LowFour"] == nil or LAST["HighFour"] == nil then
return;
end
if FLAG then
D= LAST["LowOne"];
B= LAST["LowTwo"];
X= LAST["LowThree"];
C = LAST["HighOne"];
A= LAST["HighTwo"];
else
D= LAST["HighOne"];
B= LAST["HighTwo"];
X= LAST["HighThree"];
C = LAST["LowOne"];
A= LAST["LowTwo"];
end
XA= math.abs(out[X]- out[A]);
AB= math.abs(out[A]- out[B]);
BC= math.abs(out[B]- out[C]);
CD= math.abs(out[C]- out[D]);
XB= math.abs(out[X]- out[B]);
XD= math.abs(out[X]- out[D]);
BD= math.abs(out[B]- out[D]);
AC= math.abs(out[A]- out[C]);
AD= math.abs(out[A]- out[D]);
local label = DECODE(FLAG);
if label~= nil then
DRAW (label );
end
end
function DRAW (label)
local Color;
if X== A
or A== B
or B== C
or C== D
then
return;
end
if label == "Bull Three Drives" or label == "Bear Three Drives" then
if Selector["Drives"] then
if out[X] < out[A] then
Color= Bull;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
else
Color= Bear;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
end
core.drawLine(Up["Drives"], core.range(X, B), out[X], X, out[B], B, Color);
core.drawLine(Up["Drives"], core.range(B, D), out[B], B, out[D], D, Color);
Up["Drives"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[X], out[A]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["Drives"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["Drives"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["Drives"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["Drives"], core.range(C, D), out[C], C, out[D], D, Color);
end
elseif label == "Bull Bat" or label == "Bear Bat" then
if Selector["Bat"] then
if out[X] < out[A] then
Color= Bull;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
else
Color= Bear;
drawline(D, out[D] - AD*1.272, D + (D-A), out[D] - AD*1.272, Color);
drawline(D, out[D] - XA, D + (A-X), out[D]-XA, Color);
end
core.drawLine(Up["Bat"], core.range(X, D), out[X], X, out[D], D, Color);
Up["Bat"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[A], out[B]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["Bat"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["Bat"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["Bat"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["Bat"], core.range(C, D), out[C], C, out[D], D, Color);
end
elseif label == "Bull Gartley" or label == "Bear Gartley" then
if Selector["Gartley"] then
if out[X] < out[A] then
Color= Bull;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
else
Color= Bear;
drawline(D, out[D] - AD*1.272, D + (D-A), out[D] - AD*1.272, Color);
drawline(D, out[D] - XA, D + (A-X), out[D] - XA, Color);
end
core.drawLine(Up["Gartley"], core.range(X, D), out[X], X, out[D], D, Color);
Up["Gartley"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[A], out[B]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["Gartley"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["Gartley"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["Gartley"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["Gartley"], core.range(C, D), out[C], C, out[D], D, Color);
end
elseif label == "Bull Crab" or label == "Bear Crab" then
if Selector["Crab"] then
if out[X] < out[A] then
Color= Bull;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
else
Color= Bear;
drawline(D, out[D] - AD*1.272, D + (D-A), out[D] - AD*1.272, Color);
drawline(D, out[D] - XA, D + (A-X), out[D]- XA, Color);
end
core.drawLine(Up["Crab"], core.range(X, D), out[X], X, out[D], D, Color);
Up["Crab"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[A], out[B]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["Crab"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["Crab"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["Crab"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["Crab"], core.range(C, D), out[C], C, out[D], D, Color);
end
elseif label == "Bull Butterfly" or label == "Bear Butterfly" then
if Selector["Butterfly"] then
if out[X] < out[A] then
Color= Bull;
drawline(D, out[D] + AD*1.272, D + (D-A), out[D] + AD*1.272, Color);
drawline(D, out[D] + XA, D + (A-X), out[D] + XA, Color);
else
Color= Bear;
drawline(D, out[D] - AD*1.272, D + (D-A), out[D] - AD*1.272, Color);
drawline(D, out[D] - XA, D + (A-X), out[D] - XA, Color);
end
core.drawLine(Up["Butterfly"], core.range(X, D), out[X], X, out[D], D, Color);
Up["Butterfly"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[A], out[B]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["Butterfly"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["Butterfly"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["Butterfly"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["Butterfly"], core.range(C, D), out[C], C, out[D], D, Color);
end
elseif label ~= "Bull AB=CD" or label ~= "Bear AB=CD" then
if Selector["AB=CD"] then
if out[A] > out[B] then
Color= Bull;
drawline(D, out[D] + AB*1.272, D + (B-A), out[D] + AB*1.272, Color);
drawline(D, out[D] + AD, D + (D-A), out[D] + AD, Color);
else
Color= Bear;
drawline(D, out[D] - AB*1.272, D + (B-A), out[D] - AB*1.272, Color);
drawline(D, out[D] - AD, D + (D-A), out[D] - AD, Color);
end
core.drawLine(One["AB=CD"], core.range(A, C), out[A], A, out[C], C, Color);
core.drawLine(Two["AB=CD"], core.range(B, D), out[B], B, out[D], D, Color);
One["AB=CD"]:setColor(X, Color);
core.host:execute("drawLabel", label_id, source:date(X), math.max(out[X], out[A]), ""..label.."");
label_id = label_id + 1;
core.drawLine(Down["AB=CD"], core.range(X, A), out[X], X, out[A], A, Color);
core.drawLine(Down["AB=CD"], core.range(A, B), out[A], A, out[B], B, Color);
core.drawLine(Down["AB=CD"], core.range(B, C), out[B], B, out[C], C, Color);
core.drawLine(Down["AB=CD"], core.range(C, D), out[C], C, out[D], D, Color);
end
end
end
function DECODE ( FLAG)
if FLAG then
if (out[X] -(1.27 -Correction/3)*XA) >= out[B] and ( out[X] - (1.618+Correction/3) *XA) <= out[B]
and (out[B] -(1.27-Correction/3) *XA) >= out[D] and ( out[B] - (1.618+Correction/3) *XA) <= out[D]
then
return "Bull Three Drives";
end
if (out[A] -(0.618-Correction/3) *AB) >= out[C] and ( out[A] - (0.786+Correction/3) *AB) <= out[C]
and (out[A] -(1.27-Correction/3) *AB) >= out[D] and ( out[A] - (1.618+Correction/3) *AB) <= out[D]
then
return "Bull AB=CD";
end
if (out[A] -(0.382-Correction) *XA) >= out[B] and ( out[A] - (0.5+Correction) *XA) <= out[B]
and (out[A] -( 0.382-Correction) *AB) >= out[C] and (out[A] -(0.886+Correction) *AB) <= out[C]
and (out[A] + (1.618-Correction) *AB) >= out[D] and (out[A] + (2.618 +Correction)*AB) <= out[D]
and (out[A] - (0.886 -Correction)*XA ) >= out[D] and (out[A] - (0.886 +Correction) *XA ) >= out[D]
then
return "Bull Bat";
end
if (out[A] -(0.618 -Correction) *XA) >= out[B] and (out[A] -(0.618 +Correction) *XA)<= out[B]
and (out[A] - (0.382-Correction) *AB) >= out[C] and (out[A] -(0.886+Correction) *AB) <= out[C]
and (out[A] + (1.27-Correction) *AB) >= out[D] and (out[A] + (1.618+Correction) *AB) <= out[D]
and (out[A] - (0.786 -Correction)*XA ) >= out[D] and (out[A] - (0.786 +Correction)*XA ) <= out[D]
then
return "Bull Gartley";
end
if (out[A] - (0.382-Correction) *XA) >= out[B] and (out[A] - (0.618+Correction) *XA) <= out[B]
and (out[A] - (0.382-Correction) *AB) >= out[C] and (out[A] - (0.886+Correction) *AB)<= out[C]
and (out[A] - (2.24 -Correction)*AB) >= out[D] and (out[A] - (3.618+Correction) *AB) <= out[D]
and (out[A] - ( 1.618 -Correction) *XA ) >= out[D] and (out[A] - (1.618 +Correction) *XA ) <= out[D]
then
return "Bull Crab";
end
if (out[A] - (0.786 -Correction) *XA) >= out[B] and (out[A] - (0.786 +Correction) *XA)<= out[B]
and (out[A] - (0.382-Correction) *AB) >= out[C] and (out[A] - (0.886 +Correction)*AB)<= out[C]
and (out[A] - (1.618-Correction) *AB) >= out[D] and (out[A] - (2.618+Correction) *AB) <= out[D]
and (out[A] - (1.27 -Correction)*XA ) >= out[D] and (out[A] - (1.618+Correction) *XA ) <= out[D]
then
return "Bull Butterfly";
end
elseif not FLAG then
if (out[X] +(1.27 - Correction/3)*XA) <= out[B] and ( out[X] + (1.618+Correction/3) *XA) >= out[B]
and (out[B] +(1.27 - Correction/3)*XA) <= out[D] and ( out[B] + (1.618+Correction/3) *XA) >= out[D]
then
return "Bear Three Drives";
end
if (out[A] +(0.618 - Correction/3)*AB) <= out[C] and ( out[A] +( 0.786+Correction/3) *AB) >= out[C]
and (out[A] +(1.27 - Correction/3)*AB) <= out[D] and ( out[A] + (1.618+Correction/3) *AB) >= out[D]
then
return "Bear AB=CD";
end
if (out[A] +(0.382 - Correction)*XA) <= out[B] and ( out[A] + (0.5+Correction) *XA) >= out[B]
and (out[A] + (0.382- Correction) *AB) <= out[C] and (out[A] +(0.886 +Correction)*AB) >= out[C]
and (out[A] - (1.618 - Correction)*AB) <= out[D] and (out[A] - (2.618 +Correction)*AB) >= out[D]
and (out[A] + (0.886 - Correction)*XA ) <= out[D] and (out[A] + (0.886 +Correction) *XA ) >= out[D]
then
return "Bear Bat";
end
if (out[A] +(0.618 - Correction) *XA) <= out[B] and (out[A] +(0.618 + Correction) *XA)>= out[B]
and (out[A] +(0.382 - Correction)*AB) <= out[C] and (out[A] +(0.886+Correction) *AB) >= out[C]
and (out[A] - (1.27 - Correction)*AB) <= out[D] and (out[A] - (1.618+Correction) *AB) >= out[D]
and (out[A] + (0.786 - Correction)*XA ) <= out[D] and (out[A] +( 0.786+ Correction) *XA ) >= out[D]
then
return "Bear Gartley";
end
-- return "Bear Crab";
if (out[A] +( 0.382- Correction) *XA) <= out[B] and (out[A] +( 0.618+Correction) *XA) >= out[B]
and (out[A] + (0.382- Correction) *AB) <= out[C] and (out[A] + (0.886+Correction) *AB)>= out[C]
and (out[A] + (2.24 - Correction)*AB) <= out[D] and (out[A] + (3.618+Correction) *AB) >= out[D]
and (out[A] + (1.618- Correction) *XA ) <= out[D] and (out[A] + (1.618+ Correction) *XA ) >= out[D]
then
return "Bear Crab";
end
if (out[A] + (0.786- Correction) *XA) <= out[B] and (out[A] + (0.786+ Correction) *XA) >= out[B]
and (out[A] + (0.382- Correction) *AB) <= out[C] and (out[A] + (0.886 +Correction)*AB)>= out[C]
and (out[A] + (1.618- Correction) *AB) <= out[D] and (out[A] + (2.618 +Correction)*AB) >= out[D]
and (out[A] +( 1.27- Correction) *XA ) <= out[D] and (out[A] + (1.618 +Correction)*XA ) >= out[D]
then
return "Bear Butterfly";
end
end
return nil;
end
function drawline(x1, y1, x2, y2, color)
if x1== nil or x2==nil
or x1== 0 or x2==0
or x1 >= source:size()-1 or x2 >= source:size()-1
or x1 <= source:first() or x2 <= source:first()
then
return;
end
if not Show then
return;
end
local date1 = source:date(x1);
local date2 = source:date(x2);
core.host:execute("drawLine", line_id, date1, y1, date2, y2, color, instance.parameters.style, instance.parameters.width);
line_id=line_id+1;
end
function Distance (x1,y1,x2,y2)
return math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
end
personne pour me donner un coup de main …
personne pour me donner un coup de main …
C’est ici
// ==========================================================
// PRC_FXC Harmonic Pattern (Indicador)
// Traducción del original Lua/Indicore de Mario Jemic (FXCodeBase 2018)
// ZigZag MT-style + detector XABCD + clasificador 6 patrones armónicos
// version = 0
// 06.05.2026
// Iván González @ www.prorealcode.com
// Sharing ProRealTime knowledge
// ==========================================================
DEFPARAM DRAWONLASTBARONLY = TRUE
depth = 12
deviation = 5
backstep = 3
correction = 25
showBat = 1
showGartley = 1
showCrab = 1
showButterfly = 1
showABCD = 1
showThreeDrives = 1
showZigzag = 1
showTargets = 0
ONCE n = 0
ONCE p = 0
prd = depth
corrFrac = correction / 100
// === 1. ZigZag pivot detection ===
IF barindex >= 2*prd+1 THEN
pivBar = barindex - prd
isPivH = high[prd] >= highest[2*prd+1](high)
isPivL = low[prd] <= lowest[2*prd+1](low)
IF isPivH THEN
candPrc = high[prd]
lastIdxH = 0
lastPrcH = 0
lastTypH = 0
IF n > 0 THEN
lastIdxH = $pivIdx[n-1]
lastPrcH = $pivPrc[n-1]
lastTypH = $pivTyp[n-1]
ENDIF
okH = 1
IF n > 0 THEN
IF (pivBar - lastIdxH) < backstep THEN
okH = 0
ENDIF
ENDIF
IF okH = 1 THEN
IF n > 0 THEN
IF lastTypH = -1 THEN
devPctH = abs(candPrc - lastPrcH) / lastPrcH * 100
IF devPctH < deviation THEN
okH = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF okH = 1 THEN
IF n = 0 THEN
$pivIdx[0] = pivBar
$pivPrc[0] = candPrc
$pivTyp[0] = 1
n = 1
ELSE
IF lastTypH = 1 THEN
IF candPrc > lastPrcH THEN
$pivIdx[n-1] = pivBar
$pivPrc[n-1] = candPrc
ENDIF
ELSE
$pivIdx[n] = pivBar
$pivPrc[n] = candPrc
$pivTyp[n] = 1
n = n + 1
ENDIF
ENDIF
ENDIF
ENDIF
IF isPivL THEN
candPrc = low[prd]
lastIdxL = 0
lastPrcL = 0
lastTypL = 0
IF n > 0 THEN
lastIdxL = $pivIdx[n-1]
lastPrcL = $pivPrc[n-1]
lastTypL = $pivTyp[n-1]
ENDIF
okL = 1
IF n > 0 THEN
IF (pivBar - lastIdxL) < backstep THEN
okL = 0
ENDIF
ENDIF
IF okL = 1 THEN
IF n > 0 THEN
IF lastTypL = 1 THEN
devPctL = abs(candPrc - lastPrcL) / lastPrcL * 100
IF devPctL < deviation THEN
okL = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF okL = 1 THEN
IF n = 0 THEN
$pivIdx[0] = pivBar
$pivPrc[0] = candPrc
$pivTyp[0] = -1
n = 1
ELSE
IF lastTypL = -1 THEN
IF candPrc < lastPrcL THEN
$pivIdx[n-1] = pivBar
$pivPrc[n-1] = candPrc
ENDIF
ELSE
$pivIdx[n] = pivBar
$pivPrc[n] = candPrc
$pivTyp[n] = -1
n = n + 1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// === 2. XABCD pattern evaluation ===
evalPattern = 0
IF n >= 5 THEN
IF n <> n[1] THEN
evalPattern = 1
ENDIF
ENDIF
IF evalPattern = 1 THEN
xIdx = $pivIdx[n-5]
aIdx = $pivIdx[n-4]
bIdx = $pivIdx[n-3]
cIdx = $pivIdx[n-2]
dIdx = $pivIdx[n-1]
xPrc = $pivPrc[n-5]
aPrc = $pivPrc[n-4]
bPrc = $pivPrc[n-3]
cPrc = $pivPrc[n-2]
dPrc = $pivPrc[n-1]
dTyp = $pivTyp[n-1]
isBull = 0
IF dTyp = -1 THEN
isBull = 1
ENDIF
xa = abs(xPrc - aPrc)
ab = abs(aPrc - bPrc)
bc = abs(bPrc - cPrc)
cd = abs(cPrc - dPrc)
ad = abs(aPrc - dPrc)
ratiosOk = 0
IF xa > 0 THEN
IF ab > 0 THEN
IF bc > 0 THEN
ratiosOk = 1
ENDIF
ENDIF
ENDIF
patternFound = 0
patternId = 0
IF ratiosOk = 1 THEN
rAB = ab / xa
rBC = bc / ab
rCD = cd / bc
rAD = ad / xa
// BAT
abOk = 0
IF rAB >= 0.382 - corrFrac THEN
IF rAB <= 0.500 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.618 - corrFrac THEN
IF rCD <= 2.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 0.886 - corrFrac THEN
IF rAD <= 0.886 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showBat = 1 THEN
patternFound = 1
patternId = 1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// GARTLEY
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.618 - corrFrac THEN
IF rAB <= 0.618 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.272 - corrFrac THEN
IF rCD <= 1.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 0.786 - corrFrac THEN
IF rAD <= 0.786 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showGartley = 1 THEN
patternFound = 1
patternId = 2
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// CRAB
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.382 - corrFrac THEN
IF rAB <= 0.618 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 2.618 - corrFrac THEN
IF rCD <= 3.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 1.618 - corrFrac THEN
IF rAD <= 1.618 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showCrab = 1 THEN
patternFound = 1
patternId = 3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// BUTTERFLY
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.786 - corrFrac THEN
IF rAB <= 0.786 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.618 - corrFrac THEN
IF rCD <= 2.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 1.272 - corrFrac THEN
IF rAD <= 1.272 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showButterfly = 1 THEN
patternFound = 1
patternId = 4
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// AB=CD
IF patternFound = 0 THEN
rAcd = 1
IF ab > 0 THEN
rAcd = cd / ab
ENDIF
abcdOk = 0
IF rAcd >= 1 - corrFrac THEN
IF rAcd <= 1 + corrFrac THEN
abcdOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.618 - corrFrac THEN
IF rBC <= 0.786 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
IF abcdOk = 1 THEN
IF bcOk = 1 THEN
IF showABCD = 1 THEN
patternFound = 1
patternId = 5
ENDIF
ENDIF
ENDIF
ENDIF
// THREE DRIVES
IF patternFound = 0 THEN
xb = abs(xPrc - bPrc)
xd = abs(xPrc - dPrc)
ir1 = 0
ir2 = 0
IF xa > 0 THEN
ir1 = xb / xa
ENDIF
IF xb > 0 THEN
ir2 = xd / xb
ENDIF
ir1Ok = 0
IF ir1 >= 1.272 - corrFrac THEN
IF ir1 <= 1.618 + corrFrac THEN
ir1Ok = 1
ENDIF
ENDIF
ir2Ok = 0
IF ir2 >= 1.272 - corrFrac THEN
IF ir2 <= 1.618 + corrFrac THEN
ir2Ok = 1
ENDIF
ENDIF
IF ir1Ok = 1 THEN
IF ir2Ok = 1 THEN
IF showThreeDrives = 1 THEN
patternFound = 1
patternId = 6
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF patternFound = 1 THEN
$patId[p] = patternId
$patBull[p] = isBull
$patXIdx[p] = xIdx
$patAIdx[p] = aIdx
$patBIdx[p] = bIdx
$patCIdx[p] = cIdx
$patDIdx[p] = dIdx
$patXPrc[p] = xPrc
$patAPrc[p] = aPrc
$patBPrc[p] = bPrc
$patCPrc[p] = cPrc
$patDPrc[p] = dPrc
p = p + 1
ENDIF
ENDIF
// === 3. Drawing (last bar update only) ===
IF islastbarupdate THEN
IF showZigzag = 1 THEN
IF n >= 2 THEN
FOR k = 1 TO n - 1 DO
bx0 = $pivIdx[k-1]
py0 = $pivPrc[k-1]
bx1 = $pivIdx[k]
py1 = $pivPrc[k]
DRAWSEGMENT(bx0, py0, bx1, py1) COLOURED(120, 120, 120) STYLE(line, 1)
NEXT
ENDIF
ENDIF
IF p >= 1 THEN
FOR k = 0 TO p - 1 DO
pid = $patId[k]
pBull = $patBull[k]
xb0 = $patXIdx[k]
ab0 = $patAIdx[k]
bb0 = $patBIdx[k]
cb0 = $patCIdx[k]
db0 = $patDIdx[k]
xy0 = $patXPrc[k]
ay0 = $patAPrc[k]
by0 = $patBPrc[k]
cy0 = $patCPrc[k]
dy0 = $patDPrc[k]
IF pBull = 1 THEN
rC = 0
gC = 180
bC = 0
ELSE
rC = 200
gC = 0
bC = 0
ENDIF
DRAWSEGMENT(xb0, xy0, ab0, ay0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(ab0, ay0, bb0, by0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(bb0, by0, cb0, cy0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(cb0, cy0, db0, dy0) COLOURED(rC, gC, bC) STYLE(line, 2)
offY = abs(ay0 - by0) * 0.05
IF pBull = 1 THEN
posY = xy0 - offY
ELSE
posY = xy0 + offY
ENDIF
IF pid = 1 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Bat", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Bat", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 2 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Gartley", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Gartley", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 3 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Crab", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Crab", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 4 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Butterfly", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Butterfly", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 5 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull AB=CD", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear AB=CD", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 6 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull 3 Drives", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear 3 Drives", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF showTargets = 1 THEN
adAbs = abs(ay0 - dy0)
xaAbs = abs(xy0 - ay0)
IF pBull = 1 THEN
tgt1 = dy0 + xaAbs * 0.886
tgt2 = dy0 + adAbs * 1.272
ELSE
tgt1 = dy0 - xaAbs * 0.886
tgt2 = dy0 - adAbs * 1.272
ENDIF
DRAWSEGMENT(db0, tgt1, db0 + (db0 - ab0), tgt1) COLOURED(0, 0, 200) STYLE(dottedline, 1)
DRAWSEGMENT(db0, tgt2, db0 + (db0 - ab0), tgt2) COLOURED(0, 0, 200) STYLE(dottedline, 1)
ENDIF
NEXT
ENDIF
ENDIF
RETURN
merci pour le développement de programme
mais en voulais inclure dans un indicateur en version v13 , il me trouve des erreurs ligne 55 et 65 et 97
exemple ligne 55
isPivL = low[prd] 0 THEN
il manque un signe ?
cordialement
supprimé
bonjour
“supprimé”
je fait quoi avec cela ?
Essayez maintenant. Je ne sais pas pourquoi certains symboles > < ont disparu du code lorsque je l’ai copié-collé.
Le code ci-dessus a également été corrigé.
// ==========================================================
// PRC_FXC Harmonic Pattern (Indicador)
// Traducción del original Lua/Indicore de Mario Jemic (FXCodeBase 2018)
// ZigZag MT-style + detector XABCD + clasificador 6 patrones armónicos
// version = 0
// 06.05.2026
// Iván González @ www.prorealcode.com
// Sharing ProRealTime knowledge
// ==========================================================
DEFPARAM DRAWONLASTBARONLY = TRUE
depth = 12
deviation = 5
backstep = 3
correction = 25
showBat = 1
showGartley = 1
showCrab = 1
showButterfly = 1
showABCD = 1
showThreeDrives = 1
showZigzag = 1
showTargets = 0
ONCE n = 0
ONCE p = 0
prd = depth
corrFrac = correction / 100
// === 1. ZigZag pivot detection ===
IF barindex >= 2*prd+1 THEN
pivBar = barindex - prd
isPivH = high[prd] >= highest[2*prd+1](high)
isPivL = low[prd] <= lowest[2*prd+1](low)
IF isPivH THEN
candPrc = high[prd]
lastIdxH = 0
lastPrcH = 0
lastTypH = 0
IF n > 0 THEN
lastIdxH = $pivIdx[n-1]
lastPrcH = $pivPrc[n-1]
lastTypH = $pivTyp[n-1]
ENDIF
okH = 1
IF n > 0 THEN
IF (pivBar - lastIdxH) < backstep THEN
okH = 0
ENDIF
ENDIF
IF okH = 1 THEN
IF n > 0 THEN
IF lastTypH = -1 THEN
devPctH = abs(candPrc - lastPrcH) / lastPrcH * 100
IF devPctH < deviation THEN
okH = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF okH = 1 THEN
IF n = 0 THEN
$pivIdx[0] = pivBar
$pivPrc[0] = candPrc
$pivTyp[0] = 1
n = 1
ELSE
IF lastTypH = 1 THEN
IF candPrc > lastPrcH THEN
$pivIdx[n-1] = pivBar
$pivPrc[n-1] = candPrc
ENDIF
ELSE
$pivIdx[n] = pivBar
$pivPrc[n] = candPrc
$pivTyp[n] = 1
n = n + 1
ENDIF
ENDIF
ENDIF
ENDIF
IF isPivL THEN
candPrc = low[prd]
lastIdxL = 0
lastPrcL = 0
lastTypL = 0
IF n > 0 THEN
lastIdxL = $pivIdx[n-1]
lastPrcL = $pivPrc[n-1]
lastTypL = $pivTyp[n-1]
ENDIF
okL = 1
IF n > 0 THEN
IF (pivBar - lastIdxL) < backstep THEN
okL = 0
ENDIF
ENDIF
IF okL = 1 THEN
IF n > 0 THEN
IF lastTypL = 1 THEN
devPctL = abs(candPrc - lastPrcL) / lastPrcL * 100
IF devPctL < deviation THEN
okL = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF okL = 1 THEN
IF n = 0 THEN
$pivIdx[0] = pivBar
$pivPrc[0] = candPrc
$pivTyp[0] = -1
n = 1
ELSE
IF lastTypL = -1 THEN
IF candPrc < lastPrcL THEN
$pivIdx[n-1] = pivBar
$pivPrc[n-1] = candPrc
ENDIF
ELSE
$pivIdx[n] = pivBar
$pivPrc[n] = candPrc
$pivTyp[n] = -1
n = n + 1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// === 2. XABCD pattern evaluation ===
evalPattern = 0
IF n >= 5 THEN
IF n <> n[1] THEN
evalPattern = 1
ENDIF
ENDIF
IF evalPattern = 1 THEN
xIdx = $pivIdx[n-5]
aIdx = $pivIdx[n-4]
bIdx = $pivIdx[n-3]
cIdx = $pivIdx[n-2]
dIdx = $pivIdx[n-1]
xPrc = $pivPrc[n-5]
aPrc = $pivPrc[n-4]
bPrc = $pivPrc[n-3]
cPrc = $pivPrc[n-2]
dPrc = $pivPrc[n-1]
dTyp = $pivTyp[n-1]
isBull = 0
IF dTyp = -1 THEN
isBull = 1
ENDIF
xa = abs(xPrc - aPrc)
ab = abs(aPrc - bPrc)
bc = abs(bPrc - cPrc)
cd = abs(cPrc - dPrc)
ad = abs(aPrc - dPrc)
ratiosOk = 0
IF xa > 0 THEN
IF ab > 0 THEN
IF bc > 0 THEN
ratiosOk = 1
ENDIF
ENDIF
ENDIF
patternFound = 0
patternId = 0
IF ratiosOk = 1 THEN
rAB = ab / xa
rBC = bc / ab
rCD = cd / bc
rAD = ad / xa
// BAT
abOk = 0
IF rAB >= 0.382 - corrFrac THEN
IF rAB <= 0.500 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.618 - corrFrac THEN
IF rCD <= 2.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 0.886 - corrFrac THEN
IF rAD <= 0.886 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showBat = 1 THEN
patternFound = 1
patternId = 1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// GARTLEY
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.618 - corrFrac THEN
IF rAB <= 0.618 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.272 - corrFrac THEN
IF rCD <= 1.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 0.786 - corrFrac THEN
IF rAD <= 0.786 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showGartley = 1 THEN
patternFound = 1
patternId = 2
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// CRAB
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.382 - corrFrac THEN
IF rAB <= 0.618 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 2.618 - corrFrac THEN
IF rCD <= 3.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 1.618 - corrFrac THEN
IF rAD <= 1.618 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showCrab = 1 THEN
patternFound = 1
patternId = 3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// BUTTERFLY
IF patternFound = 0 THEN
abOk = 0
IF rAB >= 0.786 - corrFrac THEN
IF rAB <= 0.786 + corrFrac THEN
abOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.382 - corrFrac THEN
IF rBC <= 0.886 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
cdOk = 0
IF rCD >= 1.618 - corrFrac THEN
IF rCD <= 2.618 + corrFrac THEN
cdOk = 1
ENDIF
ENDIF
adOk = 0
IF rAD >= 1.272 - corrFrac THEN
IF rAD <= 1.272 + corrFrac THEN
adOk = 1
ENDIF
ENDIF
IF abOk = 1 THEN
IF bcOk = 1 THEN
IF cdOk = 1 THEN
IF adOk = 1 THEN
IF showButterfly = 1 THEN
patternFound = 1
patternId = 4
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// AB=CD
IF patternFound = 0 THEN
rAcd = 1
IF ab > 0 THEN
rAcd = cd / ab
ENDIF
abcdOk = 0
IF rAcd >= 1 - corrFrac THEN
IF rAcd <= 1 + corrFrac THEN
abcdOk = 1
ENDIF
ENDIF
bcOk = 0
IF rBC >= 0.618 - corrFrac THEN
IF rBC <= 0.786 + corrFrac THEN
bcOk = 1
ENDIF
ENDIF
IF abcdOk = 1 THEN
IF bcOk = 1 THEN
IF showABCD = 1 THEN
patternFound = 1
patternId = 5
ENDIF
ENDIF
ENDIF
ENDIF
// THREE DRIVES
IF patternFound = 0 THEN
xb = abs(xPrc - bPrc)
xd = abs(xPrc - dPrc)
ir1 = 0
ir2 = 0
IF xa > 0 THEN
ir1 = xb / xa
ENDIF
IF xb > 0 THEN
ir2 = xd / xb
ENDIF
ir1Ok = 0
IF ir1 >= 1.272 - corrFrac THEN
IF ir1 <= 1.618 + corrFrac THEN
ir1Ok = 1
ENDIF
ENDIF
ir2Ok = 0
IF ir2 >= 1.272 - corrFrac THEN
IF ir2 <= 1.618 + corrFrac THEN
ir2Ok = 1
ENDIF
ENDIF
IF ir1Ok = 1 THEN
IF ir2Ok = 1 THEN
IF showThreeDrives = 1 THEN
patternFound = 1
patternId = 6
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF patternFound = 1 THEN
$patId[p] = patternId
$patBull[p] = isBull
$patXIdx[p] = xIdx
$patAIdx[p] = aIdx
$patBIdx[p] = bIdx
$patCIdx[p] = cIdx
$patDIdx[p] = dIdx
$patXPrc[p] = xPrc
$patAPrc[p] = aPrc
$patBPrc[p] = bPrc
$patCPrc[p] = cPrc
$patDPrc[p] = dPrc
p = p + 1
ENDIF
ENDIF
// === 3. Drawing (last bar update only) ===
IF islastbarupdate THEN
IF showZigzag = 1 THEN
IF n >= 2 THEN
FOR k = 1 TO n - 1 DO
bx0 = $pivIdx[k-1]
py0 = $pivPrc[k-1]
bx1 = $pivIdx[k]
py1 = $pivPrc[k]
DRAWSEGMENT(bx0, py0, bx1, py1) COLOURED(120, 120, 120) STYLE(line, 1)
NEXT
ENDIF
ENDIF
IF p >= 1 THEN
FOR k = 0 TO p - 1 DO
pid = $patId[k]
pBull = $patBull[k]
xb0 = $patXIdx[k]
ab0 = $patAIdx[k]
bb0 = $patBIdx[k]
cb0 = $patCIdx[k]
db0 = $patDIdx[k]
xy0 = $patXPrc[k]
ay0 = $patAPrc[k]
by0 = $patBPrc[k]
cy0 = $patCPrc[k]
dy0 = $patDPrc[k]
IF pBull = 1 THEN
rC = 0
gC = 180
bC = 0
ELSE
rC = 200
gC = 0
bC = 0
ENDIF
DRAWSEGMENT(xb0, xy0, ab0, ay0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(ab0, ay0, bb0, by0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(bb0, by0, cb0, cy0) COLOURED(rC, gC, bC) STYLE(line, 2)
DRAWSEGMENT(cb0, cy0, db0, dy0) COLOURED(rC, gC, bC) STYLE(line, 2)
offY = abs(ay0 - by0) * 0.05
IF pBull = 1 THEN
posY = xy0 - offY
ELSE
posY = xy0 + offY
ENDIF
IF pid = 1 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Bat", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Bat", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 2 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Gartley", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Gartley", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 3 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Crab", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Crab", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 4 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull Butterfly", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear Butterfly", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 5 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull AB=CD", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear AB=CD", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF pid = 6 THEN
IF pBull = 1 THEN
DRAWTEXT("Bull 3 Drives", xb0, posY) COLOURED(rC, gC, bC)
ELSE
DRAWTEXT("Bear 3 Drives", xb0, posY) COLOURED(rC, gC, bC)
ENDIF
ENDIF
IF showTargets = 1 THEN
adAbs = abs(ay0 - dy0)
xaAbs = abs(xy0 - ay0)
IF pBull = 1 THEN
tgt1 = dy0 + xaAbs * 0.886
tgt2 = dy0 + adAbs * 1.272
ELSE
tgt1 = dy0 - xaAbs * 0.886
tgt2 = dy0 - adAbs * 1.272
ENDIF
DRAWSEGMENT(db0, tgt1, db0 + (db0 - ab0), tgt1) COLOURED(0, 0, 200) STYLE(dottedline, 1)
DRAWSEGMENT(db0, tgt2, db0 + (db0 - ab0), tgt2) COLOURED(0, 0, 200) STYLE(dottedline, 1)
ENDIF
NEXT
ENDIF
ENDIF
RETURN
Conversion code Harmonic Trading.lua pour PRT
This topic contains 10 replies,
has 4 voices, and was last updated by
Iván González
1 week, 3 days ago.
| Forum: | ProBuilder : Indicateurs & Outils Personnalisés |
| Language: | French |
| Started: | 04/06/2020 |
| Status: | Active |
| Attachments: | 3 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.