Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
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
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%
Matrix_v1.31
//+----------------------------------------------------------------------------+
//| Àâòîð : Áîðèñ Ñåäîâ |
//| E-mail : boris-sedov@yandex.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 23.12.2008 |
//| Îïèñàíèå : Ìàòðèöà, äëÿ ìîäåëèðîâàíèÿ âèðòóàëüíûõ ÒÑ, à òàêæå äëÿ ñîçäàíèÿ|
//| àâòîíîìíûõ îïòèìèçàòîðîâ ýêñïåðòîâ ëþáîé ñëîæíîñòè. |
//+----------------------------------------------------------------------------+
#property copyright "Copyright © 2009, Boris Sedov ( boris-sedov@yandex.ru )."
#property link "boris-sedov@yandex.ru"
//----- Âêëþ÷åíèå, âûêëþ÷åíèå âèçóàëèçàöèè âèðòóàëüíîé òîðãîâëè (âûâîä íà ãðàôèê â æóðíàë è â ôàéë HTML-îò÷åò) âêë. TRUE âûêë. FALSE
extern bool Visualization=TRUE; //- Åñëè âêëþ÷åí òîëüêî Visualization=TRUE; òî âûâîä áóäåò òîëüêî íà ãðàôèê.
//----- Âêëþ÷åíèå, âûêëþ÷åíèå âûâîäà â æóðíàë) âêë. TRUE âûêë. FALSE. !!! Òîëüêî ïðè âêëþ÷åííîì Visualization=TRUE;
extern bool Jurnal_Print=TRUE;
//----- Âêëþ÷åíèå, âûêëþ÷åíèå âûâîäà â ôàéë HTML-îò÷åò) âêë. TRUE âûêë. FALSE !!! Òîëüêî ïðè âêëþ÷åííîì Visualization=TRUE;
extern bool File_Print=TRUE;
//- HTML-îò÷åò ñäåñü - êàòàëîã_òåðìèíàëà\experts\files èëè (êàòàëîã_òåðìèíàëà\tester\files) - Virtual_trade.html
//----- Âêë., Âûêë. ñîâìåñòíîé ðàáîòû âñåõ ñèñòåì. Åñëè TRUE òî êàæäàÿ ÒÑ âèäèò ÷óæèå îðäåðà è ìîæåò âûïîëíÿòü ñ íèìè ëþáûå òîðãîâûå äåéñòâèÿ
//----- è âñå ÒÑ ðàáîòàþò ñ îäíèì áàëàíñîì, à òàêæå â æóðíàëå è â ôàéëå âñå îïåðàöèè ïðîõîäÿò ñ ïðåôèêñîì "0".
//----- Åñëè FALSE òî êàæäàÿ ÒÑ âèäèò òîëüêî ñâîè îðäåðà, è ðàáîòàåò ñî ñâîèì îòäåëüíûì áàëàíñîì.
extern bool TS_Friendship=FALSE;
//----- Îáùåå êîëè÷åñòâî èñïîëüçóåìûõ ìîäåëåé ÒÑ îò 1 äî ~ Äàæå åñëè èñïîëüçóåòñÿ òîëüêî îäíà âñå ðàâíî íóæíî óêàçàòü îáùåå êîëè÷åñòâî ÒÑ
extern int TS_SUM=3;
//---- Ìàêñèìàëüíîå îáùåå êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ, ðàçðåøîííîå áðîêåðîì
extern int MAX_Orders=0;
/*
Åñëè çàïóñòèòü ýòó ïðîãó íà äåìî, íà ðåàëå èëè íà òåñòåðå îíà áóäåò âåñòè âèðòóàëüíóþ òîðãîâëþ
ïî çàëîæåííûì â íå¸ òîðãîâûì ñòðàòåãèÿì.
Î ïðèêëàäíîì èñïîëüçîâàíèè ýòîé ñèñòåìû íàïèñàíî â âåòêå "Èñêóñòâåííûé èíòåëëåêò" - http://forum.alpari.ru/thread44003.html
Âíèìàíèå!!! Âñå òåñòû ïðîâîäèòü èëè ïî âñåì òèêàì èëè ïî êîíòðîëüíûì òî÷êàì íî íå ïî öåíàì îòêðûòèÿ.
Ïåðåèìåíóéòå íàçâàíèÿ âñåõ óêàçàííûõ ôóíêöèé âñòàâëÿåìîãî ýêñïåðòà â íàçâàíèÿ èõ âèðòóàëüíûõ êîïèé.
Íèæå ïåðå÷èñëåíû âñå ýòè ôóíêöèè.
GetLastError_v - GetLastError
OrderSend_v - OrderSend
OrderClose_v - OrderClose
OrderCloseBy_v - OrderCloseBy
OrderDelete_v - OrderDelete
OrderModify_v - OrderModify
OrderSelect_v - OrderSelect
Ïðèìåð:
Áûëî - OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,price_los,0,0,MagicNumbers,0,Blue);
Ñòàëî - OrderSend_v(Symbol(),OP_BUY,Obyem,Ask,3,price_los,0,0,MagicNumbers,0,Blue);
Âî âñåõ ôóíêöèÿõ ìîæíî ïðîïóñêàòü ïîñëåäíèé ïàðàìåòð
â äàííîì ñëó÷àå ìîæíî íå óêàçûâàòü öâåò !
òîãäà áóäåò òàê - OrderSend_v(Symbol(),OP_BUY,Obyem,Ask,3,price_los,0,0,MagicNumbers,0);
Ñëåäóþùèå ôóíêöèè ïåðåèìåíóéòå â ìàññèâû.
OrdersTotal_v[TS_number] - OrdersTotal()
OrdersHistoryTotal_v[TS_number] - OrdersHistoryTotal()
AccountBalance_v[TS_number] - AccountBalance()
Ïðèìåð:
Áûëî - OrdersTotal()
Ñòàëî - OrdersTotal_v[TS_number]
À ñëåäóþùèå ôóíêöèè íóæíî ïåðåèìåíîâàòü â ïåðåìåííûå
OrderTicket_v - OrderTicket()
OrderSymbol_v - OrderSymbol()
OrderType_v - OrderType()
OrderLots_v - OrderLots()
OrderComment_v - OrderComment()
OrderMagicNumber_v - OrderMagicNumber()
OrderOpenTime_v - OrderOpenTime()
OrderOpenPrice_v - OrderOpenPrice()
OrderStopLoss_v - OrderStopLoss()
OrderTakeProfit_v - OrderTakeProfit()
OrderCloseTime_v - OrderCloseTime()
OrderClosePrice_v - OrderClosePrice()
OrderProfit_v - OrderProfit_v()
OrderCommission_v - OrderCommission()
OrderExpiration_v - OrderExpiration()
OrderPrint_v - OrderPrint()
OrderSwap_v - OrderSwap()
Ïðèìåð:
Áûëî - OrderTicket();
Ñòàëî - OrderTicket_v;
Åñëè â ýêñïåðòå èñïîëüçóþòñÿ ôóíêöèè init() è deinit() òî èõ ñëåäóåò òàêæå ïåðåèìåíîâàòü â init_v() è deinit_v()
è âûçûâàòü èç ðåàëüíûõ ôóíêöèé init() è deinit(), ýòî äëÿ òîãî ÷òîáû óïðîñòèòü ìîäåëèðîâàíèå ïðè íàëè÷èè â ìàòðèöå
ñðàçó íåñêîëüêèõ âèðòóàëüíûõ ìîäåëåé êàêèõ òî ýêñïåðòîâ ñ ðàçíûìè ôóíêöèÿìè init_v() è deinit_v().
Ìîæíî ïðèñâîèòü êàæäîé ôóíêöèè ïðåôèêñ ïðèíàäëåæíîñòè ê òîé èëè èíîé òîðãîâîé ìîäåëè. Íàïðèìåð: init_BAS_Trader() è ò. ä.
Ýòî óäîáíî åùå òåì ÷òî âñå ïåðåìåííûå îáúÿâëåííûå â ïîëó÷åííûõ init_v() è deinit_v() íå êîíôëèêòóþò ïðè ñîâïàäåíèè èìåí
òàê êàê îíè ëîêàëüíû. Òàêæå ñëåäóåò ïîñòóïèòü è ñ ôóíêöèåé start(), òî åñòü ïåðåèìåíîâàòü å¸, à çà òåì âûçûâàòü èç ðåàëüíîé start().
Âñå ýòî ÿ ïðîäåìîíñòðèðîâàë íèæå.
*/
//--------------------------------------------------------------------------------------------------------------------
//---- Ãëîáàëüíûå ïåðåìåííûå ìîäóëÿ AI
int a;
double s;
bool TS1,TS2,TS1_v,TS2_v,TS3_v;
string f;
datetime g;
color h;
//--------------------------
//---- Ãëîáàëüíûå ïåðåìåííûå Ìîäóëÿ TS1 ïåðâîé òîðãîâîé ñèñòåìû
//--------------------------
//---- Ãëîáàëüíûå ïåðåìåííûå ìàòðèöè
int ticket_vs,ticket_v1[1000],ticket_v2[1000],OrderType_v1[1000],OrderType_v2[1000],magic_v1[1000],magic_v2[1000],POS_v1,POS_v2,POS_Svobodn[1000],POS_Svob,Vsego_POS_Svob,last_error_v,TS_num[1000];
double volume_v1[1000],volume_v2[1000],OrderOpenPrice_v1[1000],OrderOpenPrice_v2[1000],stoploss_v1[1000],stoploss_v2[1000],takeprofit_v1[1000],takeprofit_v2[1000],OrderClosePrice_v2[1000],OrderProfit_v1[1000],OrderProfit_v2[1000];
bool q3434;
string symbol_v1[1000],symbol_v2[1000],comment_v1[1000],comment_v2[1000],Visual_Loss[1000],Visual_Profit[1000],Visual_Open[1000];
datetime OrderOpenTime_v1[1000],OrderOpenTime_v2[1000],OrderCloseTime_v2[1000],expiration_v1[1000];
color Color_v1[1000];
int OrderTicket_v;
string OrderSymbol_v;
int OrderType_v;
double OrderLots_v;
string OrderComment_v;
int OrderMagicNumber_v;
datetime OrderOpenTime_v;
double OrderOpenPrice_v;
double OrderStopLoss_v;
double OrderTakeProfit_v;
datetime OrderCloseTime_v;
double OrderClosePrice_v;
double OrderProfit_v;
double OrderCommission_v;
datetime OrderExpiration_v;
string OrderPrint_v;
double OrderSwap_v;
int POS_slkt,TS_number;
double AccountBalance_v[10000];
int OrdersTotal_v[10000];
int OrdersHistoryTotal_v[10000];
bool Work=true;
bool File_POS=true;
int File_POS_num=1;
//----------------------------------------------------------------------------------------------------------------------
//------------- BAS-Trader_v2.50 ------- èëè äðóãîé ýêñïåðò ëþáîé ñëîæíîñòè --------------------------------------------
//+----------------------------------------------------------------------------+
//| Àâòîð : Áîðèñ Ñåäîâ |
//| E-mail : boris-sedov@yandex.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 20.12.2008 |
//| Îïèñàíèå : Ðàáîòà ïî ñèãíàëàì äâóõ MA. |
//+----------------------------------------------------------------------------+
//---- Ââîä ïåðåìåííûõ
//----
//---- Ïåðâîíà÷àëüíûé îáúåì
double Obyem=0.1;
//---- MagicNumber, îïîçíàâàòåëüíûé íîìåð, äëÿ îïðåäåëåíèÿ îðäåðîâ ñâîé-÷óæîé
int MagicNumbers=141208;
//---- Ïåðèîäû MA
extern int Per_ma1=8;
extern int Per_ma2=19;
//---- Øèðèíà Ðàçáåãà 18
extern int Shyrina_r=18;
//---- Ðàçìåð ÑÒÎÏÎÂ â ïóíêòàõ
extern int StopLos=1010;
//---- Ðàçìåð Òðåéëèíã Ñòîïîâ â ïóíêòàõ 170
extern int TrailingStop=860;
//---- Ðàçìåð Ïðîôèòà â ïóíêòàõ
extern int Profit=1090;
//---- Êîýôôèöèåíò, õàðàêòåðèçóåò îòíîøåíèå îáåìà ê áàëàíñó
extern double Koefficient1=0.633;
//---- Ìîäóëü óïðàâëåíèÿ ýêñïåðòîì
//---- Âêëþ÷åíèå-âûêëþ÷åíèå ðàáîòû ñ îáúåìàìè: âêë.-TRUE âûêë.-FALSE
bool Obyemy_X=TRUE;
//----------------------------------
//---- Äðóãèå ïåðåìåííûå
int a1=10,modul=1,stepen=1,New_order_isp,New_order_otl,Ticket,Modul_otl,Modul_isp,Modul_new,Ticket_otl,Ticket_isp,Stepen_otl,Stepen_isp,Stepen_new,Napr_otl,Napr_isp,Napr_new,Udal_otl,N_Line,prib=1;
int Stopy_new=12,Nepreryvnye,Trend,ticket,ticket2;
double Lots,Lots_otl,price_new,Asks,Startovyi_balans,Startovyi_Obyem,Obyem_raschetn,LOTSTEP;
datetime OrderCloseTimes;
string N_Line_Str,Str_Trend;
bool Razbeg=FALSE,Pervyi_proxod=TRUE;
int vvv,P_Order,P_Trend=100;
int Los_Buy=0,Normaling;
int Los_Sell=0;
//-Åùå îäèí ïðîñòåíüêèé ýêñïåðòèê äëÿ ïðèìåðà. Âíèìàíèå!!! âî âðåìÿ êîìïèëÿöèè âîçìîæíû îøèáêè èç çà ñîâïàäåíèÿ èìåí ãëîáàëüíûõ ïåðåìåííûõ
//-- Ãëîáàëüíûå ïàðàìåòðû
int ticket3;
bool start_new=true;
string order_pr;
bool Start_Close_Delete=FALSE;
//----------------------------------------------------------------------------------------------------------------------
//- À òåïåðü ïîñ÷èòàåì â óìå.
//+------------------------------------------------------------------+
//| Ôóíêöèÿ èíèöèàëèçàöèè ìàòðèöè |
//+------------------------------------------------------------------+
int init()
{
//----
for(int cicl=0; cicl<=TS_SUM; cicl++)AccountBalance_v[cicl]=AccountBalance(); //- Ââîä ïåðâîíà÷àëüíîãî áàëàíñà
if(Visualization)
{
if(File_Print)
{
int handle;
handle=FileOpen("Virtual_trade.html", FILE_CSV | FILE_WRITE, ' ');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
FileWrite(handle,"<HTML>");
FileWrite(handle,"<HEAD>");
FileWrite(handle,"<META HTTP-EQUIV=\"Content-Type\"");
FileWrite(handle,"CONTENT=\"text/html; CHARSET=Windows-1251\">");
FileWrite(handle,"<TITLE>Ðåçóëüòàòû</TITLE>");
FileWrite(handle,"</HEAD>");
FileWrite(handle,"<BODY>");
FileWrite(handle,"<div align=center>");
FileWrite(handle,"<br><H2>Îò÷åò çà ",TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES),"</H2><br>");
FileWrite(handle,"<table width=100% cellspacing=1 cellpadding=3 border=0>");
FileWrite(handle," ");
FileWrite(handle,"<tr bgcolor=\"#C0C0C0\" align=right><td>¹</td><td>¹ ÒÑ</td><td>Âðåìÿ</td><td>Òèï</td><td>Îðäåð</td><td>Îáúåì</td><td>Ñèìâîë</td><td>Öåíà</td><td>S / L</td><td>T / P</td><td>Ïðèáûëü</td><td>Áàëàíñ</td></tr>");
FileClose(handle);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äå èíèöèàëèçàöèè ìàòðèöè |
//+------------------------------------------------------------------+
int deinit()
{
//----
int cikl5;
if(Visualization)
{
if(File_Print)
{
int handle;
handle=FileOpen("Virtual_trade.html", FILE_CSV | FILE_READ | FILE_WRITE, ' ');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
FileWrite(handle," ");
FileWrite(handle,"</table></div></BODY></HTML>");
FileClose(handle);
}
}
if(TS_Friendship==FALSE)
{
OrdersTotal_v[0]=0;
for(int cicl=1; cicl<=TS_SUM; cicl++) OrdersTotal_v[0]+=OrdersTotal_v[cicl];
}
for(cikl5=0;cikl5<1000;cikl5++)
{
if(OrdersTotal_v[0]==0 || cikl5==POS_v1) break;
if(ticket_v1[cikl5]==0) continue;
ObjectDelete(Visual_Loss[cikl5]);
ObjectDelete(Visual_Profit[cikl5]);
ObjectDelete(Visual_Open[cikl5]);
}
WindowRedraw();
if(Jurnal_Print)
{
if(!TS_Friendship) for(cicl=1; cicl<=TS_SUM; cicl++)Print("AccountBalance_v ÒÑ-",cicl," = ",AccountBalance_v[cicl]);
else Print("AccountBalance_v ÒÑ-",0," = ",AccountBalance_v[cicl]);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ start() ìàòðèöè |
//+------------------------------------------------------------------+
int start()
{
//----
//---- Ìîäóëü ñîïðîâîæäåíèÿ îðäåðîâ "Ðàáîòà ñåðâåðà" -----------------------------------------------
//---- Ëîêàëüíûå ïåðåìåííûå
int cikl1,cikl2,POS_v3;
string Name_Close,Name_Close_Line;
color Color;
//--------------------------
if(TS_Friendship==FALSE)
{
OrdersTotal_v[0]=0;
for(int cicl=1; cicl<=TS_SUM; cicl++) OrdersTotal_v[0]+=OrdersTotal_v[cicl];
}
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersTotal_v[0]==0 || cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0) continue;
if(OrderType_v1[cikl1]==0)
{
if(Bid<=stoploss_v1[cikl1] && stoploss_v1[cikl1]!=0)
{
OrderClosePrice_v2[POS_v2]=stoploss_v1[cikl1];
OrderProfit_v2[POS_v2]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], OrderClosePrice_v2[POS_v2]);
loss_profit( cikl1, Color_v1[cikl1], "stop loss #" );
continue;
}
if(Bid>=takeprofit_v1[cikl1] && takeprofit_v1[cikl1]!=0)
{
OrderClosePrice_v2[POS_v2]=takeprofit_v1[cikl1];
OrderProfit_v2[POS_v2]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], OrderClosePrice_v2[POS_v2]);
loss_profit( cikl1, Color_v1[cikl1], "take profit #" );
continue;
}
OrderProfit_v1[cikl1]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], Bid);
}
if(OrderType_v1[cikl1]==1)
{
if(Ask>=stoploss_v1[cikl1] && stoploss_v1[cikl1]!=0)
{
OrderClosePrice_v2[POS_v2]=stoploss_v1[cikl1];
OrderProfit_v2[POS_v2]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], OrderClosePrice_v2[POS_v2]);
loss_profit( cikl1, Color_v1[cikl1], "stop loss #" );
continue;
}
if(Ask<=takeprofit_v1[cikl1] && takeprofit_v1[cikl1]!=0)
{
OrderClosePrice_v2[POS_v2]=takeprofit_v1[cikl1];
OrderProfit_v2[POS_v2]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], OrderClosePrice_v2[POS_v2]);
loss_profit( cikl1, Color_v1[cikl1], "take profit #" );
continue;
}
OrderProfit_v1[cikl1]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], Ask);
}
if(OrderType_v1[cikl1]>1 && expiration_v1[cikl1]<=TimeCurrent() && expiration_v1[cikl1]>0)
{
OrderDelete_v(ticket_v1[cikl1],Black,TS_num[cikl1]);
continue;
}
if(OrderType_v1[cikl1]==2)
{
if(Ask<=OrderOpenPrice_v1[cikl1])
{
Open_otl_order( cikl1, 0, Color_v1[cikl1], ", buy " );
continue;
}
}
if(OrderType_v1[cikl1]==3)
{
if(Bid>=OrderOpenPrice_v1[cikl1])
{
Open_otl_order( cikl1, 1, Color_v1[cikl1], ", sell " );
continue;
}
}
if(OrderType_v1[cikl1]==4)
{
if(Ask>=OrderOpenPrice_v1[cikl1])
{
Open_otl_order( cikl1, 0, Color_v1[cikl1], ", buy " );
continue;
}
}
if(OrderType_v1[cikl1]==5)
{
if(Bid<=OrderOpenPrice_v1[cikl1])
{
Open_otl_order( cikl1, 1, Color_v1[cikl1], ", sell " );
continue;
}
}
}
if(Visualization)
{
if(Vsego_POS_Svob>0)
{
cikl1=POS_Svob;
while(true)
{
if(cikl2==Vsego_POS_Svob) break;
cikl2++;
if(cikl1==0) cikl1=999;
else cikl1--;
POS_v3=POS_Svobodn[cikl1];
ObjectDelete(Visual_Loss[POS_v3]);
ObjectDelete(Visual_Profit[POS_v3]);
ObjectDelete(Visual_Open[POS_v3]);
}
}
WindowRedraw();
}
//--------------------------------------------------------------------------------------------------
RefreshRates();
//---- Ìîäóëü AI, ìîçã íàøåãî ðîáîòà ------------------------------------------------------------
//--- Çäåñü âñå åãî òåëî
//---- Ëîêàëüíûå ïåðåìåííûå
int a11;
double s11;
bool p11;
string f11;
datetime g11;
color h11;
//- Óïðàâëåíèå Òîðãîâûìè ñòðàòåãèÿìè
TS1=FALSE;
TS2=FALSE;
TS1_v=TRUE; //- âêë., âûêë. ÒÑ
TS2_v=FALSE; //- âêë., âûêë. ÒÑ
TS3_v=FALSE; //- À ýòî ÒÑ äëÿ ïðîâåðêè è äåìîíñòðàöèè ðàáîòû â ðàçíûõ ðåæèìàõ "TS_Friendship", ÷åðåç íåêîòîðîå âðåìÿ
//- ïîñëå çàïóñêà ïûòàåòñÿ çàêðûâàòü è óäàëÿòü âñå â ïîäðÿä îðäåðà.
//-----------------------------------------------------------------------------------------------------------------
if(TS1==TRUE)
{
}
//----------------------------------
if(TS2==TRUE)
{
}
//---------------------------------- è òàê äàëåå
//--------------------------------------------------------------------------------------------------
//---- Çäåñü áóäåò âûçâàí âèðòóàëüíûé àíàëîã ïåðâîé ÒÑ -----------
if(TS1_v==TRUE)
{
if(TS_Friendship==FALSE) TS_number=1; //- Ïîðÿäêîâûé íîìåð ÒÑ. îò 1 äî ~
BAS_Trader();
}
//-------------------------------------------------
//---- Çäåñü áóäåò âûçâàí âèðòóàëüíûé àíàëîã âòîðîé ÒÑ -----------
if(TS2_v==TRUE)
{
if(TS_Friendship==FALSE) TS_number=2; //- Ïîðÿäêîâûé íîìåð ÒÑ. îò 1 äî ~
Sar_System();
}
//-------------------------------------------------
//---- Çäåñü áóäåò âûçâàí âèðòóàëüíûé àíàëîã òðåòüåé ÒÑ -----------
if(TS3_v==TRUE)
{
if(TS_Friendship==FALSE) TS_number=3; //- Ïîðÿäêîâûé íîìåð ÒÑ. îò 1 äî ~
Zakryvalka_Udolyalka();
}
//-------------------------------------------------
//---- è ò. ä.
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ÒÑ BAS-Trader |
//+------------------------------------------------------------------+
int BAS_Trader()
{
int total,cikl1,Magic,Typ,Napr,Prosadka,cmd,Per_ma_Max;
double Lots_r,price_Buy_los,price_Sell_los,price_los,price_prof,OrderProfits,OrderLos,price;
color colors;
double MA1,MA2;
bool Ans=false,BUY_new=FALSE,SELL_new=FALSE;
//--------------------------------------------------------------
//---- Ïðåäâàðèò.îáðàáîòêà
if(Per_ma1>Per_ma2) Per_ma_Max=Per_ma1;
else Per_ma_Max=Per_ma2;
if(Bars < Per_ma_Max) // Íåäîñòàòî÷íî áàðîâ
{
Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
if(Work==false) // Êðèòè÷åñêàÿ îøèáêà
{
Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
//---------------------------------------------------------------
//---- Ðàáîòà ñ îáúåìàìè-----------------------------------
if(Obyemy_X==TRUE)
{
LOTSTEP=MarketInfo(Symbol(),MODE_LOTSTEP);
if(LOTSTEP<1 && LOTSTEP>0.0999) Normaling=1;
if(LOTSTEP<0.1 && LOTSTEP>0.0099) Normaling=2;
if(LOTSTEP<0.01 && LOTSTEP>0.0009) Normaling=3;
Obyem_raschetn=(AccountEquity()/10000)*Koefficient1;
Obyem=NormalizeDouble(Obyem_raschetn,Normaling);
if(Obyem<MarketInfo(Symbol(),MODE_MINLOT))
{
Obyem_raschetn=MarketInfo(Symbol(),MODE_MINLOT);
Obyem=NormalizeDouble(Obyem_raschetn,Normaling);
}
if(Obyem>MarketInfo(Symbol(),MODE_MAXLOT))
{
Obyem_raschetn=MarketInfo(Symbol(),MODE_MAXLOT);
Obyem=NormalizeDouble(Obyem_raschetn,Normaling);
}
}
//---------------------------------------------------------
//---- Îïðåäåëÿåì òðåíä-------------------------------
HideTestIndicators(true);
MA1 = iMA(NULL,0,Per_ma1,0,MODE_SMA,PRICE_MEDIAN,0);
MA2 = iMA(NULL,0,Per_ma2,0,MODE_SMA,PRICE_MEDIAN,0);
HideTestIndicators(false);
if(MA1>MA2+Shyrina_r*Point || MA1<MA2-Shyrina_r*Point) Razbeg=TRUE;
if(MA1>MA2 && Razbeg==FALSE) { Trend=0; Razbeg=FALSE; }
if(MA1<MA2 && Razbeg==FALSE) { Trend=0; Razbeg=FALSE; }
if(MA1>MA2 && Razbeg==TRUE) { Trend=1; Razbeg=FALSE; }
if(MA1<MA2 && Razbeg==TRUE) { Trend=2; Razbeg=FALSE; }
//---------------------------------------------------
//---- Ïðîâåðêà óñëîâèé âõîäà --------
if(P_Trend==100) P_Trend=Trend;
if(Trend==0 && P_Trend!=0) P_Trend=0;
if(Trend==1 && P_Trend!=1) { BUY_new=TRUE; P_Trend=1; }
if(Trend==2 && P_Trend!=2) { SELL_new=TRUE; P_Trend=2; }
//------------------------------------------------
//---- Îòêðûâàåì ïîçèöèè------------------------------
if(BUY_new==TRUE)
{
while(true)
{
RefreshRates();
price_los=Ask-StopLos*Point;
price_prof=Ask+Profit*Point;
ticket=OrderSend_v(Symbol(),OP_BUY,Obyem,Ask,30,price_los,price_prof,0,MagicNumbers,0,Blue);
if (ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð BUY ",ticket);
break; // Ïðîäîëæåíèå
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start() ïðè íåïðåîäîëèìîé îøèáêè
}
while(true)
{
RefreshRates();
price_los=Ask-StopLos*Point;
ticket2=OrderSend_v(Symbol(),OP_BUY,Obyem,Ask,30,price_los,0,0,MagicNumbers,0,Blue);
if (ticket2 > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð BUY ",ticket2);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start() ïðè íåïðåîäîëèìîé îøèáêè
}
}
if(SELL_new==TRUE)
{
while(true)
{
RefreshRates();
price_los=Bid+StopLos*Point;
price_prof=Ask-Profit*Point;
ticket=OrderSend_v(Symbol(),OP_SELL,Obyem,Bid,30,price_los,price_prof,0,MagicNumbers,0,Red);
if (ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð SELL ",ticket);
break; // Ïðîäîëæåíèå
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start() ïðè íåïðåîäîëèìîé îøèáêè
}
while(true)
{
RefreshRates();
price_los=Bid+StopLos*Point;
ticket2=OrderSend_v(Symbol(),OP_SELL,Obyem,Bid,30,price_los,0,0,MagicNumbers,0,Red);
if (ticket2 > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð SELL ",ticket2);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start() ïðè íåïðåîäîëèìîé îøèáêè
}
}
//------------------------------------------------------------------------
//---- Ïðîâåðÿåì è ïîäâèãàåì Ëîñû íà âñåõ îðäåðàõ-------------------
//----
int cmd111,error111,cnt111;
double StopLoss111,OpenPrice111;
//----
total=OrdersTotal_v[TS_number];
for(cnt111=0;cnt111<total;cnt111++)
{
if(total==0) break; // Îòêðûòûõ îðäåðîâ íåò âûõîäèì èç öèêëà ìîäèôèêàöèè
if(OrderSelect_v(cnt111, SELECT_BY_POS, MODE_TRADES)==true)
{
if(OrderMagicNumber_v!=MagicNumbers) continue;
StopLoss111=OrderStopLoss_v;
OpenPrice111=OrderOpenPrice_v;
cmd111=OrderType_v;
if(cmd111==OP_BUY || cmd111==OP_SELL)
{
if(cmd111==OP_BUY)
{
if(Bid-OpenPrice111>Point*Profit)
{
if(Bid-StopLoss111>Point*TrailingStop)
{
price_los=Bid-TrailingStop*Point;
if(price_los<StopLoss111+5*Point && price_los>StopLoss111-5*Point) continue; // Íîâàÿ èòåðàöèÿ, öåíà ïî÷òè íå èçìåíèëàñü
while(true)
{
Ans=OrderModify_v(OrderTicket_v,OrderOpenPrice_v,price_los,OrderTakeProfit_v,0,Blue);
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Ìîäèôèöèðîâàí îðäåð BUY ",OrderTicket_v);
break; // Âûõîä èç öèêëà
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
break; // Âûõîäèì èç öèêëà è ïðîäîëæàåì ïåðåáîð îðäåðîâ
}
}
}
}
else
{
if(OpenPrice111-Ask>Point*Profit)
{
if(StopLoss111-Ask>Point*TrailingStop)
{
price_los=Ask+TrailingStop*Point;
if(price_los<StopLoss111+5*Point && price_los>StopLoss111-5*Point) continue; // Íîâàÿ èòåðàöèÿ, öåíà ïî÷òè íå èçìåíèëàñü
while(true)
{
Ans=OrderModify_v(OrderTicket_v,OrderOpenPrice_v,price_los,OrderTakeProfit_v,0,Red);
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Ìîäèôèöèðîâàí îðäåð SELL ",OrderTicket_v);
break; // Âûõîä èç öèêëà
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
break; // Âûõîäèì èç öèêëà è ïðîäîëæàåì ïåðåáîð îðäåðîâ
}
}
}
}
}
}
else Print("OrderSelect_v() âåðíóë îøèáêó - ",GetLastError_v());
}
//---------------------------------------------------------------
return(0);
}
//-------------------------------------------------------------------------------------
int Sar_System() //- Ïðîñòî ñêîïèðîâàë âñþ ôóíêöèþ ñòàðò âòîðîãî ýêñïåðòà è ïåðåèìåíîâàë âñå íóæíûå ôóíêöèè. Âñå ïðîñòî!
{
//----
bool BUY_new,SELL_new;
double SAR1,SAR2;
SAR1=iSAR(Symbol(),0,0.05,0.5,0);
if(start_new==true && SAR1<Bid) { order_pr="BUY"; start_new=false; }
if(start_new==true && SAR1>Bid) { order_pr="SELL"; start_new=false; }
if(order_pr=="SELL" && SAR1<=Bid) { BUY_new=TRUE; }
if(order_pr=="BUY" && SAR1>=Bid) { SELL_new=TRUE; }
if(BUY_new==TRUE)
{
OrderClose_v(ticket3,0.1,Ask,10,Red);
ticket3=OrderSend_v(Symbol(),OP_BUY,0.1,Ask,10,0,0,0,0,0,Blue);
order_pr="BUY";
}
if(SELL_new==TRUE)
{
OrderClose_v(ticket3,0.1,Bid,10,Red);
ticket3=OrderSend_v(Symbol(),OP_SELL,0.1,Bid,10,0,0,0,0,0,Red);
order_pr="SELL";
}
//----
return(0);
}
//+------------------------------------------------------------------+
int Zakryvalka_Udolyalka()
{
if(ticket_vs>20) Start_Close_Delete=TRUE;
if(Start_Close_Delete==TRUE)
{
int total=OrdersTotal_v[TS_number];
for(int cikl=0; cikl<total; cikl++)
{
if(OrdersTotal_v[TS_number]==0) break;
if(OrderSelect_v(cikl, SELECT_BY_POS, MODE_TRADES)==true)
{
int cmd111=OrderType_v;
bool result;
if(cmd111==OP_BUY)
{
while(true)
{
result=OrderClose_v(OrderTicket_v,OrderLots_v,Bid,30,Goldenrod);
if (result==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð BUY ",OrderTicket_v);
break; // Âûõîä èç öèêëà
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
break; // Âûõîäèì èç öèêëà è ïðîäîëæàåì ïåðåáîð îðäåðîâ
}
}
if(cmd111==OP_SELL)
{
while(true)
{
result=OrderClose_v(OrderTicket_v,OrderLots_v,Ask,30,Goldenrod);
if (result==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð SELL ",OrderTicket_v);
break; // Âûõîä èç öèêëà
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
break; // Âûõîäèì èç öèêëà è ïðîäîëæàåì ïåðåáîð îðäåðîâ
}
}
else
{
while(true)
{
result=OrderDelete_v(OrderTicket_v);
if (result==true) // Ïîëó÷èëîñü :)
{
Alert ("Óäàëåí îðäåð ",OrderTicket_v);
break; // Âûõîä èç öèêëà
}
if (Fun_Error(GetLastError_v())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
break; // Âûõîäèì èç öèêëà è ïðîäîëæàåì ïåðåáîð îðäåðîâ
}
}
}
else Print("OrderSelect_v() 11 âåðíóë îøèáêó - ",GetLastError_v());
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Ôóíêöèÿ "File_Save" ôîðìåðóåò HTML îò÷åò |
//+------------------------------------------------------------------+
int File_Save( int Num_TS, datetime data, string cmd, int tiket, double volume, string symbol, double price, double SL=0, double TP=0, double OrderProf=0, double Balance=0 )
{
string data_str=TimeToStr(data,TIME_DATE|TIME_MINUTES);
int handle;
string fst1,fst2="</td><td>",fst4="</td><td colspan=2>",END="</td></tr>",END_text,SL_str,TP_str,price_str;
if(File_POS==true) fst1="<tr align=right><td>";
else fst1="<tr bgcolor=\"#E0E0E0\" align=right><td>";
if(Balance==0) END_text="</td><td colspan=2></td></tr>";
else END_text=StringConcatenate(fst2,OrderProf,fst2,Balance,END);
price_str=DoubleToStr(price, 5);
if(SL==0) SL_str=" ";
else SL_str=DoubleToStr(SL, 5);
if(TP==0) TP_str=" ";
else TP_str=DoubleToStr(TP, 5);
handle=FileOpen("Virtual_trade.html", FILE_CSV | FILE_READ | FILE_WRITE, ' ');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
FileWrite(handle,fst1,File_POS_num,fst2,Num_TS,fst2,data_str,fst2,cmd,fst2,tiket,fst2,volume,fst2,symbol,fst2,price_str,fst2,SL_str,fst2,TP_str,END_text);
FileClose(handle);
File_POS_num++;
if(File_POS==true)File_POS=false;
else File_POS=true;
}
return(0);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "GetLastError" |
//+------------------------------------------------------------------+
int GetLastError_v()
{
int last_error;
last_error=last_error_v;
last_error_v=0;
return(last_error);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âñïîìîãàòåëüíàÿ ôóíêöèÿ âûçûâàåòñÿ äëÿ ðàñ÷åòà Ïðîôèòîâ |
//+------------------------------------------------------------------+
double OrderProfit_Raschet(int type, string symbol, double lots, double open_price, double close_price)
{
double Profit_Raschet;
double LOTSIZE=MarketInfo(Symbol(),MODE_LOTSIZE);
if(symbol=="EURUSD")
{
if(type==0){ Profit_Raschet=LOTSIZE*lots*(close_price-open_price); return(Profit_Raschet); }
else { Profit_Raschet=LOTSIZE*lots*(open_price-close_price); return(Profit_Raschet); }
}
return(Profit_Raschet);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âñïîìîãàòåëüíàÿ ôóíêöèÿ âûçûâàåòñÿ äëÿ çàêðûòèÿ Ëîññîâ è Ïðîôèòîâ|
//+------------------------------------------------------------------+
bool loss_profit(int cikl1, color Color, string stop )
{
//---- Ëîêàëüíûå ïåðåìåííûå
int LOTSIZE;
string Name_Close,Name_Close_Line,Type_print;
//--------------------------
LOTSIZE=MarketInfo(Symbol(),MODE_LOTSIZE);
ticket_v2[POS_v2]=ticket_v1[cikl1];
symbol_v2[POS_v2]=symbol_v1[cikl1];
OrderType_v2[POS_v2]=OrderType_v1[cikl1];
volume_v2[POS_v2]=volume_v1[cikl1];
comment_v2[POS_v2]=comment_v1[cikl1];
magic_v2[POS_v2]=magic_v1[cikl1];
OrderOpenTime_v2[POS_v2]=OrderOpenTime_v1[cikl1];
OrderOpenPrice_v2[POS_v2]=OrderOpenPrice_v1[cikl1];
stoploss_v2[POS_v2]=stoploss_v1[cikl1];
takeprofit_v2[POS_v2]=takeprofit_v1[cikl1];
OrderCloseTime_v2[POS_v2]=TimeCurrent();
AccountBalance_v[TS_num[cikl1]]+=OrderProfit_v2[POS_v2];
if(Visualization)
{
if(Jurnal_Print)Print(stop,ticket_v2[POS_v2]," at ",OrderClosePrice_v2[POS_v2]," (",Bid,"/",Ask,")");
if(stop=="stop loss #") Type_print="s/l";
if(stop=="take profit #") Type_print="t/p";
double Ord_prof=NormalizeDouble(OrderProfit_v2[POS_v2],2);
double AccountBal=NormalizeDouble(AccountBalance_v[TS_num[cikl1]],2);
if(File_Print)File_Save(TS_num[cikl1], OrderCloseTime_v2[POS_v2], Type_print, ticket_v2[POS_v2], volume_v2[POS_v2], symbol_v2[POS_v2], OrderClosePrice_v2[POS_v2], stoploss_v2[POS_v2], takeprofit_v2[POS_v2] ,Ord_prof ,AccountBal );
if(Color==0) Color=Goldenrod;
Name_Close=DoubleToStr(ticket_v2[POS_v2], 0)+"Close";
ObjectCreate(Name_Close, OBJ_ARROW, 0, OrderCloseTime_v2[POS_v2], OrderClosePrice_v2[POS_v2]);
ObjectSet(Name_Close, OBJPROP_ARROWCODE, 3);
ObjectSet(Name_Close, OBJPROP_COLOR, Goldenrod);
if(OrderType_v1[cikl1]==0) Color=Blue;
else Color=Red;
Name_Close_Line=DoubleToStr(ticket_v2[POS_v2], 0)+"Close_Line";
ObjectCreate(Name_Close_Line, OBJ_TREND, 0, OrderOpenTime_v2[POS_v2], OrderOpenPrice_v2[POS_v2], OrderCloseTime_v2[POS_v2], OrderClosePrice_v2[POS_v2]);
ObjectSet(Name_Close_Line, OBJPROP_RAY, False);
ObjectSet(Name_Close_Line, OBJPROP_STYLE, 2);
ObjectSet(Name_Close_Line, OBJPROP_COLOR, Color);
ObjectDelete(Visual_Loss[cikl1]);
ObjectDelete(Visual_Profit[cikl1]);
ObjectDelete(Visual_Open[cikl1]);
WindowRedraw();
}
ticket_v1[cikl1]=0;
POS_Svobodn[POS_Svob]=cikl1;
Vsego_POS_Svob++;
POS_Svob++;
if(POS_Svob==1000) POS_Svob=0;
POS_v2++;
if(POS_v2==1000) POS_v2=0;
OrdersTotal_v[TS_num[cikl1]]--;
OrdersHistoryTotal_v[TS_num[cikl1]]++;
if(OrdersHistoryTotal_v[TS_num[cikl1]]>1000) OrdersHistoryTotal_v[TS_num[cikl1]]=1000;
return(0);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âñïîìîãàòåëüíàÿ ôóíêöèÿ âûçûâàåòñÿ äëÿ Îòêðûòèÿ îòëîæåííûõ îðä. |
//+------------------------------------------------------------------+
bool Open_otl_order(int cikl1, int type, color Color, string tipe_str )
{
//---- Ëîêàëüíûå ïåðåìåííûå
datetime OrderOpenTime_otl;
string Name_Open,Name_Open_Line;
//--------------------------
OrderType_v1[cikl1]=type;
OrderOpenTime_otl=OrderOpenTime_v1[cikl1];
OrderOpenTime_v1[cikl1]=TimeCurrent();
if(Visualization)
{
if(Jurnal_Print)Print("order #",ticket_v1[cikl1],tipe_str,volume_v1[cikl1]," ",symbol_v1[cikl1]," is opened at ",OrderOpenPrice_v1[cikl1]);
if(File_Print)File_Save(TS_num[cikl1], OrderOpenTime_v1[cikl1], tipe_str, ticket_v1[cikl1], volume_v1[cikl1], symbol_v1[cikl1], OrderOpenPrice_v1[cikl1], stoploss_v1[cikl1], takeprofit_v1[cikl1] );
Name_Open=DoubleToStr(ticket_v1[cikl1], 0)+"Open_otl";
ObjectCreate(Name_Open, OBJ_ARROW, 0, OrderOpenTime_v1[cikl1], OrderOpenPrice_v1[cikl1]);
ObjectSet(Name_Open, OBJPROP_ARROWCODE, 1);
ObjectSet(Name_Open, OBJPROP_COLOR, Color);
Name_Open_Line=DoubleToStr(ticket_v1[cikl1], 0)+"Open_otl_Line";
ObjectCreate(Name_Open_Line, OBJ_TREND, 0, OrderOpenTime_otl, OrderOpenPrice_v1[cikl1], OrderOpenTime_v1[cikl1], OrderOpenPrice_v1[cikl1]);
ObjectSet(Name_Open_Line, OBJPROP_RAY, False);
ObjectSet(Name_Open_Line, OBJPROP_STYLE, 4);
ObjectSet(Name_Open_Line, OBJPROP_COLOR, Color);
}
return(0);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderSend" |
//+------------------------------------------------------------------+
int OrderSend_v( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration, color arrow_color=0 )
{
int POS_v,STOPLEVEL;
string Name_Open,Name_stoploss,Name_takeprofit,Name_OrderLine,Type_print;
double price_op,MAXLOT,MINLOT;
MAXLOT=MarketInfo(symbol,MODE_MAXLOT);
MINLOT=MarketInfo(symbol,MODE_MINLOT);
STOPLEVEL=MarketInfo(symbol,MODE_STOPLEVEL);
//-- Îáðàáîòêà îøèáîê
if(MAX_Orders!=0 && OrdersTotal_v[TS_number]==MAX_Orders) { last_error_v=148; return(-1); }
if(cmd==0 || cmd==2 || cmd==4) price_op=Ask;
if(cmd==1 || cmd==3 || cmd==5) price_op=Bid;
if(cmd<2)
{
if(price>price_op+slippage*Point || price<price_op-slippage*Point) { last_error_v=129; return(-1); }
}
if(cmd==2 || cmd==5)
{
if(price>price_op-STOPLEVEL*Point || price==0) { last_error_v=130; return(-1); }
}
if(cmd==3 || cmd==4)
{
if(price<price_op+STOPLEVEL*Point || price==0) { last_error_v=130; return(-1); }
}
if(cmd==0 || cmd==2 || cmd==4)
{
if(stoploss>price-STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(-1); }
if(takeprofit<price+STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(-1); }
}
if(cmd==1 || cmd==3 || cmd==5)
{
if(stoploss<price+STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(-1); }
if(takeprofit>price-STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(-1); }
}
if(volume>MAXLOT || volume<MINLOT) { last_error_v=131; return(-1); }
if(expiration<TimeCurrent()+600 && expiration>0) { last_error_v=3; return(-1); }
//-------------------
ticket_vs++;
if(Vsego_POS_Svob>0)
{
if(POS_Svob==0) POS_Svob=999;
else POS_Svob--;
POS_v=POS_Svobodn[POS_Svob];
Vsego_POS_Svob--;
}
else { POS_v=POS_v1; POS_v1++; }
//- Print(" Îòëàäêà: POS= ",POS_v," Âñåãî ñâ ïîñ= ",Vsego_POS_Svob);
ticket_v1[POS_v]=ticket_vs;
symbol_v1[POS_v]=symbol;
OrderType_v1[POS_v]=cmd;
volume_v1[POS_v]=volume;
comment_v1[POS_v]=comment;
magic_v1[POS_v]=magic;
OrderOpenTime_v1[POS_v]=TimeCurrent();
OrderOpenPrice_v1[POS_v]=price;
stoploss_v1[POS_v]=stoploss;
takeprofit_v1[POS_v]=takeprofit;
expiration_v1[POS_v]=expiration;
TS_num[POS_v]=TS_number;
OrdersTotal_v[TS_number]++;
if(Visualization)
{
Name_stoploss=DoubleToStr(ticket_vs, 0)+"l";
Name_takeprofit=DoubleToStr(ticket_vs, 0)+"t";
Name_OrderLine=DoubleToStr(ticket_vs, 0)+"OL";
if(arrow_color==0)
{
if(OrderType_v1[POS_v]==0) arrow_color=Blue;
else arrow_color=Red;
}
Color_v1[POS_v]=arrow_color;
if(OrderType_v1[POS_v]==0) Type_print=" buy ";
if(OrderType_v1[POS_v]==1) Type_print=" sell ";
if(OrderType_v1[POS_v]==2) Type_print=" buy limit ";
if(OrderType_v1[POS_v]==3) Type_print=" sell limit ";
if(OrderType_v1[POS_v]==4) Type_print=" buy stop ";
if(OrderType_v1[POS_v]==5) Type_print=" sell stop ";
if(Jurnal_Print)Print("open #",ticket_v1[POS_v],Type_print,volume_v1[POS_v]," ",symbol_v1[POS_v]," at ",OrderOpenPrice_v1[POS_v]," sl: ",stoploss_v1[POS_v]," tp: ",takeprofit_v1[POS_v]," ok");
if(File_Print)File_Save(TS_num[POS_v], OrderOpenTime_v1[POS_v], Type_print, ticket_v1[POS_v], volume_v1[POS_v], symbol_v1[POS_v], OrderOpenPrice_v1[POS_v], stoploss_v1[POS_v], takeprofit_v1[POS_v]);
Visual_Loss[POS_v]=Name_stoploss;
Visual_Profit[POS_v]=Name_takeprofit;
Visual_Open[POS_v]=Name_OrderLine;
Name_Open=DoubleToStr(ticket_vs, 0)+"Open";
ObjectCreate(Name_Open, OBJ_ARROW, 0, OrderOpenTime_v1[POS_v], price);
ObjectSet(Name_Open, OBJPROP_ARROWCODE, 1);
ObjectSet(Name_Open, OBJPROP_COLOR, arrow_color);
ObjectCreate(Name_stoploss, OBJ_TREND, 0, OrderOpenTime_v1[POS_v]-60, stoploss, OrderOpenTime_v1[POS_v], stoploss);
ObjectSet(Name_stoploss, OBJPROP_BACK, true);
ObjectSet(Name_stoploss, OBJPROP_STYLE, 3);
ObjectSet(Name_stoploss, OBJPROP_COLOR, Red);
ObjectCreate(Name_takeprofit, OBJ_TREND, 0, OrderOpenTime_v1[POS_v]-60,takeprofit, OrderOpenTime_v1[POS_v], takeprofit);
ObjectSet(Name_takeprofit, OBJPROP_BACK, true);
ObjectSet(Name_takeprofit, OBJPROP_STYLE, 3);
ObjectSet(Name_takeprofit, OBJPROP_COLOR, Red);
ObjectCreate(Name_OrderLine, OBJ_TREND, 0, OrderOpenTime_v1[POS_v]-60,price, OrderOpenTime_v1[POS_v], price);
ObjectSet(Name_OrderLine, OBJPROP_BACK, true);
ObjectSet(Name_OrderLine, OBJPROP_STYLE, 3);
ObjectSet(Name_OrderLine, OBJPROP_COLOR, Green);
}
last_error_v=0;
return(ticket_vs);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderClose" |
//+------------------------------------------------------------------+
bool OrderClose_v( int ticket, double lots, double price, int slippage, color Color=0 )
{
//---- Ëîêàëüíûå ïåðåìåííûå
int cikl1,cikl2,POS_v3;
string Name_Close,Name_Close_Line,Type_print;
double price_cl;
bool Close_order=FALSE;
//--------------------------
//-- Îáðàáîòêà îøèáîê
if(ticket==0) { last_error_v=4051; return(Close_order); }
//-------------------
if(OrderTicket_v==ticket && ticket_v1[POS_slkt]==ticket && TS_number==TS_num[POS_slkt]) cikl1=POS_slkt;
else
{
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersTotal_v[TS_number]==0 || cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v1[cikl1]==ticket) break;
}
}
if(ticket_v1[cikl1]==ticket)
{
//-- Îáðàáîòêà îøèáîê
if(OrderType_v1[cikl1]>1) { last_error_v=3; return(Close_order); }
if(OrderType_v1[cikl1]==0) price_cl=Bid;
if(OrderType_v1[cikl1]==1) price_cl=Ask;
if(price>price_cl+slippage*Point || price<price_cl-slippage*Point) { last_error_v=129; return(Close_order); }
if(lots>volume_v1[cikl1]) { last_error_v=131; return(Close_order); }
//-------------------
ticket_v2[POS_v2]=ticket_v1[cikl1];
symbol_v2[POS_v2]=symbol_v1[cikl1];
OrderType_v2[POS_v2]=OrderType_v1[cikl1];
volume_v2[POS_v2]=lots;
comment_v2[POS_v2]=comment_v1[cikl1];
magic_v2[POS_v2]=magic_v1[cikl1];
OrderOpenTime_v2[POS_v2]=OrderOpenTime_v1[cikl1];
OrderOpenPrice_v2[POS_v2]=OrderOpenPrice_v1[cikl1];
stoploss_v2[POS_v2]=stoploss_v1[cikl1];
takeprofit_v2[POS_v2]=takeprofit_v1[cikl1];
OrderCloseTime_v2[POS_v2]=TimeCurrent();
OrderClosePrice_v2[POS_v2]=price;
OrderProfit_v2[POS_v2]=OrderProfit_Raschet(OrderType_v1[cikl1], symbol_v1[cikl1], volume_v1[cikl1], OrderOpenPrice_v1[cikl1], OrderClosePrice_v2[POS_v2]);
AccountBalance_v[TS_num[cikl1]]+=OrderProfit_v2[POS_v2];
if(Visualization)
{
if(OrderType_v1[cikl1]==0) Type_print=" buy ";
if(OrderType_v1[cikl1]==1) Type_print=" sell ";
if(Jurnal_Print)Print("close #",ticket,Type_print,lots," ",symbol_v1[cikl1]," at ",OrderOpenPrice_v1[cikl1]," sl: ",stoploss_v1[cikl1]," tp: ",takeprofit_v1[cikl1]," at price ",price);
double Ord_prof=NormalizeDouble(OrderProfit_v2[POS_v2],2);
double AccountBal=NormalizeDouble(AccountBalance_v[TS_num[cikl1]],2);
if(File_Print)File_Save(TS_num[cikl1], OrderCloseTime_v2[POS_v2], "close", ticket_v2[POS_v2], volume_v2[POS_v2], symbol_v2[POS_v2], OrderClosePrice_v2[POS_v2], stoploss_v2[POS_v2], takeprofit_v2[POS_v2] ,Ord_prof ,AccountBal );
if(Color==0) Color=Goldenrod;
Name_Close=DoubleToStr(ticket_v2[POS_v2], 0)+"Close";
ObjectCreate(Name_Close, OBJ_ARROW, 0, OrderCloseTime_v2[POS_v2], OrderClosePrice_v2[POS_v2]);
ObjectSet(Name_Close, OBJPROP_ARROWCODE, 3);
ObjectSet(Name_Close, OBJPROP_COLOR, Color);
Name_Close_Line=DoubleToStr(ticket_v2[POS_v2], 0)+"Close_Line";
ObjectCreate(Name_Close_Line, OBJ_TREND, 0, OrderOpenTime_v2[POS_v2], OrderOpenPrice_v2[POS_v2], OrderCloseTime_v2[POS_v2], OrderClosePrice_v2[POS_v2]);
ObjectSet(Name_Close_Line, OBJPROP_RAY, False);
ObjectSet(Name_Close_Line, OBJPROP_STYLE, 2);
ObjectSet(Name_Close_Line, OBJPROP_COLOR, Color_v1[cikl1]);
}
if(volume_v1[cikl1]==lots)
{
ticket_v1[cikl1]=0;
if(Visualization)
{
ObjectDelete(Visual_Loss[cikl1]);
ObjectDelete(Visual_Profit[cikl1]);
ObjectDelete(Visual_Open[cikl1]);
WindowRedraw();
}
POS_Svobodn[POS_Svob]=cikl1;
Vsego_POS_Svob++;
POS_Svob++;
if(POS_Svob==1000) POS_Svob=0;
POS_v2++;
if(POS_v2==1000) POS_v2=0;
OrdersTotal_v[TS_number]--;
OrdersHistoryTotal_v[TS_number]++;
if(OrdersHistoryTotal_v[TS_number]>1000) OrdersHistoryTotal_v[TS_number]=1000;
last_error_v=0;
Close_order=TRUE;
}
else
{
volume_v1[cikl1]-=lots;
ticket_vs++;
ticket_v1[cikl1]=ticket_vs;
last_error_v=0;
Close_order=TRUE;
}
}
if(Visualization)
{
if(Vsego_POS_Svob>0)
{
cikl1=POS_Svob;
while(true)
{
if(cikl2==Vsego_POS_Svob) break;
cikl2++;
if(cikl1==0) cikl1=999;
else cikl1--;
POS_v3=POS_Svobodn[cikl1];
ObjectDelete(Visual_Loss[POS_v3]);
ObjectDelete(Visual_Profit[POS_v3]);
ObjectDelete(Visual_Open[POS_v3]);
}
}
WindowRedraw();
}
return(Close_order);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderCloseBy" |
//+------------------------------------------------------------------+
bool OrderCloseBy_v( int ticket, int opposite, color Color=0)
{
int cikl1,Pos_ticket=-10,Pos_opposite=-10,LOTSIZE;
bool CloseBy=FALSE,Close_order1,Close_order2;
double price_cl,volume_cl;
LOTSIZE=MarketInfo(Symbol(),MODE_LOTSIZE);
if(OrdersTotal_v[TS_number]==0) { last_error_v=3; return(CloseBy); }
if(ticket==0 || opposite==0) { last_error_v=3; return(CloseBy); }
for(cikl1=0;cikl1<1000;cikl1++)
{
if(cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v1[cikl1]==ticket) Pos_ticket=cikl1;
if(ticket_v1[cikl1]==opposite) Pos_opposite=cikl1;
if(Pos_ticket!=-10 && Pos_opposite!=-10) break;
}
//-- Îáðàáîòêà îøèáîê
if(Pos_ticket==-10 || Pos_opposite==-10) { last_error_v=3; return(CloseBy); }
if(symbol_v1[Pos_ticket]!=symbol_v1[Pos_opposite]) { last_error_v=3; return(CloseBy); }
if(OrderType_v1[Pos_ticket]>1 || OrderType_v1[Pos_opposite]>1) { last_error_v=3; return(CloseBy); }
if(OrderType_v1[Pos_ticket]==OrderType_v1[Pos_opposite]) { last_error_v=3; return(CloseBy); }
//-------------------
if(volume_v1[Pos_ticket]==volume_v1[Pos_opposite])
{
volume_cl=volume_v1[Pos_ticket];
}
else
{
if(volume_v1[Pos_ticket]>volume_v1[Pos_opposite]) volume_cl=volume_v1[Pos_opposite];
else volume_cl=volume_v1[Pos_ticket];
}
if(Color==0) Color=Goldenrod;
Close_order1=OrderClose_v(ticket,volume_cl,Bid,30,Color);
Close_order2=OrderClose_v(opposite,volume_cl,Bid,30,Color);
if(Close_order1==TRUE && Close_order2==TRUE) CloseBy=TRUE;
if(Visualization)
{
double OrderProfit_r1=OrderProfit_Raschet(OrderType_v1[Pos_ticket], symbol_v1[Pos_ticket], volume_cl, OrderOpenPrice_v1[Pos_ticket], OrderClosePrice_v2[Pos_ticket]);
double AccountBalance_r1=AccountBalance_v[TS_num[Pos_ticket]]+OrderProfit_r1;
double Ord_prof=NormalizeDouble(OrderProfit_r1,2);
double AccountBal=NormalizeDouble(AccountBalance_r1,2);
if(File_Print)File_Save(TS_num[Pos_ticket], TimeCurrent(), "close by", ticket_v2[Pos_ticket], volume_cl, symbol_v2[Pos_ticket], Bid, stoploss_v2[Pos_ticket], takeprofit_v2[Pos_ticket] ,Ord_prof ,AccountBal );
double OrderProfit_r2=OrderProfit_Raschet(OrderType_v1[Pos_opposite], symbol_v1[Pos_opposite], volume_cl, OrderOpenPrice_v1[Pos_opposite], OrderClosePrice_v2[Pos_opposite]);
double AccountBalance_r2=AccountBalance_r1+OrderProfit_r2;
Ord_prof=NormalizeDouble(OrderProfit_r2,2);
AccountBal=NormalizeDouble(AccountBalance_r2,2);
if(File_Print)File_Save(TS_num[Pos_opposite], TimeCurrent(), "close by", ticket_v2[Pos_opposite], volume_cl, symbol_v2[Pos_opposite], Bid, stoploss_v2[Pos_opposite], takeprofit_v2[Pos_opposite] ,Ord_prof ,AccountBal );
}
return(CloseBy);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderDelete" |
//+------------------------------------------------------------------+
bool OrderDelete_v( int ticket, color arrow_color=0, int TS_number2=0)
{
int cikl1,cikl2,POS_v3;
bool OrderDel=FALSE;
string Name_Del,Name_Del_Line,Type_print;
if(TS_number2!=0) TS_number=TS_number2;
//-- Îáðàáîòêà îøèáîê
if(ticket==0) { last_error_v=4051; return(OrderDel); }
//-------------------
if(OrderTicket_v==ticket && ticket_v1[POS_slkt]==ticket && TS_number==TS_num[POS_slkt]) cikl1=POS_slkt;
else
{
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersTotal_v[TS_number]==0 || cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v1[cikl1]==ticket) break;
}
}
if(ticket_v1[cikl1]==ticket)
{
//-- Îáðàáîòêà îøèáîê
if(OrderType_v1[cikl1]<2) { last_error_v=4108; return(OrderDel); }
//-------------------
ticket_v2[POS_v2]=ticket_v1[cikl1];
symbol_v2[POS_v2]=symbol_v1[cikl1];
OrderType_v2[POS_v2]=OrderType_v1[cikl1];
volume_v2[POS_v2]=volume_v1[cikl1];
comment_v2[POS_v2]=comment_v1[cikl1];
magic_v2[POS_v2]=magic_v1[cikl1];
OrderOpenTime_v2[POS_v2]=OrderOpenTime_v1[cikl1];
OrderOpenPrice_v2[POS_v2]=OrderOpenPrice_v1[cikl1];
stoploss_v2[POS_v2]=stoploss_v1[cikl1];
takeprofit_v2[POS_v2]=takeprofit_v1[cikl1];
OrderCloseTime_v2[POS_v2]=TimeCurrent();
OrderClosePrice_v2[POS_v2]=0;
OrderProfit_v2[POS_v2]=0;
if(OrderType_v1[cikl1]==2) Type_print=" buy limit ";
if(OrderType_v1[cikl1]==3) Type_print=" sell limit ";
if(OrderType_v1[cikl1]==4) Type_print=" buy stop ";
if(OrderType_v1[cikl1]==5) Type_print=" sell stop ";
if(Visualization)
{
if(Jurnal_Print)Print("delete #",ticket_v1[cikl1],Type_print,volume_v1[cikl1]," ",symbol_v1[cikl1]," at ",OrderOpenPrice_v1[cikl1]," sl: ",stoploss_v1[cikl1]," tp: ",takeprofit_v1[cikl1]," ok");
if(File_Print)File_Save(TS_num[cikl1], OrderCloseTime_v2[POS_v2], "delete", ticket_v2[POS_v2], volume_v2[POS_v2], symbol_v2[POS_v2], OrderOpenPrice_v2[POS_v2], stoploss_v2[POS_v2], takeprofit_v2[POS_v2] );
if(arrow_color==0) arrow_color=Black;
Name_Del=DoubleToStr(ticket_v2[POS_v2], 0)+"delete";
ObjectCreate(Name_Del, OBJ_ARROW, 0, OrderCloseTime_v2[POS_v2], OrderOpenPrice_v1[cikl1]);
ObjectSet(Name_Del, OBJPROP_ARROWCODE, 3);
ObjectSet(Name_Del, OBJPROP_COLOR, arrow_color);
Name_Del_Line=DoubleToStr(ticket_v2[POS_v2], 0)+"delete_Line";
ObjectCreate(Name_Del_Line, OBJ_TREND, 0, OrderOpenTime_v2[POS_v2], OrderOpenPrice_v2[POS_v2], OrderCloseTime_v2[POS_v2], OrderOpenPrice_v2[POS_v2]);
ObjectSet(Name_Del_Line, OBJPROP_RAY, False);
ObjectSet(Name_Del_Line, OBJPROP_STYLE, 2);
ObjectSet(Name_Del_Line, OBJPROP_COLOR, Color_v1[cikl1]);
ObjectDelete(Visual_Loss[cikl1]);
ObjectDelete(Visual_Profit[cikl1]);
ObjectDelete(Visual_Open[cikl1]);
WindowRedraw();
}
ticket_v1[cikl1]=0;
POS_Svobodn[POS_Svob]=cikl1;
Vsego_POS_Svob++;
POS_Svob++;
if(POS_Svob==1000) POS_Svob=0;
POS_v2++;
if(POS_v2==1000) POS_v2=0;
OrdersTotal_v[TS_number]--;
OrdersHistoryTotal_v[TS_number]++;
if(OrdersHistoryTotal_v[TS_number]>1000) OrdersHistoryTotal_v[TS_number]=1000;
}
if(Visualization)
{
if(Vsego_POS_Svob>0)
{
cikl1=POS_Svob;
while(true)
{
if(cikl2==Vsego_POS_Svob) break;
cikl2++;
if(cikl1==0) cikl1=999;
else cikl1--;
POS_v3=POS_Svobodn[cikl1];
ObjectDelete(Visual_Loss[POS_v3]);
ObjectDelete(Visual_Profit[POS_v3]);
ObjectDelete(Visual_Open[POS_v3]);
}
}
WindowRedraw();
}
return(OrderDel);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderModify" |
//+------------------------------------------------------------------+
bool OrderModify_v( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=0 )
{
int cikl1,STOPLEVEL;
bool OrderMod=FALSE;
string Type_print;
//-- Îáðàáîòêà îøèáîê
if(ticket==0) { last_error_v=4051; return(OrderMod); }
//-------------------
if(OrderTicket_v==ticket && ticket_v1[POS_slkt]==ticket && TS_number==TS_num[POS_slkt]) cikl1=POS_slkt;
else
{
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersTotal_v[TS_number]==0 || cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v1[cikl1]==ticket) break;
}
}
if(ticket_v1[cikl1]==ticket)
{
STOPLEVEL=MarketInfo(symbol_v1[cikl1],MODE_STOPLEVEL);
//- Print("Îòëàäêà: STOPLEVEL = ",STOPLEVEL);
if(OrderType_v1[cikl1]<2)
{
if(price!=OrderOpenPrice_v1[cikl1]) { last_error_v=3; return(OrderMod); }
if(OrderType_v1[cikl1]==0)
{
if(stoploss>Bid-STOPLEVEL*Point && stoploss>0 && stoploss!=stoploss_v1[cikl1]) { last_error_v=130; return(OrderMod); }
if(takeprofit<Bid+STOPLEVEL*Point && takeprofit>0 && takeprofit!=takeprofit_v1[cikl1]) { last_error_v=130; return(OrderMod); }
}
if(OrderType_v1[cikl1]==1)
{
if(stoploss<Ask+STOPLEVEL*Point && stoploss>0 && stoploss!=stoploss_v1[cikl1]) { last_error_v=130; return(OrderMod); }
if(takeprofit>Ask-STOPLEVEL*Point && takeprofit>0 && takeprofit!=takeprofit_v1[cikl1]) { last_error_v=130; return(OrderMod); }
}
stoploss_v1[cikl1]=stoploss;
takeprofit_v1[cikl1]=takeprofit;
}
if(OrderType_v1[cikl1]>1)
{
if(OrderType_v1[cikl1]==2)
{
if(price>Ask-STOPLEVEL*Point || price==0) { last_error_v=130; return(OrderMod); }
if(stoploss>price-STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(OrderMod); }
if(takeprofit<price+STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(OrderMod); }
}
if(OrderType_v1[cikl1]==3)
{
if(price<Bid+STOPLEVEL*Point || price==0) { last_error_v=130; return(OrderMod); }
if(stoploss<price+STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(OrderMod); }
if(takeprofit>price-STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(OrderMod); }
}
if(OrderType_v1[cikl1]==4)
{
if(price<Ask+STOPLEVEL*Point || price==0) { last_error_v=130; return(OrderMod); }
if(stoploss<price+STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(OrderMod); }
if(takeprofit>price-STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(OrderMod); }
}
if(OrderType_v1[cikl1]==5)
{
if(price>Bid-STOPLEVEL*Point || price==0) { last_error_v=130; return(OrderMod); }
if(stoploss>price-STOPLEVEL*Point && stoploss>0) { last_error_v=130; return(OrderMod); }
if(takeprofit<price+STOPLEVEL*Point && takeprofit>0) { last_error_v=130; return(OrderMod); }
}
if(expiration<TimeCurrent()+600 && expiration>0) { last_error_v=3; return(OrderMod); }
OrderOpenPrice_v1[cikl1]=price;
stoploss_v1[cikl1]=stoploss;
takeprofit_v1[cikl1]=takeprofit;
expiration_v1[cikl1]=expiration;
}
if(Visualization)
{
ObjectSet(Visual_Open[cikl1], 1, OrderOpenPrice_v1[cikl1]);
ObjectSet(Visual_Open[cikl1], 3, OrderOpenPrice_v1[cikl1]);
ObjectSet(Visual_Loss[cikl1], 1, stoploss_v1[cikl1]);
ObjectSet(Visual_Loss[cikl1], 3, stoploss_v1[cikl1]);
ObjectSet(Visual_Profit[cikl1], 1, takeprofit_v1[cikl1]);
ObjectSet(Visual_Profit[cikl1], 3, takeprofit_v1[cikl1]);
if(OrderType_v1[cikl1]==0) Type_print=" buy ";
if(OrderType_v1[cikl1]==1) Type_print=" sell ";
if(OrderType_v1[cikl1]==2) Type_print=" buy limit ";
if(OrderType_v1[cikl1]==3) Type_print=" sell limit ";
if(OrderType_v1[cikl1]==4) Type_print=" buy stop ";
if(OrderType_v1[cikl1]==5) Type_print=" sell stop ";
if(Jurnal_Print)Print("modify #",ticket_v1[cikl1],Type_print,volume_v1[cikl1]," ",symbol_v1[cikl1]," at ",OrderOpenPrice_v1[cikl1]," sl: ",stoploss_v1[cikl1]," tp: ",takeprofit_v1[cikl1]," ok");
if(File_Print)File_Save(TS_num[cikl1], TimeCurrent(), "modify", ticket_v1[cikl1], volume_v1[cikl1], symbol_v1[cikl1], OrderOpenPrice_v1[cikl1], stoploss_v1[cikl1], takeprofit_v1[cikl1]);
}
OrderMod=TRUE;
}
return(OrderMod);
}
//-------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Âèðòóàëüíàÿ ôóíêöèÿ "OrderSelect" |
//+------------------------------------------------------------------+
bool OrderSelect_v( int index, int select, int pool=0 )
{
int cikl1,cikl2,start1,finish1;
bool OrderSlct=FALSE;
if(select==SELECT_BY_POS)
{
if(pool==MODE_TRADES)
{
if(index<=OrdersTotal_v[TS_number]/2)
{
for(cikl1=0;cikl1<POS_v1;cikl1++)
{
if(OrdersTotal_v[TS_number]==0) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(cikl2==index) { OrderSlct=TRUE; break; }
cikl2++;
}
}
else
{
cikl2=OrdersTotal_v[TS_number]-1;
for(cikl1=POS_v1-1;cikl1>=0;cikl1--)
{
if(OrdersTotal_v[TS_number]==0 || cikl1<0) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(cikl2==index) { OrderSlct=TRUE; break; }
cikl2--;
}
}
if(OrderSlct)
{
OrderTicket_v=ticket_v1[cikl1];
OrderSymbol_v=symbol_v1[cikl1];
OrderType_v=OrderType_v1[cikl1];
OrderLots_v=volume_v1[cikl1];
OrderComment_v=comment_v1[cikl1];
OrderMagicNumber_v=magic_v1[cikl1];
OrderOpenTime_v=OrderOpenTime_v1[cikl1];
OrderOpenPrice_v=OrderOpenPrice_v1[cikl1];
OrderStopLoss_v=stoploss_v1[cikl1];
OrderTakeProfit_v=takeprofit_v1[cikl1];
OrderCloseTime_v=0;
OrderClosePrice_v=0;
OrderProfit_v=OrderProfit_v1[cikl1];
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v="...";
OrderSwap_v=0;
POS_slkt=cikl1;
}
else
{
OrderTicket_v=0;
OrderSymbol_v=NULL;
OrderType_v=0;
OrderLots_v=0;
OrderComment_v=NULL;
OrderMagicNumber_v=0;
OrderOpenTime_v=0;
OrderOpenPrice_v=0;
OrderStopLoss_v=0;
OrderTakeProfit_v=0;
OrderCloseTime_v=0;
OrderClosePrice_v=0;
OrderProfit_v=0;
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v=NULL;
OrderSwap_v=0;
last_error_v=0;
return(OrderSlct);
}
}
if(pool==MODE_HISTORY)
{
if(TS_Friendship==FALSE)
{
OrdersHistoryTotal_v[0]=0;
for(int cicl=1; cicl<=TS_SUM; cicl++) OrdersHistoryTotal_v[0]+=OrdersHistoryTotal_v[cicl];
}
if(index<=OrdersHistoryTotal_v[TS_number]/2)
{
finish1=POS_v2;
if(OrdersHistoryTotal_v[0]==1000 && POS_v2<999) { start1=POS_v2; finish1=1000; }
for(cikl1=start1;cikl1<finish1;cikl1++)
{
if(OrdersHistoryTotal_v[TS_number]==0) break;
if(ticket_v2[cikl1]==0 || TS_number!=TS_num[cikl1])
{
if(start1>0 && cikl1==finish1-1) { start1=0; cikl1=-1; finish1=POS_v2; }
continue;
}
if(cikl2==index) { OrderSlct=TRUE; break; }
cikl2++;
}
}
else
{
if(OrdersHistoryTotal_v[0]==1000 && POS_v2<999) start1=-10;
cikl2=OrdersHistoryTotal_v[TS_number]-1;
for(cikl1=POS_v2-1;cikl1>=finish1;cikl1--)
{
if(OrdersHistoryTotal_v[TS_number]==0 || cikl1<0) break;
if(ticket_v2[cikl1]==0 || TS_number!=TS_num[cikl1])
{
if(start1<0 && cikl1==finish1) { start1=10; cikl1=1000; finish1=POS_v2; }
continue;
}
if(cikl2==index) { OrderSlct=TRUE; break; }
cikl2--;
}
}
if(OrderSlct)
{
OrderTicket_v=ticket_v2[cikl1];
OrderSymbol_v=symbol_v2[cikl1];
OrderType_v=OrderType_v2[cikl1];
OrderLots_v=volume_v2[cikl1];
OrderComment_v=comment_v2[cikl1];
OrderMagicNumber_v=magic_v2[cikl1];
OrderOpenTime_v=OrderOpenTime_v2[cikl1];
OrderOpenPrice_v=OrderOpenPrice_v2[cikl1];
OrderStopLoss_v=stoploss_v2[cikl1];
OrderTakeProfit_v=takeprofit_v2[cikl1];
OrderCloseTime_v=OrderCloseTime_v2[cikl1];
OrderClosePrice_v=OrderClosePrice_v2[cikl1];
OrderProfit_v=OrderProfit_v2[cikl1];
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v="...";
OrderSwap_v=0;
POS_slkt=index;
}
else
{
OrderTicket_v=0;
OrderSymbol_v=NULL;
OrderType_v=0;
OrderLots_v=0;
OrderComment_v=NULL;
OrderMagicNumber_v=0;
OrderOpenTime_v=0;
OrderOpenPrice_v=0;
OrderStopLoss_v=0;
OrderTakeProfit_v=0;
OrderCloseTime_v=0;
OrderClosePrice_v=0;
OrderProfit_v=0;
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v=NULL;
OrderSwap_v=0;
last_error_v=0;
return(OrderSlct);
}
}
}
if(select==SELECT_BY_TICKET)
{
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersTotal_v[TS_number]==0 || cikl1==POS_v1) break;
if(ticket_v1[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v1[cikl1]==index) { OrderSlct=TRUE; break; }
}
if(OrderSlct)
{
OrderTicket_v=ticket_v1[cikl1];
OrderSymbol_v=symbol_v1[cikl1];
OrderType_v=OrderType_v1[cikl1];
OrderLots_v=volume_v1[cikl1];
OrderComment_v=comment_v1[cikl1];
OrderMagicNumber_v=magic_v1[cikl1];
OrderOpenTime_v=OrderOpenTime_v1[cikl1];
OrderOpenPrice_v=OrderOpenPrice_v1[cikl1];
OrderStopLoss_v=stoploss_v1[cikl1];
OrderTakeProfit_v=takeprofit_v1[cikl1];
OrderCloseTime_v=0;
OrderClosePrice_v=0;
OrderProfit_v=OrderProfit_v1[cikl1];
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v="...";
OrderSwap_v=0;
POS_slkt=cikl1;
}
else
{
for(cikl1=0;cikl1<1000;cikl1++)
{
if(OrdersHistoryTotal_v[TS_number]==0) break;
if(ticket_v2[cikl1]==0 || TS_number!=TS_num[cikl1]) continue;
if(ticket_v2[cikl1]==index) { OrderSlct=TRUE; break; }
}
if(OrderSlct)
{
OrderTicket_v=ticket_v2[cikl1];
OrderSymbol_v=symbol_v2[cikl1];
OrderType_v=OrderType_v2[cikl1];
OrderLots_v=volume_v2[cikl1];
OrderComment_v=comment_v2[cikl1];
OrderMagicNumber_v=magic_v2[cikl1];
OrderOpenTime_v=OrderOpenTime_v2[cikl1];
OrderOpenPrice_v=OrderOpenPrice_v2[cikl1];
OrderStopLoss_v=stoploss_v2[cikl1];
OrderTakeProfit_v=takeprofit_v2[cikl1];
OrderCloseTime_v=OrderCloseTime_v2[cikl1];
OrderClosePrice_v=OrderClosePrice_v2[cikl1];
OrderProfit_v=OrderProfit_v2[cikl1];
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v="...";
OrderSwap_v=0;
POS_slkt=cikl1;
}
else
{
OrderTicket_v=0;
OrderSymbol_v=NULL;
OrderType_v=0;
OrderLots_v=0;
OrderComment_v=NULL;
OrderMagicNumber_v=0;
OrderOpenTime_v=0;
OrderOpenPrice_v=0;
OrderStopLoss_v=0;
OrderTakeProfit_v=0;
OrderCloseTime_v=0;
OrderClosePrice_v=0;
OrderProfit_v=0;
OrderCommission_v=0;
OrderExpiration_v=0;
OrderPrint_v=NULL;
OrderSwap_v=0;
last_error_v=0;
return(OrderSlct);
}
}
}
last_error_v=0;
return(OrderSlct);
}
//-------------------------------------------------------------------------------------
//-- Ýòó ðàáîòó, ïðè íåîáõîäèìîñòè, ìîæíî åùå äîðîáàòûâàòü è äîðîáàòûâàòü.
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îáðàáîòêè îøèáîê |
//+------------------------------------------------------------------+
int Fun_Error(int Error) // Ô-èÿ îáðàáîò îøèáîê
{
switch(Error)
{ // Ïðåîäîëèìûå îøèáêè
case 4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..");
RefreshRates(); // Îáíîâèì äàííûå
return(1); // Âûõîä èç ôóíêöèè
case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..");
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(1); // Âûõîä èç ôóíêöèè
case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..");
Sleep(500); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
// Êðèòè÷åñêèå îøèáêè
case 2: Alert("Îáùàÿ îøèáêà.");
return(0); // Âûõîä èç ôóíêöèè
case 5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 64: Alert("Ñ÷åò çàáëîêèðîâàí.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 130:Alert("Íåïðàâåëüíûå ñòîïû.");
return(0); // Âûõîä èç ôóíêöèè
case 133:Alert("Òîðãîâëÿ çàïðåùåíà.");
return(0); // Âûõîä èç ôóíêöèè
case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.");
return(0); // Âûõîä èç ôóíêöèè
default: Alert("Âîçíèêëà îøèáêà ",Error); // Äðóãèå âàðèàíòû
return(0); // Âûõîä èç ôóíêöèè
}
if(Error==-10 && Error!=-10) //-- Ïóñòûøêè. ×òîáû íå áûëî ïðåäóïðåæäåíèé ïðè êîìïèëÿöèè êîäà, êîãäà â ìîäåëè èñïîëüçóþòñÿ íå âñå èìåþùèåñÿ ôóíêöèè.
{ //-- Íèêàãäà íå áóäåò çàïóùåíà òàê êàê ýòî óñëîâèå íå âûïîëíèìî, åñëè ÿ íå îøèáàþñü êîíå÷íî! :-)
GetLastError_v();
OrderSelect_v(0, 0, 0);
OrderModify_v(0,0,0,0,0,0);
OrderCloseBy_v( 0, 0, 0);
OrderClose_v(0,0,0,0,0);
OrderSend_v(0,0,0,0,0,0,0,0,0,0,0);
OrderDelete_v(0,0);
OrderSelect_v(0, 0, 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
---