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

 
snail09_1:

Yo no crearía un array de tickets para cerrar, sino que en el bucle de enumeración de órdenes de mercado comprobaría cada orden alimentando su ticket a la entrada de la función de cierre con una comprobación de posibles condiciones.

¿Puede mostrar esto en el código?

¿Cómo se puede poner en práctica?

 

¡Buenas tardes a todos!

Tal vez esta pregunta no sea para los novatos, pero no he podido encontrar otro hilo en el que pudiera hacer una pregunta:

¿Cómo puedo descargar un informe detallado de MetaTrader 4 para tener la equidad en el gráfico en lugar del balance? No sé, si lo subiera desde MT4 o alguna otra forma conveniente, ¿sería realista? No sé si tengo el balance correcto o no, sólo quiero saber los resultados de la reducción.

No tengo ni idea de cómo usar estos corredores.

 
belous:

¿Puede mostrarlo en código?

Es decir, ¿cómo se puede poner en práctica?

¿Algo así?

int ticket;

for(int z=OrdersTotal()-1;z>=0;z--)
   {
   if(!OrderSelect(z,SELECT_BY_POS))
      {
      _GetLastError=GetLastError();
      Print(" OrderSelect(",z,",SELECT_BY_POS)-Error #",_GetLastError);
      continue;
      }
   if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
      {
      if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
          {
          // Проверим условие для закрытия, и если истинно          
              {
              ticket=OrderTicket();
              //Закрываем его
              }
           }
       }
    }
 

ayuda por favor.

Este es el código


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

No tengo forma de hacer que se abra un bucle cuando una operación se cerró en menos y si la siguiente orden se cerró por encima de cero, es decir, con saldo positivo, pero menor que el negativo, sumamos el más al negativo y obtenemos un nuevo valor negativo, que ya es menor.

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

Si es más negativo, según la señal, cerramos la orden y empezamos el ciclo desde el principio.


La situación es que cuando este código cierra la operación en pérdida, entonces recuerda el saldo negativo, y cuando cierra la operación en el plus, y el plus es menor que el saldo, entonces resetea Sum_Loss y necesito que no se ponga a cero, y se acote.

Así es como funciona ahora:

comprueba una orden cerrada, si el beneficio de la orden cerrada es menor que cero, entonces este beneficio se añade a la Suma_Pérdida, y así sucesivamente hasta que el beneficio de la operación abierta supere (será mayor que) la Suma_Pérdida, cuando se alcanza, la operación se cierra, y la Suma_Pérdida se pone a cero y el ciclo comienza de nuevo.

Lo necesito:

orden cerrada en negativo, su beneficio negativo se añadió a Sum_Loss, entonces si la siguiente operación se cerró con un beneficio positivo, Sum_Loss se reduce en la cantidad recibida del beneficio, lo que significa que la siguiente orden abierta Sum_Loss ya es una cantidad menor, y así sucesivamente hasta que el beneficio de la orden es mayor que Sum_Loss, y entonces Sum_Loss se borra y comienza un nuevo ciclo.

Suma_Pérdida = 0;

1ª orden cerrada: Beneficio (-50) < 0

Suma_Pérdida + beneficio (Suma_Pérdida + (-50))

Suma_Pérdida = -50;

2ª orden cerrada: Beneficio (+40) > 0 y Suma_Pérdida < 0

Suma_Pérdida + beneficio (Suma_Pérdida + 40)

Suma_Pérdida = -10


Tal vez la variable Sum_Loss debería especificarse como una variable negativa... en general estoy confundido. He probado muchas variantes, pero no he obtenido el resultado correcto. Al menos guíenme en la dirección correcta, díganme qué hacer, porque no entiendo.
 
¿Cómo puedo probar un EA sin tener en cuenta el spread? ¿Es esto posible?
 
Max79:
¿Cómo puedo probar un EA sin tener en cuenta el spread? ¿Es posible?
Búscalo en Google y lo encontrarás, por ejemplo aquí (set spread ? site:mql4.com) lee: https://www.mql5.com/ru/forum/102224/page2
 

¿Quién tiene un pavo así?

 

Por favor, ayuda.

He puesto un modificador de órdenes pendientes, en el EA, y me da un error - 1 al probar en el Diario.

Por ejemplo: "Si paso valores no modificados como parámetros de la función, se generará el error 1 (ERR_NO_RSULT)".

Pongo una marca antes de la modificación, pero no sirve de nada. ¿Cuál es el error? El EA se está probando, pero ¿cómo puedo tamizar las órdenes con valores no modificados?

 
 
rosomah:

Por favor, ayuda.

He puesto un modificador de órdenes pendientes, en el EA, y me da un error - 1 al probar en el Diario.

Por ejemplo: "Si paso valores no modificados como parámetros de la función, se generará el error 1 (ERR_NO_RSULT)".

Pongo una marca antes de la modificación, pero no sirve de nada. ¿Cuál es el error? El EA se está probando, pero ¿cómo puedo tamizar las órdenes con valores no modificados?

Imprime los valores pr, stop y take para ver lo que envían a OrderModify