Otwieranie drugiej pozycji (przeciwstawnej)
Otwieranie drugiej pozycji (przeciwstawnej)
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.
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.
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?

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);
}
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ć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
albo suma Buy i Sell razem,tmkk90 pisze:to jak nalezy to zmienic zeby nie zwracalo tylko buy?
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ć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
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...
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...

masz funkcje powyżej sprawdzasz:
i tyle żadnej filozofii - pozwala otworzyć tylko jedno zlecenie buy i sell
Kod: Zaznacz cały
if(IleOtwartychPozycji(1) ==0)
{
// otwórz buy
}
if(IleOtwartychPozycji(-1) ==0)
{
// otwórz sell
}
======================================================
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ć..
Naprawdę nie wiem o co Ci chodzi.. Chcesz aby pierwsza pojawiała się krótka to:tmkk90 pisze:Otwiera jedno Smile jednak nie zalatwilo to mojego problemu gdy jako pierwsza otwiera sie pozycja dluga n
Kod: Zaznacz cały
if(IleOtwartychPozycji(1) ==0 && IleOtwartychPozycji(-1) >0)
{
// otwórz buy
}
if(IleOtwartychPozycji(-1) ==0)
{
// otwórz sell
}
======================================================
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ć..