Filtr sygnałów kupna dla wybranych spółek w MQL4 - Sposób pierwszy
Dzisiaj bardziej technicznie: nauczymy się bardzo przydatnej rzeczy, a mianowicie jak zrobić filtr wybranych sygnałów kupna dla określonych spółek.
Często po analizie fundamentalnej i spekulacyjnej spółki korzystamy ze wskaźników analizy technicznej i na ich podstawie wybieramy moment wejścia - czyli zakupu akcji. Przeglądanie ręcznie wszystkich spółek po kolei jest bardzo czasochłonne i przydałoby się przynajmniej część pracy zlecić automatowi, który ‘za nas’ oceni, oczywiście wg naszych kryteriów, czy powinniśmy już zaalokować część posiadanej gotówki w akcje. Poniżej przedstawiam pierwszy sposób konstrukcji takiego automatu w programie MetaTrader w języku MQL4. Osoby korzystające z tego rozwiązania z pewnością będą o krok naprzód od inwestorów posługujących się wyłącznie ręcznym sprawdzaniem wszystkich spółek.
Wykorzystamy trick, który umożliwia uruchomienie dowolnego skryptu dla otwartego waloru po uruchomieniu MT4. Idea polega na uruchomieniu MetaTradera z uruchomionym skryptem, który sprawdzi wartości określonych wskaźników i zapisze wynik do pliku wyjściowego, a następnie zakończy działanie MetaTrader’a. Skrypt sterujący uruchamianiem Mt4 w pętli podmieni walor do sprawdzenia z uprzednio przygotowanej listy.
Potrzebujemy zrobić zatem 2 mechanizmy: pierwszy będzie podmieniał walor w profilu i uruchamiał program MT4, oraz drugi, który będzie sprawdzał wartości wskaźników AT i za ich pomocą generował sygnał kupna i zapisywał go do pliku wyjściowego.
Aby uruchomić MT4 z określonym walorem, utworzymy profil, który będzie przeznaczony wyłącznie do filtrowania sygnałów. W tym celu, po uruchomieniu MT4, otwórzmy jedną dowolną spółkę offline i zapiszmy profil pod nazwą ’sygnaly’.
Po utworzeniu profilu, wychodzimy z MT4 i przegrywamy plik ‘terminal.ini’ z folderu /config/ do folderu głównego MT4, gdzie znajduje się terminal.exe i zmieniając jego nazwę na ‘terminal_sygnaly.ini’.
Mając powyższe ustawienia przygotujmy sobie listę walorów do sprawdzenia. Do przygotowania takiej listy i dalszej pracy skryptowej wykorzystuję środowisko Cygwin, które można za darmo pobrać z witryny www.cygwin.com (http://www.cygwin.com/setup.exe), a które dla osób nie zaznajomionych z tematem zawiera kopię narzędzi wzorowanych na środowisku linux. Dzięki temu osoby pracujące w systemach linux lub Mac OS będą w stanie łatwo przystosować skrypt dla swoich potrzeb.
Poniżej instalacja CygWin w kilku krokach:
Pierwsze kroki - wybór instalacji z internetu oraz folder docelowy - przykładowo c:\cygwin.
W polu ‘Default Text Type’ należy zmienić opcję Unix/binary (recommended) na DOS/text, unikniemy problemów związanych ze znakiem końca linii w systemie Windows.
Lista pakietów do zainstalowania - do naszych celów wystarczy, aby zainstalować pakiety podstawowe (wystarczy wcisnąć przycisk ‘Dalej’).
Po zainstalowaniu pakietu cygwin uruchamiamy go z Menu Start: Wszystkie Programy -> Cygwin -> Cygwin Bash Shell, naszym oczom powinna ukazać się powłoka systemowa Cygwin’a:
W pracy z Cygwinem nie będziemy uruchamiali środowiska w ten sposób, natomiast zmienimy ścieżkę systemową Windows tak, aby wskazywała także na folder z Cygwinem:
Po tej operacji uruchamiamy powłokę systemową Windows poleceniem Start->Uruchom, wpisujemy w pole z nazwą programu “cmd”. Od tego momentu polecenia Cygwin’a takie jak ‘ls’ ‘grep’ itp. powinny być dostępne z powłoki:
Aby przygotować listę walorów, można zastosować kombinację poleceń ls i grep, np.
ls c:\mt4\history\AlpariUK-Demo -1| grep “^P” > c:\mt4\walory_do_sprawdzenia.txt
(wpisanie wszystkich spółek zaczynających się na literę P)
lub np.
ls c:\mt4\history\AlpariUK-Demo -1 > c:\mt4\walory_do_sprawdzenia.txt
(wpisanie wszystkich spółek)
Oczywiście plik ‘walory_do_sprawdzenia.txt’ nie musi zawierać nazw w kolejności alfabetycznej, można dowolnie wycinać oraz wpisywać interesujące nas walory.
Mój przykładowy plik ma postać:
04PRO1440.hst
05VICT1440.hst
06MAGNA1440.hst
08OCTAVA1440.hst
14ZACH1440.hst
ABMSOLID1440.hst
ABPL1440.hst
ACE1440.hst
ACTION1440.hst
ADV.PL1440.hst
ADVADIS1440.hst
AGORA1440.hst
ALCHEMIA1440.hst
ALL_ORD1440.hst
ALMA1440.hst
ALUMAST1440.hst
AMBRA1440.hst
AMEX_MAJ1440.hst
AMICA1440.hst
AMPLI1440.hst
AMREST1440.hst
Następnie piszemy skrypt, który będzie z pliku ‘walory_do_sprawdzenia.txt’ wyciągał nazwy kolejnych walorów i podmieniał je w profilu ’sygnaly’. Jest to oczywiście sztuczka, której nie ma w żadnych instrukcjach MetaTradera:
Profil ’sygnaly’ zawiera w folderze 2 pliki: chart01.chr oraz order.wnd, które przechowują informacje o otwartych oknach oraz ustawieniach profilu. W pliku order.wnd przed uruchomieniem MT4 musi się znaleźć przykladowo:
AGORA,Daily (offline)
(ogólnie NAZWAWALORU,Daily (offline))
a w pliku chart01.chr interesuje nas druga linijka:
symbol=AGORA
gdzie pole po symbol= podmieniamy na dowolny kolejny symbol z pliku walory_do_sprawdzenia.txt
Kod skryptu umieszczam poniżej:
#!/bin/bash
# Filtr sygnalow kupna 1
# Copyright (c) 2009, AktywnyInwestor.pl
pliki_cut=`cat walory_do_sprawdzenia.txt | awk -F"1440.hst" '{ print $1 }'`
PROFILE_DIR="c:\\mt4\\profiles\\sygnaly\\"
PROGRAM_DIR="c:\\mt4\\"
cd $PROGRAM_DIR
for i in $pliki_cut
do
echo "Processing "$i
echo $i",Daily (offline)" > $PROGRAM_DIR\\order.wnd
rm -f $PROFILE_DIR\\*
cp -f $PROGRAM_DIR\\order.wnd $PROFILE_DIR
cat $PROFILE_DIR"\chart01.chr" | sed '2s/.*/symbol='"$i"'/' > $PROFILE_DIR"\chart02.chr"
mv -f $PROFILE_DIR"\chart02.chr" $PROFILE_DIR"\chart01.chr"
cd $PROGRAM_DIR
./terminal.exe terminal_sygnaly.ini
done
Mamy skrypt, który podmienia nazwy spółek dla profilu sygnaly, czas na napisanie skryptu w MQL4, który sprawdzi warunek kupna na podstawie zadanych kryteriów i wpisze wynik do pliku wynikowego:
//+------------------------------------------------------------------+
//| SygWriter_1.mq4 |
//| Copyright © 2009, AktywnyInwestor.pl |
//| http://www.aktywnyinwestor.pl |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, AktywnyInwestor.pl"
#property link "http://www.aktywnyinwestor.pl"
#include <stderror.mqh>
#include <stdlib.mqh>
#import "user32.dll"
void keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
#import
void killTerminal() {
keybd_event (18, 0, 0, 0); keybd_event (115, 0, 0, 0);
keybd_event (18, 0, 2, 0); keybd_event (115, 0, 2, 0);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
// Sprawdz dowolny warunek na podstawie biezacego waloru
// przykładowo jeżeli Relative Strength Index < 20 mamy wyprzedanie
string wynik;
string wyprz;
double sygnal;
int err;
// Odczytaj wartosc RSI
sygnal=iRSI(NULL,PERIOD_D1,14,PRICE_CLOSE,0);
// Sprawdz warunek wyprzedania
if (sygnal<20) wyprz="WALOR WYRZEDANY, SYGNAL KUPNA";
else wyprz="BRAK SYGNALU KUPNA";
// Zapisz wynik do pliku
int uchwyt;
uchwyt=FileOpen("sygnaly.txt",FILE_READ|FILE_WRITE);
if(uchwyt<1)
{
err=GetLastError();
Print("Blad(",err,"): ",ErrorDescription(err));
}
wynik=StringConcatenate("Sygnal dla walora ", Symbol(), " : RSI = ", sygnal, " , ", wyprz);
FileSeek(uchwyt, 0, SEEK_END);
FileWrite(uchwyt, wynik);
FileFlush(uchwyt);
FileClose(uchwyt);
killTerminal();
//----
return(0);
}
//+------------------------------------------------------------------+
Do prawidłowego działania skryptu należy za pomocą menu Opcje zakładka Strategie (CTRL + O), ustawić w MT4 import dll:
Skoro wszystko zostało już przygotowane, jesteśmy gotowi do przeprowadzenia testu. Skrypt wywolujemy korzystając z polecenia ‘bash filtr1.sh’, w trakcie jego działania w konsoli powinniśmy otrzymać kolejno nazwy sprawdzany spółek, np.:
…
Processing PAGED
Processing PAMAPOL
Processing PANOVA
…
podczas pracy skryptu zobaczymy uruchamianie i wyłączanie MetaTradera, jest to nieco czasochłonne, więc można w oczekiwaniu na wyniki odejść od komputera np. na herbatę.
Po zakończeniu skryptu wyniki mają postać:
Sygnal dla walora PAGED : RSI = 81.2505 , BRAK SYGNALU KUPNA
Sygnal dla walora PAMAPOL : RSI = 54.618 , BRAK SYGNALU KUPNA
Sygnal dla walora PANOVA : RSI = 57.7409 , BRAK SYGNALU KUPNA
Sygnal dla walora PBG : RSI = 66.4854 , BRAK SYGNALU KUPNA
….
Oczywiście sam sposób generowania sygnału zakupu należy traktować wyłącznie jako przykład.
Już wkrótce podam drugi sposób, który został wymyślony po zaimplementowaniu sposobu powyżej, a który nie wymaga wielokrotnego uruchamiania MT4.











ciezki temat chodz pokazany jak na dloni . Pozdrawiam
Brakuje jednej uwagi - bez ktorej nie zadziala.
W pliku terminal_sygnaly.ini dopisac na gorze jedna linijke, by przy starcie uruchamialo skrypt: Script=SygWriter_1.
Podziekowania dla twórcy strony - TaoMaster
I had got a desire to make my firm, nevertheless I did not have enough of cash to do this. Thank goodness my friend said to take the loan. Hence I used the credit loan and realized my desire.
Nie za bardzo kumam z tym pierwszym skryptem. Mam go zapisać jako cmd/bat w dowolnej lokalizacji? generalnie nie zmienia mi nic w pliku .hst … :/
Dobra, już kumam, że trzeba zapisać jako jakiś plik z rozszerzeniem .sh i wpisać wtedy w konsoli:
bash ścieżka_nazwa.sh
Problem jednak pojawia się przy ścieżkach, gdyż mam zainstalowanego MT4 w Program Files gdzie oczywiście jest spacja. Szukałem trochę na sieci jak tę spacje zastąpić w kodzie, ale za cholerę nie mogę znaleźć… any help?
Napotkałem dwa problemy:
1. instalując Cygwin (na stronie jest ver 2.769) nie pojawia się opcja wyboru
Default Text Type…
2. podejrzewam, że w wyniku tego w trakcie uruchamiania skryptu pojawia się coś takiego:
http://www.picshot.pl/public/view/67912
Jak rozwiązać ten problem??
z problemem nr2. sobie poradziłem (błąd odnosił się do nagłówka stworzonego przez Meta Editor).
po jego poprawieniu i tak pojawia się błąd
“MS-DOS style patch detected”…
any help?