Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Sobiesław
Bywalec
Bywalec
Posty: 20
Rejestracja: 15 maja 2015, 12:29

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Sobiesław »

Taki mam problem:
potrzebuję czasem sprawdzić ceny instrumentów z różnych słupków i różnych TF z poziomu EA odpalonego na jednym instrumencie,
diagnostycznie sprawdzam czas słupka:

Kod: Zaznacz cały

iTime(symbols[iter_res],period,0)
jednak jak zauważyłem czasem pobiera mi dane w taki sposób jak by wykres nie był pobrany/zaktualizowany czyli przy shift =0(TF=5M) wyskakuje mi data z przed 3 godzin na przykład, analogicznie są błędy przy wywołaniu np iOpen()..

rozwiązaniem tego problemu było by np pobranie wykresu i oczekiwanie:

Kod: Zaznacz cały

while(iTime(symbols[iter_res],period,0)+60<=TimeCurrent())
{
                              Print("niealtualny czas " + symbols[iter_res] + "ost słupek: " + TimeToStr(iTime(symbols[iter_res],period,0)) + " aktualny czas: " + TimeCurrent() + " aktualna cena: " + MarketInfo(symbols[iter_res],MODE_ASK));
                              Sleep(100);
                              //???Pobieranie????//
}
jednak nie wiem jak to zrobić, wywołanie np iOpen(), lub MarketInfo() niestety nie inicjuje aktualizacji...

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pierz Andrzej »

W pętli wstaw Print lub Comment

Kod: Zaznacz cały

iTime(symbols[iter_res],period,0)
i

Kod: Zaznacz cały

RefreshRates()

z resztą samo RefreshRates powinno wystarczyć

pamiętaj też że iTime zwraca czas otwarcia słupka a TimeCurrent() aktualny czas brokera więc to rozwiązanie

Kod: Zaznacz cały

while(iTime(symbols[iter_res],period,0)+60<=TimeCurrent())
nie przyniesie oczekiwanego działania , raczej zrobil by to tak :

Kod: Zaznacz cały

while(TimeCurrent() - iTime(symbols[iter_res],period,0) > period * 60)
jeżeli nic się nie zmieniło w MT4 ważne też jest by para dla której ma zostać pobrana informacja była w oknie RYNEK
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Sobiesław
Bywalec
Bywalec
Posty: 20
Rejestracja: 15 maja 2015, 12:29

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Sobiesław »

z RefreshRates() to był dobry trop, dziękuję :564:

Rajko
Uczestnik
Uczestnik
Posty: 1
Rejestracja: 03 wrz 2015, 15:39

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Rajko »

Witam
Przy pomocy Expert Builder udało mi się stworzyć mój pierwszy automat, chciałbym tylko wprowadzić jeszcze małą poprawkę. Chodzi o to aby przestawiać SL i TP w chwili gdy cena będzie się zbliżać do TP. SL na cenę otwarcja a TP w odległości dwukrotnej od ceny otwarcia. Proszę o pomoc.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Kasia20
Bywalec
Bywalec
Posty: 7
Rejestracja: 15 wrz 2015, 19:11

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Kasia20 »

Witam,
mam problem z napisaniem własnego EA. Moim celem jest otwieranie pozycji długiej, kiedy wskaźnik zaczyna rosnąć i na odwrót. Próbowałam stworzyć to na zasadzie, że jeżeli wartość wskaźnika z danego okresu jest większa od wartości wskaźnika z okresu poprzedniego, wtedy BUY. Wtedy jednak kupowanie odbywałoby się również przez kolejne okresy. Czy jest jakaś dobra osoba, która pomogłaby mi rozwiązać ten problem lub też widziała podobny EA, żebym mogła sama do tego dojść? Dodam, iż EA próbowałam robić w "Expert Advisor Builder for MetaTrader 4".
Kasia

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pierz Andrzej »

Witam Kasiu .
Kierunek obrałaś dobry ale oprócz sprawdzenia dwuch ostatnich wartości sprawdz jeszcze wartosci wczesniejsze.

teraz robisz to mniej wiecej tak

Kod: Zaznacz cały

if (value1 > value2) otwórz BUY
if (value1 < value2) otwórz SELL
ale żeby wyłapać początek wzrostów/spadków należy wyłapać moment zmiany kierunku

Kod: Zaznacz cały

if (value1 > value2 && value3 > value2) otwórz BUY
if (value1 < value2 && value3 < value2) otwórz SELL
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Kasia20
Bywalec
Bywalec
Posty: 7
Rejestracja: 15 wrz 2015, 19:11

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Kasia20 »

Dziękuję bardzo za szybką i pomocną odpowiedź. Życzę sukcesów na FX:)
Kasia

Kasia20
Bywalec
Bywalec
Posty: 7
Rejestracja: 15 wrz 2015, 19:11

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Kasia20 »

Witam,
mam krótkie pytanko odnośnie pisania EA, mianowicie czy istnieje formuła opisująca przesunięcie wskaźnika o n okresów w mql? Pamiętam, że w afl było to np Ref(a,n), gdzie a to nasza zmienna (np EMA20) zaś n- przesunięcie (-1 to przesunięcie o jeden okres wstecz itd).
Kasia

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pierz Andrzej »

Kod: Zaznacz cały

double  iMA(
   string       symbol,           // symbol
   int          timeframe,        // timeframe
   int          ma_period,        // MA averaging period
   int          ma_shift,         // MA shift
   int          ma_method,        // averaging method
   int          applied_price,    // applied price
   int          shift             // shift
   );
akurat MA ma opcje przesunięcia przy innych wskaźnikach korzystaj z ostatniej zmiennej shift .
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
grey
Gaduła
Gaduła
Posty: 114
Rejestracja: 22 lut 2015, 14:18

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: grey »

Kasia20 pisze:Witam,
mam problem z napisaniem własnego EA. Moim celem jest otwieranie pozycji długiej, kiedy wskaźnik zaczyna rosnąć i na odwrót. Próbowałam stworzyć to na zasadzie, że jeżeli wartość wskaźnika z danego okresu jest większa od wartości wskaźnika z okresu poprzedniego, wtedy BUY. Wtedy jednak kupowanie odbywałoby się również przez kolejne okresy. Czy jest jakaś dobra osoba, która pomogłaby mi rozwiązać ten problem lub też widziała podobny EA, żebym mogła sama do tego dojść? Dodam, iż EA próbowałam robić w "Expert Advisor Builder for MetaTrader 4".
Kasia
Można to zrobić na kilka sposobów. Na przykład w przypadku iMA skorzystać jak napisał Andrzej z "shift". Dla innych wskaźników korzystamy z funkcji iCustom tylko w samym wskaźniku trzeba stworzyć bufory i na nich operować.

Kod: Zaznacz cały

http://docs.mql4.com/indicators/icustom
Można stworzyć obiekty graficzne (jakieś strzałki), gdy określone warunki są spełnione w wskaźniku a następnie EA odczytuje czy owe obiekty zostały stworzone. Jeżeli tak to otwiera określone zlecenie. Przykład współpracy EA i wskaźnika

IND

Kod: Zaznacz cały

if( określone warunki )
{
    // ARROW_BUY
    ObjectDelete("ARROW_BUY");
    ObjectCreate("ARROW_BUY", OBJ_ARROW, 0, iTime(Symbol(),PERIOD_CURRENT,SHIFT_BUY), Low[SHIFT_BUY]);
    ObjectSet("ARROW_BUY",OBJPROP_WIDTH,4);
    ObjectSet("ARROW_BUY",OBJPROP_COLOR,DarkOrange);
}
EA

Kod: Zaznacz cały

void OnTick()
{
 // BUY
 if(!ObjectFind(0,"ARROW_BUY") && NewBar() == true)
 {
  if(!ObjectFind("TP_BUY"))
  {
   TP_BUY = ObjectGetDouble(0,"TP_BUY",OBJPROP_PRICE,0);
  }
  
  if(!ObjectFind("SL_BUY"))
  {
   SL_BUY = ObjectGetDouble(0,"SL_BUY",OBJPROP_PRICE,0);
  }
  
  bool BUY = OrderSend(NULL,OP_BUY,LOT,Ask,3,SL_BUY,TP_BUY,NULL,MAGIC,0,clrRed);
 }
}

ODPOWIEDZ