Zlecenie oczekujące + modyfikacja

O jezykach programowania w platformach i nie tylko.
Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Zlecenie oczekujące + modyfikacja

Nieprzeczytany post autor: Kris82 »

Witam, mam taki delikatny problem z zleceniem oczekującym. Jedno się wykonuje ale po zamknięciu nie otwiera się następne i właśnie nie wiem w czym tkwi problem. Drugą kwestją jest modyfika tego zlecenie jeżeli nie zostanie wykonane w ciągu trwanie jednej świecy. Mniejwiencej wiem jak poradzić sobie z TP i SL ale chodz mi o to aby też co świece modyfikował poziom otwarcia zlecenia. Może mnie ktoś naprowadzić na trop jak to moge zrobić?

Kod: Zaznacz cały

extern double      Lot = 0.01;
extern int        MAXK = 1;
extern int        MAXS = 1;

extern double Zysk = 20;
extern double Strata = 100;
extern double dystans = 30;



int OTWARTE_BUY;
int OTWARTE_SELL;
int OTWARTE_BUYSTOP;
int OTWARTE_SELLLIMIT;


int init()
  {
 

    

   return(0);
   
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int i;
  int zleceniek;
  int zlecenies;
  double odleglosc;
  double W,TP,SL;
  
    zlecenia();
   {
   W = Close[1];
   odleglosc = W + dystans*Point;
   TP = odleglosc + Zysk*Point;
   SL = odleglosc - Strata*Point;
   
   if (OTWARTE_BUYSTOP == 0)
      
      {
      
      
      zleceniek = OrderSend(Symbol(),4,Lot,odleglosc,2,SL,TP,"",0);
      }
   }
   
   return(0);
}

void zlecenia()
{
 int wszystkie_zlecenia = OrdersTotal();
  for(int p=0;p<wszystkie_zlecenia;p++)
  {
   if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) 
   {
     if( OrderType() == OP_BUYSTOP  && OrderSymbol() == Symbol())
         {
            OTWARTE_BUYSTOP++;
         }    
   }
  }
}

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Re: Zlecenie oczekujące + modyfikacja

Nieprzeczytany post autor: green7 »

To, że drugie się nie otwiera to nic dziwnego. W twoim kodzie otwierasz zlecenie tylko jeśli zmienna otwarte_buystops == 0.
A po otwarciu pierwszego zlecenia zwiększasz tą zmienną właściwie do nieskonczoności za każdym wywołaniem procedury zlecenia. Jeśli dodasz zerowanie tej zmiennej na początku procedury zlecenia to powinno to działać jak chcesz.
Green
Obrazek
Obrazek

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Re: Zlecenie oczekujące + modyfikacja

Nieprzeczytany post autor: Kris82 »

Wymyśliłem takie coś, ale dalej pojawiają się dziwne rzeczy :(
Już nie mam pojęcia jak to ugryść.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                        15pip.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double      Lot = 0.01;
extern int        MAXK = 1;
extern int        MAXS = 1;

extern double Zysk = 5;
extern double Strata = 100;
extern double dystans = 20;



int OTWARTE_BUY;
int OTWARTE_SELL;
int OTWARTE_BUYSTOP;
int OTWARTE_SELLLIMIT;


int init()
  {
 

    

   return(0);
   
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int i;
  int zleceniek;
  int zlecenies;
  double odleglosc;
  double W,TP,SL;
  
  
    zlecenia();
   {
   W = Close[1];
   odleglosc = W + dystans*Point;
   TP = odleglosc + Zysk*Point;
   SL = odleglosc - Strata*Point;
   
  if(OTWARTE_BUYSTOP > 0)
   {
   skasuj();
   }
   
   if (OTWARTE_BUYSTOP == 0)
      
      {
      
      
      zleceniek = OrderSend(Symbol(),4,Lot,odleglosc,2,SL,TP,"",0);
      }
   }
   
   return(0);
}

void zlecenia()
{
 int wszystkie_zlecenia = OrdersTotal();
  for(int p=0;p<wszystkie_zlecenia;p++)
  {
   if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES)) 
   {
     if( OrderType() == OP_BUYSTOP  && OrderSymbol() == Symbol())
         {
            OTWARTE_BUYSTOP = 1;
         }    
   }
  }
 
}


void skasuj()
{
int cnt, total;
total=OrdersTotal();
  for(cnt=total-1;cnt>=0;cnt--)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderType()==OP_BUY)
      {
            OTWARTE_BUYSTOP = 0;
            }
         }
}

ODPOWIEDZ