Sprawdzanie wartości waluty/indeksu co X słupków

O jezykach programowania w platformach i nie tylko.
Majfa
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 16 kwie 2013, 23:13

Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Majfa »

Czy może ktoś mi podpowiedzieć jak napisać warunek który sprawdzałby wartość np indeksu co 20 dni czyli porównywałby wartości dzisiejsze np mamy 25 dzien miesiaca z wartosciami z 5 dnia miesiaca a we wszystkie inne dni nie robiłby nic.

i moje drugie pytanie: czy dobrze rozumiem ze mt4 przelicza EA co tick? czyli jeżeli mamy strategię na 1H i minęło od początku trwania 24h to EA nie został przeliczony 24 razy a XXXXX razy?

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Pierz Andrzej »

AD1

20 dni wcześniej

Kod: Zaznacz cały

iClose(Symbol(),PERIOD_D1,20);
100 dni wcześniej

Kod: Zaznacz cały

iClose(Symbol(),PERIOD_D1,100);
itp :)

AD2

tak ko EA wykonywany jest co tick nie co interwał czasowy , co nie znaczy że można napisać tak kod żeby wykonywał sie tylko raz na dany TF ;)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Majfa
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 16 kwie 2013, 23:13

Re: Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Majfa »

niestety stosując: iClose(Symbol(),PERIOD_D1,20) otrzymamy identyczną sytuację jak w przypadku Close[20] na świecach D1. System 23 dnia miesiąca sprawdzi 3 dzień a 24 sprawdzi dzień 4, tak czy inaczej sprawdzając co tick. Chodzi mi o sprawdzanie co 20 dni (~dla uproszczenia miesiąc ma 30) czyli np w styczniu sprawdzimy 5 i 25, w lutym 15, w marcu 5 i 25. W excelu sprawa byłaby prosta, wklejamy formułę co 20dni. Jak taka sprawa wygląda w mqlu? Czy ktoś jest w stanie mi pomóc? :)

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Pierz Andrzej »

to zrób tak po sprawdzeniu danej wartości zapisz czas świeczki D1

Kod: Zaznacz cały

datetime time_d1 = iTime(Symbol(),PERIOD_D1,0);
a później sprawdzaj czy od tego czasu minelo 20 swieczek :)

Kod: Zaznacz cały

iBarShift(Symbol(),PERIOD_D1,time_d1);
jeżeli tak to znowu sprawdź wartość i zapisz czas świeczki :)

itd
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Majfa
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 16 kwie 2013, 23:13

Re: Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Majfa »

Panie Andrzeju,
idąc za Pana radami doszedłem do tego momentu, sprawdzamy datę gdy g=0, dodajemy g=g+1 więc nie wracamy do sprawdzania już tylko liczymy słupki, liczba słupków wynosi 20 - otwieramy pozycję i zerujemy g. Niestety wartość g oscyluje pomiędzy 0 a 1 tego samego dnia oraz nie zlicza słupków przez co nie spełnia warunków otworzenia pozycji :/
jeżeli można proszę o kolejną podpowiedź :)

Kod: Zaznacz cały

//--- input parameters
extern double    x1=1;
extern double    x2=1;
extern int       Lots=1;
extern int       MAGIC=4112013;
int g;

int total;
int ticket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//if(Volume[0]>1) return;
  int i,c;
 
  
  double c1=x1/100;
  double c2=x2/100;
  
  
  if (g==0) 
  {
  datetime time_d1 = iTime(Symbol(),PERIOD_D1,0);
  g=g+1;
  }
  
  c=iBarShift(Symbol(),PERIOD_D1,time_d1);  
  
  
  Print(" czas : ", time_d1);
  Print(" liczba slupkow : ", c);

  double a=iClose(Symbol(),PERIOD_D1,20);
  double b=iClose(Symbol(),PERIOD_D1,1);
  
   if (c==20 && b > a*(1+c1) )
   {  
      
      Print("open data :", time_d1);
      Print("open cena stara :", a);
      Print("open cena nowa x procent :", a*(1+c1));
//----
  total=OrdersTotal();
  if(total<1) 
     {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"strategomat",MAGIC,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
      }
 

            
     }
     
 for(int cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   
          {
       
            if( c==20 && b*(1+c2) < a)
                {
               
      Print("close data :", time_d1);
      Print("close cena stara :", a);
      Print("close cena nowa x procent :", b*(1+c1));
      OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                }
             }      
      }}
//----
   return(0);
  }



Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Sprawdzanie wartości waluty/indeksu co X słupków

Nieprzeczytany post autor: Pierz Andrzej »

zmienna datetime time_d1 powinna być globalna nie lokalna ;)

Kod: Zaznacz cały

datetime time_d1;
int day = -1;

void start()
{
   if(day == -1)
   {
      time_d1 = iTime(Symbol(),PERIOD_D1,0);
   }
   day = iBarShift(Symbol(),PERIOD_D1,time_d1); 
   if (day >= 20)
   {
      day = -1;
      // tutaj Twoje warunki open i close ;)
   }
}
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