Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

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

Nieprzeczytany post autor: adamForex »

W wersji mql 600+ używa się funkcji OnInit() itp. Oczywiście nowa wersja jest kompatybilna ze starymi funkcjami, ale nie zaleca się ich używania.

Marek_6S
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 25 paź 2015, 09:11

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

Nieprzeczytany post autor: Marek_6S »

Napisłam strategię , która wylicza wielkość zlecenia w lotach. Wszystko działało i nagle przestała strategia wyliczac wielkość zlecenia.
Skompilowałem ją ponownie, bez rzultatu (nie było żadnych błędów w kompilacji). Usunąłem strategię z okna i chciałem ją jeszcze raz uruchomić. Mam włączoną opcję Auto Trading. Strtegii nie mogłem uruchomić, nie pojawiło się okno i parametrami. Inne strategię mogę uruchomić.
Wylogowywałem się, zamykałem MT4, nic nie pomogło.

Zapisałam strategię pod inną nazwą i skompilowałem ją. Otrzymałem dużo błędów, kompilator nie wykrył między innymi funkcji AccountFreeMargin() [zrzut nr 1].
Chciałem przypisać tą funkcję do innj zmiennej, kompilator nie widzi jej [zrzut nr 2].

Utworzyłem nową strategię i przypisałm tą funkję do zmiennej, kompilator podpowiada ją [zrzut nr 3].

Używam MT4 z mFotex, wersja 4.00, build 950 z 23 grudnia 2015.
Meta Editor w wersji 5.00 build 1241 z 22 grudnia 2015.
System operacyjny: Windows 7 Professional.


Są to moje pierwsze kroki w pisaniu strategii, nie wiem czego mogę się spodziewać.Kod mogę przeklejć do nowej strategii. Zacząłem pisać jej fragmenty jako skrypty, ale nie o to przecież chodzi.
Proszę o podpowiedź dlaczego tak się dzieje.

Problem ze strategią.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

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

Nieprzeczytany post autor: adamForex »

Może spróbuj przypisywać wartości funkcji AccountBalance() itp. w OnInit() zamiast w przestrzeni globalnej. W przestrzeni globalnej zostaw sobie tylko deklaracje tych zmiennych.

To powinno rozwiązać te pierwsze błędy kompilacji.


Marek_6S
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 25 paź 2015, 09:11

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

Nieprzeczytany post autor: Marek_6S »

Dzięki za podpowiedź.

Pierwszy problem "strategia przestała wyliczac wielkość zlecenia", wynikał z braku przypisania kursu USDPLN
double USDKurs = MarketInfo("USDPLN",MODE_BID); . W oknie Rynek ukryłem nieużywane instrumenty, a wśród nich był USDPLN.

Drugi problem związany z błędami podczas kompilacji spowodowany był tym, iż podczas zapisywana pod inną nazwą strategii, została ona zapisana z rozszerzeniem .*mq5.

Trzeci problem, nie mogłem włączyć strategii, był związany z tym, iż po tym jak strategia nie mogła wyliczyć wielkości zlecenia w lotach, przekopiowałem fragment kodu ze skryptu. W skopiowanym fragmencie była linijka:
#property strict
Po jej wykasowaniu strategia zadziałała.

Tsubasa
Bywalec
Bywalec
Posty: 10
Rejestracja: 26 gru 2011, 11:52

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

Nieprzeczytany post autor: Tsubasa »

Witam,
tworzy mi się linia vertical i zawsze muszej jej szukać po wykresie:)
Co zrobić, aby wykres automatycznie przeszedł do tego obiektu?
Zero reakcji na komendę ObjectFind;/

Kod: Zaznacz cały

ObjectFind(0,"linia1"); // przejdź do powstałej linii 
Jakiś pomysł jak przesunąć wykres ...

Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

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

Nieprzeczytany post autor: adamForex »

ObjectFind zwraca tylko numer okna, w którym znajduje się dany obiekt. Jeżeli chcesz przesunąć wykres do miejsca, w którym znajduje się Twoja linia musisz użyć funkcji ChartNavigate: https://docs.mql4.com/chart_operations/chartnavigate

Przesunięcie musisz sobie wyliczyć na podstawie tego, co wpisałeś przy tworzeniu pionowej linii.

