Martingale Trading Strategy - Afl
Martingale Trading Strategy - Afl
com
CAvg = ( O + H + L + C ) / 4;
SL = m * ATR( per );
Trend[0] = 1;
TSL[0] = 0;
TSL[BarCount - 1] = Null;
if( Trend[i - 1] == -1 )
{
if( CAvg[i] > TSL[i - 1] )
{
Trend[i] = 1;
TSL[i] = CAvg[i] - SL[i];
}
else
{
Trend[i] = -1;
if( ( CAvg[i] + SL[i] ) < TSL[i - 1] )
{
TSL[i] = CAvg[i] + SL[i];
}
else
{
TSL[i] = TSL[i - 1];
}
}
}
}
_SECTION_BEGIN( "AutoTrade-Intraday-Martingale.afl" );
intra = ParamToggle( "Activate Intraday Mode", "NO|YES" );
per10 = Param( "Trade Entry From(HHMM)", 920, 900, 2400, 1 );
per11 = Param( "Trade Entry Upto(HHMM)", 1445, 900, 2400, 1 );
per12 = Param( "Trade Exit(HHMM)", 1515, 900, 2300, 100 );
slp = Param( "StopLoss(Rs.)", 0, 0, 1000, 0.1 );
tsl= Param("Trail Stop(Rs.)", 0, 0, 100, 0.1);
tgtp = Param( "Target(Rs.)", 0, 0, 1000, 0.1 );
Col = ParamColor( "Color of Modified Signals", colorYellow );
instr= ParamList("Instrument Name","|EQ|FUTIDX|FUTSTK|OPTIDX|OPTSTK|FUTCOM");
delay= ParamToggle("Trade Intrabar?", "YES|Candle Completion");
stag= ParamStr("Strategy Tag", "STG1");
dlong= ParamToggle("Disable Long?", "NO|YES");
dshort= ParamToggle("Disable Short?", "NO|YES");
if(dlong){Buy=Sell=0;}
if(dshort){Short=Cover=0;}
dd= DaysSince1900();
d=prof= 0;
basicprice= LastValue(ValueWhen(Day()!=Ref(Day(),-1), C));
if(delay)
{Buy=Ref(Buy,-1); Sell=Ref(Sell,-1); Short= Ref(Short,-1); Cover= Ref(Cover,-1);}
if(slp>0)
sln= slp;
if(exposure>0)
qt= round(exposure/basicprice);
if(maxl>0)
qt= round(maxl/sln);
mtl=0;
if(mt=="Arithmetic" AND intra) mtl=1;
if(mt=="Geometric" AND intra) mtl=2;
Buy1 = Buy;
Sell1 = Sell;
Short1 = Short;
Cover1 = Cover;
Buy=Sell=Short=Cover=0;
bflag = sflag = sp=bp = 0;
slarr = tgtarr = Null;
profarr= qtarr= 0;
/*for updated afl code always check https://algoji.com/amibroker-autotrade-afl-
toolkit/ */
for ( i = 10; i < BarCount; i++ )
{
if(d==dd[i]) profarr[i]= profarr[i-1];
if ( ( Cover1[i] OR intraex[i]OR( H[i] > slarr[i-1] AND (sl>0 OR tsl>0) ) OR (
L[i] < tgtarr[i-1] AND tgt > 0 ) OR (dt>0 AND (profarr[i-1]+ (sp-C[i])*qtarr[i-
1])>=dt) OR (dl<0 AND (profarr[i-1]+ (sp-C[i])*qtarr[i-1])<=dl) ) AND sflag )
{
Cover[i] = 1;
CoverPrice[i]= C[i];
sflag = 0;
d= dd[i]; prof= sp-C[i];
if(d==dd[i]) profarr[i]= (prof*qtarr[i-1] + profarr[i-1]);
}
if ( tgtp )
tgtarr[i] = bp+tgtp;
}
if ( messageboard == 1 )
{
GfxSelectFont( "Tahoma", 13, 100 );
GfxSetBkMode( 1 );
GfxSetTextColor( colorWhite );
xx = Status( "pxchartwidth" );
Left = 1100;
width = 310;
x = 5;
x2 = 310;
y = pxHeight;
global algoji;
algoji = "k" +Name() + NumToStr( Interval() / 60, 1.0, False ) ;
return Var;
}
sym = Name();
//_TRACE("t"+t);
Checkdt=Nz(aStaticVarGet("lastdt"));
dt = LastValue( DateTime() );
Checkdtss=Nz(aStaticVarGet("lastdtss"));
dtss = LastValue( DateTime() );
Checkdtc=Nz(aStaticVarGet("lastdtc"));
dtc = LastValue( DateTime() );
Checkdts=Nz(aStaticVarGet("lastdts"));
dts = LastValue( DateTime() );
RTBuy = LastValue( Buy) AND Checkdt != dt;
RTShort = LastValue( Short) AND Checkdtss != dtss;
RTCover = LastValue( Cover) AND Checkdtc != dtc;
RTSell = LastValue( Sell) AND Checkdts != dts;
if ( RTBuy )
{
aStaticVarSet("IsLong",1 );
aStaticVarSet("lastdt",dt );
StaticVarSet("counter", Nz(StaticVarGet("counter"))+1 );
bp= NumToStr(Close[BarCount-1],1.2, False);
qty= NumToStr(qtarr[BarCount-1], 1.0, False);
_TRACE( "#"+Nz(StaticVarGet("counter"))+",LE,"+sym+",,," +bp
+","+qty+","+instr+",,");
AlgoJi_Signal(NumToStr(Nz(StaticVarGet("counter")),0,False),
"LE",sym,"M","",bp,qty,instr,stag);
}
if ( RTShort )
{
aStaticVarSet("IsShort",1 );
aStaticVarSet("lastdtss",dtss );
StaticVarSet("counter", Nz(StaticVarGet("counter"))+1 );
sp= NumToStr(Close[BarCount-1],1.2, False);
qty= NumToStr(qtarr[BarCount-1], 1.0, False);
_TRACE( "#"+Nz(StaticVarGet("counter"))+",SE,"+sym+",,," +sp
+","+qty+","+instr+",,");
AlgoJi_Signal(NumToStr(Nz(StaticVarGet("counter")),0,False),
"SE",sym,"M","",sp,qty,instr,stag);
}
_SECTION_END();
function GetSecondNum()
{
Time = Now( 4 );
Seconds = int( Time % 100 );
Minutes = int( Time / 100 % 100 );
Hours = int( Time / 10000 % 100 );
SecondNum = int( Hours * 60 * 60 + Minutes * 60 + Seconds );
return SecondNum;
}
if ( Button == 0 )
{
click = GetCursorMouseButtons() == 9;
Px = GetCursorXPosition( 1 );
Py = GetCursorYPosition( 1 );
x2 = x1 + 60;
y2 = y1 + 60;
GfxSelectSolidBrush( ColorRGB( 0, 102, 0 ) ); //buy
GfxSelectFont( "Tahoma", 13, 100 );
GfxSetBkMode( 1 );
GfxSetTextColor( colorWhite );
GfxRoundRect( x1, y1, x2, y2 , 7, 7 ) ;
GfxTextOut( "LE", x1 + 20, y1 + 20 );
sx1 = x2;
sy1 = y1;
sx2 = sx1 + 60;
sy2 = sy1 + 60;
GfxSelectSolidBrush( ColorRGB( 255, 204, 204 ) );//sell
GfxRoundRect( sx1, sy1, sx2, sy2 , 7, 7 ) ;
GfxSetTextColor( ColorRGB( 153, 0, 0 ) );
GfxTextOut( "SE", sx1 + 20, sy1 + 20 );
ex1 = x1;
ey1 = y1+60;
ex2 = ex1 + 60;
ey2 = ey1 + 60;
GfxSelectSolidBrush( ColorRGB( 255, 204, 204 ) );//sell
GfxRoundRect( ex1, ey1, ex2, ey2 , 7, 7 ) ;
GfxSetTextColor( ColorRGB( 153, 0, 0 ) );
GfxTextOut( "LX", ex1 + 20, ey1 + 20 );
if ( px > sx1 AND px<sx2 AND py>sy1 AND py < sy2 AND Click )
{
_TRACE( "# ," + NumToStr( DateTime(), formatDateTime ) + ", SHORT triggered
from button, " );
AlertIf( 2, "SOUND C:\\Windows\\Media\\tada.wav", "Audio alert", 2, 2,
1 );
StaticVarSet("counter", Nz(StaticVarGet("counter"))+1 );
PopupWindowEx( "ID:3", "SHORT", "Short Triggered from Button "+Name(), 1, -1,
-1 );
AlgoJi_Signal(NumToStr(Nz(StaticVarGet("counter")),0,False),
"SE",sym,"M","",sp,qty,instr,stag);
}
}
_SECTION_END();