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

 

Lo siento, alex12, pero pareces una excavadora (sin ánimo de ofender, es un término aceptado). Haces algo con diferentes piezas y de alguna manera consigues que se compile, pero no entiendes el significado del código.

Contacta con el servicio de empleo.

 
alex12:

Genera muchos errores


Cuando utilices algunas de las funciones de Igor Kim, asegúrate de tener en tu código las funciones que te faltan y que el compilador te indica. Búscalos en su rama y escríbelos en tu código.
 
chief2000:
...

OrderOpenTime() muestra la hora en que se abrió la posición, mi pregunta es ¿cómo puedo saber la hora en que se estableció la orden STOP?
El informe de MT4 tiene este tiempo, pero ¿es posible averiguarlo desde el código?


Una vez más.

Revise todas sus órdenes de stop en un ciclo "estándar", y para usted, desimprima el valor de OrderOpenTime() para ellas - esta debe ser la hora en la que fueron establecidas (cada una de ellas). Este es un ejemplo para las órdenes de mercado - ajústelo un poco, es decir, o elimine esta línea por completo

if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;

o sustituirlo por los datos de las órdenes de stop que le interesan...

int orderCount = 0; // сбрасываем счетчик ордеров 
      // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue; // если ордер не выбран, то идем на следующий открытый
      if(OrderCloseTime()!=0) continue;                          // если тикет принадлежит закрытому ордеру, то берем следующий открытый
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))   continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman.:


Una vez más.
Recorra todas sus órdenes de stop en un bucle "estándar", y para usted, desimprima el valor de OrderOpenTime() para ellas - este debe ser el momento en que se establecen (cada una de ellas). Este es un ejemplo para las órdenes de mercado - ajústelo un poco, es decir, o elimine esta línea por completo

if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;

o sustituirlo por los datos de las órdenes de parada que le interesan...

Aquí, en esta etapa me encontré con un dilema - Necesito el tiempo de apertura de una orden de STOP para algunas "estadísticas" y no me gustaría que este proceso se ejecute todo el tiempo, pero sólo en un determinado paso final. Por esta razón, no necesitamos buscar las órdenes actualmente abiertas (OrdersTotal()), sino buscar entre las órdenes ya cerradas => OrdersHistoryTotal().
Pero para las órdenes de STOP que ya han sido cerradas, OrderOpenTime() devuelve la hora de apertura de la posición, no la hora en que se colocó la orden.
Como resultado, todo se reduce a esto: ¿Es posible recuperar el tiempo que las órdenes de STOP de la lista de OrdersHistoryTotal(), cuando se establecieron?
 
chief2000:
Aquí es donde me encontré con un dilema: necesito el tiempo de apertura de la orden STOP para algunas "estadísticas" y no quiero que este proceso se ejecute todo el tiempo, sino sólo en una determinada etapa final. Por ello, no hay que buscar las órdenes abiertas en ese momento (OrdersTotal()), sino buscar entre las órdenes ya cerradas => OrdersHistoryTotal().
Pero para las órdenes de STOP que ya han sido cerradas, OrderOpenTime() devuelve la hora de apertura de la posición, no la hora en que se colocó la orden.
Como resultado, todo se reduce a esto: ¿Es posible recuperar el tiempo que las órdenes de STOP de la lista de OrdersHistoryTotal(), cuando se establecieron?

Sí... El reto... NO LO SÉ. Parece que no se puede - especialmente en las "etapas finales"...

Hay que supervisar constantemente este proceso y hacer un seguimiento - véase el post de preguntas frecuentes en la página anterior.

 
Roman.:

Sí... El reto... NO LO SÉ. Parece que no se puede - especialmente en las "etapas finales"...

Hay que supervisar constantemente este proceso y hacer un seguimiento - véase el post de preguntas frecuentes en la página anterior.

Si no se encuentra otra solución, utilizaré los pedidos de OrdersTotal().
¡Gracias de todos modos!
 
En ese caso, es más fácil escribir en un archivo, menos molestias, y las estadísticas se pueden organizar como usted las necesita, no el terminal.
 
FAQ:
En ese caso, es más fácil escribir en un archivo, menos molestias, y las estadísticas se pueden organizar como usted las necesita, no el terminal.
Gracias.
 

Quiero escribir un Asesor Experto en el patrón de pinzas.

He elegido

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2) bull_pincet=true;
if(High[1]==High2) bear_pincet=true;

   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   

Desgraciadamente para mí la condición es errónea porque 'sl' está ajustado a 100.00000 y 'tp' muestra un error.

Decidí añadir una condición para considerar 1 garrapata.

static datetime TimeSaveH1  = 0;
int init()
{
     TimeSaveH1  = iTime( Symbol(), Period(), 0); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!=iTime( Symbol(), Period(), 0))
            {
               TimeSaveH1=iTime( Symbol(), Period(), 0); 
            }  

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bull_pincet=true;
if(High[1]==High2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bear_pincet=true;
   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   




}

el resultado es el mismo. ¿cómo puedo resolver mi problema?

 
kilnart:

Quiero escribir un Asesor Experto en el patrón de pinzas.

He elegido

Desafortunadamente para mí la condición es incorrecta porque 'sl' está ajustado a 100.00000 y 'tp' está mostrando un error.

Decidí añadir una condición para considerar 1 garrapata.

El resultado es el mismo. ¿Cómo puedo resolver correctamente mi problema?

¿Tienes una variable Paso=100? Si es así, mira lo que obtienes más adelante en el código.