多时间框架指标 - 页 669 1...662663664665666667668669670671672673674675676...1223 新评论 Mladen Rakic 2014.04.13 09:55 #6681 alessandromagno: 你好,谁能把这个indi变成MTF indi?非常感谢! wprv2.mq4 尊敬的各位来宾 现在就试试吧 更新后的版本发布在这里:https://www.mql5.com/en/forum/173574 附加的文件: wprv2_mtf.mq4 8 kb dmnik 2014.04.13 12:32 #6682 请帮助我们! 需要时区设置。 附加的文件: .............png 8 kb market_hours_forexzig.zip 13 kb William Snyder 2014.04.13 13:50 #6683 DMNIK: 请帮忙!需要时区设置。 Dmnik,那个指标是一个反编译的版本,你是否有原始的源代码。 Mladen Rakic 2014.04.13 18:14 #6684 更新的新趋势指标:newtrend_mtf_nmc.mq4 最初它被张贴在这里 :https://www.mql5.com/en/forum/173574/page389 附加的文件: newtrend_mtf_nmc.mq4 5 kb new_trend.gif 65 kb William Snyder 2014.04.13 18:14 #6685 vaider:newtrend.mq4mtf 版本_谢谢! 韦德,把它做成了mtf。 更新后的版本贴在这里:https://www.mql5.com/en/forum/173574 附加的文件: new_trend_mtf.png 57 kb newtrend_mtf.mq4 5 kb Mladen Rakic 2014.04.13 19:36 #6686 更新的3条止损:3barstoploss_mtf_nmc.mq4 原文在此发布:https://www.mql5.com/en/forum/173574/page389 附加的文件: 3_bar_sl.gif 65 kb 3barstoploss_mtf_nmc.mq4 6 kb Mladen Rakic 2014.04.13 19:37 #6687 niqcom: 你好,可以把这个指标做成MTF吗?请.....3barstoploss.mq4 非常感谢您! 尼科姆 这里是该指标的一个多时间框架版本 最新版本发布在这里:https://www.mql5.com/en/forum/173574 附加的文件: 3_bar_stop_mtf.gif 36 kb 3barstoploss_mtf.mq4 6 kb Fausto Nunziante Del Gaudio 2014.04.13 21:01 #6688 嗨,程序员们,只有一个问题是关于飞行的。 在一次回测 中,我发现这个laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。 它是一种自适应/重绘的指标吗? //------------------------------------------------------------------ // //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Orange #property indicator_color3 Orange #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 extern string TimeFrame = "Current time frame"; extern int LookBack = 20; extern int Median = 5; extern int Price = PRICE_MEDIAN; double Filter[]; double Filterda[]; double Filterdb[]; double Diff[]; double Slope[]; double sortDiff[]; string indicatorFileName; bool returnBars; int timeFrame; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int init() { IndicatorBuffers(5); SetIndexBuffer(0,Filter); SetIndexBuffer(1,Filterda); SetIndexBuffer(2,Filterdb); SetIndexBuffer(3,Diff); SetIndexBuffer(4,Slope); ArrayResize(sortDiff,Median); indicatorFileName = WindowExpertName(); returnBars = TimeFrame == "returnBars"; if (returnBars) return(0); timeFrame = stringToTimeFrame(TimeFrame); return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(Bars-counted_bars,Bars-1); if (returnBars) { Filter[0] = limit+1; return(0); } if (timeFrame!=Period()) { limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period())); if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (int i=limit; i>=0; i--) { int y = iBarShift(NULL,timeFrame,Time); Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y); Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return(0); } // // // // // if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (i=limit; i>=0; i--) { double price = iMA(NULL,0,1,0,MODE_SMA,Price,i); Diff = MathAbs(price - Filter); double hi = Diff[ArrayMaximum(Diff,LookBack,i)]; double lo = Diff[ArrayMinimum(Diff,LookBack,i)]; double alpha = 0; if (hi!=lo) { for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo); ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND); if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2]; else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2; } Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; Slope = Slope; if (Filter>Filter) Slope = 1; if (Filter<Filter) Slope = -1; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double workLagFil[][4]; double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0) { if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4; if (gamma<=0) return(price); // // // // // workLagFil = (1.0 - gamma)*price + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; // // // // // return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0); } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // void CleanPoint(int i,double& first[],double& second[]) { if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE)) second = EMPTY_VALUE; else if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE)) first = EMPTY_VALUE; } // // // // // void PlotPoint(int i,double& first[],double& second[],double& from[]) { if (first == EMPTY_VALUE) { if (first == EMPTY_VALUE) { first = from; first = from; second = EMPTY_VALUE; } else { second = from; second = from; first = EMPTY_VALUE; } } else { first = from; second = EMPTY_VALUE; } } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; // // // // // int stringToTimeFrame(string tfs) { tfs = stringUpperCase(tfs); for (int i=ArraySize(iTfTable)-1; i>=0; i--) if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period())); return(Period()); } // // // // // string stringUpperCase(string str) { string s = str; for (int length=StringLen(str)-1; length>=0; length--) { int tchar = StringGetChar(s, length); if((tchar > 96 && tchar 223 && tchar < 256)) s = StringSetChar(s, length, tchar - 32); else if(tchar > -33 && tchar < 0) s = StringSetChar(s, length, tchar + 224); } return(s); } Multi Timeframe Indicators 编码帮助 编程问题,求高手指点,谢谢! William Snyder 2014.04.13 21:11 #6689 thefxpros: 嗨,程序员们,只有一个关于飞行的问题。在一次回溯测试中,我发现这个Laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。 它是一种自适应/重新绘制的指标吗? //------------------------------------------------------------------ // //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Orange #property indicator_color3 Orange #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 extern string TimeFrame = "Current time frame"; extern int LookBack = 20; extern int Median = 5; extern int Price = PRICE_MEDIAN; double Filter[]; double Filterda[]; double Filterdb[]; double Diff[]; double Slope[]; double sortDiff[]; string indicatorFileName; bool returnBars; int timeFrame; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int init() { IndicatorBuffers(5); SetIndexBuffer(0,Filter); SetIndexBuffer(1,Filterda); SetIndexBuffer(2,Filterdb); SetIndexBuffer(3,Diff); SetIndexBuffer(4,Slope); ArrayResize(sortDiff,Median); indicatorFileName = WindowExpertName(); returnBars = TimeFrame == "returnBars"; if (returnBars) return(0); timeFrame = stringToTimeFrame(TimeFrame); return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(Bars-counted_bars,Bars-1); if (returnBars) { Filter[0] = limit+1; return(0); } if (timeFrame!=Period()) { limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period())); if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (int i=limit; i>=0; i--) { int y = iBarShift(NULL,timeFrame,Time); Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y); Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return(0); } // // // // // if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (i=limit; i>=0; i--) { double price = iMA(NULL,0,1,0,MODE_SMA,Price,i); Diff = MathAbs(price - Filter); double hi = Diff[ArrayMaximum(Diff,LookBack,i)]; double lo = Diff[ArrayMinimum(Diff,LookBack,i)]; double alpha = 0; if (hi!=lo) { for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo); ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND); if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2]; else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2; } Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; Slope = Slope; if (Filter>Filter) Slope = 1; if (Filter<Filter) Slope = -1; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double workLagFil[][4]; double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0) { if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4; if (gamma<=0) return(price); // // // // // workLagFil = (1.0 - gamma)*price + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; // // // // // return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0); } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // void CleanPoint(int i,double& first[],double& second[]) { if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE)) second = EMPTY_VALUE; else if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE)) first = EMPTY_VALUE; } // // // // // void PlotPoint(int i,double& first[],double& second[],double& from[]) { if (first == EMPTY_VALUE) { if (first == EMPTY_VALUE) { first = from; first = from; second = EMPTY_VALUE; } else { second = from; second = from; first = EMPTY_VALUE; } } else { first = from; second = EMPTY_VALUE; } } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; // // // // // int stringToTimeFrame(string tfs) { tfs = stringUpperCase(tfs); for (int i=ArraySize(iTfTable)-1; i>=0; i--) if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period())); return(Period()); } // // // // // string stringUpperCase(string str) { string s = str; for (int length=StringLen(str)-1; length>=0; length--) { int tchar = StringGetChar(s, length); if((tchar > 96 && tchar 223 && tchar < 256)) s = StringSetChar(s, length, tchar - 32); else if(tchar > -33 && tchar < 0) s = StringSetChar(s, length, tchar + 224); } return(s); } Thefxpros,我认为是自适应的,但不是重绘的。 Mladen Rakic 2014.04.13 21:12 #6690 thefxpros: 嗨,程序员们,只有一个关于飞行的问题。 在一次回溯测试中,我发现这个Laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。它是一种自适应/重新绘制的指标吗?//------------------------------------------------------------------ // //------------------------------------------------------------------ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Orange #property indicator_color3 Orange #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 extern string TimeFrame = "Current time frame"; extern int LookBack = 20; extern int Median = 5; extern int Price = PRICE_MEDIAN; double Filter[]; double Filterda[]; double Filterdb[]; double Diff[]; double Slope[]; double sortDiff[]; string indicatorFileName; bool returnBars; int timeFrame; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int init() { IndicatorBuffers(5); SetIndexBuffer(0,Filter); SetIndexBuffer(1,Filterda); SetIndexBuffer(2,Filterdb); SetIndexBuffer(3,Diff); SetIndexBuffer(4,Slope); ArrayResize(sortDiff,Median); indicatorFileName = WindowExpertName(); returnBars = TimeFrame == "returnBars"; if (returnBars) return(0); timeFrame = stringToTimeFrame(TimeFrame); return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit = MathMin(Bars-counted_bars,Bars-1); if (returnBars) { Filter[0] = limit+1; return(0); } if (timeFrame!=Period()) { limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period())); if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (int i=limit; i>=0; i--) { int y = iBarShift(NULL,timeFrame,Time); Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y); Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return(0); } // // // // // if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb); for (i=limit; i>=0; i--) { double price = iMA(NULL,0,1,0,MODE_SMA,Price,i); Diff = MathAbs(price - Filter); double hi = Diff[ArrayMaximum(Diff,LookBack,i)]; double lo = Diff[ArrayMinimum(Diff,LookBack,i)]; double alpha = 0; if (hi!=lo) { for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo); ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND); if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2]; else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2; } Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0); Filterda = EMPTY_VALUE; Filterdb = EMPTY_VALUE; Slope = Slope; if (Filter>Filter) Slope = 1; if (Filter<Filter) Slope = -1; if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter); } return (0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double workLagFil[][4]; double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0) { if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4; if (gamma<=0) return(price); // // // // // workLagFil = (1.0 - gamma)*price + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil; // // // // // return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0); } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // void CleanPoint(int i,double& first[],double& second[]) { if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE)) second = EMPTY_VALUE; else if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE)) first = EMPTY_VALUE; } // // // // // void PlotPoint(int i,double& first[],double& second[],double& from[]) { if (first == EMPTY_VALUE) { if (first == EMPTY_VALUE) { first = from; first = from; second = EMPTY_VALUE; } else { second = from; second = from; first = EMPTY_VALUE; } } else { first = from; second = EMPTY_VALUE; } } //------------------------------------------------------------------- // //------------------------------------------------------------------- // // // // // string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; // // // // // int stringToTimeFrame(string tfs) { tfs = stringUpperCase(tfs); for (int i=ArraySize(iTfTable)-1; i>=0; i--) if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period())); return(Period()); } // // // // // string stringUpperCase(string str) { string s = str; for (int length=StringLen(str)-1; length>=0; length--) { int tchar = StringGetChar(s, length); if((tchar > 96 && tchar 223 && tchar < 256)) s = StringSetChar(s, length, tchar - 32); else if(tchar > -33 && tchar < 0) s = StringSetChar(s, length, tchar + 224); } return(s); } Thefxpros 使一个指标具有适应性并不意味着使其重新绘制 适应性从来不意味着重新绘制(在许多适应性指标中,现在我想不起有哪一个会重新绘制)。适应是完全不同的东西。 至于那个laguerre:不,它不会重绘。回头看是一个简单的时期,用于采样数据,然后用于适应(它使用一种 "原始随机"的价格和以前的滞后值的差异/时刻来适应)。 1...662663664665666667668669670671672673674675676...1223 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好,谁能把这个indi变成MTF indi?
非常感谢!
wprv2.mq4尊敬的各位来宾
现在就试试吧
更新后的版本发布在这里:https://www.mql5.com/en/forum/173574
请帮助我们!
需要时区设置。
请帮忙!需要时区设置。
Dmnik,那个指标是一个反编译的版本,你是否有原始的源代码。
更新的新趋势指标:newtrend_mtf_nmc.mq4
最初它被张贴在这里 :https://www.mql5.com/en/forum/173574/page389
newtrend.mq4mtf 版本_谢谢!
韦德,把它做成了mtf。
更新后的版本贴在这里:https://www.mql5.com/en/forum/173574
更新的3条止损:3barstoploss_mtf_nmc.mq4
原文在此发布:https://www.mql5.com/en/forum/173574/page389
你好,可以把这个指标做成MTF吗?请.....
3barstoploss.mq4
非常感谢您!尼科姆
这里是该指标的一个多时间框架版本
最新版本发布在这里:https://www.mql5.com/en/forum/173574
嗨,程序员们,只有一个问题是关于飞行的。
在一次回测 中,我发现这个laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。
它是一种自适应/重绘的指标吗?
//
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern string TimeFrame = "Current time frame";
extern int LookBack = 20;
extern int Median = 5;
extern int Price = PRICE_MEDIAN;
double Filter[];
double Filterda[];
double Filterdb[];
double Diff[];
double Slope[];
double sortDiff[];
string indicatorFileName;
bool returnBars;
int timeFrame;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0,Filter);
SetIndexBuffer(1,Filterda);
SetIndexBuffer(2,Filterdb);
SetIndexBuffer(3,Diff);
SetIndexBuffer(4,Slope);
ArrayResize(sortDiff,Median);
indicatorFileName = WindowExpertName();
returnBars = TimeFrame == "returnBars"; if (returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { Filter[0] = limit+1; return(0); }
if (timeFrame!=Period())
{
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y);
Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return(0);
}
//
//
//
//
//
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (i=limit; i>=0; i--)
{
double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);
Diff = MathAbs(price - Filter);
double hi = Diff[ArrayMaximum(Diff,LookBack,i)];
double lo = Diff[ArrayMinimum(Diff,LookBack,i)];
double alpha = 0;
if (hi!=lo)
{
for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo);
ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND);
if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2];
else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2;
}
Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
Slope = Slope;
if (Filter>Filter) Slope = 1;
if (Filter<Filter) Slope = -1;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
double workLagFil[][4];
double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0)
{
if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4;
if (gamma<=0) return(price);
//
//
//
//
//
workLagFil = (1.0 - gamma)*price + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
//
//
//
//
//
return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0);
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
void CleanPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
second = EMPTY_VALUE;
else
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
second = EMPTY_VALUE;
}
else {
second = from;
second = from;
first = EMPTY_VALUE;
}
}
else
{
first = from;
second = EMPTY_VALUE;
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));
return(Period());
}
//
//
//
//
//
string stringUpperCase(string str)
{
string s = str;
for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, length);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, length, tchar - 32);
else if(tchar > -33 && tchar < 0)
s = StringSetChar(s, length, tchar + 224);
}
return(s);
}
嗨,程序员们,只有一个关于飞行的问题。
在一次回溯测试中,我发现这个Laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。
它是一种自适应/重新绘制的指标吗?
//
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern string TimeFrame = "Current time frame";
extern int LookBack = 20;
extern int Median = 5;
extern int Price = PRICE_MEDIAN;
double Filter[];
double Filterda[];
double Filterdb[];
double Diff[];
double Slope[];
double sortDiff[];
string indicatorFileName;
bool returnBars;
int timeFrame;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0,Filter);
SetIndexBuffer(1,Filterda);
SetIndexBuffer(2,Filterdb);
SetIndexBuffer(3,Diff);
SetIndexBuffer(4,Slope);
ArrayResize(sortDiff,Median);
indicatorFileName = WindowExpertName();
returnBars = TimeFrame == "returnBars"; if (returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { Filter[0] = limit+1; return(0); }
if (timeFrame!=Period())
{
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y);
Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return(0);
}
//
//
//
//
//
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (i=limit; i>=0; i--)
{
double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);
Diff = MathAbs(price - Filter);
double hi = Diff[ArrayMaximum(Diff,LookBack,i)];
double lo = Diff[ArrayMinimum(Diff,LookBack,i)];
double alpha = 0;
if (hi!=lo)
{
for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo);
ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND);
if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2];
else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2;
}
Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
Slope = Slope;
if (Filter>Filter) Slope = 1;
if (Filter<Filter) Slope = -1;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
double workLagFil[][4];
double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0)
{
if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4;
if (gamma<=0) return(price);
//
//
//
//
//
workLagFil = (1.0 - gamma)*price + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
//
//
//
//
//
return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0);
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
void CleanPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
second = EMPTY_VALUE;
else
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
second = EMPTY_VALUE;
}
else {
second = from;
second = from;
first = EMPTY_VALUE;
}
}
else
{
first = from;
second = EMPTY_VALUE;
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));
return(Period());
}
//
//
//
//
//
string stringUpperCase(string str)
{
string s = str;
for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, length);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, length, tchar - 32);
else if(tchar > -33 && tchar < 0)
s = StringSetChar(s, length, tchar + 224);
}
return(s);
}
Thefxpros,我认为是自适应的,但不是重绘的。
嗨,程序员们,只有一个关于飞行的问题。
在一次回溯测试中,我发现这个Laguerre过滤器特别有趣。它是否会重绘?我这么问是因为我在选项中看到了 "回看 "变量。
它是一种自适应/重新绘制的指标吗?
//
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Orange
#property indicator_color3 Orange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
extern string TimeFrame = "Current time frame";
extern int LookBack = 20;
extern int Median = 5;
extern int Price = PRICE_MEDIAN;
double Filter[];
double Filterda[];
double Filterdb[];
double Diff[];
double Slope[];
double sortDiff[];
string indicatorFileName;
bool returnBars;
int timeFrame;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0,Filter);
SetIndexBuffer(1,Filterda);
SetIndexBuffer(2,Filterdb);
SetIndexBuffer(3,Diff);
SetIndexBuffer(4,Slope);
ArrayResize(sortDiff,Median);
indicatorFileName = WindowExpertName();
returnBars = TimeFrame == "returnBars"; if (returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { Filter[0] = limit+1; return(0); }
if (timeFrame!=Period())
{
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
Filter = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,0,y);
Slope = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",LookBack,Median,Price,4,y);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return(0);
}
//
//
//
//
//
if (Slope[limit]==-1) CleanPoint(limit,Filterda,Filterdb);
for (i=limit; i>=0; i--)
{
double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);
Diff = MathAbs(price - Filter);
double hi = Diff[ArrayMaximum(Diff,LookBack,i)];
double lo = Diff[ArrayMinimum(Diff,LookBack,i)];
double alpha = 0;
if (hi!=lo)
{
for (int j=0; j<Median; j++) sortDiff[j] = (Diff-lo)/(hi-lo);
ArraySort(sortDiff,WHOLE_ARRAY,0,MODE_ASCEND);
if (MathMod(Median,2.0) != 0) alpha = sortDiff[Median/2];
else alpha = (sortDiff[Median/2]+sortDiff[(Median/2)-1])/2;
}
Filter = iLaGuerreFilter(price, 1.0-alpha, i, 0);
Filterda = EMPTY_VALUE;
Filterdb = EMPTY_VALUE;
Slope = Slope;
if (Filter>Filter) Slope = 1;
if (Filter<Filter) Slope = -1;
if (Slope == -1) PlotPoint(i,Filterda,Filterdb,Filter);
}
return (0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
double workLagFil[][4];
double iLaGuerreFilter(double price, double gamma, int i, int instanceNo=0)
{
if (ArrayRange(workLagFil,0)!=Bars) ArrayResize(workLagFil,Bars); i=Bars-i-1; instanceNo*=4;
if (gamma<=0) return(price);
//
//
//
//
//
workLagFil = (1.0 - gamma)*price + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
workLagFil = -gamma*workLagFil + workLagFil + gamma*workLagFil;
//
//
//
//
//
return((workLagFil+2.0*workLagFil+2.0*workLagFil+workLagFil)/6.0);
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
void CleanPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
second = EMPTY_VALUE;
else
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
second = EMPTY_VALUE;
}
else {
second = from;
second = from;
first = EMPTY_VALUE;
}
}
else
{
first = from;
second = EMPTY_VALUE;
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));
return(Period());
}
//
//
//
//
//
string stringUpperCase(string str)
{
string s = str;
for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, length);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, length, tchar - 32);
else if(tchar > -33 && tchar < 0)
s = StringSetChar(s, length, tchar + 224);
}
return(s);
}
Thefxpros
使一个指标具有适应性并不意味着使其重新绘制
适应性从来不意味着重新绘制(在许多适应性指标中,现在我想不起有哪一个会重新绘制)。适应是完全不同的东西。
至于那个laguerre:不,它不会重绘。回头看是一个简单的时期,用于采样数据,然后用于适应(它使用一种 "原始随机"的价格和以前的滞后值的差异/时刻来适应)。