by Karlo_Karlo » Mon Feb 27, 2012 3:33 pm
This indicator seems to work quite well. I tried to make a signal but my knowledge is not enough for this task. Here is the code which does not work correctly. It generates signals but not in the right places. Signals must be generated when price touches L3 (L4) or L6 (L7).
Dear Nikolay, maybe you can help?
- Code: Select all
-- Indicator profile initialization routine
-- Defines indicator profile properties and indicator parameters
function Init()
strategy:name("Gravity signal");
strategy:description("Signals when Price hits Gravity Edges");
strategy.parameters:addGroup("Gravity parameters");
strategy.parameters:addInteger("N", "Number of bars", "", 120);
strategy.parameters:addInteger("O", "Order", "", 3);
strategy.parameters:addDouble("E", "Eccart value", "", 1.61803399);
strategy.parameters:addGroup("Price parameters");
strategy.parameters:addString("Period", "Time frame", "", "m1");
strategy.parameters:setFlag("Period", core.FLAG_PERIODS);
strategy.parameters:addGroup("Signal parameters");
strategy.parameters:addBoolean("ShowAlert", "Show Alert", "", true);
strategy.parameters:addBoolean("PlaySound", "Play Sound", "", false);
strategy.parameters:addFile("SoundFile", "Sound file", "", "");
strategy.parameters:setFlag("SoundFile", core.FLAG_SOUND);
strategy.parameters:addBoolean("Recurrent", "RecurrentSound", "", false);
strategy.parameters:addGroup("Email Parameters");
strategy.parameters:addBoolean("SendEmail", "Send email", "", false);
strategy.parameters:addString("Email", "Email address", "", "");
strategy.parameters:setFlag("Email", core.FLAG_EMAIL);
end
-- Indicator instance initialization routine
-- Processes indicator parameters and creates output streams
-- Parameters block
local gSource;
local BELCOG;
local SoundFile;
local RecurrentSound;
local Email;
local ShowAlert;
local name;
local N;
local O;
local E;
-- Streams block
local L1;
local L2;
local L3;
local L4;
local L5;
local L6;
local L7;
-- Routine
function Prepare(onlyName)
N = instance.parameters.N;
O = instance.parameters.O;
E = instance.parameters.E;
ShowAlert = instance.parameters.ShowAlert;
if instance.parameters.PlaySound then
SoundFile = instance.parameters.SoundFile;
else
SoundFile = nil;
end
assert(not(PlaySound) or (PlaySound and SoundFile ~= ""), "Sound file must be specified");
RecurrentSound = instance.parameters.Recurrent;
local SendEmail = instance.parameters.SendEmail;
if SendEmail then
Email = instance.parameters.Email;
else
Email = nil;
end
assert(not(SendEmail) or (SendEmail and Email ~= ""), "Email address must be specified");
name = profile:id() .. "(" .. instance.bid:instrument() .. "," .. N .. "," .. O .. "," .. E .. ")";
instance:name(name);
if onlyName then
return ;
end
assert(instance.parameters.Period ~= "t1", "Can't be applied on ticks!");
gSource = ExtSubscribe(1, nil, instance.parameters.Period, true, "bar");
BELCOG = core.indicators:create("BELCOG", gSource, N, O, E);
end
function ExtUpdate(id, source, period)
if id == 1 then
BELCOG:update(core.UpdateLast);
if period >= BELCOG.DATA:first() + 1 then
local message = nil;
if core.crossesOver( gSource.high, BELCOG.L3, period) then
message = "Gravity OverBought";
elseif core.crossesUnder( gSource.low, BELCOG.L6, period) then
message = "Gravity OverSold";
end
if message ~= nil then
if ShowAlert then
terminal:alertMessage(instance.bid:instrument(), instance.bid[NOW], message, instance.bid:date(NOW));
end
if SoundFile ~= nil then
terminal:alertSound(SoundFile, RecurrentSound);
end
if Email ~= nil then
terminal:alertEmail(Email, name, name .. "(" .. core.formatDate(instance.bid:date(NOW)) .. ") : " .. message);
end
end
end
end
end
dofile(core.app_path() .. "\\strategies\\standard\\include\\helper.lua");
Last edited by
Karlo_Karlo on Tue Feb 28, 2012 4:29 am, edited 1 time in total.
Karlo_Karlo