Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/USD
Oct 2024 - Jan 2025
20.00 %
Total Trades
2
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-79.50
Gross Profit
41.00
Gross Loss
-200.00
Total Net Profit
-159.00
-100%
-50%
0%
50%
100%
NZD/USD
Oct 2024 - Jan 2025
20.00 %
Total Trades
2
Won Trades
1
Lost trades
1
Win Rate
0.50 %
Expected payoff
-79.50
Gross Profit
41.00
Gross Loss
-200.00
Total Net Profit
-159.00
-100%
-50%
0%
50%
100%
Agent_Fx_v07_XZ_d_ss_Martin
//+------------------------------------------------------------------+
//| Agent_Fx_v07_XZ_d_ss.mq4 |
//| Voloshin Yuri |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Voloshin Yuri"
#property link "http://www.metaquotes.net"
#define Magic 3017
extern string block_01 = " îñíîâíûå ïàðàìåòðû äëÿ èíäèêàòîðîâ";
extern double LotSize = 1.0; // Âåëè÷èíà òîðãóåìîãî ëîòà
extern bool MM = true; // èñïîëüçîâàòü ëè ìàðòèíãåéë
extern double LotExponent = 7; // íà ñêîëüêî óìíîæàòü óáûòî÷íûé ëîò
extern int LotExponentStart = 1; // ïîñëå êàêîé ïî ñ÷¸òó óáûòî÷íîé ñäåëêè âêëþ÷àòü ìàðòèíãåéë
extern int LotExponentMax = 3; // ñêîëüêî ðàç óìíîæàòü ëîò
extern int SL = 200; // ÑòîïËîñ äëÿ îðäåðà, åñëè SL=0 çíà÷åíèå îïðåäåëÿåòñÿ ïî ïåðâîé ñâå÷å
extern int TP = 41; // ÒåéêÏðîôèò äëÿ îðäåðà
extern int kCCI = 27; // Êîýôôèöèåíò îñíîâíîãî èíäèêàòîðà
extern string block_02 = " îñíîâíûå ïàðàìåòðû äëÿ áåçóáûòêà";
extern bool AllPositions = False; // Óïðàâëÿòü âñåìè ïîçèöèÿìè
extern bool ProfitTrailing = True; // Òðàëèòü òîëüêî ïðîôèò
extern int TrailingStop = 30; // Ôèêñèðîâàííûé ðàçìåð òðàëà
extern int TrailingStep = 8; // Øàã òðàëà
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
// Ïîääåðæèâàåò äâà âèäà òðàëà: ïðîñòîé (ïàðàìåòð ProfitTrailing=False), ò.å. ñðàçó æå ïîñëå îòêðûòèÿ ïîçèöèè
// ïîäòÿãèâàåòñÿ ñòîï íà ðàçìåð òðàëà è ïðîôèò-òðýéëèíã (ïàðàìåòð ProfitTrailing=True), ïðè êîòîðîì ñòîïû
// äâèãàþòñÿ òîëüêî ïîñëå ïðåâûøåíèÿ ïðîôèòà ïîçû íàä ðàçìåðîì òðàëà. Âåøàòü íóæíî òîëüêî íà îäèí ëþáîé ãðàôèê,
// à ñòîïû áóäóò äâèãàòüñÿ ó âñåõ îòêðûòûõ ïîçèöèé (ïàðàìåòð AllPositions=True).
extern string block_03 = " íàñòðîéêà ôóíêöèè óïðàâëåíèÿ êàïèòàëîì";
extern bool uplot = true; // âêë/âûêë èçìåíåíèå âåëè÷èíû ëîòà
extern double lotmin = 0.1; // íà÷àëüíîå çíà÷åíèå
extern double lotmax = 0.7; // ïîòîëîê
extern double lotstep = 0.1; // ïðèðàùåíèå ëîòà
extern int lastprofit = 1; // ïðèíèìàåò çíà÷åíèÿ -1/1.
// -1 - óâåëè÷åíèå ëîòà ïîñëå ìèíóñîâîé ñäåëêè äî ïåðâîé ïëþñîâîé.
// 1 - óâåëè÷åíèå ëîòà ïîñëå ïëþñîâîé ñäåëêè äî ïåðâîé ìèíóñîâîé.
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
double cci[10];
int i, total;
int ticket;
int slip = 3;
double ldStop;
double ldTake;
string SMB;
double PNT;
int MinLevel;
double lot, lots;
int init() {
SMB=Symbol(); //Ñèìâîë âàëþòíîé ïàðû
PNT=MarketInfo(SMB,MODE_POINT); //Ðàçìåð ïóíêòà â âàëþòå êîòèðîâêè,
//äëÿ òåêóùåãî èíñòðóìåíòà õðàíèòñÿ â ïðåäîïðåäåëåííîé ïåðåìåííîé Point
MinLevel=MarketInfo(SMB,MODE_STOPLEVEL); //Ìèíèìàëüíî äîïóñòèìûé óðîâåíü ñòîï-ëîññà/òåéê-ïðîôèòà â ïóíêòàõ
Proverka();
lot = LotSize;
lots = LotSize;
return(0);
}
int deinit() {
//----
//----
return(0);
}
// ========================================================
// =================== ÍÀ×ÈÍÀÅÌ ÐÀÁÎÒÓ ====================
// ========================================================
int start() {
RefreshRates();
// îïðåäåëÿåì íàëè÷èå äîñòàòî÷íûõ ñðåäñòâ íà äåïîçèòå
if(AccountFreeMargin()<(1000*lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
Alert("We have no money. Free Margin = ", AccountFreeMargin());
}
// îïðåäåëÿåì âðåìÿ äëÿ ðàñ÷åòîâ è ðàáîòû ýêñïåðòà
if(DayOfWeek()!=0 || DayOfWeek()!=6) // íå ðàáîòàåò â âûõîäíûå äíè.
{
double j, swo_L, swo_Y, swo_R;
int m,s,k;
m=Time[0]+Period()*60-CurTime(); // îïðåäåëÿåì âðåìÿ íà ñâå÷å
j=m/60.0;
s=m%60;
m=(m-m%60)/60;
if (m == 00 && s < 20) order(); // óñëîâèå äëÿ ïðèíÿòèÿ ðåøåíèÿ â êîíöå êàæäîé ñâå÷è
}
return(0);
}
// ========================================================
// =============== ÔÓÍÊÖÈß ÏÐÎÂÅÐÊÈ ÎÐÄÅÐÎÂ ===============
// ========================================================
void order() {
total=OrdersTotal(); // ôóíêöèÿ ïðîâåðÿåò íàëè÷èå îòêðûòûõ îðäåðîâ
// åñëè îðäåðîâ íåò, èùåì âîçìîæíîñòü îòêðûòèÿ
if(total<1)
{
// ôîðìèðóåì ìàñèâû èíäèêàòîðîâ è îïðåäåëÿåì òðåíä
for(i=0; i<10; i++)
{
cci[i] = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, i);
}
raschet();
}
for (int i=0; i<OrdersTotal(); i++) // åñëè îòêðûòûå îðäåðà èìåþòñÿ
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
// âûáèðàåì ðûíî÷íûå îðäåðà è ïåðåõîäèì íà îáðàáîòêó
if (OrderType() == OP_BUY || OrderType() == OP_SELL) BBU();
}
}
return;
}
// ========================================================
// ============ ÈÙÅÌ ÂÎÇÌÎÆÍÎÑÒÜ ÎÒÊÐÛÒÜ ÎÐÄÅÐ ============
// ========================================================
void raschet() {
Comment("\n"," == ñîâåòíèê ÐÀÁÎÒÀÅÒ ==",
"\n"," ======================",
"\n"," ñïðåä = ", MarketInfo(Symbol(),MODE_SPREAD),
"\n"," óðîâåíü ñòîï = ", MarketInfo(Symbol(),MODE_STOPLEVEL),
"\n"," ======================",
"\n"," Àíàëèçèðóþ ÈÍÄÈÊÀÒÎÐÛ ");
// óñëîâèå ïîêóïêè íà íèæíåé âåðøèíå
if(cci[1]<5 && cci[2]<cci[3] && cci[1]<cci[2] && cci[0]>cci[1] &&
Open[2]>Close[2] && Open[1]>Close[1] && Open[0]<Close[0] && Open[1]<Close[0]) pokypka();
// óñëîâèå ïðîäàæè íà âåðõíåé âåðøèíå
if(cci[1]>-5 && cci[2]>cci[3] && cci[1]>cci[2] && cci[0]<cci[1] &&
Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) prodaza();
return;
}
// ========================================================
// =================== ÎÒÊÐÛÂÀÅÌ ÎÐÄÅÐÀ ===================
// ========================================================
void pokypka() { // îòêðûâàåì îðäåð "ÊÓÏÈÒÜ"
GetLots(); // îïðåäåëÿåì ðàçìåð ëîòà äëÿ òîðãîâëè
if (SL!=0) ldStop=Ask-SL*Point;
if (SL==0) ldStop=Low[1]-7*Point;
if (TP!=0) ldTake=Ask+TP*Point;
ticket = OrderSend(Symbol(), OP_BUY, NormalizeDouble(lots,2), Ask, slip, ldStop, ldTake, NULL, Magic, 0, RoyalBlue);
if (GetLastError()>0) Alert("îøèáêà ïîêóïêè = ", GetLastError());
if (ticket>0)
{
Comment("\n"," == ñîâåòíèê ÐÀÁÎÒÀÅÒ ==",
"\n"," ======================",
"\n"," ñïðåä = ", MarketInfo(Symbol(),MODE_SPREAD),
"\n"," óðîâåíü ñòîï = ", MarketInfo(Symbol(),MODE_STOPLEVEL),
"\n"," ======================",
"\n"," ÎÒÊÐÛË îðäåð <<ÊÓÏÈÒÜ>>");
}
return;
}
void prodaza() { // îòêðûâàåì îðäåð "ÏÐÎÄÀÒÜ"
GetLots(); // îïðåäåëÿåì ðàçìåð ëîòà äëÿ òîðãîâëè
if (SL!=0) ldStop=Bid+SL*Point;
if (SL==0) ldStop=High[1]+7*Point;
if (TP!=0) ldTake=Bid-TP*Point;
ticket = OrderSend(Symbol(), OP_SELL, NormalizeDouble(lots,2), Bid, slip, ldStop, ldTake, NULL, Magic, 0, DeepPink);
if (GetLastError()>0) Alert("îøèáêà ïðîäàæè = ", GetLastError());
if (ticket>0)
{
Comment("\n"," == ñîâåòíèê ÐÀÁÎÒÀÅÒ ==",
"\n"," ======================",
"\n"," ñïðåä = ", MarketInfo(Symbol(),MODE_SPREAD),
"\n"," óðîâåíü ñòîï = ", MarketInfo(Symbol(),MODE_STOPLEVEL),
"\n"," ======================",
"\n"," ÎÒÊÐÛË îðäåð <<ÏÐÎÄÀÒÜ>>");
}
return;
}
// ========================================================
// ============ ÐÀÁÎÒÀ Ñ ÐÛÍÎ×ÍÛÌÈ ÎÐÄÅÐÀÌÈ ===============
// ========================================================
void BBU() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()==Symbol()) {
TrailingPositions();
}
}
}
}
void TrailingPositions() {
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
// ========================================================
// ============ ÔÓÍÊÖÈß ÓÏÐÀÂËÅÍÈß ÊÀÏÈÒÀËÎÌ ==============
// ========================================================
double GetLots() {
if (MM)
{
lots = LotSize;
int ct = 0;
for (int c=1;c<=OrdersTotal();c++)
{
OrderSelect(OrdersTotal()-c,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() != Magic) continue;
ct+=1; break;
}
if (ct == 0)
{
int clt = 0;
for (int co=1;co<=OrdersHistoryTotal();co++)
{
OrderSelect(OrdersHistoryTotal()-co,SELECT_BY_POS,MODE_HISTORY);
if (OrderMagicNumber() != Magic) continue;
if (OrderProfit() < 0) { clt+=1; if (clt < LotExponentStart+LotExponentMax) { lot = OrderLots(); } } else break;
}
if (clt >= LotExponentStart && LotExponentMax != 0)
{
clt = 0;
int mult = 0;
for (int co2=1;co2<=OrdersHistoryTotal();co2++)
{
OrderSelect(OrdersHistoryTotal()-co2,SELECT_BY_POS,MODE_HISTORY);
if (OrderMagicNumber() != Magic) continue;
if (OrderProfit() < 0) { clt+=1; if (clt >= LotExponentStart) { lot*=LotExponent; mult+=1; } }
if (OrderProfit() >= 0) break;
}
if (mult <= LotExponentMax) lots = lot;
}
}
}
else
{
lots = lots;
if (!uplot) return (lots);
int ticket = GetLastOrderHist();
if (ticket == -1) return (lots);
if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) return (lots);
if (OrderProfit()*lastprofit < 0) return (lots);
lots = MathMin(OrderLots() + lotstep, lotmax);
}
return(lots);
}
int GetLastOrderHist(int type = -1) {
int ticket = -1;
datetime dt = 0;
int cnt = HistoryTotal();
for (int i=0; i < cnt; i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
//Îïöèîíàëüíî
if (OrderSymbol() != Symbol()) continue;
//Îïöèîíàëüíî
if (OrderMagicNumber() != Magic) continue;
if (type != -1 && OrderType() != type) continue;
if (OrderCloseTime() > dt) {
dt = OrderCloseTime();
ticket = OrderTicket();
}
}
return (ticket);
}
// ======================= Ïðîâåðêà êîððåêòíîñòè ïîëüçîâàòåëüñêèõ óñòàíîâîê =============================================
void Proverka()
{
if(TrailingStop<MinLevel && TrailingStop!=0) {Comment("Îøèáêà! ÒðåéëèíãÑòîï ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå ",MinLevel);
Print("Îøèáêà! ÒðåéëèíãÑòîï ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå ",MinLevel);
Alert("Îøèáêà! ÒðåéëèíãÑòîï ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå ",MinLevel);
return(0);}
if(TrailingStep>=MinLevel && TrailingStep==0) {Comment("Îøèáêà! Øàã òðåéëèíãà ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå 1");
Print("Îøèáêà! Øàã òðåéëèíãà ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå 1");
Alert("Îøèáêà! Øàã òðåéëèíãà ðûíî÷íûõ îðäåðîâ íå ìîæåò áûòü ìåíåå 1");
return(0);}
if(TP<MinLevel && TP!=0) {Comment("Îøèáêà! TP íå ìîæåò áûòü ìåíåå ",MinLevel);
Print("Îøèáêà! TP íå ìîæåò áûòü ìåíåå ",MinLevel);
Alert("Îøèáêà! TP íå ìîæåò áûòü ìåíåå ",MinLevel);
return(0);}
if(SL<MinLevel && SL!=0) {Comment("Îøèáêà! SL íå ìîæåò áûòü ìåíåå ",MinLevel);
Print("Îøèáêà! SL íå ìîæåò áûòü ìåíåå ",MinLevel);
Alert("Îøèáêà! SL íå ìîæåò áûòü ìåíåå ",MinLevel);
return(0);}
}
// ============================================================================================================================
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
---