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

 
Foxy, ¿qué pasa con el código de la función ArraySearchDouble, está ahí? Sin ella, averiguar lo que hace el programa sería mucho más difícil)
 

Hola! Aquí está la función de trailing stop, comprueba si es correcta. Debido a que mi código cambiará drásticamente, será difícil lidiar con los errores cuando empiece a cambiarlo

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

Hola! Aquí está la función de trailing stop, comprueba si es correcta. Voy a cambiar mi código drásticamente, será difícil lidiar con los errores cuando empiece a cambiarlo.

No tiene en cuenta el Stoplevel, por lo que si no tiene ECN/NDD, puede obtener el error "paradas incorrectas".

Y en general, después de OrderModify es mejor manejar todos los errores, por si acaso.

 
alsu:
Foxy, ¿qué pasa con el código de la función ArraySearchDouble, está ahí? Sin ella, sería mucho más difícil entender lo que hace el programa)


Todas estas son funciones de KimIV, que es lo que estoy tratando de averiguar. Aquí está el código:


Esta función busca un elemento de una matriz utilizando un valor de tipo double y devuelve el índice del elemento encontrado o -1. La función sólo encuentra un elemento y deja de buscar si el resultado es positivo.

  • m - La matriz en la que se busca el elemento.
  • e - El valor de tipo double que se encuentra en la matriz m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
Profesionales, ¿qué estoy haciendo mal? Necesito redibujar la ventana del indicador cuando aparece una nueva barra. If (Bars != Prebars) WindowRedraw();
no funciona. PreBars es igual al número de barras del tick anterior. ¿Tal vez lo puse en el lugar equivocado o en la función equivocada?
 
kon12:
Profesionales, ¿qué estoy haciendo mal? Necesito redibujar la ventana del indicador cuando aparece una nueva barra. if (Bars != Prebars) WindowRedraw();
no da lugar a nada. ¿Tal vez lo puse en el lugar equivocado o algo está mal?

Hay que dibujar primero para poder redibujar algo.
 
sergeev:

Para redibujar algo, primero hay que dibujarlo.


Todo se dibuja perfectamente, el indicador se basa en un zigzag, pero cuando aparecen nuevas barras, la curva debería redibujarse por completo, pero sólo añade el valor del indicador en una nueva barra...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12:


Todo se dibuja bien, el indicador se basa en un zigzag, pero cuando aparecen nuevas barras, la curva debería redibujarse por completo, pero sólo añade el valor del indicador en la nueva barra...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

WindowRedraw() redibuja los objetos gráficos. No tiene nada que ver con los topes.
 
Zhunko:
WindowRedraw() redibuja los objetos gráficos. No tiene nada que ver con los topes.

Lo tengo... ¿Si hay otra manera con el rediseño?
 
kon12:

Lo tengo... ¿Si es de otra manera con un rediseño?
Muestra el código y obtendrás una respuesta inmediata.
Razón de la queja: