péntek, május 20, 2011

A robotunk egyben, az utolsó csavarig

Ismét jó sok idő telt el, volt, aki kommentben sürgetett meg.
Nos, tehát a teljes kódot közzé teszem, hiszen ez az értelme a blognak.

Azonban szeretnék leszögezni ismételten valamit, méghozzá nyomatékosan!
Ez az Expert Advisor nem alkalmas éles kereskedésre, kizárólag oktatási céllal készült. Aki éles számlán üzemelteti, a veszteségeiért eme blog írója semmilyen felelőséget sem válallal! A kód egésze, illetve egyes elemei szabadon felhasználhatóak, kivéve a kereskedelmi célú felhasználást! Kereskedelmi célra felhasználni a szerző beleegyezése nélkül tilos!

Remélem mindenki számára érthető, ugyanis nem szeretnék senkivel sem vitatkozni, különösen nem jogi kereteken belül! Tehát ez itt egy oktató program! Semmi más! A célja az egyes programozási fogások, ötletek bemutatása.

A FOREX robotunk megírása koránt sem fejeződött be, most jön ugyanis a tesztelése, egész konkrétan a backtest, ami egy jó támpont arra, hogy mennyire jó az ötlet maga. Illetve fogjuk látni a hibákat is, no meg azt is, hogy mikor köt rosszul. Sokat számít, hogy jól ki tudjuk értékelni a backtest-et.

Ha megtörtént a backtest, akkor jöhet egy tisztességes Money Management is hozzá, végül pedig egy demo számlán fogjuk tesztelni, és a teszt eredményét fogjuk kiértékelni. Hozzátenném, hogy egy egyébként elvben jól működő, de mégis veszteséget termelő programből nyereségeset lehet varázsolni egy kitűnő Money Management-tel...Ehhez persze az kell, hogy az elv működjön, vagyis lehetőleg több nyerő kötése legyen, mint vesztő és lehetőleg ez ne a véletlenen múljon, vagyis jókor kell pozíciót nyitnia. A jó pozíció nyitás azt jelenti, hogy a várható nyereség nagyobb, mint a veszteség (haladóknak : RR nagyobb, mint 1!).

Tehát minden egyéb magyarázat nélkül, következzék a robot kódja. Annyit tennék még hozzá, hogy aki esetleg nem érti minden egyes részét, bátran olvasson vissza a korábbi bejegyzéskbe, ugyanis az utolsó sorig megmagyaráztam a robot kódját.
A kód tehát :

//+------------------------------------------------------------------+
//| TrendMagic-TVI.mq4 |
//| Copyright © 2011, János Antal |
//| http://tozsdecapak.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, János Antal"
#property link "http://tozsdecapak.blogspot.com"
#property show_inputs
#include <stderror.mqh>
#include <stdlib.mqh>

extern double maxlots=0.01;
extern int slippage=5;
extern int TrendMagicCCI=50;
extern int TrendMagicATR=5;
extern int TVI_rs=50;
extern int TVI_TF=0;


int currentbar;
string TMTrend, TVITrend;
int orders;
bool nyitott;

int init()
{
}
int deinit()
{
}
int start()
{
int err, ticket;
double stoploss, ParUp, ParDn;


// Csak akkor fusson le, ha a gyertya már befejeződött

if (currentbar < Bars)
currentbar = Bars;
else
return;

nyitott = false;
orders = OrdersTotal();

for(int pos=0;pos<orders;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS)==false)
continue;
else
if (OrderSymbol() == Symbol())
nyitott=true;
}


// TrendMagic alapján nyitunk pozíciót

if (iCustom(NULL,0,"TrendMagic",TrendMagicCCI,TrendMagicATR,0,1) != EMPTY_VALUE && iCustom(NULL,0,"TrendMagic",TrendMagicCCI,TrendMagicATR,1,1) == EMPTY_VALUE) // Long
{
TMTrend="Long";
}

if (iCustom(NULL,0,"TrendMagic",TrendMagicCCI,TrendMagicATR,0,1) == EMPTY_VALUE && iCustom(NULL,0,"TrendMagic",TrendMagicCCI,TrendMagicATR,1,1) != EMPTY_VALUE) // Short
{
TMTrend="Short";
}

if (iCustom(NULL,0,"TVI_2color",TVI_rs,TVI_rs,5,TVI_TF,0,1) != EMPTY_VALUE && iCustom(NULL,0,"TVI_2color",TVI_rs,TVI_rs,5,TVI_TF,1,1) == EMPTY_VALUE)
{
TVITrend="Long";
}

if (iCustom(NULL,0,"TVI_2color",TVI_rs,TVI_rs,5,TVI_TF,0,1) == EMPTY_VALUE && iCustom(NULL,0,"TVI_2color",TVI_rs,TVI_rs,5,TVI_TF,1,1) != EMPTY_VALUE)
{
TVITrend="Short";
}

//Pozíció nyitások

if (TMTrend == "Long" && TVITrend == "Long" && !nyitott)
{
ticket=OrderSend(Symbol(),OP_BUY,maxlots,Ask,slippage,0,0,"TrendMagic-TVI - Long",MathRand(),0,Green);
err = GetLastError();
if (err != 0 && ticket < 0)
{
Print("Error # ", err, " ", ErrorDescription(err));
}
}

if (TMTrend == "Short" && TVITrend == "Short" && !nyitott)
{
ticket=OrderSend(Symbol(),OP_SELL,maxlots,Bid,slippage,0,0,"TrendMagic-TVI - Short",MathRand(),0,Green);
err = GetLastError();
if (err != 0 && ticket < 0)
{
Print("Error # ", err, " ", ErrorDescription(err));
}
}

//Stop-loss húzás
orders=OrdersTotal();

if (orders != 0)
{
for(pos=0;pos<orders;pos++)
{
if(OrderSelect(pos, SELECT_BY_POS,MODE_TRADES))
{
ParUp=iCustom(NULL,0,"Parabolic trendchaser", false, 0.06,0.1,7,0,0,1);
ParDn=iCustom(NULL,0,"Parabolic trendchaser", false, 0.06,0.1,7,0,1,1);

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && ParDn != 0)
{
stoploss = ParDn;

if (OrderModify(OrderTicket(),OrderOpenPrice(), stoploss, OrderTakeProfit(),0,Blue))
Print("Stop-loss módosítva!");
else
{
Print("Stop-loss nem módosult! ", DoubleToStr(stoploss,5));
Print("Hibaüzenet : ",ErrorDescription(GetLastError()));
}
}else if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && ParUp != 0)
{
stoploss = ParUp;

if (OrderModify(OrderTicket(),OrderOpenPrice(), stoploss, OrderTakeProfit(),0,Blue))
Print("Stop-loss módosítva!");
else
{
Print("Stop-loss nem módosult! ", DoubleToStr(stoploss,5));
Print("Hibaüzenet : ",ErrorDescription(GetLastError()));
}
}
}else
Print("Nem sikerült húzni a Stop-Loss-t, nem találom a pozíciót!");
}
}
}


A kódot a MetaEditor szerkesztő mezőjébe kell bemásolni, de előtte egy "üres" Expert Advisor-t kell készíteni. Ez a következőképpen megy, ha már a MetaEditor-ban vagyunk :
  • File menü
  • New menüpont
  • A megjelenő ablakban az Expert Advisor-t kell bejelölni
  • A tovább gomb után pedig olyan nevet adunk neki, amilyet akarunk, de célszerű a forráskód fejlécében lévő nevet adni neki (TrendMagic-TVI).
  • Célszerű az ablak tartalmátteljesen kitörölni és bemásolni a fenti kódot.
Ha ezzel meg vagyunk,akkor már csak annyi a dolgunk, hogy lefordítjuk a kódot, amit vagy az F5 billentyűvel tehetünk meg, vagy pedig a menü alatti ikon sorban található Compile gombbal.
A fordítás után a chart-ra visszatérve a navigátor ablakban az Expert Advisor mappában találjuk azon a néven, amilyen nevet adtunk neki létrehozáskor.

Aki kedvet érez hozzá, nyugodtan kísérletezzen vele, de szigorúan csak demo számlán!!!
Ez a program még nem elég érett az éles számlán történő használatra, de folyamatosan érlelni fogjuk. Most még elég nyers ez a kód.

Aki esetleg fordítási hibával találkozik (előfordulhat, hogy a HTML-be illesztés során homokszem kerül a gépezetbe), nyugodtan írja meg nekem, bár leteszteltem, és le kellene fordulnia simán.
Egyébként elég beszéldessek a hibaüzenetek.

Kellemes babrálást!

2 megjegyzés:

  1. Szia!

    Nekem kiír egy hibaüzenetet, mégpedig:
    2;76;C:\Program Files\MetaTrader\experts\Trend Magic-TVI.mq4;9:1;'TraderLibrary.mqh' - cannot open the program file

    VálaszTörlés
  2. Teljesen igazad van, egy saját függvény gyűjteményt minden forrás fájlomba be szoktam tenni, és ez véletlenül bennemaradt...
    Ha kiveszed azt az egy sort, vagy a bejegyzésben kijavított kódot újra bemásolod, akkor le kellene fordulnia.
    Köszönöm az észrevételt!

    VálaszTörlés