Price Data Components
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
FFS_CrossTiming
//+------------------------------------------------------------------+
//| FFS_CrossTiming.mq4 |
//| Release date 20070128 |
//+------------------------------------------------------------------+
#property copyright "icm63 (user name at Forex-TSD)"
#property link "Forex-TSD"
/*
READ ME FIRST..
I have nothing to do with www.forexforsmarties.com.
You use these tools at YOUR OWN RISK.
I do not endorse or sell FFS methods or products in any way.
These tools are provided FREE of charge, I wish to promote the development of MT4 tools and minds
of those who trade FFS to get the best 'How to FFS tools'. So we all can trade FFS thru easy
and tough times. As the Forex market gives and takes away fortunes ! To make 5% monthly
compounding over 10 years is not easy when the forex beast changes.
Use with
FFS_Trend
FFS_Correlation
FFS_Cross
FFS_NetPipChange
IMPORTANT : Make sure the 'IndexType' is the same within each MT4 tool.
The FFS_Mode should be set as BUY, to mirror the FFS Calcutator.
Like the FFS_Correlation tool, this is a fundamental watch. It shows the combined trend of
all the crosses related to the hedge pair in question. All cross have been adjusted to be on
the same price scale and treated as equal weight.
When this start getting wild so will the accounts trading FFS, and settings will have to be
adjusted for survival. Use the FFS_Trainspotter (in FFS_Trend) to see FFS_NetPipChange summary
to view the extremes of the net pip swings of the hedge pairs.
This is the index selection format
1. EUR/USD, USD/CHF
2. EUR/USD, USD/CHF, GBP/USD
3. EUR/USD, USD/CHF, GBP/USD, USD/JPY
4. EUR/USD, USD/CHF, USD/JPY
5. EUR/USD, GBP/USD, USD/JPY
6. USD/CHF, GBP/USD
7. USD/CHF, GBP/USD, USD/JPY
8. GBP/USD, USD/JPY
*/
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkGreen
#property indicator_color3 Lime
#property indicator_level1 60
#property indicator_level2 40
//User Inputs Parameters
extern int IndexType = 9; // FFS Index see above
extern int CCI = 5; //CCI period
extern double Lag1_Gamma = 0.5; //Laguerre Gamma Short
extern double Lag2_Gamma = 0.8; //Laguerre Gamma Long
//---- variables
double cross1[];
double CCI1[];
double Lag1[];
double Lag2[];
double normCCI1[];
double normcross1[];
string shortname;
//Laguerra Variables
double L0A = 0;
double L1A = 0;
double L2A = 0;
double L3A = 0;
double L0 = 0;
double L1 = 0;
double L2 = 0;
double L3 = 0;
double CU = 0;
double CD = 0;
double LRSI = 0;
int init()
{
shortname = "FFS_CrossTiming Index " + IndexType +
", CCI Red ("+CCI+ "), Laguerre("+DoubleToStr(Lag1_Gamma,1)+","+DoubleToStr(Lag2_Gamma,1)+"), ";
IndicatorShortName(shortname);
IndicatorBuffers(6);
SetIndexDrawBegin(0,CCI+1);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,normCCI1);
SetIndexLabel(0, "CCI1");
SetIndexDrawBegin(1,5);
SetIndexEmptyValue(1, -0.01);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Lag1);
SetIndexLabel(1, "Lag1");
SetIndexDrawBegin(2,5);
SetIndexEmptyValue(2, -0.01);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,Lag2);
SetIndexLabel(2, "Lag2");
SetIndexBuffer(3,cross1);
SetIndexBuffer(4,CCI1);
SetIndexBuffer(5,normcross1);
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars-=1;
limit=Bars-counted_bars;
double EURCHFW, GBPCHFW, EURJPYW, GBPJPYW, CHFJPYW, EURGBPW;
//Determine correct weight to get all prices on scale of 10,000
EURCHFW = (10000/(iClose("EURCHF",0,1)*10000))*10000;
GBPCHFW = (10000/(iClose("GBPCHF",0,1)*10000))*10000;
EURJPYW = (10000/(iClose("EURJPY",0,1)*10000))*10000;
GBPJPYW = (10000/(iClose("GBPJPY",0,1)*10000))*10000;
CHFJPYW = (10000/(iClose("CHFJPY",0,1)*10000))*10000;
EURGBPW = (10000/(iClose("EURGBP",0,1)*10000))*10000;
for(int i=limit; i>=0; i--)
{
switch(IndexType)
{
case 1:
//1. EUR/USD, USD/CHF"
cross1[i]= iClose("EURCHF",0,i) * EURCHFW;
break;
case 2:
//2. EUR/USD, USD/CHF, GBP/USD
cross1[i]= iClose("EURCHF",0,i) * EURCHFW + iClose("GBPCHF",0,i) * GBPCHFW
+ iClose("EURGBP",0,i) * EURGBPW;
break;
case 3:
//3. EUR/USD, USD/CHF, GBP/USD, USD/JPY
cross1[i]= iClose("EURCHF",0,i) * EURCHFW + iClose("GBPCHF",0,i) * GBPCHFW
+ iClose("EURJPY",0,i) * EURJPYW + iClose("GBPJPY",0,i) * GBPJPYW
+ iClose("CHFJPY",0,i) * CHFJPYW + iClose("EURGBP",0,i) * EURGBPW ;
break;
case 4:
//4. EUR/USD, USD/CHF, USD/JPY
cross1[i]= iClose("EURCHF",0,i) * EURCHFW + iClose("EURJPY",0,i) * EURJPYW
+ iClose("CHFJPY",0,i) * CHFJPYW ;
break;
case 5:
//5. EUR/USD, GBP/USD, USD/JPY
cross1[i]= iClose("EURJPY",0,i) * EURJPYW + iClose("GBPJPY",0,i) * GBPJPYW
+ iClose("EURGBP",0,i) * EURGBPW ;
break;
case 6:
//6. USD/CHF, GBP/USD
cross1[i]= iClose("GBPCHF",0,i) * GBPCHFW ;
break;
case 7:
//7. USD/CHF, GBP/USD, USD/JPY
cross1[i]= iClose("GBPCHF",0,i) * GBPCHFW + iClose("GBPJPY",0,i) * GBPJPYW
+ iClose("CHFJPY",0,i) * CHFJPYW ;
break;
case 8:
//8. GBP/USD, USD/JPY
cross1[i]= iClose("GBPJPY",0,i) * GBPJPYW ;
break;
case 9:
//9. Chart Symbol
cross1[i]= iClose(NULL,0,i) ;
break;
default:
//3. EUR/USD, USD/CHF, GBP/USD, USD/JPY
cross1[i]= iClose("EURCHF",0,i) * EURCHFW + iClose("GBPCHF",0,i) * GBPCHFW
+ iClose("EURJPY",0,i) * EURJPYW + iClose("GBPJPY",0,i) * GBPJPYW
+ iClose("CHFJPY",0,i) * CHFJPYW + iClose("EURGBP",0,i) * EURGBPW ;
break;
}
//Find Max and Min or series
double Maxcross1=-10000000, Mincross1=10000000;
for (int k=0; k<limit;k++)
{
if( cross1[i+k] > Maxcross1) Maxcross1 = cross1[i+k];
if( cross1[i+k] < Mincross1) Mincross1 = cross1[i+k];
}
}
//Normalise Data btw 0 and 100
for(int m=limit; m>=0; m--)
{
if (Maxcross1 - Mincross1 != 0) normcross1[m] = NormalizeDouble(100*(cross1[m]-Mincross1)/(Maxcross1-Mincross1),2);
}
//INDICATORS FOR NORMALISED CROSSES DATA FOR ENTRY AND EXIT TIMING FOR FFS TRADES
//Calculate CCI and Laguerre arrays
if(CCI > 0)
{
for(int g = limit; g>=0; g--)
{
CCI1[g] = iCCIOnArray(normcross1,limit,CCI,g); //Red
Lag1[g] = LaguerreRSI(normcross1[g],Lag1_Gamma);
}
for(int y = limit; y>=0; y--)
{
Lag2[y] = LaguerreRSI(normcross1[y],Lag2_Gamma);
}
}
NormaliseSeries(CCI1,normCCI1,limit);
return(0);
}
//+------------------------------------------------------------------+
//FUNCTIONS
void NormaliseSeries(double& InData[], double& OutData[],
int limit)
{
double nMax= -10000000;
double nMin= 10000000;
for ( int k=0; k<limit;k++)
{
if( InData[k] > nMax) nMax = InData[k];
if( InData[k] < nMin) nMin = InData[k];
}
//Normalise Data btw Min and Max
for(int m=limit; m>=0; m--)
{
if (nMax - nMin != 0) OutData[m] = NormalizeDouble(100*((InData[m]-nMin)/(nMax-nMin)),2);
}
}
// Laguerre calc
double LaguerreRSI(double InData, double gamma)
{
L0A = L0;
L1A = L1;
L2A = L2;
L3A = L3;
L0 = (1 - gamma)* InData + gamma* L0A;
L1 = - gamma * L0 + L0A + gamma * L1A;
L2 = - gamma * L1 + L1A + gamma * L2A;
L3 = - gamma * L2 + L2A + gamma * L3A;
//----
CU = 0;
CD = 0;
//----
if(L0 >= L1)
CU = L0 - L1;
else
CD = L1 - L0;
//----
if(L1 >= L2)
CU = CU + L1 - L2;
else
CD = CD + L2 - L1;
//----
if(L2 >= L3)
CU = CU + L2 - L3;
else
CD = CD + L3 - L2;
//----
if(CU + CD != 0) LRSI = NormalizeDouble((CU / (CU + CD))* 90,2);
return(LRSI);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---