用傅里叶变换预测未来 - 页 5

 

以下是在刚刚超过一周的时间间隔内脱颖而出的频率(以天为单位)。

4.58.

2.58.

1.63(最强的,在中间的图表中显示)。

1.04

0.52.

0.26.


有什么建议是导致1.63天的周期(一周的第三次谐波)?

 

以下是第一个预测


仍有很多工作要做

ANG3110,你对明天的预测是什么?

 
m_keeper:

以下是第一个预测


仍有很多工作要做

ANG3110,你对明天的预测是什么?

实际上我还没有具体做出预测。我可以直接用眼睛给你画。

那你在图上看到了什么,请详细描述一下。


 
也许有人有对mq4的非快速傅里叶变换?C或Pascal的实现也是可能的。
 
vaa20003:
也许有人有对mq4的非快速傅里叶变换?C或Pascal的实现也是可能的。

在第二页看到

 
m_keeper:
vaa20003:
也许有人有对mq4的非快速傅里叶变换?C或Pascal的实现也是可能的。

见第二页。

谢谢,错过了...

 

以下是我们目前得到的情况

我们搜索主要的市场频率,确定它们的振幅和相位,定义trnd,并对整个事情进行添加和归一化。

我不喜欢在周期图上搜索局部最大值的方式,搜索是基于谐波分布的。

而没有任何迹象,当然你可以通过玩参数来隔离它们,但它仍然是不稳定的,而且往往是非常微观的。

的最大值。

第二个缺点是,所有东西都显示在一个窗口中,有必要将所有这些乐趣分散到主窗口的几个图表中。

和2-3个额外的窗口。


谁知道如何使所有的计算在一个地方进行,而所有其他人--指标、专家--都能获得结果?

选择适当的市场波动频率仍应由人工完成。如果用鼠标或像ANG3110 那样的线来选择最大值,那将是非常方便的。


ANG3110,你是如何落实与行的工作的?通过脚本?



关于如何处理我现在发布的内容,有几句话要说。

Lenght=560;//设置窗口的大小,单位为条。
Period_count=2;//我们将考虑多少个周期,相应地,长度应该比你在市场上看到的多出 period_count 倍。
Garmonic=9;//这个参数和下一个参数是由非常复杂的拟合方法决定的(我将详细介绍)。
GarmonicControl=1.7。

iMAperiod=4;//如果拟合没有帮助,试着将图形平滑一些。

Futur=100;//对多少条进行预测。
InPast=200;//对过去的条形图进行操作,用于估计预测,基于已有的数据。

实际上,你在指标上看到了什么(顺便说一下今天的预测)?

所有的图表都应该位于0到Lenght的范围内(好比+/-5%)。

如果范围不同,那只是一个小故障。 按刷新就可以正常工作(我不明白这里有什么问题)。

薄薄的粉红色图表--准备好的时间序列,应该与课程类似。

粗橙色--周期图,周期值等于蓝线的对应值

红条进入蓝线的位置和数量由Garmonic和GarmonicControl决定。

绿条支撑着周期图--检测到的周期在很大程度上取决于红线。 在分辨出最重要的周期后,你应该开始调整Garmonic*,直到你得到结果

薄薄的绿色曲线是相位图,看起来如果频率是稳定的,那么相位图是平滑的,但如果它波动,那么该频率的振荡最近受到了干扰,不能相信。(0对应的是-pi/2;长度---3*pi/2)


而实际上最重要的是那条粉红色的粗线--它是一个预测。预报不一定要和最初的图表相吻合,通过提升和重复之前的图表。最重要的是看到中枢点和它们可能的强度(预测的中枢时间肯定会不同)。


附加的文件:
 
m_keeper:

选择适当的市场波动频率毕竟要靠人工完成。如果用鼠标选择最大值,或者用直线选择,将非常方便,正如ANG3110 所做的那样


ANG3110,你是如何落实与行的工作的?通过脚本?

对于你的情况,我认为最适合的是以下选项。

你做一个脚本来控制指标。


//==============================================================
#import "user32.dll"
int      PostMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_COMMAND   0x0111
//==============================================================
int i0,ip,T;
int t0,tp,t0n,tpn;
string Symb;
int Per;
//**************************************************************
int init() 
{ 
   Symb=Symbol();
   Per=Period();
   
   t0=WindowTimeOnDropped();
   T=64; 

   i0=iBarShift(Symbol(),Period(),t0);
   ip=i0+T;
   tp=Time[ip];
   t0n=t0;
   tpn=tp;
   
   ObjectCreate("RCh",4,0,tp,0,t0,0);
   ObjectSet("RCh",OBJPROP_COLOR,DodgerBlue); 
}
//**************************************************************
int start() 
{
   int hwnd=WindowHandle(Symb,Per);        
   if (hwnd!=0) 
   {
      PostMessageA(hwnd,WM_COMMAND,33324,0); 
      GlobalVariableSet("gi0",i0);
      GlobalVariableSet("gip",ip);
   } else return(0);
   //---- 
   while(IsStopped()==false) 
   {
      t0=ObjectGet("RCh",OBJPROP_TIME2); 
      if (t0>Time[0]) t0=Time[0]; 
      tp=ObjectGet("RCh",OBJPROP_TIME1); 
      i0=iBarShift(NULL,Per,t0);
      ip=iBarShift(NULL,Per,tp);
      
      T=ip-i0;
      if (T<2) {T=2; ip=i0+T; tp=Time[ip];}
      
      if (t0n!=t0 || tpn!=tp) 
      {
         GlobalVariableSet("gi0",i0);
         GlobalVariableSet("gip",ip);
         PostMessageA(hwnd,WM_COMMAND,33324,0);
         t0n=t0;
         tpn=tp;
      } 
      
      Sleep(200);
   }
   //=============================================
   return(0);
}
//**************************************************************
void deinit() 
{
   ObjectDelete("RCh"); 
   GlobalVariableDel("gi0");
   GlobalVariableDel("gip");
}
//**************************************************************

你在指标中的int start()之后插入它。

   if (GlobalVariableCheck("gi0")) 
   {
      i0=GlobalVariableGet("gi0"); 
      ip=GlobalVariableGet("gip");
      T=ip-i0;
      SetIndexShift(2,T/2);
      SetIndexShift(3,T/2);
   }
   else 
   {
      i0=0; T=T0; SetIndexShift(2,T/2); SetIndexShift(3,T/2);
   }


首先你把指标放在图表上,然后扔掉脚本,用LR通道来移动图表。

我希望你能自己做,或者我可以给你一个提示。

 

谢谢你,线路已经整理好了。


我可以再问一个问题吗?

我现在有三个图表的信息,一个在主窗口,两个在我的窗口。

参数只在其中一个中设置,并存储在全局变量中

这些变量被存储在全局变量中,键为 "PF_"+Symbol()+"_"+DoubleToStr(Period(),0)+"_key"。

我还在全局变量中存储了关于最大值的信息

问题是,我必须对每个图表进行三次计算。

一开始我尝试了iCustom,但在我看来,它并不适合我。

从以前添加的图表中获取数据,但要重新计算,至少要从头开始计算。

并看到它已经启动了(通过全局变量)。

并不做计算,而iCustom则返回一个空。

有没有办法让数组成为全局的?

在我看来,如果你把成千上万的值塞进GlobalVariable,它的工作速度就会慢很多。

它的工作速度会慢得多,因为对字符串的搜索是在

 
m_keeper:

有没有办法让数组成为全局的?

我不太清楚你的需要,但当你需要保存大量数据然后再读取时,使用向中间文件写入的方式会更容易,比如说。

int handle=FileOpen("Test.dat",FILE_BIN|FILE_WRITE)。

FileWriteArray(handle,arr,0,Narr)。

然后再从另一个程序中读回。

int handle=FileOpen("Test.dat",FILE_BIN|FILE_READ)。

FileReadArray(handle,arr,0,Narr)。

更多细节请参考MT4帮助。