EA oparty na niestandardowym wskaźniku
EA oparty na niestandardowym wskaźniku
Witam. Posiadam strategię opartą na wskaźniku, którą chciałbym "zrobotyzować". Problemem jest to ,że słabo znam język MQL 4. W dodatku wskaźnik, którego używam jest niestandardowy. Nie mam pojęcia jakich funkcji używać. Nie wiem jak przetłumaczyć na jezyk MQL4 założeń:
"Jeżeli wartości jest większa od 0 (przecina oś 0), to zamyka otwarte zlecenie sprzedaży równocześnie otwierając zlecenie kupna
Jeżeli wartość jest mniejsza od 0 (przecina oś 0), to zamyka otwarte zlecenie kupna równocześnie otwierając zlecenie sprzedaży."
Wskaźnik, którego używam nazywa się freescalpingindicators. Przy włączaniu wpisuje dwie wartości:
intensity (intensywność) : 18;
periods : 800.
Zdjęcie:
http://www.fotosik.pl/pokaz_obrazek/506 ... fc126.html
Najpewniej jest to kilka linijek kodu, co dla dobrego programisty to łatwizna, ale ja nie mam pojęcia od czego mam zacząć. Wiem, jak ciężko uczy się takich języków, gdyż uczyłem się PHP, więc nie wiem czy jest sens takowej nauki dla wspomnianych wyżej kilku linijek kodu.
Jeżeli napisanie tego programu (przetłumaczenie tych założeń) to zbyt dużo, to chociaż proszę o wskazówki.
"Jeżeli wartości jest większa od 0 (przecina oś 0), to zamyka otwarte zlecenie sprzedaży równocześnie otwierając zlecenie kupna
Jeżeli wartość jest mniejsza od 0 (przecina oś 0), to zamyka otwarte zlecenie kupna równocześnie otwierając zlecenie sprzedaży."
Wskaźnik, którego używam nazywa się freescalpingindicators. Przy włączaniu wpisuje dwie wartości:
intensity (intensywność) : 18;
periods : 800.
Zdjęcie:
http://www.fotosik.pl/pokaz_obrazek/506 ... fc126.html
Najpewniej jest to kilka linijek kodu, co dla dobrego programisty to łatwizna, ale ja nie mam pojęcia od czego mam zacząć. Wiem, jak ciężko uczy się takich języków, gdyż uczyłem się PHP, więc nie wiem czy jest sens takowej nauki dla wspomnianych wyżej kilku linijek kodu.
Jeżeli napisanie tego programu (przetłumaczenie tych założeń) to zbyt dużo, to chociaż proszę o wskazówki.
- profession
- Pasjonat
- Posty: 503
- Rejestracja: 19 mar 2008, 08:44
Wskaźnik jest niestety w ex4. Ale dodałem do wiadomości w rarze.
Co do repaintu: cóż, zmian wcześniejszych świec wskaźnika nie ma, a co do aktualnych... Raz tylko dostrzegłem zmiany . Niewielki słupek zółty zmienił kolor na niewielki słupek czerwony. Trochę na nim gram i tylko raz to zauważyłem. Wiec repaint jest, ale bardzo niewielki.
Co do repaintu: cóż, zmian wcześniejszych świec wskaźnika nie ma, a co do aktualnych... Raz tylko dostrzegłem zmiany . Niewielki słupek zółty zmienił kolor na niewielki słupek czerwony. Trochę na nim gram i tylko raz to zauważyłem. Wiec repaint jest, ale bardzo niewielki.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Kod: Zaznacz cały
#include <stdlib.mqh>
int MagicNumber = 888634;
extern double lot = 1;
extern int intensity = 18;
extern int periods = 800;
///////////////////////////////////////////////////////////////////////////////////////////////////
void init()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void deinit()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start()
{
double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0);
double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1);
if(total(OP_BUY)==0&&it1>0&&it2<=0){send(OP_BUY);ZamknijSell();}
if(total(OP_SELL)==0&&it1<0&&it2>=0){send(OP_SELL);ZamknijBuy();}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int total(int cmd)
{
int sum=0;
for ( int i=0;i<=OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && cmd ==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
}
return(sum);
}
///////////////////////////////////////////////////////
void send(int cmd)
{
double Point_ = Point;
if (Digits==3 || Digits==5) Point_=Point*10;
double tp;
double sl;
double pr;
color cl;
if (cmd==OP_BUY)
{
pr = Ask;
tp = 0;
sl = 0;
cl = Blue;
}
if (cmd==OP_SELL)
{
pr = Bid;
tp = 0;
sl = 0;
cl = Red;
}
int ticket = OrderSend(Symbol(),cmd,lot,pr,0,sl,tp,"",MagicNumber,0,cl);
if (ticket<=0) Print(ErrorDescription(GetLastError()));
}
/////////////////////////////////////////////////////////////////////////
void ZamknijBuy()
{int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}}
void ZamknijSell()
{int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}}
Przeanalizuj to sobie.
Solą życia jest kasa.
- pan_martino
- Gaduła
- Posty: 181
- Rejestracja: 01 kwie 2009, 13:51
- profession
- Pasjonat
- Posty: 503
- Rejestracja: 19 mar 2008, 08:44
To zależy na jakim okresie się gra. Ja gram na H1 i przy odpowiednim StopLoss'ie wyniki są całkiem niezłe.
A wracając do strategii. Tak jak personov powiedział, przy repaincie trochę szaleje, ale ogólnie jest to, co siedziało, o co mi chodziło.
Jeszcze mam pytanie. Jak wygląda sprawa ze StopLoss i/lub TrailingStop? Bardzo ciężko dodać w/w funkcje do tego kodu EA?
A wracając do strategii. Tak jak personov powiedział, przy repaincie trochę szaleje, ale ogólnie jest to, co siedziało, o co mi chodziło.
Jeszcze mam pytanie. Jak wygląda sprawa ze StopLoss i/lub TrailingStop? Bardzo ciężko dodać w/w funkcje do tego kodu EA?
Wersja z TP i SL :
Kod: Zaznacz cały
#include <stdlib.mqh>
int MagicNumber = 888634;
extern double lot = 1;
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int intensity = 18;
extern int periods = 800;
///////////////////////////////////////////////////////////////////////////////////////////////////
void init()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void deinit()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start()
{
double it1 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,0);
double it2 = iCustom(Symbol(),Period(),"freescalpingindicator",intensity,periods,0,1);
if(total(OP_BUY)==0&&it1>0&&it2<=0){send(OP_BUY);ZamknijSell();}
if(total(OP_SELL)==0&&it1<0&&it2>=0){send(OP_SELL);ZamknijBuy();}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int total(int cmd)
{
int sum=0;
for ( int i=0;i<=OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && cmd ==OrderType() && MagicNumber==OrderMagicNumber()) sum++;
}
return(sum);
}
///////////////////////////////////////////////////////
void send(int cmd)
{
double Point_ = Point;
if (Digits==3 || Digits==5) Point_=Point*10;
double tp;
double sl;
double pr;
color cl;
if (cmd==OP_BUY)
{
pr = Ask;
tp = Ask+TakeProfit*Point_;
sl = Ask-StopLoss*Point_;
cl = Blue;
}
if (cmd==OP_SELL)
{
pr = Bid;
tp = Bid-TakeProfit*Point_;
sl = Bid+StopLoss*Point_;
cl = Red;
}
int ticket = OrderSend(Symbol(),cmd,lot,pr,0,sl,tp,"",MagicNumber,0,cl);
if (ticket<=0) Print(ErrorDescription(GetLastError()));
}
/////////////////////////////////////////////////////////////////////////
void ZamknijBuy()
{int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_BUY)
{OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);}}}}
void ZamknijSell()
{int i;
for (i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber())
{if (OrderType() == OP_SELL)
{OrderClose(OrderTicket(),OrderLots(),Ask,1,Black);}}}}
Solą życia jest kasa.
Znalazłem na forum osobny temat poświęcony TrailingStop'owi.
http://www.forex-nawigator.biz/dyskusje ... opy#122485
Nie wiem, który najlepiej pasuje, lecz dzisiaj starałem się wnieść do kodu EA kod TrailingStop'u zwykłego. Niestety, za każdym razem nie działał.
Mógłby ktoś doświadczony poświęcić mi chwilkę i dodać do kodu EA (tego najnowszego podanego przez personov'a) TrailingStop zwykły (podany w linku)?
http://www.forex-nawigator.biz/dyskusje ... opy#122485
Nie wiem, który najlepiej pasuje, lecz dzisiaj starałem się wnieść do kodu EA kod TrailingStop'u zwykłego. Niestety, za każdym razem nie działał.
Mógłby ktoś doświadczony poświęcić mi chwilkę i dodać do kodu EA (tego najnowszego podanego przez personov'a) TrailingStop zwykły (podany w linku)?