MQL
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
MQL
Bardzo brakuje mi tutaj informacji o wielkim narzędzi jakie udostępnia MT4 - możliwość programowania za pomocą języka MQL. Jeśli istnieje taka możliwość to proszę adminów bym miał dostęp do edycji tego posta przez cały czas - postaram się robić linki do ew. pytań i odpowiedzi jakie mi się pojawiał podczas programowania.
Na początek kilka stron, które udało mi się znaleźć przy okazji szukania informacji do MetaQuotes Language 4.
Bossa -
Słownik poleceń MQL4
tradingexpert - Ogólne informacje o języku Metaquotes
Mql4 Lesson Video
https://www.forex-tsd.com/forum/debates ... rogramming
Jeżeli natomiast chcesz się nauczyć C++ to polecam http://cpp0x.pl
Programowanie było kiedyś moja pasją, niestety ze względu na czas jaki temu poświęcałem i brak możliwości rozwoju i przy okazji zarabiania na tym - zrezygnowałem. Uczyłem się C++, ActionScript(pisałem w tym prace dyplomową), a obecnie trochę pracuję w PowerShellu.
W najbliższym czasie zaprezentuje moje modyfikacji dostępnych rozwiązań, które mają za zadanie pomagać mi w nie straceniu głowy.
Docelowo mam nadzieje, kiedyś napisać prostego robota na podstawie moich obserwacji rynku.
Na początek kilka stron, które udało mi się znaleźć przy okazji szukania informacji do MetaQuotes Language 4.
Bossa -
Słownik poleceń MQL4
tradingexpert - Ogólne informacje o języku Metaquotes
Mql4 Lesson Video
https://www.forex-tsd.com/forum/debates ... rogramming
Jeżeli natomiast chcesz się nauczyć C++ to polecam http://cpp0x.pl
Programowanie było kiedyś moja pasją, niestety ze względu na czas jaki temu poświęcałem i brak możliwości rozwoju i przy okazji zarabiania na tym - zrezygnowałem. Uczyłem się C++, ActionScript(pisałem w tym prace dyplomową), a obecnie trochę pracuję w PowerShellu.
W najbliższym czasie zaprezentuje moje modyfikacji dostępnych rozwiązań, które mają za zadanie pomagać mi w nie straceniu głowy.
Docelowo mam nadzieje, kiedyś napisać prostego robota na podstawie moich obserwacji rynku.
- irmentruda
- Maniak Forex
- Posty: 1103
- Rejestracja: piątek 19 wrz 2014, 11:30
- Lat na Forex: 3
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Silesia
Re: MQL
i jeszcze sama podstawowa strona:
https://docs.mql4.com/
https://docs.mql4.com/
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Obecnie przynajmniej w moim przypadku używany jest już MQL5 - https://www.mql5.com/en/docs
Dodatkowo trafiłem na fajny kurs dla początkujących opisujący podstawowe zagadnienia Prezentuje dwa przerobione wskaźnik informacyjne - które mają pomóc mi w zagraniach i nie traceniu głowy.
Pierwszy z nich to kompilacja dwóch wskaźników:
'EndOfBar' indicator by 'karcewzrokiem',
'Profitstat' indicator by 'FxAutomatedcom'. Ja stworzyłem swój własny w oparciu o nie.
Profit_Pozycje.mq4 - Ma on za zadanie informować mnie o tym, czy nie przekroczyłem maksymalnej liczby transakcji na dzień lub maksymalnej dziennej straty zamkniętych pozycji. Dodatkowo wyświetla informacji o czasie po którym skończy się malować słupek M30.
Drugim wskaźnikiem jest oparty o rozwiązanie - Informer - indicator for MetaTrader 4. Wskaźnik ten pokazuje informacje o koncie, oraz historię transakcji (może pokazywać live np. SL TP - ja to jednak usunąłem).
Ogólnie moja rola ograniczyła się do usunięcia tego co mi nie będzie potrzebne. Dodatkowo wskaźnik pokazuje się tylko na H1 (łatwo to zmienić). A statystyki konta pojawiają się po kliknięciu klawisza O i P (hotkey), usuwa się zaś klawiszem ESC lub zmieniając interwał.
Informer_v4_1.mq4 - Przykład wyglądu informacji -
Dodatkowo trafiłem na fajny kurs dla początkujących opisujący podstawowe zagadnienia Prezentuje dwa przerobione wskaźnik informacyjne - które mają pomóc mi w zagraniach i nie traceniu głowy.
Pierwszy z nich to kompilacja dwóch wskaźników:
'EndOfBar' indicator by 'karcewzrokiem',
'Profitstat' indicator by 'FxAutomatedcom'. Ja stworzyłem swój własny w oparciu o nie.
Profit_Pozycje.mq4 - Ma on za zadanie informować mnie o tym, czy nie przekroczyłem maksymalnej liczby transakcji na dzień lub maksymalnej dziennej straty zamkniętych pozycji. Dodatkowo wyświetla informacji o czasie po którym skończy się malować słupek M30.
Drugim wskaźnikiem jest oparty o rozwiązanie - Informer - indicator for MetaTrader 4. Wskaźnik ten pokazuje informacje o koncie, oraz historię transakcji (może pokazywać live np. SL TP - ja to jednak usunąłem).
Ogólnie moja rola ograniczyła się do usunięcia tego co mi nie będzie potrzebne. Dodatkowo wskaźnik pokazuje się tylko na H1 (łatwo to zmienić). A statystyki konta pojawiają się po kliknięciu klawisza O i P (hotkey), usuwa się zaś klawiszem ESC lub zmieniając interwał.
Informer_v4_1.mq4 - Przykład wyglądu informacji -
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Ciut przesadziłem, bo o ile dokumentacja jest podobna, to jednak mnie nie udało się odpalić rozwiązania z mq5 (kompilować można).GoldWolf pisze:Obecnie przynajmniej w moim przypadku używany jest już MQL5 - https://www.mql5.com/en/docs
Prezentuje mój pierwszy Expert Advisor, który spełni moje oczekiwania http://forum.comparic.pl/viewtopic.php? ... 784#p55152
Głównym założeniem było by za pomocą skrótu klawiszy zająć pozycje i ustawić SL. Dodatkowo by nie można było otworzyć pozycji w byle jakim miejscu. Prezentowany EA zawiera tylko 30% całości, ponieważ dla Buy/Sell przyjąłem swoje założenia systemowe, które usunąłem z kodu.
Natomiast pozostawiłem moduł auto. Moduł ten zakłada automatyczne otworzenie pozycji Buy/Sell w zależności od tego jak zakończył się słupek H4 i czy poprzedni H1 był przeciwny do trendu(domniemany trend), który się rozpoczął.
Spróbuje to wytłumaczyć na prostym przykładzie. Załóżmy obserwuje notowania EURJPY Przyjrzyjmy się pierwszemu trójkątowi z bliska - 29.02.2016 Zauważyliśmy pierwszy spadkowy H4 i teraz czekamy na pierwszy H1 zakończy się na plus, czyli przeciwnie do trendu, który się rozpoczął (trzeba tutaj pamiętać, że w chwili zobaczenia pierwszego H4 my nie wiemy czy trend się utrzyma).
Po zakończeniu się rysowania świecy H1 wzrostowej (zaznaczonej strzałeczką na wykresie) gdy używając EA wciśniemy klawisz Shift +X - EA sam otworzy pozycje Sell, ale tylko pod pewnymi warunkami:
- jeżeli ostatni H4 jest spadkowy,
- jeżeli poprzedni H1 był wzrostowy,
- i jeżeli cena jest wyżej niż zamknięcie ostatniego H1, ale niższa niż otwarcie ostatniego H4.
Dokładnie warunek wygląda tak
Kod: Zaznacz cały
case KEY_X :{
double OtwarcieH_4 = iOpen(NULL,PERIOD_H4,1);
double ZamkniecieH_4 = iClose(NULL,PERIOD_H4,1);
double OtwarcieH_1 = iOpen(NULL,PERIOD_H1,1);
double ZamkniecieH_1 = iClose(NULL,PERIOD_H1,1);
if(OtwarcieH_4 > Bid && ZamkniecieH_1 < Bid && OtwarcieH_4 < ZamkniecieH_4 && OtwarcieH_1 < ZamkniecieH_1){
Jeśli zauważymy H4, który naszym zdaniem może tworzyć trend wzrostowy to czekamy na pojawienie się pierwszej świecy spadkowej H1. Warunki tak samo:
- jeżeli ostatni H4 jest wzrostowy,
- jeżeli ostatni H1 był spadkowy,
- i jeżeli cena jest niżej niż zamknięcie ostatniego H1, ale wyżej niż otwarcie ostatniego H4. W obu przypadkach zaznaczonych na wykresie pozycje by się utrzymały, bo ustawiam dla nich szerszy SL niż normalnie grając systemem główny.
Ale to nie wszystko Zajęliśmy pozycje, ale trzeba określić SL i wielkość pozycji (w linii kody 15 - 18) mamy takie parametry:
Kod: Zaznacz cały
double lot = 0.06, lot_auto = 0.01;
int SL_Kup = 54; //domyślnie
int SL_Sprzedaj = 54; //domyślnie
int SL_Auto = 0; //domyślnie
Kod: Zaznacz cały
if(Symbol() == "USDCAD"){
lot = 0.08;
SL_Kup = SL_Sprzedaj = 92; //całość ze int spreed = 25;
SL_Auto = 209;
lot_auto = 0.04;
}else if(Symbol() == "EURJPY"){
lot = 0.07;
SL_Kup = SL_Sprzedaj = 89;
SL_Auto = 209;
lot_auto = 0.03;
}else if(Symbol() == "US30"){
lot = 0.02;
SL_Kup = SL_Sprzedaj = 61;
SL_Auto = 99;
lot_auto = 0.01;
}
Kod: Zaznacz cały
SL_Auto = 99;
lot_auto = 0.01;
Na koniec przy uruchomieniu EA określamy godziny w których będziemy grać, po to by nie można było zająć pozycji gdy nie gram w odpowiedniej dla nas porze.
To chyba wszystko - jakby coś proszę pytać.
Bardzo się cieszę z osiągniętego rezultatu. Szkoda, że od razy nie zająłem się MQL, bo na pewno miałbym mniejsze straty. Jeśli chodzi o to co zostało wycięte, to dla Buy i Sell wygląda to tak samo tylko różni się warunkami i oczywiście SL i wielkością pozycji.
A zapomniałbym gdy zostanie zajęta pozycja, tworzy się plik w lokalizacji C:\Users\GoldWolf\AppData\Roaming\MetaQuotes\Terminal\227B599E761B247E81C4D7230A2150D1\MQL4\Files. Plik zawiera parametry zagrania - pozycję (S lub B), SL i cenę kupna.
PS dla chętnych proponuję pobawić się na Demo by sprawdzić, czy wszystko działa poprawnie - nie wszystko mogłem przewidzieć.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Dla powyższego warunku znalazłem błąd, prawidłowo powinno to wyglądać tak:
Dla SELL
Dla BUY
Trafiłem na 2 fajne wskaźniki, które dodają możliwość w jednym oknie podglądu na różne timeframy.
Pierwszy z nich - Pipware minichart v 3.0, bardzo ładnie wkomponowuje się w wykres By dobrze działał w paczcie jest czcionka do instalacji, nie wiem czy wymagana - ja zainstalowałem.
Natomiast drugi Recent Candles (autor - hanover) może mniej estetyczny, ale dla mnie bardziej przydatny ponieważ jest do niego kod Ciut go zmodyfikowałem by nie trzeba było dodatkowego pliku do jego pracy. Więcej informacji i o jego możliwościach poczytacie na stronie http://www.forexfactory.com/showthread. ... 44&page=10.
Dla SELL
Kod: Zaznacz cały
case KEY_X :{
double OtwarcieH_4 = iOpen(NULL,PERIOD_H4,1);
double ZamkniecieH_4 = iClose(NULL,PERIOD_H4,1);
double OtwarcieH_1 = iOpen(NULL,PERIOD_H1,1);
double ZamkniecieH_1 = iClose(NULL,PERIOD_H1,1);
//Print(" OtH4 - ", OtwarcieH_4, " ZamH4 - ", ZamkniecieH_4, " Ot1 - ", OtwarcieH_1, " Zam1 - ", ZamkniecieH_1);
if(OtwarcieH_4 > Bid && ZamkniecieH_1 < Bid && OtwarcieH_4 > ZamkniecieH_4 && OtwarcieH_1 < ZamkniecieH_1){
Kod: Zaznacz cały
}else if(OtwarcieH_1 < Bid && ZamkniecieH_1 > Bid && OtwarcieH_1 > ZamkniecieH_1 && OtwarcieH_4 < ZamkniecieH_4){
Trafiłem na 2 fajne wskaźniki, które dodają możliwość w jednym oknie podglądu na różne timeframy.
Pierwszy z nich - Pipware minichart v 3.0, bardzo ładnie wkomponowuje się w wykres By dobrze działał w paczcie jest czcionka do instalacji, nie wiem czy wymagana - ja zainstalowałem.
Natomiast drugi Recent Candles (autor - hanover) może mniej estetyczny, ale dla mnie bardziej przydatny ponieważ jest do niego kod Ciut go zmodyfikowałem by nie trzeba było dodatkowego pliku do jego pracy. Więcej informacji i o jego możliwościach poczytacie na stronie http://www.forexfactory.com/showthread. ... 44&page=10.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Na początek czas na wskaźnik - InfoGW. Jest on pewną kompilacją rozwiązań, które mi się spodobały.
Wskaźnik składa się z:
1. Profitstat informuje o historii(stracie/zysku, oraz liczbie) zakończonych zagrań dzisiaj i wczoraj. Posiada mechanizm blokujący aplikację, określamy ile zagrań oraz jaką stratę dziennie chcemy przyjąć. Dla konta Demo można ustawić osobno te wartości wprowadzając jest w linii 95Gdy jedna z wartości (LiczbaZagran lub BudzetDzienny) zostanie przekroczona moduł ten wykona polecenia zamknięcia Terminala (blokada trwa do końca dnia) i bez zmiany w kodzie nie będzie się dało uruchomić MT4 bez jego ponownego zamknięcia. W soboty i niedziele moduł nie jest aktywny - nie zamyka MT4.
2. EndOfBar to prosty moduł pokazuje mi czas do zakończenia malowania się słupka M30.
3. Informer informuje o statystyce dla konta, oraz pokazuje historię zakończonych transakcji na wykresie(dla M30 i H4). Dodatkowo zapisuje dane do pliku w moim przypadku wybrałem dane -Dane te kopiuję do pliku w celu analizy współczynnika R i statystyki.
Moduł ten działa w oparciu o skróty klawiszowe:
- "O" + "I" - pokazuje historię transakcji i zapisuje do pliku
- "O" + "P" - pokazuje statystykę konta
Dodatkowo Klawisz "ESC" usuwa prezentowane informacje z modułu Informer (zmiana interwały też usuwa informacje).
Wprowadziłem też brak możliwości schodzenia na niższe interwały niż M30, prosty warunek
Wskaźnik składa się z:
1. Profitstat informuje o historii(stracie/zysku, oraz liczbie) zakończonych zagrań dzisiaj i wczoraj. Posiada mechanizm blokujący aplikację, określamy ile zagrań oraz jaką stratę dziennie chcemy przyjąć. Dla konta Demo można ustawić osobno te wartości wprowadzając jest w linii 95
Kod: Zaznacz cały
BudzetDzienny = -299;
2. EndOfBar to prosty moduł pokazuje mi czas do zakończenia malowania się słupka M30.
3. Informer informuje o statystyce dla konta, oraz pokazuje historię zakończonych transakcji na wykresie(dla M30 i H4). Dodatkowo zapisuje dane do pliku w moim przypadku wybrałem dane -
Kod: Zaznacz cały
(string) OrderSymbol() + "\t" +(string) OrderStopLoss() + "\t" + (string) OrderOpenPrice() + "\t" + (string) OrderClosePrice() + "\t\t\t" + DoubleToString(OrderProfit(),2)
Moduł ten działa w oparciu o skróty klawiszowe:
- "O" + "I" - pokazuje historię transakcji i zapisuje do pliku
- "O" + "P" - pokazuje statystykę konta
Dodatkowo Klawisz "ESC" usuwa prezentowane informacje z modułu Informer (zmiana interwały też usuwa informacje).
Wprowadziłem też brak możliwości schodzenia na niższe interwały niż M30, prosty warunek
Kod: Zaznacz cały
if (Period()== PERIOD_M1 || Period()== PERIOD_M5 || Period()== PERIOD_M15) //jeżeli M1,M5,M15 to zmienia na H4
ChartSetSymbolPeriod(NULL,NULL,PERIOD_H4);
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Prezentuje moje świeżo zmodyfikowane EA - ZajmijUstawSL. Nazwa sama mówi za siebie, EA ma mi pomóc w zajmowaniu pozycji i automatycznego ustawienia SL. Mam tutaj kilka rozwiązań.
1. Zajmuje pozycje automatycznie obierając kierunek - gdy naciśniemy TAB + Q:
-SELL gdyzamknięcie i otwarcie ostatniego zakończonego słupka jest mniejsze od Bid - czyli zajmuje pozycje gdy ostatni namalowany słupek był wzrostowy
-BUY gdycena otwarcia aktualnie malującej się świecy jest wyższa niż Bid
Czyli nasza rola ogranicza się tylko do odpowiedniego skupienia i kliknięcia dwóch klawiszy, reszta zrobi się sama. SL jest ustawiony na maksimum z dwóch ostatnich tygodni dla SELL, a minimum z dwóch ostatnich tygodniu dla BUY. Dlaczego zastosowałem tak odległy SL, ponieważ często mnie wyczesywało na SL, a później i tak kurs wracał na plus - ma to zapobiegać utracie kapitału.
2. Zajmuje pozycje SELL - gdy naciśniemy TAB + , (przecinek):
Otwiera pozycję gdymaksimum 2 ostatnich świec jest większe od Bid i cena zamknięcia ostatniej M30 jest mniejsza od Bid.
SL jest ustawiony na max z dwóch ostatnich świeć + spred.
3. Zajmuje pozycje Buy- gdy naciśniemy TAB + . (kropka):
Otwiera pozycję gdyminimum 2 ostatnich świec jest mniejsze od Bid i cena zamknięcia ostatniej M30 jest większa od Bid. SL jest ustawiony na min z dwóch ostatnich świeć - spred.
Dla wszystkich wyżej opisanych wariantów opieram się na M30. Dla jednego M30 można otworzyć tylko jedną pozycję Buy lub Sell - dla 1 i podobnie dla 2 i 3. Czyli dla jednego M30 można raz użyć wariantu 1 i raz użyć wariantu 2 lub 3 - czyli w sumie max 2 pozycje można otworzyć dla jednego M30.
Dodatkowo wprowadziłem kilka funkcjonalnościKlawisz W - przechodzi na W1
Klawisz D - przechodzi na H4
Klawisz S - przechodzi na M30
Klawisz A - przechodzi na D1
Klawisz END - zamyka terminal i ustawia SL na BE (dla wszystkich pozycji, które mają SL ujemny)
Klawisz E - przesuwa SL na BE dla wszystkich pozycji z danego wykresu.
Posiada także mechanizm w jakich godzinach ma handlować.
1. Zajmuje pozycje automatycznie obierając kierunek - gdy naciśniemy TAB + Q:
-SELL gdy
Kod: Zaznacz cały
if(ZamkniecieM_30 <= Bid && Otwarcie_M30 <= Bid)
-BUY gdy
Kod: Zaznacz cały
if(Otwarcie_M30 > Bid)
Czyli nasza rola ogranicza się tylko do odpowiedniego skupienia i kliknięcia dwóch klawiszy, reszta zrobi się sama. SL jest ustawiony na maksimum z dwóch ostatnich tygodni dla SELL, a minimum z dwóch ostatnich tygodniu dla BUY. Dlaczego zastosowałem tak odległy SL, ponieważ często mnie wyczesywało na SL, a później i tak kurs wracał na plus - ma to zapobiegać utracie kapitału.
2. Zajmuje pozycje SELL - gdy naciśniemy TAB + , (przecinek):
Otwiera pozycję gdy
Kod: Zaznacz cały
if(Max_M30 > Bid && ZamkniecieM_30 < Bid){
SL jest ustawiony na max z dwóch ostatnich świeć + spred.
3. Zajmuje pozycje Buy- gdy naciśniemy TAB + . (kropka):
Otwiera pozycję gdy
Kod: Zaznacz cały
if(Min_M30 < Bid && ZamkniecieM_30 > Bid)
Dla wszystkich wyżej opisanych wariantów opieram się na M30. Dla jednego M30 można otworzyć tylko jedną pozycję Buy lub Sell - dla 1 i podobnie dla 2 i 3. Czyli dla jednego M30 można raz użyć wariantu 1 i raz użyć wariantu 2 lub 3 - czyli w sumie max 2 pozycje można otworzyć dla jednego M30.
Dodatkowo wprowadziłem kilka funkcjonalności
Kod: Zaznacz cały
if(lparam == KEY_W) //jeśli nacisnę W idę na Week
ChartSetSymbolPeriod(NULL,NULL,PERIOD_W1);
if(lparam == KEY_D) //jeśli nacisnę D idę na H4
ChartSetSymbolPeriod(NULL,NULL,PERIOD_H4);
if(lparam == KEY_A) //jeśli nacisnę A idę na D1
ChartSetSymbolPeriod(NULL,NULL,PERIOD_D1);
if(lparam == KEY_S) //jeśli nacisnę S idę na M30 //ciekawie ile razy jeszcze to będę zmieniać ;-) 31.03.2016 (było M5)
ChartSetSymbolPeriod(NULL,NULL,PERIOD_M30); // zmiana nastąpiła już kolejnego dnia 1.04.2016 ;-(
if(lparam == VK_END){ //ustawia BE i zamyka terminal
PrzesunNaBE(2);
TerminalClose(0);
}
if(lparam == KEY_E){ //ustawia BE
PrzesunNaBE(1);
}
Klawisz D - przechodzi na H4
Klawisz S - przechodzi na M30
Klawisz A - przechodzi na D1
Klawisz END - zamyka terminal i ustawia SL na BE (dla wszystkich pozycji, które mają SL ujemny)
Klawisz E - przesuwa SL na BE dla wszystkich pozycji z danego wykresu.
Posiada także mechanizm w jakich godzinach ma handlować.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Trafiłem na źródło pierwszego ze wskaźników opisywanych tutaj - http://forum.comparic.pl/viewtopic.php? ... 231#p57555
Może się Wam przyda, mnie udało się go już przerobić, a właściwie odchudzić z tego co nie jest mi potrzebne. Wskaźnik jest ciekawy bo można dzięki niemu zrobić niezły mega monitoring, podglądając różne TF dla różnych Symboli (walorów).
Może się Wam przyda, mnie udało się go już przerobić, a właściwie odchudzić z tego co nie jest mi potrzebne. Wskaźnik jest ciekawy bo można dzięki niemu zrobić niezły mega monitoring, podglądając różne TF dla różnych Symboli (walorów).
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Prezentuje mój pierwszy półautomat - EA, który sam zawiera transakcje. Obrałem sobie jedno główne założenie, kupuj gdy jest trend. EA kupuje codziennie gdy kurs jest wyżej niż ostatnia transakcja. Dodatkowo może otworzyć 2 pozycję jeżeli jakaś H4 zamknie się poniżej otwarcia (próba zagrania na cieniu świecy). Dokładnie tak to wygląda dla SELL i dla BUY
Nie griduje - zajmuje pozycje tylko gdy kurs jest wyżej niż ostatnio zajęta pozycja.
By program działał w pliku file musi zawierać 2 pliki - "NazwaWaloruKierunek.txt" gdzie nazwa walory to wartość wyrzucona przez polecenie (w prawym górnym roku macie nazwę instrumentu). W XTB nazwy dla mojego konta są ze znakiem "plus" (EURJPY+), dlatego u mnie plik nazywa się np. "EURJPY+Kierunek.txt", a drugi plik to "EURJPY+SL_Sys.txt".
W pierwszym określacie jaki ma być kierunek ruchu (trendu) jeżeli 1 to Buy, jeżeli 2 to Sell. W pliku SL_Sys określacie SL, krytyczny poniżej którego jeżeli zejdzie cena zostaną zamknięte wszystkie zlecenia nie posiadające SL.
W pierwszym etapie budowy EA, postanowiłem nie stosować, żadnego SL (chciałem grać SL jako Stop-out brokera), jednak później zmieniłem zdanie. EA otwiera zlecenia bez SL, ale o tym później.
Proste założenia, a dają dobre rezultaty -
Nie ma co oczywiście popadać w hurra optymizm, test natomiast odzwierciedla sytuację rynkową której szukam, a EA ma tylko zajmować pozycje i zabezpieczyć przed tym gdyby już na początku coś poszło nie tak.
Przy teście dla EURJPY w pliku "EURJPY+SL_Sys.txt" była wartość 112.4.
Co do samego SL dla pozycji, to w pierwszej fazie projektu chciałem grac SL na kapitale, czyli ile broker pozwoli, ale po przeczytaniu kilku komentarzy na http://spekulant.com.pl/2016/11/26/reset/#comments postanowiłem wprowadzić kilka zmian.
1. SL permanentny (krytyczny - jeszcze się zastanawiam nad nazwą) chodzi o to by na początku określić poziom po którym setup sie nie udał. Może być sytuacja, że EA zajme 1 - 2 pozycje, a później rynek pójdzie w przeciwną stronę - wtedy zastanawiam bym się ile mam czekać. Będzie to poziom wynikający z wykresu - jeżeli wartość będzie zero to EA weźmie max/min z poprzedniego miesiąca.
2. Przy otwarciu nowego dnia, ustawiam SL na BE dla wszystkich (czyli max 2) pozycji, które mogły być otwarte w poprzednim dniu.
3. Na koniec tygodnia (piątek) rano lub wieczorem zamykam wszystkie pozycje(z danego tygodnia), po za 1 - 2, które uważam za otwarte w dobrym miejscu - w ten sposób osiągnę to iż z danego tygodnia zostaje tylko 1 - 2 pozycje na kolejny.
Prezentowany kod i plik EA zawiera tylko mechanizm pierwszy z listy - resztę mechanizmów trzeba samemu sobie dobrać (dopisać).
Kod: Zaznacz cały
if(NormalizeDouble(ZamkniecieD1 + StrefaZagrania*Point,Digits) < ZamkniecieH4 && KursZagrania > Bid){
Kod: Zaznacz cały
if(NormalizeDouble(ZamkniecieD1 - StrefaZagrania*Point,Digits) > ZamkniecieH4 && KursZagrania < Ask){
By program działał w pliku file musi zawierać 2 pliki - "NazwaWaloruKierunek.txt" gdzie nazwa walory to wartość wyrzucona przez polecenie
Kod: Zaznacz cały
Symbol()
W pierwszym określacie jaki ma być kierunek ruchu (trendu) jeżeli 1 to Buy, jeżeli 2 to Sell. W pliku SL_Sys określacie SL, krytyczny poniżej którego jeżeli zejdzie cena zostaną zamknięte wszystkie zlecenia nie posiadające SL.
W pierwszym etapie budowy EA, postanowiłem nie stosować, żadnego SL (chciałem grać SL jako Stop-out brokera), jednak później zmieniłem zdanie. EA otwiera zlecenia bez SL, ale o tym później.
Proste założenia, a dają dobre rezultaty -
Nie ma co oczywiście popadać w hurra optymizm, test natomiast odzwierciedla sytuację rynkową której szukam, a EA ma tylko zajmować pozycje i zabezpieczyć przed tym gdyby już na początku coś poszło nie tak.
Przy teście dla EURJPY w pliku "EURJPY+SL_Sys.txt" była wartość 112.4.
Co do samego SL dla pozycji, to w pierwszej fazie projektu chciałem grac SL na kapitale, czyli ile broker pozwoli, ale po przeczytaniu kilku komentarzy na http://spekulant.com.pl/2016/11/26/reset/#comments postanowiłem wprowadzić kilka zmian.
1. SL permanentny (krytyczny - jeszcze się zastanawiam nad nazwą) chodzi o to by na początku określić poziom po którym setup sie nie udał. Może być sytuacja, że EA zajme 1 - 2 pozycje, a później rynek pójdzie w przeciwną stronę - wtedy zastanawiam bym się ile mam czekać. Będzie to poziom wynikający z wykresu - jeżeli wartość będzie zero to EA weźmie max/min z poprzedniego miesiąca.
2. Przy otwarciu nowego dnia, ustawiam SL na BE dla wszystkich (czyli max 2) pozycji, które mogły być otwarte w poprzednim dniu.
3. Na koniec tygodnia (piątek) rano lub wieczorem zamykam wszystkie pozycje(z danego tygodnia), po za 1 - 2, które uważam za otwarte w dobrym miejscu - w ten sposób osiągnę to iż z danego tygodnia zostaje tylko 1 - 2 pozycje na kolejny.
Prezentowany kod i plik EA zawiera tylko mechanizm pierwszy z listy - resztę mechanizmów trzeba samemu sobie dobrać (dopisać).
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| Pies_01.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property description "Skrypt wspomagający handel ręczny i próba wprowadzenia półautomat. "
double Lot_Q = 0.0; //wielkość pozycji
double SL_Systemowy = 0.0; // SL który informuje o tym iż setup/zagranie się nie powiodło
//od jutra 1, za dwa dni 2 itd.
static short MaxPozycji = 3; //libcza maksymalnej liczby pozycji 1 + 2 które może otworzyć EA
int Pozycja = 0; //przechowuje informacje o ostatnio otwartej pozycji dla D1
int CzySprawdzilH1 = 0; // zmienna przechowuje informacje czy w danej godzinie było już sprawdzane,
//by co tik nie sprawdzał - szczególnie, że tylko raz (dwa razy) mogę zająć pozycję
int CzyZamknietoPozycje = 0; //sprawdza czy zamknieto pozycje gdy wybije SL systemowy (by nie sprawdzał co tick
// gdy to się stanie)
short Kierunek = 0; //zmienna przechowuje informacje czy grać do góry 1 czy na dół 9
short GodzinaHandlu = 0;
double StrefaZagrania = 0.0; //zawiera wartość jaka musi mieć cień by zawrzeć pozycje
double KursZagrania = 0.0;
short MagicznaLiczba = 0; //wprowadziłem by uszeregować zlecenia, by móc lepiej zarządzać SL i pozycjami
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
StrefaZagrania = 109;
if(Symbol() == "W.20+"){
StrefaZagrania = 19; //wartość powinna być zależna od ruchu na danym walorze zastosowałem dla GU
GodzinaHandlu = 9;
}
if(Symbol() == "US.30+")
StrefaZagrania = 48;
CzytajSL_Systemowy();
if(IsTesting())
FileDelete((string)(Symbol()+"KursZagrania.txt"));
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(CzyZamknietoPozycje != iBars(NULL, PERIOD_H4))
switch(Kierunek){
case 9 : {
if(SL_Systemowy < Ask){ // jeżeli cena jest wyższa to zamykaj
Print("Przekroczono SL systemowy. -9- Sprawdzam czy są stratne pozycje i zamykam je");
ZamknijWszystkoCoTraci();
CzyZamknietoPozycje = iBars(NULL, PERIOD_H4);
}
}break;
case 1 : {
if(SL_Systemowy > Bid){ // jeżeli cena jest wyższa to zamykaj
Print("Przekroczono SL systemowy. -1- Sprawdzam czy są stratne pozycje i zamykam je");
ZamknijWszystkoCoTraci();
CzyZamknietoPozycje = iBars(NULL, PERIOD_H4);
}
}break;
}
//---
if(SL_Systemowy != 0.0)
if(TimeDayOfWeek(TimeLocal()) != 7) //nie zaczynamy handlu w niedziele !!!
if(Pozycja != iBars(NULL,PERIOD_D1) && CzySprawdzilH1 != iBars(NULL, PERIOD_H1)){
CzySprawdzilH1 = iBars(NULL, PERIOD_H1);
string walor = Symbol();
string NazwaPliku = walor+"_SlupekPozycji.txt";
int handle;
if(FileIsExist(NazwaPliku)){
handle=FileOpen(NazwaPliku, FILE_TXT|FILE_READ);
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
Pozycja = (int) FileReadString(handle);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
}else
Print("Plik ", NazwaPliku, " nie istnieje!!!");
//Sprawdza jak ma grać
NazwaPliku = walor+"Kierunek.txt";
if(FileIsExist(NazwaPliku)){
//int handle;
handle=FileOpen(NazwaPliku, FILE_TXT|FILE_READ);
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
Kierunek = (short) FileReadString(handle);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
}else
Print("Plik ", NazwaPliku, " nie istnieje!!!");
NazwaPliku = walor+"KursZagrania.txt";
if(FileIsExist(NazwaPliku)){
handle=FileOpen(NazwaPliku, FILE_TXT|FILE_READ);
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
KursZagrania = (double) FileReadString(handle);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
NazwaPliku = NULL;
}
if(TimeHour(iTime(NULL,PERIOD_H1,0)) == GodzinaHandlu)
SprawdzKursPozycji();
if(Pozycja != iBars(NULL,PERIOD_D1))
ZajmijPozycje(Kierunek);
//Print(Pozycja);
//Print(Kierunek);
//Print("KursZagrania 2 : ", KursZagrania, " Godz. ", TimeHour(iTime(NULL,PERIOD_H1,0)));
//Print("Pon ", iClose(NULL, PERIOD_D1, 3), "; Wto ", iClose(NULL, PERIOD_D1, 2), "; Srod ", iClose(NULL, PERIOD_D1, 1), "; Dzis ", iClose(NULL, PERIOD_D1, 0), "; Niedziela ", iClose(NULL, PERIOD_D1, 4));
//Print(iBars(NULL,PERIOD_D1));
}
}
//+------------------------------------------------------------------+
/* Funkcja zajmij pozycję /*/
void ZajmijPozycje(short kierunek){
Print("SL_Systemowy123 - ", SL_Systemowy);
double ZamkniecieD1 = iClose(NULL,PERIOD_D1, 1);
double ZamkniecieH4 = iClose(NULL, PERIOD_H4, 1);
// pamiętać by sprawdzić kto jak maluje świecie
if(TimeDayOfWeek(TimeLocal()) == 0)
ZamkniecieD1 = iClose(NULL,PERIOD_D1, 2);
//Print("KursZagrania 1: ", KursZagrania);
switch((int)kierunek){
case 9 : {
if(SL_Systemowy > Ask){ // jeżeli cena jest niższa od SL to można grać
WielkoscPozycji();
if(KursZagrania == 0.0){
SprawdzKursPozycji();
if(KursZagrania == 0.0)
KursZagrania = iHigh(NULL,PERIOD_D1, 1);
}
if(Lot_Q > 0.001)
if(TimeHour(iTime(NULL,PERIOD_H1,0)) == GodzinaHandlu && NormalizeDouble(KursZagrania - StrefaZagrania*Point,Digits) > Bid){
int ticket = 0;
ticket = OrderSend(Symbol(), OP_SELL, Lot_Q, Bid, 3, NULL,NULL,NULL,79); //zajmowanie pozycji
if(ticket<0)
Print("Nie otwarto pozycji 2 - error #",GetLastError());
}else if(NormalizeDouble(ZamkniecieD1 + StrefaZagrania*Point,Digits) < ZamkniecieH4 && KursZagrania > Bid){
int ticket = 0;
ticket = OrderSend(Symbol(), OP_SELL, Lot_Q, Bid, 3, NULL,NULL,NULL,MagicznaLiczba); //zajmowanie pozycji
double KursPozycji = Bid;
if(ticket<0)
Print("Nie otwarto pozycji 2 - error #",GetLastError());
else{
Pozycja = iBars(NULL,PERIOD_D1);//iBars(NULL, PERIOD_H4);
ZapiszPozycje(KursPozycji);
}
}else
Print("Nie zajęto pozycji.");
}else{
Print("Przekroczono SL systemowy. Sprawdzam czy są stratne pozycje i zamykam je");
ZamknijWszystkoCoTraci();
}
} break;
case 1 : {
if(SL_Systemowy < Bid){ // jeżeli cena jest wyższa od SL to można grać
WielkoscPozycji();
if(KursZagrania == 0.0){
SprawdzKursPozycji();
if(KursZagrania == 0.0)
KursZagrania = iLow(NULL,PERIOD_D1, 1);
}
if(Lot_Q > 0.001)
if(TimeHour(iTime(NULL,PERIOD_H1,0)) == GodzinaHandlu && NormalizeDouble(KursZagrania + StrefaZagrania*Point, Digits) < Ask){
int ticket = 0;
ticket = OrderSend(Symbol(), OP_BUY, Lot_Q, Ask, 3, NULL,NULL,NULL,79); //zajmowanie pozycji
if(ticket<0)
Print("Nie otwarto pozycji 2 - error #",GetLastError());
}else if(NormalizeDouble(ZamkniecieD1 - StrefaZagrania*Point,Digits) > ZamkniecieH4 && KursZagrania < Ask){
int ticket = 0;
ticket = OrderSend(Symbol(), OP_BUY, Lot_Q, Ask, 3, NULL,NULL,NULL,MagicznaLiczba); //zajmowanie pozycji
double KursPozycji = Ask;
if(ticket<0)
Print("Nie otwarto pozycji 1 - error #",GetLastError());
else{
Pozycja = iBars(NULL,PERIOD_D1);//iBars(NULL, PERIOD_H4);
ZapiszPozycje(KursPozycji);
}
}else
Print("Nie zajęto pozycji. KursZagrania ", KursZagrania, " ; Ask ", Ask);
}else{
Print("Przekroczono SL systemowy. Sprawdzam czy są stratne pozycje i zamykam je");
ZamknijWszystkoCoTraci();
}
} break;
//default :
}
}
//+-----------------------------------------------------------------+
void SprawdzKursPozycji(){
int total = OrdersTotal();
if (total >= 0)
for(int cnt=total; cnt > 0; cnt--){
if(OrderSelect(cnt,SELECT_BY_POS)){
//Print("cnt - ", cnt, " , Total ", total);
//Print("KursZagrania3 - ", KursZagrania);
if(OrderSymbol() == Symbol())
switch(Kierunek){
case 1:{
if (OrderType() == OP_BUY)
if(KursZagrania < OrderOpenPrice()){
KursZagrania = OrderOpenPrice();
cnt = 0;
}
}break;
case 9:{
if (OrderType() == OP_SELL)
if(KursZagrania > OrderOpenPrice()){
KursZagrania = OrderOpenPrice();
cnt = 0;
}
}break;
}
}
}
}
//+------------------------------------------------------------------+
/* Funkcja zapisu do pliku informacji o pozycjach */
void ZapiszPozycje(double KursPozycji){
//zapisywanie kursy pozycji by nie otworzył poniżej ostatniego kursu zajęcia pozycji
string walor = Symbol();
string NazwaPliku = walor+"KursZagrania.txt";
int handle;
handle=FileOpen(NazwaPliku, FILE_WRITE|FILE_TXT|FILE_READ);
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
FileWrite(handle,(string)KursPozycji);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
NazwaPliku = NULL;
NazwaPliku = walor+"_SlupekPozycji.txt";
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
FileWrite(handle,(string)Pozycja);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
}
//+------------------------------------------------------------------+
/* Funkcja sprawdza czy cena jest powyżej SL Systemowego będącego zabezpieczniem
przed nie wykonaniem się założenia (złego określenia kierunku ruchu - trendu)
*/
void CzytajSL_Systemowy(){
if(SL_Systemowy == 0){
string walor = Symbol();
string NazwaPliku = walor+"SL_Sys.txt";
int handle;
if(FileIsExist(NazwaPliku)){
handle=FileOpen(NazwaPliku, FILE_TXT|FILE_READ);
if(handle!=INVALID_HANDLE){
FileSeek(handle, 0, SEEK_SET);
SL_Systemowy = (double) FileReadString(handle);
FileClose(handle);
}else Print("Operation FileOpen failed, error ",GetLastError());
handle = NULL;
NazwaPliku = NULL;
}else{
Print("Plik ", NazwaPliku, " nie istnieje!!! Nie mogą rozpoczać zajmowania pozycji!");
Kierunek = 0; //blokuję zajmowanie pozycji
}
}
}
/*
Funkcja do zamykania pozycji po nieudanym setapie - zamyka wszystko co nie ma ustawionego SL czyli
wszystko co straci
*/
void ZamknijWszystkoCoTraci(){
bool Zaliczone = false;
int total = OrdersTotal();
if (total >= 0){
for(int cnt=total; cnt > 0; cnt--){
if(OrderSelect(cnt,SELECT_BY_POS)){
//Print("cnt - ", OrderMagicNumber());
if(OrderSymbol() == Symbol()){
if(OrderStopLoss() == 0)
Zaliczone=OrderClose(OrderTicket(),OrderLots(),Bid,3);
if(!Zaliczone)
Print("OrderSend failed with error #",GetLastError());
else
Print("Zamknięto pozycję ", OrderSymbol(), " : ", OrderOpenTime());
}
}
}
}
}
/* Funkcja obliczająca jaką pozycję można otworzyć w zależności od
dostępnego kapitału i depozytu zabezpieczajacego Ustawiona na podstawie GBPUSD
*/
void WielkoscPozycji(){
if(AccountBalance() <= 1000){
Lot_Q = 0.01;
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() > 1000 && AccountBalance() < 2000){
Lot_Q = 0.02;
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() >= 2000 && AccountBalance() < 3000){ //do edycji
Lot_Q = 0.04;
/*if(Symbol() == "US30+")
Lot_Q = 0.03;*/
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() >= 3000 && AccountBalance() < 4000){
Lot_Q = 0.08;
/*if(Symbol() == "US30")
Lot_Q = 0.04;*/
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() >= 4000 && AccountBalance() < 5000){
Lot_Q = 0.1;
/*if(Symbol() == "US30")
Lot_Q = 0.06;*/
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() >= 5000 && AccountBalance() < 8000){
Lot_Q = 0.15;
/*if(Symbol() == "US30")
Lot_Q = 0.08;*/
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}else if (AccountBalance() >= 8000){
Lot_Q = 0.2;
/*if(Symbol() == "US30")
Lot_Q = 0.1;*/
if(Symbol() == "W.20+")
Lot_Q = 3 * Lot_Q;
MagicznaLiczba = 82;
}
}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Wykryłem błąd w jedne z funkcji
Kod: Zaznacz cały
void SprawdzKursPozycji(){
int total = OrdersTotal();
if (total >= 0)
for(int cnt=total; cnt >= 0; cnt--){
if(OrderSelect(cnt,SELECT_BY_POS)){
//Print("cnt - ", cnt, " , Total ", total, " OrderType()- ", OrderType(), " Kierunek - ", Kierunek);
//Print("KursZagrania3 - ", KursZagrania);
if(OrderSymbol() == Symbol())
switch(Kierunek){
case 1:{
if (OrderType() == OP_BUY)
if(KursZagrania == 0){
KursZagrania = OrderOpenPrice();
cnt = 0;
}else if(KursZagrania < OrderOpenPrice()){
KursZagrania = OrderOpenPrice();
cnt = 0;
}
}break;
case 9:{
if (OrderType() == OP_SELL)
if(KursZagrania == 0){
KursZagrania = OrderOpenPrice();
cnt = 0;
}else if (KursZagrania > OrderOpenPrice()){
KursZagrania = OrderOpenPrice();
cnt = 0;
}
}break;
}
}
}
//Print("KursZagrania3 - ", KursZagrania);
}
- irmentruda
- Maniak Forex
- Posty: 1103
- Rejestracja: piątek 19 wrz 2014, 11:30
- Lat na Forex: 3
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Silesia
Re: MQL
Bogaty bedziesz. Serio to tak dziala?
- GoldWolf
- Stały Bywalec
- Posty: 219
- Rejestracja: wtorek 15 gru 2015, 20:48
- Lat na Forex: 5
- Rodzaj rachunku: Rachunek rzeczywisty
- Lokalizacja: Bielsko-Biała
Re: MQL
Poprawiłem trochę błędów w kodzie EA, które wykryłem oraz wprowadziłem SL na kapitale.
Gdy osiągnie SL na kapitale zamyka wszystkie stratne pozycje.
Użytkownik decyduje jaki ma byś SL na kapitale (nie może być mniejszy niż ustawił broker) oraz czy EA ma działać czy nie.
Gdy osiągnie SL na kapitale zamyka wszystkie stratne pozycje.
Użytkownik decyduje jaki ma byś SL na kapitale (nie może być mniejszy niż ustawił broker) oraz czy EA ma działać czy nie.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości