思想交流 - 页 9

 
FION:
专家们可以同时工作--每个人都有自己的向导,对市场情况的识别和重新设置应该在每个专家身上。 如果不满足这个条件,当市场情况发生变化时,损失是不可避免的,因为在平坦和趋势条件下,目标和停止应该是不同的。此外,我们应该考虑中间条件--低平,或低活动的 "滑坡"。基本上,由于锁定了亏损的专家顾问头寸,盈利的专家顾问集应该显示出最佳效果。

几乎每个人都有自己的领悟。但许多EA没有纠错功能。我当然不知道,我只是尽量避免他们。如果我们做一些标准的东西,我们应该允许这样做。 我会给魔术师添加一个符号(),尽管它可能是不必要的。 理论上,一个有票的订单不能重复,尽管它可能是。
 

是的,当然了。这正是我在代码中所做的。在外部参数中,我们还设置了魔术师_n,每个版本的魔术师都会按照自己的算法工作。

 

关于趋势检测。ProtoType-IV专家顾问提供了一个多货币专家顾问 的例子,通过四个最后的极值来识别趋势。我认真地深入其中,"半推半就 "地分配了这段代码,现在它可以插入到任何专家顾问中。如有必要。如果你在外部参数中设置它

extern int     PeriodWPR=8;
extern double  CriteriaWPR=25;
extern int     ATRPeriod=40;// период ATR для индикатора 
extern double  kATR=0.5;
//-------------------------------------
int  LastUpArray[13,7];
int  PreLastUpArray[13,7];
int  LastDownArray[13,7];
int  PreLastDownArray[13,7];

这里是 "限定词 "本身。

/-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
int TrendByWPR()
  {
//----
   int res=0;
   int curPos,LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos,LastPeak,newPos;
   bool FindUp=true,FindDown=true,SearchCompleted=false;
   double CurWPR=iWPR(NULL,0,PeriodWPR,0);
//----
   //=======  определим - где мы находимся в данный момент
   if (CurWPR<=CriteriaWPR-100)
      {
      FindDown=false;
      LastPeak=0;
      }   
   if (CurWPR>=-CriteriaWPR)
      {
      FindUp=false;
      LastPeak=0;
      }   
   // ================   начианем поиск пичков-донышков
   while(!SearchCompleted && curPos<Bars)
      {
      if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && LastPeak<0)
         {
         FindUp=false;
         LastPeak=curPos;
         curPos++;
         continue;
         }
         
      if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && LastPeak<0)
         {
         FindDown=false;
         LastPeak=curPos;
         curPos++;
         continue;
         }
         
      if (iWPR(NULL,0,PeriodWPR,curPos)>=-CriteriaWPR && FindUp)
         {//искали верхушку и нашли
         newPos=curPos; 
         while(iWPR(NULL,0,PeriodWPR,curPos)>CriteriaWPR-100 && curPos<Bars)
            {// теперь нужно найти донышко, чтобы между ними найти точный пичок
            curPos++;
            }
         if (LastUpPos==0) 
            {
            LastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak);   
            LastPeak=LastUpPos;
            }
         else 
            {
            PreLastUpPos=Highest(NULL,0,MODE_HIGH,curPos-LastPeak,LastPeak);
            LastPeak=PreLastUpPos;
            }
         curPos=newPos;
         FindUp=false;
         FindDown=true;
         curPos++;
         continue;
         }//==============
 
      if (iWPR(NULL,0,PeriodWPR,curPos)<=CriteriaWPR-100 && FindDown)
         {
         newPos=curPos; 
         while(iWPR(NULL,0,PeriodWPR,curPos)<-CriteriaWPR && curPos<Bars)
            {
            curPos++;
            }
         if (LastDownPos==0) 
            {
            LastDownPos=Lowest(NULL,0,MODE_LOW,curPos-LastPeak,LastPeak);
            LastPeak=LastDownPos;
            }   
         else 
            {
            PreLastDownPos=Lowest(NULL,0,MODE_LOW,curPos-LastPeak,LastPeak);
            LastPeak=PreLastDownPos;
            }
         curPos=newPos;
         FindDown=false;
         FindUp=true;
         curPos++;
         continue;
         }
      if (PreLastDownPos!=0 && PreLastUpPos!=0) SearchCompleted=true;
      curPos++;
      }
  /* if (Symbol()==StringSymbol && Period()==PeiodMinute)
      {
      Comment("LastUpPos=",LastUpPos,"  PreLastUpPos",PreLastUpPos,"  
 LastDownPos=",LastDownPos,"  PreLastDownPos=",PreLastDownPos,
" Время ",TimeToStr(CurTime()));
      SetUpArrows(LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos);*/
   LastUpArray[NULL,0] =LastUpPos;   
   PreLastUpArray[NULL,0]=PreLastUpPos;   
   LastDownArray[NULL,0]=LastDownPos;   
   PreLastDownArray[NULL,0]=PreLastDownPos;   
  if (High[LastUpPos]-High[PreLastUpPos]>=kATR*iATR(NULL,0,ATRPeriod,LastUpPos)
&&Low[LastDownPos]>Low[PreLastDownPos]) res=1;     
  if (Low[PreLastDownPos]-Low[LastDownPos]>=kATR*iATR(NULL,0,ATRPeriod,LastDownPos)
&&High[PreLastUpPos]>High[LastUpPos]) res=-1;    
   
   return(res);
  }

角落里的图形显示了函数=0,,或=1,或=1

 
我认为在线性回归 的帮助下定义趋势更为方便,MT-4标准集的线性回归脚本非常好,我想在此基础上制作一个指标,也许有人知道在哪里可以得到源代码? 所有已知的实现在价格变化的动态中效果不佳。我需要一个长度为1到N个柱子的通道,当一个新的柱子出现时可以重新计算,并且可以输出它的宽度(点)和它的斜率(点)的长度。而同样的标准偏差的渠道,如果能做出来就好了。 我们可以从头开始挖掘,但如果有人有MT的来源,那就容易多了。
 

不过,我并不只是发布了趋势检测的代码。另一个想法出现了......(我以后会解释)。

也许这个指标会对初学者有用。

在图表中iPeriod=20,MASoot=20

我还没有进入它的工作。但在视觉模式下,很容易看到它的工作原理......

附加的文件:
 
谢谢你,Leonid,但它对反转没有正确的作用,我很久以前就试过了。 这里有一个很好的指标,但它的工作原理是How-low,想法是一样的,但基于线性回归
附加的文件:
 
FION:
在我看来,用线性回归来定义趋势更为方便,MT-4标准集的线性回归脚本非常好,我想在此基础上做一个指标,也许有人知道在哪里可以得到源代码?所有已知的实现方式都不能很好地配合价格趋势。我需要一个长度为1到N个柱子的通道,当一个新的柱子出现时可以重新计算,并且可以输出它的宽度(点)和它的斜率(点)的长度。如果能有与给定偏差相同的标准偏差通道,那就更好了。我们可以从头开始,但如果有人有MT公司的消息来源,那就会容易得多。


我以前在什么地方发过这个帖子。我可以发布新的版本。一个错误已被修复。

而这里是指标。

屏幕上显示的是条数。显示的是3个sigmas。如果价格在一个上海合作组织范围内,则不进行重新计算,因为一切都在允许的范围内。当价格突破它时,将被重新计算。

附加的文件:
 

Vinin ,你的频道非常得体,调整正确。谢谢你。我将分享一个关于平坦的过滤器的想法。我们都记得牧师。雷舍托夫和他的感知器。原则上,感知器是一个线性过滤器。我想尝试用感知器来过滤掉fllet。我想输入2个不同长度的线性回归通道的宽度和斜率,博林格宽度和价格变化率。我想用什么作为优化标准。也许从布林线向内侧反弹--目标是75%的宽度。

 
FION:

Vinin ,你的频道非常得体,调整正确。谢谢,我将分享一个关于平面的过滤器的想法。我们都记得牧师。雷舍托夫和他的感知器。原则上,感知器是一个线性过滤器。我想尝试用感知器过滤掉飞行。 我想输入2个不同长度的线性回归通道的宽度和斜率,博林格宽度和价格变化速度。我想用什么作为优化标准。也许从布林线向内侧反弹--目标是75%的宽度。


雷舍托夫的感知器是做不到的。我们应该建立一个至少由4-5个非罗伊人组成的科霍恩层。但将只有一个问题--所有数值必须是相同的顺序。
 
我想创建一个新的主题,蜡烛图的神经分析。我要把我所有的作品拿出来,我一个人做不到。我自己做不到,而且我已经知道自己的大部分错误。