Sari la conținut

BAT-Alert - indicator de alerta sonora


Postări Recomandate

  • 2 săptămâni mai târziu...
  • Moderators

Revin pentru a 4-a oara cred, cu inca un mic update. Cum ma tot folosesc de acest indicator in ultima vreme, din cand in cand mai imi vine cate o idee.

 

Am mai adaugat vreo doua trei noi variabile externe cu ajutorul carora puteti stabili inca de la inceput unde vor fi situate alertele si de ce culoare vor fii liniile. Variabilele nu afecteaza insa decat primele doua linii. Daca folositi mai mult de doua alerte, celelelte, a 3-a, a 4-a etc, vor lua culoarea primei alerte si se vor desena la pretul curent al pietei.

 

extern color FirstLineColor=Magenta;

-culoarea primei alerte orizontale

extern color SecondLineColor=Brown;

-culoarea cele de-a doua alerte

 

extern double FirstAlertLevel=0;

-valoarea de pret la care se va desena prima alerta

extern double SecondAlertLevel=0;

-valoarea de pret la care se va desena alerta numarul 2

 

Daca doriti ca acestea sa apara la nivelul de pret curent, urmand ca sa le mutati mai apoi la nivelul dorit, lasati acestor variabile valoarea 0.

BAT_Alert_v4.2.mq4

Editat de Criodi
Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

neavand ce face in weekend, ai asteptand piata sa inceapa sa se bâțâie, hai sa ma bag si eu peste maestrul Ciordi, ca si el se băgă peste pf-ul meu... :)

 

eu tot nu pricep de ce nu se pot pune un numar infinit de alerte, si de ce adica nu se poate combina alert cu playsound???

 

eu vreau asa un indicator:

 

-alerte grafice. Adica trag o linie orizontala pe grafic, pe care pot sa o mut unde vreau eu, si eventual sa o duplic cu CTRL+drag, si am doua alerte. Trag 1000 de linii si am 1000 de alerte. Deci numar infinit de alerte (cate va incap pe grafic).

-fiecare alerta are mesajul ei propriu, culoarea ei, grosimea ei, sunetul ei propriu pe care il canta.

-pentru fiecare alerta pot sa specific directia in care se da alerta, adica daca se emite mesaj si/sau sunet atunci cand cursul taie linia de alerta de sus in jos, ori doar de jos in sus, ori urlu indiferent de directia din care taie pretul linia mea.

-pentru fiecare alerta se poate specifica un sunet diferit, sub forma unui fisier wav existent pe disk

-pentru fiecare alerta se poate specifica un timer (interval la care sa cante daca nu am luat-o in seama)

-pentru fiecare alerta se poate specifica un interval minim intre alarme, astfel incat atunci cand cursul se balbaie in jurul cotatiei respective, cand deasupra cand dedesupt, sa nu primiesc un milion de alerte. Una pe minut, sau una la 10 secunde e destul, nu?

-fiecarei alerte i se poate specifica un anumit indicator sau o anumita curba a unui anumit indicator si alerta respectiva va da o alarma cand cursul taie curba respectiva (de exemplu alerta cand cursul taie un MA, alerta cand RSI taie 60, sau orice combinatii ale lor).

 

-pentru varianta cu linii orizontale, care este cea mai simpla de implementat, caracteristicile alarmei sa nu se schimbe daca ma mut pe alt TF, ori daca deschid alta pereche, ori daca crapa computerul.

-in plus, sa pot muta nivelul la care se afla o alarma, direct cu mouse-ul, fara sa fie nevoie sa editez proprietatile alarmei, ori parametrii (variabilele externe ale) indicatorului respectiv.

 

Suna science-fiction? Cu o abordare corespunzatoare a problemei, nu este deloc dificil. Abordarea actuala a problemei, asa cum este in indicatorul bat-alert, nu este cea mai fericita.

 

Eu zic ca asa trebuie facut:

 

Cross Alert.mq4

 

Varianta extinsa, cu alerte la crosuri de MA, SAR, trendlines, etc costa intre 5 si 30 de parai, depinde de cat de complexa este. Daca exista interes o sa pun o lista cu tot ce poate face. De asemenea nu ma supar daca altcineva face implementari ori adaogiri la indicatorul curent (care stie doar alarme cu linii orizontale) si ii adauga cross al unui MA sau alt indicator si apoi posteaza pe vamist. Comentariile sunt inauntru, in romaneste. Liber la injuraturi, hihi, dar faceti-le constructiv.

Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

In urma unor discutii avute pe privat am inteles ca pe unele computere indicatorul meu nu "canta" sunetul pe care il pun eu la alerta, ci sunetul default al alertei. Nu pot testa aceasta problema, deoarece la mine canta de fiecare data sunetul corect, acela pe care il dau eu in linia de "description". Cunosc insa aceasta problema din experienta anterioara, asa cum am comentat si in sursa programului, pentru cine a citit, MT4 nu poate canta doua sunete in acelasi timp. Asta pentru ca expertul adaugat pe chart are propriul lui thread (unul singur) iar fiecare indicator se executa intr-un thread separat, si nu se pot deschide mai multe threaduri pentru acelasi indicator. Windows insa este multithread si el incearca sa playeze sunetul intr-un thread separat. De fiecare data cand intra alerta in functiune, sunetul meu nu poate opri sunetul alertei, si nu exista nici un timer care sa cante sunetul meu mai tarziu. Programatorii stiu despre ce vorbesc.

 

Daca aveti aceasta problema, incercati sa adaugati un "Sleep(500);" inainte de linia de cod cu "Alert(...)". In functie de cat de agitata e piata, ori de cat de incarcat este chartul vostru, ori de cat de lent este computerul pe care lucrati, este posibil ca uneori sa mai dea "guşi". Daca puneti un sleep prea lung nu e bine pentru ca sta prea mult.

 

Exista o solutie mai radicala, aceea de a dezactiva sunetele default, adica mergeti in "tools/options/events" si debifati casuta respectiva. Daca totusi aveti nevoie de celelalte sunete, atunci lasati casuta bifata, dar dati la evenimentul "Alert" un sunet inexistent. De exemplu:

 

post-1272-088852600 1277699073_thumb.jpg

 

Alegeti "Choose other" pentru a selecta un alt sunet, si introduceti un nume aiurea, un fisier de sunet care nu exista pe disk:

 

post-1272-029507500 1277699136_thumb.jpg

 

selectati "open" apoi Ok, daca poza arata ca mai jos:

 

post-1272-082500300 1277699172_thumb.jpg

 

Dupa ce ati facut asta, functia "Alert(...)" din MT4 nu va mai canta nici un sunet by default, dar veti avea toate celelalte sunete la celelalte evenimente, asa cum erau inainte. Este nevoie de artificiul acesta pentru ca in MT4 la unii brokeri nu pot sa aleg "no sound" pentru un anumit event, ele sunt ori active toate, ori inactive toate (bifand sau debifand casuta respectiva de mai sus).

 

Alternativa:

 

Daca brokerul vostru permite (fiecare broker are MT4 al lui, personalizat) atunci exista o metoda mai simpla de a dezactiva un anumit sunet pt un anumit event. Observati ca in pozele puse de mine unii "clopotei" de la event au un "x" mic roşu peste ei. Acele sunete sunt dezactivate by default. Puteti activa/dezactiva un sunet pentru un anumit event daca dati dublu-click pe "clopoţel". In acest caz desigur, nu e nevoie sa schimbati sunetul, lasati cum era ("alert.wav" sau orice altceva aveati acolo) dar faceti event-ul inactiv (clopotelul sa aiba un "x" roşu).

 

post-1272-038731100 1277700031_thumb.jpg

 

Indiferent care metoda o alegeti, aceasta are ca efect dezactivarea sunetului la eventul "Alert", deci acum fereastra de alarma nu va mai "cânta" sunetul ei default. Ca urmare, sunetul pus de voi la proprietatile fiecarei alerte se va auzi perfect.

 

 

Bun. A doua chestie, cineva imi spune ca "indicatorul tau nu da nici o alerta". Well, ce pot sa raspund la asemenea "insulta"? :) Mai mult, primesc intrebare de tipul: "indicatorul tau nu are nici un parametru, cum pot seta o alerta?".

 

Asta dovedeste doar ca cel care a intrebat e nu numai bulumac, dar si puturos, nu a citit nimic din ceea ce am scris eu aici, si nu a citit comentariile din interiorul sursei indicatorului.

 

Indicatorul meu nu da alerte de capul lui. El este de tipul "set it and forget it", adica il pui pe chart si el nu face nimic atat timp cat nu are nici o alerta de dat. Mai mult, el nici nu apare pe chart!! Daca vreti sa il stergeti ulterior, trebuie sa dati click din dreapta pe chart, alegeti "indicatori" din meniul pull-down care se deschide, si apoi puteti sa il stergeti. In rest, el sta acolo in spate si nu face nimic, nu mananca resurse, nu va incomodeaza in nici un fel.

 

Pentru a-l face sa dea alerte, trebuie sa "creati" aceste alerte. Se pot crea un numar "infinit" de alerte pentru fiecare chart.

 

Ca sa creati o alerta, tot ce aveti de facut este sa puneti pe chart o linie orizontala (Horizontal Line) din bara de tools (Lines Studies). Cred ca toata lumea stie sa adauge un h-line pe chart!!!

 

Apoi, poate ca userul vrea sa adauge si linii orizontale "de studiu" pur si simplu, care sa nu fie luate in consideratie de catre indicatorul de alarma. Poate ca eu nu vreau ca fiecare linie de suport sau rezistenta sau pivot, orizontale, pe care le adaug pe grafic sa "faca ca trenul". Vreau ca doar "anumite" linii de nivel pe care le pun acolo sa "dea alarma". Si atunci, trebuie sa specific niste parametrii "speciali" pentru aceste linii.

 

Ele trebuie in primul rand sa aibe un nume. Parametrul "Name:" al liniei. Acesta este mesajul care se va afisa atunci cand se da alerta. De exemplu, daca ati adaugat pe chart o linie care sa fie "linie de alarma", atunci selectati-o dand dubluclick pe ea, apoi right-click pe linia selectata si alegeti "horizontal line properties". Veti optine ceva de forma:

 

post-1272-022568700 1277700877_thumb.jpg

 

Bun. Acum modificati numele liniei in conformitate cu mesajul pe care doriti sa il afisati daca alarma este anclansata.

 

Apoi modificati descriptorul liniei pentru a anunta indicatorul de alarma (care pandeste in background) ca aceasta linie este o linie de alarma. Respectiv, eu am scris acolo ceva de genul "AL:-t=23;-c=u;-s="mysound.wav";" (fara ghilimele, ultimul ";" este obligatoriu, fara spatii). Asta inseamna ca vreau o alarma daca linia respectiva este taiata in sus (parametrul -c=u;) si vreau ca aceasta alarma sa sune la fiecare 23 de secunde (-t=23;) si nu mai des de 23 de secunde, daca se produc noi taieri in sus (adica cursul se balbaie in jurul acestei linii). De asemenea i-am mai spus ca la fiecare alarma sa imi cante sunetul existent in fisierul "/sounds/mysound.wav". Asta e tot. De exemplu:

 

post-1272-016759900 1277701253_thumb.jpg

 

Daca doriti sa testati cum functioneaza alarma, selectati linia respectiva si mutati-o de cateva ori deasupra/dedesuptul cursului. Alarma se declanseaza cand cursul s-a aflat dedesuptul liniei la tickul precedent si se afla deasupra liniei la tickul curent. Daca doriti alte optiuni, cititi in sursa programului, pentru toate optiunile posibile (cross in jos, cross in ambele directii, etc). Deci indiferent daca cursul urca si trece peste linie, ori daca linia coboara (o mutati voi cu mouseul) sub curs, se va declansa o alerta daca au trecut cel putin 23 de secunde de la alerta precedenta. Asta ca sa nu ne innebuneasca cu alerte sa nu putem face nimic, si de asemenea ca o facilitate sa putem testa repede daca am pus alertele cum trebuie sau nu. Odata ce testul e OK, pozitionam linia la valoarea la care vrem alerta (o tragem cu mouseul) si la revedere.

 

Putem adauga astfel cate alerte vrem noi, fiecare cu mesajul ei si cu sunetul ei distincte.

 

Edit

 

Daca doriti o alarma care sa cante intr-un fel (asta ca am recitit postul lui oltciter de mai sus) cand cursul o taie in jos si altfel cand cursul o taie in sus, e foarte simplu: creati doua linii, unu cu "-c=u" si una cu "-c=d" si le dati sunete diferite si le puneti la acelasi nivel pe chart

 

 

Ca exemplu, am facut un template, puteti sa il puneti pe eurusd M5, trageti linia verde la cativa pipsi deasupra cursului, pe cea rosie la cativa pipsi dedesupt, si asteptati ca cursul sa le taie. Sper ca nu trebuie sa va reamintesc ca templateul trebuie salvat in folderul de templateuri, iar fisierele de sunet in folderul de fisiere de sunet, din MT4.

 

Cross Alert.rar

 

Puteti adauga cate alerte vreti voi, la ce nivele vreti, ce culori ori grosimi de linii ori stiluri (punctate, continue) vreti voi. Daca va incurca pe grafic, puteti seta culoarea lor la o culoare aproximativ la fel cu a backgroundului, si chiar arata mult mai "fancy". Nu le dati aceeasi culoare ca a backgroundului, exact, ca apoi nu le mai vedeti si trebuie sa folositi rightclick si "objects" ca sa le readuceti inapoi ori ca sa le stergeti.

 

edit: raspund la o noua intrebare pe privat:

 

Ca sa faceti propriile sunete e foarte simplu, de exemplu mergeti pe google translator si tipariti ceea ce doriti sa auziti, dati click pe difuzoraş, pentru ca sunetul e buffer-at pe hdd la voi, veti gasi un fisier micuţ cu extensie MP3 in folderul de fisiere teemporare (la IE8 acesta este DocumentsAndSettings/TemporaryInternetFiles, ori pe acolo). Eu asa am facut sa creez cele doua fisiere pe care le vedeti, am folosit in plus Audacity ca sa compresez (sa fac "Disney voice"-ul pe care il auziti). Totul mi-a luat cateva minute. De asemenea, SoundRecorder din Windows e la indemana, daca vreti alerte cu adevarat personalizate.

Editat de tradelover
Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

iar imi dau reply singur...

 

in urma unei discutii cu Ciordi pe chat, discutie lunga nu gluma... unii care sunt moderatori pe forum la MQL zic ca nu este posibil sa playezi si sunet si alerta.. well, aia sa mai invete MQL...

 

Folosind template-ul pe care l-am pus anterior, dar fara a modifica sunetul de la alerta la events, adaugati la indicator, inainte de linia care zice "Alert...", adica imediat dupa linia cu playsound:

 

            if (alarmSound!="")
               PlaySound(alarmSound);

            int x=GetTickCount();
            while(x+2300>GetTickCount()){}

            Alert(alarmString);

cele doua linii din mijloc sunt liniile adaugate de mine. In acest fel, cei care NU VOR sa modifice sunetul la alerta, adica au oarece motive sa auda SI sunetul default (poate ca au alte alerte in alte charturi, pe alte considerente, din alte motive, etc., si vor ca la acele alerte sa se auda sunetul default al alertei, deci ei nu vor sa foloseasca indicatorul meu in acele "alte" charturi - well, daca ai un indicator "profesionist" :) care da alerte, de ce ai vrea sa folosesti alte alerte? dar asta nu e problema mea). Deci pentru cei care nu vreti sa "anulati" sunetul default al alertei, adaugati cele doua linii de cod din mijlocul fragmentului de cod de mai sus. Apoi jucati-va cu template-ul pe care l-am pus, mutand liniile rosie si verde in sus si in jos (deasupra/dedesuptul cursului). O sa auziti si sunetul meu (diferit pentru fiecare alerta) cat si sunetul default al alertei.

 

Nici macar nu e nevoie sa asteptati un nou tick, daca piata doarme folositi "ALT+C, R", pentru refreshul chartului, asa cum explicam undeva pe blog (parca la indicatorul cu "detail view").

 

Daca substituiti cu alte sunete, cu durata mai lunga, atunci trebuie sa modificati valoarea "2500" pe care am dat-o eu acolo. Acea valoare trebuie sa acopere ca durata in milisecunde, durata celui mai lung sunet, altfel sunetul va fi "taiat" in mijloc de catre sunetul ferestrei de alerta, care vine peste el. Observati ce se intampla daca puneti 2000 in loc de 2500, sunetul liniei rosii se aude complet, pentru ca durata lui este de aprox 1.8 secunde, pe cand sunetul de la linia verde (care dureaza aprox 2.3 secunde) este taiat la sfarsit (adica "ker"-ul de la "smeker" nu se mai aude).

 

grrrr.. ce atata filozofie. Durata acestui sunet o puteti da ca parametru extern, ori se poate introduce un nou parametru in linia de description, ceva de genul "-d=", care sa specifice durata fiecarui sunet, pentru a nu exista "perioade de asteptare" intre sunetul personal si sunetul default al alertei (daca am un sunet de 5 secunde, de exemplu "S-a atins pretul setat la EURO pe chartul M5!" (folositi sound recorderul), si dau 7000 in codul de mai sus, atunci o sa fie o asteptare de 2 secunde din momentul in care se termina sunetul meu si pana incepe sunetul default al alertei.

 

toate astea se POT rezolva in cod, depinde ce vrei. Ceea ce am pus eu aici este doar un indicator DEMO. Nu am zis, si nici nu am de gand sa zic, ca am acoperit toate situatiile. De aia am dat si codul ca utilizatorii chitzibusari sa isi modifice asa cum vor ei. Nu exista "nu se poate"....

 

***************************************************

 

O alta varianta este sa transformati acest indicator intr-un expert, si sa folositi functia MessageBox() in loc de Alert(). Asta deoarece, conform cu nota din helpul MQ la functia "messagebox", "The function cannot be called from custom indicators since they are executed within interface thread and may not decelerate it."

 

De aceea, indicatorul trebuie intai transformat in expert. Pentru asta trebuie sa stergeti o singura linie, aceea care zice "#property indicator_chart_window" la inceputul codului, si sa dati "save as" din meniul "file", si sa il salvati in "/experts" (adica in afara lui "/experts/indicators" unde era initial". Ca sa nu ii incurcati intre ei, salvati-l sub numele "Cross Alert EA.mq4", de exemplu, si asta e tot. Acum este expert, si se poate folosi functia MesssageBox.

 

Adaugati la inceput linia de cod "#include <WinUser32.mqh>", chiar inainte de functia "start", aceasta este headerul pentru MessageBox, care face legatura cu functia corespunzatoare din API-ul windows. Cititi in help despre MessageBox().

 

Apoi, ultima chestie, inlocuiti linia "Alert(....)" din codul de mai sus cu o linie de forma

 

            MessageBox(alarmString, "Alarma: "+Symbol(), MB_OK | MB_ICONSTOP);

si asta e tot. Compile. Acum puneti expertul pe chartul cu template-ul (stergeti intai indicatorul). Arata asa:

 

post-1272-086220000 1277709973_thumb.jpg

 

Si de fiecare data cand se da o alarma o sa auziti sunetul dat de voi, si IN ACELASI TIMP sunetul dat de messagebox, pentru ca acum sunetul este cantat de windows itself, care poate playa mai multe sunete in acelasi timp. Jucati-va cu liniile, sus/jos, ca sa verificati. Alarma arata acum asa:

 

post-1272-030677100 1277710159_thumb.jpg

 

si urla din toti rarunchii cu toate sunetele.

 

Remarcati faptul ca NU ESTE NEVOIE ca expertul sa fie activ (adica nu trebuie sa bifati "alow live trading", maimutzoiul meu nu e "fericit" si totusi alerta merge). Adica expertul nu pune nici un order, doar da alerta. De asemenea nu este nevoie sa dati enable la .dll-uri, deoarece functia messagebox este deja portata in MT4.

 

Pentru cei care nu se sfiesc sa dea enable la dll-uri (este riscant daca faceti asta cu un expert care nu stiti ce e in el, dar aici, unde aveti codul sursa la dispozitie, nu e nici un risc), atunci se poate inlocui MessageBox cu un DialogBox generic, care sa afiseze textul de exemplu cu aceeasi culoare pe care o are linia (alarme la linii mov sa fie afisate cu mov, de exemplu), si evntual, daca dati click pe ok sa va duca direct in chartul in care s-a dat alarma (care este windows parent al dialogului respectiv). Deci nu mai trebuie sa cautati care chart a dat alarma....

 

Codul expertului, pentru cine ii este LENE, grrrrrr, sa modifice doua linii, este aici:

Cross Alert EA.mq4

 

Orice adaogiri ulterioare vor fi pe bani. Ca m-am suparat, auzi cica nu se poate.... :)

Editat de tradelover
Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

Am preluat o idee sau doua de la tradelover, am adaugat si o alerta pentru ema-uri si uite asa revin cu versiunea 5 a indicatorului BAT_Alert. Am pastrat conceptul initial pe care sa bazat creatorul indicatorului original. Adica constructia alertei se face in continuare din indicator, printr-o serie de variabile externe. De exemplu indicatorul lui tradelover nu foloseste variabile externe el doar administrand practic ceea ce puneti pe grafic. Desi personal imi place mai mult ideea lui tradelover de aministrare a alertelor, am pastrat conceptul initial pentru ca sunt sigur ca multi dintre voi nu o sa va simtiti confortabil cu un indicator in care aveti de completat o linie asemanataore cu una de cod (AL:-t=x;-c=b;-s=sound.wav; Ca dovada intrabarile pe care unii le-au pus fata de indicatorul CrossAlert "indicatorul tau nu are nici un parametru, cum pot seta o alerta?" "indicatorul tau nu da nici o alerta" :) )

 

Ce e nou in v5:

 

-variabila timer, preluata din CrossAlert (nu stiu de ce nu m-am gandit mai demult la asta...)

 

extern int Timer=0;

 

Inlocuiti 0 cu numarul de secunde pe care vreti ca indicatorul sa le astepte inainte de a emite o noua alerta (daca pretul se misca in sus si in jos in jurul cotei stabilite initial aveti parte de multe alerte deranjante, una dupa alta. Cu ajutorul acestei variabile adaugati un delay intre alerte)

 

-optiunea de a adauga un sunet specific fiecarei linie de alerta

 

extern string Sound1="";

extern string Sound2="";

 

Atentie! Numarul maxim de linii pe care indicatoul il traseaza acum l-am redus la 2. Am ales sa fac asta pentru ca dupa parerea mea mai mult de doua alerte orizontale de pret nu ar trebui sa aveti nevoie niciodata. (Una deasupra pretului si una dedesupt. Cand una din ele este atinsa puteti sa o mutati un nivel mai sus sau mai jos si ati rezolvat problema.)

 

Variabilele Sound1 si Sound2 sunt specifice Liniei nr 1 si Liniei nr 2 de alerta. Daca nu doriti sa folositi un sunet custom lasati variabilele asa cum sunt, goale. Atentie! Sunetul dumneavoastra nu se va auzi decat daca sunetul default al evenimentului Alert() a fost dezactivat. Gasiti acest eveniment in Tools>Options>Events. Pentru dezactivare dati dublu click pe clopotelul din dreptul alertei, sau daca nu aveti aceasta optiune, inlocuiti numele fisierului alert.wav cu un nume random care nu exista pe hard disk. Gasiti explicatiile si in postul de mai sus. Daca nu dezactivati acest eveniment, sunetul dumneavostra custom nu se va auzi.

 

Ex: extern string Sound1="sound.wav" In terminal cand introduceti variabilele in indicator, acele ghilimele nu vor aparea, si nici nu sunt necesare. Pe platforma completarea va arata ceva de genul Sound1 | sound.wav

 

-optiunea de a seta o alerta la contactul dintre pret si un EMA, sau la cross-ul dintre pret si un EMA in functie de specificatii

 

extern string c="---Setari indicator alerta ema---";

 

extern bool ShowEmaAlert=false; -true sau false, daca doriti sau nu sa folositi aceasta optiune

 

extern string emavalues="3;40;"; -perioadele ema-urilor pe care doriti sa le folositi. Puteti folosi una sau mai multe ema-uri, dar perioadele acestora trebuie sa fie scrise una dupa alta cu ";" (punct si virgula) intre ele si la final.

 

Ex: emavalues = "3;5;6;10;67;" indicatorul va calcula valoarea lui ema5, ema6, ema10, ema67 si va verifica daca pretul atinge aceste ema-uri sau daca face cumva cross in functie de variabilele descrise mai jos.

 

extern int maTimer=5; - numarul de secunde pe care indicatorul il asteapta intre doua alerte. Dupa cum veti vedea mai jos, indicatorul poate sa anunte daca pretul a facut cross cu ema-ul sau daca doar sa apropiat in zona acesteia, zona definita de variabila maAlertPipRange descrisa mai jos. Pauzele se vor face fie intre alertele de atingere, fie intre alertele de cross. Stiu ca in acel timp prestabilit pot avea loc doua sau mai multe alerte de cross sau atingere, dar dupa parerea mea, una este de ajuns incat sa va faca sa mergeti pe acel grafic, unde puteti verifica singuri daca pretul mai atinge si o alta ema sau nu.

 

extern bool CrossAlert=false; -alerteaza la crossul pretului cu unul din ema-urile mai sus stabilie. Cross inseamna ca close-ul barei precedente este mai jos decat ema-ul, iar close-ul curent este mai sus decat el.(exemplu pentru cross up)

 

extern bool TouchAlert=true; -alerteaza cand pretul atinge zona unuia dintre ema-urile mai sus stabilite. Functioneaza practic dupa acelasi principiu ca si alerta orizontala de pret.

 

extern int maAlertPipRange=1; -defineste zona din jurul unui ema in care indicatorul va emite alarma in cazul in are pretul atinge acea zona.

 

extern string CrossUpSound=""; -sunet custom pentru cross in sus

extern string CrossDownSound=""; -sunet custom pentru corss in jos

extern string touchSound=""; -sunet custom specific atingerii zonei

 

Aceste sunete functioneaza in aceleasi conditii ca si sunetele alertelor orizontale de pret, conditii descrise ceva mai sus.

BAT_Alert_v5.mq4

Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

hehe, dupa autoreclama din ultimul post, m-ai facut sa il downloadez! :) Arata bine, si merge bine. Plusul verde de rigoare! De asemenea foarte buna observatia ca nu ai nevoie decat de doua alarme, m-am gandit si eu, dar pentru ca se licita mai sus pe "multe alarme", am licitat si eu mai departe pe "infinit numar de alarme" hihi... Bun. Carcoteala tehnica: Cateva linii de cod in plus pe acolo, si variabile de care nu ai nevoie. De exemplu linia "int counted_bars=IndicatorCounted();" nu iti trebuie, iar la functia NewBar() ar trebui sa faci un comentariu precum ca aceasta functie poate fi apelata doar o singura data pe tick, pentru ca al doilea apel o sa dea gusa, variabila statica e deja schimbata la valoarea noii bare. Si daca tot nu o poti apela decat o singura data, atunci nu ai nevoie de functie, poti sa faci if-ul direct in functia start. Ramura else nu e necesara, doar return-ul de la final, care simplifica if-ul. Asta ca sa cobesc si eu oleaca... hehe.

 

Relativ la problema discutata pe chat, am implementat deja un dll care sa afiseze un dialog in loc de alertbox ori de messagebox, sa nu cante nici un sunet in afara de acela pe care il dau la description, si in plus atunci cand dai click pe ok sa te duca direct pe chartul care a generat alarma. Daca chartul este inchis (minimizat) el va fi automat restored, iar daca MT4 este minimizat si userul lucreaza la altceva, atunci MT4 va fi deschis automat si afisat in frontul tuturor celorlalte ferestre. Aici am bagat la expert un parametru boolean, numit BringMT4toFront si setat default la "true", pentru ca lucrez la servici si daca vine bosu nu vreau sa imi sara MT4 in front peste Autocad sau Protel, haha, chiar cand stau de vorba cu sefu in fata monitorului... Deci daca parametrul este "false" atunci MT4 nu va fi adus in front, in caz ca este acoperit de o alta fereastra.

 

In plus, daca charturile sunt "imprăştiate" pe ecran, dialogul se deschide deasupra ferestrei care a generat alarma (care bineinteles, daca e minimizata, va fi restaurata automat si adusa in frontul celorlalte charturi, astfel ca userul nu mai trebuie sa caute ce chart a dat alarma) adica pozitionat centrat pe suprafata chartului care a data alarma, iar acest chart este adus in faţa celorlalte charturi.

 

