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?
Sprawdzanie wartości waluty/indeksu co X słupków
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
Re: Sprawdzanie wartości waluty/indeksu co X słupków
AD1
20 dni wcześniej
100 dni wcześniej
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
20 dni wcześniej
Kod: Zaznacz cały
iClose(Symbol(),PERIOD_D1,20);
Kod: Zaznacz cały
iClose(Symbol(),PERIOD_D1,100);

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
Andrzej Pierz
FOREX-SERVICE
Re: Sprawdzanie wartości waluty/indeksu co X słupków
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? 

- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
Re: Sprawdzanie wartości waluty/indeksu co X słupków
to zrób tak po sprawdzeniu danej wartości zapisz czas świeczki D1
a później sprawdzaj czy od tego czasu minelo 20 swieczek 
jeżeli tak to znowu sprawdź wartość i zapisz czas świeczki 
itd
Kod: Zaznacz cały
datetime time_d1 = iTime(Symbol(),PERIOD_D1,0);

Kod: Zaznacz cały
iBarShift(Symbol(),PERIOD_D1,time_d1);

itd
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE
Re: Sprawdzanie wartości waluty/indeksu co X słupków
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ź
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);
}
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
Re: Sprawdzanie wartości waluty/indeksu co X słupków
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
Andrzej Pierz
FOREX-SERVICE