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

 
Link_x:
Hola!
¿Existe una función de este tipo en la función "Kim" que calcule la cantidad de beneficios de la última orden abierta?

No lo he encontrado, ahora estoy desconcertando con una función casera que calcula el margen de beneficio de la última orden abierta.


OrderProfit()

Si necesita exactamente la última orden abierta, entonces recorra todas las órdenes y elija la que sea la más reciente, luego utilice la función anterior, que le devolverá el beneficio neto de esta orden

 
Ekburg:


OrderProfit()

Si necesita exactamente la última orden en abrirse, entonces recorra todas las órdenes y elija la que tenga la última hora de apertura, luego utilice la función anterior, que le devolverá el beneficio neto de esta orden


Cómo consigo una respuesta justo a tiempo, justo en el momento en que encuentro una solución. :)
Pips_Proffit_Last_Pos = p - PriceOpenLastPos;
¡Pero gracias de todos modos!
 

Ekburg К сожалению времени и возможности написать Вам готовый код нет, так как я на работе нахожусь))

No se busca por el historial, sino por las posiciones actuales, aquí hay una cadena lógica en la que se puede intentar escribir código:

[bloque de trabajo con muwings y realización de un pedido]

1 recordar el billete y el número mágico del pedido realizado

2 . controlar el número de órdenes y si no hay órdenes en el mercado (significa que nuestra orden se ha cerrado), entonces pasamos al punto3 o controlamos esta orden concreta hasta que su hora de cierre sea superior a cero, en cuyo caso excluimos los puntos 3 y 4

3 encontrar nuestra orden

4 averiguar si está cerrado

5 averiguar cómo se cerró

6 si se cerró a través de un stop, establecer otra orden diferente a ésta en la dirección


//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern double Lots = 0.1;
extern double TakeProfit = 100;
extern double StopLoss = 100;       
extern double TrailingStop = 50;
extern double Margincutoff = 100;   
extern double MagicNumber = 12345;
extern double TradeSizePercent = 5;
extern int Slippage = 10;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  int Crossed (double line1, double line2)
  {
  static int last_direction=0;
  static int current_direction=0;
  
  if (line1>line2)current_direction=1;// пересечение вверх
  if (line1<line2)current_direction=2;// пересечение вниз
  
  if (current_direction!=last_direction)//изменения произошли
  {
  last_direction=current_direction;
  return(last_direction);
  }
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int cnt, ticket, total, totalhistory, memoryticket;
    double shortEMA, longEMA;
    
    if(Bars<100) 
     {
     Print("Bars less than 100");
     return(0);
     }
     shortEMA=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
     longEMA=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
     int isCrossed=Crossed(shortEMA, longEMA);
//----
   total=OrdersTotal();
   if(total<1) 
     {
      // нет открытых ордеров
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // проверяем пересечение МА для открытия позиции на покупку
      if(isCrossed==1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
        //проверяем пересечение МА для открытия позиции на продажу
        if(isCrossed==2)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
         return(0); 
        }  
//----начинаем искать закрытые ордера

         //инициализация параметров
  
  int old_order_type;
 
   
  RefreshRates();
  
  //нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  for ( totalhistory = OrdersHistoryTotal() - 1; totalhistory >= 0; totalhistory-- ) 
  {
     if ( OrderSelect(totalhistory, SELECT_BY_TICKET, MODE_HISTORY) && OrderTicket() == memoryticket && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         old_order_type = OrderType();
         if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                break; //прекращаем поиск
         }
     }
  }
  //если раньше покупали, то теперь продаем
  if ( old_order_type == OP_BUY )
  {
  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
 //если раньше продавали, то теперь покупаем
  if ( old_order_type == OP_SELL )
  {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
   return(0);
  }
//+------------------------------------------------------------------+
Esto es lo que tengo. Realmente abre 3 lotes. Estoy realmente jodido. ¿Puede corregir el código? ¿Qué pasa?
 
Estoy harto de hacer estas preguntas (increíblemente nerviosas, pi****, lo siento (malditas variables que no puedo encontrar (sobre todo molesto, lo que no puedo encontrar yo mismo)).

¿Qué variable es la responsable del valor del precio actual?
He buscado en la documentación, no hay nada excepto Bid, Ask, POINT_HIGH, POINT_LOW.
¿Existe esa variable?
 
Link_x:
Estoy harto de hacer estas preguntas (increíblemente nerviosas, pi****, lo siento (malditas variables que no puedo encontrar (sobre todo molesto, lo que no puedo encontrar yo mismo)).

¿Qué variable es la responsable del valor del precio actual?
He buscado en la documentación, no hay nada excepto Bid, Ask, POINT_HIGH, POINT_LOW.
¿Existe esa variable?
¿Se ha dado cuenta de cómo cambia el precio en la ventana "Market Watch"? Allí puede ver los precios de compra y venta. El primero se utiliza para vender y el segundo para comprar.
 
Link_x:

Qué oportuno es obtener una respuesta, justo cuando encuentro una solución. :)
La solución es: "Tómate tu tiempo para preguntar". Y, teniendo en cuenta que no siempre se obtienen respuestas competentes... :)))
 
khorosh:
¿Se ha fijado en cómo cambia el precio en la ventana de Market Watch? Allí puede ver la oferta y la demanda, que son los precios actuales. El primero se utiliza para vender y el segundo para comprar.

¡Exactamente!
¡Olvida una cosa tan pequeña!
 
TarasBY:
La solución es: "No te apresures a preguntar". Y, teniendo en cuenta que no siempre se obtienen respuestas competentes... :)))
Sí, sí. :)
 
Link_x:
¡¡¡Así es!!!
¡¡¡Olvidé una cosa tan pequeña!!!

Contesta correctamente, como un verdadero estudiante en un examen: no puedes decir no sé - tienes que decir me olvidé)).
 
Link_x:
Sí, sí. :)

Quizá deberías intentar responder a las preguntas de los demás en lugar de hacer las tuyas propias. Los beneficios son mucho mayores (hasta cierto punto), ciertamente los beneficios para uno mismo