Fonctions utiles de KimIV - page 58

 

Bonjour Igor,

Pourriez-vous me dire quel opérateur remplacer dans la mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Merci d'avance.

 
Pouvez-vous m'indiquer comment clôturer un ordre au prix de clôture de la barre actuelle ? C'est-à-dire que la barre se ferme en même temps que l'ordre.
 

Bonjour Igor.

J'ai parcouru toutes les fonctions et opérateurs - je ne trouve pas, et s'il y en a une, je ne vois pas la fonction qui modifierait toutes les positions ouvertes,

qui modifierait toutes les positions ouvertes en une fois, au lieu d'une position sélectionnée à chaque tick.

Si cela ne vous dérange pas, veuillez m'en informer.

 
KimIV >> :

Dans ce fil de discussion, je posterai les codes de mes fonctions dans MQL4, je donnerai des exemples de leur utilisation et je répondrai aux questions relatives à leur utilisation. Chaque fonction sera publiée en deux postes. Le premier post contiendra le code de la fonction, le second - des exemples d'utilisation et de courtes explications. Parfois, je joins le code d'un script au deuxième message pour tester réellement la fonction et afficher les résultats.

Je commencerai par les fonctions permettant de gérer les ordres, conformément à la demande de Lukyanov dans le sujet "Comment faire fonctionner deux EA en même temps" à la fin.

La première fonction est la fonction de définition des ordres (version pour le testeur MT4) :

Bonjour Igor, connaissez-vous AlterTrader ? Si oui, pourriez-vous me donner les réponses à 3 ou 4 de mes questions ?

 
ipm писал(а) >>
Igor. Bonjour.
Pouvez-vous dessiner un problème simple pour vous :
définir à quelle valeur de prix la ligne de signal croisera la MACD, ou en d'autres termes l'histogramme MACD deviendra égal à zéro.

Bonjour Oleg !

Je n'ai pas résolu de tels problèmes dans la pratique. Et théoriquement, j'ai une vague idée de comment le faire. Probablement, les valeurs makdac sont prises comme x et le prix comme x et ensuite la fonction y=f(x) représentera la dépendance des valeurs makdac sur le prix. Si c'était aussi simple, on pourrait inverser la fonction y=f(x) en exprimant x par ypc x=F(y). Mais la difficulté est que la fonction y=f(x) dépend de plus d'un x. J'ai séché ces cours à l'université :-)

 
Duke3D писал(а) >>

Bonjour Igor,

Pourriez-vous me dire quel opérateur remplacer dans la mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Merci d'avance.

Apparemment, ce sera OrderType().

 
mozg писал(а) >>
Pouvez-vous m'indiquer comment fermer un ordre au prix de clôture de la barre actuelle ? C'est-à-dire que la barre se ferme en même temps que l'ordre.
static datetime prevTimeOpen=0
if ( prevTimeOpen>0 && prevTimeOpen<Time[0]) {
  for ( цикл перебора позиций) {
    if ( выбрана позиция, которую надо закрыть) {
      OrderClose(...);
    }
  }
}
prevTimeOpen=Time[0];
 
amur писал(а) >>

Bonjour Igor.

J'ai parcouru toutes les fonctions et opérateurs - je ne trouve pas, et s'il y en a une, je ne vois pas la fonction qui modifierait toutes les positions ouvertes,

qui modifierait toutes les positions ouvertes en une fois, au lieu d'une position sélectionnée à chaque tick.

Si cela ne vous dérange pas, veuillez nous en informer.

Je ne pense pas que de telles actions soient appropriées. Après tout, chaque poste a généralement des paramètres individuels. Donc tu en choisis un, un spécifique...

Et qu'est-ce que vous voulez modifier exactement ?

 

Fonction NameDayOfWeek()

Renvoie le nom du jour de la semaine en fonction du numéro passé en paramètre :

  • ndw - Numéro du jour de la semaine. Paramètre requis.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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("Суббота");
}
 

La fonction NormalizeLot().

Cette fonction renvoie la valeur normalisée du lot en cours de négociation. Outre la normalisation, la fonction adapte la taille du lot aux limites spécifiées par le centre de traitement (les valeurs minimale et maximale du lot et le pas de changement de lot sont vérifiés). La fonction NormalizeLot() accepte les paramètres suivants :

  • lo - Valeur de NormalizeLot. Paramètre requis.
  • ro - Méthode d'arrondi. Faux - pour le petit côté, Vrai - pour le grand côté. Valeur par défaut - Faux - vers le bas.
  • sy - Nom de l'instrument commercial. NULL ou "" - symbole actuel. Valeur par défaut - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

SZZ. Vous trouverez ci-joint un script pour tester la fonction NormalizeLot().

Dossiers :