Sari la conținut

Nu sunt programator, asa ca cer ajutor


nicugh

Postări Recomandate

solutia pentru problema ta ar fi cred definirea unui magic number diferit pentru fiecare pereche, iar acel magic number sa fie dat ca parametru la initializare.

solutia:

extern double MAGIC=............

nu ma ajuta, dupa un timp sigur voi uita ce numere am dat la fiecare, eu caut ceva de genul 111111+symbol+timeframe+primullot(in cazul in care expertul deschide mai multe loturi)=MAGIC

Link spre comentariu
Distribuie pe alte site-uri

  • Răspunsuri 38
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

  • Moderators

eu caut ceva de genul 111111+symbol+timeframe+primullot(in cazul in care expertul deschide mai multe loturi)=MAGIC

ceea ce am pus eu iti da symbol+timeframe=MAGIC

 

toate orderele plasate din acelasi TF si pe aceeasi pereche vor avea acelasi magic, nu conteaza cand le pui, de pe ce computer le pui, cate loturi pui, etc. Iar magicurile vor fi unice, adica alta pereche si/sau alt tf va genera un alt magic.

 

Nu am inteles la ce iti trebuie 1111?? si la ce iti trebuie primullot?? Cu magicul de mai sus, restul e "orderopentime(), orderopenprice(), orderlots() etc... Chiar ai nevoie de 1111 ala? si de primullot?? Poate ca "primullot" s-ar justifica cand joci combinatii de biduri, dar in acest caz poti sa pui pentru orderele primei combinatii:

 

OrderSend(.... GetMagic()+100000000....);

 

Apoi pui plus 200000000 pentru combinatia a doua, etc.

 

Poti avea in acest fel mai mult de 20 de combinatii de ordere, deoarece GetMagic() genereaza numere intre 124'780'545 si 140'748'992, iar numarul maxim integer care poate fi memorat este 2'147'483'647. Fiecare combinatie poate avea un numar nelimitat de ordere si toate vor avea acelasi magic, in cadrul aceleiasi combinatii. De exemplu toate orderele plasate pe combinatia 5-a in tf-ul M30 pe CHFJPY vor avea magicul 628'778'270 (vezi fisierul csv).

 

In acest fel un MAGIC dat, poti identifica exact perechea valutara pe care a fost pus, time+framul pe care a fost pus, si combinatia de biduri (numarul ei) care a generat orderul care are magicul respectiv.

 

Nu ai nevoie sa memorezi toate numerele, faci testul cu "if(ordermagicnumber=getmagic+100000000*combinatie) then..."

 

Daca cele 20 de combinatii nu te satisfac, poti folosi

 

OrderSend(.... GetMagic()+20000000....);

 

(douazeci de milioane in loc de o suta de milioane) si atunci ai de 5 ori mai multe combinatii posibile (mai mult de 100 de combinatii diferite in cadrul aceluiasi TF si aceleiasi perechi, toate unice, pentru ca diferenta dintre cel mai mare si cel mai mic numar generat de GetMagic() este mai mica de 20 milioane).

 

Asta doar asa ca sa facem teoria chibritului ;), pentru ca sunt ferm convins ca la strategia care vrei tu sa o faci, GetMagic() e arhisuficient, fara bâzdâbâcuri adunate la el...

 

OrderSend(....GetMagic()....);

 

si

 

if (OrderMagicNumber()==GetMagic()) {.....}

 

sunt cu siguranta mai mult decat suficiente pentru orice implementare. Restul, precum am zis, sunt chestii pe care ti le dau functiile de tranzactionare (OrderXXXX()), ai timpul, loturile, preturile, stopul, targetul.... Nu imi vine sa cred ca ai o strategie asa de complexa incat sa nu poti identifica cu precizie un order hihi.... (daca ai, o vreu si eu ;)

Link spre comentariu
Distribuie pe alte site-uri

 

Multumesc pentru ajutor, acum am picat de la servici (pacat ca nu am acces la net in timpul asta), sunt cam obosit, sper sa inteleg cum sunt generate, daca nu ramane sa-mi bat capul cu ele cand am o zi mai linistita, inca o data sarutmana!

 

inca nu e o strategie chiar asa de complexa, mai degraba vreau sa fac un "calapod" bun la toate, sa ramana de schimbat numai conditiile de intrare-iesire

Link spre comentariu
Distribuie pe alte site-uri

Hi hi, magicul e extraordinar, multumesc Laur, le invarte le suceste si le nimereste :)

 

sa nu credeti ca daca zambesc am toate problemele rezolvate, pentru ca in anumite cazuri Stoploss nu mai este fix ca sa nu incalcam riscul recalculam si lotul

eu am incercat asa, dar are o buba, nu ii place ceva si imi intoarce error 131

 

//+------------------------------------------------------------------+

//| Calculeaza marimea stopului |

