Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1341

 
DanilaMactep:

HE CALCULADO UN PRECIO POR PONER UNA FUGA ASÍ (MAKAR, AL MENOS NO ERES DE LOS QUE SE TOCAN;-))

¿CÓMO SE COMPRUEBA SI EL VALOR OBTENIDO ENTRA DENTRO DE LOS RANGOS PERMITIDOS? ESO ES LO QUE NO ENTIENDO, Y ¿CÓMO SE ASEGURA QUE SI EL VALOR CALCULADO ES MENOR QUE EL PERMITIDO, LA ORDEN SE ABRIRÍA DE TODAS FORMAS A LA MÍNIMA DISTANCIA POSIBLE?

Prueba esto,

Creo que te darás cuenta.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Prueba esto,

Creo que le cogerás el tranquillo.

Alexey, muchas gracias por este pedazo de código. Pero, por desgracia, no puedo leer el código de otras personas debido a las consecuencias del accidente cerebrovascular. ¿Puedo pedirle una instrucción sobre cómo utilizar este código y una recomendación sobre a qué adjuntarlo y cómo hacerlo?

Esto es lo que se me ha ocurrido. Estaba buscando un precio mínimo para las barras x así

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

pero esto no es correcto, porque asigno el precio min aihai, no bajo. corregido para bajo y el error es menos, pero todavía ocurren(((

Así que si no es difícil, envíe instrucciones sobre cómo utilizar un código con descuento...

 

Hola a todos de nuevoJ traté de aplicar los consejos que escribisteis en mi último post, pero no sirvió de nada. Me sigue saliendo el error 130L, pero probablemente no sea el stop loss en sí, sino el precio de apertura. El precio abierto para un stop de compra y un stop de venta se obtiene determinando el precio máximo/mínimo para un número x de velas, de esta manera.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

El problema no es con el stop porque uso exactamente el mismo stop y atp y fijo, las órdenes de mercado se abren sin errores. Significa que el problema está en el cálculo del precio para establecer una orden pendiente. Yo mismo abro los pedidos así

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S y se me olvidó decir que quiero utilizar las órdenes pendientes para simular algún tipo de filtro de precios para abrir una posición, es decir, si el precio va en la dirección correcta, se disparará una orden pendiente, pero si no lo hace, se cancelará y estaré fuera del mercado. ¿Qué estoy haciendo mal al determinar el precio de apertura? ¿Y tal vez haya una solución más fácil en el filtro de precios para el trato?

p/s muy amablemente, si escribes un código que se pueda aplicar, escribe una instrucción detallada para ello ya que estoy teniendo serios problemas para leer el código. Una instrucción detallada quiero decir, para qué sirve este código y cómo se puede aplicar (para adjuntarlo a una variable y hacer algo con ella o algo más, y por favor escribe tus comentarios al código de una manera más comprensible). Gracias de antemano ;-) P / S que tiene el conocimiento y tiene la experiencia no pasar, ayudar a un hermano - no joda ;-) tienen que terminar el Grial OP ;-).

 
¡Colegas!

Que trabajaba con objetos. Por favor, envíeme un ejemplo de un trozo de código, donde un triángulo, elipse o cuadrado dibujado manualmente (creo que tiene un nombre en el gráfico) realizaría alguna acción - por ejemplo, una alerta (en caso de que el precio golpee el objeto). Te lo ruego mucho. No sé mucho al respecto y no puedo entender la teoría del libro de referencia, pero sospecho que el principio es elemental.
 
DanilaMactep:

Hola a todos de nuevoJ trató de aplicar el consejo que escribió en mi último post, pero no ayudó. Me sigue saliendo el error 130L, pero probablemente no sea el stop loss en sí, sino el precio de apertura. El precio abierto para un stop de compra y un stop de venta se obtiene determinando el precio máximo/mínimo para un número x de velas, de esta manera.

El problema no es con el stop porque uso exactamente el mismo stop y atp y fijo, las órdenes de mercado se abren sin errores. Significa que el problema está en el cálculo del precio para establecer una orden pendiente. Yo mismo abro los pedidos así


P/S y se me olvidó decir que quiero utilizar las órdenes pendientes para simular algún tipo de filtro de precios para abrir una posición, es decir, si el precio va en la dirección correcta, se disparará una orden pendiente, pero si no lo hace, se cancelará y estaré fuera del mercado. ¿Qué estoy haciendo mal al determinar el precio de apertura? ¿Y tal vez haya una solución más fácil en el filtro de precios para el trato?

p/s muy amablemente, si escribes un código que se pueda aplicar, escribe una instrucción detallada para ello ya que estoy teniendo serios problemas para leer el código. Una instrucción detallada quiero decir, para qué sirve este código y cómo se puede aplicar (para adjuntarlo a una variable y hacer algo con ella o algo más, y por favor escribe tus comentarios al código de una manera más comprensible). Gracias de antemano ;-) P / S que tiene el conocimiento y tiene la experiencia no pasar, ayudar a un hermano - no joda ;-) Tengo que terminar el Grial O_o ;-)

En la función iLowest, en lugar de MODE_HIGH, inserte MODE_LOW.

 

¿Puedes darme una pista? He dibujado un segmento de línea en un gráfico. Necesito saber los precios de inicio y fin del segmento. ¿Se puede hacer?

Archivos adjuntos:
EURUSDM1.png  22 kb
 
Forallf:

¿Puedes darme una pista? He dibujado un segmento de línea en un gráfico. Necesito saber los precios de inicio y fin del segmento. ¿Se puede hacer?

Puede hacerlo en
 
Forallf:

¿Puedes darme una pista? He dibujado un segmento de línea en un gráfico. Necesito saber los precios de inicio y fin del segmento. ¿Se puede hacer?

Es conveniente que este segmento tenga un nombre original

 
Alekseu Fedotov:

En la función iLowest, en lugar de MODE_HIGH, inserte MODE_LOW.

Muchas gracias por advertirlo y avisar - he corregido este caso y durante la prueba de 2 años hubo 130 26 errores. Al mismo tiempo, 115 operaciones se abrieron con normalidad
 
Порт-моне тв:
¡Colegas!

Que trabajaba con objetos. Por favor, envíeme un ejemplo de un trozo de código, donde un triángulo, elipse o cuadrado dibujado manualmente (creo que tiene un nombre en el gráfico) realizaría alguna acción - por ejemplo, una alerta (en caso de que el precio golpee el objeto). Te lo ruego mucho. No sé mucho sobre este tema y no entiendo la teoría del libro de referencia, pero sospecho que el principio es elemental.

¿Alguien me ayuda?