다중 기간 표시기 - 페이지 671 1...664665666667668669670671672673674675676677678...1224 새 코멘트 William Snyder 2014.04.13 13:50 #6701 DMNIK: 도와주세요 ! 시간대 설정이 필요합니다. Dmnik, 해당 표시기는 원래 소스 코드가 있을 경우 디컴파일된 버전입니다. Mladen Rakic 2014.04.13 18:14 #6702 업데이트된 새로운 추세 표시기: 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 #6703 vaider: newtrend.mq4 mtf version_ 감사합니다! Vaider, 그것을 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 #6704 업데이트된 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 #6705 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 #6706 안녕하세요 프로그래머, 즉석에서 단 하나의 질문입니다. 백테스트 에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다. 일종의 적응형/재도장 표시기인가요? //------------------------------------------------------------------ // //------------------------------------------------------------------ #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 Coding help 코딩 도움말 William Snyder 2014.04.13 21:11 #6707 thefxpros: 안녕하세요 프로그래머, 즉석에서 단 하나의 질문입니다. 백테스트에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다. 일종의 적응형/재도장 표시기인가요? //------------------------------------------------------------------ // //------------------------------------------------------------------ #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); } fxpros, 나는 적응형이라고 말하고 싶지만 다시 칠하지는 않습니다. Mladen Rakic 2014.04.13 21:12 #6708 thefxpros: 안녕하세요 프로그래머, 즉석에서 단 하나의 질문. 백테스트에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다. 일종의 적응형/재도장 표시기인가요? //------------------------------------------------------------------ // //------------------------------------------------------------------ #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 현재 : 아니요, 다시 칠하지 않습니다. 룩백은 적응에 사용될 데이터를 샘플링하는 데 사용되는 기간입니다(이전 라게르 값에 대한 일종의 "원시 확률적 " 가격을 사용). 적응을 위한 차이/모멘텀 dmnik 2014.04.14 03:53 #6709 [Цитата = mrtools; 673929]. Dmnik, что показатель является декомпилированы версия ли шанс у вас есть исходный код [/ 인용] 해당 시스템의 이 표시기입니다. IA 3000핍 Mladen Rakic 2014.04.14 04:50 #6710 DMNIK: [Цитата = mrtools; 673929]. Dmnik, что показатель является декомпилированы версия ли шанс у вас есть исходный код [/ 인용] 해당 시스템의 이 표시기입니다. 그것은 중요하지 않습니다 여전히 디컴파일된 코드입니다. 추신: 코드에서 이미 PC의 gmt 시간대 를 조정합니다. 1...664665666667668669670671672673674675676677678...1224 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
도와주세요 ! 시간대 설정이 필요합니다.
Dmnik, 해당 표시기는 원래 소스 코드가 있을 경우 디컴파일된 버전입니다.
업데이트된 새로운 추세 표시기: newtrend_mtf_nmc.mq4
원래 여기에 게시되었습니다 : https://www.mql5.com/en/forum/173574/page389
newtrend.mq4 mtf version_ 감사합니다!
Vaider, 그것을 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
안녕하세요 프로그래머, 즉석에서 단 하나의 질문입니다.
백테스트 에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다.
일종의 적응형/재도장 표시기인가요?
//
//------------------------------------------------------------------
#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);
}
안녕하세요 프로그래머, 즉석에서 단 하나의 질문입니다.
백테스트에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다.
일종의 적응형/재도장 표시기인가요?
//
//------------------------------------------------------------------
#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);
}
fxpros, 나는 적응형이라고 말하고 싶지만 다시 칠하지는 않습니다.
안녕하세요 프로그래머, 즉석에서 단 하나의 질문.
백테스트에서 나는 이 라게르 필터가 특히 흥미롭다는 것을 발견했습니다. 다시 칠합니까? 옵션에 "lookback" 변수가 표시되기 때문에 묻습니다.
일종의 적응형/재도장 표시기인가요?
//
//------------------------------------------------------------------
#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 현재 : 아니요, 다시 칠하지 않습니다. 룩백은 적응에 사용될 데이터를 샘플링하는 데 사용되는 기간입니다(이전 라게르 값에 대한 일종의 "원시 확률적 " 가격을 사용). 적응을 위한 차이/모멘텀
[Цитата = mrtools; 673929]. Dmnik, что показатель является декомпилированы версия ли шанс у вас есть исходный код [/ 인용]
해당 시스템의 이 표시기입니다.
IA 3000핍
[Цитата = mrtools; 673929]. Dmnik, что показатель является декомпилированы версия ли шанс у вас есть исходный код [/ 인용]
해당 시스템의 이 표시기입니다.
그것은 중요하지 않습니다
여전히 디컴파일된 코드입니다.
추신: 코드에서 이미 PC의 gmt 시간대 를 조정합니다.