sbs
Joined: 02 Mar 2011 Posts: 2
|
Posted: Wed Mar 02, 2011 7:35 pm Post subject: J_TPO |
|
|
Having some problems coding this indicator. It's an oscillator similar to stochastics, but somewhat better working, at least for me. Can someone help out?
Can attach my broken Delphi code, too
| Code: |
//+------------------------------------------------------------------+
//| J_TPO.mq4 |
//| Copyright © 2004, |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, ."
#property link ""
#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum 1
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int Len=10;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, ExtMapBuffer1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| J_TPO indicatop |
//+------------------------------------------------------------------+
int start()
{
//int limit;
//int counted_bars=IndicatorCounted();
//---- check for possible errors
//if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
//if(counted_bars>0) counted_bars--;
//limit=Bars-counted_bars;
//---- main loop
double f0, f8, f10, f18, f20, f28, f30, f40, k,
var14, var18, var1C, var20, var24, shift, value;
int f38, f48, var6, var12, varA, varE;
double arr0[300], arr1[300], arr2[300], arr3[300];
//f38=0;
for(int i=Bars-Len-100; i>=0; i--) {
var14=0;
var1C=0;
if(f38 == 0) {
f38=1;
f40=0;
if (Len-1 >= 2)
f30=Len-1;
else
f30=2;
f48=f30+1;
f10=Close[i];
arr0[f38] = Close[i];
k=f48;
f18 = 12 / (k * (k - 1) * (k + 1));
f20 = (f48 + 1) * 0.5;
} else {
if (f38 <= f48) f38 = f38 + 1;
else f38 = f48 + 1;
f8 = f10;
f10 = Close[i];
if (f38 > f48) {
for (var6 = 2; var6<=f48; var6++) arr0[var6-1] = arr0[var6];
arr0[f48] = Close[i];
} else
arr0[f38] = Close[i];
if ((f30 >= f38) && (f8 != f10)) f40 = 1;
if ((f30 == f38) && (f40 == 0)) f38 = 0;
}
if (f38 >= f48) {
for (varA=1; varA<=f48; varA++) {
arr2[varA] = varA;
arr3[varA] = varA;
arr1[varA] = arr0[varA];
}
for (varA=1; varA<=(f48-1); varA++) {
var24 = arr1[varA];
var12 = varA;
var6 = varA + 1;
for (var6=varA+1; var6<=f48; var6++) {
if (arr1[var6] < var24) {
var24 = arr1[var6];
var12 = var6;
}
}
var20 = arr1[varA];
arr1[varA] = arr1[var12];
arr1[var12] = var20;
var20 = arr2[varA];
arr2[varA] = arr2[var12];
arr2[var12] = var20;
}
varA = 1;
while (f48 > varA) {
var6 = varA + 1;
var14 = 1;
var1C = arr3[varA];
while (var14 != 0) {
if (arr1[varA] != arr1[var6]){
if ((var6 - varA) > 1) {
var1C = var1C / (var6 - varA);
varE = varA;
for (varE=varA; varE<=(var6-1); varE++)
arr3[varE] = var1C;
}
var14 = 0;
} else {
var1C = var1C + arr3[var6];
var6 = var6 + 1;
}
}
varA = var6;
}
var1C = 0;
for (varA=1; varA<=f48; varA++)
var1C = var1C + (arr3[varA] - f20) * (arr2[varA] - f20);
var18 = f18 * var1C;
}
else
var18 = 0;
value = var18;
if (value == 0) value = 0.00001;
ExtMapBuffer1[i]=value;
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
|
|
|