Wpis ten będzie dotyczyć moich eksperymentów w
wykorzystaniu tak zwanych automatów do gry na rynku forex. Automat to nic
innego jak program komputerowy, który pracuje zgodnie z przyjętymi założeniami.
Otwiera, zamyka pozycje, ustala poziomy obronne i wszystko inne co możemy
realizować ręcznie. Automaty rozpalają naszą wyobraźnię – poszukujących "Świętego Grala”, czyli sposobu na zarobienia mitycznych milionów. Teoretycznie
taki automat pracuje samodzielnie i tylko patrzymy jak kolejne zera pojawiają
się na naszym koncie. Program nie ulega emocjom, czyli głównym przyczynom niepowodzeń
na giełdzie. A jak jest w praktyce?
Moje doświadczenia opierają się na
pisaniu, testowaniu i działaniu programów w języku Meta
Quotes Language 4 (MQL4).
Język ten pozwala na tworzenie własnych strategii (Expert Advisor) w
postaci automatycznych systemów transakcyjnych. Programy te działają na
platformach MT4 i MT5, z czego ja korzystałem tylko z MT4. W języku tym pisane
są też wszystkie wskaźniki i proste automaty dostarczane wraz z platformą
brokera. Warto dodać, że moje eksperymenty dotyczą tylko brokerów typu „Market
Maker”. W tym modelu klient dokonuje transakcji bezpośrednio z brokerem MM. Broker
pobiera kwotowania wprost z rynku międzybankowego i na ich podstawie
określa własne kursy (z odpowiednio szerszym spreadem), oferując je
klientowi. Broker stanowi w tym modelu dla inwestora drugą stronę
transakcji, bo tylko on dostarcza, na swoją platformę tradingową płynność.
Ewentualnie zabezpiecza swoje pozycje innych uczestników rynku. Czyli
mamy do czynienia z kopią realnego rynku który obserwujemy. To jak bardzo giełda danego "Market
Makera" odzwierciedla prawdziwy rynek forex, zależy tylko od danego
brokera. To dosyć istotna informacja, bo będzie miała także wpływ na praktyczne
działanie automatów.
Jak opisowo działa taki program. Wbrew pozorom to bardzo
prosta zabawka. Wykorzystuje on informacje o zmieniającej się cenie (otwarcia,
zamknięcia, max, min) w danym interwale czasowym. Popularne wskaźniki MACD,
Moving Average, czy inne magiczne
parametry są efektem dodawania, odejmowania bądź wymnażania powyższych historycznych
informacji. Wszystko to jest obrazowane na graficznych wykresach (świece,
słupki lub linie). Na przykład nie będziemy mieli informacji o wolumenie. To co
oferuje nam broker to tylko informacja o liczbie zawartych transakcji u MM, co
się nam w niczym nie przyda. Tak więc to na czym bazujemy to tylko wykresy
rysowane przez oprogramowanie brokera, które mogą się różnić od prawdziwego
rynku.
Żeby przetestować techniczne aspekty działania takiego automatu nawet nie
trzeba nic pisać, bo często przykładowe strategie Expert Advisor są
dołączane do platformy udostępnianej przez brokera. Ja też pracę rozpocząłem
od modyfikacji jednej z takich gotowych strategii.
Poniżej przykład automatu nazwanego przeze mnie "MAOpen SL Pending" – podążający stop-loss. Bazuje on na
wskaźniku MovingAverage, czyli prostych średnich ruchomych. Otwieranie i
zamykanie pozycji następuje w momencie przecięcia się wykresu cenowego ze średnia
ruchomą, czyli jeśli poziom średniej ruchomej napotyka na cenę w taki sposób,
że poprzednia wartość jest wyższa niż cena otwarcia i niższa niż cena
zamknięcia to wtedy pozycja długa zostanie otworzona (średnia ruchoma zostanie
przecięta przez wykres ceny od dołu).
Analogicznie jeśli wykres ceny
przetnie średnią ruchomą od góry, czyli poprzednia wartość średniej jest niższa
niż cena otwarcia i wyższa niż cena zamknięcia z poprzedniego okresu to wtedy
pozycja krótka zostanie otwarta.
Co się dzieje dalej. W prezentowanej strategii możemy
samodzielnie zdefiniować poziom stop-loss (SL) w procentowej zależności od wielkości
otwartej pozycji (depozytu). Przykładowo Jeżeli depozyt wyniósł 100 zł a
parametr SL ustawimy na 90% to system automatycznie ustawi SL w "odległości" 90 zł. Jeżeli kurs otwartej pozycji zacznie się zmieniać zgodnie z
naszymi oczekiwaniami, to system będzie automatycznie przesuwał SL o stałą
wartość 90 zł. To dość istotne w odróżnieniu od standardowego skryptu Take
Profit, który aktywuje się dopiero po przekroczeniu zadanej "odległości"
od poziomu otwarcia pozycji. W tym przypadku nasz automat przesuwa poziom SL w
"dół" lub w "górę" (w zależności czy pozycja jest Bid lub
Ask) od momentu otwarcia zlecenia. Zlecenie zostanie automatycznie zamknięte
kiedy niekorzystna zmiana kursu przekroczy w dowolnym momencie wartość SL. Dodatkowo
możemy ustawiać parametry średniej kroczącej czyli okres i przesunięcie (period
and shift).
Podsumowując, w powyższej strategii możemy ustawić:
a) interwał czasowy M1, M5, M15 itd.
b) parametry średniej kroczącej
c) stałą odległość poziomu SL od aktualnego kursu otwartej
pozycji.
Wyniki testowania strategii w zależności od powyższych
parametrów były następujące:
W tabeli ujęto tylko "obiecujące" wyniki testów na bazie danych historycznych. Przeważająca większość testów z innymi parametrami przynosiła straty.
Był to jeden z pierwszych dość prostych automatów
testowanych przeze mnie, ale niektóre wyniki były ciekawe i zachęciły mnie do dalszych prac w tym temacie. Kod EA załączam poniżej.
W kolejny poście dotyczącym tego tematu przedstawię bardziej
zaawansowane automaty, oraz równie ważne wnioski płynące z ich testowania oraz
praktycznego działania w rzeczywistości.
Zapraszam
//+------------------------------------------------------------------+
//| MAOpen SLPending.mq4 |
//| SR&WP |
//| |
//+------------------------------------------------------------------+
#property copyright "www.donkey.org.pl"
#property link "www.donkey.org.pl"
#define MAGICMAOASLP 20120719
extern double StopLossPercentage = 5.0;
double r;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMAOASLP)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
void CheckForOpen()
{
double ma;
int res;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,7.0,1.0,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
if(Open[1]>ma && Close[1]<ma)
{
r=Ask*(1+(StopLossPercentage/(AccountLeverage()*100)))-Bid;
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+r,0,"",MAGICMAOASLP,0,Red);
return;
}
//---- buy conditions
if(Open[1]<ma && Close[1]>ma)
{
r=Ask-Bid/(1+(StopLossPercentage/(AccountLeverage()*100)));
res=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,r,0,"",MAGICMAOASLP,0,Blue);
return;
}
//----
}
void CheckForModify() {
bool modify = false;
double StopLoss;
for(int i=0;i<OrdersTotal();i++)
{
modify = false;
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMAOASLP && OrderType() <= 1)
{
switch (OrderType()) {
case OP_SELL:
if (Ask < OrderOpenPrice()-r) {
StopLoss = Ask+(r*r/(OrderOpenPrice()-Ask));
}
else {
StopLoss = Ask+r;
}
if (StopLoss < OrderStopLoss()) modify = true;
break;
case OP_BUY:
if (Bid > OrderOpenPrice()+r) {
StopLoss = Bid-(r*r/(Bid-OrderOpenPrice()));
}
else {
StopLoss = Bid-r;
}
if (StopLoss > OrderStopLoss()) modify = true;
break;
}
if (modify) {
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,0,0);
}
}
}
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForModify();
//----
return(0);
}
//+------------------------------------------------------------------+
"praktycznego działania w rzeczywistości"
OdpowiedzUsuńWitam Pana,
to praktyczne działanie w rzeczywistosci jest tutaj kluczowa sprawa. Moje EA w testach byly cudowne, po 400€ na miesiac przy 0,1 lota. Ale rzeczywiste warunki nie byly juz takie rozowe. Czekam na dalsze wpisy.
Taki system świetnie sprawdza się na rynku trendowym. Niestety podczas wąskich konsolidacji sukcesywnie przynosi straty.
OdpowiedzUsuńBędą przykłady fajniejszych automatów. Muszę tylko znaleźć czas na przygotowanie posta...
UsuńW spekulacjach korzystasz wciąż z automatów czy pokazujesz to jako ciekawostka "historyczna"?
OdpowiedzUsuńprzyłączam się do pytania
Usuń