Orders Execution
0
Views
0
Downloads
0
Favorites
SwingExp01Sm
//+------------------------------------------------------------------+
//| SwingExp01Sm.mq4 |
//| Ïåðåâîä íà ÌÒ4 Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//+------------------------------------------------------------------+
/*[[
Name := SwingExp01Sm
Author := Vovan
Link := Home.Ltd.ru
Lots := 1.0
Stop Loss := 50
Take Profit := 150
Trailing Stop := 30
]]*/
#define MAGIC 20050819
//---- Âíåøíèå ïàðàìåòðû ---------------------------------------------
extern int per=21, ttime=1800, zap=12;
extern double Lots=1.0;
extern int StopLoss=20, TakeProfit=65, TrailingStop=30;
//---- Ãëîáàëüíûå ïåðåìåííûå -----------------------------------------
bool first=true;
double mlot, MaxH, MinL, MidLine;
int b, s, ob, os, pb, ps, i, j=0;
int ssig, bloks, blokb, bsig, Hod, porog, m;
int cnt, canal, GL, Prof, PHod, Pprof, Sprof, dst;
// ìèíèìàëüíîå çíà÷åíèå ÒÑ=30
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
void init() {
ObjectCreate("MaxHi" , OBJ_HLINE, 0, 0,0);
ObjectCreate("MinLow" , OBJ_HLINE, 0, 0,0);
ObjectCreate("MidLine", OBJ_HLINE, 0, 0,0);
ObjectCreate("Arrow" , OBJ_ARROW, 0, 0,0);
Comment("");
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
ObjectDelete("MaxHi");
ObjectDelete("MinLow");
ObjectDelete("MidLine");
ObjectDelete("Arrow");
Comment("");
}
//+------------------------------------------------------------------+
//| Óñòàíîâêà çíà÷êîâ |
//+------------------------------------------------------------------+
void SetArrow(datetime t, double p, int k, color c) {
ObjectSet("Arrow", OBJPROP_TIME1 , t);
ObjectSet("Arrow", OBJPROP_PRICE1 , p);
ObjectSet("Arrow", OBJPROP_ARROWCODE, k);
ObjectSet("Arrow", OBJPROP_COLOR , c);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start() {
j++;
if (Hour()==0) j=0;
if (Minute()==5 && Seconds()>=55 && i<2) {
i++;
if (i==2) m=1;
}
//----- Ïîäñ÷¸ò îòêðûòûõ ïîçèöèé -----------------------------------
b=0; s=0; ob=0; os=0; pb=0; ps=0;
for (cnt=0; cnt<OrdersTotal(); cnt++) {
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {pb++; b++;}
if (OrderType()==OP_SELL) {pb++; s++;}
if (OrderType()==OP_BUYSTOP) {ps++; ob++;}
if (OrderType()==OP_SELLSTOP) {ps++; os++;}
}
}
}
Pprof=0; Sprof=0; bloks=0; blokb=0;
//----- MiniMax Setting --------------------------------------------
Hod =(Open[3]-Close[3]+Open[2]-Close[2]+Open[1]-Close[1]+Open[0]-Close[0])/Point;
PHod=(Open[6]-Close[6]+Open[5]-Close[5]+Open[4]-Close[4])/Point;
// ÏÎÐÎÃ - ÎÃÐÎÌÍÛÉ - ñäåëàíî
if (AccountBalance()<15000) {mlot=0.1; dst=0; porog=15;}
if (AccountBalance()>=15000) {mlot=1.0; dst=200; porog=100;}
MaxH=High[per];
MinL=Low[per];
for (cnt=per; cnt>=1; cnt--) {
if (MaxH<High[cnt]) MaxH=High[cnt];
if (MinL>Low[cnt]) MinL=Low[cnt];
}
MidLine=NormalizeDouble((MaxH+MinL)/2, Digits);
ObjectSet("MaxHi" , OBJPROP_PRICE1, MaxH);
ObjectSet("MaxHi" , OBJPROP_COLOR , Blue);
ObjectSet("MinLow" , OBJPROP_PRICE1, MinL);
ObjectSet("MinLow" , OBJPROP_COLOR , Red);
ObjectSet("MidLine", OBJPROP_PRICE1, MidLine);
ObjectSet("MidLine", OBJPROP_COLOR , Green);
canal=(MaxH-MinL)/Point;
//----- Çàêðûòèå î÷åíü ïðîôèòíûõ ïîçèöèé ---------------------------
//----- Îáìàíåì ÒðåéëèíãÑòîï ---------------------------------------
if (b+s>0) {
// if (CurTime()-LastTradeTime<11 then exit;
for (cnt=0; cnt<OrdersTotal(); cnt++) {
// ÍÅ Ó×Ò¨Í ÈÍÑÒÐÓÌÅÍÒ - ýòîãî ýêñïåðòà ñòàâèòü â 2-õ ýêçåìëÿðàõ íåëüçÿ - îí ìîíîâàëþòåí,
// ò.ê. äëÿ íåãî íóæåí âåñü áàëàíñ - ìîæíî ïîñëå ïðîâåðêè ýòîãî ýêñïà ïîäóìàòü îá ýêñïåðòå ìåíåäæåðå
// è âûáèðàòü êóäà íàïðàâëÿü ñðåäñòâà, íî äëÿ ýòîãî íóæíî ïðîäóìàòü ïðîöåäóðó çàìåðà óïóùåííîãî ïðîôèòà íà âñåõ îòêðûòûõ
// ÷àðòàõ.
// È åù¸. Òû íå çíàåøü, êàê ìîæíî ëîñÿ óñòàíîâëåíîãî â íàñòðîéêàõ ïîñëå ïåðåõîäà íà áîëüøîé ëîò èçìåíèòü?
// Íà ìàëîì äëÿ ïîäú¸ìà äåïî ìîæíî ïîðèñêîâàòü è ïîñòàâèòü 300, à ïîòîì õîòåëîñü áû âåðíóòüñÿ íà 50.Ïîñìîòðè êàê ñäåëàíî.
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
if (cnt==0) Pprof=MathRound(OrderProfit());
Sprof=MathRound(OrderProfit());
if (OrderLots()==0.1) porog=15;
if (OrderLots()==1.0) porog=100;
if (OrderType()==OP_SELL && OrderSymbol()==Symbol()) {
if (OrderProfit()>=porog) {
// ÎÏßÒÜ ÀÑÊÈ Ñ ÁÈÄÀÌÈ ÏÅÐŨÐÍÓÒÛ. - óñòðàíåíî *
OrderClose(OrderTicket(), OrderLots(), Ask, 5, Gold);
return;
}
}
if (OrderType()==OP_BUY && OrderSymbol()==Symbol()) {
if (OrderProfit()>=porog) {
OrderClose(OrderTicket(), OrderLots(), Bid, 5, Gold);
return;
}
}
}
}
}
if ((DayOfWeek()==6 && Hour()>=22 && Minute()>50) || m==1) {
bloks=1;
blokb=1;
m=0;
i=0;
for (cnt=0; i<OrdersTotal(); cnt++) {
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket());
}
}
}
// ÏÎ ÌÎÅÌÓ TotalProfit - ÎÁÙÈÉ ÒÅÊÓÙÈÉ ÏÐÎÔÈÒ ÏÎ Â Ñ Å Ì ÂÀËÞÒÀÌ.
//×òîáû èìåòü ïðåäñòàâëåíèå î åãî ñîñòîÿíèè íà äàííûé ìîìåíò.
//Ïî åãî èçìåíåíèþ ìîæíî ñóäèòü î íàïðàâëåííîñòè âñåõ ñäåëîê - ëîñü ðàñò¸ò èëè ïðîôèò - ýòî äëÿ îòëàäêè - ïîòîì âûáðîñèì
Prof=MathRound(AccountProfit());
if (Prof<0) {
if (GL>Prof) GL=Prof;
}
//----- Signals Setting --------------------------------------------
ssig=0; bsig=0;
if (PHod<0 && Hod>0 && Close[0]<Open[0] && MaxH-High[0]<=15*Point && canal>=50) {
blokb=1;
ssig=1;
SetArrow(Time[0], High[0]+10*Point, 242, GreenYellow);
}
if (PHod+Hod>0 && Close[0]<Open[0] && Close[0]>MidLine && canal>=50) {
blokb=1;
ssig=1;
SetArrow(Time[0], High[0]+10*Point, 242, GreenYellow);
}
if (PHod>0 && Hod<0 && Close[0]>Open[0] && Low[0]-MinL<=15*Point && canal>=50) {
bloks=1;
bsig=1;
SetArrow(Time[0], Low[0]-10*Point, 241, Violet);
}
if (PHod+Hod<0 && Close[0]>Open[0] && Close[0]<MidLine && canal>=50) {
bloks=1;
bsig=1;
SetArrow(Time[0], Low[0]-10*Point, 241, Violet);
}
if (Hour()==0 && Minute()<=5) {bloks=1; blokb=1;}
Comment("Data: ",Year(),".",Month(),".",Day()," Time: ",Hour(),":",Minute(),
" Imp1=", PHod, " Imp2=", Hod, " StopProf=", porog, " Del=",i,
"\nProfit=", Prof, " PProf=", Pprof, " SProf=", Sprof,
" Pozz=", pb+ps, " SLoss=", (StopLoss-dst), " Canal=", canal, " HH=", m);
//----- Open Positions ---------------------------------------------
if (Pprof<0 || Sprof<0) {
ssig=0;
bsig=0;
ttime=3600;
} else ttime=120;
// ÑÓÒÜ ÝÒÎÃÎ ÍÅ ÏÎÍßË - ñóòü òàêîâà: ïîñêîëüêó ÷èñëî âûñòàâëÿåìûõ îðäåðîâ îãðàíè÷èâàåòñÿ òîëüêî áàëàíñîì,
// òî ìû èìååì ñåðèþ. Ïðîôèò ïî ïåðâîìó àêòèâèðîâàííîìó îðäåðó ãîâîðèò ãîâîðèò -ãäå ìû: íà ïîäú¸ìå èëè ñïóñêå.
// Ïðîôèò ïî ïîñëåäíåìó àêòèâèðîâàííîìó îðäåðó ãîâîðèò íàì ÷òî ñåðèþ ìîæíî ïðîäîëæèòü, åñëè îí ïîëîæèòåëåí,
// à åãî îòðèöàòåëüíîå çíà÷åíèå ãîâîðèò, ÷òî ïðèáûëüíàÿ ñåðèÿ êîí÷èëàñü è ìû ïðåêðàùàåì âûñòàâëÿòü îðäåðà.
// Îáû÷íî çà âðåìÿ çàïðåòà âñå îðäåðà îòðàáàòûâàþò èëè óäàëÿþòñÿ. Âîçìîæíî ýòî âðåìåííî, íî èçìåíèâ ttime
// ìû çàäåðæèâàåì îòðàáîòêó âûñòàâëåíèÿ îðäåðîâ. Åñëè ïîÿâèòñÿ îïÿòü ïîëîæèòåëüíîå çíà÷åíèå ïðîôèòîâ â ñåðèè,
// ìû îïÿòü ðàçðåøèì ñòàâèòü èõ ÷àùå. Ýòî ÿ òàê äóìàþ, íî íå ôàêò ïîêà ïðîâåðÿþ. Ìîæåò ýòî äóáëèîëâàíèå, íî ÌÒ3 åñòü ÌÒ3.
if ((bloks==0 || blokb==0) && AccountFreeMargin()>=0.5*AccountBalance() && Pprof>=0 && Sprof>=0 && pb+ps<10) {
// çäåñü êîñÿê è èíîãäà íå õâàòàåò äåíåã ïðè àêòèâàöèè îðäåðîâ. Êàê ýòî ó÷åñòü ïðè ðàáîòå ïîêà íå çíàþ
// if CurTime-LastTradeTime<ttime then exit;
if (ssig==1) {
SetArrow(Time[0], High[0]+5*Point, 159, GreenYellow);
OrderSend(Symbol(),OP_SELLSTOP,mlot,Bid-zap*Point,3,Bid-zap*Point+(StopLoss-dst)*Point,Bid-zap*Point-TakeProfit*Point,"SwingExp01Sm",MAGIC,0,GreenYellow);
return;
}
if (bsig==1) {
SetArrow(Time[0], Low[0]-5*Point, 159, Violet);
OrderSend(Symbol(),OP_BUYSTOP,mlot,Ask+zap*Point,5,Ask+zap*Point-(StopLoss-dst)*Point,Ask+zap*Point+TakeProfit*Point,"SwingExp01Sm",MAGIC,0,Violet);
return;
}
}
if (TrailingStop>0 && b+s>0) {
for (cnt=0; cnt<OrdersTotal(); cnt++) {
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderProfit()>0 && OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>Point*TrailingStop) {
if (OrderStopLoss()<Bid-Point*TrailingStop) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Red);
return;
}
}
}
if (OrderSymbol()==Symbol() && OrderProfit()>0 && OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>Point*TrailingStop) {
if (OrderStopLoss()>Ask+Point*TrailingStop) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return;
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
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
---