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

Nieprzeczytany post autor: tmkk90 »

Nie chodzi mi o to aby pierwsza otwierala sie pozycja krotka. Sprobuje to jakos jasniej napisac bo moze faktycznie zbyt pokretnie wczesniej tlumaczylem.

Chodzi mi o takie cos:

1. Pojawia sie sygnal do otwarcia pozycji krotkiej/dlugiej -> otwiera sie pozycja krotka/dluga

2a. Mamy otwarta pozycje krotka (ktora w moim przypadku ma sie zamykac na danym take profit / stop loss) jednak zanim owa pozycja osiagnie take profit/stop loss i sie zamknie, pojawia sie sygnal do otwarcia pozycji w przeciwna strone ( dlugiej) i chcialbym zeby ta wlasnie pozycja (dluga) sie otworzyla.

2b. Mam otwarta pozycje dluga (rowniez ma sie zamykac na take profit /stop loss) i rowniez jak w pkt. powyzej jezeli przed zamknieciem pozycji (na TP/SL) pojawi sie sygnal do otwarcia w przeciwna strone (czyli w tym wypadku krotkiej) chcialbym aby otworzylo krotka

I moj problem odnosi sie tylko do pkt 2b. poniewaz nie otwiera mi wtedy pozycji przeciwnej :/

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

Nieprzeczytany post autor: Tig3r »

W niczym nie powinno być problemu. Otwierasz i tyle, a czemu Ci nie działa to coś masz źle w kodzie skoro 2a działa.
======================================================
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 mam prosbe, ze jezeli ktos mialby chwilke niech zerknie na ten kod (to jest 1wsza wersja jeszcze przed zmianami od Tig3ra)

Kod: Zaznacz cały

extern double Lots               = 0.1;


extern double MovingPeriod       = 25;
extern double MovingShift        = 15;


extern double TakeProfit         = 30;
extern double StopLoss           = 30;




//+------------------------------------------------------------------+
//|Oblicza czy są otwarte jakieś pozycje                             |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0, sells=0, all=0;
for (int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false || OrderSymbol()!=symbol) break; 
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
if(buys>0) return (buys);
else return (-sells);
}

//+------------------------------------------------------------------+
//| Warunki Otwarcia                                                 |
//+------------------------------------------------------------------+

void CheckForOpen()
{
double ma;
int res;

ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);


if (Close[1]<ma && Open[1]>ma) 
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,0,Red);
return;
}
 
if (Close[1]>ma && Open[1]<ma) 
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Blue);
return;
}
}





void CheckForOpen2() // tu sa warunki otwarcia drugiej pozycji (przeciwnej)
{
double ma;
int res2;

ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);


if (OrderType()==OP_SELL && Close[1]>ma && Open[1]<ma)
{
res2=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Blue);
return;
}


if (OrderType()==OP_BUY && Close[1]<ma && Open[1]>ma)
{
res2=OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Blue);
return;
}
}

//+------------------------------------------------------------------+
//|Warunki zamknięcia                                                     |
//+------------------------------------------------------------------+

// zamkniecie tylko na TP/SL

void CheckForClose()
{
double ma;

ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

for(int i=0;i<OrdersTotal();i++)
     {
       if(OrderType()==OP_BUY)
        {
        
         if(OrderTakeProfit()==TakeProfit*Point || OrderStopLoss()==StopLoss*Point) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         
         Print(OrderTakeProfit());
         Print(OrderStopLoss());
         break;
        }
      if(OrderType()==OP_SELL)
        {
        
         if(OrderTakeProfit()==TakeProfit*Point || OrderStopLoss()==StopLoss*Point) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
        
         Print(OrderTakeProfit());
         Print(OrderStopLoss());
         break;
        }
     }
     }
//+------------------------------------------------------------------+
//| Start function                                                                 |
//+------------------------------------------------------------------+
void start()
  {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) CheckForOpen2();  // nie wiem czy ten zapis jest poprawny, ale chodzilo mi o to, ze jezeli sa otwarte jakies pozycje, to strategia ma szukac otwarcia przeciwnych  pozycji w 'CheckForOpen2()

//---- check for history and trading
   
 if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   
   else                                    CheckForClose();
   
//----
  }

//+------------------------------------------------------------------+

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

Nieprzeczytany post autor: Tig3r »

2 rzeczy które się od razu w oczy rzucają.

1. jak otwierasz zlecenie po ask to musisz SL i TP po Bid i odwrotnie mieć
2. widzę że korzystasz z OrderType(), ale nie posiadasz wcześniej OrderSelect() bez którego OrderType nie działa!

Dodano po 2 minutach:

Kod: Zaznacz cały

if (OrderType()==OP_BUY || OrderType()==OP_SELL) CheckForOpen2();
To jest błędny zapis

Jakbyś miał (z wykorzystaniem mojej funkcji):

Kod: Zaznacz cały

if(IleOtwartychPozycji(0) !=0) CheckForOpen2();
======================================================
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 »

wprowadzilem wszystkie zmiany, ktore mi podpowiedziales i strategia dziala, wielkie dzieki :)

ODPOWIEDZ