[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 341

 
¡Queridos novatos! Algunas de las cuestiones que se discuten aquí son muy específicas y realmente merecen consejos y ayuda. Pero algunos, bueno, francamente, surgen del hecho de que empezar a programar algunos escritores EXPERTOS ni siquiera leer un libro de texto sobre ACM. SUGERENCIA: Descargue el tutorial (5 mb) y léalo y no tendrá que esperar una respuesta del foro - estará en su cabeza.
 
costy_ >> :

Los parámetros de indicación guardados se "introducen" en los indicadores una vez durante la inicialización de la plantilla, luego "se vuelven completamente independientes"/.

Todos los parámetros modificados del indicador se guardan en la plantilla, si ha cambiado los parámetros del indicador, vuelva a guardar la plantilla.


>> Gracias.

 

mazepa 08.12.2009 17:42

RESPUESTA: ¡en el CÓDIGO!

Si entiendo el algoritmo, entonces a la hora establecida abrimos compra (venta), si el precio ha pasado >10 pips en la otra dirección, entonces cerramos la orden y nos colocamos en la dirección opuesta.

Para cerrar, estoy utilizando mi propia función universal.

¡//Función para cerrar todas las órdenes de mercado en--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //cruzar todas las órdenes para todas las divisas
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si la orden se selecciona con éxito
{
if (OrderSymbol()!=Símbolo()) continue; //si la orden está en la moneda incorrecta, continúe la búsqueda
{
switch(OrderType()) //en la orden requerida, determine el tipo (Bue_Sell) y ciérrela
{
case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
return;
}
Así que ahora antes de abrir en sentido contrario sólo tienes que escribir _CloseAllOrder()

 


Amigos, sólo estoy aprendiendo. Por favor, no mire el contenido del programa, sólo ayúdeme a encontrar un error en el programa:

int start()
{
switch(CurrentState)
{
case STATE_SHORT:
MyOrderTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 1, 0, 0,NULL, 1, 0, Red);
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+90*Point,Bid-Profit1*Point,0,Green)==true)
{CurrentState=STATE_1;
break;
}
case STATE_1:
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if(Ask <= OrderTakeProfit())
{CurrentState=STATE_SHORT;
break;
}
if(Bid >= (OrderOpenPrice()+Profit1*Point)
{CurrentState=STATE_SHORT;
break;
}
}
//----
return(0);
}


El error es el siguiente: \N - Paréntesis izquierdo desequilibrado. ¿Dónde está el error?









 
Klinskih >> :

Amigos, sólo estoy aprendiendo. Por favor, no mire el contenido del programa, sólo ayúdeme a encontrar un error en el programa:

Lo tengo:

                    if(Bid >= (OrderOpenPrice()+ Profit1*Point)

necesidad:

                    if(Bid >= OrderOpenPrice()+ Profit1*Point)



 

Cómo declarar un array unidimensional sin aplicar un registro a cada celda de memoria (es posible)

  ии[1]=ExtMapBuffer1[0]; ии[2]=ExtMapBuffer2[0];  ии[3]=ExtMapBuffer3[0]; 

sino por una secuencia unidimensional

  ии[3]={ExtMapBuffer1[0],ExtMapBuffer2[0],ExtMapBuffer3[0]} 

¿¡o la secuencia unidimensional es sólo para constantes numéricas y lógicas!?

 
TheXpert >> :

Lo tengo:

>> tenemos que hacerlo:



¡Gracias, amigo!

 
future >> :

Una pregunta más. Si (OrdersTotal()==0) este... si el número de órdenes abiertas es igual a cero... entonces como será...si el número de órdenes abiertas PARA EL DÍA es igual a cero.

¿No hay algo como OrdersDayTotal?

no, pero siempre podemos escribir nuestra propia función)

int OrdersDayTotal(string Symb)
 {
int cnt,
OrdersDayTotal=0,
Time0=iTime(NULL,PERIOD_D1,0);

for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
for( cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_HISTORY);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
return( OrdersDayTotal);
 }

Cuenta las órdenes de compra y venta, para un determinado símbolo, abiertas hoy. No hay pedidos pendientes.

if(OrdersDayTotal(Symbol())==0) {...}

algo así)

 
Stepan241 >> :

mazepa 08.12.2009 17:42

RESPUESTA: ¡En el COD!

Si entiendo el algoritmo, abrimos la compra (venta) a la hora establecida, si el precio pasa >10 pips en la otra dirección, cerramos la orden y nos movemos al lado contrario.

Utilizo mi propia función universal para cerrarlo.

//Función de cierre de todas las órdenes de mercado en ventana--------------------------------------------------------------------------------------------------
void _CerrarTodoOrden()
{
for(int i=0; i<OrdersTotal(); i++) //retirar todos los pedidos de todas las monedas
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si el pedido se ha seleccionado correctamente
{
if (OrderSymbol()!=Symbol()) continue; //si el pedido está en la moneda incorrecta, continúa la búsqueda
{
switch(OrderType()) //cuando la orden requerida es enviada, define su tipo (Bue_Sell) y la cierra
{
caso 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
caso 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
volver;
}
Así que ahora sólo tienes que escribir _CloseAllOrder() antes de abrir en sentido contrario


La función es la bomba me costó un par de páginas, muchas gracias.
 
Stepan241 >> :

mazepa 08.12.2009 17:42

RESPUESTA: ¡En el COD!

Si entiendo el algoritmo, abrimos la compra (venta) a la hora establecida, si el precio se ha movido >10 pips en la otra dirección, cerramos la orden y nos movemos en la dirección opuesta.

Para el cierre utilizo mi propia función universal.

//Función de cierre de todas las órdenes de mercado en ventana--------------------------------------------------------------------------------------------------
void _CerrarTodoOrden()
{
for(int i=0; i<OrdersTotal(); i++) //retirar todos los pedidos de todas las monedas
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si el pedido se ha seleccionado correctamente
{
if (OrderSymbol()!=Symbol()) continue; //si el pedido está en la moneda incorrecta, continúa la búsqueda
{
switch(OrderType()) //cuando la orden requerida es enviada, define su tipo (Bue_Sell) y la cierra
{
caso 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
caso 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
volver;
}
Así que ahora sólo tienes que escribir _CloseAllOrder() antes de abrir en sentido contrario


La función es la bomba me costó un par de páginas, muchas gracias.