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

 
tara:
¿Qué tal dos?
A continuación, los nombres están en orden alfabético.
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
Buenas tardes.
La tarea consiste en abrir una orden a una determinada distancia "Añadir" de una orden ya abierta.
Se controlan las órdenes de compra y venta por separado.
He escrito este código. Parece que funciona, pero a veces el precio cubre una distancia mayor que la de "Añadir" pero la orden no se abre.
He probado las impresiones pero la condición "Añadir" no funciona correctamente y no sé qué es lo que falla.
¿Tal vez alguien me diga qué hacer?
 

Estimados señores, he estado desconcertado con la solución de un problema relacionado con las recotizaciones.

Situación: El Asesor Experto abre órdenes desde el mercado con stops duros y tomas de ganancias en pips, trabaja en una barra cerrada, M15. Se recibe una señal de apertura de la orden y el Asesor Experto intenta abrir la orden varias veces pero falla. En la siguiente barra, la señal se repite y el Asesor Experto abre la operación, pero la tasa ha dejado el punto donde se dio la primera señal. Resulta que el stop and take se fijará a partir de la tasa a la que se abrió la operación, en lugar de a partir de la tasa a la que la primera señal de apertura. He escrito una construcción tal que al establecer un stop y take, el Asesor Experto tomaría el precio al que se recibió la primera señal.

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

Quiero explicar por qué quiero usar la primera señal: los tamaños de stop y take se seleccionaron en el probador y son más o menos óptimos, si se establecen los stops/paradas de la segunda señal, resultará que no son óptimos, porque la tasa de apertura de la operación real es diferente de la tasa en la primera señal.

 
evillive:

El total de la orden de arrastre de las operaciones es de - 1, es decir, nunca llegamos a la más antigua. En segundo lugar, busca las órdenes desde las más recientes a las más antiguas, y las más antiguas pueden cerrarse mediante una parada o una toma antes de que el arrastrador las alcance. En general, lo que no funciona, ¿tiene registros de errores?


El TS no funciona en absoluto, varias veces he notado que "tal y como está diseñado" no cierra las posiciones en absoluto.No hay registros de errores, pero ¿cómo los consigo?

Y en cuanto a las órdenes de cierre, podrías escribir más detalles, ya que el EA es multidivisa, pero con un límite de 1 operación en una divisa a la vez.

 
Stells:
Buenas tardes.
La tarea consiste en abrir una orden a una determinada distancia "Añadir" de una orden ya abierta.
Se controlan las órdenes de compra y venta por separado.
He escrito este código. Parece que funciona, pero a veces el precio cubre una distancia mayor que la de "Añadir" pero la orden no se abre.
He probado las impresiones pero la condición "Añadir" no funciona correctamente y no sé qué es lo que falla.
¿Tal vez alguien me diga qué hacer?


Los rasgos de Igor Kim, simple y convenientemente.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

Estimados señores, he estado desconcertado con la solución de un problema relacionado con las recotizaciones.

Situación: El Asesor Experto abre órdenes desde el mercado con stops duros y tomas de ganancias en pips, trabaja en una barra cerrada, M15. Se recibe una señal para abrir la orden y el Asesor Experto trata de abrir la orden varias veces pero falla. En la siguiente barra la señal se repite y el Asesor Experto abre la operación, pero la tasa ha dejado el punto donde se dio la primera señal. Resulta que el stop and take se fijará a partir de la tasa a la que se abrió la operación, en lugar de a partir de la tasa a la que la primera señal de apertura. He escrito una construcción tal que al establecer un stop y take, el Asesor Experto tomaría el precio al que se recibió la primera señal.

Quiero explicar por qué quiero usar la primera señal: los tamaños de stop y take se seleccionaron en el probador y son más o menos óptimos, si se establecen los stops/paradas de la segunda señal, resultará que no son óptimos, porque la tasa de apertura de la operación real es diferente de la tasa en la primera señal.

Resulta que la optimalidad está determinada sólo por los niveles de tp y sl, mientras que el precio de la operación puede ser cualquiera? Eso no parece lógico.
 
alsu:
Resulta que la optimalidad está determinada sólo por los niveles de tp y sl, mientras que el precio de la transacción puede ser cualquiera? Esto no parece lógico.

La optimización se determina no sólo por un stop y take, se determina principalmente por los parámetros de la señal para abrir la operación, no he dado estas señales para no sobrecargar mi pregunta, los parámetros de la señal de hecho no se relacionan con el problema en cuestión. El precio de la operación puede ser cualquiera, si se guarda la señal para abrir la operación.

Les agradecería que dieran su opinión sobre la esencia de mi pregunta, es decir, si el código para el cálculo de los niveles a partir de los cuales se calculará un stop y una toma está escrito correctamente.

 
Sancho77:

No tengo el código a mano, pero hice algo parecido para mí, pero no así: recordaba la hora de la barra en la que había una señal, y cuando se colocaba una orden usando esta señal, ponía a cero la hora de la señal, y así sucesivamente:

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
Bueno, si la pregunta es acerca de la lucha contra sólo requotes, a continuación, busque en el hilo de Igor Kim, casi todas las funciones para la colocación de los pedidos tienen un parámetro para el número de veces para tratar de colocar la orden
 
Sancho77:

La optimización se determina no sólo por un stop y take, se determina principalmente por los parámetros de la señal para abrir una operación, no he dado estas señales para no sobrecargar mi pregunta, los parámetros de la señal de hecho no se relacionan con el problema en cuestión. El precio de la operación puede ser cualquiera, si se guarda la señal para abrir la operación.

Les agradeceré que me digan su opinión sobre la esencia de mi pregunta, es decir, si el código, para el cálculo de los niveles a partir de los cuales se calculará correctamente el stop y el take, está escrito?

Sí, está escrito correctamente, pero imagina la situación: el precio "real" de la operación resultó, por ejemplo, superior al TP memorizado, ¿qué hará entonces? (y esta situación es bastante real - las recotizaciones son frecuentes en el mercado rápido, cuando el precio salta)
 
alsu:
La escritura es correcta pero imagina la situación: el precio "real" de la operación resultó ser, por ejemplo, superior al TP memorizado, ¿qué hará entonces? (Y esta situación es bastante real - las recotizaciones son frecuentes en el mercado rápido, cuando el precio salta)

Gracias por su opinión.

Si el precio resulta ser más alto que el TP memorizado, entonces la operación se abrirá con el nivel mínimo de retirada, tal procesamiento es inherente al EA.

PD Por cierto, tendré que probar a poner una prohibición de apertura de posición si el nuevo precio se aleja del precio memorizado a más de cierta distancia, gracias por la reflexión, me gustaría poder comprobarlo en el probador, sólo en el comercio.

Razón de la queja: