Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 756

 
ssn1:
Estoy acostumbrado a mi propio sistema de archivo.
Ya he sobrevivido sin problemas con el Keeper: la destrucción del disco duro de mi PC, el fallo de mi portátil. Y no he perdido ni un solo byte de mi código. La Bóveda es conveniente.
 

Buenas tardes.

He escrito un programa de ejercicios. Por alguna razón no funciona.

Lo probé en el probador de estrategias entre el 29 de septiembre y el 15 de octubre.

El programa debería funcionar así: hago una compra. Cuando el precio cae a 0,010 debería vender con pérdidas.

Se produce una compra. No hay venta. Empiezo a visualizar y veo que el precio no es sólo 0,010 más bajo, sino mucho más alto. Extraño.

// -------- variables --- Inicio -----
extern double L1=0.01; // tamaño del lote para comprar
extern double L1n=0.01; // tamaño del lote para comprar (lote normalizado)
extern double AktualAsk=0.0; // precio de oferta actual
extern double AktualBid=0.0; // precio de venta real
extern int int ticketlackmus=1; // indicador de la apertura exitosa de la orden.
extern int ticket1=0; // ticket
extern bool PozOtk1=true;
// -------- variables --- Fin -----
int init()
{
return(0);
}


int inicio()
{
si (PozOtk1==true)
{
//posición abierta
ticketlackmus=1;
while (ticketlackmus>0)
{
Alerta (" Abrir primera posición ");
RefreshRates();// Actualizar datos
AktualAsk=NormalizeDouble(Ask,Digits); //para el precio
L1n=NormalizeDouble(L1,2); //para el lote.
ticket1=Enviar orden ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);
si (ticket1>0) ticketlackmus=-1;
{
Alert (" ORDER OPEN ", ticket1, ", ticketlackmus);
}
}
PozOtk1=false;
Alerta (" PozOtk1 ", PozOtk1);
}

RefreshRates();// RefreshRates()
AktualBid=NormalizeDouble(Bid,Digits); //para el precio
if (AktualBid<=AktualAsk-0.010 && PozOtk1==false)
{
RefreshRates(); // Actualizar datos
OrderSelect(ticket1, SELECT_BY_TICKET;)
L1n=NormalizeDouble(L1,2); //para el lote
OrderClose (ticket1, L1n, AktualBid, 5);
PozOtk1=true;
}

return(0);
}

int deinit()
{
return(0);
}


Ozero.

 

Por favor, utilice el botón mágico SRC cuando inserte el código:

Insertar correctamente el código en el foro

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid<=AktualAsk-0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 

 

Si se abre una posición en un determinado símbolo (en este caso - "GBPUSD"), entonces es aconsejable tomar todos los datos también para este símbolo a través de marketinfo, es decir, no sólo AktualAsk=NormalizeDouble( Ask,Digits ); aktualAsk=MarketInfo( "GBPUSD",MODE_ASK);

Y por eso hay que tomar cualquier dato del mercado, para evitarlo.

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   //AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   AktualAsk=MarketInfo( "GBPUSD",MODE_ASK);
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid>=AktualAsk+0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 
evillive:

Si una posición se abre en un símbolo específico (en este caso - "GBPUSD"), entonces es aconsejable tomar todos los datos también en este símbolo a través de marketinfo, es decir, no sólo AktualAsk=NormalizeDouble( Ask,Digits); aktualAsk=MarketInfo( "GBPUSD",MODE_ASK);

Y por eso hay que tomar cualquier dato del mercado, para evitarlo.

¡Gracias Evillive!

He hecho cambios. Pero ya he empezado a comprar. No hay venta después de los cambios. Prueba M15 del 30 de septiembre de 2014 a mediados de octubre.



 
Ozero:

¡Gracias, Evillive!

Hice el cambio. Pero, la compra seguía adelante de todos modos. Después de los cambios, no se produce ninguna venta. Prueba M15 del 30 de septiembre de 2014 a mediados de octubre.



Encuentre donde en el código anterior puede haber una venta
 
OrderClose (ticket1, L1n, AktualBid, 5);
 
Ozero:
Este es el cierre de la orden. Dónde está la apertura de la orden de venta. No está en el código anterior
 
Me refería a que el pedido no se cierra :( Perdón si no lo he puesto así, soy novato.
Razón de la queja: