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

 
EVGENII SHELIPOV #:

下午好。

我是以日分形的数值或垂直线的形式来显示的。该行不显示,数值为0。

这里有一段代码


请告诉我什么是错的。

因为数值为0.分形是在n个烛台之后形成的。

 
Vitaly Muzichenko #:

阵列为所有可用的历史,我不需要这个。

我简直需要50-100条。

像这样。


该指标的意义何在?当然,如果这不是一个秘密的话)问题出在时间显示上。也就是说,这不是真正的打勾时间,而是数字时间。每个数字都在自己的TF条上。

 
Valeriy Yastremskiy #:

该指标的意义何在?当然,如果这不是什么秘密的话)那里的问题当然是时间显示。也就是说,这不是真正的滴答声,而是编号的时间。每个数字都在自己的TF条上。

关键是,要在开放的图表上看到最后的刻度线 :)

P.S. * 改变卖价和买价

如市场观察


 
Tretyakov Rostyslav #:

因为数值为0.一个分形是在n个蜡烛之后形成的。

如果没有新的极值,并且在三条杠之后,这些极值是0、1、2,则形成分形。

double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 2);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);

什么都没有改变。

或者又出了什么问题。

 
Vitaly Muzichenko #:

我做到了,它是有效的。

---

直觉告诉我,你可以不做循环。

这是真的吗?

据我所知,MQL中似乎没有移位功能。因此,只有在循环的帮助下才能完成转变。为什么它不适合你?

P.S. 关于额外的阵列,没有必要。你正确地进行了移位,并将出价值直接写在了缓冲区内!

 
EVGENII SHELIPOV #:

下午好。

我是以日分形的数值或垂直线的形式来显示的。该行不显示,数值为0。

这里有一段代码


请告诉我什么是错的。

为什么你肯定零条上的分形一定是非零的?什么时候,它不会是0,只有当它在那里的时候!


Tretyakov Rostyslav#:

因为数值是0,分形是在n个蜡烛之后形成的。

而且这种情况也远非总是 发生。只有在第n条是分形的情况下!

 
Vitaly Muzichenko #:

意思是说,要在一个开放的图表上看到最后的刻度线 :)

P.S. * 改变卖价和买价

如市场观察


我在想速度措施))))

 
Vitaly Muzichenko #:

意思是说,要在一个开放的图表上看到最后的刻度线 :)

P.S. * 改变卖价和买价

如市场观察


ArrayCopy() 有什么问题?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
ArrayCopy() 不是一个好的解决方案?

ArrayCopy,这是用于从一个数组复制到另一个数组。而在这里,你需要在添加每个勾之前转移数值。因此,它只能通过使用一个循环来解决。

 
Artyom Trishkin #:
ArrayCopy() 不适合你?

如何使用这个,你能告诉我吗?

任务是这样的。

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

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

Vitaly Muzichenko, 2022.02.13 15:42

我不需要一个数组来记录整个可用的历史。

我真的需要50-100条

像这样


下面是准备好的代码,但循环有点吓人

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_label1  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_label2  "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0,Buffer1);
  ArraySetAsSeries(Buffer1,true);
  SetIndexBuffer(1,Buffer2);
  ArraySetAsSeries(Buffer2,true);
  ArrayInitialize(Buffer1,EMPTY_VALUE);
  ArrayInitialize(Buffer2,EMPTY_VALUE);
  IndicatorSetInteger(INDICATOR_DIGITS,Digits());
  IndicatorSetString(INDICATOR_SHORTNAME,"Tick:");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
{
  int H=100;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }
  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  double a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  return(rates_total);
}
//+------------------------------------------------------------------+

---

同样,ArrayCopy() 里面有一个循环,可能不止一个。因此,由于这种替换,代码很难变得更轻更快。