zamykanie pozycji z EA, warunek

O jezykach programowania w platformach i nie tylko.
waz
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 12 wrz 2007, 22:52

zamykanie pozycji z EA, warunek

Nieprzeczytany post autor: waz »

Chcialbym aby Ea zamykalo pozycje przy spelnieniu warunku. Taki rodzaj stoploss, zakodowany, nie widoczny w zleceniu tylko w kodzie Ea.
Z listy otwartych zlecen pobierane jest otwarte zlecenie, cena jego otwarcia, nastepnie Ea sprawdza Bid lub Ask, jesli roznica jest < lub > niz zalozona wartosc w pipsach wowaczas pozycja zostanie zamknieta lub nie.

Ponizej kawałem kodu, ktory wg. mnie powinien aktywowac warunek, prosze o weryfikacje i ewentualna korektę.

if(OrderType()==OP_BUY) {
if( (OrderOpenPrice() - (Bid*Point) >(16*Point)) )

{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit

}



}
if(OrderType()==OP_SELL) {

if ( (OrderOpenPrice() - (Ask*Point) < - (16*Point)) )

{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}


Czyli ma zamknac pozycje gdy kurs bedzie ponizej 16 lub powyzej 16., czy kod jest poprawny?

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

if( (OrderOpenPrice() - (Bid*Point) >(16*Point)) )
To jest bez sensu..
Z togo co mi się wydaje chodzi Ci o:

Kod: Zaznacz cały

if((Ask-Bid)/Point>16)
Nie wiem po co Ci cena zlecenia, poza tym nie widać jak wybierasz zlecenie -> OrderSelect(...
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

waz
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 12 wrz 2007, 22:52

Nieprzeczytany post autor: waz »

Tig3r pisze:Z togo co mi się wydaje chodzi Ci o:
Kod:

if((Ask-Bid)/Point>16)



Nie wiem po co Ci cena zlecenia, poza tym nie widać jak wybierasz zlecenie OrderSelect(...

oczywiscie calosc pwyzszego kodu zlapana jest w petle


for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {

dlaczego

if((Ask-Bid)/Point>16)
nie moze byc

( OrderOpenPrice() - Bid >(6*Point)

gdzie orde openprice, to jakas tam cen zlecenia otworzonego recznie przeze mnie.

Dodano po 3 minutach:
waz pisze:
Tig3r pisze:Z togo co mi się wydaje chodzi Ci o:
Kod:


to co napisales

if((Ask-Bid)/Point>16)

to wyjdzie po wyliczeniu spread na danej parze walutowej, cena bid i ask z danej chwili?

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

waz pisze:if((Ask-Bid)/Point>16)

to wyjdzie po wyliczeniu spread na danej parze walutowej, cena bid i ask z danej chwili?
To na instrumencie z wykresu ale jeśli chcesz lecieć po wszyskich instrumentach to np tak:

Kod: Zaznacz cały

if(MarketInfo(OrderSymbol(), MODE_SPREAD)>16)
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

waz
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 12 wrz 2007, 22:52

Nieprzeczytany post autor: waz »

Tig3r pisze:MarketInfo
Tig3r pisze:Kod:
if(MarketInfo(OrderSymbol(), MODE_SPREAD)>16)

chyba nie rozumiemy sie,. w kodzie chcialbym zmiescic stoplossa, od ceny otwarcia przy np. pozycji buy stopa ustawic np na 16 pipsow.

natomiast "MarketInfo(OrderSymbol(), MODE_SPREAD)" odczyta wartosc spreadu dla danej apry walutowej?

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

przegladnij moja funkcje do stoploss`u ;)

Kod: Zaznacz cały


void hidestoploss(int cmd)
{
   for (int i = OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol() == OrderSymbol() && magicNumber == OrderMagicNumber() && commentEa == OrderComment() && (cmd == OrderType() || cmd == OP_ALL) )
      {
         RefreshRates();
         bool ticket = true;
         double stoploss = hideSl * Point;
         if (hideSl == 0) stoploss = MarketInfo(Symbol(),MODE_STOPLEVEL) * Point;
         if (OrderType() == OP_BUY  && NormalizeDouble(OrderOpenPrice() - Ask - stoploss,Digits) >= 0.0) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
         if (OrderType() == OP_SELL && NormalizeDouble(Bid - OrderOpenPrice() - stoploss,Digits) >= 0.0) ticket = OrderClose(OrderTicket(),OrderLots(),Ask,3,Red );
         if(ticket == false) Print("Error hidestoploss : "+ErrorDescription(GetLastError()));
      }
   }
pozdrawiam
Andrzej PIerz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