You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hello, friends. It is great indicator Dynamic_Momentum_Index for Thinkorswim. It is possible to rewrite it for metatrader 4?. Or maybe someone has such indicatorfor MT4?
declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' must be positive: " + DYMILengthLowerLimit);assert(DYMILength between DYMILengthLowerLimit and DYMILengthUpperLimit, "'dymi length' must be between lower and upper limit: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 precision for ema multiplierdef expIndex = if limitedLength == 0 then 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) then 1 else expIndex;def chg = price - price[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex to bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex to bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5));DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("OverSold", GetColor(1));DYMI.AssignValueColor(if RSI > overbought then DYMI.Color("OverBought") else if RSI =OverBought, "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else double.nan;Dotup.setStyle(curve.POINTS);Dotup.setPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal", Alert.BAR, Sound.ring);
Hello, friends. It is great indicator Dynamic_Momentum_Index for Thinkorswim. It is possible to rewrite it for metatrader 4?. Or maybe someone has such indicatorfor MT4?
declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' must be positive: " + DYMILengthLowerLimit);assert(DYMILength between DYMILengthLowerLimit and DYMILengthUpperLimit, "'dymi length' must be between lower and upper limit: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 precision for ema multiplierdef expIndex = if limitedLength == 0 then 1 else max(1, bn - ceil(-5 / lg(1 - sf)));def fromIndex = if isNan(expIndex) then 1 else expIndex;def chg = price - price[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex to bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex to bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5));DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("OverSold", GetColor(1));DYMI.AssignValueColor(if RSI > overbought then DYMI.Color("OverBought") else if RSI =OverBought, "OverBought", Alert.BAR, Sound.ring);Alert (DYMI=OverBought then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else double.nan;Dotup.setStyle(curve.POINTS);Dotup.setPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal", Alert.BAR, Sound.ring);
olvus,
See this post : https://www.mql5.com/en/forum/172919/page4 . Maybe that helps
Hi mladen, I would like to ask you this favour.... have you the possibility to translate this program for MT4?
Thank you anyway..
THIS IS THE PROGRAM IN OTHER LANGUAGE:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;
// var1= ((H/C[1])-1)*V;
// var2= ((L/C[1]-1)*V*(-1);
// domanda= MOV(var1,450,S);
// offerta= MOV(var2,450,S);
// indzona1= CreateWiewport(100);
// PlotChart(domanda, indzona1, green, solid, 1);
// PlotChart(offerta, indzona1, red, solid, 1);THIS IS MY WORK FOR MT4 LANGUAGE, BUT AFTER THE LATEST UPDATE, IT DOESN'T WORK ANYMORE:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
extern int periodo=128;
double DOMANDA[];
double OFFERTA[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorDigits(6);
IndicatorBuffers(2);
SetIndexBuffer(0,DOMANDA);
SetIndexBuffer(1,OFFERTA);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit = Bars - counted_bars;
double var_dom[10000];
double var_off[10000];
ArraySetAsSeries(var_dom,true);
ArraySetAsSeries(var_off,true);
for(int i=0; i<limit; i++)
{
var_dom = ((High/Close)-1)*Volume;
var_off = ((Low/Close)-1)*Volume * (-1);
DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);
OFFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);
}
return(0);
}//+------------------------------------------------------------------+
Hi mladen, I would like to ask you this favour.... have you the possibility to translate this program for MT4?
Thank you anyway..
THIS IS THE PROGRAM IN OTHER LANGUAGE:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;
// var1= ((H/C[1])-1)*V;
// var2= ((L/C[1]-1)*V*(-1);
// domanda= MOV(var1,450,S);
// offerta= MOV(var2,450,S);
// indzona1= CreateWiewport(100);
// PlotChart(domanda, indzona1, green, solid, 1);
// PlotChart(offerta, indzona1, red, solid, 1);THIS IS MY WORK FOR MT4 LANGUAGE, BUT AFTER THE LATEST UPDATE, IT DOESN'T WORK ANYMORE:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
extern int periodo=128;
double DOMANDA[];
double OFFERTA[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorDigits(6);
IndicatorBuffers(2);
SetIndexBuffer(0,DOMANDA);
SetIndexBuffer(1,OFFERTA);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit = Bars - counted_bars;
double var_dom[10000];
double var_off[10000];
ArraySetAsSeries(var_dom,true);
ArraySetAsSeries(var_off,true);
for(int i=0; i<limit; i++)
{
var_dom = ((High/Close)-1)*Volume;
var_off = ((Low/Close)-1)*Volume * (-1);
DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);
OFFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);
}
return(0);
}//+------------------------------------------------------------------+Stephan
Here you go :
Stephan Here you go :
Yeesss, perfect !!!!
Thank you so much!!!
mr. mladen, it is possible to rewrite thinkorswim indicator to metatrader 4 indicator (post 2474)?
Hi everyone ,
say I have a function that loops through all market order and select the last one using lastTicket(). then I use ot = orderopentime() . how do I get the value of ot such that I can use the value of ot in any other function of the program. i don't want to call checko() from inside loop through all function eg
void checko()
{
if (ot>presetdatetime)
{
closeorder();
}
}
Hi everyone ,
say I have a function that loops through all market order and select the last one using lastTicket(). then I use ot = orderopentime() . how do I get the value of ot such that I can use the value of ot in any other function of the program. i don't want to call checko() from inside loop through all function eg
void checko()
{
if (ot>presetdatetime)
{
closeorder();
}
}hermes
A question : by last order ticket do you mean the greatest (which is usually the newest order) or smallest (which is usually the oldest order)?
hermes A question : by last order ticket do you mean the greatest (which is usually the newest order) or smallest (which is usually the oldest order)?
Thanks Mladen, I mean the greatest which is the newest order.
Thanks Mladen, I mean the greatest which is the newest order.
then you can use a function like this one :
{
int largestTicketNo = -1;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
largestTicketNo = MathMax(largestTicketNo,OrderTicket());
}
//
//
//
//
//
if (largestTicketNo>-1 )
{
if (OrderSelect(largestTicketNo,SELECT_BY_TICKET,MODE_TRADES))
if (OrderOpenTime()>timeLimit)
OrderDelete(largestTicketNo);
}
}PS: it does not make a difference among symbols or eventual magic numbers. If you need those to be checcked too, than some additional code needs to be added to the above function