Prosba o pomoc w napisaniu prostego if-a

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Prosba o pomoc w napisaniu prostego if-a

Nieprzeczytany post autor: enjoy_xx »

Witam, próbuje napisać kod, aby zautoamtyzowac swoją strategie na inwestowanie i potrzebuje małej pomocy a mianowicie:

Moja strategia ogranicza mnie do posiadania maksymalnie tylko jednej otwartej pozycji (zabezpiecza mi to funkcja OrdersTotal()). Aby otworzyć kolejną, otwarta pozycja musi zakończyć sie SL albo TP (nigdy nie zamykam ich przez OrderClose())

Moja prośba jest następująca. Podpowie mi ktoś jak poprzez prostego if-a znaleźć moment, w którym otwarta pozycja zamknęła sie SL || TP ?

Za wszelka pomoc z góry pięknie dziękuje.
Obrazek

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

Nieprzeczytany post autor: Tig3r »

enjoy_xx pisze:Moja prośba jest następująca. Podpowie mi ktoś jak poprzez prostego if-a znaleźć moment, w którym otwarta pozycja zamknęła sie SL || TP ?
Np tak:

w start:

Kod: Zaznacz cały

static int ostatnioPozycji=0;
int terazPozycji=OrdersTotal();

if(ostatnioPozycji>terazPozycji)
{
//.. zamknieto pozycje
}
ostatnioPozycji=terazPozycji;


Zamiast OrdersTotal() radziłbym używać jakiejś własnej funkcji (pełno tu na forum) które uwzględniają transakcje tylko danego EA (sprawdzają magic i symbol):
http://www.forex.nawigator.biz/dyskusje ... php?t=6208
http://www.forex.nawigator.biz/dyskusje ... 7&start=10
http://www.forex.nawigator.biz/dyskusje ... 5&start=10
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

Dziekuje za szybka odpowiedz.
Ale troszke niezrozumiale napisalem. Chodzi mi o takiego ifa zebym wiedzial czy pozycja zakonczyla sie przez SL czy TP. Tzn jak zakonczyla sie tp to nic dalej nie rob ale jak zamknela sie sl to musze otworzyc odrazu nastepna.

Przepraszam za brak polskich znakow, pisze z androida.
Obrazek

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

Nieprzeczytany post autor: Tig3r »

enjoy_xx pisze:Chodzi mi o takiego ifa zebym wiedzial czy pozycja zakonczyla sie przez SL czy TP.
Jeśli zakładasz że tylko tak zamykasz pozycje (tylko przez TP czy SL - jak podałeś) to powyższa funkcja spełnia to założenie - rozpoznaje moment zamknięcia pozycji.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

A jak odroznic czy zakonczyla sie sl czy tp. Wstawic w warunek && Bid == sl?
Obrazek

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

Nieprzeczytany post autor: Tig3r »

enjoy_xx pisze:A jak odroznic czy zakonczyla sie sl czy tp. Wstawic w warunek && Bid == sl?
Ale co chcesz odróżniać jak nie robisz nic na transakcjach? Koncepcji jest kilka jeśli chcesz sprawdzić czy zamknęło się na TP czy na SL.

Możesz np zapamiętywać wartość kapitały, a najbardziej uniwersalne byłoby przejrzenie historii transakcji, wyszukanie ostatniej i sprawdzenie OrderProfit()

Kod: Zaznacz cały

static int ostatnioPozycji=0;
int terazPozycji=OrdersTotal();

if(ostatnioPozycji>terazPozycji)
{ 
// zamknieto pozycje sprawdzanie czy TP czy SL
   bool first=true;
   int lastZysk=0;
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(!OrderSelect(i,SELECT_BY_TICKET,MODE_HISTORY)) break;
      
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
      {
         if(first) 
         {
            datetime data=OrderCloseTime();
            first=false;
            lastZysk=OrderProfit();
         }
         if(OrderCloseTime()>data)
         {
            data=OrderCloseTime();
            lastZysk=OrderProfit();
         }
      }
   }
   if(lastZysk>0)
   {
      // zamknieto na TP
   }
   if(lastZysk<0)
   {
      // zamknieto na SL
   }
}
ostatnioPozycji=terazPozycji; 
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

MAGICMA nie zdefiniowane. Nie mialem przyjemnosci sie tym bawic, podpowiesz jak ja zdefiniowac?
Obrazek

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

Nieprzeczytany post autor: Tig3r »

można tak

Kod: Zaznacz cały

int MAGICMA =0;
Ogólnie to nr po którym rozpoznajesz swoje trady (dodajesz do funckji wysyłania zlecenia i sprawdzania. Ale skoro go nie używasz to ustaw go na 0 (taki jest domyślny).
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

Skopiowalem calosc do pliku i dopisalem deklaracje zmiennej magic hym... Niestety po zamknieciu pozycji na sl lub tp funkcja if nie dziala.
Obrazek

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

A może inaczej. W momencie otwierania pozycji zapamiętuj cenę. Jeśli liczba transakcji wyniesie 0, a cena Bid jest powyżej tej zapamietanej to oznacza, że bylo TP, jak poniżej to SL. Dla transakcji SELL odwrotnie.

Kod: Zaznacz cały

double cenaB = 0;
double cenaS = 0;

void start()
if(...warunki dla BUY){Open_BUY;cenaB=Bid;}
if(...warunki dla SELL){Open_SELL;cenaS=Bid;}
if(total(OP_BUY)==0&&Bid>cenaB)...//zaliczył TP
if(total(OP_BUY)==0&&Bid<cenaB)...//zaliczył SL
if(total(OP_SELL)==0&&Bid<cenaS)...//zaliczył TP
if(total(OP_SELL)==0&&Bid>cenaS)...//zaliczył SL

////////////////////////////////////////////////////////////////////////////////////////
int total(int cmd)
{int sum=0;
 for(int i=0;i<=OrdersTotal();i++)
 {OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if(OrderSymbol()==Symbol()&&cmd==OrderType()) sum++;
 }return(sum);} 
Solą życia jest kasa.

ODPOWIEDZ