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

 
Valeriy Yastremskiy:

逻辑很蹩脚,一切都在那里,门票和订单类型 的数组都在那里。只是在开单时它没有被填满,而且由于某种原因,数组在TicketLimit函数中被清零了。乍一看,它看起来是这样的。

它怎么会像国际象棋?我们缺少一招。我将尝试分析它。谢谢你,瓦莱里。

 

我怎样才能把酒吧的统计数字搞好?

我这样做了,正确地计算了数字,但当我试图使用数据时,我得到了 "0"

//---
   int i,limit;
   datetime Start=0;
   if((rates_total-prev_calculated-1)<=0)return(0);
   limit=rates_total-prev_calculated-1;
   for(i=limit; i>=0; i--) 
     {
      Label1Buffer[i]=open[i];
      Label2Buffer[i]=close[i];
      if(Start!=time[i])
        {
         a+=1;                                        // кол-во баров
         if(Label1Buffer[i] <Label2Buffer[i]) u+=1;   // восходящие бары
         if(Label1Buffer[i] >Label2Buffer[i]) d+=1;   // нисходящие бары
         if(Label1Buffer[i]==Label2Buffer[i]) b+=1;   // Дожи
         Start=time[i];
        }
      if(Start==time[i]&&a<=limit)
        {
         Print(i," / ",u," / ",d," / ",b," / ",a," / ",limit);//
        }
      if(a==limit) 
        {
         ObjectCreate(0,"STAT1",OBJ_TEXT,0,time[0],high[0]+750*Point);
         ObjectSetText("STAT1",d,8,"Arial",clrBlack);
         ObjectCreate(0,"STAT2",OBJ_TEXT,0,time[0],low[0]-250*Point);
         ObjectSetText("STAT2",u,8,"Arial",clrBlack);
         Print(d/u);
        }
     }
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 0
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 1 / 3041 / 2971 / 41 / 6053 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 2 / 3041 / 2970 / 41 / 6052 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 3 / 3041 / 2969 / 41 / 6051 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 4 / 3041 / 2968 / 41 / 6050 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 5 / 3041 / 2967 / 41 / 6049 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 6 / 3041 / 2966 / 41 / 6048 / 6053

也许有一个正常的方法,但我 "重新发明车轮")

请告知。

 
MakarFX:

我怎样才能把酒吧的统计数字搞好?

我这样做了,正确地计算了数字,但当我试图使用数据时,我得到了 "0"

也许有一个正常的方法,但我 "重新发明车轮")

请告知。

看起来你有所有的int变量,除法的结果小于0,因此是0。

试试吧。

Print((double)d/u);
 
Galim_V:

就像在国际象棋中?缺少一个动作。我会试着把它弄明白。谢谢你,瓦莱里。

в глобальной области
int ind=0, Ind=0;
......

 if(ParSar>MaxClose&&chekt==1){

    ticket=_OrderSend(NULL,OP_BUYSTOP,0.01,MaxClose+(spread*Point()),0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
  }
    }
    if(MinClose!=0){
   if(ParSar<MinClose&&chekt==1){
    _price= NormalizeDouble( MinClose-(spread*Point()),Digits);
    ticket=_OrderSend(NULL,OP_SELLSTOP,0.01,_price,0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
........

for(i=Ind,i<1,Ind--) // вместо Ind OrderTotal правильнее, если есть и другие ордера в терминале
{OrderSelect( _Tacket[i], SELECT_BY_TICKET )
проверки и действия
}
// Здесь запомнить тикет в массив _тикет и тип ордера тоже и запомнить последний индекс массива!!!

 //А потом в Ордер селект подставлять значение массива _тикет) Цикл по индексу массива _тикет от 1 до последнего индекса.
 
Mihail Matkovskij:

看起来你有所有的int变量,除法的结果小于0,因此是0。

试试吧。

谢谢你。
 
再次感谢大家对我之前项目 的帮助。

这是下一个EA的另一个想法,也许有人已经熟悉了ORBO(open Range Brake out)策略?

 

你能告诉我是否有一个函数可以简化这个开单的定义?

if(Bid < OpenPrice && Bid > OpenPrice-10*Point)
if(Ask > OpenPrice && Ask < OpenPrice+10*Point)
我们的想法是,如果价格不在这个范围内,订单就不会被打开。
 
MakarFX:

你能告诉我是否有一个函数可以简化这个开单的定义?

我们的想法是,如果价格不在这个范围内,订单就不会被打开。

把它画在纸上。

OpenPrice _________________________

投标 _________________________

OpenPrice-10*_Point________________________


从图片中你可以看到,OpenPrice - Bid不应该高于10*_Point。

 
Alexey Viktorov:

好吧,把它画在纸上。

OpenPrice _________________________

投标 _________________________

OpenPrice-10*_Point________________________


从图片中你可以看到,OpenPrice - Bid不应该超过10*_Point。

模块差异。在没有模块的情况下,只有顶部区域属于条件。 |开盘价-买入价|>10*_点开盘条件

 
Alexey Viktorov:

好吧,把它画在纸上。

OpenPrice _________________________

投标 _________________________

OpenPrice-10*_Point________________________


从图片中你可以看到,OpenPrice - Bid不应该高于10*_Point。

你让我感到惊讶。


原因: