新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 651

 
Taras Slobodyanik:

我的代码将一个长图表ID写入一个临时的全局变量中。

从视觉上看,如果你按下F3,它显示的是零(或其他不同的值)。
发生这种情况是因为终端认为它是一个双倍值,并试图显示它,但我们给它的是long,这是一个完全不同的数字格式。

如果把这个值作为一个普通的双倍数读回来,那将是一个混乱的局面。
如果它被我的代码读取,它将再次变长(与我们保存的相同)。
如果你在终端窗口中手动点击这个变量,它将被重置,因为终端会检测到交换。

我如何使用CHART_BRING_TO_TOP的结果?
 
Artyom Trishkin:

删除OnInit()中的时间初始化。

谢谢你。

请你告诉我错误在哪里。当我调用常规分形时,箭头被放在条件下,它应该在那里,当我调用iFreeNumFractals时,条件被满足,应该有一个箭头,但没有。iFreeNumFractals的行被注释掉,设置与常规分形一样。理想情况下,如果我们注释掉有规则分形的那几行,不注释iFreeNumFractals,图片应该是一样的,但是......。

#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1


//--- indicator buffers
double         BufferUP[];
double         BufferDN[];

int dist=3;
string nameInd;
datetime timf=0;
int numf;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   SetIndexArrow(0,233);
   SetIndexArrow(1,234);
  
   
//---
//---
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
//---
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1) 
        {
         limit=rates_total-2;
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--) 
        {
         
         if(fub(i))
           {
            BufferUP[i]=low[i]-dist*Point;
           }

         Comment("");
        }
      //--- return value of prev_calculated for next call

     }
   return(rates_total);
  }
//+
bool fub(int ib)//
  {
   bool bingob=false,flag_verh_f=0;
   int start_bar=0,numbarfrup=0,kfr_all=0;
   double high_old=0,prfra=0,f_up=0,f_dn=0,f=0;

     {
      for(int i_i=ib+3; i_i<Bars-2; i_i++)
        {
         if(high_old<High[i_i]) high_old=High[i_i];

        f_up=iFractals(Symbol(),0,MODE_UPPER,i_i);
        //f_up=NormalizeDouble(iCustom(Symbol(),0,"iFreeNumFractals",1,2,2,2,2,0,i_i),Digits);
         f_dn=iFractals(Symbol(),0,MODE_LOWER,i_i);
         //f_dn=NormalizeDouble(iCustom(Symbol(),0,"iFreeNumFractals",1,2,2,2,2,1,i_i),Digits);
         if(f_up>0 && f_up>iMA(NULL,0,33,0,MODE_SMMA,PRICE_CLOSE,i_i)+10*Point)//Если фрактал найден выше МА+10 pips
           {
            numbarfrup=i_i;
           }
         if(f_dn>0 && f_dn<iMA(NULL,0,33,0,MODE_SMMA,PRICE_CLOSE,i_i))
           {
            start_bar=numbarfrup;break;
           }
        }
      for(int i_i=start_bar; i_i<Bars-2; i_i++)
        {
         f=iFractals(Symbol(),0,MODE_UPPER,i_i);
         //f=NormalizeDouble(iCustom(Symbol(),0,"iFreeNumFractals",1,2,2,2,2,0,i_i),Digits);
         if(f>0)kfr_all++;
         if(f>0 && Low[ib]<f+1*_Point && Open[ib]>f //Сравнение фрактала с текущ баром
            &&
            high_old-f>=100*Point//от максимума до фрактала 100 пп
            )
           {
            bingob=true;
            prfra=f;
            timf=Time[i_i];
            break;
           }
         if(kfr_all==3)break;
        }
     }
// numfb=iBarShift(NULL,PERIOD_CURRENT,timf,true);
   if(bingob)
     {flag_verh_f=true;}
   if(bingob==false)
      flag_verh_f=false;

   return(flag_verh_f);

  }
//



 
inter78:
我如何使用CHART_BRING_TO_TOP的结果?

就像我们之前使用CHART_BRING_TO_TOP一样

 
大家好,我在市场上有三个买入订单,价格上涨了10点,每个订单都有+10点,我想锁定三个卖出订单,现在如何使这些订单在MKL4中不再被检查?
 
Ghabo:

谢谢你。

你能告诉我错误在哪里吗?情况是这样的,当我调用普通分形时,箭头被放在条件下,它应该在那里,当我调用iFreeNumFractals时,条件得到满足,应该有一个箭头,但它没有。iFreeNumFractals的行被注释掉了,设置与普通分形一样。理论上说,如果我用通常的分形注释掉线条,并注释掉iFreeNumFractals,图片应该是一样的,但是......




iFreeNumFractals指标的设置是否与图表上的标准和标准分形一样?

如果是这样,他们的信号是否相同?

 
Aleksandr Egorov:
大家好,我在市场上有三个买入订单,价格上涨了10个点,每个订单都有+10个点,我想锁定三个卖出订单,现在我应该如何使这些订单不再被MKL4检查?

如果你想让人理解--你到底想要什么,就在你的文本中使用标点符号。否则,都是一堆--去弄清楚你的意思......。

 
Taras Slobodyanik:

就像之前使用的CHART_BRING_TO_TOP一样

自从我使用了它,就没有什么效果。对你来说,做同样的事情可能不会太难,只是作为一个指标,把它提到CHART_BRING_TO_TOP。
 
Artyom Trishkin:

如果你想被理解--你想要什么,在你的文本中使用标点符号。否则你就把所有东西都归为一堆--去弄清楚你的意思......

我们在市场上有三个买单的价格,价格上涨了10个点,我们每个订单都有+10个点,我想锁定三个卖单,现在如何确保这些订单在mcl4中不再被检查?

 

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

Taras Slobodyanik, 2018.10.07 22:12

GlobalVariableCheck() - 检查该变量是否已经存在,如果没有,则
GlobalVariableTemp()- 创建临时变量,该变量将在下次启动时被自己删除。

这点很清楚,问题是如果没有GP,为什么只创建了临时的而不是永久的GlobalVariableSet?

 
Artyom Trishkin:

iFreeNumFractals指标的设置是否与图表上的标准和标准分形一样?

如果有,它们的信号是否匹配?

分形图完全吻合。

截图上的标准分形上的箭头

iFreeNumFractals放了第一个和最后一个,中间三个没有。

aqz