[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 212

 

Agora não está claro o que é retornado da função

retorno(OrdOpenTimeBuy);

 
Roger:

Agora não está claro o que é retornado da função

retorno(OrdOpenTimeBuy);

É melhor?

//=========== 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:

Isso é melhor?


Sim, isso serve.
 
Roger:
sergeev:

Obrigado.

Eu corrigi esses erros, mas a EA ainda está com problemas. Vamos continuar cavando :)

 
nemo811:

Obrigado.

Eu consertei esses erros, mas a EA ainda está com problemas. Vamos continuar cavando :)


Pensei que seu arquivo metaeditor.exe tinha sido excluído e você está verificando manualmente se há erros.

Se for um EA, definitivamente não vai funcionar. você não tem uma função inicial em seu código.

 

Estou com a cabeça toda lixada.

Eu escrevi este código:

  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);
         }
       }       
      }       
     }  
    }  
   }  
  }
 

É uma falha. Mas se você colocar um número específico na condição..:

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

ao invés de LowestPoint, tudo funciona como um relógio.

A procura pelo LowestPoint é dada no post acima.

Por favor, ajude-me, é o segundo dia de escavação.

Obrigado de antemão.

 
sergeev:

Pensei que seu arquivo metaeditor.exe tinha sido excluído e você estava verificando manualmente a existência de erros.

Se for uma EA, definitivamente não funcionará. Você não tem a função de início em seu código.

Você é muito meticuloso, mas também lhe agradeço por isso.

Estou dando apenas a parte do código que me interessa. Se você postar a EA inteira, a pergunta pode se perder :)

Obrigado.

 
você não verifica o valor por -1
ShiftBuy
 
MENSAGEM, Existe uma função, como a mais alta apenas para MACD
 
CLAIN:
MENSAGEM, Existe uma FUNÇÃO como a mais alta apenas para MACD

Não me deparei com isso, mas é possível escrever... Isto seria sobre o valor máximo da linha principal para as últimas 10 barras, sem contar com a atual:

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);
}