Pregunta para los entendidos - página 8

 

Buenas tardes. En la campaña "¡Sensación! ¡Se ha encontrado una estrategia rentable!

Rid publicó un EAesta mañana. Lo descargué, lo optimicé un poco y lo ejecuté.

Funciona en una cuenta demo (dax) sin problemas (mt4 brok-trade).

Lo he probado en una cuenta real. Lote inicial=0,01 o 0,1.

No funciona. El registro devuelve el error

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: cantidad de lotes no válida para la función OrderSend

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

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

No puedo entender por qué.

El tamaño del depósito le permite fijar un lote determinado con una reserva. No hay restricciones en el código del Asesor Experto para la cuenta real.

¿Cuál es el problema? Por favor, aconséjeme.


 

Aquí está el código fuente.

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

Me pregunto. ¿Cuándo eliminarán las restricciones del código? ¿Por qué no puedo publicar en una ventana abierta el código de un EA en su totalidad en un foro especializado?

La respuesta que obtengo en lugar de "LISTO TAMAÑO DE TEXTO GRANDE" funciona demasiado bien.

Parece que en MQ trabajan "cosacos" de la competencia que hacen todo lo posible por fastidiar a los visitantes y evitar que hagan las preguntas correctas aquí.



Archivos adjuntos:
hlopmaster.mq4  11 kb
 

Aquí están las piezas de código responsables de calcular los 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 писал(а) >>

Aquí están los trozos de código que calculan los lotes:

El Asesor Experto no está diseñado para trabajar en una cuenta real. Si hay al menos una posición abierta en otros símbolos, se rompe la lógica de trabajo. Por supuesto, se puede corregir, pero yo, por ejemplo, no le veo mucho sentido a hacerlo.

 
Gracias. ¿Por qué entonces se devuelve un error tan extraño?
 
Rita писал(а) >>
>> Gracias. ¿Y entonces por qué se devuelve un error tan extraño?

Lo más probable es que el error se produzca

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

al llamar a TrailStopOrders();

Como ya hay pedidos para otros símbolos. En este caso, el EA no se abre en absoluto.

Sin embargo, hay que tener en cuenta la lógica.

Parece que el error se produce en otro lugar. Pero no podré comprobarlo. No tengo ningún puesto vacante.

Sólo puedo comprobarlo en mi mente. Y para ello necesito que mi EA sea mío.

 
¿Sabes si hay un sistema en MT4 para determinar los pips ganados o perdidos en las operaciones de hoy?
 

No está muy claro lo que quiere exactamente. Echa un vistazo a este diseño.

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

 
Rita, ¡gracias!
 

Buenas noches. Ha surgido un gran problema. No es realmente un tema. Y muy mal momento.

Anoche recibí un enlace incomprensible en mi ICQ, en el que hice clic por descuido.

Después de eso, mi ordenador se congeló y apareció una ventana con la sugerencia de enviar un sms.

Reinicié el ordenador varias veces y se desbloqueó después de 45-50 minutos.

Pero ahora no puedo entrar en mi cartera WM

Requiere algún tipo de código de acceso a la llave. (Las propias claves del archivo lo son).

No sé qué hacer. ¿Quién-knib. estaba en una sititsiyu similar?

Razón de la queja: