Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
EMA_WMA_trend
//+------------------------------------------------------------------+
//| EMA_WMA_trend.mq4 |
//| Copyright © 2010, Õëûñòîâ Âëàäèìèð |
//| cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, http://cmillion.narod.ru"
#property link "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int MA_Slow_Open = 5, //ïåðèîä MA äëÿ îòêðûòèÿ îðäåðà
MA_Fast_Open = 2, //ïåðèîä MA äëÿ îòêðûòèÿ îðäåðà
MA_Slow_trend = 33, //ïåðèîä MA äëÿ îïðåäåëåèÿ òðåíäà
MA_Fast_trend = 13, //ïåðèîä MA äëÿ îïðåäåëåèÿ òðåíäà
stoploss = 0,
takeprofit = 200,
risk = 10, //ïðîöåíò ñâîáîäíûõ ñðåäñòâ äëÿ ðàñ÷åòà ïëàâàþùåãî îðäåðà
Magic = 777;
extern double Lot = 0.1; //åñëè Lot=0, òî ëîò ðàñ÷èòûâàåòñÿ îò ñâîáîäíûõ ñðåäñòâ
extern string ïàðàìåòðû.òðåéëèíãà = "0-îòêë 1-ïî ñâå÷àì 2-ïî ôðàêò áîëüøå2-ïî ïóíêòàì";
extern int TrailingStop = 120; //åñëè= 0, òî òðåéëèíã îòêëþ÷åí
extern int deltaFR = 0; //îòñòóï îò ôðàêòàëà èëè ñâå÷è
extern bool òîëüêî_ïðîôèòíûå = true; //òðàëèòü òîëüêî ïðèáûëüíûå îðäåðà
extern bool òîëüêî_áåçóáûòîê = false; //òðàëë òîëüêî â áåçóáûòîê
extern double Step = 5; //øàã èçìåíåíèÿ ñòîïîâ
extern int TimeStart = 0 , //÷àñ íà÷àëà ðàáîòû
TimeEnd = 24, //÷àñ îêîí÷àíèÿ ðàáîòû
MaxOrders = 1; //ìàêñèìàëüíîå êîëëè÷åñòâî îäíîâðåìåííî îòêðûòûõ îðäåðîâ
//--------------------------------------------------------------------
double SL,TP,LOT;
int TimeBar,slippage,STOPLEVEL;
//--------------------------------------------------------------------
int init()
{
Comment("EMA_WMA_trend","\n","Copyright © 2010 cmillion@narod.ru");
Step=Step*Point;
if (Digits==5 || Digits==3) slippage=30;
}
//--------------------------------------------------------------------
int start()
{
bool TradeTime;
double S0,F0,S1,F1,MA_TrednS,MA_TrednF;
int Tredn;
if (TimeHour(TimeCurrent()) >=TimeStart && TimeHour(TimeCurrent()) < TimeEnd) TradeTime=1;
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (TrailingStop!=0) TrailingStop();
if (TimeBar==Time[0]) return(0);
if (MA_Slow_trend!=0) MA_TrednS = iMA(NULL,0,MA_Slow_trend,0,MODE_EMA, PRICE_OPEN,0);
if (MA_Fast_trend!=0) MA_TrednF = iMA(NULL,0,MA_Fast_trend,0,MODE_LWMA,PRICE_OPEN,0);
S0 = iMA(NULL,0,MA_Slow_Open,0,MODE_EMA, PRICE_OPEN,0);
F0 = iMA(NULL,0,MA_Fast_Open,0,MODE_LWMA,PRICE_OPEN,0);
S1 = iMA(NULL,0,MA_Slow_Open,0,MODE_EMA, PRICE_OPEN,1);
F1 = iMA(NULL,0,MA_Fast_Open,0,MODE_LWMA,PRICE_OPEN,1);
if (MA_TrednS < MA_TrednF) Tredn= 1;
if (MA_TrednS > MA_TrednF) Tredn=-1;
if (S0 < F0 && S1 > F1)
{
TimeBar=Time[0];
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss* Point,Digits); else SL = 0;
LOT = LOT(risk,1);
CLOSEORDER(-1);
if (Tredn>-1 && TradeTime && ORDERS( 1) < MaxOrders) OPENORDER ( 1);
}
if (S0 > F0 && S1 < F1)
{
TimeBar=Time[0];
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss* Point,Digits); else SL = 0;
LOT = LOT(risk,1);
CLOSEORDER( 1);
if (Tredn<1 && TradeTime && ORDERS(-1) < MaxOrders) OPENORDER (-1);
}
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
bool error=true;
int err,nn;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType()==OP_BUY && ord== 1)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
if (error) Comment("Çàêðûò îðäåð N ",OrderTicket()," ïðèáûëü ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (OrderType()==OP_SELL && ord==-1)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
if (error) Comment("Çàêðûò îðäåð N ",OrderTicket()," ïðèáûëü ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (!error)
{
err = GetLastError();
if (err<2) continue;
if (err==129)
{ Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
Sleep(5000);
RefreshRates();
continue;
}
if (err==146)
{
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",OrderTicket(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType()==OP_BUY && ord== 1)n++;
if (OrderType()==OP_SELL && ord==-1)n++;
}
}
}
if (n==0) break;
nn++;
if (nn>10) {Comment("Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);break;}
Sleep(1000);
RefreshRates();
}
}
//--------------------------------------------------------------------
void OPENORDER(int ord)
{
int error, err;
while (true)
{
if (ord== 1) error=OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),slippage,SL,TP,"EMA WMA",Magic,0,Blue);
if (ord==-1) error=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),slippage,SL,TP,"EMA WMA",Magic,0,Red);
if (error!=-1 || err >5) return;
else
{ err = GetLastError();
if (err<2) continue;
if (err==129)
{ Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
Sleep(5000);
RefreshRates();
continue;
}
if (err==146)
{
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",OrderTicket()," ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
}
return;
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
if (Lot!=0) return(Lot);
double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
if (LOT<MINLOT) LOT = MINLOT;
if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
return(LOT);
}
//--------------------------------------------------------------------
void TrailingStop()
{
ObjectDelete("SL Buy");
ObjectDelete("SL-");
ObjectDelete("SL Sell");
ObjectDelete("SL+");
int tip,Ticket;
bool error;
double StLo,OSL,OOP;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY)
{
StLo = NormalizeDouble(SlLastBar(1,Bid,TrailingStop),Digits);
if (StLo <= OOP && òîëüêî_ïðîôèòíûå) continue;
if (OSL >= OOP && òîëüêî_áåçóáûòîê) continue;
if (StLo-Step > OSL)
{ error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo);
}
}
if (tip==OP_SELL)
{
StLo = NormalizeDouble(SlLastBar(-1,Ask,TrailingStop),Digits);
if (StLo==0) continue;
if (StLo >= OOP && òîëüêî_ïðîôèòíûå) continue;
if (OSL >= OOP && òîëüêî_áåçóáûòîê) continue;
if (StLo+Step < OSL || OSL==0 )
{ error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
Comment("TrailingStop "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
}
}
//--------------------------------------------------------------------
double SlLastBar(int tip,double price, int tral)
{
double fr;
int i;
if (tral>2 && tral>=STOPLEVEL)
{
if (tip==1) fr = Bid - tral*Point;
else fr = Ask + tral*Point;
}
else
{
if (tral==2)
{
if (tip== 1)
for (i=1; i<100; i++)
{
fr = iFractals(NULL,0,MODE_LOWER,i);
if (fr!=0) {fr-=deltaFR*Point;if (price-STOPLEVEL*Point > fr) break;}
else fr=0;
}
if (tip==-1)
for (i=1; i<100; i++)
{
fr = iFractals(NULL,0,MODE_UPPER,i);
if (fr!=0) {fr+=deltaFR*Point;if (price+STOPLEVEL*Point < fr) break;}
else fr=0;
}
}
if (tral==1)
{
if (tip== 1)
for (i=1; i<100; i++)
{
fr = iLow(NULL,0,i)-deltaFR*Point;
if (fr!=0) if (price-STOPLEVEL*Point > fr) break;
else fr=0;
}
if (tip==-1)
for (i=1; i<100; i++)
{
fr = iHigh(NULL,0,i)+deltaFR*Point;
if (price+STOPLEVEL*Point < fr) break;
else fr=0;
}
}
}
if (tip== 1)
{
ObjectCreate("SL Buy",OBJ_ARROW,0,Time[0]+Period()*120,fr,0,0,0,0);
ObjectSet ("SL Buy",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Buy",OBJPROP_COLOR, Blue);
ObjectCreate("SL-",OBJ_ARROW,0,Time[0]+Period()*120,price-STOPLEVEL*Point,0,0,0,0);
ObjectSet ("SL-",OBJPROP_ARROWCODE,4);
ObjectSet ("SL-",OBJPROP_COLOR, Blue);
}
if (tip==-1)
{
ObjectCreate("SL Sell",OBJ_ARROW,0,Time[0]+Period()*120,fr,0,0,0,0);
ObjectSet ("SL Sell",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Sell", OBJPROP_COLOR, Red);
ObjectCreate("SL+",OBJ_ARROW,0,Time[0]+Period()*120,price+STOPLEVEL*Point,0,0,0,0);
ObjectSet ("SL+",OBJPROP_ARROWCODE,4);
ObjectSet ("SL+",OBJPROP_COLOR, Red);
}
return(fr);
}
//--------------------------------------------------------------------
int ORDERS(int tip)
{
int N_Sell,N_Buy;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY ) N_Buy++;
if (OrderType()==OP_SELL) N_Sell++;
}
}
}
if (tip== 0) return(N_Buy+N_Sell);
if (tip== 1) return(N_Buy);
if (tip==-1) return(N_Sell);
}
//--------------------------------------------------------------------
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---