//+------------------------------------------------------------------+
//| MACD system.mq4 |
//| Copyright © 2010, Tomek |
//| http://do-wolnosci.blogspot.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Tomek"
#property link "http://do-wolnosci.blogspot.com/"
extern int MACD_szybka = 12;
extern int MACD_wolna = 26;
extern int MACD_sygnal = 9;
extern int identyfikator = 12345;
extern double loty = 0.1;
extern int takeProfit = 500;
extern int stopLoss = 30;
int init() {
return(0);
}
int deinit() {
return(0);
}
int start() {
double macd0=iMACD(NULL,0,MACD_szybka,MACD_wolna,MACD_sygnal,PRICE_OPEN,MODE_MAIN,0);
double macd1=iMACD(NULL,0,MACD_szybka,MACD_wolna,MACD_sygnal,PRICE_OPEN,MODE_MAIN,1);
bool kup = macd1 < 0 && macd0 > 0;
bool sprzedaj = macd1 > 0 && macd0 < 0;
int pozycja = znajdzPozycje(identyfikator);
if(kup) {
if(pozycja > 0)
roluj(pozycja, OP_BUY);
else
kup();
}
if(sprzedaj) {
if(pozycja > 0)
roluj(pozycja, OP_SELL);
else
sprzedaj();
}
return(0);
}
int znajdzPozycje(int identyfikator) {
int i = 0;
for(i=0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber() == identyfikator) {
return (OrderTicket());
}
}
return (0);
}
void kup() {
int ticket = OrderSend(Symbol(),OP_BUY,loty,Ask,5,Bid-stopLoss*Point,Ask+takeProfit*Point,"MACD system",identyfikator,0,Blue);
if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Zająłem długą pozycję: ",OrderOpenPrice());
} else {
Print("Błąd podczas otwierania długiej pozycji: ",GetLastError());
}
}
void sprzedaj() {
int ticket = OrderSend(Symbol(),OP_SELL,loty,Bid,5,Bid+stopLoss*Point,Bid-takeProfit*Point,"MACD system",identyfikator,0,Red);
if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Zająłem krótką pozycję: ",OrderOpenPrice());
} else {
Print("Błąd podczas otwierania krótkiej pozycji: : ",GetLastError());
}
}
void roluj(int identyfikator, int typ) {
if(OrderType() != typ) {
double price = Bid;
if(OrderType() == OP_SELL)
price = Ask;
OrderClose(identyfikator, OrderLots(), price, 3, Yellow);
if(typ == OP_BUY)
kup();
else
sprzedaj();
}
}
Można pobawić się zmiennymi zadeklarowanymi na początku skryptu, albo próbować je zoptymalizować. Wiem, wiem obiecałem, że pokaże krok po kroku jak to zrobić, ale mam lenia! :)
I gdzie, i jak to mam zaimplementować?
OdpowiedzUsuńW Tibii się da.
Usuń