Cam asa:

post-1272-066759900 1277871358_thumb.jpg

 

Deocamdata nu mi-am batut capul legat de afisarea cu culoarea liniei (parametrul de culoare este transmis spre dll, dar nu il iau in consideratie, vreau intai sa vad daca merge logica. De asemenea nu am testat cu indicator, ci doar cu expert, pentru ca imi este mai usor sa pun/iau expertul de/pe chart intre teste (nu pot recompila dll-ul daca e accesat de catre MT4 si trebuie de fiecare data cand modific cate ceva in cod, sa "omor" expertul, sa recompilez, apoi sa pun expertul inapoi, iar cu indicator asta e foarte nasol, ca ala nu se vede pe chart si trebuie sa dau rightclick, aleg din menu, etc tot tacamul, drept urmare am lucrat intai cu expert, o sa vad mai incolo cum trec la indicator). Toate testele sunt facute pe XP, s-ar putea ca codul sa nu mearga pe Vista sau Win7, o sa ma ocup de asta mai tarziu.

 

Desigur ca facilitatile astea "meseriase" nu se pot obtine fara folosirea unui dll, pentru ca MT4 este saracutz in materie de lucru cu charturi si cu ferestre. MT5 este mult mai bazat aici, de un milion de ori mai bazat. Dar inca nu este larg îmbrăţişat de catre brokeri, asa că trebuie sa ne limitam la MT4 si dll. Pentru cei reticenti in a lansa un DLL pe computer, va rog sa mai asteptati pana o sa termin developingul (sunt si eu presat de timp cu alte chestii din real life), este inca in lucru, cand il termin o sa pun sursa, si atunci o sa va puteti compila propriul dll, ca sa fiti siguri ca nu contine miscatori. Pana atunci, o sa trebuiasca sa ma credeti pe cuvant. Deci pentru cei care ma cred pe cuvant, o sa atasez dll-ul si headerul mqh, cred ca stiti ca fiecare trebuie salvat in folderul respectiv (in experts, pastrati structura folderelor care e in zip).

 

Folositi template-ul (e acelasi de mai sus, cel cu o linie rosie si una verde, am sters indicatorul, care era in template, am lasat liniile, aduceti-le aproape de curs, am pus ea-ul in loc de indicator) cand puneti pe chart noul expert, dati enable la dll. Ca sa nu va intrebe de fiecare data "doriti sa apelati functia DialogAlert?" dati-i afara checkul de la "confirm dll function calls" (puteti sa o lasati in prima faza, ca sa fiti siguri ca nu chem alte functii sa va sterg sistemul de operare de pe disk, haha, apoi o scoateti, ca o sa va incomodeze).

 

Cei reticenti in a folosi un dll din sursa necunoscuta, repet, mai asteptati. O sa pun codul sursa imediat ce termin (poate dura cateva zile, nu prea am timp mementan) si atunci o sa puteti folosi un compilator de C++ sa va compilati voi propriul dll. Eu garantez ca dll-ul pus este curat, adica nu are virusi, si nu face altceva decat spune ca face. Dar voi nu trebuie sa ma credeti pe cuvant, daca nu vreti.

 

CrossAlert.rar

 

Fair winds, and Alize be with ye...

Editat de tradelover
am re-atasat, uitasem niste printuri folosite la debug, le-am pus in comment
Link spre comentariu
Distribuie pe alte site-uri

  • 2 luni mai târziu...

Intrebarea mea este probabil prosteasca, dar fiind incepator in domeniu imi permit :D cum setez alarma? speram sa din metatrader cand selectez indicatorul (am ales crossalert) sa se deschida o fereastra care sa controleze nivelul la care alarma sa porneasca si altele, dar asa nu ma pricep si n-as vrea sa-i fac vreo boacana, puteti ajuta un nestiutor ? :) va multumesc anticipat.

Link spre comentariu
Distribuie pe alte site-uri

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.

Vizitator
Răspunde la acest subiect...

×   Alipit ca text avansat.   Alipește ca text simplu

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.

  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.