[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 272

 
hoz:

如果这不是一个秘密,那么这个变量是在哪里明确设置的?:)我在库中看到b-PSI@Base.mqh,它只是声明。

但基本上没有进一步的内容。事实上,默认情况下是通过Symbol() 返回当前工具的值。那么为什么我们在这里需要一个变量呢?

我已经在关于多货币的部分回答了这个问题--当前符号=符号()--这只是一个特殊情况。

P.S. 你的方法很有趣:你拿着别人的代码,试图 "适应 "你的逻辑--你有一切权利,但不要问我:"为什么你的逻辑与我的不同!"。

 
TarasBY:

我已经回答了这个问题,关于多币种--当前符号=符号() --这只是一个特殊情况。

P.S. 你有一个有趣的方法:你拿别人的代码,并试图 "适应 "你的逻辑 - 你有一切权利,但不要问我:"为什么你的逻辑与我的不同!"。



我不打算调整它。我只是想研究它是如何实施的。但我不会复制任何东西。我很想看看专家是怎么想的。这就是真正的原因。所以,就在这里了。

我在看void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0) 函数。

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)

这个变量没有在这个函数中声明。在其他两个基础文件(包含和函数)中也没有声明它。不清楚在哪里可以找到它。这就是我的问题。我想了解它最初是在哪里出现的,即宣布。如果你不介意告诉我...

还有一件奇怪的事情,就是另一个变量。bool fCheck_LevelsBLOC 函数中的以下几行。

   if (fi_Type == 0) li_cmd = 0; else if (fi_Type == 1) li_cmd = 1;
    else if (fi_Type % 2 == 0) li_cmd = 1; else li_cmd = 0;
    ld_Price = bda_Price[li_cmd];

bda_Price[li_cmd] 是在b-PSI@Base.mqh 库中首次提到。

bda_Price[2];

没有指定数组中的元素。所以它们各自等于零。这意味着li_cmd 数组的任何参数的表达式将取值0?

ld_Price = bda_Price[li_cmd];
 
bikrus13:
大家好。请回复所有能创建一个脚本的人,在开盘时增加手数。

你在这里开标是为了满足工作需要吗?通常情况下,让人满意的不是任务,而是...

如果你有不明白的地方,可以问我们,我们会帮助你。

或者去找工作--那里既满足了你,也满足了工作......。有偿

 
是否可以从EA中按时间找出历史上的价格(Ask和Bid)?例如,Asc 10分钟前或10秒前。有一些已知的功能可以得到一个时间序列的条形图,包括开盘价收盘价 和某一时期的海低点,但在一个特定的时间点,如何知道卖出价和买入价。
 
Dikii:
是否可以从EA中按时间找出历史上的价格(Ask和Bid)?例如,Asc 10分钟前或10秒前。有 一些已知的功能可以得到一个时间序列的条形图,包括开盘价、收盘价和某一时期的海低点,但在一个特定的时间点,如何知道卖出价和买入价

没有Ask,只有Bid!顺便说一句,每个人都会喜欢这样,包括我自己在内!。
 
borilunad:

不可能,只有竞标。顺便说一句,每个人都会喜欢的,包括我自己!"。

解释一下如何找出10秒前的Bid,最好是用代码。
 

我之前问过关于数组的问题。似乎还是没有弄清楚。当你在测试器上运行时,有一个除以零的 结果。这意味着在某个数组中存在着零。我无法弄清错误在哪里。附录中的代码。WORDe中的评论为俄语。对此我很抱歉。我的Metaeditor不支持俄语。

帮助我找到错误的地方。如果你不介意解释一下。

Неполучилось сразу и два файла поместить. Вордовский документ неразрешается всавлять. Как иначе проконтировать на русском незнаю , только полностью код скопировать с ворда и поместить сюда

//быстры MA
extern int     MA_Period1     =  8;
extern int     plius1         =  100;
extern int     MA_Shift1      =  0;
extern int     MA_Method1     =  0;                                                 
//медленый MA
extern int     MA_Period2     =  13;
extern int     plius2         =  100;
extern int     MA_Shift2      =  0;
extern int     MA_Method2     =  3;                                                 
//начало флета
//поиск флета по сигналу или время
extern bool  start       =  true;    // true ->по сигналу, false->по времени
// по сигналу начинаем с данного времени
extern int     startHourFlatMA        =  16;    
extern int     startMinFlatMA        =  00;
//сигнал есть, ждем пока закроется  BarEnd бар
extern int     BarEnd         =  240;
datetime       LastTime;
//datetime       startTime;
// по времени начьнем искать флет с
extern int     startHourFlat        =  0;   
extern int     startMinFlat         =  0;    
//конец флета в промежутке времени или по истечению времени
//начало промежутка
extern int     startHourEnd        =  4;    
extern int     startMinEnd         =  45;
//конец промежутка, и истечение времени по времени
extern int     endHourEnd        =  7;    
extern int     endMinEnd         =  30;

//включение фильтра Volumes
extern bool volFiltr = true;            //true -> включено,   false -> выключено
//skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo
extern int   gep = 300;  
bool           susikirtimas = false;      //пересечение индикаторных линий
bool           flat; 
//массивы
double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[];
double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; 
int iH, iL ,iO, iC, iT;
double C[], T[], y[];
int i = -1;                      // индекс массива
int j = -1;                      // индекс массива
int n = -1;                              // индекс массива
double max;                               //максимаьная разница между элементами масивов

int init ()
{
ArrayResize(chPriceH, 0);
ArrayResize(chPriceL, 0);
ArrayResize(chPriceO, 0);
ArrayResize(chPriceC, 0);
ArrayResize(chTime, 0);
ArrayResize(avgPriceH, 0); 
ArrayResize(avgPriceL, 0); 
ArrayResize(avgPriceO, 0); 
ArrayResize(avgPriceC, 0); 
ArrayResize (C, 0); 
ArrayResize (T, 0);
ArrayResize (y, 0);
}
 int start()
 {
   double volMA11, volMA12, volMA21, volMA22;  
   double x[], y[]; 
   
   Print("***старт***");
   
   if(!TF_F_NewBar())return(0);
 
   Print("---1-собираем данные индикаторов---");
   volMA11 = iCustom(NULL, 15, "volumeMA",  2, 1);         
   volMA12 = iCustom(NULL, 15, "volumeMA",  2, 2);
   volMA21 = iCustom(NULL, 15, "volumeMA",  3, 1);
   volMA22 = iCustom(NULL, 15, "volumeMA",  3, 2);
   Print("volMA11 = "+volMA11);
   Print("volMA12 = "+volMA12);
   Print("volMA21 = "+volMA21);
   Print("volMA22 = "+volMA22);
   Print("----1 данные собраны---END");   
   Print("---2 какой день недели--");
   if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4)
   {         
      Print("DayOfWeek = "+DayOfWeek());
  Print("----2---END");    
      if(Hour() >= startHourFlatMA && Minute() >= startMinFlatMA)
  Print("---3 проверка времени, разрешается ли искать флет---");
      {
         Print("время начала флета >=  "+Hour()+":"+Minute());
 Print("----3--end");
 Print("---4 есть ли пересечение линий индикатора----");
         if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0)
         {                                                                                   //если было пересечение
            susikirtimas = true;
            Print("пересечение = "+susikirtimas);
Print("---4---END");
Print("---5 жшдем окончания  M240 свечи--");
            LastTime = iTime(NULL, BarEnd, 1);
            Print("LastTime = "+LastTime);
            //startTime = Time[1];
         }      
         if(susikirtimas == true && iTime(NULL, BarEnd, 1)!= LastTime)
         {
            LastTime = iTime(NULL, BarEnd, 1);
            flat = true;
            Print("flat = "+flat);
         }
         if(flat == true)
         {
Print(-начало флета есть");
Print("-- 6 собираем данные в массивы--");
            //увеличиваем число элементов массива на один
            i++; 
            Print("увеличиваем длину массива в зависимости от i "); 
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i); 
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);           
             
            Print("с каждой новой свечой должны получить новые элементы массивов");
            avgPriceH[i] = High[1];  Print("AVG элемент avgPriceH["+i+"] = "+avgPriceH[i]);   
            avgPriceL[i] = Low[1];   Print("AVG элемент avgPriceL["+i+"] = "+avgPriceL[i]);   
            avgPriceO[i] = Open[1];  Print("AVG элемент avgPriceO["+i+"] = "+avgPriceO[i]);   
            avgPriceC[i] = Close[1]; Print("AVG mэлементasyvo elementas avgPriceC["+i+"] = "+avgPriceC[i]);            
            j++; Print("индех канальных массивов  j = "+j);      
            ArrayResize(chPriceC,j); Print("CH masyvo ilgis chPriceC = "+j); 
            ArrayResize(chTime,j);     Print("CH masyvo ilgis chTime = "+j); 
            //включен ли фильтр
            if(volFiltr)
            {               
               //да
               Print("да включен");
               Print("volMA11 = "+volMA11, "   Volume[1] = "+Volume[1]); 
               if(volMA11 - Volume[1] >= 0)//фильтр
               {
                  Print("записываем Close[1] ir Time[1] в массивы");
                  chPriceC[j] = Close[1];  Print("masyvo elementas chPriceC["+j+"] = "+j);                   
                  chTime[j] = Time[1];     Print("masyvo elementas chTimev["+j+"] = "+j); 
               }
               else
               {
                  //renkam
                  chPriceC[j] = 0;    Print("masyvo elementas chPriceC["+j+"] = "+j); 
                  chTime[j] = 0;      Print("masyvo elementas chTimev["+j+"] = "+j); 
               }
            }
Print("получилис отфильтрваные массивы с нулями ");
            else // jei filtras isjungtas, tada duomenys kanalo skaiciavimui
            {
               //renkam
               Print("если фильтр выключен");
               Print("pradedam rinkti Close[1] ir Time[1] duomenis i masyvus po filtracijos");
               //chPriceH[j] = High[1]; Print("masyvo elementas chPriceH["+j+"] = "+j); 
               //chPriceL[j] = Low[1];  Print("masyvo elementas chPriceL["+j+"] = "+j); 
               chPriceC[j] = Close[1];  Print("masyvo elementas chPriceC["+j+"] = "+j); 
               //chPriceO[j] = Open[1]; Print("masyvo elementas chPriceO["+j+"] = "+j); 
               chTime[j] = Time[1];     Print("masyvo elementas chTimev["+j+"] = "+j);                                                                                              
            }
         //suzinom kokio ilgio masyvai
         Print("после того как массивы собраны узнаем их длину");
         Print("ArrayRange(chPriceC, 0) = "+iC);         
         Print("фильтруем их от нулей, после фильтрции длина массивов меньше чем была до фильтрции");                 
         for(int k = 0; k <= iC; k++)        
         {            
            if(chPriceC[k] > 0)          
            {
               n++;                           
                ArrayResize(C,n);
                ArrayResize(T,n);
                C[n] = chPriceC[k];
               T[n] = chTime[k];        
               Print("naujo masyvo elementas C["+n+"] = "+C[n]);
               Print("naujo masyvo elementas irasytas T["+n+"] = ",T[n]);
               Print("naujo atfiltruoto masyvo ilgis n = ",n);
            }
         }         
       }              
     }
   }
Print("так масивы набирается свеча за свечой пока несработает 7 – ая часть кода"); 

   Print("----------- 6 массивы набирается------------------------end");
Print("----------- 7 массивы набраны------------------------end"); 

   //if(DayOfWeek()==0 || DayOfWeek()==6) return(0);
   
   if(((Hour() >  startHourEnd && Minute() > startMinEnd) &&                                          //jei jau laikas po 6.30
Print("если начялось время начала поиска конца флета"); 

      (volMA11 - volMA21 > 0 && volMA22 - volMA12 > 0))  ||                               //пересечение индикаторных линий
      (Hour() >  endHourEnd && Minute() > endMinEnd))
      {                                                      // или кончилось время флета
        susikirtimas = false; //сбрасываем флаг начала пересичения инд. линий на вход во флет
         flat = false;  //сбрасываем флаг начала флета
         i = -1; //Возвращаем начальные индексы массивов
         j = -1;
   //ищем линию регрении     
        ArrayChLR(C, y, max);//ArrayLR(x, y)
//ищем точки для фибо уровней
        double y161Plus_1 = y[1] + max/50 * 161;
        double y261Plus_1 = y[1] + max/50 * 261;
        double y361Plus_1 = y[1] + max/50 * 361;
        double y423Plus_1 = y[1] + max/50 * 423;
        
        double y161Minus_1 = y[1] - max/50 * 161;
        double y261Minus_1 = y[1] - max/50 * 261;
        double y361Minus_1 = y[1] - max/50 * 361;
        double y423Minus_1 = y[1] - max/50 * 423;
        
        double y161Plus_2 = y[n-1] + max/50 * 161;
        double y261Plus_2 = y[n-1] + max/50 * 261;
        double y361Plus_2 = y[n-1] + max/50 * 361;
        double y423Plus_2 = y[n-1] + max/50 * 423;
        
        double y161Minus_2 = y[n-1] - max/50 * 161;
        double y261Minus_2 = y[n-1] - max/50 * 261;
        double y361Minus_2 = y[n-1] - max/50 * 361;
        double y423Minus_2 = y[n-1] - max/50 * 423;
        
        //turim po dvi kainos koordinate, o laiko galim paimti is masyvo T[]
        //galim brezti linijas
        //y=(y2-y1)/(x2-x1)*(x-x1)+y1
        double y161Plus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1;
        double y261Plus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1;
        double y361Plus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1;
        double y423Plus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1;
        
        double y161Minus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1;
        double y261Minus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1;
        double y361Minus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1;
        double y423Minus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1;
        //чертим линии 
        SetTLine(Thistle, "", T[1], y161Plus_1, StrToTime("20:00"), y161Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y261Plus_1, StrToTime("20:00"), y261Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y361Plus_1, StrToTime("20:00"), y361Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y423Plus_1, StrToTime("20:00"), y423Plus_3, 0, 1);
        
        SetTLine(Thistle, "", T[1], y161Minus_1, StrToTime("20:00"), y161Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y261Minus_1, StrToTime("20:00"), y261Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y361Minus_1, StrToTime("20:00"), y361Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y423Minus_1, StrToTime("20:00"), y423Minus_3, 0, 1);
        
         
      } 
      
   return(0);
 }

 //-----------------------------------------------------------------------------------------------------
 
void ArrayChLR(double& x[], double& y[], double& max) {
  double a, b, c, sx=0, sx2=0, sxy=0, sy=0;
  int    i, n=ArraySize(x);

  if (n>1) {
    for (i=0; i<n; i++) {
      sx+=i+1;
      sy+=x[i];
      sxy+=(i+1)*x[i];
      sx2+=(i+1)*(i+1);
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
    if (c!=0) a=a/c; else a=0;
    b=(sy-a*sx)/n;
    ArrayResize(y, n);
    max = 0; 
    double dif[];
    ArrayResize(dif, n);
    for (i=0; i<n; i++) 
    {
      y[i]=a*(i+1)+b;
      dif[i] = MathAbs(Close[i] - y[i]);
      if(dif[i] > max) max = dif[i];      
    }
  } else Print("ArrayLR(): per mazas x masyvo elementu skaicius! n=", n);
}

 
附加的文件:
 
Dikii:
是否可以从EA中按时间找出历史上的价格(Ask和Bid)?例如,Asc 10分钟前或10秒前。有 一些已知的功能,可以在一定时期内获得开盘价、收盘价和海低点的时间序列,但在一个特定的时间点,如何找出卖出价和买入价

在/history/server/文件夹里有ticks.raw文件,从那里你理论上可以从Market Watch获得当前时刻之前短时间内的符号买入和卖出。在这个方向上做一个论坛搜索...对于该文件中的数据存储机制,我无法从记忆中说出具体的内容。
 
gince:

我之前问过关于数组的问题。似乎还是没有弄清楚。当你在测试器上运行时,有一个除以零的结果。这意味着在某个数组中存在着零。我无法弄清错误在哪里。附录中的代码。WORDe中的评论为俄语。对此我很抱歉。我的Metaeditor不支持俄语。

帮助我找到错误的地方。如果你不介意解释一下。


我建议在每次除法前写上Print(除以什么)--你会马上知道零在哪里。
 
alsu:

我建议输入Print(到我们除以什么);在每次除法之前,你会立即知道零在哪里

只有一个部门。而根据CMM函数(虽然它是满的),它说函数中产生的数组中没有足够的数据。我不能理解为什么。这就是为什么我得到了除以0的 结果。