How do I write this code with the jurik tools

#1
Hello friends

I have this afl code

n = Param("Average", 7, 5, 20, 1 );

R1=WMA(RSI(n),n);
Plot(RSI(n),"MRSI(7)", colorRed, styleLine);
Plot(R1,"MR1", colorBlue, styleLine);


StRSI=100*(RSI(n)-LLV(RSI(n),n))/(HHV(RSI(n),n)-LLV(RSI(n),n));
S=WMA(strsi,5);
Plot(S,"MStRSI", colorYellow, 1);

Plot(20,"", 11, styleLine);
Plot(80,"", 11, styleLine);

top=IIf(s<20,20,IIf(s>80,s,20));
bot=IIf(s<20,s,IIf(s>80,80,20));


I want to change this code with jurik tools JRSX and JMA...how can edit this code
 

KelvinHand

Well-Known Member
#2
Hello friends

I have this afl code

n = Param("Average", 7, 5, 20, 1 );

R1=WMA(RSI(n),n);
Plot(RSI(n),"MRSI(7)", colorRed, styleLine);
Plot(R1,"MR1", colorBlue, styleLine);


StRSI=100*(RSI(n)-LLV(RSI(n),n))/(HHV(RSI(n),n)-LLV(RSI(n),n));
S=WMA(strsi,5);
Plot(S,"MStRSI", colorYellow, 1);

Plot(20,"", 11, styleLine);
Plot(80,"", 11, styleLine);

top=IIf(s<20,20,IIf(s>80,s,20));
bot=IIf(s<20,s,IIf(s>80,80,20));


I want to change this code with jurik tools JRSX and JMA...how can edit this code

Code:
// ###############################################################
// #include <Jxx_Include.afl> OR include functions 
// ###############################################################

function JRSX ( Period )
{
 
    f88 = 0; f90 = 0; f0 = 0; v4 = 0;   v8 = 0; vC = 0; v10 = 0; v14 = 0; v18 = 0; v20 = 0;
    f8 = 0; f10 = 0; f18 = 0; f20 = 0; f28 = 0; f30 = 0; f38 = 0; f48 = 0; v1C = 0;
    f50 = 0; f58 = 0; f60 = 0; f68 = 0; f70 = 0; f78 = 0; f80 = 0; f40 = 0;
 
    f90 = 1.0;
    f0  = 0.0;
 
    if ( Period-1 >= 5 )
        f88 = Period-1.0;
    else
        f88 = 5.0;
 
    f8 = 100.0 * ((H[0]+L[0]+Close[0])/3);
    f18 = 3.0 / (Period + 2.0);
    f20 = 1.0 - f18;
 
   for ( i = 1; i < BarCount; i++ )
    {
        if (f88 <= f90) f90 = f88 + 1; else f90 = f90 + 1;
        f10 = f8;
 //    f8 = 100*Close[i];
        f8 = 100.0*((H[i]+L[i]+C[i])/3);
        v8 = f8 - f10;
        f28 = f20 * f28 + f18 * v8;
        f30 = f18 * f28 + f20 * f30;
        vC = f28 * 1.5 - f30 * 0.5;
        f38 = f20 * f38 + f18 * vC;
        f40 = f18 * f38 + f20 * f40;
        v10 = f38 * 1.5 - f40 * 0.5;
        f48 = f20 * f48 + f18 * v10;
        f50 = f18 * f48 + f20 * f50;
        v14 = f48 * 1.5 - f50 * 0.5;
        f58 = f20 * f58 + f18 * abs (v8);
        f60 = f18 * f58 + f20 * f60;
        v18 = f58 * 1.5 - f60 * 0.5;
        f68 = f20 * f68 + f18 * v18;
 
        f70 = f18 * f68 + f20 * f70;
        v1C = f68 * 1.5 - f70 * 0.5;
        f78 = f20 * f78 + f18 * v1C;
        f80 = f18 * f78 + f20 * f80;
        v20 = f78 * 1.5 - f80 * 0.5;
 
        if ((f88 >= f90) && (f8 != f10)) f0 = 1.0;
        if ((f88 == f90) && (f0 == 0.0)) f90 = 0.0;
        if ((f88 < f90) && (v20 > 0.0000000001))
        {
            v4 = (v14 / v20 + 1.0) * 50.0;
            if (v4 > 100.0) v4 = 100.0;
            if (v4 < 0.0) v4 = 0.0;
        }
        else
        {
            v4 = 50.0;
        }
 
        rsx[i] = v4;
    }
 
    return rsx;
}
function JMA( array, per )
{
    TN1=MA(array,per);
    s1=0;
    for( i = 0; i < per; i=i+1 )
    {
        s1=s1+((per-(2*i)-1)/2)*Ref(array,-i);
    }
    return TN1+(((per/2)+1)*S1)/((per+1)*per);
}

// --- End of include functions -------------------------


// == main() ========================================
// == {

// 1. Replace WMA() to JMA()
// 2. Replace RSI() to JRSX()
 

n = Param("Average", 7, 5, 20, 1 );

R1= JMA( JRSX(n),n );   //<==< WMA(RSI(n),n);
Plot(JRSX(n),"MRSI(7)", colorRed, styleLine);
Plot(R1,"MR1", colorBlue, styleLine);


StRSI=100*(JRSX(n)-LLV(JRSX(n),n))/(HHV(JRSX(n),n)-LLV(JRSX(n),n));
S= JMA(strsi,5); //<==< WMA(strsi,5);
Plot(S,"MStRSI", colorDarkYellow, 1);

Plot(20,"", 11, styleLine);
Plot(80,"", 11, styleLine);

top=IIf(s<20,20,IIf(s>80,s,20));
bot=IIf(s<20,s,IIf(s>80,80,20));

// == } main() //=======================================
 
#4
Here is the code of Cycle Identifier indicator, hope that will help you out to get a tremendous output from the fx but i need this code for amibroker

here is the code----
anybody here who recoded this code from MQL4 to AFL? Thank you for advance.


//+------------------------------------------------------------------+
//| CycleIdentifier.mq4 |
// |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 DarkGray

#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 DarkGreen
#property indicator_color5 Brown

#property indicator_minimum -1.2
#property indicator_maximum 1.2

extern int PriceActionFilter=1;
extern int Length=3;
extern int MajorCycleStrength=4;
extern bool UseCycleFilter=false;
extern int UseFilterSMAorRSI=1;
extern int FilterStrengthSMA=12;
extern int FilterStrengthRSI=21;

double LineBuffer[];
double MajorCycleBuy[];
double MajorCycleSell[];
double MinorCycleBuy[];
double MinorCycleSell[];
double ZL1[];

double CyclePrice = 0.0, Strength =0.0, SweepA = 0.0, SweepB = 0.0;
int Switch = 0, Switch2 = 0, SwitchA = 0, SwitchB = 0, SwitchC = 0, SwitchD = 0, SwitchE = 0, SwitchAA = 0, SwitchBB = 0;
double Price1BuyA = 0.0, Price2BuyA = 0.0;
int Price1BuyB = 1.0, Price2BuyB = 1.0;
double Price1SellA = 0.0, Price2SellA = 0.0;
int Price1SellB = 0.0, Price2SellB = 0.0;
bool ActiveSwitch = True, BuySwitchA = FALSE, BuySwitchB = FALSE, SellSwitchA = FALSE, SellSwitchB = FALSE;
int BuySellFac = 01;
bool Condition1, Condition2, Condition3, Condition6;

int init() {
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,LineBuffer);

SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(1,MajorCycleBuy);

SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(2,MajorCycleSell);

SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(3,MinorCycleBuy);

SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(4,MinorCycleSell);

SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,ZL1);

SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(3,0.0);
SetIndexEmptyValue(4,0.0);
SetIndexEmptyValue(5,0.0);
return(0);
}

int deinit() {return(0);}

int start() {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
// if(counted_bars>0) counted_bars--;
// int position=Bars-1;
int position=Bars-counted_bars;
if (position<0) position=0;

int rnglength = 250;
double range = 0.0, srange = 0.0;
for (int pos = position; pos >=0; pos--)
{
srange = 0.0;
int j = 0;
for (int i=0;i<rnglength;i++)
{
j++;
int posr = pos + i;
if (posr >= Bars)
break;

srange = srange + (High[posr] - Low[posr]);
}
range = srange / j * Length;
int BarNumber = Bars-pos; //??????????
if (BarNumber < 0)
BarNumber = 0;

CyclePrice = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);

if (UseFilterSMAorRSI == 1)
ZL1[pos] = ZeroLag(CyclePrice,FilterStrengthSMA, pos);
if (UseFilterSMAorRSI == 2)
ZL1[pos] = ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);

if (ZL1[pos] > ZL1[pos+1])
SwitchC = 1;
if (ZL1[pos] < ZL1[pos+1])
SwitchC = 2;

if (BarNumber <= 1)
{
if (Strength == 0)
SweepA = range;
else
SweepA = Strength;
Price1BuyA = CyclePrice;
Price1SellA = CyclePrice;
}

/* ***************************************************************** */

if (BarNumber > 1)
{
if (Switch > -1)
{
if (CyclePrice < Price1BuyA)
{

if (UseCycleFilter && (SwitchC == 2) && BuySwitchA )
{
MinorCycleBuy[pos + BarNumber - Price1BuyB] = 0; //MinorBuySell
LineBuffer[pos + BarNumber - Price1BuyB ] = 0; //line
}

if (!UseCycleFilter && BuySwitchA)
{
MinorCycleBuy[pos +BarNumber - Price1BuyB] = 0;
LineBuffer[pos +BarNumber - Price1BuyB] = 0;
}
Price1BuyA = CyclePrice;
Price1BuyB = BarNumber;
BuySwitchA = TRUE;
}
else if (CyclePrice > Price1BuyA)
{

SwitchA = BarNumber - Price1BuyB;

if (!UseCycleFilter)
{
MinorCycleBuy[pos +SwitchA] = -1;//MinorBuySell - DarkGreen
LineBuffer[pos +SwitchA] = -1;//line
}

if (UseCycleFilter && SwitchC == 1)
{
MinorCycleBuy[pos +SwitchA] = -1; //MinorBuySell
LineBuffer[pos +SwitchA] = -1; //line
SwitchD = 1;
}
else
{
SwitchD = 0;
}

BuySwitchA = TRUE;

double cyclePrice1 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
if (ActiveSwitch)
{
Condition1 = CyclePrice - cyclePrice1 >= SweepA;
}
else
{
Condition1 = CyclePrice >= cyclePrice1 * (1 + SweepA / 1000);
}
if (Condition1 && SwitchA >= BuySellFac)
{
Switch = - 1;
Price1SellA = CyclePrice;
Price1SellB = BarNumber;
SellSwitchA = FALSE;
BuySwitchA = FALSE;
}
}
}
if(Switch < 1)
{
if (CyclePrice > Price1SellA)
{
if (UseCycleFilter && SwitchC == 1 && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB] = 0; //MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB ] = 0; //line
}
if (!UseCycleFilter && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB] = 0;//MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB] = 0;//line
}
Price1SellA = CyclePrice;
Price1SellB = BarNumber;
SellSwitchA = TRUE;
}
else if (CyclePrice < Price1SellA)
{
SwitchA = BarNumber - Price1SellB;
if (!UseCycleFilter)
{
MinorCycleSell[pos +SwitchA] = 1; // MinorBuySell darkRed
LineBuffer[pos +SwitchA] = 1; //"CycleLine"
}
if (UseCycleFilter && (SwitchC == 2))
{
MinorCycleSell[pos +SwitchA] = 1;//MinorBuySell darkRed
LineBuffer[pos +SwitchA] = 1;//CycleLine
SwitchD = 2;
}
else
SwitchD = 0;

SellSwitchA = TRUE;
double cyclePrice2 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);

if (ActiveSwitch)
Condition1 = (cyclePrice2 - CyclePrice) >= SweepA;
else
Condition1 = CyclePrice <= (cyclePrice2 * (1 - SweepA / 1000));

if (Condition1 && SwitchA >= BuySellFac)
{
Switch = 1;
Price1BuyA = CyclePrice;
Price1BuyB = BarNumber;
SellSwitchA = FALSE;
BuySwitchA = FALSE;
}
}
}
}

LineBuffer[pos] = 0;
MinorCycleBuy[pos] = 0;
MinorCycleSell[pos] = 0;

if (BarNumber == 1)
{
if (Strength == 0)
SweepB = range * MajorCycleStrength;
else
SweepB = Strength * MajorCycleStrength;

Price2BuyA = CyclePrice;
Price2SellA = CyclePrice;
}

if (BarNumber > 1)
{
if (Switch2 > - 1)
{
if (CyclePrice < Price2BuyA)
{
if (UseCycleFilter && SwitchC == 2 && BuySwitchB )
{
MajorCycleBuy [pos +BarNumber - Price2BuyB] = 0; //MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line -----
}
if (!UseCycleFilter && BuySwitchB )
{
MajorCycleBuy [pos +BarNumber - Price2BuyB] = 0;//MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line-----------
}
Price2BuyA = CyclePrice;
Price2BuyB = BarNumber;
BuySwitchB = TRUE;
}
else if (CyclePrice > Price2BuyA)
{
SwitchB = BarNumber - Price2BuyB;

if (!UseCycleFilter)
{
MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line--------------
}
if (UseCycleFilter && SwitchC == 1)
{
MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line-----------------
SwitchE = 1;
}
else
SwitchE = 0;

BuySwitchB = TRUE;
double cyclePrice3 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6 = CyclePrice - cyclePrice3 >= SweepB;
else
Condition6 = CyclePrice >= cyclePrice3 * (1 + SweepB / 1000);

if (Condition6 && SwitchB >= BuySellFac)
{
Switch2 = - 1;
Price2SellA = CyclePrice;
Price2SellB = BarNumber;
SellSwitchB = FALSE;
BuySwitchB = FALSE;
}
}
}

if (Switch2 < 1)
{
if (CyclePrice > Price2SellA )
{
if (UseCycleFilter && SwitchC == 1 && SellSwitchB )
{
MajorCycleSell [pos +BarNumber - Price2SellB] = 0; //"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
}
if (!UseCycleFilter && SellSwitchB )
{
MajorCycleSell [pos +BarNumber - Price2SellB] = 0;//"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
}
Price2SellA = CyclePrice;
Price2SellB = BarNumber;
SellSwitchB = TRUE;
}
else if (CyclePrice < Price2SellA)
{
SwitchB = BarNumber - Price2SellB ;

if (!UseCycleFilter)
{
MajorCycleSell[pos + SwitchB] = 1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line -----
}
if (UseCycleFilter && SwitchC == 2)
{
MajorCycleSell [pos + SwitchB] = 1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line -----
SwitchE = 2;
}
else
SwitchE = 0;

SellSwitchB = TRUE;
double cyclePrice4 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6 = cyclePrice4 - CyclePrice >= SweepB;
else
Condition6 = CyclePrice <= cyclePrice4 * (1.0 - SweepB / 1000.0);

if (Condition6 && SwitchB >= BuySellFac)
{
Switch2 = 1;
Price2BuyA = CyclePrice;
Price2BuyB = BarNumber;
SellSwitchB = FALSE;
BuySwitchB = FALSE;
}
}
}
}
LineBuffer[pos] = 0;
MajorCycleSell[pos] = 0;
MajorCycleBuy[pos] = 0;
}
return(0);
}

double ZeroLag(double price, int length, int pos)
{
if (length < 3)
{
return(price);
}
double aa = MathExp(-1.414*3.14159 / length);
double bb = 2*aa*MathCos(1.414*180 / length);
double CB = bb;
double CC = -aa*aa;
double CA = 1 - CB - CC;
double CD = CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
return(CD);
}
 
#6
Code:
// ###############################################################
// #include <Jxx_Include.afl> OR include functions
// ###############################################################

function JRSX ( Period )
{

    f88 = 0; f90 = 0; f0 = 0; v4 = 0;   v8 = 0; vC = 0; v10 = 0; v14 = 0; v18 = 0; v20 = 0;
    f8 = 0; f10 = 0; f18 = 0; f20 = 0; f28 = 0; f30 = 0; f38 = 0; f48 = 0; v1C = 0;
    f50 = 0; f58 = 0; f60 = 0; f68 = 0; f70 = 0; f78 = 0; f80 = 0; f40 = 0;

    f90 = 1.0;
    f0  = 0.0;

    if ( Period-1 >= 5 )
        f88 = Period-1.0;
    else
        f88 = 5.0;

    f8 = 100.0 * ((H[0]+L[0]+Close[0])/3);
    f18 = 3.0 / (Period + 2.0);
    f20 = 1.0 - f18;

   for ( i = 1; i < BarCount; i++ )
    {
        if (f88 <= f90) f90 = f88 + 1; else f90 = f90 + 1;
        f10 = f8;
//    f8 = 100*Close[i];
        f8 = 100.0*((H[i]+L[i]+C[i])/3);
        v8 = f8 - f10;
        f28 = f20 * f28 + f18 * v8;
        f30 = f18 * f28 + f20 * f30;
        vC = f28 * 1.5 - f30 * 0.5;
        f38 = f20 * f38 + f18 * vC;
        f40 = f18 * f38 + f20 * f40;
        v10 = f38 * 1.5 - f40 * 0.5;
        f48 = f20 * f48 + f18 * v10;
        f50 = f18 * f48 + f20 * f50;
        v14 = f48 * 1.5 - f50 * 0.5;
        f58 = f20 * f58 + f18 * abs (v8);
        f60 = f18 * f58 + f20 * f60;
        v18 = f58 * 1.5 - f60 * 0.5;
        f68 = f20 * f68 + f18 * v18;

        f70 = f18 * f68 + f20 * f70;
        v1C = f68 * 1.5 - f70 * 0.5;
        f78 = f20 * f78 + f18 * v1C;
        f80 = f18 * f78 + f20 * f80;
        v20 = f78 * 1.5 - f80 * 0.5;

        if ((f88 >= f90) && (f8 != f10)) f0 = 1.0;
        if ((f88 == f90) && (f0 == 0.0)) f90 = 0.0;
        if ((f88 < f90) && (v20 > 0.0000000001))
        {
            v4 = (v14 / v20 + 1.0) * 50.0;
            if (v4 > 100.0) v4 = 100.0;
            if (v4 < 0.0) v4 = 0.0;
        }
        else
        {
            v4 = 50.0;
        }

        rsx[i] = v4;
    }

    return rsx;
}
function JMA( array, per )
{
    TN1=MA(array,per);
    s1=0;
    for( i = 0; i < per; i=i+1 )
    {
        s1=s1+((per-(2*i)-1)/2)*Ref(array,-i);
    }
    return TN1+(((per/2)+1)*S1)/((per+1)*per);
}

// --- End of include functions -------------------------


// == main() ========================================
// == {

// 1. Replace WMA() to JMA()
// 2. Replace RSI() to JRSX()


n = Param("Average", 7, 5, 20, 1 );

R1= JMA( JRSX(n),n );   //<==< WMA(RSI(n),n);
Plot(JRSX(n),"MRSI(7)", colorRed, styleLine);
Plot(R1,"MR1", colorBlue, styleLine);


StRSI=100*(JRSX(n)-LLV(JRSX(n),n))/(HHV(JRSX(n),n)-LLV(JRSX(n),n));
S= JMA(strsi,5); //<==< WMA(strsi,5);
Plot(S,"MStRSI", colorDarkYellow, 1);

Plot(20,"", 11, styleLine);
Plot(80,"", 11, styleLine);

top=IIf(s<20,20,IIf(s>80,s,20));
bot=IIf(s<20,s,IIf(s>80,80,20));

// == } main() //=======================================
In the following picture you can notice that the "S= JMA(strsi,5)" is not plotting on lower timeframe chart i.e. 05 minutes or below. How to fix this issue in AmiBroker? I have coded the same thing in Tradingview and it's working just fine. Also, the problem is happening in some scrips, not for all.
Error.png

NIFTY_2023-03-12_17-44-57.png
 
Last edited:

Similar threads