Pergunta para os conhecedores - página 8

 

Boa tarde. No 'Sensation! Uma estratégia lucrativa foi encontrada!

Rid postou um EAesta manhã. Fiz o download, otimizei-o um pouco e o executei.

Funciona em uma conta demo (dax) sem nenhum problema (mt4 brok-trade).

Eu o testei por conta real. Lote inicial=0,01 ou 0,1.

Não funciona! Erro de retorno de log

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: quantidade de lotes inválidos para a função OrderSend

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: OrderSend()- Erro OP_SELLSTOP. op 5087.50000000 sl 0.00000000 tp 0.00000000 4051

//------------------------------------------------------------------

Não consigo entender por que.

O tamanho do depósito permite definir um determinado lote com uma reserva. Não há restrições no código do Consultor Especialista para a conta real.

Então, qual é o problema? Por favor, avise!


 

Aqui está o código fonte.

...!!!!!!!!!!!!!!!!!! .........!!!!!!!!!!!!!!!!!

Eu me pergunto. Quando eles irão remover as restrições ao código? Por que não posso postar em uma janela aberta o código de um EA em sua totalidade em um fórum especializado?

A resposta que recebo em vez de "TAMANHO PRONTO DE TEXTO" funciona muito bem.

Parece que a MQ é formada por "cossacos" de um concorrente que fazem de tudo para mexer com os visitantes e evitar que eles façam as perguntas certas aqui.



Arquivos anexados:
hlopmaster.mq4  11 kb
 

Aqui estão os pedaços de código responsáveis pelo cálculo dos lotes:

//------------------------------------------------
double GetMaxLot()// Функция возвращает максимальный обьем 
//открытой позиции.  
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol()
          && maxlot<OrderLots()){ maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//-----------------------------------------------
double GetMaxLotOrder()
//Функция возвращает максимальный обьем установленных
// стоп ордеров. 
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUYSTOP ||OrderType()==OP_SELLSTOP)  &&
           OrderSymbol()==Symbol() && maxlot<OrderLots())
           { maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//----------------------------------------------
int GetLastTypePos(){
   int i;datetime dt;int type;
      for( i=1; i<=OrdersTotal(); i++)         
      {
         if(OrderSelect( i-1, SELECT_BY_POS)==true) 
          {                                   
              if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol() 
              && dt<OrderOpenTime())
              { dt=OrderOpenTime(); type=OrderType();}
          }
       }   
   return( type);
}
//-----------------------------------------------
int DopOrder(double Lots)
{
int type= GetLastTypePos();
   if( type==1){
     op=Bid+ pips*Point;if( SL>0){ sl=Bid;}else{ sl=0;}if( TP>0){ tp= op+ TP*Point;}else{ tp=0;}
     err=OrderSend(Symbol(),OP_BUYSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
     if( err<0){Print("OrderSend()-  Ошибка OP_BUYSTOP. 
                op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
   if( type==0){
      op=Ask- pips*Point;if( SL>0){ sl=Ask;}else{ sl=0;}if( TP>0){ tp= op- TP*Point;}else{ tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
      if( err<0){Print("OrderSend()-  Ошибка OP_SELLSTOP. 
                   op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//-------------------------------------------------
int CloseAllPos(int type)
{  int buy=1; int sell=1;
int i, b=0;int ordertiket;
 
 if( type==1)
   {
   while( buy==1)
     {
        buy=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){ buy=1; 
                                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{ buy=0;}
         }  
         if( buy==0){return(0);}
      } 
   }
   
   if( type==0)
   {
      while( sell==1)
     {
        sell=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){ sell=1;
                                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{ sell=0;}
         }  
         
        if( sell==0){return(0);}
      } 
     }
   return(0);
   }
//--------------------------------------------------------


 
Rita писал(а) >>

Aqui estão os pedaços de código que calculam os lotes:

O Expert Advisor não foi projetado para trabalhar em uma conta real. Se houver pelo menos uma posição aberta sobre outros símbolos, então a lógica de trabalho é quebrada. Claro, pode ser corrigido, mas eu, por exemplo, não vejo muito sentido em fazer isso.

 
Obrigado. Por que então um erro tão estranho é devolvido?
 
Rita писал(а) >>
>> Obrigado. Por que um erro tão estranho está voltando então?

O erro mais provável ocorre

   if(OrdersTotal()<1){ err= OpenNewOrders();}
   if(OrdersTotal()>0){ TrailStopOrders();}

ao chamar TrailStopOrders();

Uma vez que já existem pedidos para outros símbolos. Neste caso, a EA não abre de forma alguma.

No entanto, temos que considerar a lógica.

Parece que o erro ocorre em outro lugar. Mas não serei capaz de verificar. Não tenho nenhuma posição em aberto.

Só posso verificar isso em minha mente. E eu preciso que minha EA seja minha para isso.

 
Você sabe se existe um sistema no MT4 para determinar pips ganhos ou perdidos nas negociações de hoje em dia?
 

Não está muito claro o que exatamente você quer. Dê uma olhada neste projeto.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
Rita, obrigada!
 

Boa noite. Surgiu um grande problema. Não realmente sobre o assunto. E um timing muito ruim.

Ontem à noite recebi um link incompreensível em meu ICQ, que eu cliquei descuidadamente.

Depois disso, meu computador congelou e uma janela apareceu com a sugestão de enviar um sms.

Reinicializei o computador algumas vezes e ele foi desbloqueado após 45-50 minutos.

Mas agora eu não consigo entrar na minha carteira WM

Requer algum tipo de código de acesso chave. (As próprias chaves do arquivo são).

Eu não sei o que fazer. Quem sabe se estava em um sititsiyu semelhante?