[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 124

 
Notter:

Buenas tardes,

¿Podría decirme cómo poner un marcador en el gráfico? Por ejemplo, la orden no se abrió, pero al menos para ver en el gráfico, en el que debería haber abierto.

Me gustaría colocar un marcador en un gráfico.

Así

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
dertop:


Sí, lo siento, me confundí, es la primera vez que escribo en el foro. Primero copié, luego decidí escribir a mano y me confundí... Pero el ejemplo anterior es correcto...

MA1>MA2 y MA1<MA3 y MA3<MA4


Consulte el siguiente hilo
 
Vinin:


Hay algo extraño aquí.

MA1>MA2 y MA2>MA3 y luego MA1<MA3

Sobre todo porque basta con

Sí, efectivamente, hay una contradicción entre ambos. ¡No he mirado todo! Al autor le queda mucho camino por recorrer para cometer "errores difíciles".
 

La cuestión es la siguiente. No es la primera vez que me encuentro con esta situación:

Si se llama a la función traal o breakeven en cada tick, por ejemplo, aparecerá un error 1. Lo que significa, según la documentación:

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

Si no se llama abiertamente en la función de inicio, es decir, no se acaba de introducir la función con parámetros directamente en el inicio, sino que se llama en cada barra, es decir, no por tic, entonces error...

Me refiero a esto:

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

¿Por qué así?

Y en general, ¿cómo se aplica de forma más inteligente? ¿Consumirá muchos recursos en cada tic?

 

Всем добрый день.

Necesito tu ayuda. No entiendo lo que está pasando.

if (OrderStopLoss() != NormalizeDouble(t6,5))

{

a=10;

}

LacondiciónOrderStopLoss()= 1,3017 yNormalizeDouble(t6,5)=1,3017 se mantiene, es decir, a=10. Pero no debería estar satisfecho.

¿Cuál puede ser la razón de esto?

 
hoz:

La cuestión es la siguiente. No es la primera vez que me encuentro con esta situación:

Si la función traal o breakeven se llama en cada tick, por ejemplo, aparecerá un error 1. Lo que significa, según la documentación:

Si no se llama abiertamente en la función de inicio, es decir, no se acaba de introducir la función con parámetros directamente en el inicio, sino que se llama en cada barra, es decir, no por tic, entonces error...

Me refiero a esto:

¿Por qué así?

Y en general, ¿cómo se aplica de forma más inteligente? ¿Consumirá muchos recursos en cada tic?

Te aconsejo que no vayas por barras, por tantos pips. Si es necesario, para eso están los recursos. Y el error "no hay error" se produce cuando se repite el precio para una modificación que ya existe. Por eso tienes que hacerlo paso a paso, como te aconsejé al principio.
 
hoz:

La cuestión es la siguiente. No es la primera vez que me encuentro con esta situación:

Si se llama a la función traal o breakeven en cada tick, por ejemplo, aparecerá un error 1. Lo que significa, según la documentación:

Si no se llama abiertamente en la función de inicio, es decir, no se acaba de introducir la función con parámetros directamente en el inicio, sino que se llama en cada barra, es decir, no por tic, entonces error - no...

Me refiero a esto:

¿Por qué así?

Y en general, ¿cómo se aplica de forma más inteligente? ¿Va a consumir muchos recursos en cada tic?

Hay que añadir una comprobación, el nivel de arrastre debe ser diferente al de la SL actual.

 
valeryk:

La red de arrastre intenta mover el SL al mismo nivel. Debe añadirse una comprobación, el nivel de arrastre debe ser diferente del SL actual.



Tengo un cheque para eso:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
Si la parada - nueva parada (en b.u.) no es cero... entonces modificamos... Si no, no modificamos. Por eso no me queda claro cómo ocurre esto. Al fin y al cabo, entiendo que tengo que comprobar la igualdad de la parada pasada y la nueva y lo he hecho.
 

Hola, por favor, aconséjeme cómo puedo modificar mi pedido inicial y final a 1 T/P, gracias.

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);


 
agat8430:

Hola, por favor, aconséjeme cómo puedo modificar mi pedido inicial y final a 1 T/P, gracias.


Edita este código para que no parezca un hack