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

 
hoz:


Vitaly, la cuestión está clara ahí. Ver:

Al principio sl = 0; tp = 0; Luego en base a los i_sl e i_tp introducidos por el usuario encuentro los valores normalizados de sl y tp que ya estarán en el orden. Y luego compruebo sisl ytp no son iguales a cero, es decir, si han cambiado después de haberlos declarado al principio de la función, entonces modificamos el orden.

Y sisl ytp son iguales a cero, significa que estos parámetros no han sido calculados... como yo lo entiendo. Una vez que obtenga los valores de estas variables, se convertirán inmediatamente en no nulas, y podremos modificar el orden... ¿Tiene sentido?



Lo siento, no he visto algo, ni gafas ni color, pero ¿por qué pasar parámetros a esta función, y además por referencia? Si i_sl,g_type... son variables globales, funcionará sin parámetros, y si necesita cambiarlas (variables después de la modificación), hágalo en la misma función después de la modificación.
 
rigonich:

Lo siento, no he visto algo, no llevo gafas ni color, pero ¿por qué hay que pasar parámetros a esta función, y además por referencia? Si i_sl,g_type... son variables globales, funcionará sin parámetros, y si necesita cambiarlas (variables después de la modificación), hágalo en la misma función después de la modificación.


Las órdenes son enviadas por las funcionesOpenBuy() yOpenSell(), pero la funciónOrdersModifying()modifica las órdenes

Es decir, si, por ejemplo, la función de modificación se coloca en la funciónTrade (señal int) o enOpenBuy() yOpenSell(), entonces los valores sl y tp obtenidos en la funciónOrdersModifying() deberían pasarse allí de todos modos.Estos valores faltan en esa función.

 
hoz:


Las órdenes son enviadas por las funcionesOpenBuy() yOpenSell(), pero son modificadas por la funciónOrdersModifying()

Es decir, si, por ejemplo, la función de modificación se coloca en la funciónTrade (señal int) o enOpenBuy() yOpenSell(), entonces los valores sl y tp obtenidos en la funciónOrdersModifying() deberían pasarse allí de todos modos.Estos valores faltan en esa función.


En su caso, las funcionesOpenBuy() yOpenSell() colocan las órdenes sin std y luego, si las órdenes se colocan, se modifican con la funciónOrdersModifying() . No veo la necesidad de colocar en otro lugar la funciónOrdersModifying() y pasarle algún parámetro. Sólo hay que declararlas variables sl y tp en esta función. int sl = 0, tp = 0;

Lo siento, no int, un doble.

 
rigonich:

Sus funcionesOpenBuy() yOpenSell() colocan órdenes sin sl y así, si las órdenes se colocan, se modifican utilizando la funciónOrdersModifying() . No veo la necesidad de colocar en otro lugar la funciónOrdersModifying() y pasarle algún parámetro. Sólo hay que declararlas variables sl y tp en esta función. int sl = 0, tp = 0;


En este momento tengo una función de comercio de este tipo:

bool Trade (int signal)
{
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
  
  if(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    
  if(UseBU == true)
     MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

La modificación no tiene lugar.

 
hoz:


En este momento tengo una función de comercio de este tipo:

La modificación no tiene lugar.


Tiene una orden no seleccionada en la función Trade ().
 
rigonich:

No entiendo lo que quieres del guión.


Se necesita un programa que, cuando se lanza en los gráficos de archivo

Las secciones de movimiento del precio se marcarán visualmente con los parámetros especificados en términos de fuerza y tiempo del movimiento.

Por ejemplo, una corrección de 400 puntos realizada en 30 minutos. Y así durante todo el año, todas las correcciones dentro de este rango.

Es imposible observarlos visualmente de forma manual. Distorsiones. Me gustaría tener un código de colores que permitiera verlos de inmediato.

___

He buscado, hay diferentes programas de "Histoty". Pero sólo visualizan el historial de la cuenta.

Pero no he encontrado un segmento del precio por los filtros que he especificado.

 
rigonich:

No tiene una orden seleccionada en la función Trade ().


Eso existe. Aquí está la solución.

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

Y la función de modificación es esta:

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

Extraño Pero no hay paradas y tomas en la salida de nuevo.

 
TUNGUS:


Necesitamos un programa que, cuando se lance en los gráficos del archivo

Las secciones de movimiento del precio se marcarán visualmente con los parámetros especificados en términos de fuerza y tiempo del movimiento.

Por ejemplo, una corrección de 400 puntos realizada en 30 minutos. Y así durante todo el año, todas las correcciones dentro de este rango.

Es imposible observarlos visualmente de forma manual. Distorsiones. Me gustaría tener un código de colores que permitiera verlos de inmediato.

___

He buscado, hay diferentes programas de "Histoty". Pero sólo visualizan el historial de la cuenta.

Pero no pude encontrar un segmento del precio según los filtros dados.


History, History_Draw - funcionan como Asesores Expertos en las pruebas.

Necesito algo así, para ver las correcciones en el historial por los parámetros dados.

 

Problema con Symbol() MT4:

2 funciones para ilustrar:

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

La ejecución de la primera da como resultado una cadena vacía:

int start()
{
   Comment(SymbolOK());
   return(0);
}

Pero la segunda función da salida a una cadena ID "EURUSD" (bueno, depende del gráfico, pero da salida, aunque según la lógica de la función debería ser una cadena vacía):

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

Ayúdame a entender qué es lo que está mal? Gracias

 
rigonich:

No tiene una orden seleccionada en la función Trade ().

Por cierto. ¿Qué sentido tiene seleccionar una orden en la función Trade()? Estoy llamando a la función OrdersModifying() donde se selecciona la orden y se modifica allí. Es decir, ¡la variante inicial era correcta!