任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 175

 

该EA在交易后的33个柱子上退出。

static datetime t;

if (условие)
      {
      Opn_B = true; 
      t=Time[0];
      minimum = iLow(Symbol(),Period(),0);
      }
if (Time[33]>t) 
          {                                      
          Cls_B=true;              
          }

在真实的和测试的情况下,它在43条上退出。我试着在第五条杠上设置退出参数,一切正常。在您看来,问题可能是什么?

 
Forexman77:

该EA在交易后的33个柱子上退出。

在真实的和测试的情况下,它在43条上退出。我试着在第五条杠上设置退出参数,一切正常。在您看来,问题可能是什么?


也许如果 (条件) 被执行了几次(例如在10条时再执行一次),而这次执行推迟了生命时间?

 
ALXIMIKS:


也许如果 (条件) 被执行了几次(例如在10个柱子时再执行一次)? 而这种执行延迟了生命时间

一笔交易:15:37进场,16:19出场。更正确地说,是在第41条上退出。
 
Forexman77:
一笔交易:15:37进场,16:19出场。更正确地说,是在41个小节时退出。


如果我们用iBarShift 代替它,我不知道错误是否会继续存在?也许历史上有缺失的酒吧(肯定没有洞?

在条件满足后,进入开盘条,看看有多少条真正开盘,因为参考时间不是很正确。

 
ALXIMIKS:


如果我们用iBarShift 代替它,我不知道错误是否会继续存在?也许在历史上,酒吧是缺失的(肯定没有孔?

在条件满足后,输入一个开放条数,看看到底有多少条是开放的,因为参考时间似乎并不正确。

代码应该是这样的吗?

static datetime t;
datetime s=Time[33]>t;

if (условие)
    {
      Opn_B = true; 
      t=Time[0];
      int shif= iBarShift(Symbol(),PERIOD_M1,t,false);
      minimum = iLow(Symbol(),Period(),0);
      }
if (iBarShift(Symbol(),PERIOD_M1,s,false)) 
    {                                      
     Cls_B=true;              
    }

这种代码会锁定专家顾问。

 

你好,请你帮助我使警报在每条线上通过一次,而不仅仅是在第一条线上。

我已经按时间限制了警报的数量,但我不明白如何为一个酒吧做缓冲

 datetime LastAlertTime = 0;
int start()
  {

  string namesymb=Symbol();
  string tf=Period();

       for(int i = ObjectsTotal()-1; i >= 0; i--)
      {
         string name = ObjectName(i);
         
         if(ObjectType(name) == OBJ_TREND)
         {
            double value = ObjectGetValueByShift(name, 0);                    
             if(Bid <= value + Point && Bid >= value - Point)          
            {
            if (LastAlertTime < Time[0]){
            LastAlertTime = Time[0];
            
               Alert(namesymb,"  M",tf,"   ",name);
             }
                Comment("\n\n Alert running \n ", TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS),"\n\n M",tf,"   ",name); 
            } 
         }      
}
 
Forexman77:

该EA在交易后的33个柱子上退出。

在真实的和测试的情况下,它在43条上退出。我试着在第五条杠上设置退出参数,一切正常。你认为问题可能是什么?


让我们以清醒的头脑开始。

标志Opn_B = true的 时间并不意味着什么 因为订单可能不会在同一秒内打开。

你可以使用订单的开仓时间OrderOpenTime,或者你可以把成功开仓后的时间值赋给变量t。

下一篇: 你已经使用了

minimum = iLow(Symbol(),Period(),0);

1)如果使用相同的货币和时间框架,你需要iLow,还是只使用Low 会更好?

2)Symbol()和 Period() 值在重复使用时最好放到变量中。一切都会影响到性能 - 习惯于此。

分钟图--如果一分钟内没有一个刻度线--就不会画出新的条形图(可能是一种技巧)。

那么iBarShift呢?

static datetime t;

if (условие)
      {
      Opn_B = true; 
      t=Time[0];
      minimum = iLow(Symbol(),Period(),0);
      }
if (iBarShift(Symbol(),1,t,false)>33) 
          {                                      
          Cls_B=true;              
          }

目前最充分的似乎是

if ((TimeCurrent-t)/60)>33) Cls_B=true;
 
oleksaz:

你好,请你帮助我使警报在每条线上通过一次,而不仅仅是在第一条线上。

我已经按时间限制了警报的数量,但我不明白如何对一个柱状物进行缓冲。

string namesymb=Symbol();
string tf=Period();

是否值得在每次打勾时对变量重新估值?

字符串 tf = Period() 是否影响1000000次循环运行的性能,还是 inttf = Period() 更正确 我自己也不知道。

 if(Bid <= value + Point && Bid >= value - Point)  

这个条件正确吗?如果循环有4个峰值呢?

if (LastAlertTime < Time[0])
LastAlertTime = Time[0];
          

这里我们还有一个问题。也就是说,如果第一行的条件成立,那么第二行的条件显然是假的,警报就不会弹出。

它甚至不会在下一个tick上弹出,因为蜡烛的开盘时间只会随着新蜡烛的到来而改变。

 
ALXIMIKS:


目前最合适的选择似乎是


对不起,但试图通过时间来计算条数 是一个非常不恰当的方法。
 
ALXIMIKS:

是否值得在每次勾选时重新编码变量?

字符串 tf = Period() 是否会影响1000000次循环运行的性能 还是inttf = Period() 更正确 我自己也不知道。

这个条件正确吗?如果循环有4个峰值呢?

这里我们还有一个问题。也就是说,如果第一行的条件成立,那么第二行的条件显然是假的,警报就不会弹出。

它甚至不会在下一个tick上弹出,因为蜡烛的开启时间只会随着新蜡烛的到来而改变。


int start()
  {
string scrdate,nametf;

        if (Period()==PERIOD_M1)  nametf="9_M1";
        if (Period()==PERIOD_M5)  nametf="8_M5";
        if (Period()==PERIOD_M15) nametf="7_M15";
        if (Period()==PERIOD_M30) nametf="6_M30";
        if (Period()==PERIOD_H1)  nametf="5_H1";
        if (Period()==PERIOD_H4)  nametf="4_H4";
        if (Period()==PERIOD_D1)  nametf="3_D1";
        if (Period()==PERIOD_W1)  nametf="2_W1";
        if (Period()==PERIOD_MN1) nametf="1_Monthly";
/////////////////  
       for(int i = ObjectsTotal()-1; i >= 0; i--)//мониторим все объекты
      {
         string name = ObjectName(i);//имя объектов берем из i переменной
         
         scrdate=StringConcatenate(Symbol()," ",TimeToStr(TimeCurrent(), TIME_DATE),"_",Hour(),".",Minute()," ",nametf," ",".jpg");//,name

         if(ObjectType(name) == OBJ_TREND)//отбираем тип по имени 
         {
            double value = ObjectGetValueByShift(name, 0);//функция для объектов
            
            Comment("\n\n Alert running \n ", TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS),"\n\n M",Period(),"   ",name);           
            
             if(Bid <= value + Point && Bid >= value - Point)
             
            {
            if (LastAlertTime < Time[0]){
            LastAlertTime = Time[0];
            
               Alert(Symbol(),"  M",Period(),"   ",name);
               /////////////////////////////////////////////////
               WindowScreenShot(scrdate,1920,1200,0,-1,-1);
               ////////////////////////////////////////////////////////
             }               
            }
         }
}
   return(0);
  }

1.删除

2.我同意如果缺口不是信号(应该是),没有信号->没有价格->没有交易。

3.这就是我上面说的,但该怎么做?

PS 谢谢你的答复