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?
zamykanie pozycji z EA, warunek
To jest bez sensu..if( (OrderOpenPrice() - (Bid*Point) >(16*Point)) )
Z togo co mi się wydaje chodzi Ci o:
Kod: Zaznacz cały
if((Ask-Bid)/Point>16)

======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
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
nie moze bycif((Ask-Bid)/Point>16)
( 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?
To na instrumencie z wykresu ale jeśli chcesz lecieć po wszyskich instrumentach to np tak:waz pisze:if((Ask-Bid)/Point>16)
to wyjdzie po wyliczeniu spread na danej parze walutowej, cena bid i ask z danej chwili?
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ć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
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?
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
przegladnij moja funkcje do stoploss`u
pozdrawiam
Andrzej PIerz

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()));
}
}
Andrzej PIerz
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE