aktywnyinwestor.pl

Inwestycje na polskim rynku kapitałowym.
Poprzedni: Debiuty GPW - wykres wspomagany MQL   Następny: Filtr sygnałów kupna dla wybranych spółek w MQL4 - Sposób drugi

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’.

profil

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.

cygwin1

cygwin2

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.

cygwin3

cygwin4

Lista pakietów do zainstalowania - do naszych celów wystarczy, aby zainstalować pakiety podstawowe (wystarczy wcisnąć przycisk ‘Dalej’).

cygwin5

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:

cygwin6

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:

cygwin7

cygwin8

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:

cygwin9

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:

importdll

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.

Tags: , ,

Powrót do strony głównej

Opublikowano w Edukacja 2 rok, 11 mies. temu o 21:47.

7 komentarzy

7 komentarzy

  1. ciezki temat chodz pokazany jak na dloni . Pozdrawiam

  2. TaoMaster lip 29th 2010

    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

  3. 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.

  4. Mateusz lut 8th 2012

    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 … :/

  5. Mateusz lut 8th 2012

    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? ;)

  6. 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??

  7. 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?


Dodaj komentarz

Podgląd komentarza:

Spam protection by WP Captcha-Free