Sari la conținut

EA propriu cu probleme de incepator


Postări Recomandate

EA meu are forma urmatoare :

 

extern double lots=1;

double ........................ ; //indicatori

int res ,mom, lots;

 

void start()

{

mom = iMomentum(NULL,0,5,PRICE_CLOSE,0);

{

if( conditie)

{

res = OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0," Vanzare ",16384,0,Red);

return(0) ;

}

 

 

if(conditie)

{

OrderClose(OrderTicket(),OrderLots(),Bid,0,Red);

return (0) ;

}

 

 

if( conditie )

{

res = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0," Cumparare ",16384,0,Green);

return(0);

 

}

 

 

if (conditie)

{

OrderClose(OrderTicket(),OrderLots(),Ask,0,Green);

return(0);

}

 

}

}

 

 

ACUM , principala mea problema e ca , conditiile care eu le-am pus in IF se vad clar pe grafic ca exista si ca EA ar trebui sa le ia in considerare dar nu sunt executate pe script, nici macar cu intarziere, iar META EDITORUL nu da erori. Am gresit cu ceva ? este bifat ALLOW LIVE TRADING (cont demo), si expert advisory este pornit (un zambilici mic in colt exista) .

 

Ma pute-ti ajuta ?

}

}

Editat de 4di
Link spre comentariu
Distribuie pe alte site-uri

  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Management

Doua chestii:

 

 

1. De ce deschizi doua acolade dupa numele functiei? Trebuie sa deschizi numai una...

2. Daca ai pus return in fiecare "if" inseamna ca atunci cand una dintre conditii va fi indeplinita, el nu va ajunge sa le verifice si pe celelalte pentru ca iese din functie. Asa ai vrut tu sa functioneaze sau vrei sa verifice toate if-urile alea?

Link spre comentariu
Distribuie pe alte site-uri

Doua chestii:

 

 

1. De ce deschizi doua acolade dupa numele functiei? Trebuie sa deschizi numai una...

2. Daca ai pus return in fiecare "if" inseamna ca atunci cand una dintre conditii va fi indeplinita, el nu va ajunge sa le verifice si pe celelalte pentru ca iese din functie. Asa ai vrut tu sa functioneaze sau vrei sa verifice toate if-urile alea?

 

Multumesc Stefan pt raspuns,

 

1. Am rectificat greseala .

2. Vreau ca EA sa verifice toate IF-urile nu doar pe primul deci am scos toate return si am pus abia la sfarsitul functiei void start() , return(0); e corect inainte de acolada ???

 

Dar nu pot inca rezolva problema mea. De ce pe template indicatorul e corect , dar EA nu il baga in seama !DetailedStatement.htm

Editat de 4di
Link spre comentariu
Distribuie pe alte site-uri

Poti sa atasezi expertul tau?

extern double lots=1;

double res,stoc_main,stoc_sign,a;

 

 

void start()

{

stoc_main = iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_MAIN,0);

stoc_sign = iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_SIGNAL,0);

// conditii pt OP_SELL

// stoc sign sa fie mai mare ca stoc main (rosu deasupra lui verde)

 

if( stoc_sign > stoc_main)

{

res = OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0," Vanzare ",16384,0,Red);

}

if(stoc_sign < stoc_main)

{

a=OrderClose(OrderTicket(),OrderLots(),Bid,0,Red);

}

// conditii pt OP_BUY

// stoc main > stoc sign

if( stoc_main > stoc_sign)

{

res = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0," Cumparare ",16384,0,Green);

}

 

if (stoc_main < stoc_sign)

{

a=OrderClose(OrderTicket(),OrderLots(),Ask,0,Green);

}

 

return(0);

}

 

 

E un pic modificat fata de primul dar e aceeasi problema ....

Editat de 4di
Link spre comentariu
Distribuie pe alte site-uri

  • Moderators

well, un pic anapoda, hehe...

 

Sa inteleg ca problema ta principala e aceea ca iti deschide o gramada de ordere si ca nu iti inchide nici unul, este?

 

Trecand peste partea "logica", care de fapt este ilogica, deoarece (sign>main) este acelasi lucru ca (main<sign) si viceversa, adica ai doua ifuri de fapt, care se executa amandoua la fiecare tick, si peste o bucata de vreme o sa te trezesti ca ai o sumedenie de ordere deschise in ambele sensuri, si nici unul inchis...

 

Well, trecand peste partea asta "logica", esista si o greseala (mare!) semantica. Daca o sa te uiti in helpul de la MT4 la functia OrderTicket, o sa vezi ca iti intoarce numarul unui order SELECTAT ANTERIOR. Unde il selectezi, ca eu nu vad nici un OrderSelect in programul ala. Lui OrderClose trebuie sa ii dai numarul orderului pe care vrei sa il inchizi. Ori tu folosesti OrderTicket pentru a extrage acest numar. Si neavand nici un order selectat, OrderTicket intoarce mereu 0 (sau -1, nu stiu sigur si mi-e lene sa ma uit in help acum). Si cum nu exista nici on order cu numarul 0, ori -1, well... nici un order nu va fi inchis. Daca vei printa variabila "a" (adica ceea ce intoarce functia OrderClose) de fiecare data, vei descoperi ca contine un cod de eroare, cel mai probabil "order inexistent".

 

Ceea ce trebuie sa faci, este sa iei la rand toata lista cu ordere deschise, folosind un for de la 1 la la OrdersTotal (pentru ca nu stii cate ordere ai la un momentdat) si sa le selectezi pe fiecare, cu OrderSelect, apoi sa te joci cu ele, sa le modifici, ori sa le inchizi. toate functiile cu OrderXXXXX in fatza lucreaza pe ultimul order selectat. Altfel de unde sa stie el saracul la ce order vrei tu sa te referi? Daca ai 10 deschise? De unde stie el al carui OrderTicket il vrei tu?

 

Citeste helpul la OrderTicket si OrderSelect.

 

Spor mare.

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.