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

 
Lo siento, ¿qué es? La función OrderSend me funciona, mientras que OrderClose se está luciendo.
 
Dimka-novitsek:
Lo siento, ¿qué es? La función OrderSend me funciona, mientras que OrderClose se está luciendo.
total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
    type   = OrderType(); result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), l_SlipPage, Red ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), l_SlipPage, Red ); break; 
          }
    if(!result)
      {
      error =  GetLastError(); 
      errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + ErrorDescript(error); 
      Print(errorcomment);
      }  
    }
este es un ejemplo de cierre de todas las órdenes, nótese que las bai y las sells son cerradas por bids y asks ....
 
¡Oh, gracias!
 
7777877:

Muchas gracias por las respuestas anteriores. Todo funciona y casi todo está claro... Ahora sobre ese "casi".

1. ¿En qué línea (véase el archivo adjunto para el indicador) se indica que la línea calculada sobre los datos de la matriz debe mostrarse en la ventana del terminal del cliente?

2. Por qué es necesaria la función IndicatorBuffers (o mejor dicho, en qué situaciones debería utilizarse), si el número de buffers puede declararse como una cadena

Gracias de antemano por la respuesta

#property indicator_buffers 3                                           //объявляем количество буферов

esta cadena declara el número de búferes indicadores visibles en el terminal

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

esta cadena declara el número total de búferes utilizados por el indicador para los cálculos (3 visibles y 1 oculto)

si no necesita ningún búfer adicional, no necesitará esta cadena

El número de buffers no puede ser superior a 8 y no debe ser inferior al valor especificado en la propiedad indicator_buffers. He aquí un buen ejemplo.


 
¡Buenos días! Dime, ¿es realmente necesario normalizar los precios de compra y venta?
NormalizeDouble(Bid, Digits)
Porque lo tengo así
for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),
"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  

Falla así 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129Precio incorrecto ¡No había ocurrido antes en años! Ayer tampoco sucedió

 
Dimka-novitsek:
¡Buenos días! Dime, ¿realmente es necesario normalizar los precios de compra y venta? Porque tengo esto

La falta es así 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Precio incorrecto ¡¡¡Nunca me había pasado!!! Ayer tampoco lo vi.

En el probador no hace falta, pero en el on-line hay que hacer lo que dicte el servidor DC si se quiere trabajar.
 
Dimka-novitsek:
¡Buenos días! ¿Es necesario normalizar los precios de compra y venta?

Falta así 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Precio incorrecto ¡No había ocurrido antes en años! Tampoco fue ayer


No siempre es así...

"" Precio de compra o venta incorrecto, posiblemente precio no normalizado. Es necesario actualizar los datos después de un retraso de 5 segundos o más utilizando la función RefreshRates y volver a intentarlo. Si el error persiste, es necesario detener todos los intentos de negociación y cambiar la lógica del programa."" "DE LA DOCUMENTACIÓN".

Si en demo o real - no funcionará. Muy a menudo se intenta abrir dos órdenes seguidas. Esto funcionará en el Probador de Estrategias. Necesitaría un retraso entre la apertura de las órdenes.

 

¡¡¡Gracias!!! Poner la normalización... ¡¡¡¡¡¡Y maldita sea, ¿qué diablos está pasando en todo!!!!!! Mi cabeza está en llamas. Parece más fácil que la geometría de la escuela secundaria.


 
Sepulca:


No siempre es así...

"" Precio de compra o venta incorrecto, posiblemente precio no normalizado. Es necesario actualizar los datos después de un retraso de 5 segundos o más utilizando la función RefreshRates y volver a intentarlo. Si el error persiste, es necesario detener todos los intentos de negociación y cambiar la lógica del programa."" "DE LA DOCUMENTACIÓN".

Si en demo o real - no funcionará. Muy a menudo se intenta abrir dos órdenes seguidas. Esto funcionará en el Probador de Estrategias. Poner un retraso entre las órdenes abiertas.

¿Qué significa "no siempre"? El código debe ser UNIVERSAL, es decir, debe funcionar con CUALQUIER empresa de corretaje (independientemente del número de dígitos de las cotizaciones y de todo tipo de trucos del servidor de la empresa de corretaje para rechazar la ejecución puntual de las órdenes comerciales).
 
¡¡¡Y hay algo que no funciona con los opiadores si!!!
Razón de la queja: