Matrix_v1.31

Author: Copyright � 2009, Boris Sedov ( boris-sedov@yandex.ru ).
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersChecks for the total of closed orders
Indicators Used
Moving average indicatorParabolic Stop and Reverse system
Miscellaneous
Uses files from the file systemIt writes information to fileIt issuies visual alerts to the screen
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---