Tsubasa
Bywalec
Bywalec
Posty: 10
Rejestracja: 26 gru 2011, 11:52

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

Nieprzeczytany post autor: Tsubasa »

No właśnie chciałem uniknąć konwertowania czasu na ilość świeczek do końca wykresu:) Liczyłem, że będzie jakaś alternatywa wobec ChartNavigate. No szkoda...

forexsowicz91
Pasjonat
Pasjonat
Posty: 504
Rejestracja: 25 lis 2011, 17:55

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

Nieprzeczytany post autor: forexsowicz91 »

na wykresie obok napisów wskaźnika pojawia się szary napis Label. Co go powoduje i jak go zlikwidować?

najeżdżając kursorem na napis Label pojawia się na białym polu napis Daily return i pod spodem jakaś liczba

2 sprawa. nie wyświetlają się kolory. napis jest czarny a powinien być zielony gdy wartość >0 oraz czerwony gdy wartość<0

wrzucam wycinek kodu:

Kod: Zaznacz cały

//---------------
    
     color color_1 = 0, color_2 = 0, color_3 = 0, color_4 = 0;
                    
//----
string    Dailyreturntekst="Daily return = ";
double    dailyreturnpercent = (MarketInfo(Symbol(),MODE_BID) - iClose(Symbol(),PERIOD_D1,1))*100/iClose(Symbol(),PERIOD_D1,1);
double    dailyreturnpoints = (MarketInfo(Symbol(),MODE_BID) - iClose(Symbol(),PERIOD_D1,1));

     if(dailyreturnpercent>0)color_1=color_up; else color_1=color_down;
     if(dailyreturnpoints>0)color_2=color_up; else color_2=color_down;     

   ObjectCreate("Daily return",OBJ_LABEL,0,0,0);
   ObjectSetText("Daily return",Dailyreturntekst,FontSize ,"Arial",kolor);
   ObjectSet("Daily return",OBJPROP_XDISTANCE,5);     
   ObjectSet("Daily return",OBJPROP_YDISTANCE,215);
   ObjectSetText("Daily return", Dailyreturntekst+DoubleToStr(dailyreturnpercent,2)+" %"+znak+DoubleToStr(dailyreturnpoints,MarketInfo(Symbol(),MODE_DIGITS)));//dzienna stopa zwrotu w procentach i punktach
//---------------
string    returnxtest="return(x) = ";
double    returnxpercent = (MarketInfo(Symbol(),MODE_BID) - iClose(Symbol(),Period(),Shiftforreturn))*100/iClose(Symbol(),Period(),Shiftforreturn);
double    returnxpoints = (MarketInfo(Symbol(),MODE_BID) - iClose(Symbol(),Period(),Shiftforreturn));

     if(returnxpercent>0)color_3=color_up; else color_3=color_down;  
     if(returnxpoints>0)color_4=color_up; else color_4=color_down;                

   ObjectCreate("return(x)",OBJ_LABEL,0,0,0);
   ObjectSetText("return(x)",Rangetekst,FontSize ,"Arial",kolor);
   ObjectSet("return(x)",OBJPROP_XDISTANCE,5);     
   ObjectSet("return(x)",OBJPROP_YDISTANCE,230);
   ObjectSetText("return(x)", returnxtest+DoubleToStr(returnxpercent,2)+" %"+znak+DoubleToStr(returnxpoints,MarketInfo(Symbol(),MODE_DIGITS)));//stopa zwrotu z okresu "x" w procentach i punktach
//---------------

iceman
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 28 sie 2013, 09:09

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

Nieprzeczytany post autor: iceman »

Witam wszystkich,
Chciałem napisać ea który by otwierał zlecenia przeciwstawne w odległości x pip, dokładniej tłumacząc, otwieram dowolne zlecenie przykładowo buy teraz jeżeli cena spadnie o xx pipów to otworzy sie drugie zlecenie na sell, będzie ktoś tak miły i napisze jak taki kod powinien wyglądać, bo ja jestem całkiem początkujący i albo nie chce mi w ogóle drugiej pozycji otworzyć albo otwiera co każdy tick

ODPOWIEDZ