Fonctions utiles de KimIV - page 84

 
vopros писал(а) >>

Igor, bonjour !

Pourriez-vous m'indiquer comment implémenter une notification sonore dans un indicateur existant ?

Par exemple, dans ZigZag. Comment puis-je ajouter qu'il y aura un son au moment de tracer la nouvelle ligne :

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum |Reproduit le code de l'indicateur RPoint . RPoint".
//| Aborigen & Kharko |
//| http://forex.kbpauk.ru/ | QUALITÉ ZIGZAG
//+------------------------------------------------------------------+

 

Messieurs les programmeurs, faites s'il vous plaît un EA (pour un prix raisonnable) à partir de l'indicateur de Kim.

Détails par courrier

Vladimir

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4 |
//| Kim Igor V. alias KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.02.2006 L'indicateur de gamme du matin .
//+------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#lien de propriété "http://www.kimiv.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 blue
#property indicator_color2 Orange

//------- Paramètres de l'indicateur externe -------------------------------
extern string CheckTime = "08:00" ; // Vérifier l'heure de l'intervalle de temps
extern bool ShowHistory = True ; // Afficher les niveaux d'historique
extern inttern NumberOfDays = 5 ; // Nombre de jours d'historique
extern bool ShowComment = True ; // Afficher les commentaires

//------- Tampons indicateurs ------------------------------------------
double dBuf0[], dBuf1[] ;

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
void init() {
SetIndexArrow(0, 217) ;
SetIndexBuffer(0, dBuf0) ;
SetIndexStyle (0, DRAW_ARROW, 1, 2) ;
SetIndexArrow(1, 218) ;
SetIndexBuffer(1, dBuf1) ;
SetIndexStyle (1, DRAW_ARROW, 1, 2) ;

DeleteLines() ;
for (int i=0 ; i<2 ; i++) {
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0) ;
}

for (i=0 ; i<NumberOfDays ; i++) {
CreateLines("upLine "+i, indicator_color1) ;
CreateLines("dnLine "+i, indicator_color2) ;
}
}

//+------------------------------------------------------------------+
//| CreateLine objects |
//| Paramètres : |
//| no - nom de la ligne ||
//| cl - couleur de la ligne
//+------------------------------------------------------------------+
void CreateLines(string no, colour cl) {
ObjectCreate(no, OBJ_TREND, 0, 0,0, 0,0) ;
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID) ;
ObjectSet(no, OBJPROP_WIDTH, 1) ;
ObjectSet(no, OBJPROP_COLOR, cl) ;
ObjectSet(no, OBJPROP_RAY, False) ;
}

//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
void deinit() {
DeleteLines() ;
Commentaire (") ;
}

//+------------------------------------------------------------------+
//| Supprimer les lignes horizontales. |
//+------------------------------------------------------------------+
void DeleteLines() {
for (int i=0 ; i<2 ; i++) {
ObjectDelete("HLine "+i) ;
}

for (i=0 ; i<NumberOfDays ; i++) {
ObjectDelete("upLine "+i) ;
ObjectDelete("dnLine "+i) ;
}
}

//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
void start() {
datetime t1, t2, dt ;
double p1, p2 ;
int b1, b2 ; sd=0 ;

t1=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00") ;
t2=StrToTime(TimeToStr(CurTime(), TIME_DATE)+""+CheckTime) ;
b1=iBarShift(NULL, 0, t1) ;
b2=iBarShift(NULL, 0, t2) ;
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)] ;
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)] ;

SetHLine(0, p1) ;
SetHLine(1, p2) ;

if (ShowHistory) {
dt=decDateTradeDay(CurTime()) ;
for (int i=0 ; i<NumberOfDays ; i++) {
DrawLines(dt, i) ;
dt=decDateTradeDay(dt) ;
while (TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt) ;
}
}

if (ShowComment) Comment("CheckTime="+CheckTime) ;
}

//+------------------------------------------------------------------+
//| Définir les détails de la ligne horizontale du jour actuel. | |
//+------------------------------------------------------------------+
void SetHLine(int nl, double pp) {
couleur cl ;

if (pp!=EMPTY_VALUE) {
switch (nl) {
cas 0 : cl=couleur_indicateur1 ; rupture ;
cas 1 : cl=couleur_indicateur2 ; rupture ;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl) ;
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp) ;
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT) ;
}
}

//+------------------------------------------------------------------+
//| Dessiner des lignes sur le graphique |
//| Paramètres : |
//| dt - date de la journée de négociation |
//| nd - numéro du jour (pour la numérotation des objets) | |
//+------------------------------------------------------------------+
void DrawLines(datetime dt, int nd) {
datetime t1, t2 ;
double p1, p2 ;
int b1, b2 ;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" 00:00") ;
t2=StrToTime(TimeToStr(dt, TIME_DATE)+""+CheckTime) ;
b1=iBarShift(NULL, 0, t1) ;
b2=iBarShift(NULL, 0, t2) ;
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)] ;
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)] ;

ObjectSet("upLine "+nd, OBJPROP_TIME1, t1) ;
ObjectSet("upLine "+nd, OBJPROP_PRICE1, p1) ;
ObjectSet("upLine "+nd, OBJPROP_TIME2, t2) ;
ObjectSet("upLine "+nd, OBJPROP_PRICE2, p1) ;

ObjectSet("dnLine "+nd, OBJPROP_TIME1, t1) ;
ObjectSet("dnLine "+nd, OBJPROP_PRICE1, p2) ;
ObjectSet("dnLine "+nd, OBJPROP_TIME2, t2) ;
ObjectSet("dnLine "+nd, OBJPROP_PRICE2, p2) ;
}

//+------------------------------------------------------------------+
//| Diminuer la date d'un jour de bourse |
//| Paramètres : |
//| dt - date de la journée de négociation |
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt) {
int ty=TimeYear(dt) ;
int tm=TimeMonth(dt) ;
int td=TimeDay(dt) ;
int th=TimeHour(dt) ;
int ti=TimeMinute(dt) ;

td-- ;
si (td==0) {
tm-- ;
si (tm==0) {
ty-- ;
tm=12 ;
}
si (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31 ;
si (tm==2) si (MathMod(ty, 4)==0) td=29 ; sinon td=28 ;
si (tm==4 || tm==6 || tm==9 || tm==11) td=30 ;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
Igor, bonjour ! Il y a deux experts (expert1 et expert2). Expert1 a un fichier dans lequel il écrit les données de chaque nouvelle ligne. Expert2 a une valeur à comparer avec la valeur maximale du fichier. Aidez-moi à trouver ce nombre maximal.
 
Milka писал(а) >>
Bonjour Igor, il y a deux Expert Advisors (Expert1 et Expert2). Expert1 a un fichier dans lequel il écrit les données de chaque nouvelle ligne. Expert2 a une valeur à comparer avec la valeur maximale du fichier. Aidez-moi à trouver ce nombre maximal.

Dans l'expert 2, chargez tous les nombres dans un tableau et utilisez ensuite ArrayMaximum().

 
KimIV >> :

Dans l'expert 2, chargez tous les nombres dans un tableau et utilisez ensuite ArrayMaximum().

Je n'arrive pas à charger les données dans un tableau.

 
Milka писал(а) >>

J'ai des difficultés à charger des données dans un tableau.

Consultez mes fonctions de tableau dans ce fil. Les exemples doivent remplir les tableaux de données.

 

Igor, bonjour !

Lorsque je crée une ligne sur un graphique ( par exemple - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la plateforme dessine une DRIVE de longueur infinie, alors que le tutoriel dit - une TREAD ! Je ne trouve pas comment transformer OBJ_TREND en un segment de la bonne longueur. La conversion manuelle de tous les rayons ou le truc (dessiner un triangle en quelque sorte) semble être hors de question. Pouvez-vous me donner un indice...

 
alexpert007 писал(а) >>

Igor, bonjour !

Lorsque je crée une ligne sur un graphique ( par exemple - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la plateforme dessine une DRIVE de longueur infinie, alors que le tutoriel dit - une TREAD ! Je ne trouve pas comment transformer OBJ_TREND en un segment de la bonne longueur. La conversion manuelle de tous les rayons ou le truc (dessiner un triangle en quelque sorte) semble être hors de question. Indice...

Utilisez ObjectSet(tLine, OBJPROP_RAY, False).

 

Bonjour Igor,

J'ai déjà soulevé la question de la fermeture partielle des positions, et en particulier, l'erreur 131 (p. 49-50 auth.6232). Ce n'est pas un problème de fermer partiellement des positions, mais l'erreur 131 dans le journal ne me permet pas de continuer à écrire l'EA. J'ai trouvé un lien vers votre fonction "Fermer un tiers d'une position" dans la branche "Existe-t-il une fonction prête pour la fermeture partielle d'une position", mais je n'ai pas trouvé la fonction donnée ici, dans cette branche, ni votre réponse à la question de 6232. La réponse (p.50) a permis de résoudre partiellement le problème. Le journal n'a pas généré d'erreur, mais un effet secondaire est apparu - la première position ouverte n'a pas été fermée comme prévu.

À titre de comparaison, le premier graphique s'est fermé "comme il se doit", mais avec 131 erreurs en permanence :

et un graphique sans erreur, mais avec une fermeture incorrecte de la première (et pour une raison quelconque, seulement la première) position ouverte :

 

Le code de fermeture ressemblait à ceci :

Dossiers :
codv1.mq4  8 kb