マルチタイムフレーム・インディケーター - ページ 669 1...662663664665666667668669670671672673674675676...1222 新しいコメント Mladen Rakic 2014.04.13 11:55 #6681 alessandromagno: こんにちは、どなたかこのインディをMTFインディにできませんか?ありがとうございました!!! wprv2.mq4 アレッサンドロマーニョ 今すぐ試す 更新版はこちらに掲載されています :https://www.mql5.com/en/forum/173574 ファイル: wprv2_mtf.mq4 8 kb dmnik 2014.04.13 14:32 #6682 ヘルプ、お願いします ! タイムゾーンの設定が必要です。 ファイル: .............png 8 kb market_hours_forexzig.zip 13 kb William Snyder 2014.04.13 15:50 #6683 DMNIK: 助けてください!タイムゾーンの設定が必要です。 Dmnik、そのインジケータは逆コンパイルされたバージョンで、オリジナルのソースコードを持っている可能性はありますか? Mladen Rakic 2014.04.13 20: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 20:14 #6685 vaider:newtrend.mq4mtf version_ ありがとうございました。 ヴァイダー、mtfにしました。 更新版はこちらに掲載しました :https://www.mql5.com/en/forum/173574 ファイル: new_trend_mtf.png 57 kb newtrend_mtf.mq4 5 kb Mladen Rakic 2014.04.13 21: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 21: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 23:01 #6688 こんにちは、プログラマーの皆さん。 バックテストから、このラグエレフィルターが特に面白いと思いました。これは再描画されるのでしょうか?オプションに "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 コーディングのヘルプ ラゲールインジケータ William Snyder 2014.04.13 23:11 #6689 thefxpros: こんにちは、プログラマーの皆さん、その場で1つだけ質問させてください。バックテストで、このラゲールフィルタが特に面白いと思いました。これは再描画されるのでしょうか?オプションに "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); } Thefxpros、私は適応型と言いたいところですが、リペイントではありません。 Mladen Rakic 2014.04.13 23:12 #6690 thefxpros: こんにちは、プログラマーの皆さん、その場で1つだけ質問させてください。 バックテストで、このラゲールフィルタが特に面白いと思いました。これは再描画されるのでしょうか?オプションに "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); } thefxpros アダプティブはリペイントを意味するものではありません。アダプテーションは全く別のものです。 laguerre : no, it does not repaint.ルックバックは、単に適応に使用されるデータをサンプリングするために使用される期間です(そしてそれは適応のために以前のラグエアの値の差異/運動量に価格の一種の "生の確率"を使用している)。 1...662663664665666667668669670671672673674675676...1222 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、どなたかこのインディをMTFインディにできませんか?
ありがとうございました!!!
wprv2.mq4アレッサンドロマーニョ
今すぐ試す
更新版はこちらに掲載されています :https://www.mql5.com/en/forum/173574
ヘルプ、お願いします !
タイムゾーンの設定が必要です。
助けてください!タイムゾーンの設定が必要です。
Dmnik、そのインジケータは逆コンパイルされたバージョンで、オリジナルのソースコードを持っている可能性はありますか?
新トレンドインジケータ :newtrend_mtf_nmc.mq4 を更新しました。
元々はこちらで公開されていました :https://www.mql5.com/en/forum/173574/page389
newtrend.mq4mtf version_ ありがとうございました。
ヴァイダー、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);
}
こんにちは、プログラマーの皆さん、その場で1つだけ質問させてください。
バックテストで、このラゲールフィルタが特に面白いと思いました。これは再描画されるのでしょうか?オプションに "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);
}
Thefxpros、私は適応型と言いたいところですが、リペイントではありません。
こんにちは、プログラマーの皆さん、その場で1つだけ質問させてください。
バックテストで、このラゲールフィルタが特に面白いと思いました。これは再描画されるのでしょうか?オプションに "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);
}
thefxpros
laguerre : no, it does not repaint.ルックバックは、単に適応に使用されるデータをサンプリングするために使用される期間です(そしてそれは適応のために以前のラグエアの値の差異/運動量に価格の一種の "生の確率"を使用している)。