Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/CAD
Oct 2024 - Jan 2025
0.00 %
Total Trades
0
Won Trades
0
Lost trades
0
Win Rate
0.0 %
Expected payoff
0.00
Gross Profit
0.00
Gross Loss
0.00
Total Net Profit
0.00
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
123.00 %
Total Trades
66
Won Trades
25
Lost trades
41
Win Rate
0.38 %
Expected payoff
0.19
Gross Profit
67.33
Gross Loss
-54.94
Total Net Profit
12.39
-100%
-50%
0%
50%
100%
SAW_system_1
//+------------------------------------------------------------------+
//| SAW_system_1.mq4 |
//| Copyright 2014, SAW |
//| http://saw-trade.livejournal.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, SAW"
#property link "http://saw-trade.livejournal.com/"
#property version "1.00"
#property description "Ñîâåòíèê SAW_system_1 âûñòàâëÿåò îòëîæåííûå îðäåðà èç ðàñ÷åòà âîëàòèëüíîñòè"
#property description "çà N äíåé. StopLoss âñåãäà óñòàíàâëèâàåòñÿ íà óðîâåíü ïðîòèâîïîëîæíîãî îðäåðà,"
#property description "ñîîòâåòñòâåííî, â ïàðàìåòðàõ óêàçûâàåòñÿ ðàññòîÿíèå äî ñòîïà, òàì æå áóäåò ñòîÿòü"
#property description "è ïðîòèâîïîëîæíûé îðäåð!"
#property description "Òàéì-ôðåéì íå èìååò çíà÷åíèÿ."
#property strict
//--- input parameters
input double lot = 0.01; // Lot
input int d = 5; // Amount of days (for calculating volatility)
input int open_hour = 7; // Hour installation orders (terminal time)
input int close_hour = 10; // Hour removal orders (terminal time)
input int sl_rate = 15; // Stop-Loss (percentage of the average volatility)
input int tp_rate = 30; // Take-Profit (percentage of the average volatility)
input bool rev = false; // Reverse positions
input bool martin = false; // Martingale
input double martin_koef = 2.0; // Multiplier
//--- global parameters
//int dig = 0;
bool new_day= true; // new trading day
int day_week= -1; // the current day of the week
int d_average = 0; // the value of the average volatility for the selected period
int sl = 0; // Stop Loss
int tp = 0; // Take Profit
int or = 0; // the distance from the stage to order
int err = 0; // variable for counting the number of consecutive errors
bool mod_order = false; // orders modification flag
//--- custom functions
void v_calc();
void sl_tp_or_calc();
int send_orders();
int error();
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
day_week=DayOfWeek(); // óñòàíàâëèâàåì òåêóùèé äåíü íåäåëè (0 - âîñêðåñåíüå)
if(Hour()>=open_hour) // åñëè ÷àñ ïðîøåë, òî â ýòîò äåíü îðäåðà íå óñòàíàâëèâàåì
new_day= false;
v_calc(); // ÐÀÑ×ÅÒ ÂÎËÀÒÈËÜÍÎÑÒÈ
sl_tp_or_calc(); // ðàññ÷èòûâàåì ñòîï-ëîññ è òåéê-ïðîôèò
// ðàñ÷åò ïåðåìåííîé dig
// if (Digits() == 5)
// dig = 100000;
// if (Digits() == 4)
// dig = 10000;
//
// if (Digits() == 3)
// dig = 1000;
// if (Digits() == 2)
// dig = 100;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- ïðîâåðÿåì íîâûé äåíü
if(new_day==false && day_week!=DayOfWeek())
{
v_calc(); // ðàññ÷èòûâàåì âîëàòèëüíîñòü
sl_tp_or_calc(); // ðàññ÷èòûâàåì ñòîï-ëîññ è òåéê-ïðîôèò
//--- óñòàíàâëèâàåì ïåðåìåííûå
day_week= DayOfWeek();
new_day = true;
mod_order=false;
}
//-----------------------------------------------------------------------
//--- ïðè íàñòóïëåíèè íîâîãî äíÿ è òîðãîâîãî ÷àñà, âûñòàâëÿåì íàøè îðäåðà
if(day_week==DayOfWeek() && new_day==true && Hour()==open_hour)
{
while(send_orders()==666) // åñëè îðäåð íå óñòàíîâèëñÿ, ïåðåçàïóñêàåì 5 ðàç
{
switch(error())
{
case 666: new_day=false; mod_order=true; Print("!!!!!!ÏÐÎÈÇÎØËÀ ÎØÈÁÊÀ ¹ ",GetLastError()); return; // if the restart does not help, we derive a mistake and do not sell
case 1: RefreshRates();
}
}
}
//------------------------------------------------------------------------
// åñëè äåíü íå íîâûé è ò. ä.
if(new_day==false && day_week==DayOfWeek() && mod_order==false)
{
int tip1 = -1; // òèï ïåðâîãî îðäåðà
int tip2 = -1; // òèï âòîðîãî îðäåðà
int tick1 = -1; // íîìåð ïåðâîãî îðäåðà
int tick2 = -1; // íîìåð âòîðîãî îðäåðà
double price2 = -1.0; // öåíà îòêðûòèÿ âòîðîãî îðäåðà
double sl2 = -1.0; // ñòîï-ëîññ âòîðîãî îðäåðà
double tp2 = -1.0; // òåéê-ïðîôèò âòîðîãî îðäåðà
RefreshRates();
// ïðîâåðÿåì êîëè÷åñòâî îðäåðîâ
if(OrdersTotal()>2)
{
Print("ÁÎËÜØÅ 2-õ îðäåðîâ íà îäíîì èíñòðóìåíòå. Çàêðûâàåì ÂÑÅ!!!");
close_all_orders();
return;
}
// ïîëó÷àåì èíôîðìàöèþ ïî îðäåðàì
for(int i=0; i+1<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
switch(i)
{
case 0: tip1 = OrderType(); break;
case 1: tip2 = OrderType(); tick2 = OrderTicket();
price2=OrderOpenPrice(); sl2=OrderStopLoss(); tp2=OrderTakeProfit(); break;
default: Print("Íåâåðíîå êîëè÷åñòâî îðäåðîâ, ñáîé â ðàáîòå öèêëà!!!");
}
}
}
// ïðîâåðÿåì âðåìÿ æèçíè îòëîæåííûõ îðäåðîâ
if(tip1>1 && tip2>1 && close_hour<=Hour())
{
close_all_orders();
mod_order=true;
tip1=tip2=-1;
}
// ìåíÿåì çíà÷åíèÿ îðäåðîâ ìåñòàìè, åñëè íóæíî
if((tip2==0 || tip2==1) && tip1>1)
{
int t;
if(OrderSelect(0,SELECT_BY_POS)==true)
{
tick2=OrderTicket();
price2=OrderOpenPrice();
sl2 = OrderStopLoss();
tp2 = OrderTakeProfit();
t=tip1;
tip1 = tip2;
tip2 = t;
}
}
// ìîäèôèöèðóåì èëè óäàëÿåì îðäåðà, åñëè íóæíî
if((tip1==0 || tip1==1) && tip2>1)
{
if(rev==false)
{
if(OrderDelete(tick2)==true)
mod_order=true;
}
if(rev==true && martin==true)
{
if(OrderDelete(tick2)==true)
if(OrderSend(Symbol(),tip2,lot*martin_koef,price2,5,sl2,tp2,NULL,0,0,clrNONE)==-1)
Print("ÎØÈÁÊÀ ïåðåóñòàíîâêè âòîðîãî îðäåðà, äëÿ óâåëè÷åíèÿ ëîòà ¹",GetLastError());
mod_order=true;
}
if(rev==true && martin==false)
{
mod_order=true;
}
}
}
// ïðîâåðêà íà ñëó÷àé ñðàáàòûâàíèÿ òåéêà îäíîãî èç îðäåðîâ
if(mod_order==true && OrdersTotal()==1 && Hour()>=close_hour)
if(OrderSelect(0,SELECT_BY_POS)==true)
if(OrderType()>1)
if(!OrderDelete(OrderTicket()))
Print("ÎØÈÁÊÀ óäàëåíèÿ îðäåðà! GetLastError = " + (string)GetLastError());
// äîïîëíèòåëüíàÿ ïðîâåðêà íà ñëó÷àé îòêëþ÷åíèÿ èíòåðíåòà
if(new_day==true && day_week!=DayOfWeek())
{
day_week=DayOfWeek();
mod_order=false;
if(Hour() >= open_hour)
new_day = false;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void v_calc() // ÐÀÑ×ÅÒ ÂÎËÀÒÈËÜÍÎÑÒÈ
{
double h; // ìàêñèìàëüíàÿ öåíà áàðà
double l; // ìèíèìàëüíàÿ öåíà áàðà
double av=0; // ñóììà âñåé âîëàòèëüíîñòè çà ïåðèîä
// ðàñ÷åò ñðåäíåé âîëàòèëüíîñòè çà ïåðèîä
for(int i=1; i<=d; i++)
{
h = NormalizeDouble (iHigh(NULL, PERIOD_D1, i), Digits);
l = NormalizeDouble (iLow(NULL, PERIOD_D1, i), Digits);
av= av+((h-l)/Point());
}
d_average=(int)(av/d);
Print("d_average = ",d_average);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void sl_tp_or_calc() // ÐÀÑ×ÅÒ ÑÒÎÏÀ È ÏÐÎÔÈÒÀ
{
sl = d_average * sl_rate / 100;
tp = d_average * tp_rate / 100;
or=sl/2;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int send_orders() // ÓÑÒÀÍÎÂÊÀ ÎÐÄÅÐÎÂ
{
double price_up = -1.0; // óðîâåíü âûøå öåíû
double price_dn = -1.0; // óðîâåíü íèæå öåíû
double tp_up = -1.0; // òåéê âåðõíåãî óðîâíÿ
double tp_dn = -1.0; // òåéê íèæíåãî óðîâíÿ
RefreshRates();
// ðàñ÷åò óðîâíåé
price_up = Bid + or * Point();
price_dn = Bid - or * Point();
tp_up = price_up + tp * Point();
tp_dn = price_dn - tp * Point();
Print ("price_up = ", price_up);
Print ("price_dn = ", price_dn);
Print ("tp_up = ", tp_up);
Print ("tp_dn = ", tp_dn);
// óñòàíîâêà îðäåðà BUYSTOP
if(OrderSend(Symbol(),OP_BUYSTOP,lot,price_up,5,price_dn,tp_up,NULL,0,0,clrNavy)==-1)
{
return(666);
}
// óñòàíîâêà îðäåðà SELLSTOP
if(OrderSend(Symbol(),OP_SELLSTOP,lot,price_dn,5,price_up,tp_dn,NULL,0,0,clrRed)==-1)
{
return(666);
}
new_day=false;
err=0;
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int error() // ÔÓÍÊÖÈß ÎÁÐÀÁÎÒÊÈ ÎØÈÁÎÊ
{
if(err>=5)
{
close_all_orders();
err=0;
return(666);
}
else
{
close_all_orders();
err++;
return(1);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void close_all_orders() // ÇÀÊÐÛÒÜ È ÓÄÀËÈÒÜ ÂÑÅ ÎÐÄÅÐÀ
{
int tip=-1; // òèïà âûáðàííîãî îðäåðà
bool cl=true; // ðåçóëüòàò çàêðûòèÿ âñåõ îðäåðîâ
int i= 5; // êîëè÷åñòâî ïîïûòîê çàêðûòèÿ îðäåðîâ
int tick = -1; // íîìåð îðäåðà
while(OrdersTotal()>0 && i>0)
{
RefreshRates();
if(OrderSelect(0,SELECT_BY_POS)==true)
{
tip=OrderType();
tick=OrderTicket();
switch(tip)
{
case 0: cl = OrderClose(tick, OrderLots(), Bid, 5); break;
case 1: cl = OrderClose(tick, OrderLots(), Ask, 5); break;
case 2: cl = OrderDelete(tick); break;
case 3: cl = OrderDelete(tick); break;
case 4: cl = OrderDelete(tick); break;
case 5: cl = OrderDelete(tick); break;
}
}
else
{
Print("ÎØÈÁÊÀ ÂÛÁÎÐÀ ÎÐÄÅÐÀ");
cl=false;
}
if(cl==false)
i--;
}
if(cl==false)
{
Print("ÎØÈÁÊÀ ÇÀÊÐÛÒÈß ÂÑÅÕ ÎÐÄÅÐÎÂ");
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
---