{
int IleOtwartychPozycjiOczekujacych(int kierunek)
{
int Sell=0, Buy=0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == 0001/*MAGICMA*/)
{
if (OrderType() == OP_BUYSTOP || OrderType() == OP_BUYLIMIT) Buy++;
if (OrderType() == OP_SELLSTOP || OrderType() == OP_SELLLIMIT) Sell++;
}
}
switch(kierunek)
{
case -1: return(Sell);
case 0: return(Sell+Buy);
case 1: return(Buy);
}
}
}
return(0);
}}
Dodano po 18 godzinach 55 minutach:
Po wielu błędach udało mi się usunąć błędy, ale EA nie działa poprawnie tzn. nie zamyka zleceń oczekujących po wejściu pierwszych. Może zamiast OrderDelete powinienem użyć jakiejś innej funkcji?
extern double TP = 20;
extern double Lot = 0.01;
//----
int IleOtwartychPozycji(int kierunek)
{
int Sell=0, Buy=0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == 0001)
{
if (OrderType() == OP_BUYSTOP || OrderType() == OP_BUYLIMIT) Buy++;
if (OrderType() == OP_SELLSTOP || OrderType() == OP_SELLLIMIT) Sell++;
}
}
}
switch(kierunek)
{
case -1: return(Sell);
case 0: return(Buy+Sell);
case 1: return(Buy);
}
}
//----
int start() // Wejscie/funkcja start
{
int total, firstupperup, firstupperdown,firstlowerup, firstlowerdown;
//koniec zdefiniowanych
{
total=OrdersTotal();
if(total<1)
if (true)
{
if(AccountFreeMargin()<(1000*Lot))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if(total==0)
{
firstupperup=OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+20*Point,0,0,Ask+20*Point+TP*Point,"buy start",0001,0,Green);
firstupperdown=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Bid+20*Point,0,0,Bid+20*Point-TP*Point,"SELL start",0001,0,Green);
Aha, i jeszcze jedno, dało by się przerobić tą funkcję tak aby obliczało oddzielnie ile jest buylimit, buystop, selllimit i sellstop?
wielkie dzięki za odpowiedź...
dalej - no oczywiscie to autor decyduje w jakiej odleglosci ma byc ustawiony TS, wiec byc moze umieszczanie go w symetrycznej odleglosci w gore jak rowniez i w dol od wartosci Bid jest w tym przypadku celowe - ja jednak umieszczalbym je w odleglosci od Bid lub Ask - w zaleznosci od tego czy jest w gore czy w dol.... bo w ten sposob jak ty to zrobiles, to roznica TP w gore i w dol wynosi chyba 2*spread....
mysle, ze po prostu przekopiowales ta druga linie i zmieniles tylko znaki....
a o zamienienu Bid i Ask zapomniales
podobnie jak i o zmianie koloru ....
nie odbierz tego jako czepianie sie - ale skoro juz cos zamieszczasz, to postaraj sie troche wiecej.
Dziękuję za wskazanie błędów - funkcja o dziwo działa (pomimo braku wspomnianego argumentu)... Kod wrzuciłem z myślą o początkujących użytkownikach, którzy poszukują rozwiązania problemu z TS... Następnym razem obiecują się poprawić
mysle, ze funkcja ci dziala, ale trailuje tylko jedna pozycje:
parametry tak wpisane beda dzialaly, poniewaz funkcja OrderSelect() wymaga tylko 2 parametrow a trzeci jest domyslny.
Ty - wpisales tylko drugi i trzeci w tym wypadku OrderSelect() bierze sobie parametr: SELECT_BY_POS jako 'index', a opcjonalny; MODE_TRADES jako 'select'.
Funkcja dziala, bo tak na prawde wpisales: