再一次,套利,配对交易。 - 页 18 1...11121314151617181920 新评论 Maxim Dmitrievsky 2017.12.21 06:10 #171 Anatolii Zainchkovskii:我有一个普通的系统,缩水约为40%,但如果我从2010年开始运行它,我可能会看到亏损。而且指标与你的完全一样 我不想让它变得比现在更复杂。 Anatolii Zainchkovskii 2017.12.21 11:40 #172 Maxim Dmitrievsky: 而且指标与你的完全一样 这是最简单的事情......我不想让事情复杂化......我不这么认为,我的指标很笨拙,画出的东西无法理解......)但从你的技能来看,你有一个更准确的计算,可能包括一个万无一失的错误检查。 Maxim Dmitrievsky 2017.12.21 12:38 #173 Anatolii Zainchkovskii:我不这么认为,我有一个笨拙的工作,它画出了难以理解的东西),但从你的技能来看,你有更多的正确计算,而且可能有傻瓜的错误检查。这就是为什么你的测试可能更真实。有一些变体可以建立更有趣的模型,不仅使用价格,而且还使用指标值或其他东西......我已经把指标加到代码库里了,什么时候发布,你可以查一下......也许以后我会尝试用指标建立它(现在新年前我太懒了:) Anatolii Zainchkovskii 2017.12.21 17:59 #174 Maxim Dmitrievsky: 我有很多选择,通过不仅添加价格,而且添加指标值或其他东西来建立更有趣的模型......我稍后会试一下(我现在在新年前太懒了 :)我已经尝试了不同的模型,我没有发现任何状态的优势。我有很多想法,但没有意愿公开。如果你有一个飞行的想法方面的想法现在休息,我可以抛出几个想法,但在私人通信。 Maxim Dmitrievsky 2017.12.22 03:37 #175 Anatolii Zainchkovskii: 我试过不同的模型,但我没有发现任何统计上的优势。我有很多想法,但没有意愿把它们公开展示出来。如果你现在在想法方面有飞跃,我可以抛出几个想法,但要在私人信件中。我不相信思想的力量,也不相信外汇中的天才想法 )此外,几乎每个人都有同样的想法--害怕展示自己内心的秘密......但实际上,这是偏见和不必要的恐惧。协作和集体化统治世界 :D Aleksei Beliakov 2017.12.22 04:04 #176 Maxim Dmitrievsky: 我有很多选择,通过不仅添加价格,而且添加指标值或其他东西来建立更有趣的模型......我已经把指标放在代码库里了,你可以在它发布后立即查找......也许以后我会尝试用指标来构建它(现在过年前我太懒了:)我找不到这个链接。 Maxim Dmitrievsky 2017.12.22 04:07 #177 Aleksei Beliakov: 你能给我链接吗? 我找不到。版主还没有发布,正在等待。 Aleksei Beliakov 2017.12.22 04:11 #178 Maxim Dmitrievsky: 版主还没有公布,还在审查中。 你可以给我发邮件,或者把代码留在这里,我会研究一下。 Maxim Dmitrievsky 2017.12.22 04:16 #179 //+------------------------------------------------------------------+ //| cointegration_indicator.mq5 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ #property indicator_buffers 30 #property indicator_plots 30 #property indicator_type1 DRAW_LINE #property indicator_color1 clrMaroon #property indicator_type2 DRAW_LINE #property indicator_color2 clrGreen #property indicator_type3 DRAW_LINE #property indicator_color3 clrDarkOrange #property indicator_type4 DRAW_LINE #property indicator_color4 clrMidnightBlue #property indicator_type5 DRAW_LINE #property indicator_color5 clrOlive #property indicator_type6 DRAW_LINE #property indicator_color6 clrBlueViolet #property indicator_type7 DRAW_LINE #property indicator_color7 clrDarkMagenta #property indicator_type8 DRAW_LINE #property indicator_color8 clrChartreuse #property indicator_type9 DRAW_LINE #property indicator_color9 clrBlue #property indicator_type10 DRAW_LINE #property indicator_color10 clrBlueViolet #property indicator_type11 DRAW_LINE #property indicator_color11 clrBrown #property indicator_type12 DRAW_LINE #property indicator_color12 clrBurlyWood #property indicator_type13 DRAW_LINE #property indicator_color13 clrChartreuse #property indicator_type14 DRAW_LINE #property indicator_color14 clrChocolate #property indicator_type15 DRAW_LINE #property indicator_color15 clrCoral #property indicator_type16 DRAW_LINE #property indicator_color16 clrCornflowerBlue #property indicator_type17 DRAW_LINE #property indicator_color17 clrCornsilk #property indicator_type18 DRAW_LINE #property indicator_color18 clrCrimson #property indicator_type19 DRAW_LINE #property indicator_color19 clrCyan #property indicator_type20 DRAW_LINE #property indicator_color20 clrDarkBlue #property indicator_type21 DRAW_LINE #property indicator_color21 clrDarkBlue #property indicator_type22 DRAW_LINE #property indicator_color22 clrDarkBlue #property indicator_type23 DRAW_LINE #property indicator_color23 clrDarkBlue #property indicator_type24 DRAW_LINE #property indicator_color24 clrDarkBlue #property indicator_type25 DRAW_LINE #property indicator_color25 clrDarkBlue #property indicator_type26 DRAW_LINE #property indicator_color26 clrDarkBlue #property indicator_type27 DRAW_LINE #property indicator_color27 clrDarkBlue #property indicator_type28 DRAW_LINE #property indicator_color28 clrDarkBlue #property indicator_type29 DRAW_LINE #property indicator_color29 clrDarkBlue #property indicator_type30 DRAW_LINE #property indicator_color30 clrDarkBlue #include <Math\Alglib\alglib.mqh> #include <Math\Stat\Math.mqh> CLinReg linear_regression; CLinearModel linear_model; CLRReport linear_report; int retcode; CMatrixDouble LRmatrix; input int learning_depth = 500; input string SymbolsList = "AUDUSD,GBPUSD,NZDUSD"; double mainsynthetic[], zscore[]; int splittedPairsNumber; string splittedPairs[]; static datetime last_time = 0; struct spreads { string symbol; double spreadBuffer[]; double pricesBuffer[]; double zscore[]; double weights[]; }; spreads allspreads[]; bool second_call=false; int OnInit() { //--- indicator buffers mapping string sep = ","; ushort u_sep; u_sep = StringGetCharacter(sep,0); splittedPairsNumber = StringSplit(SymbolsList, u_sep, splittedPairs); ArrayResize(allspreads, splittedPairsNumber); string smbls; if (splittedPairsNumber > 0) { for (int i=0; i < splittedPairsNumber; i++) { getSymbolByName(splittedPairs[i]); SetIndexBuffer(i,allspreads[i].zscore, INDICATOR_DATA); ArraySetAsSeries(allspreads[i].spreadBuffer, true); ArrayResize(allspreads[i].spreadBuffer, learning_depth); ArrayResize(allspreads[i].pricesBuffer,learning_depth); ArraySetAsSeries(allspreads[i].pricesBuffer,true); ArrayInitialize(allspreads[i].pricesBuffer,0); ArrayResize(allspreads[i].weights,splittedPairsNumber); ArraySetAsSeries(allspreads[i].zscore, true); ArrayInitialize(allspreads[i].zscore, 0); allspreads[i].symbol = splittedPairs[i]; PlotIndexSetString(i, PLOT_LABEL, allspreads[i].symbol); PlotIndexSetInteger(i,PLOT_LINE_WIDTH, 2); smbls += (splittedPairs[i] + ", ") ; } } SetIndexBuffer(splittedPairsNumber, zscore, INDICATOR_DATA); PlotIndexSetInteger(splittedPairsNumber, PLOT_DRAW_TYPE, DRAW_HISTOGRAM); PlotIndexSetInteger(splittedPairsNumber, PLOT_LINE_STYLE, STYLE_DOT); PlotIndexSetInteger(splittedPairsNumber, PLOT_LINE_WIDTH, 1); PlotIndexSetInteger(splittedPairsNumber, PLOT_LINE_COLOR, clrSilver); PlotIndexSetString(splittedPairsNumber, PLOT_LABEL, "Z-SCORE"); LRmatrix.Resize(learning_depth, splittedPairsNumber); ArrayResize(mainsynthetic, learning_depth); ArraySetAsSeries(mainsynthetic, true); ArrayResize(zscore, learning_depth); ArraySetAsSeries(zscore, true); ArrayInitialize(mainsynthetic,0); ArrayInitialize(zscore,0); IndicatorSetString(INDICATOR_SHORTNAME, "Z-score: " + smbls); IndicatorSetInteger(INDICATOR_DIGITS, 2); IndicatorSetInteger(INDICATOR_LEVELS, 6); IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 1); IndicatorSetDouble(INDICATOR_LEVELVALUE, 1, -1); IndicatorSetDouble(INDICATOR_LEVELVALUE, 2, 2); IndicatorSetDouble(INDICATOR_LEVELVALUE, 3, -2); IndicatorSetDouble(INDICATOR_LEVELVALUE, 4, 3); IndicatorSetDouble(INDICATOR_LEVELVALUE, 5, -3); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double& price[]) { bool first_call=(prev_calculated==0); if(first_call || second_call) { if(fillPricesToBuffers(learning_depth)) { fillLRmatrixes(); calculateSpreads(learning_depth); calculateMainSynthetic(learning_depth); second_call=false; } else second_call=true; } if(isNewBar()) { if(fillPricesToBuffers(learning_depth)) { fillLRmatrixes(); calculateSpreads(learning_depth); calculateMainSynthetic(learning_depth); second_call=false; } else second_call=true; } if(!second_call) { fillPricesToBuffers(1); calculateSpreads(1); calculateMainSynthetic(learning_depth); } return(rates_total); } //+------------------------------------------------------------------+ bool fillPricesToBuffers(int depth) { for (int l = 0; l<ArraySize(allspreads); l++) { int copied = CopyClose(allspreads[l].symbol, PERIOD_CURRENT, 0, learning_depth, allspreads[l].pricesBuffer); Comment(""); if (copied != learning_depth) { Comment("Update " + allspreads[l].symbol + ", waiting for quotes to be downloaded!"); return (false); } } return(true); } void fillLRmatrixes() { for (int k = 0; k<ArraySize(allspreads); k++) { int n=0; for(int l = 0; l<ArraySize(allspreads); l++) { if(l==k) continue; for(int i=0;i<learning_depth;i++) { LRmatrix[i].Set(n,allspreads[l].pricesBuffer[i]); } n++; } for(int i=0;i<learning_depth;i++) { LRmatrix[i].Set(splittedPairsNumber-1,allspreads[k].pricesBuffer[i]); } linear_regression.LRBuild(LRmatrix,learning_depth,splittedPairsNumber-1,retcode,linear_model,linear_report); //Print(linear_report.m_cvrmserror); int nvars; linear_regression.LRUnpack(linear_model,allspreads[k].weights,nvars); } } void calculateSpreads(int depth) { for (int k = 0; k<ArraySize(allspreads); k++) { double summKoeffForIndex=0; for(int i=depth-1;i>=0;i--) { int n=0; for(int l = 0; l < ArraySize(allspreads); l++) { if(l == k) continue; summKoeffForIndex += allspreads[l].pricesBuffer[i] * allspreads[k].weights[n]; n++; } allspreads[k].spreadBuffer[i]=allspreads[k].pricesBuffer[i]-(summKoeffForIndex+allspreads[k].weights[ArraySize(allspreads)-1]); summKoeffForIndex=0; } double std = MathStandardDeviation(allspreads[k].spreadBuffer); for(int i=depth-1;i>=0;i--) { allspreads[k].zscore[i]=allspreads[k].spreadBuffer[i]/std; } } } void calculateMainSynthetic(int depth) { ArrayInitialize(zscore,0); for(int i=depth-1;i>=0;i--) { for(int l = 0; l<ArraySize(allspreads); l++) { zscore[i]+=allspreads[l].zscore[i]; } } } bool isNewBar() { datetime lastbar_time=datetime(SeriesInfoInteger(Symbol(),_Period,SERIES_LASTBAR_DATE)); if(last_time==0) { last_time=lastbar_time; return(false); } if(last_time!=lastbar_time) { last_time=lastbar_time; return(true); } return(false); } string getSymbolByName(string symbol) { string symbol_name=""; if(symbol=="") return(""); for(int s=0; s<SymbolsTotal(false); s++) { symbol_name=SymbolName(s,false); if(symbol==symbol_name) { SymbolSelect(symbol,true); return(symbol); } } Alert("The symbol "+symbol+" is not present on the server, please change symbol name!"); return(""); } 附加的文件: cointegration_indicator.mq5 21 kb Aleksei Beliakov 2017.12.22 04:19 #180 谢谢你!我去看看。 1...11121314151617181920 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我有一个普通的系统,缩水约为40%,但如果我从2010年开始运行它,我可能会看到亏损。
而且指标与你的完全一样
我不想让它变得比现在更复杂。而且指标与你的完全一样
这是最简单的事情......我不想让事情复杂化......我不这么认为,我的指标很笨拙,画出的东西无法理解......)但从你的技能来看,你有一个更准确的计算,可能包括一个万无一失的错误检查。
我不这么认为,我有一个笨拙的工作,它画出了难以理解的东西),但从你的技能来看,你有更多的正确计算,而且可能有傻瓜的错误检查。这就是为什么你的测试可能更真实。
有一些变体可以建立更有趣的模型,不仅使用价格,而且还使用指标值或其他东西......
我已经把指标加到代码库里了,什么时候发布,你可以查一下......也许以后我会尝试用指标建立它(现在新年前我太懒了:)
我有很多选择,通过不仅添加价格,而且添加指标值或其他东西来建立更有趣的模型......
我稍后会试一下(我现在在新年前太懒了 :)
我已经尝试了不同的模型,我没有发现任何状态的优势。我有很多想法,但没有意愿公开。如果你有一个飞行的想法方面的想法现在休息,我可以抛出几个想法,但在私人通信。
我试过不同的模型,但我没有发现任何统计上的优势。我有很多想法,但没有意愿把它们公开展示出来。如果你现在在想法方面有飞跃,我可以抛出几个想法,但要在私人信件中。
我不相信思想的力量,也不相信外汇中的天才想法 )此外,几乎每个人都有同样的想法--害怕展示自己内心的秘密......但实际上,这是偏见和不必要的恐惧。协作和集体化统治世界 :D
我有很多选择,通过不仅添加价格,而且添加指标值或其他东西来建立更有趣的模型......
我已经把指标放在代码库里了,你可以在它发布后立即查找......也许以后我会尝试用指标来构建它(现在过年前我太懒了:)
我找不到这个链接。
你能给我链接吗? 我找不到。
版主还没有发布,正在等待。
版主还没有公布,还在审查中。
谢谢你!我去看看。