//+------------------------------------------------------------------+

double StopLoss()

{

double stop;

stop=iCustom(NULL, 0, "StopLoss",........);

//----

double SL;

SL=MathAbs(stop-Bid);

//----

return(SL);

}

//+------------------------------------------------------------------+

//| Calculeaza marimea lotului |

//+------------------------------------------------------------------+

double LotsOptimized()

{

double lot;

//----

lot=MathMax(MathFloor(AccountEquity()*RiscFactor*1000000/(StopLoss()*MarketInfo(Symbol(),MODE_LOTSIZE)))/100, 0.01);

//----

return(lot);

}

 

 

//-----------------------------------

 

if(tralala :) )

 

OrderSend(.........,LotsOptimized(),Bid,3,0,stop,.........);

Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

Salve nicu si mersi de laude :)

 

functia cu loturile lucreaza corect, presupunand ca ii dai parametrii care ii trebuie. Adica riscul trebuie sa fie un numar subunitar (de exemplu pt risc de 5% se da 0.05 ca parametru), iar stoplossul este in pipsi, adica pentru un stoploss de 150 de pipsi, se da ca parametru 150, si nu 0.0150 (ori in cazul jpy 1.50).

 

nu stiu ce fel de numar intoarce indicatorul tau custom, adica daca cursul e 1.2345 si stopul e la 1.2395, atunci ce intoarce? iti da valoarea stopului in pretz? adica 1.2395? sau cum? in pipsi? adica 50?

 

daca intoarce stopul in pipsi (adica 50 de pipsi), atunci calculul SL=MathAbs(stop-Bid) este gresit. Daca intoarce stopul in pretz, atunci linia return(SL) este gresita, tie pentru calcul iti trebuie stopul in pipsi. Oricum ar fi, undeva trebuie inmultit/impartit cu Points.

 

Bun, acuma o alta observatie, din punct de vedere al eficientei, call-ul dublu din ordersend e total aiurea. Adica ce vreau sa zic, tu faci

 

OrderSend(.........,LotsOptimized(),Bid,3,0,stop,.........);

 

Probabil ca ai vrut sa zici

 

OrderSend(.........,LotsOptimized(),Bid,3,0,StopLoss(),.........);

 

pentru ca in primul caz variabila stop e definita in interiorul procedurii, ea nu este accesibila in afara ei, poate fi zero, poate fi orice valoare, daca nu iti da vreo eroare cum ca ar fi nedefinita....

 

Bun, deci probabil ca ai vrut sa zici StopLoss()...

 

Dar in acest caz tu chemi odata functia StopLoss() din interiorul lui LotsOptimized() si apoi inca odata explicit. Deci iCustom-ul tau se apeleaza de doua ori si executa exact aceleasi calcule pentru fiecare ordersend. Daca iCustom ia un timp "convenabil" de lung, practic viteza de trimitere a orderelor este de doua ori mai mica (calculele necesita un timp dublu)

 

Asta asa ca observatie....

 

O alta observatie e ca calculul lotului este exact doar atunci cand joci perechi cu USD la coada (care au un dolar pe pip la minilot sau 10 dolari pe pip la standard). Altfel, calculul lotului este aproximativ. De exemplu la G/J, cu 8 parai si ceva pe pip pe lot standard, riscul va fi mai mic, adica tu ii dai 0.03 risc, dar el va juca E/U cu risc de 3%, dar va juca G/J sau E/F cu un risc de 2.4%, in schimb va juca E/G cu un risc dublu !! Pentru a avea calculul lotului foarte exact pe toate perechile, ar trebui introdus in calcule si valoarea pipului (care se poate afla cu marketinfo). Eu nu am mai continuat treadul ala cu calculele, pentru ca am vazut ca nu interesa pe nimeni, dar mai erau multe chestii de discutat.....

Link spre comentariu
Distribuie pe alte site-uri

nu stiu ce fel de numar intoarce indicatorul tau custom, adica daca cursul e 1.2345 si stopul e la 1.2395, atunci ce intoarce? iti da valoarea stopului in pretz? adica 1.2395? sau cum? in pipsi? adica 50?

 

daca intoarce stopul in pipsi (adica 50 de pipsi), atunci calculul SL=MathAbs(stop-Bid) este gresit. Daca intoarce stopul in pretz, atunci linia return(SL) este gresita, tie pentru calcul iti trebuie stopul in pipsi. Oricum ar fi, undeva trebuie inmultit/impartit cu Points.

iCustom e un Parabolic SAR deci intoarce valoarea stopului in pret sau asa cred ca face

 

 

Bun, acuma o alta observatie, din punct de vedere al eficientei, call-ul dublu din ordersend e total aiurea. Adica ce vreau sa zic, tu faci

 

OrderSend(.........,LotsOptimized(),Bid,3,0,stop,.........);

 

Probabil ca ai vrut sa zici

 

OrderSend(.........,LotsOptimized(),Bid,3,0,StopLoss(),.........);

 

pentru ca in primul caz variabila stop e definita in interiorul procedurii, ea nu este accesibila in afara ei, poate fi zero, poate fi orice valoare, daca nu iti da vreo eroare cum ca ar fi nedefinita....

 

Bun, deci probabil ca ai vrut sa zici StopLoss()...

nu te contrazic, if(daca as sti nu as intreba), varianta simpla pentru mine ar fi sa-ti trimit un pm cu ce vreau sa faca expertul si sa te rog sa mi-l scrii, dar nu o fac, tocmai pentru a starni si interesul altora.

al doilea motiv e ca daca va necesita schimbari nu as sti ce sa-i fac :)

 

asa ca vreau nu vreau invat si asta, desi singura mea legatura cu if, &&, ||,...vine de la instalatiile de automatizari electrice :)

 

 

later edit:

 

Hi hi, l-am mai zmotocit, rasucit si pana la urma am gasit unde era beleaua :), mai am un pic de aritmetica cu cat inmultesc cu cat impart sa mearga pe toate perechile la fel

 

pana la campionatul urmator e gata :D

Link spre comentariu
Distribuie pe alte site-uri

  • 5 săptămâni mai târziu...

iar m-am incurcat in aritmetica ,o fi berea de vina :)

 

clasic pentru o intersectie de MA-uri avem:

extern double MASlowPeriod=50;

extern double MAFast=14;

 

double MASlow, MAFast;

double MASlowp, MAFastp;

 

MASlow=iMA(NULL,0, MASlowPeriod,0,MODE_EMA,PRICE_CLOSE,1);

MAFast=iMA(NULL,0,MAFastPeriod,0,MODE_EMA,PRICE_CLOSE,1);

MASlowp=iMA(NULL,0, MASlowPeriod,0,MODE_EMA,PRICE_CLOSE,2);

MAFastp=iMA(NULL,0,MAFastPeriod,0,MODE_EMA,PRICE_CLOSE,2);

 

if((MAFastp < MASlowp && MAFast > MASlow) || (MAFastp >MASlowp && MAFast < MASlow))

 

face ce avem de facut :)

 

problema apare cand in loc de linia unui MA vreau sa folosesc un nivel al acelei linii

 

post-759-1196714650_thumb.jpg

 

linia gri este nivelul -38.2 si 38.2 al MA galben

Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

Nivele Fibo la MA?? haha, uite unu care vine cu ceva nou... Habar nu aveam ca se pot pune nivele la MA... Well, din cate m-am uitat pe grafic, aceste nivele nu sunt altceva decat translatii verticale ale lui MA, cu numarul de pipsi specificat ca nivel. Nu stiu ce relevantza au ele, pentru ca o miscare de 38 de pipsi la euro nu e la fel ca o miscare de 38 de pipsi la g/j. Personal cred ca utilitatea lor e egala zero. Dar ma rog, treaba ta, clientul nostru - stapanul nostru... :)

 

Deci

 

double Level=38.2;

 

....

 

if (MAFast+Level*Point<MASlow-Level*Point ....

bla bla, orice alta combinatie de plus si minus vrei, ca nu stiu strategia ta....

 

ar trebui sa iti rezolve treaba...

 

Eventual poti integra in calculele initiale, MAFastPlus=MAFast+Leve*Point, MAFastMinus=MAFast-Level*Point, etc, si le folosesti in consecita in if-uri.

 

Daca vrei sa citesti in mod dinamic din expert nivelele pe care le ai (adica sa le pui din properties la MA, in tabul de Levels, si expertul sa le citeasca de acolo si sa se comporte in consecinta, in functie de cate leveluri pui si de valorile lor) atunci asta este oleaca mai complicat. Pentru indicatori se folosesc level properties, dar in expert nu stiu cum se face, ar trebui verificat daca OBJPROP_FIRSTLEVEL+n merge si pe MA (?!?! in mod normal merge doar pe fibo extensions si fibo retracement, nu stiu daca merge si pe iMA). Ideea e sa faci un indicator separat, care sa iti intoarca nivelele de care ai nevoie, si sa il folosesti in expert cu iCustom, pentru ca in expert nu ai tabul cu levels, el apare doar la indicatori).

 

Spor!

Link spre comentariu
Distribuie pe alte site-uri

  • 5 luni mai târziu...

Salutare,

 

am si eu o rugaminte la programatorii de mql. Doresc sa realizez un expert pe baza unei strategii pe care am dezvoltat-o de-a lungul multor luni, si pe care o folosec manual.

 

Deci cine imi sare si mie in ajutor sa programeze un EA si ramane si cu strategia.

 

multumesc in avans.

 

Imi puteti scrie si pe mail ca poate uit sa intru pe forum: dinucu@yahoo.fr

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.