[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 212

 

现在还不清楚从函数中返回的是什么

return(OrdOpenTimeBuy)。

[Deleted]  
Roger:

现在还不清楚从函数中返回的是什么

return(OrdOpenTimeBuy)。

它是否更好?

//=========== OrdTimeBuy_b(int MAGIC) ===============================================================
//  Функция возвращает время открытия последнего рыночного Buy-ордера, принадлежащего MAGIC или 777 
//---------------------------------------------------------------------------------------------------
datetime OrdTimeBuy_b(int MAGIC)
 {
  string SMB=Symbol();
  datetime OrdOpenTimeBuy=0;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_BUY)
           {
            if(OrdOpenTimeBuy<OrderOpenTime())
             {
              OrdOpenTimeBuy=OrderOpenTime();
             }  
           }  
         }  
       }          
     }
   }
   if(OrdOpenTimeBuy==0) return(0);
   return(OrdOpenTimeBuy);
 }
//=====================================================================================================


//===========  Локальная низинка  =================================================================
  double LowestPoint_b(int MAGIC)
   {  
    datetime OrdOpenTimeBuy=OrdTimeBuy_b(MAGIC);  
    int ShiftBuy=0;
    double LowestPoint=0;
    if (OrdOpenTimeBuy!=0)
     {  
      ShiftBuy=iBarShift(NULL,PERIOD_M1,OrdOpenTimeBuy,true);
      LowestPoint=iLow(NULL,PERIOD_M1,iLowest(NULL,PERIOD_M1,MODE_LOW,ShiftBuy,0));
     } 
    return(LowestPoint);
   }  
//=================================================================================================
 
nemo811:

这样好吗?


是的,这就可以了。
[Deleted]  
Roger:
sergeev:

谢谢你。

我已经修复了这些错误,但EA仍然是故障不断。让我们继续挖掘吧 :)

 
nemo811:

谢谢你。

我修复了这些错误,但EA仍有故障。我们会继续挖掘的 :)


我以为你的metaeditor.exe文件被删除了,你在手动检查错误。

如果是EA,肯定是不行的。你的代码中没有启动 功能。

[Deleted]  

我的头都被搞乱了。

我写了这段代码。

  RefreshRates();
  bool ticket2=false;
  if(st_TrStop>0 && SchSellStop777_b()>0) {
   double LowestPoint=LowestPoint_b(MAGIC);
   double ee=0;
   for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
    else{//начало работы с выбранным ордером
     if(OrderSymbol()==SMB && OrderMagicNumber()==MAGIC) {
     if(OrderType()==OP_BUY) {//находится вверху, едет вниз  
     Last_OrderOpBuy(MAGIC);
     if(((Ask-(st_BU+ad.Spred+1)*Point)>=OrderOpenPrice()) ||
        ((Ask-(st_TrStop-1-ad.Spred)*Point)>=LowestPoint)) {

     if((Ask-(st_BU+ad.Spred+1)*Point)>=OrderOpenPrice())
      {
       Price_SS=NormalizeDouble(OrderOpenPrice()+(ad.Spred+1)*Point,Digits);
      }
     else
      { 
       Price_SS=NormalizeDouble(LowestPoint-1*Point,Digits);     
      }  

     if(ChastZakr)
      {
       if(SchBuy>1)
        {  
         OrderClose(OrdTicketBuy,OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),Proskalz,CLR_NONE);
         Alert(SMB,": произведено частичное закрытие Buy-позиции, тикет: ",OrdTicketBuy,".");
         ee=SchBuyLots-OrderLots();
        }   
       else
        {  
         if(SchBuyLots+SchBuyLots777>MinLot)
          { 
           OrderClose(OrdTicketBuy,NormalizeDouble(OrderLots()/2,2),MarketInfo(OrderSymbol(), MODE_BID),Proskalz,CLR_NONE);
           Alert(SMB,": произведено частичное закрытие Buy-ордера, тикет: ",OrdTicketBuy,".");
           ee=SchBuyLots-NormalizeDouble(OrderLots()/2,2);
          }  
        }  
      }
     else
      {   
       ee=SchBuyLots;
      }

      DeleteOtlozhMAGIC(MAGIC);
      DeleteOtlozh777();
      ticket2=OrderSend(Symbol(),OP_SELLSTOP,ee,Price_SS,Proskalz,0,0,"MAGIC_" + MAGIC,MAGIC,0);
        if(ticket2!=0 && ticket2!=-1) {
          Alert (SMB,": установлен траловый SellStop.");
          Print(SMB,": установлен траловый SellStop.");
         }
        if(ticket2==0 || ticket2==-1) {
          GLE=GetLastError();
          ED=ErrorDescription(GLE);
          Alert (SMB,": ошибка №",GLE," установки тралового SellStop.");
          Alert (SMB,": описание ошибки - ",ED);
          Print (SMB,": ошибка №",GLE," установки тралового SellStop."); 
          Print (SMB,": описание ошибки - ",ED);
         }
       }       
      }       
     }  
    }  
   }  
  }
 

它是有缺陷的。但是,如果你在条件中放入一个具体的数字..:

     if(((Ask-(st_BU+ad.Spred+1)*Point)>=OrderOpenPrice()) ||
        ((Ask-(st_TrStop-1-ad.Spred)*Point)>=LowestPoint)) {

...而不是LowestPoint,一切都像钟表一样运作。

寻找LowestPoint的方法在上面的帖子中给出。

请帮助我,现在是挖掘的第二天。

提前感谢。

[Deleted]  
sergeev:

我以为你的metaeditor.exe文件被删除了,你在手动检查错误。

如果这是一个EA,它肯定不会工作。 你的代码中没有启动 功能。

你非常细致,但我也为此感谢你。

我只显示我感兴趣的那部分代码。如果你把整个EA贴出来,问题可能会丢失 :)

谢谢你。

 
你不通过-1检查值
ShiftBuy
[Deleted]  
讯息,是否有一个函数,像ihighest 一样只针对MACD
 
CLAIN:
讯息,是否有一个类似ihighest的函数只适用于MACD?

我没有遇到过,但有可能写...这将是关于过去10个柱子的主线的最大值,不包括当前的柱子。

double Hi ()
{ int i,j; H=0;
while (i<=10)
{if (H<iMACD (NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)) 
H=iMACD (NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1);
i++;}
return(H);
}