Problem z otewieraniem pozycji

O jezykach programowania w platformach i nie tylko.
bzyqe
Bywalec
Bywalec
Posty: 10
Rejestracja: 06 lip 2007, 20:01

Problem z otewieraniem pozycji

Nieprzeczytany post autor: bzyqe »

Witam, moj problem wyglada nastepujaco.

buduje EA. w momencie kiedy warunki buy lub sell sa spelnione otwiera sie odpowiednie zlecenie. zlecenie to ograniczam do pewnego TP lub SL. kiedy zlecenie sie zamyka otwiera sie kolejne gdyz warunki nadal sa spelnione. jednak sygnal juz jest nie aktualny.

jak zrobic aby nie otwieraly sie klolejne zlecenia. chcialbym czekac do zlecenia przeciwnego. co zrobic?

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

Nieprzeczytany post autor: Tig3r »

tak ciężko dodać zmienna informującą o ostatnim kierunku transakcji i warunek sprawdzający przed otwarciem tą zmienną?
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

bzyqe
Bywalec
Bywalec
Posty: 10
Rejestracja: 06 lip 2007, 20:01

Nieprzeczytany post autor: bzyqe »

Tig3r pisze:tak ciężko dodać zmienna informującą o ostatnim kierunku transakcji i warunek sprawdzający przed otwarciem tą zmienną?
Jestem poczatkujacy jakbys tylko mogl napisac jakie funkcje, procedury. moze przkladowy kod.

dzieki

Awatar użytkownika
fxBobi
Gaduła
Gaduła
Posty: 244
Rejestracja: 20 sie 2008, 18:43

Nieprzeczytany post autor: fxBobi »

Więc tak , nie podając gotowego rozwiązania podam pewien sposób .

Tig3r miał chyba to na myśli.

@bzyqe

Najpierw wprowadzasz dwie zmienne ("pisze z głowy" )

Kod: Zaznacz cały

bool BuyS=true;
bool SellS=true;

start
   {
   if(warunek na Buy && BuyS)
      (............)<-Część kodu odpowiedzialna za otworzenie zlecenia)
     //Po wykonaniu zlecenia
     BuyS=false;
     SellS=true;
   }
   if(warunek na Sell && SellS)
      (............)<-Część kodu odpowiedzialna za otworzenie zlecenia)
     //Po wykonaniu zlecenia
     BuyS=true;
     SellS=false;
   }

}


bzyqe
Bywalec
Bywalec
Posty: 10
Rejestracja: 06 lip 2007, 20:01

Nieprzeczytany post autor: bzyqe »

ok, rozumiem co chcesz przekazac.

ale w moim ea po wprowadzeniu tego nie dziala tak jak chce. TP zabiera profit lecz ponownie otwiera zlecenie w tym samym kierunku, gdyz warunki ciagle sa takie same.

Program musi wiedziec iz ostatnie zamkniete zlecenie bylo typu np BUY - wtedy bedzie oczekiwal na sygnal SELL.

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Może prościej by było pokombinować z drugiej strony. Zakładając, że otwierasz pozycje gdy A > B, otwieraj w momencie gdy A przewyższy B. Ale to takie gdybanie, bo nie pokazałeś kodu.

bzyqe
Bywalec
Bywalec
Posty: 10
Rejestracja: 06 lip 2007, 20:01

Nieprzeczytany post autor: bzyqe »

oto kod

Kod: Zaznacz cały

extern int h_open=8;
extern int h_close=20;
extern int magic=19790704;
extern double Lots=0.01;

extern int SL=30;
extern int TP=10;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
double bb_UP,bb_DOWN;
int FTBlue1,FTRed1,FTBlue2,FTRed2;
bool O_BUY, O_SELL;
int h_current;
int ticket;
int order_type,i;

//Custom Indicators 


bb_UP=iCustom(NULL,0,"BBands_Stop_v1_BAR",20,2,0,1);
bb_DOWN=iCustom(NULL,0,"BBands_Stop_v1_BAR",20,2,1,1);
FTBlue1=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,4,8,9,1,1);
FTRed1=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,4,8,9,0,1);
FTBlue2=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,6,13,9,1,1);
FTRed2=iCustom(NULL,0,"FLATTRAND_w_MACD_mtf",15,6,13,9,0,1);

//Chceck Time

h_current=TimeHour(TimeCurrent());

if (h_current>=h_open && h_current<=h_close){

   if (bb_UP>1 && FTBlue1==1 && FTBlue2==1) O_BUY=true;
   if (bb_DOWN>1 && FTRed1==1 && FTRed2==1) O_SELL=true;
                                           }
if (OrdersTotal()<1)

{
//BUY

 if (O_BUY==true) 
 {
 
 ticket=OrderSend(Symbol(), OP_BUY, Lots,Ask,3,Ask-SL*Point,Ask+TP*Point,"BUY",magic+100,0,Green); 
 if(ticket<0)
       {
        Print("OrderSend failed with error #",GetLastError());
        return(0);
       }
           
}

//SELL

 if (O_SELL==true) 
 {

 ticket=OrderSend(Symbol(), OP_SELL, Lots,Bid,3,Bid+SL*Point,Bid-TP*Point,"SELL",magic,0,Red);
 if(ticket<0)
       {
        Print("OrderSend failed with error #",GetLastError());
        return(0);
       }
       
}

}

Comment(bb_UP,",  ",bb_DOWN,"\n",
FTBlue1,",  ",FTRed1,"\n",
FTBlue1,",  ",FTRed1,"\n",
O_BUY,",  ",O_SELL,"\n",
h_current,"\n",


"\nEND OF RAPORT");


//----
   return(0);
  }
//+------------------------------------------------------------------+

Awatar użytkownika
fxBobi
Gaduła
Gaduła
Posty: 244
Rejestracja: 20 sie 2008, 18:43

Nieprzeczytany post autor: fxBobi »

@bzyqe

Więc tak nie będę ingerował w twoje EA . Bo to niema sensu . Jak sam nie znajdziesz , to się nie nauczysz :D

Ale za to z wykorzystaniem metody która podałem kilka wątków wyżej , napisałem proste EA.

Algorytm otwiera pozycje w sposób na przemienny(przy użyciu sygnałów ze SMA)Wyjście z pozycji jest za pomocą T/P lub S/L Jeżeli otworzy Buy i go zamknie na T/P to nie otworzy kolejny raz Buy , będzie czekał aż otworzy Sell .etc

Kod: Zaznacz cały

#property copyright ""
#property link      ""
bool Buy=true;
bool Sell=true;
int ticket;

int init()
  {

   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
double sma= iMA(Symbol(),0,25,0,0,0,1);

if (Close[1]>sma && OrdersTotal()<1 && Buy)
   {
   ticket=0;
   for(int i=0;i<=5;i++)
      {
      ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-11*Point,Ask+11*Point,"...",1000,0,Green);
      if (ticket>0)
         {
         break;
         }
      }
   Buy=false;
   Sell=true;
   }
if (Close[1]<sma && OrdersTotal()<1 && Sell)
      {
      ticket=0;
      for(int ii=0;ii<=5;ii++)
         {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,3,Bid+11*Point,Bid-11*Point,"...",1000,0,Green);
         if (ticket>0)
            {
            break;
            }
         }
      Buy=true;
      Sell=false;
      }
   
   Comment("Buy: "+Buy+"/"+"Sell: "+Sell);
   return(0);
  }

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

@bzyqe

Tak jak Ci mówiłem. Teraz wchodzisz na długą gdy wskaźniki mają wartość 1. Jeśli wyskoczysz z rynku, a wskaźniki nadal mają wartość 1 to EA znowu otworzy świeżo zamkniętą pozycję. Sprawdzaj więc nie tylko bieżącą wartość wskaźników, ale też poprzednią i wchodź na rynek przy zmianie wartości. Może nie przy zmianie wartości wszystkich wskaźników, bo może się okazać, że zdarza się b. rzadko, żeby wszystkie jednocześnie zmieniły wartość, ale któregoś wiodącego.

ODPOWIEDZ