Moderator: admin
richardtao wrote:i would like to shared my indicator, but it seems i had no authority to post.
how can i post a new indicator?
thx.
Nikolay.Gekht wrote:richardtao wrote:i would like to shared my indicator, but it seems i had no authority to post.
how can i post a new indicator?
thx.
I updated your profile, so now you can. Please try.
function Init()
indicator:name("Candle Pattern 4");
indicator:description("");
indicator:requiredSource(core.Bar);
indicator:type(core.Oscillator);
indicator.parameters:addInteger("EQ", "Maximum of pips distance between equal prices", "", 1, 0, 100);
indicator.parameters:addBoolean("PAT_DOUBLE_INSIDE", "Enable Double Inside", "", true);
indicator.parameters:addBoolean("PAT_INSIDE", "Enable Inside", "", true);
indicator.parameters:addBoolean("PAT_OUTSIDE", "Enable Outside", "", true);
indicator.parameters:addBoolean("PAT_PINUP", "Enable Pin Up", "", true);
indicator.parameters:addBoolean("PAT_PINDOWN", "Enable Pin Down", "", true);
indicator.parameters:addBoolean("PAT_PPRUP", "Enable Pivot Point Reversal Up", "", true);
indicator.parameters:addBoolean("PAT_PPRDN", "Enable Pivot Point Reversal Down", "", true);
indicator.parameters:addBoolean("PAT_DBLHC", "Enable Double Bar Low With A Higher Close", "", true);
indicator.parameters:addBoolean("PAT_DBHLC", "Enable Double Bar High With A Lower Close", "", true);
indicator.parameters:addBoolean("PAT_CPRU", "Enable Close Price Reversal Up", "", true);
indicator.parameters:addBoolean("PAT_CPRD", "Enable Close Price Reversal Down", "", true);
indicator.parameters:addBoolean("PAT_NB", "Enable Neutral Bar", "", true);
indicator.parameters:addBoolean("PAT_NB2", "Enable 2 Neutral Bars", "", true);
indicator.parameters:addBoolean("PAT_FBU", "Enable Force Bar Up", "", true);
indicator.parameters:addBoolean("PAT_FBD", "Enable Force Bar Down", "", true);
indicator.parameters:addBoolean("PAT_MB", "Enable Mirror Bar", "", true);
indicator.parameters:addBoolean("PAT_HAMMER", "Enable Hammer", "", true);
indicator.parameters:addBoolean("PAT_SHOOTSTAR", "Enable Shooting Star", "", true);
indicator.parameters:addBoolean("PAT_EVSTAR", "Enable Evening Star", "", true);
indicator.parameters:addBoolean("PAT_MORNSTAR", "Enable Morning Star", "", true);
indicator.parameters:addBoolean("PAT_EVDJSTAR", "Enable Evening Doji Star", "", true);
indicator.parameters:addBoolean("PAT_MORNDJSTAR", "Enable Morning Doji Star", "", true);
indicator.parameters:addBoolean("PAT_BEARHARAMI", "Enable Bearish Harami", "", true);
indicator.parameters:addBoolean("PAT_BEARHARAMICROSS", "Enable Bearish Harami Cross", "", true);
indicator.parameters:addBoolean("PAT_BULLHARAMI", "Enable Bullish Harami", "", true);
indicator.parameters:addBoolean("PAT_BULLHARAMICROSS", "Enable Bullish Harami Cross", "", true);
indicator.parameters:addBoolean("PAT_DARKCLOUD", "Enable Dark Cloud Cover", "", true);
indicator.parameters:addBoolean("PAT_DOJISTAR", "Enable Doji Star", "", true);
indicator.parameters:addBoolean("PAT_ENGBEARLINE", "Enable Engulfing Bearish Line", "", true);
indicator.parameters:addBoolean("PAT_ENGBULLLINE", "Enable Engulfing Bullish Line", "", true);
indicator.parameters:addGroup("Style");
indicator.parameters:addColor("Color1", "Color 1 for map", "", core.rgb(0, 255, 0));
indicator.parameters:addColor("Color2", "Color 2 for map", "", core.rgb(255, 0, 0));
indicator.parameters:addColor("Color3", "Color 3 for map", "", core.rgb(0, 0, 255));
indicator.parameters:addColor("LblColor", "Color for pattern labels", "", core.COLOR_LABEL);
end
local source;
local P;
local EQ;
local PatternsArray={};
local Outs={};
local L = {};
local AllPatterns;
local i,Count;
local dummy;
local host;
function Prepare()
EQ = instance.parameters.EQ * instance.source:pipSize();
source = instance.source;
host = core.host;
InitPattern(source);
PatternsArray[1]="PAT_DOUBLE_INSIDE";
PatternsArray[2]="PAT_INSIDE";
PatternsArray[3]="PAT_OUTSIDE";
PatternsArray[4]="PAT_PINUP";
PatternsArray[5]="PAT_PINDOWN";
PatternsArray[6]="PAT_PPRUP";
PatternsArray[7]="PAT_PPRDN";
PatternsArray[8]="PAT_DBLHC";
PatternsArray[9]="PAT_DBHLC";
PatternsArray[10]="PAT_CPRU";
PatternsArray[11]="PAT_CPRD";
PatternsArray[12]="PAT_NB";
PatternsArray[13]="PAT_NB2";
PatternsArray[14]="PAT_FBU";
PatternsArray[15]="PAT_FBD";
PatternsArray[16]="PAT_MB";
PatternsArray[17]="PAT_HAMMER";
PatternsArray[18]="PAT_SHOOTSTAR";
PatternsArray[19]="PAT_EVSTAR";
PatternsArray[20]="PAT_MORNSTAR";
PatternsArray[21]="PAT_EVDJSTAR";
PatternsArray[22]="PAT_MORNDJSTAR";
PatternsArray[23]="PAT_BEARHARAMI";
PatternsArray[24]="PAT_BEARHARAMICROSS";
PatternsArray[25]="PAT_BULLHARAMI";
PatternsArray[26]="PAT_BULLHARAMICROSS";
PatternsArray[27]="PAT_DARKCLOUD";
PatternsArray[28]="PAT_DOJISTAR";
PatternsArray[29]="PAT_ENGBEARLINE";
PatternsArray[30]="PAT_ENGBULLLINE";
AllPatterns=FindNumberPattern("");
Count=0;
for i=1,30,1 do
if instance.parameters:getBoolean(PatternsArray[i])==true then
Count=Count+1;
L[Count]=PatternsArray[i];
if math.fmod(Count,3)==1 then
Outs[Count]=instance:createTextOutput (PatternsArray[i], PatternsArray[i], "Wingdings", 10, core.H_Center, core.V_Bottom, instance.parameters.Color1, 0);
elseif math.fmod(Count,3)==2 then
Outs[Count]=instance:createTextOutput (PatternsArray[i], PatternsArray[i], "Wingdings", 10, core.H_Center, core.V_Bottom, instance.parameters.Color2, 0);
else
Outs[Count]=instance:createTextOutput (PatternsArray[i], PatternsArray[i], "Wingdings", 10, core.H_Center, core.V_Bottom, instance.parameters.Color3, 0);
end
end
end
local name;
name = profile:id();
instance:name(name);
dummy = instance:addStream("D", core.Line, name .. ".D", "D", instance.parameters.LblColor, 20);
dummy:addLevel(0);
dummy:addLevel(20*AllPatterns);
end
function FindNumberPattern(Pat)
local Count=0;
local i;
local Fl=true;
for i=1,30,1 do
local Param=instance.parameters:getBoolean(PatternsArray[i]);
if Fl==true then
if Param==true then
Count=Count+1;
end
end
if PatternsArray[i]==Pat then
Fl=false;
end
end
return Count;
end
local prevSerial = nil;
function Update(period, mode)
if period == 0 then
prevSerial = source:serial(period);
else
if prevSerial ~= source:serial(period) then
prevSerial = source:serial(period);
UpdatePattern(period - 1);
end
end
if period == source:size() - 1 then
for i = 1, AllPatterns, 1 do
host:execute("drawLabel", i, source:date(period), (AllPatterns + 1 - i) * 20, L[i]);
end
end
end
function RegisterPattern(period, pattern)
local short, long, up, length, PatName;
local price;
short, long, up, length, PatName = DecodePattern(pattern);
if length~=nil then
local NumPat=FindNumberPattern(PatName);
Outs[NumPat]:set(period, (AllPatterns + 1 - NumPat) * 20, "\110");
end
end
local O, H, L, C, T, B, BL, US, LS; -- open, high, low, close prices, top and bottom of the candle, body, upper shadow and lower shadow length
function InitPattern(source)
O = source.open;
H = source.high;
L = source.low;
C = source.close;
T = instance:addInternalStream(0, 0);
B = instance:addInternalStream(0, 0);
BL = instance:addInternalStream(0, 0);
US = instance:addInternalStream(0, 0);
LS = instance:addInternalStream(0, 0);
end
local PAT_NONE = 0;
local PAT_DOUBLE_INSIDE = 1;
local PAT_INSIDE = 2;
local PAT_OUTSIDE = 4;
local PAT_PINUP = 5;
local PAT_PINDOWN = 6;
local PAT_PPRUP = 7;
local PAT_PPRDN = 8;
local PAT_DBLHC = 9;
local PAT_DBHLC = 10;
local PAT_CPRU = 11;
local PAT_CPRD = 12;
local PAT_NB = 13;
local PAT_FBU = 14;
local PAT_FBD = 15;
local PAT_MB = 16;
local PAT_HAMMER=17;
local PAT_SHOOTSTAR=18;
local PAT_EVSTAR=19;
local PAT_MORNSTAR=20;
local PAT_BEARHARAMI=21;
local PAT_BEARHARAMICROSS=22;
local PAT_BULLHARAMI=23;
local PAT_BULLHARAMICROSS=24;
local PAT_DARKCLOUD=25;
local PAT_DOJISTAR=26;
local PAT_ENGBEARLINE=27;
local PAT_ENGBULLLINE=28;
local PAT_EVDJSTAR=29;
local PAT_MORNDJSTAR=30;
local PAT_NB2 = 31;
-- short name, name, up/down flag, length of pattern, pattern name
function DecodePattern(pattern)
if pattern == PAT_NONE then
return nil, nil, nil, nil, nil;
elseif pattern == PAT_DOUBLE_INSIDE and instance.parameters:getBoolean("PAT_DOUBLE_INSIDE")==true then
return "DblIn", "Double Inside", true, 3, "PAT_DOUBLE_INSIDE";
elseif pattern == PAT_INSIDE and instance.parameters:getBoolean("PAT_INSIDE")==true then
return "In", "Inside", true, 2, "PAT_INSIDE";
elseif pattern == PAT_OUTSIDE and instance.parameters:getBoolean("PAT_OUTSIDE")==true then
return "Out", "Outside", true, 2, "PAT_OUTSIDE";
elseif pattern == PAT_PINUP and instance.parameters:getBoolean("PAT_PINUP")==true then
return "PnUp", "Pin Up", true, 2, "PAT_PINUP";
elseif pattern == PAT_PINDOWN and instance.parameters:getBoolean("PAT_PINDOWN")==true then
return "PnDn", "Pin Down", false, 2, "PAT_PINDOWN";
elseif pattern == PAT_PPRUP and instance.parameters:getBoolean("PAT_PPRUP")==true then
return "PPRU", "Pivot Point Reversal Up", false, 3, "PAT_PPRUP";
elseif pattern == PAT_PPRDN and instance.parameters:getBoolean("PAT_PPRDN")==true then
return "PPRD", "Pivot Point Reversal Down", true, 3, "PAT_PPRDN";
elseif pattern == PAT_DBLHC and instance.parameters:getBoolean("PAT_DBLHC")==true then
return "DBLHC", "Double Bar Low With A Higher Close", false, 2, "PAT_DBLHC";
elseif pattern == PAT_DBHLC and instance.parameters:getBoolean("PAT_DBHLC")==true then
return "DBHLC", "Double Bar High With A Lower Close", true, 2, "PAT_DBHLC";
elseif pattern == PAT_CPRU and instance.parameters:getBoolean("PAT_CPRU")==true then
return "CPRU", "Close Price Reversal Up", false, 3, "PAT_CPRU";
elseif pattern == PAT_CPRD and instance.parameters:getBoolean("PAT_CPRD")==true then
return "CPRD", "Close Price Reversal Down", true, 3, "PAT_CPRD";
elseif pattern == PAT_NB and instance.parameters:getBoolean("PAT_NB")==true then
return "NB", "Neutral Bar", true, 1, "PAT_NB";
elseif pattern == PAT_FBU and instance.parameters:getBoolean("PAT_FBU")==true then
return "FBU", "Force Bar Up", false, 1, "PAT_FBU";
elseif pattern == PAT_FBD and instance.parameters:getBoolean("PAT_FBD")==true then
return "FBD", "Force Bar Down", true, 1, "PAT_FBD";
elseif pattern == PAT_MB and instance.parameters:getBoolean("PAT_MB")==true then
return "MB", "Mirror Bar", true, 2, "PAT_MB";
elseif pattern == PAT_HAMMER and instance.parameters:getBoolean("PAT_HAMMER")==true then
return "HAMMER", "Hammer Pattern", true, 1, "PAT_HAMMER";
elseif pattern == PAT_SHOOTSTAR and instance.parameters:getBoolean("PAT_SHOOTSTAR")==true then
return "SHOOTSTAR", "Shooting Star", true, 1, "PAT_SHOOTSTAR";
elseif pattern == PAT_EVSTAR and instance.parameters:getBoolean("PAT_EVSTAR")==true then
return "EVSTAR", "Evening Star", true, 3, "PAT_EVSTAR";
elseif pattern == PAT_MORNSTAR and instance.parameters:getBoolean("PAT_MORNSTAR")==true then
return "MORNSTAR", "Morning Star", true, 3, "PAT_MORNSTAR";
elseif pattern == PAT_EVDJSTAR and instance.parameters:getBoolean("PAT_EVDJSTAR")==true then
return "EVDJSTAR", "Evening Doji Star", true, 3, "PAT_EVDJSTAR";
elseif pattern == PAT_MORNDJSTAR and instance.parameters:getBoolean("PAT_MORNDJSTAR")==true then
return "MORNDJSTAR", "Morning Doji Star", true, 3, "PAT_MORNDJSTAR";
elseif pattern == PAT_BEARHARAMI and instance.parameters:getBoolean("PAT_BEARHARAMI")==true then
return "BEARHARAMI", "Bearish Harami", true, 2, "PAT_BEARHARAMI";
elseif pattern == PAT_BEARHARAMICROSS and instance.parameters:getBoolean("PAT_BEARHARAMICROSS")==true then
return "BEARHARAMICROSS", "Bearish Harami Cross", true, 2, "PAT_BEARHARAMICROSS";
elseif pattern == PAT_BULLHARAMI and instance.parameters:getBoolean("PAT_BULLHARAMI")==true then
return "BULLHARAMI", "Bullish Harami", true, 2, "PAT_BULLHARAMI";
elseif pattern == PAT_BULLHARAMICROSS and instance.parameters:getBoolean("PAT_BULLHARAMICROSS")==true then
return "BULLHARAMICROSS", "Bullish Harami Cross", true, 2, "PAT_BULLHARAMICROSS";
elseif pattern == PAT_DARKCLOUD and instance.parameters:getBoolean("PAT_DARKCLOUD")==true then
return "DARKCLOUD", "Dark Cloud Cover", true, 2, "PAT_DARKCLOUD";
elseif pattern == PAT_DOJISTAR and instance.parameters:getBoolean("PAT_DOJISTAR")==true then
return "DOJISTAR", "Doji Star", true, 2, "PAT_DOJISTAR";
elseif pattern == PAT_ENGBEARLINE and instance.parameters:getBoolean("PAT_ENGBEARLINE")==true then
return "ENGBEARLINE", "Engulfing Bearish Line", true, 2, "PAT_ENGBEARLINE";
elseif pattern == PAT_ENGBULLLINE and instance.parameters:getBoolean("PAT_ENGBULLLINE")==true then
return "ENGBULLLINE", "Engulfing Bullish Line", true, 2, "PAT_ENGBULLLINE";
elseif pattern == PAT_NB2 and instance.parameters:getBoolean("PAT_NB2")==true then
return "NB2", "2 Neutral Bars", true, 2, "PAT_NB2";
else
return nil, nil, nil, nil, nil;
end
end
function Cmp(price1, price2)
if math.abs(price1 - price2) < EQ then
return 0;
elseif price1 > price2 then
return 1;
else
return -1;
end
end
function UpdatePattern(p)
T[p] = math.max(O[p], C[p]);
B[p] = math.min(O[p], C[p]);
BL[p] = T[p] - B[p];
US[p] = H[p] - T[p];
LS[p] = B[p] - L[p];
if p >= 0 then
-- 1 - candle patterns
if Cmp(O[p], C[p]) == 0 and US[p] > math.max(EQ * 4, source:pipSize() * 4) and
LS[p] > math.max(EQ * 4, source:pipSize() * 4) then
RegisterPattern(p, PAT_NB);
end
if C[p] == H[p] then
RegisterPattern(p, PAT_FBU);
end
if C[p] == L[p] then
RegisterPattern(p, PAT_FBD);
end
if US[p] <= math.max(EQ, source:pipSize()) and LS[p]>2.*BL[p] then
RegisterPattern(p, PAT_HAMMER);
end
if LS[p] <= math.max(EQ, source:pipSize()) and US[p]>2.*BL[p] then
RegisterPattern(p, PAT_SHOOTSTAR);
end
end
if p >= 1 then
-- 2 - candle patterns
if Cmp(H[p], H[p - 1]) < 0 and Cmp(L[p], L[p - 1]) > 0 then
RegisterPattern(p, PAT_INSIDE);
end
if Cmp(H[p], H[p - 1]) > 0 and Cmp(L[p], L[p - 1]) < 0 then
RegisterPattern(p, PAT_OUTSIDE);
end
if Cmp(H[p], H[p - 1]) == 0 and Cmp(C[p], C[p - 1]) < 0 and Cmp(L[p], L[p - 1]) <= 0 then
RegisterPattern(p, PAT_DBHLC);
end
if Cmp(L[p], L[p - 1]) == 0 and Cmp(C[p], C[p - 1]) > 0 and Cmp(H[p], H[p - 1]) >= 0 then
RegisterPattern(p, PAT_DBLHC);
end
if Cmp(BL[p - 1], BL[p]) == 0 and Cmp(O[p - 1], C[p]) == 0 then
RegisterPattern(p, PAT_MB);
end
if Cmp(H[p],H[p-1])<0 and Cmp(L[p],L[p-1])>0 and Cmp(C[p-1],O[p-1])>0 and
Cmp(C[p],O[p])<0 and Cmp(BL[p-1],BL[p])>0 and Cmp(C[p-1],O[p])>0 and Cmp(O[p-1],C[p])<0 then
RegisterPattern(p, PAT_BEARHARAMI);
end
if Cmp(H[p],H[p-1])<0 and Cmp(L[p],L[p-1])>0 and Cmp(C[p-1],O[p-1])>0 and Cmp(O[p],C[p])==0 and
Cmp(BL[p-1],BL[p])>0 and Cmp(C[p-1],O[p])>0 and Cmp(O[p-1],C[p])<0 then
RegisterPattern(p, PAT_BEARHARAMICROSS);
end
if Cmp(H[p],H[p-1])<0 and Cmp(L[p],L[p-1])>0 and Cmp(C[p-1],O[p-1])<0 and
Cmp(C[p],O[p])>0 and Cmp(BL[p-1],BL[p])>0 and Cmp(C[p-1],O[p])<0 and Cmp(O[p-1],C[p])>0 then
RegisterPattern(p, PAT_BULLHARAMI);
end
if Cmp(H[p],H[p-1])<0 and Cmp(L[p],L[p-1])>0 and Cmp(C[p-1],O[p-1])<0 and Cmp(O[p],C[p])==0 and
Cmp(BL[p-1],BL[p])>0 and Cmp(C[p-1],O[p])<0 and Cmp(O[p-1],C[p])>0 then
RegisterPattern(p, PAT_BULLHARAMICROSS);
end
if Cmp(C[p-1],O[p-1])>0 and Cmp(C[p],O[p])<0 and Cmp(H[p-1],O[p])<0 and Cmp(C[p],C[p-1])<0 and Cmp(C[p],O[p-1])>0 then
RegisterPattern(p, PAT_DARKCLOUD);
end
if Cmp(O[p],C[p])==0 and ((Cmp(C[p-1],O[p-1])>0 and Cmp(O[p],H[p-1])>0) or (Cmp(C[p-1],O[p-1])<0 and Cmp(O[p],L[p-1])<0)) then
RegisterPattern(p, PAT_DOJISTAR);
end
if Cmp(C[p-1],O[p-1])>0 and Cmp(C[p],O[p])<0 and Cmp(O[p],C[p-1])>0 and Cmp(C[p],O[p-1])<0 then
RegisterPattern(p, PAT_ENGBEARLINE);
end
if Cmp(C[p-1],O[p-1])<0 and Cmp(C[p],O[p])>0 and Cmp(O[p],C[p-1])<0 and Cmp(C[p],O[p-1])>0 then
RegisterPattern(p, PAT_ENGBULLLINE);
end
if Cmp(O[p], C[p]) == 0 and US[p] > math.max(EQ * 4, source:pipSize() * 4) and
LS[p] > math.max(EQ * 4, source:pipSize() * 4) and
Cmp(O[p-1], C[p-1]) == 0 and US[p-1] > math.max(EQ * 4, source:pipSize() * 4) and
LS[p-1] > math.max(EQ * 4, source:pipSize() * 4) then
RegisterPattern(p, PAT_NB2);
end
end
if p >= 2 then
-- 3 - candle patterns
if Cmp(H[p], H[p - 1]) < 0 and Cmp(L[p], L[p - 1]) > 0 and
Cmp(H[p - 1], H[p - 2]) < 0 and Cmp(L[p - 1], L[p - 2]) > 0 then
RegisterPattern(p, PAT_DOUBLE_INSIDE);
end
if Cmp(H[p - 1], H[p - 2]) > 0 and Cmp(H[p - 1], H[p]) > 0 and
Cmp(L[p - 1], L[p - 2]) > 0 and Cmp(L[p - 1], L[p]) > 0 and
BL[p - 1] * 2 < US[p - 1] then
RegisterPattern(p - 1, PAT_PINUP);
end
if Cmp(H[p - 1], H[p - 2]) < 0 and Cmp(H[p - 1], H[p]) < 0 and
Cmp(L[p - 1], L[p - 2]) < 0 and Cmp(L[p - 1], L[p]) < 0 and
BL[p - 1] * 2 < LS[p - 1] then
RegisterPattern(p - 1, PAT_PINDOWN);
end
if Cmp(H[p - 1], H[p - 2]) > 0 and Cmp(H[p - 1], H[p]) > 0 and
Cmp(L[p - 1], L[p - 2]) > 0 and Cmp(L[p - 1], L[p]) > 0 and
Cmp(C[p], L[p - 1]) < 0 then
RegisterPattern(p, PAT_PPRDN);
end
if Cmp(H[p - 1], H[p - 2]) < 0 and Cmp(H[p - 1], H[p]) < 0 and
Cmp(L[p - 1], L[p - 2]) < 0 and Cmp(L[p - 1], L[p]) < 0 and
Cmp(C[p], H[p - 1]) > 0 then
RegisterPattern(p, PAT_PPRUP);
end
if Cmp(H[p - 1], H[p - 2]) < 0 and Cmp(L[p - 1], L[p - 2]) < 0 and
Cmp(H[p], H[p - 1]) < 0 and Cmp(L[p], L[p - 1]) < 0 and
Cmp(C[p], C[p - 1]) > 0 and Cmp(O[p], C[p]) < 0 then
RegisterPattern(p, PAT_CPRU);
end
if Cmp(H[p - 1], H[p - 2]) > 0 and Cmp(L[p - 1], L[p - 2]) > 0 and
Cmp(H[p], H[p - 1]) > 0 and Cmp(L[p], L[p - 1]) > 0 and
Cmp(C[p], C[p - 1]) < 0 and Cmp(O[p], C[p]) > 0 then
RegisterPattern(p, PAT_CPRD);
end
if Cmp(C[p-2],O[p-2])>0 and Cmp(C[p-1],O[p-1])>0 and Cmp(C[p],O[p])<0 and Cmp(C[p-2],O[p-1])<0 and
Cmp(BL[p-2],BL[p-1])>0 and Cmp(BL[p-1],BL[p])<0 and Cmp(C[p],O[p-2])>0 and Cmp(C[p],C[p-2])<0 then
RegisterPattern(p, PAT_EVSTAR);
end
if Cmp(C[p-2],O[p-2])<0 and Cmp(C[p-1],O[p-1])>0 and Cmp(C[p],O[p])>0 and Cmp(C[p-2],O[p-1])>0 and
Cmp(BL[p-2],BL[p-1])>0 and Cmp(BL[p-1],BL[p])<0 and Cmp(C[p],C[p-2])>0 and Cmp(C[p],O[p-2])<0 then
RegisterPattern(p, PAT_MORNSTAR);
end
if Cmp(C[p-2],O[p-2])>0 and Cmp(C[p-1],O[p-1])==0 and Cmp(C[p],O[p])<0 and Cmp(C[p-2],O[p-1])<0 and
Cmp(BL[p-2],BL[p-1])>0 and Cmp(BL[p-1],BL[p])<0 and Cmp(C[p],O[p-2])>0 and Cmp(C[p],C[p-2])<0 then
RegisterPattern(p, PAT_EVDJSTAR);
end
if Cmp(C[p-2],O[p-2])<0 and Cmp(C[p-1],O[p-1])==0 and Cmp(C[p],O[p])>0 and Cmp(C[p-2],O[p-1])>0 and
Cmp(BL[p-2],BL[p-1])>0 and Cmp(BL[p-1],BL[p])<0 and Cmp(C[p],C[p-2])>0 and Cmp(C[p],O[p-2])<0 then
RegisterPattern(p, PAT_MORNDJSTAR);
end
end
end
Users browsing this forum: No registered users and 204 guests