Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
unitra

Nieprzeczytany post autor: unitra »

Kod: Zaznacz cały

if (ld_0 < ld_24) { 
         gda_100[li_32] = ld_16; 
         gda_104[li_32] = ld_8; 
      } else { 
         gda_100[li_32] = ld_8; 
         gda_104[li_32] = ld_16; 
      } 
Przypuszczam, że zależy to od tego w którym buforze jest większa wartość. Ale zaznaczam, że nie wiem do końca jak to naprawdę działa w MQL'u.

Awatar użytkownika
devport
Gaduła
Gaduła
Posty: 148
Rejestracja: 20 mar 2012, 16:29

Nieprzeczytany post autor: devport »

Jak zrobić by skrypt pobierał informacje o świeczce która jest o danej godzinie w ciągu dnia. np. o 15:00 jak pobrać jej dane czyli High, Low, Close... jak ją zmienić? np. kolor... itp.
Wracam po latach przerwy....


Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

Witam. Jestem w trakcie tworzenia EA, który będzie łączył się z IRC'em wysyłając doń różnego rodzaju powiadomienia. O tyle o ile większość koncepcji nie sprawiła mi większego problemu, tak dzisiaj natrafiłem na niewielką przeszkodę związaną z ciągłym generowaniem sygnału i tym samym ciągłym wysyłaniem wiadomości do IRC'a. Przykład poniżej:

Kod: Zaznacz cały

string value = DoubleToStr(TimeHour(TimeCurrent()+3600),2);
   
   if(value == "9.00"){
   message("Jest godzina 9.00 - zrób raport");
   }
   
   if(value == "12.00"){
   message("Jest godzina 12.00 - zrób raport");
   }
   
   if(value == "15.00"){
   message("Jest godzina 15.00 - zrób raport");
   }
Dość prosta rzecz, mająca za zadanie wysyłać info, że jest dana godzina więc trader powinien zrobić raport. Problem polega na tym, że sygnał ten generowany będzie przez całą godzinę. Pytanie w związku z tym brzmi, jak to opisać, aby to był tylko pojedynczy sygnał - jest godzina 9.00, wyślij wiadomość tylko raz i koniec. Nadmienię, że sleep w tym przypadku odpada, gdyż cały kod musi być odświeżany co chwile aby utrzymywać połączenie z serwerem IRC'a.

Z góry dziękuję za odpowiedź.
Szymon

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

Nieprzeczytany post autor: Tig3r »

Lite

sprowadzaj wszystko do datetime i sprawdzaj pełną godzinę (musisz mieć też na uwadze że wszystko jest wykonywane co tick a ten może przyjść nie w czas a więc należy się przed tym uchronić stosując warunek nierówności czas >= XXX oraz dodatkowo jakaś zmienna informująca np na której świecy był wysłany sygnał aby nie wysyłała ich cały czas - tzn jak minie godzina sygnału - wysyła komunikat i pod zmienną podstawia czas wysłania dając znać aby nie wysyłać ponownie).

Byłoby coś takiego (nie wiem czy nie pomieszałem komendy konwertującej string na czas a nie mam jak sprawdzić):

Kod: Zaznacz cały

static int dzien_wyslania;
if(TimeCurrent()>=StrToTime('9:00') && dzien_wyslania<>Day())
{
message(..);
dzien_wyslania=Day();
}
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

Dzieki wielkie. Teraz jest OK. Tylko teraz mam pytanie co w przypadku powiadomień o sygnałach, które de facto nie pojawiają się raz na dzień. A jak nadam im statica oraz posłużę się podobną metodologią jak opisałeś, to wykluczy mi się sygnał.

Generalnie chodzi o to, aby wysłana była do irca wiadomość o wybiciu się kursu z korekty. Zrobiłem to na zasadzie wskaźnika Donchian - jeśli donchian ma nowe extremum wówczas wiadomo, że poszedł impuls oraz że cena wybiła nowy szczyt, wybila dotychczasową korektę:

Kod: Zaznacz cały

string BuySignalEU  = "false";
string SellSignalEU = "false";

//(założenia związane z czy jest nowe extremum donchiana?)
if(DonchianUp3EU==DonchianUp2EU && DonchianUp2EU==DonchianUp1EU && DonchianUp0EU>DonchianUp1EU){

BuySignalEU = "true";//(jeśli jest to puść info)
message("Nowe maksimum na EURUSD. Sprawdź pozycję");
Sleep(1800000);
}
   
   if(DonchianLow3EU==DonchianLow2EU && DonchianLow2EU==DonchianLow1EU && DonchianLow0EU<DonchianLow1EU){
   SellSignalEU = "true";
   message("Nowe minimum na EURUSD. Sprawdź pozycję");
   Sleep(1800000);
   }

tak jak widzisz zrobiłem to za pomocą sleep'a jednakże tak jak wcześniej wspominałem, to się mija z celem, ze względu na odświeżanie. Natomiast w warunku if, jakbym dodał warunek, że BuySignalEU != "true" i posluzyl sie staticami, to wówczas jedno drugie by wykluczyło. Chyba ze zle rozumuję. Z gory dziekuje za pomoc.

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

Nieprzeczytany post autor: Tig3r »

Lite pisze:A jak nadam im statica oraz posłużę się podobną metodologią jak opisałeś, to wykluczy mi się sygnał.
Możesz skorzystać np z czasu świecy (czyli praktycznie co 1M)

możesz też tak:

Kod: Zaznacz cały


// zmienna globalna
datetime czas_wyslania;

// w funkcji init
czas_wyslania=TimeCurrent();

// w start
if(TimeCurrent()>=StrToTime('9:00') && czas_wyslania<StrToTime('9:00'))
{
message(..);
czas_wyslania=TimeCurrent();
}

======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

Wypróbowałem wiele sposobów i niestety ale sygnał jest generowany w sposób ciągły, i tym samym ciagle generuja sie wiadomosci do irca.
ponizej zastosowalem wydaje mi sie dobre myslenie: jest to interwal godzinowy wiec sygnal z EA jesli sie pojawi to bedzie generowany przez najblizsza godzine, az swieca sie nie skonczy. w zwiazku z tym biorac czas_wyslania jako pierwszy wyslany sygnal czekam do nastepnej godziny aby moc wlaczyc sprawdzanie sygnalu od nowa. do tego momentu nie moge pozwolic na wejscie do komendy message. wiem ze po godzinie sygnal przestanie byc generowany, z tego wzgledu ze zacznie sie nowa swieczka i dotychczasowy sygnal nie bedzie dzialal - nie ma sygnalu wiec nie wejdzie do komendy wysylania message. wydaje mi sie ze jest to dobre podejscie, albo sie mysle, zalaczam kod ponizej, jak to zrobilem. zalozenie ze Ask>DonchianLow3EU jest zalozeniem zwiazanym z checia pokazania zalozenia ktore bedzie generowane w sposob ciagly. Prosze o pomoc bo powoli wymiekam, i tak jak krowie na rowie, w postaci zmodyfikowania na przyklad tego kodu powyzej;)

podsumowujac, glowny cel to w przypadku sygnalu ciaglego wyslanie pojedynczej informacji do irca - funkcja message().

Kod: Zaznacz cały


string BuySignalEU  = "false";
static datetime czas_wyslania;
   
if(Ask>DonchianLow3EU && (TimeCurrent()-(TimeHour(czas_wyslania)+3600)>3600)){
BuySignalEU = "true";
czas_wyslania = TimeCurrent();
message("sygnal do otwarcia");
}

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

Nieprzeczytany post autor: Tig3r »

Lite
niepotrzebnie się upierasz przy stringach, jak chcesz true/false to masz typ: bool

Proszę sygnał raz ja świecę:

Kod: Zaznacz cały

static datetime swieca;
bool sygnal=false;
if(Ask>DonchianLow3EU) sygnal=true;

if(sygnal && swieca<>Time[1])
{
message(..);
swieca=Time[1];
}
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Nieprzeczytany post autor: mikolaj2 »

Ewentualnie możesz skorzystać z kodu wykonywanego na początku świecy : http://pl.luktom.biz/Page/358/wykonywan ... u-swieczki

ODPOWIEDZ