[¡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 768

 
FoxUA:


Sólo necesito llamar a la función, eso es todo lo que necesito es una línea "Si hay más pedidos que uno .... y eso es todo" - y tú me ofreces toda una función

Así es como almaceno los datos de mis pedidos


Es muy sencillo, ponlo en la biblioteca.

Se da como entrada el tipo de orden a contar y su maestro, devuelve el número de órdenes abiertas o establecidas.

int ChPos( int TypePos,int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return(count);
}

Puede utilizarlo de la siguiente manera

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak:


No es complicado ponerlo en la biblioteca .

La entrada es el tipo de orden a contar y su maestro, devuelve el número de órdenes abiertas o establecidas .

Se puede utilizar de la siguiente manera

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

Tengo esa función y no la necesito, sólo necesito
sólo una línea "si hay más pedidos que uno .... entonces" y eso es todo

mis datos para la misma función que has mostrado están almacenados aquí

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

y esto es lo que parece

void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
 

Creo que lo tengo.

static int aaa = TotalPedidos()+ TotalPedidos()

if (su condición && aaa < OrdersHistoryTotal()+ OrdersTotal() )

{

operadores

aaa=TotalPedidosHistoria()+TotalPedidos()

}

Si es así, todavía es mejor ponerlo en una función con los magos en mente . ¿Puede decirnos en qué está trabajando? La lógica es un poco extraña si lo he entendido bien, cuando se abre una orden más, ¿no es más fácil abrir órdenes no mayores que OpenPosition?

Su función devuelve el número total de órdenes abiertas y pendientes. Cuántas órdenes OP_BUY, si hay OP_BUYLIMIT OP_SELLLIMIT OP_SELL etc. no muestra.

 
ivandurak:

Ya lo tengo resuelto, ahora el problema de la función if es que no sé cuál es el problema.

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

la cuestión es que el primer valor se ejecuta.

Este no funciona si (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS); // Seleccionar
} }

es decir, si hay una orden HaveBuyLimitOrderEnd, modificarla con un cambio de precio PRAskS

No puedo entender qué es lo que está mal. El valor de HaveBuyLimitOrderEnd se toma del void Myorders() en el código anterior

el valor if(bt==1&&bl==7) es principal, por lo que si es verdadero, utiliza todo lo siguiente


lo más probable es que haveBuyLimitOrderEnd== true porque he puesto OrderLots()==3*Lot todo el trabajo sólo modifica las órdenes con 0.3 lotes

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
Tenga en cuenta que está resaltado en rojo. El tipo de órdenes comerciales es el mismo y las variables en la tubería se establecen de manera diferente, así es como debe ser .
 
ivandurak:
Fíjese en lo que está resaltado en rojo. El tipo de órdenes comerciales es el mismo y las variables de la tubería están configuradas de forma diferente, así es como debería ser .

Sí, debe ser, porque hay diferentes funciones de apertura y no hacer una solicitud de OrderType () y pidió a la bandera si está abierto, pero el problema es muy probable que no en esta función, porque las otras solicitudes también no funcionan esta primera tiré, Y EN LA MISMA FUNCIÓN ABRE NORMALMENTE

POR LO QUE EL PROBLEMA ES CON LA SOLICITUD EN EL OPERADOR

 

El problema parece estar en otra parte. Pero probablemente deberías ver el código.

 
Vinin:

El problema parece estar en otra parte. Pero creo que necesito ver el código.


Definitivamente no es por otro lado, todo lo demás funciona, el problema es que la petición (HaveBuyLimitOrderEnd== true) es errónea, por lo que me pregunto cómo decirle que modifique y borre,

o la propia consulta es errónea

if(bs==1&&bl==3)
{AbrirLímiteDeCompraFin(Lote*15,PRAskL);

si (HaveBuyLimitOrderEnd== true)

{Modificar orden de compra(PRAskS);
} }

 
FoxUA:

Sí, debe ser, porque hay diferentes funciones de apertura y no hacer una solicitud de OrderType () y pidió a la bandera si está abierto, pero el problema es muy probable que no en esta función, porque las otras solicitudes también no funcionan esta primera tiré, Y EN LA MISMA FUNCIÓN ABRE NORMALMENTE

POR LO QUE EL PROBLEMA ESTÁ EN LA CONSULTA DEL OPERADOR

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


Me pregunto si en las funciones marcadas en rojo HaveBuyLimitOrderEnd se establece en la tubería. Si no es así, es necesario llamar a Myorders() antes de if. De lo contrario, no se sabe lo que hay. Y por si acaso, las banderas (variables)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
debe definirse a nivel global .

 
ivandurak:


Me pregunto si la bandera HaveBuyLimitOrderEnd está puesta en rojo en la tubería. Si no es así, tienes que llamar a Myorders() antes de if. De lo contrario, no se sabe lo que hay. Y por si acaso, banderas (variables)

HaveBuyOrder = false;
HaveSellOrder = false;
HaveBuyStopOrder = false;
HaveSellStopOrder = false;
HaveBuyLimitOrder = false;
HaveSellLimitOrder = false;
HaveBuyLimitOrderEnd = false;
HaveSellLimitOrderEnd = false;
debe definirse globalmente.

es a nivel glabal


bool HaveBuyOrder; // marca si hay órdenes de compra en el mercado abierto
bool HaveSellOrder; // bandera de órdenes de mercado abiertas para vender
bool HaveBuyStopOrder; // indicador de órdenes de compra pendientes abiertas
bool HaveSellStopOrder; // indicador de órdenes de venta pendientes abiertas
bool HaveBuyLimitOrder; // indicador de órdenes de compra pendientes abiertas
bool HaveSellLimitOrder; // indicador de órdenes de venta pendientes abiertas
bool HaveBuyLimitOrderEnd; // indicador de la presencia de órdenes de compra pendientes
bool HaveSellLimitOrderEnd; // marca las órdenes de venta pendientes abiertas

está en la función de apertura de la orden.

ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE);
si (ticket > 0) {
HaveBuyStopOrder = true;

if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("función para colocar una orden BuyStop : ", OrderOpenPrice())
}
else Print("Error # ", GetLastError(), " función para colocar la orden BuyStop",MarketInfo(Curr_symb,MODE_ASK));
return(ticket);
}

PARA QUE TODO LO DEMÁS FUNCIONE

Razón de la queja: