Funciones útiles de KimIV - página 58

 

Hola Igor,

¿Podría decirme, por favor, qué operador sustituir en mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Gracias de antemano.

 
¿Pueden aconsejar cómo cerrar una orden al precio de cierre de la barra actual? Es decir, la barra se cierra junto con la orden.
 

Hola Igor.

He buscado entre todas las funciones y operadores - no encuentro, y si hay alguna, no veo la función que modificaría todas las posiciones abiertas,

Si lo hay, no veo una función que modifique todas las posiciones abiertas a la vez, en lugar de una seleccionada en cada tick.

Si no le importa, por favor, aconséjeme.

 
KimIV >> :

En este hilo publicaré los códigos de mis funciones en MQL4, daré ejemplos de su uso y responderé a las preguntas relacionadas con su uso. Cada función se publicará en dos puestos. El primer post contendrá el código de la función, el segundo - ejemplos de uso y breves explicaciones. A veces adjuntaré el código de un script en el segundo post para probar realmente la función y mostrar los resultados.

Empezaré con las funciones para manejar las órdenes según la petición de Lukyanov en el tema "Cómo ejecutar dos EAs al mismo tiempo" al final.

Dejemos que la primera función sea la función de ajuste de órdenes (versión para el probador de MT4):

Hola Igor, ¿conoces AlterTrader? Si es así, ¿podrías decirme las respuestas a 3 o 4 de mis preguntas?

 
ipm писал(а) >>
Igor. Buenos días.
¿Puede dibujar un problema simple para usted:
establecer en qué valor del precio de la línea de señal cruzará MACD, o en otras palabras histograma MACD se convertirá en igual a cero.

¡Hola Oleg!

No he resuelto esos problemas en la práctica. Y en teoría, tengo una vaga idea de cómo hacerlo. Probablemente, los valores de makdac se toman como x y el precio como x y entonces la función y=f(x) representará la dependencia de los valores de makdac con el precio. Si fuera tan sencillo, podríamos invertir la función y=f(x) expresando x mediante ypc x=F(y). Pero la dificultad es que la función y=f(x) depende de más de una x. Me salté estas clases en la universidad :-)

 
Duke3D писал(а) >>

Hola Igor,

¿Podría decirme, por favor, qué operador sustituir en mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Gracias de antemano.

Aparentemente será OrderType().

 
mozg писал(а) >>
¿Pueden aconsejar cómo cerrar la orden al precio de cierre de la barra actual? Es decir, la barra se cierra junto con la orden.
static datetime prevTimeOpen=0
if ( prevTimeOpen>0 && prevTimeOpen<Time[0]) {
  for ( цикл перебора позиций) {
    if ( выбрана позиция, которую надо закрыть) {
      OrderClose(...);
    }
  }
}
prevTimeOpen=Time[0];
 
amur писал(а) >>

Hola Igor.

He buscado entre todas las funciones y operadores - no encuentro, y si hay alguna, no veo la función que modificaría todas las posiciones abiertas,

Si lo hay, no veo una función que modifique todas las posiciones abiertas a la vez, en lugar de una seleccionada en cada tick.

Si no le importa, por favor, indíquelo.

No creo que tales acciones sean apropiadas. Al fin y al cabo, cada puesto suele tener parámetros individuales. Así que selecciona uno, uno específico...

¿Y qué es exactamente lo que quiere modificar?

 

Función NameDayOfWeek()

Devuelve el nombre del día de la semana en función del número pasado como parámetro:

  • ndw - Número del día de la semana. Parámetro obligatorio.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование дня недели                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ndw - номер дня недели                                                  |
//+----------------------------------------------------------------------------+
string NameDayOfWeek(int ndw) {
  if ( ndw==0) return("Воскресенье");
  if ( ndw==1) return("Понедельник");
  if ( ndw==2) return("Вторник");
  if ( ndw==3) return("Среда");
  if ( ndw==4) return("Четверг");
  if ( ndw==5) return("Пятница");
  if ( ndw==6) return("Суббота");
}
 

Función NormalizarLote().

Esta función devuelve el valor normalizado del lote que se está negociando. Además de la normalización, la función ajusta el tamaño del lote a los límites especificados por el centro de negociación (se comprueban los valores mínimo y máximo del lote y el paso de cambio del lote). La función NormalizeLot() acepta los siguientes parámetros:

  • lo - Valor de normalización del lote. Parámetro obligatorio.
  • ro - Método de redondeo. Falso - al lado menor, Verdadero - al lado mayor. Valor por defecto - Falso - hacia el lado inferior.
  • sy - Nombre del instrumento comercial. NULL o "" - símbolo actual. Valor por defecto - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro= False, string sy="") {
  double l, k;
  if ( sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo( sy, MODE_LOTSTEP);
  double ml=MarketInfo( sy, MODE_MINLOT);
  double mx=MarketInfo( sy, MODE_MAXLOT);

  if ( ml==0) ml=0.1;
  if ( mx==0) mx=100;

  if ( ls>0) k=1/ ls; else k=1/ ml;
  if ( ro) l=MathCeil( lo* k)/ k; else l=MathFloor( lo* k)/ k;

  if ( l< ml) l= ml;
  if ( l> mx) l= mx;

  return( l);
}

HH. Se adjunta un script para probar la función NormalizeLot().

Archivos adjuntos:
Razón de la queja: