Caratteristiche utili da KimIV - pagina 84

 
vopros писал(а) >>

Igor, ciao!

Potreste consigliarmi come implementare la notifica sonora in un indicatore esistente?

Per esempio, in ZigZag. Come posso aggiungere che ci sarà un suono al momento di disegnare la nuova linea:

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum |Riprodotto il codice dell'indicatore RPoint . RPoint'.
//| Aborigen & Kharko |
//| http://forex.kbpauk.ru/ | QUALITÀ ZIGZAG
//+------------------------------------------------------------------+

 

Signori programmatori, per favore fate un EA (per soldi ragionevoli) dall'indicatore di Kim.

Dettagli per posta

Vladimir

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4 |
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.02.2006 L'indicatore di gamma del mattino.
//+------------------------------------------------------------------+
#proprietà copyright "Kim Igor V. aka KimIV"
#proprietà link "http://www.kimiv.ru"

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

//------- Parametri dell'indicatore esterno -------------------------------
extern string CheckTime = "08:00"; // Controlla l'intervallo di tempo
extern bool ShowHistory = True; // Mostra i livelli di storia
extern inttern NumberOfDays = 5; // Numero di giorni di storia
extern bool ShowComment = True; // Mostra i commenti

//------- Indicator Buffers ------------------------------------------
doppio dBuf0[], dBuf1[];

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
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();
per (int i=0; i<2; i++) {
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0);
}

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

//+------------------------------------------------------------------+
//| Oggetti CreateLine
//| Parametri: |
//| no - nome della linea ||
//| cl - colore della linea |
//+------------------------------------------------------------------+
void CreateLines(stringa no, colore cl) {
ObjectCreate(no, OBJ_TREND, 0, 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);
}

//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
void deinit() {
DeleteLines();
Commento(");
}

//+------------------------------------------------------------------+
//| Cancellare le linee orizzontali.
//+------------------------------------------------------------------+
void DeleteLines() {
per (int i=0; i<2; i++) {
ObjectDelete("HLine "+i);
}

per (i=0; i<NumeroDiGiorni; i++) {
ObjectDelete("upLine "+i);
ObjectDelete("dnLine "+i);
}
}

//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
void start() {
datetime t1, t2, dt;
doppio 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);

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

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

//+------------------------------------------------------------------+
//| Imposta i dettagli della linea orizzontale del giorno corrente.
//+------------------------------------------------------------------+
void SetHLine(int nl, double pp) {
colore cl;

se (pp!=EMPTY_VALUE) {
interruttore (nl) {
caso 0: cl=indicatore_colore1; pausa;
caso 1: cl=indicatore_colore2; break;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+------------------------------------------------------------------+
//| Disegnare linee sul grafico
//| Parametri: |
//| dt - data del giorno di negoziazione |
//| nd - numero del giorno (per la numerazione degli oggetti) |
//+------------------------------------------------------------------+
void DrawLines(datetime dt, int nd) {
datetime t1, t2;
doppio 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);
}

//+------------------------------------------------------------------+
//| diminuire la data di un giorno di negoziazione
//| Parametri: |
//| dt - data del giorno di negoziazione |
//+------------------------------------------------------------------+
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..;
se (td==0) {
tm--;
se (tm==0) {
Tipo..;
tm=12;
}
se (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
se (tm==2) se (MathMod(ty, 4)==0) td=29; altrimenti td=28;
se (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
Igor, ciao! Ci sono due esperti (esperto1 ed esperto2), l'esperto1 ha un file in cui scrive i dati di ogni nuova riga. Expert2 ha un valore da confrontare con il valore massimo del file. Per favore, aiutatemi a tirare fuori questo numero massimo.
 
Milka писал(а) >>
Ciao Igor, ci sono due Expert Advisors (Expert1 e Expert2). Expert1 ha un file in cui scrive i dati di ogni nuova riga. Expert2 ha un valore da confrontare con il valore massimo nel file. Per favore, aiutatemi a tirare fuori questo numero massimo.

In Expert 2, caricate tutti i numeri in un array e poi usate ArrayMaximum().

 
KimIV >> :

In Expert 2, caricate tutti i numeri in un array e poi usate ArrayMaximum().

Non riesco a caricare i dati in un array

 
Milka писал(а) >>

Ho problemi a caricare i dati in un array.

Date un'occhiata alle mie funzioni di array in questo topic. Gli esempi dovrebbero riempire gli array di dati.

 

Igor, ciao!

Quando creo una linea su un grafico (per esempio - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la piattaforma disegna un DRIVE di lunghezza infinita, mentre il tutorial dice - un TREAD! Non riesco a trovare come trasformare OBJ_TREND in un segmento della lunghezza giusta. Convertire manualmente tutti i raggi o il trucco (disegnare un triangolo per così dire) sembra essere fuori questione. Puoi darmi un suggerimento...

 
alexpert007 писал(а) >>

Igor, ciao!

Quando creo una linea su un grafico (per esempio - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la piattaforma disegna un DRIVE di lunghezza infinita, mentre il tutorial dice - un TREAD! Non riesco a trovare come trasformare OBJ_TREND in un segmento della lunghezza giusta. Convertire manualmente tutti i raggi o il trucco (disegnare un triangolo per così dire) sembra essere fuori questione. Suggerimento...

Usate ObjectSet(tLine, OBJPROP_RAY, False).

 

Ciao Igor,

Ho già sollevato la questione della chiusura parziale delle posizioni, e in particolare l'errore 131 (p. 49-50 auth.6232). Non è un problema di chiusura parziale, ma l'errore 131 nel log non mi permette di continuare a scrivere l'EA. Ho trovato un link alla vostra funzione "Chiudere un terzo di una posizione" nel ramo "Esiste una funzione pronta per la chiusura parziale di una posizione", ma non ho trovato la funzione data qui, in questo ramo, né la vostra risposta alla domanda di 6232. La risposta (p.50) ha aiutato a risolvere parzialmente il problema. Il registro non ha generato un errore, ma è apparso un effetto collaterale - la prima posizione aperta non è stata chiusa come richiesto.

Per confronto, il primo grafico ha chiuso "come dovrebbe essere", ma con 131 errori costantemente:

e un grafico senza errori, ma con la prima (e per qualche motivo solo la prima) posizione aperta che si chiude in modo errato:

 

Il codice di chiusura era così:

File:
codv1.mq4  8 kb
Motivazione: