zdefiniowanie wartości profit i lost

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Chciałbym, aby moje EA zamykało zlecenie na niskim TP i niskim SL. Dodam, że niższym niż pozwala na to broker. Zastosowalem coś takiego :

Kod: Zaznacz cały

extern int    profit       = 2;
extern int    lost         = 5;
///////////////////////////////////////////
 if (total(OP_BUY)>0)ZamknijBuy();
 if (total(OP_SELL)>0)ZamknijSell();
//////////////////////////////////////////////////////////////
void ZamknijBuy() 
{      
   int i; 
    
   for (i = 0; i < OrdersTotal(); i++) 
   { 
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
      { 
         if (OrderType() == OP_BUY) 
          if((Bid>=(OrderOpenPrice()+(profit*Point)))||(Bid<=(OrderOpenPrice()-(lost*Point)))) 
           { OrderClose(OrderTicket(), OrderLots(), Bid,2, Aqua); 
         } }
      } 
   }  

void ZamknijSell() 
{      
   int i; 
    
   for (i = 0; i < OrdersTotal(); i++) 
   { 
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
      { 
         if (OrderType() == OP_SELL) 
         if((Ask<=(OrderOpenPrice()-(profit*Point)))||(Ask>=(OrderOpenPrice()+(lost*Point)))) 
         { OrderClose(OrderTicket(), OrderLots(), Ask,2, Magenta); 
         } }
      } 
   }
Wszystko jest OK. Teraz mam problem, ponieważ próbuję zastosować profit o wartości połowy poprzedniej świecy.
Próbuję tak :

Kod: Zaznacz cały

void ZamknijBuy() 
{ 
double profit1 = ((Close[1]-Open[1])/2);     
   int i; 
    
   for (i = 0; i < OrdersTotal(); i++) 
   { 
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
      { 
         if (OrderType() == OP_BUY) 
          if((Bid>=(OrderOpenPrice()+profit1))||(Bid<=(OrderOpenPrice()-(lost*Point)))) 
           { OrderClose(OrderTicket(), OrderLots(), Bid,2, Aqua); 
         } }
      } 
   }  

void ZamknijSell() 
{
double profit2 = ((Open[1]-Close[1])/2);      
   int i; 
    
   for (i = 0; i < OrdersTotal(); i++) 
   { 
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
      { 
         if (OrderType() == OP_SELL) 
         if((Ask<=(OrderOpenPrice()-profit2))||(Ask>=(OrderOpenPrice()+(lost*Point)))) 
         { OrderClose(OrderTicket(), OrderLots(), Ask,2, Magenta); 
         } }
      } 
   }
I nie działa. Nie dośc, że robi jakieś cuda, zamyka jak chce, to jeszcze lost też przestało zamykać wtedy kiedy trzeba.
Powidzcie mi : czy wogóle w funkcji "void" mogę wpisywać coś w rodzaju Close[1] czy Open[2] ?

Dodano po 26 minutach:

Już wiem. Po otwarciu zlecenia mija kilka świec i ta wartość jest już inna niż w momencia otwarcia. Bywa nawet, że Open - Close wychodzi ujemne i dlatego zamyka na minusie.
W takim razie zmieniam pytanie :
Jak zrobić, żeby wartość "profit" była zczytywana i zapamietywana w momencie skaładania zlecenia i z taka wartością zamykało zlecenie.
Solą życia jest kasa.

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

Zastosuj zmienną static.
Pieniądze rosną na drzewie cierpliwości.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

Już wiem. Po otwarciu zlecenia mija kilka świec i ta wartość jest już inna niż w momencia otwarcia. Bywa nawet, że Open - Close wychodzi ujemne i dlatego zamyka na minusie.
No wlasnie :) (juz mialem pisac a dopiero doczytalem)

Co do minusow to oczywiscie funkcja MathAbs.


Zastosuj zmienną static.
Wszyscy tylko te static i static. A jak bedzie otwartych wiecej niz jedna transakcja?



personov pisze:k zrobić, żeby wartość "profit" była zczytywana i zapamietywana w momencie skaładania zlecenia i z taka wartością zamykało zlecenie.
Masz kilka opcji.
1. Niech beda te static, gdy otwierasz tylko po jednej buy i sell , zapamietujesz przy otwarciu pozycji.
2. Mozesz oczywiscie tez zapisac ta wartosc w komentarzu (kiepska koncepcja, ale jakas ;) ) a pozniej je odczytywac i konwertowac do liczby przy kazdej transakcji
3. No i mozesz stworzyc ladna tablice z ticketami i wartosciami ktore chcesz zapamietac.

ODPOWIEDZ