Otwieranie drugiej pozycji (przeciwstawnej)

O jezykach programowania w platformach i nie tylko.
tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Otwieranie drugiej pozycji (przeciwstawnej)

Nieprzeczytany post autor: tmkk90 »

Witam, jak mozna zapisac ponizszy warunek:

Jezeli mam otwarta pozycje (np, dluga) i w czasie jej 'trwania' pojawia sie sygnal do otwarcia pozycji krotkiej chcialbym aby nie zamykajac pozycji dlugiej otworzyla sie krotka i aby te 2 pozycje chodzily az osiagna swoje warunki zamkniecia.

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

Nieprzeczytany post autor: Tig3r »

a co za problem?
po prostu ślesz zlecenie przeciwne i już, tak samo się to robi jak normalnie
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

Problem jest w tym ze mam to wszystko zapisane (kiedy ma otwierac normalne zlecenie i przecwine tez) tylko te przeciwne nei chce sie otworzyc :/

Moze trzeba cos zmienic w tej czesci ktora sprawdza czy sa otwarte jakies pozycje?

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|Oblicza czy są otwarte jakieś pozycje                             |
//+------------------------------------------------------------------+

int CalculateCurrentOrders(string symbol)
{
int buys=0, sells=0;
for (int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
if(buys>0) return (buys);
else return (-sells);
}
 

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

Nieprzeczytany post autor: Tig3r »

Ta funkcja jest zła, jeśli będziesz miał i sell i buy to Ci zwróci tylko BUY - no chyba że Ci o to chodziło, pozatym nie bierze pod uwagę symbolu który dostaje w parametrze i tu wystarczy zmodyfikować jedną linię na:

Kod: Zaznacz cały

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false || OrderSymbol()!=symbol) break;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

to jak nalezy to zmienic zeby nie zwracalo tylko buy?

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

Nieprzeczytany post autor: Tig3r »

tmkk90 pisze:to jak nalezy to zmienic zeby nie zwracalo tylko buy?
albo suma Buy i Sell razem,
albo dodtkowy parametr do funkcji musisz przekazywać który powie czy chcesz BUY, SELL czy razem (razem czyli BUY-SELL)

Ja to robię tak:

Kod: Zaznacz cały

int IleOtwartychPozycji(int kierunek)
{
   int Sell, Buy, All;
   
   for (int i = 0; i < OrdersTotal(); i++)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA)
         {
            All++;
            if (OrderType() == OP_BUY) Buy++;
            if (OrderType() == OP_SELL) Sell++;
         }
      }
   }
   
   switch(kierunek)
   {
   case -1: return(Sell);
   case 0: return(All);
   case 1: return(Buy);
   }
}
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

yhymm... tylko wiesz co... bo jest teraz tak problem, ze jak zrobilem to tak jak mowisz, to otwiera mi jednoczesnie po 2-3 pozycje (np. 2 pozycje kupna) ;/

Jeszcze chcialbym cos dodac to mojego pierwszego pytania apropo otwierania 2 pozycji w przeciwna strone.

Sprawa wyglada tak, ze prawie sobie z tym poradzilem, a dlatego 'prawie' gdyz jezeli mam otwarta pozycje krotka, to strategia dziala tak jak chce (czyli jezeli pojawia sie sygnal do otwarcia dlugiej otwiera wtedy dluga). Problem pojawia sie gdy jako pierwsza otworzy sie pozycja dluga, poniewaz wtedy gdy jest sygnal do otwarcia pozycji przeciwnej to nic sie nie dzieje... :/

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

Nieprzeczytany post autor: Tig3r »

masz funkcje powyżej sprawdzasz:

Kod: Zaznacz cały

if(IleOtwartychPozycji(1) ==0)
{
// otwórz buy
}

if(IleOtwartychPozycji(-1) ==0)
{
// otwórz sell
}
i tyle żadnej filozofii - pozwala otworzyć tylko jedno zlecenie buy i sell
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

Otwiera jedno :) jednak nie zalatwilo to mojego problemu gdy jako pierwsza otwiera sie pozycja dluga :/

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

Nieprzeczytany post autor: Tig3r »

tmkk90 pisze:Otwiera jedno Smile jednak nie zalatwilo to mojego problemu gdy jako pierwsza otwiera sie pozycja dluga n
Naprawdę nie wiem o co Ci chodzi.. Chcesz aby pierwsza pojawiała się krótka to:

Kod: Zaznacz cały

if(IleOtwartychPozycji(1) ==0 && IleOtwartychPozycji(-1) >0)
{
// otwórz buy
}

if(IleOtwartychPozycji(-1) ==0)
{
// otwórz sell
}
trochę trzeba włączyć myślenie
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

ODPOWIEDZ