任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 223

 
ALXIMIKS:


我有时间--我想出了一个任务的算法,并对其进行了描述(详细的,也许对某些人来说有点不正确--人们在盈利方面是不同的)。

讽刺? 我不知道,只是为了帮助。

写给别人的代码? 更加优化?(是的,我可以,但这值得吗?)

(p.s.artmedia70, 无意冒犯,我尊重你的态度和意见--说实话,但是前几天你自己给我的iCustom-y的代码,说得不好听就是不怎么优化)。

如果你把它插入新酒吧的检查中,类似这样的东西应该可以工作。

如果你在一定数量的分形之后缩小kilkict=iBars(sy,tf)的范围,那么代码将更加理想,这样你就不必不断地查看所有的分形。

谢谢你。我已经开始按照你的算法进行写作。但有了旗子,你就像我离北京一样近了。再次感谢。
 
gince:
谢谢你。我已经开始按照你的算法进行写作。但有了旗子,我就像你一样离北京很远。再次感谢。


https://www.mql5.com/ru/forum/131516/page34

在下面--一个早期的文章分享了他的经验。在这个问题上正是如此。

 
tara:


https://www.mql5.com/ru/forum/131516/page34

在下面--一个早期的文章分享了他的经验。在这个问题上正是如此。


SPS
 

可能是什么问题?

在测试中有时会出现除以 "O "的错误

double LotsOptimized()
  {
   double lot=Lots;
   double Lot;
   if (isFloatLots == true)          // если флаг true то проводится оптимизация величины лота, иначе лот неизменен
     {  
        int orders=HistoryTotal();  // history orders total
        int losses=0; // number of losses orders without a break
        double loss=0;              
//---- select lot size
        double  lot_min         = MarketInfo( Symbol(), MODE_MINLOT  ); 
        double  lot_max         = MarketInfo( Symbol(), MODE_MAXLOT  ); 
        double  lot_step        = MarketInfo( Symbol(), MODE_LOTSTEP ); 
        double  lotcost         = MarketInfo( Symbol(), MODE_TICKVALUE );       
                
        lot                             = 0.0;
        double  dollarsPerPip   = 0.0;
        
        lot = AccountBalance()*MaxR/100.0;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
        
        if ( lot < lot_min ) lot = lot_min;
        if ( lot > lot_max ) lot = lot_max;
        
        if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) 
        { 
                Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
                return(-1);
        }
//---- return lot size
//         if(lot<0.1) lot=0.1;
           
//---- calcuulate number of losses orders without a break
           if(DcF>0)
          {  
        for(int i=orders-1;i>=0;i--)
                  {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
                   { 
                        Print("Ошибка в истории!"); 
                        break;
                   }
                if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                  continue;
                 if(OrderProfit()>0)  break;
                if(OrderProfit()<0) losses++;loss=loss-OrderProfit();
                  }
        if(losses>=losses_orders) {Lot=NormalizeDouble(MathAbs(loss)/FV/MarketInfo(Symbol(),MODE_TICKVALUE)/TakeProfit1,1);
         }
       }
     }  
//---- return lot size
     if (Lot>lot) lot=Lot; 
   
  return(lot);
  }
 
Stells:

可能是什么问题?

在测试中有时会出现除以 "O "的错误。


搜索"/"符号,看看用户的哪些变量参加了划分。

SL ;

FV ;

获利1 .

其中一些可能是0。

 
Stells:

可能是什么问题?

在测试中有时会出现除以 "O "的错误

做一个类型测试。

if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }
以此类推。
 
ALXIMIKS:


再次感谢你们。我试图弄清你的代码并写下评论。我是为了自己理解而做的,也许我也会写一些类似的东西。我研究并试图弄清楚其他人工作的逻辑。然后我自己尝试。

也许你能抽出时间来检查我写的评论,必要时予以纠正。还有一个问题。

  if (Bufer0!=EMPTY_VALUE) 

这是否意味着指标缓冲区不是空的,还是这个变量有其他含义?指标缓冲区将是

Bufer0[i]

所有代码都有注释。

 int    counted_bars=IndicatorCounted();
//----
   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,
         frac,                               //frac - флаг существования фракталов,
         frac1=0;                            //frac1- счетчик фракталов (+1 или 0 за цикл)
   int i;
   double Bufer0;                            //
   kilkict=iBars(NULL, 0);

   for (i=3; i<kilkict;i++){
      a2=0;frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            a2+=1;                           //к числу фракталов добовляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счечик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            if(a2==0){
               frac1++;                      //счечик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добовляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал ненайден)
      if (frac1==1){                         //если счечик равен 1,
         a1=a2; continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2;continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2;}// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   }

 

gince:

if (Bufer0!=EMPTY_VALUE) 

这是否意味着指标缓冲区不再是空的,还是这个变量有其他含义?

这一行可以删除,因为iFractals()返回零,而不是 "空值"(EMPTY_VALUE),因为没有分形。

我的问题如下:你是否想做一个能寻找两个连续分形的指标?还是你在你的EA中搜索最接近当前条形的两个连续分形?这个问题不是空穴来风,因为指标中的搜索方法和专家顾问中的搜索方法是不同的--指标是从结束到开始计算的--从过去到现在,而专家顾问是从现在到过去的条形图中寻找的。因此,专家顾问和指标的搜索方向也不同。

最后一个问题:输出结果应该是什么?

 
artmedia70:

这一行可以删除,因为iFractals()返回的是没有分形的零,而不是 "空值"(EMPTY_VALUE)。

我的问题如下:你是否想做一个能寻找两个连续分形的指标?还是你在你的EA中搜索最接近当前条形的两个连续分形?这个问题不是空穴来风,因为指标中的搜索方法和专家顾问中的搜索方法是不同的--指标是从结束到开始计算的--从过去到现在,而专家顾问是从现在到过去的条形图中寻找的。相应地,在专家顾问和指标中,搜索方向也是不同的。

最后一个问题:产出应该是什么?



指标和EA中的搜索方法是不同的--指标从结束到开始计算--从过去到现在,而EA则从现在到过去的条形图中寻找

for (i=kilkict;i>0;i--)

结果是--上面两个--卖出(箭头向下),下面两个--买入(箭头向上)。信号将在分形的右边出现+2条。这就是我希望在开始时在历史上看到的视觉效果。可能我们还需要一个过滤器。

 
ALXIMIKS:


...

这样的 事情...

...


告诉我,解释一下,怎么会发生他们不写 "这个 "而写 "这个 "呢?

1.难道你不知道 "它 "是用 "e "拼的,而不是用 "f "吗?

2、懒得把手移到字母 "e "上,按 "e "更容易?

3.键盘上没有 "e "键吗?如果没有,为什么没有?

4.它是某种特殊的庞然大物吗?

5.其他一些未知的原因。那是什么?