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

 
你好!
可能来自https://ru.investing.com/tools/correlation-calculator
是否可以将信息转移到时间表上?
如何才能做到这一点呢?
预先感谢你。
 
Irina Dymura:
你好!
可能来自https://ru.investing.com/tools/correlation-calculator
是否可以将信息转移到时间表上?
如何才能做到这一点呢?
预先感谢你。
尝试WebRequest()
 
Ihor Herasko:

是的,没有理由把时间翻译成字符串,因为时间是一个秒数。这个数字比字符串更容易和更快地工作。

你纠正了一件事,却毁了另一件事)。

在第二部分,而不是。

返回。

你在之前的尝试中,这句话是正确的。


谢谢你的答复!我已经试过这两个选项。

我看不出有什么问题--在停止时,它仍然会直接进入。

lil_lil:

大声说出你的情况,你就会知道发生了什么事)

if ( TimeSeconds(TimeCurrent()) - TimeSeconds(OrderCloseTime()) > TimeSeconds(30*60) )
if ( TimeCurrent() -OrderCloseTime() > 30*60 )

事实上,到处都有!=条件,即相反的>应该有,如果我正确理解你的意思。但所有的变体都运行了--仍在工作。

 

帮助理解逻辑,发现错误

对代码进行了详细的注释。

我需要它画出有周期的分形,有 "之 "字型的分形,使下边的上边的分形 依次进行,以此类推。

但结果是,重复的分形还是出现在了图表上

基数取自标准分形指标。下面的截图是第5期的重复分形图

//+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  Gray
#property indicator_color2  Gray
#property indicator_label1  "Fractal Up"
#property indicator_label2  "Fractal Down"
bool high_f, low_f, lastIsUpper = true, lastIsLower = true;
int lastLowerIndex, lastUpperIndex;
//---- input data
input int period = 5;
int per = period;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int    ExtArrowShift=-10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
  if(per % 2 == 0) per++; //период фракталов только нечетный
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }

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 i,limit;
//---
   if(rates_total < per)
      return(0);
//---
   if(prev_calculated < per + (per - 1) / 2)
     {
      limit = (per - 1) / 2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit = rates_total - per;
   for(i = limit; i < rates_total - (per + 1) / 2 && !IsStopped(); i++)
     {
      high_f = true; low_f = true;//с самого начала считаем что есть фрактал в i свече
      for(int g = 1; g < (per+1)/2; g++){//проверка на наличие фрактала (одновременной справа и слева от свечи с возможным фракталом)
         //---- Upper Fractal
         if(high[i-g] >= high[i] || high[i+g] > high[i]){//если одно из условий выполнено (high какой либо свечи справа или слева выше чем исследуемый), то фрактала сверху нет
            ExtUpperBuffer[i] = EMPTY_VALUE;
            high_f = false;            
         }        
         //---- Lower Fractal
         if(low[i-g] <= low[i] || low[i+g] < low[i]){ //если одно из условий выполнено, то фрактала снизу нет        
            ExtLowerBuffer[i] = EMPTY_VALUE;
            low_f = false;   
         }  
      }  
       //устанавливаем верхний
      if(high_f){//если фрактал все таки есть (из цикла-проверки выше)
         if(lastIsLower){//еси последний фрактал был нижний
            ExtUpperBuffer[i] = high[i];//устанавливаем сверху
            lastUpperIndex = i;//записываем индекс в буффере установленного
            lastIsLower = false;//говорим что последний - не нижний
            lastIsUpper = true;//а верхний
         }else{
            if(lastIsUpper){//если последний верхний (а мы пытаемся установить верхний)
               if(high[i] > ExtUpperBuffer[lastUpperIndex]){//если устанавливаем выше предыдущего
                  ExtUpperBuffer[lastUpperIndex] = EMPTY_VALUE;//удаляем предыдущий
                  ExtUpperBuffer[i] = high[i];//устанавливаем новый
                  lastUpperIndex = i;//записываем индекс нового
               }
            }
         }
      }
      //аналогично для фрактала снизу
      if(low_f){
         if(lastIsUpper){
            ExtLowerBuffer[i] = low[i];
            lastLowerIndex = i;
            lastIsLower = true;
            lastIsUpper = false;
         }else{
            if(lastIsLower){
               if(low[i] < ExtLowerBuffer[lastLowerIndex]){
                  ExtLowerBuffer[lastLowerIndex] = EMPTY_VALUE;
                  ExtLowerBuffer[i] = low[i];
                  lastLowerIndex = i;
               }
            }
         }
      }   
    }
  
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+
附加的文件:
6gvzow.JPG  149 kb
 
如果不支持SYMBOL_SESSION_INTEREST,您能告诉我们如何在MQL4中获得未结头寸 的数量吗?谢谢你!
 
kotaries:
如果不支持SYMBOL_SESSION_INTEREST,请告知如何在MQL4中获得未结头寸 的数量?谢谢你!

循环查看所有头寸,并计算其总成交量:OrderLots()

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

我不明白为什么要返回prev_calculated的某个值?

首先,它是如何计算的?

 
Roman Sharanov:

我不明白为什么要返回prev_calculated的某个值?

首先,它是如何计算的?

系统将跟踪这一点。事实上,你应该只对它的价值感兴趣,而不是它的内部计算方式。
 
Roman Sharanov:

我不明白为什么要返回prev_calculated的某个值?

它甚至是如何计算的呢?

这是OnCalculate()在最后一次迭代时返回的值。这一点在文件中已明确说明。

应该注意OnCalculate()返回的值和第二个输入参数prev_calculated之间的关系。 当函数被调用时,参数prev_calculated包含了 OnCalculate()在 上一次 调用返回的 值。 这允许在计算自定义指标时采用经济的算法,以避免对那些自上次调用此函数以来没有变化的条形图进行重复计算。

 

任务是找到具有最小闭合度的柱子

for(int x=0; x<=xBars -1; x++)

{

反++。

// 打印(Close[x],",",counter)。

int h =ArrayMinimum(Close[x])。

if(counter > 20) break;

}

编译员对Close说脏话

原因: