Source: https://fxcodebase.com/code/viewtopic.php?f=17&t=1389
Forum: 17 · Topic 1389 · 14 post(s)
Alexander.Gettinger · Mon Jun 21, 2010 2:05 am
viewtopic.php?f=27&t=1248&p=2370#p2370

Fx_Snipers_Ergodic_CCI_Trigger_On_Chart.lua
Fx_Snipers_Ergodic_CCI_Trigger.lua
MT4/Mq4 version. viewtopic.php?f=38&t=64450
Alexander.Gettinger · Mon Jun 21, 2010 2:06 am
Signal:
function Init()
strategy:name("Fx Sniper's Ergodic CCI Trigger signal");
strategy:description("");
strategy.parameters:addGroup("Parameters");
strategy.parameters:addInteger("pq", "pq", "pq", 4);
strategy.parameters:addInteger("pr", "pr", "pr", 8);
strategy.parameters:addInteger("ps", "ps", "ps", 5);
strategy.parameters:addInteger("trigger", "trigger", "trigger", 4);
strategy.parameters:addString("MA_Method", "Method of MA", "", "MVA");
strategy.parameters:addStringAlternative("MA_Method", "EMA", "", "EMA");
strategy.parameters:addStringAlternative("MA_Method", "KAMA", "", "KAMA");
strategy.parameters:addStringAlternative("MA_Method", "LWMA", "", "LWMA");
strategy.parameters:addStringAlternative("MA_Method", "MVA", "", "MVA");
strategy.parameters:addStringAlternative("MA_Method", "TMA", "", "TMA");
strategy.parameters:addString("Period", "Timeframe", "", "m5");
strategy.parameters:setFlag("Period", core.FLAG_PERIODS);
strategy.parameters:addGroup("Signals");
strategy.parameters:addBoolean("ShowAlert", "Show Alert", "", true);
strategy.parameters:addBoolean("PlaySound", "Play Sound", "", false);
strategy.parameters:addFile("SoundFile", "Sound File", "", "");
end
local SoundFile;
local gSourceBid = nil;
local gSourceAsk = nil;
local first;
local BidFinished = false;
local AskFinished = false;
local LastBidCandle = nil;
local Ind;
function Prepare()
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");
assert(instance.parameters.Period ~= "t1", "Signal cannot be applied on ticks");
ExtSetupSignal("Fx Sniper's Ergodic CCI Trigger signal:", ShowAlert);
gSourceBid = core.host:execute("getHistory", 1, instance.bid:instrument(), instance.parameters.Period, 0, 0, true);
gSourceAsk = core.host:execute("getHistory", 2, instance.bid:instrument(), instance.parameters.Period, 0, 0, false);
Ind = core.indicators:create("FX_SNIPER'S_ERGODIC_CCI_TRIGGER", gSourceBid, instance.parameters.pq,instance.parameters.pr,instance.parameters.ps,instance.parameters.trigger,instance.parameters.MA_Method);
first = Ind.DATA:first() + 2;
local name = profile:id() .. "(" .. instance.bid:instrument() .. "(" .. instance.parameters.Period .. ")" .. instance.parameters.pq .. ")" .. instance.parameters.pr .. ")" .. instance.parameters.ps .. ")" .. instance.parameters.trigger .. ")" .. instance.parameters.MA_Method .. ")";
instance:name(name);
end
local LastDirection=nil;
-- when tick source is updated
function Update()
if not(BidFinished) or not(AskFinished) then
return ;
end
local period;
-- update moving average
Ind:update(core.UpdateLast);
-- calculate enter logic
if LastBidCandle == nil or LastBidCandle ~= gSourceBid:serial(gSourceBid:size() - 1) then
LastBidCandle = gSourceBid:serial(gSourceBid:size() - 1);
period = gSourceBid:size() - 1;
if period > first then
if Ind.buff1[period]>Ind.buff2[period] and Ind.buff1[period-1]<=Ind.buff2[period-1] and LastDirection~=1 then
ExtSignal(gSourceAsk, period, "Buy", SoundFile);
LastDirection=1;
elseif Ind.buff1[period]<Ind.buff2[period] and Ind.buff1[period-1]>=Ind.buff2[period-1] and LastDirection~=-1 then
ExtSignal(gSourceBid, period, "Sell", SoundFile);
LastDirection=-1;
end
end
end
end
function AsyncOperationFinished(cookie)
if cookie == 1 then
BidFinished = true;
elseif cookie == 2 then
AskFinished = true;
end
end
local gSignalBase = ""; -- the base part of the signal message
local gShowAlert = false; -- the flag indicating whether the text alert must be shown
-- ---------------------------------------------------------
-- Sets the base message for the signal
-- @param base The base message of the signals
-- ---------------------------------------------------------
function ExtSetupSignal(base, showAlert)
gSignalBase = base;
gShowAlert = showAlert;
return ;
end
-- ---------------------------------------------------------
-- Signals the message
-- @param message The rest of the message to be added to the signal
-- @param period The number of the period
-- @param sound The sound or nil to silent signal
-- ---------------------------------------------------------
function ExtSignal(source, period, message, soundFile)
if source:isBar() then
source = source.close;
end
if gShowAlert then
terminal:alertMessage(source:instrument(), source[period], gSignalBase .. message, source:date(period));
end
if soundFile ~= nil then
terminal:alertSound(soundFile, false);
end
end
oritzbaba · Fri May 20, 2011 10:12 am
Hi Alexander Gettinger and all the other geniuses out there like Apprentice, Sunshine, Nikolay and others. You are doing a good job helping newbies and novice programmers like me to hopefully succeed.
I have had most of my best trades with Fx Sniper’s Ergodic CCI Trigger combined with other indicators. Please to make the FX Sniper strategy work more efficiently, can you add all the other very helpful features like set stop/limit, allowed trading, allowed side etc as contained in the MACROSS_CONF_DIST_STRATEGY.
Please help out, God bless you all.
Thanks.
Apprentice · Fri May 20, 2011 4:45 pm
Your request has been added to developmental cue.
oritzbaba · Sat May 21, 2011 6:50 pm
Thanks Apprentice,
I tried to backtest this strategy and I have some observations; 1. It does not trade all crosses either buy/sell as shown by the signal alert arrows on the chart. 2, It enters a trade order sometimes before the signal alert arrow on the chart and at other times after. 3, In my demo trade, it is yet to take any trade even where there had been different crossing opportunities for the strategy to trade.
Please note both the signal alert on the chart and the strategy settings are the same. please help out, what am I doing wrong? One more thing, does the the strategy remain active on FXCM server when my computer laptop is shot down? I know trailing stop does but is strategy on it?
adolfainsley8 · Fri Apr 22, 2016 3:31 am
One more thing, does the the strategy remain active on FXCM server when my computer laptop is shot down? I know trailing stop does but is strategy on it????
Apprentice · Fri Apr 22, 2016 5:54 am
does the the strategy remain active on FXCM server when my computer laptop is shot down?
Unfortunately not . You will need to setup a VPS for this task.
Apprentice · Fri Apr 22, 2016 7:05 am
Strategy is available here. viewtopic.php?f=31&t=63401
jaricarr · Fri Jun 24, 2016 1:58 am
Hi Apprentice,
the indicator is causing an error.
Thanks, JariCarr
Apprentice · Fri Jun 24, 2016 3:11 am
Try it now.
jaricarr · Fri Jun 24, 2016 8:35 pm
Hi Apprentice,
I re-downloaded and re-installed the indicator and strategy luas.
Im still getting an error.
thanks, JariCarr
jaricarr · Fri Jun 24, 2016 9:29 pm
Hi
Looks like the problem is related to the letter “s” in the indicator name. The backtesting of the strategy needs Sniper and the indicator on the chart needs Snipers
I did a temporary work around to this problem until you update the file. I installed 4 indicators and renamed them as shown on the screenshot.
thanks JariCarr
Apprentice · Sat Jun 25, 2016 3:29 am
Deinstall all instances, instal new versions. I have changed the names of all the indicator.
Apprentice · Sun Oct 21, 2018 5:32 am
The indicator was revised and updated.